/**
 * Created by Institute for Medical Informatics (I4MI) - Department of Engineering and Information Technology - Bern University of Applied Science (BFH)
 * File generated on 2022-11-01T13:49:11.646Z
 * https://www.i4mi.ti.bfh.ch
 *
 *  Copyright 2023 Institute for Medical Informatics
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 */
/**
 * Primitive Type base64Binary
 * A stream of bytes, base64 encoded
 * A stream of bytes
 */
export type base64Binary = string;
/**
 * Primitive Type canonical
 * see [Canonical References](references.html#canonical)
 * A URI that is a reference to a canonical URL on a FHIR resource
 */
export type canonical = string;
/**
 * Primitive Type code
 * A string which has at least one character and no leading or trailing whitespace and where there is no whitespace other than single spaces in the contents
 */
export type code = string;
/**
 * Primitive Type date
 * A date or partial date (e.g. just year or year + month). There is no time zone. The format is a union of the schema types gYear, gYearMonth and date.  Dates SHALL be valid dates.
 */
export type date = string;
/**
 * Primitive Type dateTime
 * A date, date-time or partial date (e.g. just year or year + month).  If hours and minutes are specified, a time zone SHALL be populated. The format is a union of the schema types gYear, gYearMonth, date and dateTime. Seconds must be provided due to schema type constraints but may be zero-filled and may be ignored.                 Dates SHALL be valid dates.
 */
export type dateTime = string;
/**
 * Primitive Type decimal
 * Do not use an IEEE type floating point type, instead use something that works like a true decimal, with inbuilt precision (e.g. Java BigInteger)
 * A rational number with implicit precision
 */
export type decimal = number;
/**
 * Primitive Type id
 * RFC 4122
 * Any combination of letters, numerals, "-" and ".", with a length limit of 64 characters.  (This might be an integer, an unprefixed OID, UUID or any other identifier pattern that meets these constraints.)  Ids are case-insensitive.
 */
export type id = string;
/**
 * Primitive Type instant
 * Note: This is intended for where precisely observed times are required, typically system logs etc., and not human-reported times - for them, see date and dateTime (which can be as precise as instant, but is not required to be) below. Time zone is always required
 * An instant in time - known at least to the second
 */
export type instant = string;
/**
 * Primitive Type integer
 * 32 bit number; for values larger than this, use decimal
 * A whole number
 */
export type integer = number;
/**
 * Primitive Type markdown
 * Systems are not required to have markdown support, so the text should be readable without markdown processing. The markdown syntax is GFM - see https://github.github.com/gfm/
 * A string that may contain Github Flavored Markdown syntax for optional processing by a mark down presentation engine
 */
export type markdown = string;
/**
 * Primitive Type oid
 * RFC 3001. See also ISO/IEC 8824:1990 €
 * An OID represented as a URI
 */
export type oid = string;
/**
 * Primitive Type positiveInt
 * An integer with a value that is positive (e.g. >0)
 */
export type positiveInt = number;
/**
 * Primitive Type time
 * A time during the day, with no date specified
 */
export type time = string;
/**
 * Primitive Type unsignedInt
 * An integer with a value that is not negative (e.g. >= 0)
 */
export type unsignedInt = number;
/**
 * Primitive Type uri
 * see http://en.wikipedia.org/wiki/Uniform_resource_identifier
 * String of characters used to identify a name or a resource
 */
export type uri = string;
/**
 * Primitive Type url
 * A URI that is a literal reference
 */
export type url = string;
/**
 * Primitive Type uuid
 * See The Open Group, CDE 1.1 Remote Procedure Call specification, Appendix A.
 * A UUID, represented as a URI
 */
export type uuid = string;
/**
 * Primitive Type xhtml
 * XHTML
 */
export type xhtml = string;
/**
 * home | work | temp | old | billing - purpose of this address
 * The purpose of this address.
 * Applications can assume that an address is current unless it explicitly says that it is temporary or old.
 */
export declare enum AddressUse {
    HOME = "home",
    WORK = "work",
    TEMP = "temp",
    OLD = "old",
    BILLING = "billing"
}
/**
 * postal | physical | both
 * Distinguishes between physical addresses (those you can visit) and mailing addresses (e.g. PO Boxes and care-of addresses). Most addresses are both.
 * The definition of Address states that "address is intended to describe postal addresses, not physical locations". However, many applications track whether an address has a dual purpose of being a location that can be visited as well as being a valid delivery destination, and Postal addresses are often used as proxies for physical locations (also see the [Location](location.html#) resource).
 */
export declare enum AddressType {
    POSTAL = "postal",
    PHYSICAL = "physical",
    BOTH = "both"
}
/**
 * phone | fax | email | pager | url | sms | other
 * Telecommunications form for contact point - what communications system is required to make use of the contact.
 */
export declare enum ContactPointSystem {
    PHONE = "phone",
    FAX = "fax",
    EMAIL = "email",
    PAGER = "pager",
    URL = "url",
    SMS = "sms",
    OTHER = "other"
}
/**
 * home | work | temp | old | mobile - purpose of this contact point
 * Identifies the purpose for the contact point.
 * Applications can assume that a contact is current unless it explicitly says that it is temporary or old.
 */
export declare enum ContactPointUse {
    HOME = "home",
    WORK = "work",
    TEMP = "temp",
    OLD = "old",
    MOBILE = "mobile"
}
/**
 * author | editor | reviewer | endorser
 * The type of contributor.
 */
export declare enum ContributorType {
    AUTHOR = "author",
    EDITOR = "editor",
    REVIEWER = "reviewer",
    ENDORSER = "endorser"
}
/**
 * ascending | descending
 * The direction of the sort, ascending or descending.
 */
export declare enum DataRequirementSortDirection {
    ASCENDING = "ascending",
    DESCENDING = "descending"
}
/**
 * xmlAttr | xmlText | typeAttr | cdaText | xhtml
 * Codes that define how this element is represented in instances, when the deviation varies from the normal case.
 * In resources, this is rarely used except for special cases where the representation deviates from the normal, and can only be done in the base standard (and profiles must reproduce what the base standard does). This element is used quite commonly in Logical models when the logical models represent a specific serialization format (e.g. CDA, v2 etc.).
 */
export declare enum ElementDefinitionPropertyRepresentation {
    XMLATTR = "xmlAttr",
    XMLTEXT = "xmlText",
    TYPEATTR = "typeAttr",
    CDATEXT = "cdaText",
    XHTML = "xhtml"
}
/**
 * value | exists | pattern | type | profile
 * How the element value is interpreted when discrimination is evaluated.
 */
export declare enum ElementDefinitionDiscriminatorType {
    VALUE = "value",
    EXISTS = "exists",
    PATTERN = "pattern",
    TYPE = "type",
    PROFILE = "profile"
}
/**
 * closed | open | openAtEnd
 * 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.
 * Allowing additional elements makes for a much for flexible template - it's open for use in wider contexts, but also means that the content of the resource is not closed, and applications have to decide how to handle content not described by the profile.
 */
export declare enum ElementDefinitionSlicingRules {
    CLOSED = "closed",
    OPEN = "open",
    OPENATEND = "openAtEnd"
}
/**
 * contained | referenced | bundled - how aggregated
 * 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.
 * See [Aggregation Rules](elementdefinition.html#aggregation) for further clarification.
 */
export declare enum ElementDefinitionAggregationMode {
    CONTAINED = "contained",
    REFERENCED = "referenced",
    BUNDLED = "bundled"
}
/**
 * either | independent | specific
 * Whether this reference needs to be version specific or version independent, or whether either can be used.
 * The base specification never makes a rule as to which form is allowed, but implementation guides may do this. See [Aggregation Rules](elementdefinition.html#aggregation) for further clarification.
 */
export declare enum ElementDefinitionReferenceVersionRules {
    EITHER = "either",
    INDEPENDENT = "independent",
    SPECIFIC = "specific"
}
/**
 * error | warning
 * Identifies the impact constraint violation has on the conformance of the instance.
 * This allows constraints to be asserted as "shall" (error) and "should" (warning).
 */
export declare enum ElementDefinitionConstraintSeverity {
    ERROR = "error",
    WARNING = "warning"
}
/**
 * required | extensible | preferred | example
 * 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.
 * For further discussion, see [Using Terminologies](terminologies.html).
 */
export declare enum ElementDefinitionBindingStrength {
    REQUIRED = "required",
    EXTENSIBLE = "extensible",
    PREFERRED = "preferred",
    EXAMPLE = "example"
}
/**
 * text/cql | text/fhirpath | application/x-fhir-query | etc.
 * The media type of the language for the expression.
 */
export declare enum Expressionundefined {
    TEXT_CQL = "text/cql",
    TEXT_FHIRPATH = "text/fhirpath",
    APPLICATION_X_FHIR_QUERY = "application/x-fhir-query",
    ETC_ = "etc."
}
/**
 * usual | official | temp | nickname | anonymous | old | maiden
 * Identifies the purpose for this name.
 * Applications can assume that a name is current unless it explicitly says that it is temporary or old.
 */
export declare enum HumanNameNameUse {
    USUAL = "usual",
    OFFICIAL = "official",
    TEMP = "temp",
    NICKNAME = "nickname",
    ANONYMOUS = "anonymous",
    OLD = "old",
    MAIDEN = "maiden"
}
/**
 * usual | official | temp | secondary | old (If known)
 * The purpose of this identifier.
 * Applications can assume that an identifier is permanent unless it explicitly says that it is temporary.
 */
export declare enum IdentifierUse {
    USUAL = "usual",
    OFFICIAL = "official",
    TEMP = "temp",
    SECONDARY = "secondary",
    OLD = "old"
}
/**
 * generated | extensions | additional | empty
 * 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.
 */
export declare enum NarrativeStatus {
    GENERATED = "generated",
    EXTENSIONS = "extensions",
    ADDITIONAL = "additional",
    EMPTY = "empty"
}
/**
 * in | out
 * Whether the parameter is input or output for the module.
 */
export declare enum ParameterDefinitionParameterUse {
    IN = "in",
    OUT = "out"
}
/**
 * < | <= | >= | > - how to understand the value
 * 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.
 */
export declare enum QuantityComparator {
    LT = "<",
    LE = "<=",
    GE = ">=",
    GT = ">"
}
/**
 * documentation | justification | citation | predecessor | successor | derived-from | depends-on | composed-of
 * The type of relationship to the related artifact.
 */
export declare enum RelatedArtifactType {
    DOCUMENTATION = "documentation",
    JUSTIFICATION = "justification",
    CITATION = "citation",
    PREDECESSOR = "predecessor",
    SUCCESSOR = "successor",
    DERIVED_FROM = "derived-from",
    DEPENDS_ON = "depends-on",
    COMPOSED_OF = "composed-of"
}
/**
 * s | min | h | d | wk | mo | a - unit of time (UCUM)
 * The units of time for the duration, in UCUM units.
 */
export declare enum TimingUnitsOfTime {
    S = "s",
    MIN = "min",
    H = "h",
    D = "d",
    WK = "wk",
    MO = "mo",
    A = "a"
}
/**
 * mon | tue | wed | thu | fri | sat | sun
 * If one or more days of week is provided, then the action happens only on the specified day(s).
 * If no days are specified, the action is assumed to happen every day as otherwise specified. The elements frequency and period cannot be used as well as dayOfWeek.
 */
export declare enum TimingDayOfWeek {
    MON = "mon",
    TUE = "tue",
    WED = "wed",
    THU = "thu",
    FRI = "fri",
    SAT = "sat",
    SUN = "sun"
}
/**
 * named-event | periodic | data-changed | data-added | data-modified | data-removed | data-accessed | data-access-ended
 * The type of triggering event.
 */
export declare enum TriggerDefinitionTriggerType {
    NAMED_EVENT = "named-event",
    PERIODIC = "periodic",
    DATA_CHANGED = "data-changed",
    DATA_ADDED = "data-added",
    DATA_MODIFIED = "data-modified",
    DATA_REMOVED = "data-removed",
    DATA_ACCESSED = "data-accessed",
    DATA_ACCESS_ENDED = "data-access-ended"
}
/**
 * active | inactive | entered-in-error | on-hold | unknown
 * Indicates whether the account is presently used/usable or not.
 * This element is labeled as a modifier because the status contains the codes inactive and entered-in-error that mark the Account as not currently valid.
 */
export declare enum AccountStatus {
    ACTIVE = "active",
    INACTIVE = "inactive",
    ENTERED_IN_ERROR = "entered-in-error",
    ON_HOLD = "on-hold",
    UNKNOWN = "unknown"
}
/**
 * draft | active | retired | unknown
 * The status of this activity definition. Enables tracking the life-cycle of the content.
 * Allows filtering of activity definitions that are appropriate for use versus not.
 */
export declare enum ActivityDefinitionPublicationStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    RETIRED = "retired",
    UNKNOWN = "unknown"
}
/**
 * proposal | plan | directive | order | original-order | reflex-order | filler-order | instance-order | option
 * Indicates the level of authority/intentionality associated with the activity and where the request should fit into the workflow chain.
 */
export declare enum ActivityDefinitionRequestIntent {
    PROPOSAL = "proposal",
    PLAN = "plan",
    DIRECTIVE = "directive",
    ORDER = "order",
    ORIGINAL_ORDER = "original-order",
    REFLEX_ORDER = "reflex-order",
    FILLER_ORDER = "filler-order",
    INSTANCE_ORDER = "instance-order",
    OPTION = "option"
}
/**
 * routine | urgent | asap | stat
 * Indicates how quickly the activity  should be addressed with respect to other requests.
 */
export declare enum ActivityDefinitionRequestPriority {
    ROUTINE = "routine",
    URGENT = "urgent",
    ASAP = "asap",
    STAT = "stat"
}
/**
 * patient | practitioner | related-person | device
 * The type of participant in the action.
 */
export declare enum ActivityDefinitionActivityParticipantType {
    PATIENT = "patient",
    PRACTITIONER = "practitioner",
    RELATED_PERSON = "related-person",
    DEVICE = "device"
}
/**
 * actual | potential
 * Whether the event actually happened, or just had the potential to. Note that this is independent of whether anyone was affected or harmed or how severely.
 */
export declare enum AdverseEventActuality {
    ACTUAL = "actual",
    POTENTIAL = "potential"
}
/**
 * allergy | intolerance - Underlying mechanism (if known)
 * Identification of the underlying physiological mechanism for the reaction risk.
 * Allergic (typically immune-mediated) reactions have been traditionally regarded as an indicator for potential escalation to significant future risk. Contemporary knowledge suggests that some reactions previously thought to be immune-mediated are, in fact, non-immune, but in some cases can still pose a life threatening risk. It is acknowledged that many clinicians might not be in a position to distinguish the mechanism of a particular reaction. Often the term "allergy" is used rather generically and may overlap with the use of "intolerance" - in practice the boundaries between these two concepts might not be well-defined or understood. This data element is included nevertheless, because many legacy systems have captured this attribute. Immunologic testing may provide supporting evidence for the basis of the reaction and the causative substance, but no tests are 100% sensitive or specific for sensitivity to a particular substance. If, as is commonly the case, it is unclear whether the reaction is due to an allergy or an intolerance, then the type element should be omitted from the resource.
 */
export declare enum AllergyIntoleranceType {
    ALLERGY = "allergy",
    INTOLERANCE = "intolerance"
}
/**
 * food | medication | environment | biologic
 * Category of the identified substance.
 * This data element has been included because it is currently being captured in some clinical systems. This data can be derived from the substance where coding systems are used, and is effectively redundant in that situation.  When searching on category, consider the implications of AllergyIntolerance resources without a category.  For example, when searching on category = medication, medication allergies that don't have a category valued will not be returned.  Refer to [search](search.html) for more information on how to search category with a :missing modifier to get allergies that don't have a category.  Additionally, category should be used with caution because category can be subjective based on the sender.
 */
export declare enum AllergyIntoleranceCategory {
    FOOD = "food",
    MEDICATION = "medication",
    ENVIRONMENT = "environment",
    BIOLOGIC = "biologic"
}
/**
 * low | high | unable-to-assess
 * Estimate of the potential clinical harm, or seriousness, of the reaction to the identified substance.
 * The default criticality value for any propensity to an adverse reaction should be 'Low Risk', indicating at the very least a relative contraindication to deliberate or voluntary exposure to the substance. 'High Risk' is flagged if the clinician has identified a propensity for a more serious or potentially life-threatening reaction, such as anaphylaxis, and implies an absolute contraindication to deliberate or voluntary exposure to the substance. If this element is missing, the criticality is unknown (though it may be known elsewhere).  Systems that capture a severity at the condition level are actually representing the concept of criticality whereas the severity documented at the reaction level is representing the true reaction severity.  Existing systems that are capturing both condition criticality and reaction severity may use the term "severity" to represent both.  Criticality is the worst it could be in the future (i.e. situation-agnostic) whereas severity is situation-dependent.
 */
export declare enum AllergyIntoleranceCriticality {
    LOW = "low",
    HIGH = "high",
    UNABLE_TO_ASSESS = "unable-to-assess"
}
/**
 * mild | moderate | severe (of event as a whole)
 * Clinical assessment of the severity of the reaction event as a whole, potentially considering multiple different manifestations.
 * It is acknowledged that this assessment is very subjective. There may be some specific practice domains where objective scales have been applied. Objective scales can be included in this model as extensions.
 */
export declare enum AllergyIntoleranceSeverity {
    MILD = "mild",
    MODERATE = "moderate",
    SEVERE = "severe"
}
/**
 * proposed | pending | booked | arrived | fulfilled | cancelled | noshow | entered-in-error | checked-in | waitlist
 * 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.
 * If the Appointment's status is "cancelled" then all participants are expected to have their calendars released for the appointment period, and as such any Slots that were marked as BUSY can be re-set to FREE.

This element is labeled as a modifier because the status contains the code entered-in-error that mark the Appointment as not currently valid.
 */
export declare enum AppointmentStatus {
    PROPOSED = "proposed",
    PENDING = "pending",
    BOOKED = "booked",
    ARRIVED = "arrived",
    FULFILLED = "fulfilled",
    CANCELLED = "cancelled",
    NOSHOW = "noshow",
    ENTERED_IN_ERROR = "entered-in-error",
    CHECKED_IN = "checked-in",
    WAITLIST = "waitlist"
}
/**
 * required | optional | information-only
 * Whether this participant is required to be present at the meeting. This covers a use-case where two doctors need to meet to discuss the results for a specific patient, and the patient is not required to be present.
 */
export declare enum AppointmentParticipantRequired {
    REQUIRED = "required",
    OPTIONAL = "optional",
    INFORMATION_ONLY = "information-only"
}
/**
 * accepted | declined | tentative | needs-action
 * Participation status of the actor.
 */
export declare enum AppointmentParticipationStatus {
    ACCEPTED = "accepted",
    DECLINED = "declined",
    TENTATIVE = "tentative",
    NEEDS_ACTION = "needs-action"
}
/**
 * accepted | declined | tentative | needs-action
 * 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.
 * This element is labeled as a modifier because the status contains the code entered-in-error that marks the participant as not currently valid.
 */
export declare enum AppointmentResponseParticipantStatus {
    ACCEPTED = "accepted",
    DECLINED = "declined",
    TENTATIVE = "tentative",
    NEEDS_ACTION = "needs-action"
}
/**
 * organ | tissue | fluid | cells | biologicalAgent
 * Broad category of this product.
 */
export declare enum BiologicallyDerivedProductCategory {
    ORGAN = "organ",
    TISSUE = "tissue",
    FLUID = "fluid",
    CELLS = "cells",
    BIOLOGICALAGENT = "biologicalAgent"
}
/**
 * available | unavailable
 * Whether the product is currently available.
 */
export declare enum BiologicallyDerivedProductStatus {
    AVAILABLE = "available",
    UNAVAILABLE = "unavailable"
}
/**
 * farenheit | celsius | kelvin
 * Temperature scale used.
 */
export declare enum BiologicallyDerivedProductStorageScale {
    FARENHEIT = "farenheit",
    CELSIUS = "celsius",
    KELVIN = "kelvin"
}
/**
 * document | message | transaction | transaction-response | batch | batch-response | history | searchset | collection
 * Indicates the purpose of this bundle - how it is intended to be used.
 * It's possible to use a bundle for other purposes (e.g. a document can be accepted as a transaction). This is primarily defined so that there can be specific rules for some of the bundle types.
 */
export declare enum BundleType {
    DOCUMENT = "document",
    MESSAGE = "message",
    TRANSACTION = "transaction",
    TRANSACTION_RESPONSE = "transaction-response",
    BATCH = "batch",
    BATCH_RESPONSE = "batch-response",
    HISTORY = "history",
    SEARCHSET = "searchset",
    COLLECTION = "collection"
}
/**
 * match | include | outcome - why this is in the result set
 * Why this entry is in the result set - whether it's included as a match or because of an _include requirement, or to convey information or warning information about the search process.
 * There is only one mode. In some corner cases, a resource may be included because it is both a match and an include. In these circumstances, 'match' takes precedence.
 */
export declare enum BundleSearchEntryMode {
    MATCH = "match",
    INCLUDE = "include",
    OUTCOME = "outcome"
}
/**
 * GET | HEAD | POST | PUT | DELETE | PATCH
 * In a transaction or batch, this is the HTTP action to be executed for this entry. In a history bundle, this indicates the HTTP action that occurred.
 */
export declare enum BundleHTTPVerb {
    GET = "GET",
    HEAD = "HEAD",
    POST = "POST",
    PUT = "PUT",
    DELETE = "DELETE",
    PATCH = "PATCH"
}
/**
 * draft | active | retired | unknown
 * The status of this capability statement. Enables tracking the life-cycle of the content.
 * Allows filtering of capability statements that are appropriate for use versus not.This is not intended for use with actual capability statements, but where capability statements are used to describe possible or desired systems.
 */
export declare enum CapabilityStatementPublicationStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    RETIRED = "retired",
    UNKNOWN = "unknown"
}
/**
 * instance | capability | requirements
 * 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).
 */
export declare enum CapabilityStatementKind {
    INSTANCE = "instance",
    CAPABILITY = "capability",
    REQUIREMENTS = "requirements"
}
/**
 * client | server
 * Identifies whether this portion of the statement is describing the ability to initiate or receive restful operations.
 */
export declare enum CapabilityStatementRestfulCapabilityMode {
    CLIENT = "client",
    SERVER = "server"
}
/**
 * read | vread | update | patch | delete | history-instance | history-type | create | search-type
 * Coded identifier of the operation, supported by the system resource.
 */
export declare enum CapabilityStatementTypeRestfulInteraction {
    READ = "read",
    VREAD = "vread",
    UPDATE = "update",
    PATCH = "patch",
    DELETE = "delete",
    HISTORY_INSTANCE = "history-instance",
    HISTORY_TYPE = "history-type",
    CREATE = "create",
    SEARCH_TYPE = "search-type"
}
/**
 * no-version | versioned | versioned-update
 * 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.
 * If a server supports versionIds correctly, it SHOULD support vread too, but is not required to do so.
 */
export declare enum CapabilityStatementResourceVersionPolicy {
    NO_VERSION = "no-version",
    VERSIONED = "versioned",
    VERSIONED_UPDATE = "versioned-update"
}
/**
 * not-supported | modified-since | not-match | full-support
 * A code that indicates how the server supports conditional read.
 * Conditional Read is mainly appropriate for interface engine scripts converting from other formats, such as v2.
 */
export declare enum CapabilityStatementConditionalReadStatus {
    NOT_SUPPORTED = "not-supported",
    MODIFIED_SINCE = "modified-since",
    NOT_MATCH = "not-match",
    FULL_SUPPORT = "full-support"
}
/**
 * not-supported | single | multiple - how conditional delete is supported
 * A code that indicates how the server supports conditional delete.
 * Conditional Delete is mainly appropriate for interface engine scripts converting from other formats, such as v2.
 */
export declare enum CapabilityStatementConditionalDeleteStatus {
    NOT_SUPPORTED = "not-supported",
    SINGLE = "single",
    MULTIPLE = "multiple"
}
/**
 * literal | logical | resolves | enforced | local
 * A set of flags that defines how references are supported.
 */
export declare enum CapabilityStatementReferenceHandlingPolicy {
    LITERAL = "literal",
    LOGICAL = "logical",
    RESOLVES = "resolves",
    ENFORCED = "enforced",
    LOCAL = "local"
}
/**
 * number | date | string | token | reference | composite | quantity | uri | special
 * The type of value a search parameter refers to, and how the content is interpreted.
 * While this can be looked up from the definition, it is included here as a convenience for systems that autogenerate a query interface based on the server capability statement.  It SHALL be the same as the type in the search parameter definition.
 */
export declare enum CapabilityStatementSearchParamType {
    NUMBER = "number",
    DATE = "date",
    STRING = "string",
    TOKEN = "token",
    REFERENCE = "reference",
    COMPOSITE = "composite",
    QUANTITY = "quantity",
    URI = "uri",
    SPECIAL = "special"
}
/**
 * transaction | batch | search-system | history-system
 * A coded identifier of the operation, supported by the system.
 */
export declare enum CapabilityStatementSystemRestfulInteraction {
    TRANSACTION = "transaction",
    BATCH = "batch",
    SEARCH_SYSTEM = "search-system",
    HISTORY_SYSTEM = "history-system"
}
/**
 * sender | receiver
 * The mode of this event declaration - whether application is sender or receiver.
 */
export declare enum CapabilityStatementEventCapabilityMode {
    SENDER = "sender",
    RECEIVER = "receiver"
}
/**
 * producer | consumer
 * Mode of this document declaration - whether an application is a producer or consumer.
 */
export declare enum CapabilityStatementDocumentMode {
    PRODUCER = "producer",
    CONSUMER = "consumer"
}
/**
 * draft | active | on-hold | revoked | completed | entered-in-error | unknown
 * Indicates whether the plan is currently being acted upon, represents future intentions or is now a historical record.
 * The unknown code is not to be used to convey other statuses.  The unknown code should be used when one of the statuses applies, but the authoring system doesn't know the current state of the care plan.

This element is labeled as a modifier because the status contains the code entered-in-error that marks the plan as not currently valid.
 */
export declare enum CarePlanStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    ON_HOLD = "on-hold",
    REVOKED = "revoked",
    COMPLETED = "completed",
    ENTERED_IN_ERROR = "entered-in-error",
    UNKNOWN = "unknown"
}
/**
 * proposal | plan | order | option
 * Indicates the level of authority/intentionality associated with the care plan and where the care plan fits into the workflow chain.
 * This element is labeled as a modifier because the intent alters when and how the resource is actually applicable.
 */
export declare enum CarePlanIntent {
    PROPOSAL = "proposal",
    PLAN = "plan",
    ORDER = "order",
    OPTION = "option"
}
/**
 * Appointment | CommunicationRequest | DeviceRequest | MedicationRequest | NutritionOrder | Task | ServiceRequest | VisionPrescription
 * A description of the kind of resource the in-line definition of a care plan activity is representing.  The CarePlan.activity.detail is an in-line definition when a resource is not referenced using CarePlan.activity.reference.  For example, a MedicationRequest, a ServiceRequest, or a CommunicationRequest.
 */
export declare enum CarePlanActivityKind {
    APPOINTMENT = "Appointment",
    COMMUNICATIONREQUEST = "CommunicationRequest",
    DEVICEREQUEST = "DeviceRequest",
    MEDICATIONREQUEST = "MedicationRequest",
    NUTRITIONORDER = "NutritionOrder",
    TASK = "Task",
    SERVICEREQUEST = "ServiceRequest",
    VISIONPRESCRIPTION = "VisionPrescription"
}
/**
 * not-started | scheduled | in-progress | on-hold | completed | cancelled | stopped | unknown | entered-in-error
 * Identifies what progress is being made for the specific activity.
 * Some aspects of status can be inferred based on the resources linked in actionTaken.  Note that "status" is only as current as the plan was most recently updated.
The unknown code is not to be used to convey other statuses.  The unknown code should be used when one of the statuses applies, but the authoring system doesn't know the current state of the activity.
 */
export declare enum CarePlanActivityStatus {
    NOT_STARTED = "not-started",
    SCHEDULED = "scheduled",
    IN_PROGRESS = "in-progress",
    ON_HOLD = "on-hold",
    COMPLETED = "completed",
    CANCELLED = "cancelled",
    STOPPED = "stopped",
    UNKNOWN = "unknown",
    ENTERED_IN_ERROR = "entered-in-error"
}
/**
 * proposed | active | suspended | inactive | entered-in-error
 * Indicates the current state of the care team.
 * This element is labeled as a modifier because the status contains the code entered-in-error that marks the care team as not currently valid.
 */
export declare enum CareTeamStatus {
    PROPOSED = "proposed",
    ACTIVE = "active",
    SUSPENDED = "suspended",
    INACTIVE = "inactive",
    ENTERED_IN_ERROR = "entered-in-error"
}
/**
 * draft | active | retired | unknown
 * Used to support catalog exchange even for unsupported products, e.g. getting list of medications even if not prescribable.
 */
export declare enum CatalogEntryPublicationStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    RETIRED = "retired",
    UNKNOWN = "unknown"
}
/**
 * triggers | is-replaced-by
 * The type of relation to the related item: child, parent, packageContent, containerPackage, usedIn, uses, requires, etc.
 */
export declare enum CatalogEntryRelationType {
    TRIGGERS = "triggers",
    IS_REPLACED_BY = "is-replaced-by"
}
/**
 * planned | billable | not-billable | aborted | billed | entered-in-error | unknown
 * The current state of the ChargeItem.
 * Unknown does not represent "other" - one of the defined statuses must apply.  Unknown is used when the authoring system is not sure what the current status is.

This element is labeled as a modifier because the status contains the code entered-in-error that marks the charge item as not currently valid.
 */
export declare enum ChargeItemStatus {
    PLANNED = "planned",
    BILLABLE = "billable",
    NOT_BILLABLE = "not-billable",
    ABORTED = "aborted",
    BILLED = "billed",
    ENTERED_IN_ERROR = "entered-in-error",
    UNKNOWN = "unknown"
}
/**
 * draft | active | retired | unknown
 * The current state of the ChargeItemDefinition.
 * Allows filtering of charge item definitions that are appropriate for use versus not.
 */
export declare enum ChargeItemDefinitionPublicationStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    RETIRED = "retired",
    UNKNOWN = "unknown"
}
/**
 * base | surcharge | deduction | discount | tax | informational
 * This code identifies the type of the component.
 */
export declare enum ChargeItemDefinitionPriceComponentType {
    BASE = "base",
    SURCHARGE = "surcharge",
    DEDUCTION = "deduction",
    DISCOUNT = "discount",
    TAX = "tax",
    INFORMATIONAL = "informational"
}
/**
 * active | cancelled | draft | entered-in-error
 * The status of the resource instance.
 * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
 */
export declare enum ClaimStatus {
    ACTIVE = "active",
    CANCELLED = "cancelled",
    DRAFT = "draft",
    ENTERED_IN_ERROR = "entered-in-error"
}
/**
 * claim | preauthorization | predetermination
 * A code to indicate whether the nature of the request is: to request adjudication of products and services previously rendered; or requesting authorization and adjudication for provision in the future; or requesting the non-binding adjudication of the listed products and services which could be provided in the future.
 */
export declare enum ClaimUse {
    CLAIM = "claim",
    PREAUTHORIZATION = "preauthorization",
    PREDETERMINATION = "predetermination"
}
/**
 * active | cancelled | draft | entered-in-error
 * The status of the resource instance.
 * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
 */
export declare enum ClaimResponseStatus {
    ACTIVE = "active",
    CANCELLED = "cancelled",
    DRAFT = "draft",
    ENTERED_IN_ERROR = "entered-in-error"
}
/**
 * claim | preauthorization | predetermination
 * A code to indicate whether the nature of the request is: to request adjudication of products and services previously rendered; or requesting authorization and adjudication for provision in the future; or requesting the non-binding adjudication of the listed products and services which could be provided in the future.
 */
export declare enum ClaimResponseUse {
    CLAIM = "claim",
    PREAUTHORIZATION = "preauthorization",
    PREDETERMINATION = "predetermination"
}
/**
 * queued | complete | error | partial
 * The outcome of the claim, predetermination, or preauthorization processing.
 * The resource may be used to indicate that: the request has been held (queued) for processing; that it has been processed and errors found (error); that no errors were found and that some of the adjudication has been undertaken (partial) or that all of the adjudication has been undertaken (complete).
 */
export declare enum ClaimResponseRemittanceOutcome {
    QUEUED = "queued",
    COMPLETE = "complete",
    ERROR = "error",
    PARTIAL = "partial"
}
/**
 * display | print | printoper
 * The business purpose of the note text.
 */
export declare enum ClaimResponseNoteType {
    DISPLAY = "display",
    PRINT = "print",
    PRINTOPER = "printoper"
}
/**
 * in-progress | completed | entered-in-error
 * Identifies the workflow status of the assessment.
 * This element is labeled as a modifier because the status contains the code entered-in-error that marks the clinical impression as not currently valid.
 */
export declare enum ClinicalImpressionStatus {
    IN_PROGRESS = "in-progress",
    COMPLETED = "completed",
    ENTERED_IN_ERROR = "entered-in-error"
}
/**
 * draft | active | retired | unknown
 * The date (and optionally time) when the code system resource was created or revised.
 * Allows filtering of code systems that are appropriate for use versus not.
 */
export declare enum CodeSystemPublicationStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    RETIRED = "retired",
    UNKNOWN = "unknown"
}
/**
 * grouped-by | is-a | part-of | classified-with
 * The meaning of the hierarchy of concepts as represented in this resource.
 * Note that other representations might have a different hierarchy or none at all, and represent the information using properties.
 */
export declare enum CodeSystemHierarchyMeaning {
    GROUPED_BY = "grouped-by",
    IS_A = "is-a",
    PART_OF = "part-of",
    CLASSIFIED_WITH = "classified-with"
}
/**
 * not-present | example | fragment | complete | supplement
 * The extent of the content of the code system (the concepts and codes it defines) are represented in this resource instance.
 */
export declare enum CodeSystemContentMode {
    NOT_PRESENT = "not-present",
    EXAMPLE = "example",
    FRAGMENT = "fragment",
    COMPLETE = "complete",
    SUPPLEMENT = "supplement"
}
/**
 * = | is-a | descendent-of | is-not-a | regex | in | not-in | generalizes | exists
 * A list of operators that can be used with the filter.
 */
export declare enum CodeSystemFilterOperator {
    E = "=",
    IS_A = "is-a",
    DESCENDENT_OF = "descendent-of",
    IS_NOT_A = "is-not-a",
    REGEX = "regex",
    IN = "in",
    NOT_IN = "not-in",
    GENERALIZES = "generalizes",
    EXISTS = "exists"
}
/**
 * code | Coding | string | integer | boolean | dateTime | decimal
 * The type of the property value. Properties of type "code" contain a code defined by the code system (e.g. a reference to another defined concept).
 */
export declare enum CodeSystemPropertyType {
    CODE = "code",
    CODING = "Coding",
    STRING = "string",
    INTEGER = "integer",
    BOOLEAN = "boolean",
    DATETIME = "dateTime",
    DECIMAL = "decimal"
}
/**
 * preparation | in-progress | not-done | on-hold | stopped | completed | entered-in-error | unknown
 * The status of the transmission.
 * This element is labeled as a modifier because the status contains the codes aborted and entered-in-error that mark the communication as not currently valid.
 */
export declare enum CommunicationStatus {
    PREPARATION = "preparation",
    IN_PROGRESS = "in-progress",
    NOT_DONE = "not-done",
    ON_HOLD = "on-hold",
    STOPPED = "stopped",
    COMPLETED = "completed",
    ENTERED_IN_ERROR = "entered-in-error",
    UNKNOWN = "unknown"
}
/**
 * routine | urgent | asap | stat
 * Characterizes how quickly the planned or in progress communication must be addressed. Includes concepts such as stat, urgent, routine.
 * Used to prioritize workflow (such as which communication to read first) when the communication is planned or in progress.
 */
export declare enum CommunicationPriority {
    ROUTINE = "routine",
    URGENT = "urgent",
    ASAP = "asap",
    STAT = "stat"
}
/**
 * draft | active | on-hold | revoked | completed | entered-in-error | unknown
 * The status of the proposal or order.
 */
export declare enum CommunicationRequestStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    ON_HOLD = "on-hold",
    REVOKED = "revoked",
    COMPLETED = "completed",
    ENTERED_IN_ERROR = "entered-in-error",
    UNKNOWN = "unknown"
}
/**
 * routine | urgent | asap | stat
 * Characterizes how quickly the proposed act must be initiated. Includes concepts such as stat, urgent, routine.
 */
export declare enum CommunicationRequestCommunicationPriority {
    ROUTINE = "routine",
    URGENT = "urgent",
    ASAP = "asap",
    STAT = "stat"
}
/**
 * draft | active | retired | unknown
 * The status of this compartment definition. Enables tracking the life-cycle of the content.
 * Allows filtering of compartment definitions that are appropriate for use versus not.
 */
export declare enum CompartmentDefinitionPublicationStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    RETIRED = "retired",
    UNKNOWN = "unknown"
}
/**
 * Patient | Encounter | RelatedPerson | Practitioner | Device
 * Which compartment this definition describes.
 * Only the specification can define the compartments that can exist. Servers can choose to support them.
 */
export declare enum CompartmentDefinitionCompartmentType {
    PATIENT = "Patient",
    ENCOUNTER = "Encounter",
    RELATEDPERSON = "RelatedPerson",
    PRACTITIONER = "Practitioner",
    DEVICE = "Device"
}
/**
 * preliminary | final | amended | entered-in-error
 * The workflow/clinical status of this composition. The status is a marker for the clinical standing of the document.
 * If a composition is marked as withdrawn, the compositions/documents in the series, or data from the composition or document series, should never be displayed to a user without being clearly marked as untrustworthy. The flag "entered-in-error" is why this element is labeled as a modifier of other elements.

Some reporting work flows require that the original narrative of a final document never be altered; instead, only new narrative can be added. The composition resource has no explicit status for explicitly noting whether this business rule is in effect. This would be handled by an extension if required.
 */
export declare enum CompositionStatus {
    PRELIMINARY = "preliminary",
    FINAL = "final",
    AMENDED = "amended",
    ENTERED_IN_ERROR = "entered-in-error"
}
/**
 * personal | professional | legal | official
 * The type of attestation the authenticator offers.
 */
export declare enum CompositionAttestationMode {
    PERSONAL = "personal",
    PROFESSIONAL = "professional",
    LEGAL = "legal",
    OFFICIAL = "official"
}
/**
 * replaces | transforms | signs | appends
 * The type of relationship that this composition has with anther composition or document.
 * If this document appends another document, then the document cannot be fully understood without also accessing the referenced document.
 */
export declare enum CompositionDocumentRelationshipType {
    REPLACES = "replaces",
    TRANSFORMS = "transforms",
    SIGNS = "signs",
    APPENDS = "appends"
}
/**
 * working | snapshot | changes
 * 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.
 * This element is labeled as a modifier because a change list must not be misunderstood as a complete list.
 */
export declare enum CompositionSectionMode {
    WORKING = "working",
    SNAPSHOT = "snapshot",
    CHANGES = "changes"
}
/**
 * draft | active | retired | unknown
 * The status of this concept map. Enables tracking the life-cycle of the content.
 * Allows filtering of concept maps that are appropriate for use versus not.
 */
export declare enum ConceptMapPublicationStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    RETIRED = "retired",
    UNKNOWN = "unknown"
}
/**
 * relatedto | equivalent | equal | wider | subsumes | narrower | specializes | inexact | unmatched | disjoint
 * 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).
 * This element is labeled as a modifier because it may indicate that a target does not apply.
 */
export declare enum ConceptMapEquivalence {
    RELATEDTO = "relatedto",
    EQUIVALENT = "equivalent",
    EQUAL = "equal",
    WIDER = "wider",
    SUBSUMES = "subsumes",
    NARROWER = "narrower",
    SPECIALIZES = "specializes",
    INEXACT = "inexact",
    UNMATCHED = "unmatched",
    DISJOINT = "disjoint"
}
/**
 * provided | fixed | other-map
 * Defines which action to take if there is no match for the source concept in the target system designated for the group. One of 3 actions are 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).
 */
export declare enum ConceptMapGroupUnmappedMode {
    PROVIDED = "provided",
    FIXED = "fixed",
    OTHER_MAP = "other-map"
}
/**
 * draft | proposed | active | rejected | inactive | entered-in-error
 * Indicates the current state of this consent.
 * This element is labeled as a modifier because the status contains the codes rejected and entered-in-error that mark the Consent as not currently valid.
 */
export declare enum ConsentState {
    DRAFT = "draft",
    PROPOSED = "proposed",
    ACTIVE = "active",
    REJECTED = "rejected",
    INACTIVE = "inactive",
    ENTERED_IN_ERROR = "entered-in-error"
}
/**
 * deny | permit
 * Action  to take - permit or deny - when the rule conditions are met.  Not permitted in root rule, required in all nested rules.
 */
export declare enum ConsentProvisionType {
    DENY = "deny",
    PERMIT = "permit"
}
/**
 * instance | related | dependents | authoredby
 * How the resource reference is interpreted when testing consent restrictions.
 */
export declare enum ConsentDataMeaning {
    INSTANCE = "instance",
    RELATED = "related",
    DEPENDENTS = "dependents",
    AUTHOREDBY = "authoredby"
}
/**
 * amended | appended | cancelled | disputed | entered-in-error | executable | executed | negotiable | offered | policy | rejected | renewed | revoked | resolved | terminated
 * The status of the resource instance.
 * This element is labeled as a modifier because the status contains codes that mark the contract as not currently valid or active.
 */
export declare enum ContractStatus {
    AMENDED = "amended",
    APPENDED = "appended",
    CANCELLED = "cancelled",
    DISPUTED = "disputed",
    ENTERED_IN_ERROR = "entered-in-error",
    EXECUTABLE = "executable",
    EXECUTED = "executed",
    NEGOTIABLE = "negotiable",
    OFFERED = "offered",
    POLICY = "policy",
    REJECTED = "rejected",
    RENEWED = "renewed",
    REVOKED = "revoked",
    RESOLVED = "resolved",
    TERMINATED = "terminated"
}
/**
 * amended | appended | cancelled | disputed | entered-in-error | executable | executed | negotiable | offered | policy | rejected | renewed | revoked | resolved | terminated
 * amended | appended | cancelled | disputed | entered-in-error | executable | executed | negotiable | offered | policy | rejected | renewed | revoked | resolved | terminated.
 */
export declare enum ContractPublicationStatus {
    AMENDED = "amended",
    APPENDED = "appended",
    CANCELLED = "cancelled",
    DISPUTED = "disputed",
    ENTERED_IN_ERROR = "entered-in-error",
    EXECUTABLE = "executable",
    EXECUTED = "executed",
    NEGOTIABLE = "negotiable",
    OFFERED = "offered",
    POLICY = "policy",
    REJECTED = "rejected",
    RENEWED = "renewed",
    REVOKED = "revoked",
    RESOLVED = "resolved",
    TERMINATED = "terminated"
}
/**
 * active | cancelled | draft | entered-in-error
 * The status of the resource instance.
 * This element is labeled as a modifier because the status contains the code entered-in-error that marks the coverage as not currently valid.
 */
export declare enum CoverageStatus {
    ACTIVE = "active",
    CANCELLED = "cancelled",
    DRAFT = "draft",
    ENTERED_IN_ERROR = "entered-in-error"
}
/**
 * active | cancelled | draft | entered-in-error
 * The status of the resource instance.
 * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
 */
export declare enum CoverageEligibilityRequestEligibilityRequestStatus {
    ACTIVE = "active",
    CANCELLED = "cancelled",
    DRAFT = "draft",
    ENTERED_IN_ERROR = "entered-in-error"
}
/**
 * auth-requirements | benefits | discovery | validation
 * Code to specify whether requesting: prior authorization requirements for some service categories or billing codes; benefits for coverages specified or discovered; discovery and return of coverages for the patient; and/or validation that the specified coverage is in-force at the date/period specified or 'now' if not specified.
 */
export declare enum CoverageEligibilityRequestEligibilityRequestPurpose {
    AUTH_REQUIREMENTS = "auth-requirements",
    BENEFITS = "benefits",
    DISCOVERY = "discovery",
    VALIDATION = "validation"
}
/**
 * active | cancelled | draft | entered-in-error
 * The status of the resource instance.
 * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
 */
export declare enum CoverageEligibilityResponseEligibilityResponseStatus {
    ACTIVE = "active",
    CANCELLED = "cancelled",
    DRAFT = "draft",
    ENTERED_IN_ERROR = "entered-in-error"
}
/**
 * auth-requirements | benefits | discovery | validation
 * Code to specify whether requesting: prior authorization requirements for some service categories or billing codes; benefits for coverages specified or discovered; discovery and return of coverages for the patient; and/or validation that the specified coverage is in-force at the date/period specified or 'now' if not specified.
 */
export declare enum CoverageEligibilityResponseEligibilityResponsePurpose {
    AUTH_REQUIREMENTS = "auth-requirements",
    BENEFITS = "benefits",
    DISCOVERY = "discovery",
    VALIDATION = "validation"
}
/**
 * queued | complete | error | partial
 * The outcome of the request processing.
 * The resource may be used to indicate that: the request has been held (queued) for processing; that it has been processed and errors found (error); that no errors were found and that some of the adjudication has been undertaken (partial) or that all of the adjudication has been undertaken (complete).
 */
export declare enum CoverageEligibilityResponseRemittanceOutcome {
    QUEUED = "queued",
    COMPLETE = "complete",
    ERROR = "error",
    PARTIAL = "partial"
}
/**
 * high | moderate | low
 * Indicates the degree of importance associated with the identified issue based on the potential impact on the patient.
 */
export declare enum DetectedIssueSeverity {
    HIGH = "high",
    MODERATE = "moderate",
    LOW = "low"
}
/**
 * active | inactive | entered-in-error | unknown
 * Status of the Device availability.
 * This element is labeled as a modifier because the status contains the codes inactive and entered-in-error that mark the device (record)as not currently valid.
 */
export declare enum DeviceFHIRDeviceStatus {
    ACTIVE = "active",
    INACTIVE = "inactive",
    ENTERED_IN_ERROR = "entered-in-error",
    UNKNOWN = "unknown"
}
/**
 * udi-label-name | user-friendly-name | patient-reported-name | manufacturer-name | model-name | other
 * The type of deviceName.
UDILabelName | UserFriendlyName | PatientReportedName | ManufactureDeviceName | ModelName.
 */
export declare enum DeviceNameType {
    UDI_LABEL_NAME = "udi-label-name",
    USER_FRIENDLY_NAME = "user-friendly-name",
    PATIENT_REPORTED_NAME = "patient-reported-name",
    MANUFACTURER_NAME = "manufacturer-name",
    MODEL_NAME = "model-name",
    OTHER = "other"
}
/**
 * udi-label-name | user-friendly-name | patient-reported-name | manufacturer-name | model-name | other
 * The type of deviceName.
UDILabelName | UserFriendlyName | PatientReportedName | ManufactureDeviceName | ModelName.
 */
export declare enum DeviceDefinitionDeviceNameType {
    UDI_LABEL_NAME = "udi-label-name",
    USER_FRIENDLY_NAME = "user-friendly-name",
    PATIENT_REPORTED_NAME = "patient-reported-name",
    MANUFACTURER_NAME = "manufacturer-name",
    MODEL_NAME = "model-name",
    OTHER = "other"
}
/**
 * on | off | standby | entered-in-error
 * Indicates current operational state of the device. For example: On, Off, Standby, etc.
 */
export declare enum DeviceMetricOperationalStatus {
    ON = "on",
    OFF = "off",
    STANDBY = "standby",
    ENTERED_IN_ERROR = "entered-in-error"
}
/**
 * black | red | green | yellow | blue | magenta | cyan | white
 * 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.
 */
export declare enum DeviceMetricColor {
    BLACK = "black",
    RED = "red",
    GREEN = "green",
    YELLOW = "yellow",
    BLUE = "blue",
    MAGENTA = "magenta",
    CYAN = "cyan",
    WHITE = "white"
}
/**
 * measurement | setting | calculation | unspecified
 * Indicates the category of the observation generation process. A DeviceMetric can be for example a setting, measurement, or calculation.
 */
export declare enum DeviceMetricCategory {
    MEASUREMENT = "measurement",
    SETTING = "setting",
    CALCULATION = "calculation",
    UNSPECIFIED = "unspecified"
}
/**
 * unspecified | offset | gain | two-point
 * Describes the type of the calibration method.
 */
export declare enum DeviceMetricCalibrationType {
    UNSPECIFIED = "unspecified",
    OFFSET = "offset",
    GAIN = "gain",
    TWO_POINT = "two-point"
}
/**
 * not-calibrated | calibration-required | calibrated | unspecified
 * Describes the state of the calibration.
 */
export declare enum DeviceMetricCalibrationState {
    NOT_CALIBRATED = "not-calibrated",
    CALIBRATION_REQUIRED = "calibration-required",
    CALIBRATED = "calibrated",
    UNSPECIFIED = "unspecified"
}
/**
 * draft | active | on-hold | revoked | completed | entered-in-error | unknown
 * The status of the request.
 * This element is labeled as a modifier because the status contains the codes cancelled and entered-in-error that mark the request as not currently valid.
 */
export declare enum DeviceRequestStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    ON_HOLD = "on-hold",
    REVOKED = "revoked",
    COMPLETED = "completed",
    ENTERED_IN_ERROR = "entered-in-error",
    UNKNOWN = "unknown"
}
/**
 * proposal | plan | directive | order | original-order | reflex-order | filler-order | instance-order | option
 * Whether the request is a proposal, plan, an original order or a reflex order.
 */
export declare enum DeviceRequestRequestIntent {
    PROPOSAL = "proposal",
    PLAN = "plan",
    DIRECTIVE = "directive",
    ORDER = "order",
    ORIGINAL_ORDER = "original-order",
    REFLEX_ORDER = "reflex-order",
    FILLER_ORDER = "filler-order",
    INSTANCE_ORDER = "instance-order",
    OPTION = "option"
}
/**
 * routine | urgent | asap | stat
 * Indicates how quickly the {{title}} should be addressed with respect to other requests.
 */
export declare enum DeviceRequestRequestPriority {
    ROUTINE = "routine",
    URGENT = "urgent",
    ASAP = "asap",
    STAT = "stat"
}
/**
 * current | superseded | entered-in-error
 * The status of this document manifest.
 * This element is labeled as a modifier because the status contains the codes that mark the manifest as not currently valid.
 */
export declare enum DocumentManifestDocumentReferenceStatus {
    CURRENT = "current",
    SUPERSEDED = "superseded",
    ENTERED_IN_ERROR = "entered-in-error"
}
/**
 * current | superseded | entered-in-error
 * The status of this document reference.
 * This is the status of the DocumentReference object, which might be independent from the docStatus element.

This element is labeled as a modifier because the status contains the codes that mark the document or reference as not currently valid.
 */
export declare enum DocumentReferenceStatus {
    CURRENT = "current",
    SUPERSEDED = "superseded",
    ENTERED_IN_ERROR = "entered-in-error"
}
/**
 * preliminary | final | amended | entered-in-error
 * The status of the underlying document.
 * The document that is pointed to might be in various lifecycle states.
 */
export declare enum DocumentReferenceReferredDocumentStatus {
    PRELIMINARY = "preliminary",
    FINAL = "final",
    AMENDED = "amended",
    ENTERED_IN_ERROR = "entered-in-error"
}
/**
 * replaces | transforms | signs | appends
 * The type of relationship that this document has with anther document.
 * If this document appends another document, then the document cannot be fully understood without also accessing the referenced document.
 */
export declare enum DocumentReferenceDocumentRelationshipType {
    REPLACES = "replaces",
    TRANSFORMS = "transforms",
    SIGNS = "signs",
    APPENDS = "appends"
}
/**
 * draft | active | retired | unknown
 * The status of this effect evidence synthesis. Enables tracking the life-cycle of the content.
 * Allows filtering of effect evidence synthesiss that are appropriate for use versus not.
 */
export declare enum EffectEvidenceSynthesisPublicationStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    RETIRED = "retired",
    UNKNOWN = "unknown"
}
/**
 * exposure | exposure-alternative
 * Whether these results are for the exposure state or alternative exposure state.
 */
export declare enum EffectEvidenceSynthesisExposureState {
    EXPOSURE = "exposure",
    EXPOSURE_ALTERNATIVE = "exposure-alternative"
}
/**
 * planned | active | reserved | completed
 * The status of the participants' presence at the specified location during the period specified. If the participant is no longer at the location, then the period will have an end date/time.
 * When the patient is no longer active at a location, then the period end date is entered, and the status may be changed to completed.
 */
export declare enum EncounterLocationStatus {
    PLANNED = "planned",
    ACTIVE = "active",
    RESERVED = "reserved",
    COMPLETED = "completed"
}
/**
 * active | suspended | error | off | entered-in-error | test
 * active | suspended | error | off | test.
 * This element is labeled as a modifier because the status contains codes that mark the endpoint as not currently valid.
 */
export declare enum EndpointStatus {
    ACTIVE = "active",
    SUSPENDED = "suspended",
    ERROR = "error",
    OFF = "off",
    ENTERED_IN_ERROR = "entered-in-error",
    TEST = "test"
}
/**
 * active | cancelled | draft | entered-in-error
 * The status of the resource instance.
 * This element is labeled as a modifier because the status contains codes that mark the request as not currently valid.
 */
export declare enum EnrollmentRequestStatus {
    ACTIVE = "active",
    CANCELLED = "cancelled",
    DRAFT = "draft",
    ENTERED_IN_ERROR = "entered-in-error"
}
/**
 * active | cancelled | draft | entered-in-error
 * The status of the resource instance.
 * This element is labeled as a modifier because the status contains codes that mark the response as not currently valid.
 */
export declare enum EnrollmentResponseStatus {
    ACTIVE = "active",
    CANCELLED = "cancelled",
    DRAFT = "draft",
    ENTERED_IN_ERROR = "entered-in-error"
}
/**
 * queued | complete | error | partial
 * Processing status: error, complete.
 */
export declare enum EnrollmentResponseRemittanceOutcome {
    QUEUED = "queued",
    COMPLETE = "complete",
    ERROR = "error",
    PARTIAL = "partial"
}
/**
 * planned | waitlist | active | onhold | finished | cancelled | entered-in-error
 * planned | waitlist | active | onhold | finished | cancelled.
 * This element is labeled as a modifier because the status contains codes that mark the episode as not currently valid.
 */
export declare enum EpisodeOfCareStatus {
    PLANNED = "planned",
    WAITLIST = "waitlist",
    ACTIVE = "active",
    ONHOLD = "onhold",
    FINISHED = "finished",
    CANCELLED = "cancelled",
    ENTERED_IN_ERROR = "entered-in-error"
}
/**
 * draft | active | retired | unknown
 * The status of this event definition. Enables tracking the life-cycle of the content.
 * Allows filtering of event definitions that are appropriate for use versus not.
 */
export declare enum EventDefinitionPublicationStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    RETIRED = "retired",
    UNKNOWN = "unknown"
}
/**
 * draft | active | retired | unknown
 * The status of this evidence. Enables tracking the life-cycle of the content.
 * Allows filtering of evidences that are appropriate for use versus not.
 */
export declare enum EvidencePublicationStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    RETIRED = "retired",
    UNKNOWN = "unknown"
}
/**
 * draft | active | retired | unknown
 * The status of this evidence variable. Enables tracking the life-cycle of the content.
 * Allows filtering of evidence variables that are appropriate for use versus not.
 */
export declare enum EvidenceVariablePublicationStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    RETIRED = "retired",
    UNKNOWN = "unknown"
}
/**
 * dichotomous | continuous | descriptive
 * The type of evidence element, a population, an exposure, or an outcome.
 */
export declare enum EvidenceVariableType {
    DICHOTOMOUS = "dichotomous",
    CONTINUOUS = "continuous",
    DESCRIPTIVE = "descriptive"
}
/**
 * mean | median | mean-of-mean | mean-of-median | median-of-mean | median-of-median
 * Indicates how elements are aggregated within the study effective period.
 */
export declare enum EvidenceVariableGroupMeasure {
    MEAN = "mean",
    MEDIAN = "median",
    MEAN_OF_MEAN = "mean-of-mean",
    MEAN_OF_MEDIAN = "mean-of-median",
    MEDIAN_OF_MEAN = "median-of-mean",
    MEDIAN_OF_MEDIAN = "median-of-median"
}
/**
 * draft | active | retired | unknown
 * The status of this example scenario. Enables tracking the life-cycle of the content.
 * Allows filtering of example scenarios that are appropriate for use versus not.
 */
export declare enum ExampleScenarioPublicationStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    RETIRED = "retired",
    UNKNOWN = "unknown"
}
/**
 * person | entity
 * The type of actor - person or system.
 */
export declare enum ExampleScenarioActorType {
    PERSON = "person",
    ENTITY = "entity"
}
/**
 * active | cancelled | draft | entered-in-error
 * The status of the resource instance.
 * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
 */
export declare enum ExplanationOfBenefitStatus {
    ACTIVE = "active",
    CANCELLED = "cancelled",
    DRAFT = "draft",
    ENTERED_IN_ERROR = "entered-in-error"
}
/**
 * claim | preauthorization | predetermination
 * A code to indicate whether the nature of the request is: to request adjudication of products and services previously rendered; or requesting authorization and adjudication for provision in the future; or requesting the non-binding adjudication of the listed products and services which could be provided in the future.
 */
export declare enum ExplanationOfBenefitUse {
    CLAIM = "claim",
    PREAUTHORIZATION = "preauthorization",
    PREDETERMINATION = "predetermination"
}
/**
 * queued | complete | error | partial
 * The outcome of the claim, predetermination, or preauthorization processing.
 * The resource may be used to indicate that: the request has been held (queued) for processing; that it has been processed and errors found (error); that no errors were found and that some of the adjudication has been undertaken (partial) or that all of the adjudication has been undertaken (complete).
 */
export declare enum ExplanationOfBenefitRemittanceOutcome {
    QUEUED = "queued",
    COMPLETE = "complete",
    ERROR = "error",
    PARTIAL = "partial"
}
/**
 * display | print | printoper
 * The business purpose of the note text.
 */
export declare enum ExplanationOfBenefitNoteType {
    DISPLAY = "display",
    PRINT = "print",
    PRINTOPER = "printoper"
}
/**
 * partial | completed | entered-in-error | health-unknown
 * A code specifying the status of the record of the family history of a specific family member.
 * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
 */
export declare enum FamilyMemberHistoryFamilyHistoryStatus {
    PARTIAL = "partial",
    COMPLETED = "completed",
    ENTERED_IN_ERROR = "entered-in-error",
    HEALTH_UNKNOWN = "health-unknown"
}
/**
 * active | inactive | entered-in-error
 * Supports basic workflow.
 * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
 */
export declare enum FlagStatus {
    ACTIVE = "active",
    INACTIVE = "inactive",
    ENTERED_IN_ERROR = "entered-in-error"
}
/**
 * proposed | planned | accepted | active | on-hold | completed | cancelled | entered-in-error | rejected
 * The state of the goal throughout its lifecycle.
 * This element is labeled as a modifier because the lifecycleStatus contains codes that mark the resource as not currently valid.
 */
export declare enum GoalLifecycleStatus {
    PROPOSED = "proposed",
    PLANNED = "planned",
    ACCEPTED = "accepted",
    ACTIVE = "active",
    ON_HOLD = "on-hold",
    COMPLETED = "completed",
    CANCELLED = "cancelled",
    ENTERED_IN_ERROR = "entered-in-error",
    REJECTED = "rejected"
}
/**
 * draft | active | retired | unknown
 * The status of this graph definition. Enables tracking the life-cycle of the content.
 * Allows filtering of graph definitions that are appropriate for use versus not.
 */
export declare enum GraphDefinitionPublicationStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    RETIRED = "retired",
    UNKNOWN = "unknown"
}
/**
 * condition | requirement
 * Defines how the compartment rule is used - whether it it is used to test whether resources are subject to the rule, or whether it is a rule that must be followed.
 * All conditional rules are evaluated; if they are true, then the rules are evaluated.
 */
export declare enum GraphDefinitionGraphCompartmentUse {
    CONDITION = "condition",
    REQUIREMENT = "requirement"
}
/**
 * Patient | Encounter | RelatedPerson | Practitioner | Device
 * Identifies the compartment.
 */
export declare enum GraphDefinitionCompartmentCode {
    PATIENT = "Patient",
    ENCOUNTER = "Encounter",
    RELATEDPERSON = "RelatedPerson",
    PRACTITIONER = "Practitioner",
    DEVICE = "Device"
}
/**
 * identical | matching | different | custom
 * identical | matching | different | no-rule | custom.
 */
export declare enum GraphDefinitionGraphCompartmentRule {
    IDENTICAL = "identical",
    MATCHING = "matching",
    DIFFERENT = "different",
    CUSTOM = "custom"
}
/**
 * person | animal | practitioner | device | medication | substance
 * Identifies the broad classification of the kind of resources the group includes.
 * Group members SHALL be of the appropriate resource type (Patient for person or animal; or Practitioner, Device, Medication or Substance for the other types.).
 */
export declare enum GroupType {
    PERSON = "person",
    ANIMAL = "animal",
    PRACTITIONER = "practitioner",
    DEVICE = "device",
    MEDICATION = "medication",
    SUBSTANCE = "substance"
}
/**
 * success | data-requested | data-required | in-progress | failure | entered-in-error
 * 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.
 * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
 */
export declare enum GuidanceResponseStatus {
    SUCCESS = "success",
    DATA_REQUESTED = "data-requested",
    DATA_REQUIRED = "data-required",
    IN_PROGRESS = "in-progress",
    FAILURE = "failure",
    ENTERED_IN_ERROR = "entered-in-error"
}
/**
 * mon | tue | wed | thu | fri | sat | sun
 * Indicates which days of the week are available between the start and end Times.
 */
export declare enum HealthcareServiceDaysOfWeek {
    MON = "mon",
    TUE = "tue",
    WED = "wed",
    THU = "thu",
    FRI = "fri",
    SAT = "sat",
    SUN = "sun"
}
/**
 * registered | available | cancelled | entered-in-error | unknown
 * The current state of the ImagingStudy.
 * Unknown does not represent "other" - one of the defined statuses must apply.  Unknown is used when the authoring system is not sure what the current status is.
 */
export declare enum ImagingStudyStatus {
    REGISTERED = "registered",
    AVAILABLE = "available",
    CANCELLED = "cancelled",
    ENTERED_IN_ERROR = "entered-in-error",
    UNKNOWN = "unknown"
}
/**
 * completed | entered-in-error | not-done
 * Indicates the current status of the immunization event.
 * Will generally be set to show that the immunization has been completed or not done.  This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
 */
export declare enum ImmunizationStatus {
    COMPLETED = "completed",
    ENTERED_IN_ERROR = "entered-in-error",
    NOT_DONE = "not-done"
}
/**
 * completed | entered-in-error
 * Indicates the current status of the evaluation of the vaccination administration event.
 */
export declare enum ImmunizationEvaluationStatus {
    COMPLETED = "completed",
    ENTERED_IN_ERROR = "entered-in-error"
}
/**
 * draft | active | retired | unknown
 * The status of this implementation guide. Enables tracking the life-cycle of the content.
 * Allows filtering of implementation guides that are appropriate for use versus not.
 */
export declare enum ImplementationGuidePublicationStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    RETIRED = "retired",
    UNKNOWN = "unknown"
}
/**
 * html | markdown | xml | generated
 * A code that indicates how the page is generated.
 */
export declare enum ImplementationGuideGuidePageGeneration {
    HTML = "html",
    MARKDOWN = "markdown",
    XML = "xml",
    GENERATED = "generated"
}
/**
 * apply | path-resource | path-pages | path-tx-cache | expansion-parameter | rule-broken-links | generate-xml | generate-json | generate-turtle | html-template
 * apply | path-resource | path-pages | path-tx-cache | expansion-parameter | rule-broken-links | generate-xml | generate-json | generate-turtle | html-template.
 */
export declare enum ImplementationGuideGuideParameterCode {
    APPLY = "apply",
    PATH_RESOURCE = "path-resource",
    PATH_PAGES = "path-pages",
    PATH_TX_CACHE = "path-tx-cache",
    EXPANSION_PARAMETER = "expansion-parameter",
    RULE_BROKEN_LINKS = "rule-broken-links",
    GENERATE_XML = "generate-xml",
    GENERATE_JSON = "generate-json",
    GENERATE_TURTLE = "generate-turtle",
    HTML_TEMPLATE = "html-template"
}
/**
 * draft | active | retired | unknown
 * The current state of the health insurance product.
 */
export declare enum InsurancePlanPublicationStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    RETIRED = "retired",
    UNKNOWN = "unknown"
}
/**
 * draft | issued | balanced | cancelled | entered-in-error
 * The current state of the Invoice.
 */
export declare enum InvoiceStatus {
    DRAFT = "draft",
    ISSUED = "issued",
    BALANCED = "balanced",
    CANCELLED = "cancelled",
    ENTERED_IN_ERROR = "entered-in-error"
}
/**
 * base | surcharge | deduction | discount | tax | informational
 * This code identifies the type of the component.
 */
export declare enum InvoicePriceComponentType {
    BASE = "base",
    SURCHARGE = "surcharge",
    DEDUCTION = "deduction",
    DISCOUNT = "discount",
    TAX = "tax",
    INFORMATIONAL = "informational"
}
/**
 * draft | active | retired | unknown
 * The status of this library. Enables tracking the life-cycle of the content.
 * Allows filtering of libraries that are appropriate for use vs. not.
 */
export declare enum LibraryPublicationStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    RETIRED = "retired",
    UNKNOWN = "unknown"
}
/**
 * source | alternate | historical
 * Distinguishes which item is "source of truth" (if any) and which items are no longer considered to be current representations.
 */
export declare enum LinkageType {
    SOURCE = "source",
    ALTERNATE = "alternate",
    HISTORICAL = "historical"
}
/**
 * current | retired | entered-in-error
 * Indicates the current state of this list.
 * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
 */
export declare enum ListStatus {
    CURRENT = "current",
    RETIRED = "retired",
    ENTERED_IN_ERROR = "entered-in-error"
}
/**
 * working | snapshot | changes
 * 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.
 * This element is labeled as a modifier because a change list must not be misunderstood as a complete list.
 */
export declare enum ListMode {
    WORKING = "working",
    SNAPSHOT = "snapshot",
    CHANGES = "changes"
}
/**
 * active | suspended | inactive
 * 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.
 */
export declare enum LocationStatus {
    ACTIVE = "active",
    SUSPENDED = "suspended",
    INACTIVE = "inactive"
}
/**
 * instance | kind
 * Indicates whether a resource instance represents a specific location or a class of locations.
 * This is labeled as a modifier because whether or not the location is a class of locations changes how it can be used and understood.
 */
export declare enum LocationMode {
    INSTANCE = "instance",
    KIND = "kind"
}
/**
 * mon | tue | wed | thu | fri | sat | sun
 * Indicates which days of the week are available between the start and end Times.
 */
export declare enum LocationDaysOfWeek {
    MON = "mon",
    TUE = "tue",
    WED = "wed",
    THU = "thu",
    FRI = "fri",
    SAT = "sat",
    SUN = "sun"
}
/**
 * draft | active | retired | unknown
 * The status of this measure. Enables tracking the life-cycle of the content.
 * Allows filtering of measures that are appropriate for use versus not.
 */
export declare enum MeasurePublicationStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    RETIRED = "retired",
    UNKNOWN = "unknown"
}
/**
 * complete | pending | error
 * The MeasureReport status. No data will be available until the MeasureReport status is complete.
 * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
 */
export declare enum MeasureReportStatus {
    COMPLETE = "complete",
    PENDING = "pending",
    ERROR = "error"
}
/**
 * individual | subject-list | summary | data-collection
 * The type of measure report. This may be an individual report, which provides the score for the measure for an individual member of the population; a subject-listing, which returns the list of members that meet the various criteria in the measure; a summary report, which returns a population count for each of the criteria in the measure; or a data-collection, which enables the MeasureReport to be used to exchange the data-of-interest for a quality measure.
 * Data-collection reports are used only to communicate data-of-interest for a measure. They do not necessarily include all the data for a particular subject or population, but they may.
 */
export declare enum MeasureReportType {
    INDIVIDUAL = "individual",
    SUBJECT_LIST = "subject-list",
    SUMMARY = "summary",
    DATA_COLLECTION = "data-collection"
}
/**
 * preparation | in-progress | not-done | on-hold | stopped | completed | entered-in-error | unknown
 * The current state of the {{title}}.
 * A nominal state-transition diagram can be found in the [[event.html#statemachine | Event pattern]] documentation

Unknown does not represent "other" - one of the defined statuses must apply.  Unknown is used when the authoring system is not sure what the current status is.
 */
export declare enum MediaStatus {
    PREPARATION = "preparation",
    IN_PROGRESS = "in-progress",
    NOT_DONE = "not-done",
    ON_HOLD = "on-hold",
    STOPPED = "stopped",
    COMPLETED = "completed",
    ENTERED_IN_ERROR = "entered-in-error",
    UNKNOWN = "unknown"
}
/**
 * active | inactive | entered-in-error
 * A code to indicate if the medication is in active use.
 * This status is intended to identify if the medication in a local system is in active use within a drug database or inventory.  For example, a pharmacy system may create a new drug file record for a compounded product "ABC Hospital Special Cream" with an active status.  At some point in the future, it may be determined that the drug record was created with an error and the status is changed to "entered in error".   This status is not intended to specify if a medication is part of a particular formulary.  It is possible that the drug record may be referenced by multiple formularies or catalogues and each of those entries would have a separate status.
 */
export declare enum MedicationStatus {
    ACTIVE = "active",
    INACTIVE = "inactive",
    ENTERED_IN_ERROR = "entered-in-error"
}
/**
 * in-progress | not-done | on-hold | completed | entered-in-error | stopped | unknown
 * 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.
 * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
 */
export declare enum MedicationAdministrationStatus {
    IN_PROGRESS = "in-progress",
    NOT_DONE = "not-done",
    ON_HOLD = "on-hold",
    COMPLETED = "completed",
    ENTERED_IN_ERROR = "entered-in-error",
    STOPPED = "stopped",
    UNKNOWN = "unknown"
}
/**
 * preparation | in-progress | cancelled | on-hold | completed | entered-in-error | stopped | declined | unknown
 * A code specifying the state of the set of dispense events.
 * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
 */
export declare enum MedicationDispenseStatus {
    PREPARATION = "preparation",
    IN_PROGRESS = "in-progress",
    CANCELLED = "cancelled",
    ON_HOLD = "on-hold",
    COMPLETED = "completed",
    ENTERED_IN_ERROR = "entered-in-error",
    STOPPED = "stopped",
    DECLINED = "declined",
    UNKNOWN = "unknown"
}
/**
 * active | inactive | entered-in-error
 * A code to indicate if the medication is in active use.  The status refers to the validity about the information of the medication and not to its medicinal properties.
 * This status is intended to identify if the medication in a local system is in active use within a drug database or inventory.  For example, a pharmacy system may create a new drug file record for a compounded product "ABC Hospital Special Cream" with an active status.  At some point in the future, it may be determined that the drug record was created with an error and the status is changed to "entered in error".   This status is not intended to specify if a medication is part of a particular formulary.  It is possible that the drug record may be referenced by multiple formularies or catalogues and each of those entries would have a separate status.
 */
export declare enum MedicationKnowledgeStatus {
    ACTIVE = "active",
    INACTIVE = "inactive",
    ENTERED_IN_ERROR = "entered-in-error"
}
/**
 * active | on-hold | cancelled | completed | entered-in-error | stopped | draft | unknown
 * A code specifying the current state of the order.  Generally, this will be active or completed state.
 * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
 */
export declare enum MedicationRequestStatus {
    ACTIVE = "active",
    ON_HOLD = "on-hold",
    CANCELLED = "cancelled",
    COMPLETED = "completed",
    ENTERED_IN_ERROR = "entered-in-error",
    STOPPED = "stopped",
    DRAFT = "draft",
    UNKNOWN = "unknown"
}
/**
 * proposal | plan | order | original-order | reflex-order | filler-order | instance-order | option
 * Whether the request is a proposal, plan, or an original order.
 * It is expected that the type of requester will be restricted for different stages of a MedicationRequest.  For example, Proposals can be created by a patient, relatedPerson, Practitioner or Device.  Plans can be created by Practitioners, Patients, RelatedPersons and Devices.  Original orders can be created by a Practitioner only.

An instance-order is an instantiation of a request or order and may be used to populate Medication Administration Record.

This element is labeled as a modifier because the intent alters when and how the resource is actually applicable.
 */
export declare enum MedicationRequestIntent {
    PROPOSAL = "proposal",
    PLAN = "plan",
    ORDER = "order",
    ORIGINAL_ORDER = "original-order",
    REFLEX_ORDER = "reflex-order",
    FILLER_ORDER = "filler-order",
    INSTANCE_ORDER = "instance-order",
    OPTION = "option"
}
/**
 * routine | urgent | asap | stat
 * Indicates how quickly the Medication Request should be addressed with respect to other requests.
 */
export declare enum MedicationRequestPriority {
    ROUTINE = "routine",
    URGENT = "urgent",
    ASAP = "asap",
    STAT = "stat"
}
/**
 * active | completed | entered-in-error | intended | stopped | on-hold | unknown | not-taken
 * 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.
 * MedicationStatement is a statement at a point in time.  The status is only representative at the point when it was asserted.  The value set for MedicationStatement.status contains codes that assert the status of the use of the medication by the patient (for example, stopped or on hold) as well as codes that assert the status of the medication statement itself (for example, entered in error).

This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
 */
export declare enum MedicationStatementStatus {
    ACTIVE = "active",
    COMPLETED = "completed",
    ENTERED_IN_ERROR = "entered-in-error",
    INTENDED = "intended",
    STOPPED = "stopped",
    ON_HOLD = "on-hold",
    UNKNOWN = "unknown",
    NOT_TAKEN = "not-taken"
}
/**
 * draft | active | retired | unknown
 * The status of this message definition. Enables tracking the life-cycle of the content.
 * Allows filtering of message definitions that are appropriate for use versus not.
 */
export declare enum MessageDefinitionPublicationStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    RETIRED = "retired",
    UNKNOWN = "unknown"
}
/**
 * consequence | currency | notification
 * The impact of the content of the message.
 */
export declare enum MessageDefinitionMessageSignificanceCategory {
    CONSEQUENCE = "consequence",
    CURRENCY = "currency",
    NOTIFICATION = "notification"
}
/**
 * always | on-error | never | on-success
 * Declare at a message definition level whether a response is required or only upon error or success, or never.
 * This enables the capability currently available through MSH-16 (Application Level acknowledgement) in HL7 Version 2 to declare at a message instance level whether a response is required or only upon error or success, or never.
 */
export declare enum MessageDefinitionmessageheader_response_request {
    ALWAYS = "always",
    ON_ERROR = "on-error",
    NEVER = "never",
    ON_SUCCESS = "on-success"
}
/**
 * ok | transient-error | fatal-error
 * Code that identifies the type of response to the message - whether it was successful or not, and whether it should be resent or not.
 * This is a generic response to the request message. Specific data for the response will be found in MessageHeader.focus.
 */
export declare enum MessageHeaderResponseType {
    OK = "ok",
    TRANSIENT_ERROR = "transient-error",
    FATAL_ERROR = "fatal-error"
}
/**
 * aa | dna | rna
 * Amino Acid Sequence/ DNA Sequence / RNA Sequence.
 */
export declare enum MolecularSequencesequenceType {
    AA = "aa",
    DNA = "dna",
    RNA = "rna"
}
/**
 * sense | antisense
 * A relative reference to a DNA strand based on gene orientation. The strand that contains the open reading frame of the gene is the "sense" strand, and the opposite complementary strand is the "antisense" strand.
 */
export declare enum MolecularSequenceorientationType {
    SENSE = "sense",
    ANTISENSE = "antisense"
}
/**
 * watson | crick
 * An absolute reference to a strand. The Watson strand is the strand whose 5'-end is on the short arm of the chromosome, and the Crick strand as the one whose 5'-end is on the long arm.
 */
export declare enum MolecularSequencestrandType {
    WATSON = "watson",
    CRICK = "crick"
}
/**
 * indel | snp | unknown
 * INDEL / SNP / Undefined variant.
 */
export declare enum MolecularSequencequalityType {
    INDEL = "indel",
    SNP = "snp",
    UNKNOWN = "unknown"
}
/**
 * directlink | openapi | login | oauth | other
 * Click and see / RESTful API / Need login to see / RESTful API with authentication / Other ways to see resource.
 */
export declare enum MolecularSequencerepositoryType {
    DIRECTLINK = "directlink",
    OPENAPI = "openapi",
    LOGIN = "login",
    OAUTH = "oauth",
    OTHER = "other"
}
/**
 * draft | active | retired | unknown
 * The status of this naming system. Enables tracking the life-cycle of the content.
 * Allows filtering of naming systems that are appropriate for use versus not.
 */
export declare enum NamingSystemPublicationStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    RETIRED = "retired",
    UNKNOWN = "unknown"
}
/**
 * codesystem | identifier | root
 * Indicates the purpose for the naming system - what kinds of things does it make unique?
 */
export declare enum NamingSystemType {
    CODESYSTEM = "codesystem",
    IDENTIFIER = "identifier",
    ROOT = "root"
}
/**
 * oid | uuid | uri | other
 * Identifies the unique identifier scheme used for this particular identifier.
 * Different identifier types may be used in different types of communications (OIDs for v3, URIs for FHIR, etc.).  Other includes RUIDs from v3, standard v2 code name strings, etc.
 */
export declare enum NamingSystemIdentifierType {
    OID = "oid",
    UUID = "uuid",
    URI = "uri",
    OTHER = "other"
}
/**
 * draft | active | on-hold | revoked | completed | entered-in-error | unknown
 * The workflow status of the nutrition order/request.
 * Typically the system placing the order sets the status to "requested". Thereafter, the order is maintained by the receiver that updates the status as the request is handled.  This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
 */
export declare enum NutritionOrderStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    ON_HOLD = "on-hold",
    REVOKED = "revoked",
    COMPLETED = "completed",
    ENTERED_IN_ERROR = "entered-in-error",
    UNKNOWN = "unknown"
}
/**
 * proposal | plan | directive | order | original-order | reflex-order | filler-order | instance-order | option
 * Indicates the level of authority/intentionality associated with the NutrionOrder and where the request fits into the workflow chain.
 * When resources map to this element, they are free to define as many codes as necessary to cover their space and will map to "proposal, plan or order".  Can have multiple codes that map to one of these.  E.g. "original order", "encoded order", "reflex order" would all map to "order".  Expectation is that the set of codes is mutually exclusive or a strict all-encompassing hierarchy.
 */
export declare enum NutritionOrderNutritiionOrderIntent {
    PROPOSAL = "proposal",
    PLAN = "plan",
    DIRECTIVE = "directive",
    ORDER = "order",
    ORIGINAL_ORDER = "original-order",
    REFLEX_ORDER = "reflex-order",
    FILLER_ORDER = "filler-order",
    INSTANCE_ORDER = "instance-order",
    OPTION = "option"
}
/**
 * Quantity | CodeableConcept | string | boolean | integer | Range | Ratio | SampledData | time | dateTime | Period
 * The data types allowed for the value element of the instance observations conforming to this ObservationDefinition.
 */
export declare enum ObservationDefinitionObservationDataType {
    QUANTITY = "Quantity",
    CODEABLECONCEPT = "CodeableConcept",
    STRING = "string",
    BOOLEAN = "boolean",
    INTEGER = "integer",
    RANGE = "Range",
    RATIO = "Ratio",
    SAMPLEDDATA = "SampledData",
    TIME = "time",
    DATETIME = "dateTime",
    PERIOD = "Period"
}
/**
 * reference | critical | absolute
 * The category of interval of values for continuous or ordinal observations conforming to this ObservationDefinition.
 */
export declare enum ObservationDefinitionObservationRangeCategory {
    REFERENCE = "reference",
    CRITICAL = "critical",
    ABSOLUTE = "absolute"
}
/**
 * male | female | other | unknown
 * Sex of the population the range applies to.
 */
export declare enum ObservationDefinitionAdministrativeGender {
    MALE = "male",
    FEMALE = "female",
    OTHER = "other",
    UNKNOWN = "unknown"
}
/**
 * draft | active | retired | unknown
 * The status of this operation definition. Enables tracking the life-cycle of the content.
 * Allows filtering of operation definitions that are appropriate for use versus not.
 */
export declare enum OperationDefinitionPublicationStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    RETIRED = "retired",
    UNKNOWN = "unknown"
}
/**
 * operation | query
 * Whether this is an operation or a named query.
 * Named queries are invoked differently, and have different capabilities.
 */
export declare enum OperationDefinitionOperationKind {
    OPERATION = "operation",
    QUERY = "query"
}
/**
 * in | out
 * Whether this is an input or an output parameter.
 * If a parameter name is used for both an input and an output parameter, the parameter should be defined twice.
 */
export declare enum OperationDefinitionOperationParameterUse {
    IN = "in",
    OUT = "out"
}
/**
 * number | date | string | token | reference | composite | quantity | uri | special
 * How the parameter is understood as a search parameter. This is only used if the parameter type is 'string'.
 */
export declare enum OperationDefinitionSearchParamType {
    NUMBER = "number",
    DATE = "date",
    STRING = "string",
    TOKEN = "token",
    REFERENCE = "reference",
    COMPOSITE = "composite",
    QUANTITY = "quantity",
    URI = "uri",
    SPECIAL = "special"
}
/**
 * required | extensible | preferred | example
 * 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.
 * For further discussion, see [Using Terminologies](terminologies.html).
 */
export declare enum OperationDefinitionBindingStrength {
    REQUIRED = "required",
    EXTENSIBLE = "extensible",
    PREFERRED = "preferred",
    EXAMPLE = "example"
}
/**
 * fatal | error | warning | information
 * Indicates whether the issue indicates a variation from successful processing.
 * This is labeled as "Is Modifier" because applications should not confuse hints and warnings with errors.
 */
export declare enum OperationOutcomeIssueSeverity {
    FATAL = "fatal",
    ERROR = "error",
    WARNING = "warning",
    INFORMATION = "information"
}
/**
 * male | female | other | unknown
 * Administrative Gender - the gender that the patient is considered to have for administration and record keeping purposes.
 * The gender might not match the biological sex as determined by genetics or the individual's preferred identification. Note that for both humans and particularly animals, there are other legitimate possibilities than male and female, though the vast majority of systems and contexts only support male and female.  Systems providing decision support or enforcing business rules should ideally do this on the basis of Observations dealing with the specific sex or gender aspect of interest (anatomical, chromosomal, social, etc.)  However, because these observations are infrequently recorded, defaulting to the administrative gender is common practice.  Where such defaulting occurs, rule enforcement should allow for the variation between administrative and biological, chromosomal and other gender aspects.  For example, an alert about a hysterectomy on a male should be handled as a warning or overridable error, not a "hard" error.  See the Patient Gender and Sex section for additional information about communicating patient gender and sex.
 */
export declare enum PatientAdministrativeGender {
    MALE = "male",
    FEMALE = "female",
    OTHER = "other",
    UNKNOWN = "unknown"
}
/**
 * replaced-by | replaces | refer | seealso
 * The type of link between this patient resource and another patient resource.
 */
export declare enum PatientLinkType {
    REPLACED_BY = "replaced-by",
    REPLACES = "replaces",
    REFER = "refer",
    SEEALSO = "seealso"
}
/**
 * active | cancelled | draft | entered-in-error
 * The status of the resource instance.
 * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
 */
export declare enum PaymentNoticeStatus {
    ACTIVE = "active",
    CANCELLED = "cancelled",
    DRAFT = "draft",
    ENTERED_IN_ERROR = "entered-in-error"
}
/**
 * active | cancelled | draft | entered-in-error
 * The status of the resource instance.
 * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
 */
export declare enum PaymentReconciliationStatus {
    ACTIVE = "active",
    CANCELLED = "cancelled",
    DRAFT = "draft",
    ENTERED_IN_ERROR = "entered-in-error"
}
/**
 * queued | complete | error | partial
 * The outcome of a request for a reconciliation.
 * The resource may be used to indicate that: the request has been held (queued) for processing; that it has been processed and errors found (error); that no errors were found and that some of the adjudication has been undertaken (partial) or that all of the adjudication has been undertaken (complete).
 */
export declare enum PaymentReconciliationRemittanceOutcome {
    QUEUED = "queued",
    COMPLETE = "complete",
    ERROR = "error",
    PARTIAL = "partial"
}
/**
 * display | print | printoper
 * The business purpose of the note text.
 */
export declare enum PaymentReconciliationNoteType {
    DISPLAY = "display",
    PRINT = "print",
    PRINTOPER = "printoper"
}
/**
 * male | female | other | unknown
 * Administrative Gender.
 * The gender might not match the biological sex as determined by genetics, or the individual's preferred identification. Note that for both humans and particularly animals, there are other legitimate possibilities than M and F, though a clear majority of systems and contexts only support M and F.
 */
export declare enum PersonAdministrativeGender {
    MALE = "male",
    FEMALE = "female",
    OTHER = "other",
    UNKNOWN = "unknown"
}
/**
 * level1 | level2 | level3 | level4
 * Level of assurance that this link is associated with the target resource.
 */
export declare enum PersonIdentityAssuranceLevel {
    LEVEL1 = "level1",
    LEVEL2 = "level2",
    LEVEL3 = "level3",
    LEVEL4 = "level4"
}
/**
 * draft | active | retired | unknown
 * The status of this plan definition. Enables tracking the life-cycle of the content.
 * Allows filtering of plan definitions that are appropriate for use versus not.
 */
export declare enum PlanDefinitionPublicationStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    RETIRED = "retired",
    UNKNOWN = "unknown"
}
/**
 * routine | urgent | asap | stat
 * Indicates how quickly the action should be addressed with respect to other actions.
 */
export declare enum PlanDefinitionRequestPriority {
    ROUTINE = "routine",
    URGENT = "urgent",
    ASAP = "asap",
    STAT = "stat"
}
/**
 * applicability | start | stop
 * The kind of condition.
 * Applicability criteria are used to determine immediate applicability when a plan definition is applied to a given context. Start and stop criteria are carried through application and used to describe enter/exit criteria for an action.
 */
export declare enum PlanDefinitionActionConditionKind {
    APPLICABILITY = "applicability",
    START = "start",
    STOP = "stop"
}
/**
 * before-start | before | before-end | concurrent-with-start | concurrent | concurrent-with-end | after-start | after | after-end
 * The relationship of this action to the related action.
 */
export declare enum PlanDefinitionActionRelationshipType {
    BEFORE_START = "before-start",
    BEFORE = "before",
    BEFORE_END = "before-end",
    CONCURRENT_WITH_START = "concurrent-with-start",
    CONCURRENT = "concurrent",
    CONCURRENT_WITH_END = "concurrent-with-end",
    AFTER_START = "after-start",
    AFTER = "after",
    AFTER_END = "after-end"
}
/**
 * patient | practitioner | related-person | device
 * The type of participant in the action.
 */
export declare enum PlanDefinitionActionParticipantType {
    PATIENT = "patient",
    PRACTITIONER = "practitioner",
    RELATED_PERSON = "related-person",
    DEVICE = "device"
}
/**
 * visual-group | logical-group | sentence-group
 * Defines the grouping behavior for the action and its children.
 */
export declare enum PlanDefinitionActionGroupingBehavior {
    VISUAL_GROUP = "visual-group",
    LOGICAL_GROUP = "logical-group",
    SENTENCE_GROUP = "sentence-group"
}
/**
 * any | all | all-or-none | exactly-one | at-most-one | one-or-more
 * Defines the selection behavior for the action and its children.
 */
export declare enum PlanDefinitionActionSelectionBehavior {
    ANY = "any",
    ALL = "all",
    ALL_OR_NONE = "all-or-none",
    EXACTLY_ONE = "exactly-one",
    AT_MOST_ONE = "at-most-one",
    ONE_OR_MORE = "one-or-more"
}
/**
 * must | could | must-unless-documented
 * Defines the required behavior for the action.
 */
export declare enum PlanDefinitionActionRequiredBehavior {
    MUST = "must",
    COULD = "could",
    MUST_UNLESS_DOCUMENTED = "must-unless-documented"
}
/**
 * yes | no
 * Defines whether the action should usually be preselected.
 */
export declare enum PlanDefinitionActionPrecheckBehavior {
    YES = "yes",
    NO = "no"
}
/**
 * single | multiple
 * Defines whether the action can be selected multiple times.
 */
export declare enum PlanDefinitionActionCardinalityBehavior {
    SINGLE = "single",
    MULTIPLE = "multiple"
}
/**
 * male | female | other | unknown
 * Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes.
 */
export declare enum PractitionerAdministrativeGender {
    MALE = "male",
    FEMALE = "female",
    OTHER = "other",
    UNKNOWN = "unknown"
}
/**
 * mon | tue | wed | thu | fri | sat | sun
 * Indicates which days of the week are available between the start and end Times.
 */
export declare enum PractitionerRoleDaysOfWeek {
    MON = "mon",
    TUE = "tue",
    WED = "wed",
    THU = "thu",
    FRI = "fri",
    SAT = "sat",
    SUN = "sun"
}
/**
 * preparation | in-progress | not-done | on-hold | stopped | completed | entered-in-error | unknown
 * A code specifying the state of the procedure. Generally, this will be the in-progress or completed state.
 * The "unknown" code is not to be used to convey other statuses.  The "unknown" code should be used when one of the statuses applies, but the authoring system doesn't know the current state of the procedure.

This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
 */
export declare enum ProcedureStatus {
    PREPARATION = "preparation",
    IN_PROGRESS = "in-progress",
    NOT_DONE = "not-done",
    ON_HOLD = "on-hold",
    STOPPED = "stopped",
    COMPLETED = "completed",
    ENTERED_IN_ERROR = "entered-in-error",
    UNKNOWN = "unknown"
}
/**
 * derivation | revision | quotation | source | removal
 * How the entity was used during the activity.
 */
export declare enum ProvenanceEntityRole {
    DERIVATION = "derivation",
    REVISION = "revision",
    QUOTATION = "quotation",
    SOURCE = "source",
    REMOVAL = "removal"
}
/**
 * draft | active | retired | unknown
 * The status of this questionnaire. Enables tracking the life-cycle of the content.
 * Allows filtering of questionnaires that are appropriate for use versus not.
 */
export declare enum QuestionnairePublicationStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    RETIRED = "retired",
    UNKNOWN = "unknown"
}
/**
 * exists | = | != | > | < | >= | <=
 * Specifies the criteria by which the question is enabled.
 */
export declare enum QuestionnaireItemOperator {
    EXISTS = "exists",
    E = "=",
    NE = "!=",
    GT = ">",
    LT = "<",
    GE = ">=",
    LE = "<="
}
/**
 * all | any
 * Controls how multiple enableWhen values are interpreted -  whether all or any must be true.
 * This element must be specified if more than one enableWhen value is provided.
 */
export declare enum QuestionnaireEnableWhenBehavior {
    ALL = "all",
    ANY = "any"
}
/**
 * in-progress | completed | amended | entered-in-error | stopped
 * The position of the questionnaire response within its overall lifecycle.
 * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
 */
export declare enum QuestionnaireResponseStatus {
    IN_PROGRESS = "in-progress",
    COMPLETED = "completed",
    AMENDED = "amended",
    ENTERED_IN_ERROR = "entered-in-error",
    STOPPED = "stopped"
}
/**
 * male | female | other | unknown
 * Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes.
 */
export declare enum RelatedPersonAdministrativeGender {
    MALE = "male",
    FEMALE = "female",
    OTHER = "other",
    UNKNOWN = "unknown"
}
/**
 * draft | active | on-hold | revoked | completed | entered-in-error | unknown
 * The current state of the request. For request groups, the status reflects the status of all the requests in the group.
 */
export declare enum RequestGroupRequestStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    ON_HOLD = "on-hold",
    REVOKED = "revoked",
    COMPLETED = "completed",
    ENTERED_IN_ERROR = "entered-in-error",
    UNKNOWN = "unknown"
}
/**
 * proposal | plan | directive | order | original-order | reflex-order | filler-order | instance-order | option
 * Indicates the level of authority/intentionality associated with the request and where the request fits into the workflow chain.
 */
export declare enum RequestGroupRequestIntent {
    PROPOSAL = "proposal",
    PLAN = "plan",
    DIRECTIVE = "directive",
    ORDER = "order",
    ORIGINAL_ORDER = "original-order",
    REFLEX_ORDER = "reflex-order",
    FILLER_ORDER = "filler-order",
    INSTANCE_ORDER = "instance-order",
    OPTION = "option"
}
/**
 * routine | urgent | asap | stat
 * Indicates how quickly the request should be addressed with respect to other requests.
 */
export declare enum RequestGroupRequestPriority {
    ROUTINE = "routine",
    URGENT = "urgent",
    ASAP = "asap",
    STAT = "stat"
}
/**
 * applicability | start | stop
 * The kind of condition.
 * Applicability criteria are used to determine immediate applicability when a plan definition is applied to a given context. Start and stop criteria are carried through application and used to describe enter/exit criteria for an action.
 */
export declare enum RequestGroupActionConditionKind {
    APPLICABILITY = "applicability",
    START = "start",
    STOP = "stop"
}
/**
 * before-start | before | before-end | concurrent-with-start | concurrent | concurrent-with-end | after-start | after | after-end
 * The relationship of this action to the related action.
 */
export declare enum RequestGroupActionRelationshipType {
    BEFORE_START = "before-start",
    BEFORE = "before",
    BEFORE_END = "before-end",
    CONCURRENT_WITH_START = "concurrent-with-start",
    CONCURRENT = "concurrent",
    CONCURRENT_WITH_END = "concurrent-with-end",
    AFTER_START = "after-start",
    AFTER = "after",
    AFTER_END = "after-end"
}
/**
 * visual-group | logical-group | sentence-group
 * Defines the grouping behavior for the action and its children.
 */
export declare enum RequestGroupActionGroupingBehavior {
    VISUAL_GROUP = "visual-group",
    LOGICAL_GROUP = "logical-group",
    SENTENCE_GROUP = "sentence-group"
}
/**
 * any | all | all-or-none | exactly-one | at-most-one | one-or-more
 * Defines the selection behavior for the action and its children.
 */
export declare enum RequestGroupActionSelectionBehavior {
    ANY = "any",
    ALL = "all",
    ALL_OR_NONE = "all-or-none",
    EXACTLY_ONE = "exactly-one",
    AT_MOST_ONE = "at-most-one",
    ONE_OR_MORE = "one-or-more"
}
/**
 * must | could | must-unless-documented
 * Defines expectations around whether an action is required.
 */
export declare enum RequestGroupActionRequiredBehavior {
    MUST = "must",
    COULD = "could",
    MUST_UNLESS_DOCUMENTED = "must-unless-documented"
}
/**
 * yes | no
 * Defines whether the action should usually be preselected.
 */
export declare enum RequestGroupActionPrecheckBehavior {
    YES = "yes",
    NO = "no"
}
/**
 * single | multiple
 * Defines whether the action can be selected multiple times.
 */
export declare enum RequestGroupActionCardinalityBehavior {
    SINGLE = "single",
    MULTIPLE = "multiple"
}
/**
 * draft | active | retired | unknown
 * The status of this research definition. Enables tracking the life-cycle of the content.
 * Allows filtering of research definitions that are appropriate for use versus not.
 */
export declare enum ResearchDefinitionPublicationStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    RETIRED = "retired",
    UNKNOWN = "unknown"
}
/**
 * draft | active | retired | unknown
 * The status of this research element definition. Enables tracking the life-cycle of the content.
 * Allows filtering of research element definitions that are appropriate for use versus not.
 */
export declare enum ResearchElementDefinitionPublicationStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    RETIRED = "retired",
    UNKNOWN = "unknown"
}
/**
 * population | exposure | outcome
 * The type of research element, a population, an exposure, or an outcome.
 */
export declare enum ResearchElementDefinitionResearchElementType {
    POPULATION = "population",
    EXPOSURE = "exposure",
    OUTCOME = "outcome"
}
/**
 * dichotomous | continuous | descriptive
 * The type of the outcome (e.g. Dichotomous, Continuous, or Descriptive).
 */
export declare enum ResearchElementDefinitionVariableType {
    DICHOTOMOUS = "dichotomous",
    CONTINUOUS = "continuous",
    DESCRIPTIVE = "descriptive"
}
/**
 * mean | median | mean-of-mean | mean-of-median | median-of-mean | median-of-median
 * Indicates how elements are aggregated within the study effective period.
 */
export declare enum ResearchElementDefinitionGroupMeasure {
    MEAN = "mean",
    MEDIAN = "median",
    MEAN_OF_MEAN = "mean-of-mean",
    MEAN_OF_MEDIAN = "mean-of-median",
    MEDIAN_OF_MEAN = "median-of-mean",
    MEDIAN_OF_MEDIAN = "median-of-median"
}
/**
 * active | administratively-completed | approved | closed-to-accrual | closed-to-accrual-and-intervention | completed | disapproved | in-review | temporarily-closed-to-accrual | temporarily-closed-to-accrual-and-intervention | withdrawn
 * The current state of the study.
 */
export declare enum ResearchStudyStatus {
    ACTIVE = "active",
    ADMINISTRATIVELY_COMPLETED = "administratively-completed",
    APPROVED = "approved",
    CLOSED_TO_ACCRUAL = "closed-to-accrual",
    CLOSED_TO_ACCRUAL_AND_INTERVENTION = "closed-to-accrual-and-intervention",
    COMPLETED = "completed",
    DISAPPROVED = "disapproved",
    IN_REVIEW = "in-review",
    TEMPORARILY_CLOSED_TO_ACCRUAL = "temporarily-closed-to-accrual",
    TEMPORARILY_CLOSED_TO_ACCRUAL_AND_INTERVENTION = "temporarily-closed-to-accrual-and-intervention",
    WITHDRAWN = "withdrawn"
}
/**
 * candidate | eligible | follow-up | ineligible | not-registered | off-study | on-study | on-study-intervention | on-study-observation | pending-on-study | potential-candidate | screening | withdrawn
 * The current state of the subject.
 */
export declare enum ResearchSubjectStatus {
    CANDIDATE = "candidate",
    ELIGIBLE = "eligible",
    FOLLOW_UP = "follow-up",
    INELIGIBLE = "ineligible",
    NOT_REGISTERED = "not-registered",
    OFF_STUDY = "off-study",
    ON_STUDY = "on-study",
    ON_STUDY_INTERVENTION = "on-study-intervention",
    ON_STUDY_OBSERVATION = "on-study-observation",
    PENDING_ON_STUDY = "pending-on-study",
    POTENTIAL_CANDIDATE = "potential-candidate",
    SCREENING = "screening",
    WITHDRAWN = "withdrawn"
}
/**
 * draft | active | retired | unknown
 * The status of this risk evidence synthesis. Enables tracking the life-cycle of the content.
 * Allows filtering of risk evidence synthesiss that are appropriate for use versus not.
 */
export declare enum RiskEvidenceSynthesisPublicationStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    RETIRED = "retired",
    UNKNOWN = "unknown"
}
/**
 * draft | active | retired | unknown
 * The status of this search parameter. Enables tracking the life-cycle of the content.
 * Allows filtering of search parameters that are appropriate for use versus not.
 */
export declare enum SearchParameterPublicationStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    RETIRED = "retired",
    UNKNOWN = "unknown"
}
/**
 * number | date | string | token | reference | composite | quantity | uri | special
 * The type of value that a search parameter may contain, and how the content is interpreted.
 */
export declare enum SearchParameterSearchParamType {
    NUMBER = "number",
    DATE = "date",
    STRING = "string",
    TOKEN = "token",
    REFERENCE = "reference",
    COMPOSITE = "composite",
    QUANTITY = "quantity",
    URI = "uri",
    SPECIAL = "special"
}
/**
 * normal | phonetic | nearby | distance | other
 * How the search parameter relates to the set of elements returned by evaluating the xpath query.
 */
export declare enum SearchParameterXPathUsageType {
    NORMAL = "normal",
    PHONETIC = "phonetic",
    NEARBY = "nearby",
    DISTANCE = "distance",
    OTHER = "other"
}
/**
 * eq | ne | gt | lt | ge | le | sa | eb | ap
 * Comparators supported for the search parameter.
 * If no comparators are listed, clients should not expect servers to support any comparators.
 */
export declare enum SearchParameterSearchComparator {
    EQ = "eq",
    NE = "ne",
    GT = "gt",
    LT = "lt",
    GE = "ge",
    LE = "le",
    SA = "sa",
    EB = "eb",
    AP = "ap"
}
/**
 * missing | exact | contains | not | text | in | not-in | below | above | type | identifier | ofType
 * A modifier supported for the search parameter.
 */
export declare enum SearchParameterSearchModifierCode {
    MISSING = "missing",
    EXACT = "exact",
    CONTAINS = "contains",
    NOT = "not",
    TEXT = "text",
    IN = "in",
    NOT_IN = "not-in",
    BELOW = "below",
    ABOVE = "above",
    TYPE = "type",
    IDENTIFIER = "identifier",
    OFTYPE = "ofType"
}
/**
 * draft | active | on-hold | revoked | completed | entered-in-error | unknown
 * The status of the order.
 * The status is generally fully in the control of the requester - they determine whether the order is draft or active and, after it has been activated, competed, cancelled or suspended. States relating to the activities of the performer are reflected on either the corresponding event (see [Event Pattern](event.html) for general discussion) or using the [Task](task.html) resource.
 */
export declare enum ServiceRequestStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    ON_HOLD = "on-hold",
    REVOKED = "revoked",
    COMPLETED = "completed",
    ENTERED_IN_ERROR = "entered-in-error",
    UNKNOWN = "unknown"
}
/**
 * proposal | plan | directive | order | original-order | reflex-order | filler-order | instance-order | option
 * Whether the request is a proposal, plan, an original order or a reflex order.
 * This element is labeled as a modifier because the intent alters when and how the resource is actually applicable.
 */
export declare enum ServiceRequestIntent {
    PROPOSAL = "proposal",
    PLAN = "plan",
    DIRECTIVE = "directive",
    ORDER = "order",
    ORIGINAL_ORDER = "original-order",
    REFLEX_ORDER = "reflex-order",
    FILLER_ORDER = "filler-order",
    INSTANCE_ORDER = "instance-order",
    OPTION = "option"
}
/**
 * routine | urgent | asap | stat
 * Indicates how quickly the ServiceRequest should be addressed with respect to other requests.
 */
export declare enum ServiceRequestPriority {
    ROUTINE = "routine",
    URGENT = "urgent",
    ASAP = "asap",
    STAT = "stat"
}
/**
 * busy | free | busy-unavailable | busy-tentative | entered-in-error
 * busy | free | busy-unavailable | busy-tentative | entered-in-error.
 */
export declare enum SlotStatus {
    BUSY = "busy",
    FREE = "free",
    BUSY_UNAVAILABLE = "busy-unavailable",
    BUSY_TENTATIVE = "busy-tentative",
    ENTERED_IN_ERROR = "entered-in-error"
}
/**
 * available | unavailable | unsatisfactory | entered-in-error
 * The availability of the specimen.
 * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
 */
export declare enum SpecimenStatus {
    AVAILABLE = "available",
    UNAVAILABLE = "unavailable",
    UNSATISFACTORY = "unsatisfactory",
    ENTERED_IN_ERROR = "entered-in-error"
}
/**
 * preferred | alternate
 * The preference for this type of conditioned specimen.
 */
export declare enum SpecimenDefinitionSpecimenContainedPreference {
    PREFERRED = "preferred",
    ALTERNATE = "alternate"
}
/**
 * draft | active | retired | unknown
 * The status of this structure definition. Enables tracking the life-cycle of the content.
 * Allows filtering of structure definitions that are appropriate for use versus not.
 */
export declare enum StructureDefinitionPublicationStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    RETIRED = "retired",
    UNKNOWN = "unknown"
}
/**
 * primitive-type | complex-type | resource | logical
 * Defines the kind of structure that this definition is describing.
 */
export declare enum StructureDefinitionKind {
    PRIMITIVE_TYPE = "primitive-type",
    COMPLEX_TYPE = "complex-type",
    RESOURCE = "resource",
    LOGICAL = "logical"
}
/**
 * fhirpath | element | extension
 * Defines how to interpret the expression that defines what the context of the extension is.
 */
export declare enum StructureDefinitionExtensionContextType {
    FHIRPATH = "fhirpath",
    ELEMENT = "element",
    EXTENSION = "extension"
}
/**
 * specialization | constraint - How relates to base definition
 * How the type relates to the baseDefinition.
 * If the definition is a specialization, then it adds new elements in the differential, and the snapshot includes the inherited elements.  If the definition is a constraint, then it cannot define new elements, it can only make new rules about existing content (see [Profiling Resources](profiling.html#resources)).
 */
export declare enum StructureDefinitionTypeDerivationRule {
    SPECIALIZATION = "specialization",
    CONSTRAINT = "constraint"
}
/**
 * draft | active | retired | unknown
 * The status of this structure map. Enables tracking the life-cycle of the content.
 * Allows filtering of structure maps that are appropriate for use versus not.
 */
export declare enum StructureMapPublicationStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    RETIRED = "retired",
    UNKNOWN = "unknown"
}
/**
 * source | queried | target | produced
 * How the referenced structure is used in this mapping.
 */
export declare enum StructureMapModelMode {
    SOURCE = "source",
    QUERIED = "queried",
    TARGET = "target",
    PRODUCED = "produced"
}
/**
 * none | types | type-and-types
 * If this is the default rule set to apply for the source type or this combination of types.
 * Not applicable if the underlying model is untyped. There can only be one default mapping for any particular type combination.
 */
export declare enum StructureMapGroupTypeMode {
    NONE = "none",
    TYPES = "types",
    TYPE_AND_TYPES = "type-and-types"
}
/**
 * source | target
 * Mode for this instance of data.
 */
export declare enum StructureMapInputMode {
    SOURCE = "source",
    TARGET = "target"
}
/**
 * first | not_first | last | not_last | only_one
 * How to handle the list mode for this element.
 */
export declare enum StructureMapSourceListMode {
    FIRST = "first",
    NOT_FIRST = "not_first",
    LAST = "last",
    NOT_LAST = "not_last",
    ONLY_ONE = "only_one"
}
/**
 * type | variable
 * How to interpret the context.
 */
export declare enum StructureMapContextType {
    TYPE = "type",
    VARIABLE = "variable"
}
/**
 * first | share | last | collate
 * If field is a list, how to manage the list.
 */
export declare enum StructureMapTargetListMode {
    FIRST = "first",
    SHARE = "share",
    LAST = "last",
    COLLATE = "collate"
}
/**
 * requested | active | error | off
 * The status of the subscription, which marks the server state for managing the subscription.
 * A client can only submit subscription resources in the requested or off state. Only the server can  move a subscription from requested to active, and then to error. Either the server or the client can turn a subscription off.

This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
 */
export declare enum SubscriptionStatus {
    REQUESTED = "requested",
    ACTIVE = "active",
    ERROR = "error",
    OFF = "off"
}
/**
 * rest-hook | websocket | email | sms | message
 * The type of channel to send notifications on.
 */
export declare enum SubscriptionChannelType {
    REST_HOOK = "rest-hook",
    WEBSOCKET = "websocket",
    EMAIL = "email",
    SMS = "sms",
    MESSAGE = "message"
}
/**
 * active | inactive | entered-in-error
 * A code to indicate if the substance is actively used.
 */
export declare enum SubstanceFHIRSubstanceStatus {
    ACTIVE = "active",
    INACTIVE = "inactive",
    ENTERED_IN_ERROR = "entered-in-error"
}
/**
 * in-progress | completed | abandoned | entered-in-error
 * A code specifying the state of the dispense event.
 * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
 */
export declare enum SupplyDeliveryStatus {
    IN_PROGRESS = "in-progress",
    COMPLETED = "completed",
    ABANDONED = "abandoned",
    ENTERED_IN_ERROR = "entered-in-error"
}
/**
 * routine | urgent | asap | stat
 * Indicates how quickly this SupplyRequest should be addressed with respect to other requests.
 */
export declare enum SupplyRequestRequestPriority {
    ROUTINE = "routine",
    URGENT = "urgent",
    ASAP = "asap",
    STAT = "stat"
}
/**
 * unknown | proposal | plan | order | original-order | reflex-order | filler-order | instance-order | option
 * Indicates the "level" of actionability associated with the Task, i.e. i+R[9]Cs this a proposed task, a planned task, an actionable task, etc.
 * This element is immutable.  Proposed tasks, planned tasks, etc. must be distinct instances.

In most cases, Tasks will have an intent of "order".
 */
export declare enum TaskIntent {
    UNKNOWN = "unknown",
    PROPOSAL = "proposal",
    PLAN = "plan",
    ORDER = "order",
    ORIGINAL_ORDER = "original-order",
    REFLEX_ORDER = "reflex-order",
    FILLER_ORDER = "filler-order",
    INSTANCE_ORDER = "instance-order",
    OPTION = "option"
}
/**
 * routine | urgent | asap | stat
 * Indicates how quickly the Task should be addressed with respect to other requests.
 */
export declare enum TaskPriority {
    ROUTINE = "routine",
    URGENT = "urgent",
    ASAP = "asap",
    STAT = "stat"
}
/**
 * draft | active | retired | unknown
 * The status of this terminology capabilities. Enables tracking the life-cycle of the content.
 * Allows filtering of terminology capabilitiess that are appropriate for use versus not.This is not intended for use with actual capability statements, but where capability statements are used to describe possible or desired systems.
 */
export declare enum TerminologyCapabilitiesPublicationStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    RETIRED = "retired",
    UNKNOWN = "unknown"
}
/**
 * instance | capability | requirements
 * 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).
 */
export declare enum TerminologyCapabilitiesCapabilityStatementKind {
    INSTANCE = "instance",
    CAPABILITY = "capability",
    REQUIREMENTS = "requirements"
}
/**
 * explicit | all
 * The degree to which the server supports the code search parameter on ValueSet, if it is supported.
 * See notes on the [ValueSet](valueset.html#) resource.
 */
export declare enum TerminologyCapabilitiesCodeSearchSupport {
    EXPLICIT = "explicit",
    ALL = "all"
}
/**
 * completed | in-progress | waiting | stopped | entered-in-error
 * The current state of this test report.
 * The status represents where the execution is currently within the test script execution life cycle.

This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
 */
export declare enum TestReportStatus {
    COMPLETED = "completed",
    IN_PROGRESS = "in-progress",
    WAITING = "waiting",
    STOPPED = "stopped",
    ENTERED_IN_ERROR = "entered-in-error"
}
/**
 * pass | fail | pending
 * The overall result from the execution of the TestScript.
 * The pass and fail result represents a completed test script execution. The pending result represents a test script execution that has not yet started or is currently in progress.
 */
export declare enum TestReportResult {
    PASS = "pass",
    FAIL = "fail",
    PENDING = "pending"
}
/**
 * test-engine | client | server
 * The type of participant.
 */
export declare enum TestReportParticipantType {
    TEST_ENGINE = "test-engine",
    CLIENT = "client",
    SERVER = "server"
}
/**
 * pass | skip | fail | warning | error
 * The result of this operation.
 */
export declare enum TestReportActionResult {
    PASS = "pass",
    SKIP = "skip",
    FAIL = "fail",
    WARNING = "warning",
    ERROR = "error"
}
/**
 * draft | active | retired | unknown
 * The status of this test script. Enables tracking the life-cycle of the content.
 * Allows filtering of test scripts that are appropriate for use versus not.
 */
export declare enum TestScriptPublicationStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    RETIRED = "retired",
    UNKNOWN = "unknown"
}
/**
 * delete | get | options | patch | post | put | head
 * The HTTP method the test engine MUST use for this operation regardless of any other operation details.
 * The primary purpose of the explicit HTTP method is support of  HTTP POST method invocation of the FHIR search. Other uses will include support of negative testing.
 */
export declare enum TestScriptRequestMethodCode {
    DELETE = "delete",
    GET = "get",
    OPTIONS = "options",
    PATCH = "patch",
    POST = "post",
    PUT = "put",
    HEAD = "head"
}
/**
 * response | request
 * The direction to use for the assertion.
 * If the direction is specified as "response" (the default), then the processing of this assert is against the received response message. If the direction is specified as "request", then the processing of this assert is against the sent request message.
 */
export declare enum TestScriptAssertionDirectionType {
    RESPONSE = "response",
    REQUEST = "request"
}
/**
 * equals | notEquals | in | notIn | greaterThan | lessThan | empty | notEmpty | contains | notContains | eval
 * The operator type defines the conditional behavior of the assert. If not defined, the default is equals.
 * Operators are useful especially for negative testing.  If operator is not specified, then the "equals" operator is assumed; e.g. ```<code>   <assert>  <operator value="in" />  <responseCode value="200,201,204" />    </assert>    <assert>  <operator value="notEquals" />  <response value="okay"/>   </assert>    <assert>  <operator value="greaterThan" />    <responseHeader>     <field value="Content-Length" />     <value value="0" />    </responseHeader/>   </assert> </code> ```.
 */
export declare enum TestScriptAssertionOperatorType {
    EQUALS = "equals",
    NOTEQUALS = "notEquals",
    IN = "in",
    NOTIN = "notIn",
    GREATERTHAN = "greaterThan",
    LESSTHAN = "lessThan",
    EMPTY = "empty",
    NOTEMPTY = "notEmpty",
    CONTAINS = "contains",
    NOTCONTAINS = "notContains",
    EVAL = "eval"
}
/**
 * okay | created | noContent | notModified | bad | forbidden | notFound | methodNotAllowed | conflict | gone | preconditionFailed | unprocessable
 * okay | created | noContent | notModified | bad | forbidden | notFound | methodNotAllowed | conflict | gone | preconditionFailed | unprocessable.
 * This is a shorter way of achieving similar verifications via "assert.responseCode".  If you need more control, then use "assert.responseCode"  e.g. <assert>  <contentType value="json" />  <response value="okay"/> </assert>.
 */
export declare enum TestScriptAssertionResponseTypes {
    OKAY = "okay",
    CREATED = "created",
    NOCONTENT = "noContent",
    NOTMODIFIED = "notModified",
    BAD = "bad",
    FORBIDDEN = "forbidden",
    NOTFOUND = "notFound",
    METHODNOTALLOWED = "methodNotAllowed",
    CONFLICT = "conflict",
    GONE = "gone",
    PRECONDITIONFAILED = "preconditionFailed",
    UNPROCESSABLE = "unprocessable"
}
/**
 * draft | active | retired | unknown
 * The status of this value set. Enables tracking the life-cycle of the content. The status of the value set applies to the value set definition (ValueSet.compose) and the associated ValueSet metadata. Expansions do not have a state.
 * Allows filtering of value sets that are appropriate for use versus not.See also the [valueset-workflowStatus](extension-valueset-workflowstatus.html) extension for additional status information related to the editorial process.
 */
export declare enum ValueSetPublicationStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    RETIRED = "retired",
    UNKNOWN = "unknown"
}
/**
 * = | is-a | descendent-of | is-not-a | regex | in | not-in | generalizes | exists
 * The kind of operation to perform as a part of the filter criteria.
 * In case filter.property represents a property of the system, the operation applies to the selected property. In case filter.property represents a filter of the system, the operation SHALL match one of the CodeSystem.filter.operator values.
 */
export declare enum ValueSetFilterOperator {
    E = "=",
    IS_A = "is-a",
    DESCENDENT_OF = "descendent-of",
    IS_NOT_A = "is-not-a",
    REGEX = "regex",
    IN = "in",
    NOT_IN = "not-in",
    GENERALIZES = "generalizes",
    EXISTS = "exists"
}
/**
 * attested | validated | in-process | req-revalid | val-fail | reval-fail
 * The validation status of the target (attested; validated; in process; requires revalidation; validation failed; revalidation failed).
 */
export declare enum VerificationResultstatus {
    ATTESTED = "attested",
    VALIDATED = "validated",
    IN_PROCESS = "in-process",
    REQ_REVALID = "req-revalid",
    VAL_FAIL = "val-fail",
    REVAL_FAIL = "reval-fail"
}
/**
 * active | cancelled | draft | entered-in-error
 * The status of the resource instance.
 * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
 */
export declare enum VisionPrescriptionVisionStatus {
    ACTIVE = "active",
    CANCELLED = "cancelled",
    DRAFT = "draft",
    ENTERED_IN_ERROR = "entered-in-error"
}
/**
 * right | left
 * The eye for which the lens specification applies.
 * May also appear as OD (oculus dexter) for the right eye and OS (oculus siniter) for the left eye.
 */
export declare enum VisionPrescriptionVisionEyes {
    RIGHT = "right",
    LEFT = "left"
}
/**
 * up | down | in | out
 * The relative base, or reference lens edge, for the prism.
 */
export declare enum VisionPrescriptionVisionBase {
    UP = "up",
    DOWN = "down",
    IN = "in",
    OUT = "out"
}
/**
 * registered | preliminary | final | amended | corrected | cancelled | entered-in-error | unknown
 * Indicates the status of the detected issue.
 * This element is labeled as a modifier because the status contains the codes cancelled and entered-in-error that mark the issue as not currently valid.
 */
export declare enum DetectedIssueStatus {
    REGISTERED = "registered",
    PRELIMINARY = "preliminary",
    FINAL = "final",
    AMENDED = "amended",
    CORRECTED = "corrected",
    CANCELLED = "cancelled",
    ENTERED_IN_ERROR = "entered-in-error",
    UNKNOWN = "unknown"
}
/**
 * registered | preliminary | final | amended | corrected | cancelled | entered-in-error | unknown
 * The status of the result value.
 * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
 */
export declare enum ObservationStatus {
    REGISTERED = "registered",
    PRELIMINARY = "preliminary",
    FINAL = "final",
    AMENDED = "amended",
    CORRECTED = "corrected",
    CANCELLED = "cancelled",
    ENTERED_IN_ERROR = "entered-in-error",
    UNKNOWN = "unknown"
}
/**
 * registered | partial | preliminary | final | amended | corrected | appended | cancelled | entered-in-error | unknown
 * The status of the diagnostic report.
 */
export declare enum DiagnosticReportStatus {
    REGISTERED = "registered",
    PARTIAL = "partial",
    PRELIMINARY = "preliminary",
    FINAL = "final",
    AMENDED = "amended",
    CORRECTED = "corrected",
    APPENDED = "appended",
    CANCELLED = "cancelled",
    ENTERED_IN_ERROR = "entered-in-error",
    UNKNOWN = "unknown"
}
/**
 * planned | arrived | triaged | in-progress | onleave | finished | cancelled | entered-in-error | unknown
 * planned | arrived | triaged | in-progress | onleave | finished | cancelled +.
 */
export declare enum EncounterStatus {
    PLANNED = "planned",
    ARRIVED = "arrived",
    TRIAGED = "triaged",
    IN_PROGRESS = "in-progress",
    ONLEAVE = "onleave",
    FINISHED = "finished",
    CANCELLED = "cancelled",
    ENTERED_IN_ERROR = "entered-in-error",
    UNKNOWN = "unknown"
}
/**
 * barcode | rfid | manual | card | self-reported | unknown
 * A coded entry to indicate how the data was entered.
 */
export declare enum DeviceUDIEntryType {
    BARCODE = "barcode",
    RFID = "rfid",
    MANUAL = "manual",
    CARD = "card",
    SELF_REPORTED = "self-reported",
    UNKNOWN = "unknown"
}
/**
 * group | display | question | boolean | decimal | integer | date | dateTime | time | string | text | url | choice | open-choice | attachment | reference | quantity
 * 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.).
 * Additional constraints on the type of answer can be conveyed by extensions. The value may come from the ElementDefinition referred to by .definition.
 */
export declare enum QuestionnaireItemType {
    GROUP = "group",
    DISPLAY = "display",
    QUESTION = "question",
    BOOLEAN = "boolean",
    DECIMAL = "decimal",
    INTEGER = "integer",
    DATE = "date",
    DATETIME = "dateTime",
    TIME = "time",
    STRING = "string",
    TEXT = "text",
    URL = "url",
    CHOICE = "choice",
    OPEN_CHOICE = "open-choice",
    ATTACHMENT = "attachment",
    REFERENCE = "reference",
    QUANTITY = "quantity"
}
/**
 * registered | preliminary | final | amended | corrected | cancelled | entered-in-error | unknown
 * The status of the RiskAssessment, using the same statuses as an Observation.
 */
export declare enum RiskAssessmentStatus {
    REGISTERED = "registered",
    PRELIMINARY = "preliminary",
    FINAL = "final",
    AMENDED = "amended",
    CORRECTED = "corrected",
    CANCELLED = "cancelled",
    ENTERED_IN_ERROR = "entered-in-error",
    UNKNOWN = "unknown"
}
/**
 * draft | active | suspended | cancelled | completed | entered-in-error | unknown
 * Status of the supply request.
 */
export declare enum SupplyRequestStatus {
    DRAFT = "draft",
    ACTIVE = "active",
    SUSPENDED = "suspended",
    CANCELLED = "cancelled",
    COMPLETED = "completed",
    ENTERED_IN_ERROR = "entered-in-error",
    UNKNOWN = "unknown"
}
/**
 * active | completed | entered-in-error | intended | stopped | on-hold
 * 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.
 * DeviceUseStatment is a statement at a point in time.  The status is only representative at the point when it was asserted.  The value set for contains codes that assert the status of the use  by the patient (for example, stopped or on hold) as well as codes that assert the status of the resource itself (for example, entered in error).

This element is labeled as a modifier because the status contains the codes that mark the statement as not currently valid.
 */
export declare enum DeviceUseStatementStatus {
    ACTIVE = "active",
    COMPLETED = "completed",
    ENTERED_IN_ERROR = "entered-in-error",
    INTENDED = "intended",
    STOPPED = "stopped",
    ON_HOLD = "on-hold"
}
/**
 * draft | requested | received | accepted | rejected | ready | cancelled | in-progress | on-hold | failed | completed | entered-in-error
 * The current status of the task.
 */
export declare enum TaskStatus {
    DRAFT = "draft",
    REQUESTED = "requested",
    RECEIVED = "received",
    ACCEPTED = "accepted",
    REJECTED = "rejected",
    READY = "ready",
    CANCELLED = "cancelled",
    IN_PROGRESS = "in-progress",
    ON_HOLD = "on-hold",
    FAILED = "failed",
    COMPLETED = "completed",
    ENTERED_IN_ERROR = "entered-in-error"
}
/**
 * create | copy | truncate | escape | cast | append | translate | reference | dateOp | uuid | pointer | evaluate | cc | c | qty | id | cp
 * How the data is copied / created.
 */
export declare enum StructureMapTransform {
    CREATE = "create",
    COPY = "copy",
    TRUNCATE = "truncate",
    ESCAPE = "escape",
    CAST = "cast",
    APPEND = "append",
    TRANSLATE = "translate",
    REFERENCE = "reference",
    DATEOP = "dateOp",
    UUID = "uuid",
    POINTER = "pointer",
    EVALUATE = "evaluate",
    CC = "cc",
    C = "c",
    QTY = "qty",
    ID = "id",
    CP = "cp"
}
/**
 * A duration of time during which an organism (or a process) has existed
 * A duration of time during which an organism (or a process) has existed.
 */
export interface Age extends Quantity {
}
/**
 * A measured or measurable amount
 * 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.
 * The context of use may frequently define what kind of quantity this is and therefore what kind of units can be used. The context of use may also restrict the values for the comparator.
 */
export interface Count extends Quantity {
}
/**
 * A length - a value with a unit that is a physical distance
 * A length - a value with a unit that is a physical distance.
 */
export interface Distance extends Quantity {
}
/**
 * A length of time
 * A length of time.
 */
export interface Duration extends Quantity {
}
/**
 * An amount of money. With regard to precision, see [Decimal Precision](datatypes.html#precision)
 * There SHALL be a code if there is a value and it SHALL be an expression of currency.  If system is present, it SHALL be ISO 4217 (system = "urn:iso:std:iso:4217" - currency).
 */
export interface MoneyQuantity extends Quantity {
}
/**
 * Text node with attribution
 * A  text note which also  contains information about who made the statement and when.
 * For systems that do not have structured annotations, they can simply communicate a single annotation with no author or time.  This element may need to be included in narrative because of the potential for modifying information.  *Annotations SHOULD NOT* be used to communicate "modifying" information that could be computable. (This is a SHOULD because enforcing user behavior is nearly impossible).
 */
export interface Annotation extends Element {
    /**
     * Individual responsible for the annotation
     * The individual responsible for making the annotation.
     * Organization is used when there's no need for specific attribution as to who made the comment.
     */
    authorReference?: Reference;
    /**
     * Individual responsible for the annotation
     * The individual responsible for making the annotation.
     * Organization is used when there's no need for specific attribution as to who made the comment.
     */
    authorString?: string;
    /**
     * Extension for authorString
     **/
    _authorString?: Element;
    /**
     * When the annotation was made
     * Indicates when this particular annotation was made.
     */
    time?: dateTime;
    /**
     * Extension for time
     **/
    _time?: Element;
    /**
     * The annotation  - text content (as markdown)
     * The text of the annotation in markdown format.
     */
    text: markdown;
    /**
     * Extension for text
     **/
    _text?: Element;
}
/**
 * Content in a format defined elsewhere
 * For referring to data content defined in other formats.
 * When providing a summary view (for example with Observation.value[x]) Attachment should be represented with a brief display text such as "Signed Procedure Consent".
 */
export interface Attachment extends Element {
    /**
     * Mime type of the content, with charset etc.
     * 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.
     */
    contentType?: code;
    /**
     * Extension for contentType
     **/
    _contentType?: Element;
    /**
     * Human language of the content (BCP-47)
     * The human language of the content. The value can be any valid value according to BCP 47.
     */
    language?: code;
    /**
     * Extension for language
     **/
    _language?: Element;
    /**
     * Data inline, base64ed
     * The actual data of the attachment - a sequence of bytes, base64 encoded.
     * The base64-encoded data SHALL be expressed in the same character set as the base resource XML or JSON.
     */
    data?: base64Binary;
    /**
     * Extension for data
     **/
    _data?: Element;
    /**
     * Uri where the data can be found
     * A location where the data can be accessed.
     * If both data and url are provided, the url SHALL point to the same content as the data contains. Urls may be relative references or may reference transient locations such as a wrapping envelope using cid: though this has ramifications for using signatures. Relative URLs are interpreted relative to the service url, like a resource reference, rather than relative to the resource itself. If a URL is provided, it SHALL resolve to actual data.
     */
    url?: url;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Number of bytes of content (if url provided)
     * The number of bytes of data that make up this attachment (before base64 encoding, if that is done).
     * The number of bytes is redundant if the data is provided as a base64binary, but is useful if the data is provided as a url reference.
     */
    size?: unsignedInt;
    /**
     * Extension for size
     **/
    _size?: Element;
    /**
     * Hash of the data (sha-1, base64ed)
     * The calculated hash of the data using SHA-1. Represented using base64.
     * The hash is calculated on the data prior to base64 encoding, if the data is based64 encoded. The hash is not intended to support digital signatures. Where protection against malicious threats a digital signature should be considered, see [Provenance.signature](provenance-definitions.html#Provenance.signature) for mechanism to protect a resource with a digital signature.
     */
    hash?: base64Binary;
    /**
     * Extension for hash
     **/
    _hash?: Element;
    /**
     * Label to display in place of the data
     * A label or set of text to display in place of the data.
     */
    title?: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * Date attachment was first created
     * The date that the attachment was first created.
     */
    creation?: dateTime;
    /**
     * Extension for creation
     **/
    _creation?: Element;
}
/**
 * Base for elements defined inside a resource
 * Base definition for all elements that are defined inside a resource - but not those in a data type.
 */
export interface BackboneElement extends Element {
    /**
     * Extensions that cannot be ignored even if unrecognized
     * May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.

Modifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).
     * There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions.  The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.
     */
    modifierExtension?: Extension[];
}
/**
 * Concept - reference to a terminology or just  text
 * A concept that may be defined by a formal reference to a terminology or ontology or may be provided by text.
 * Not all terminology uses fit this general pattern. In some cases, models should not use CodeableConcept and use Coding directly and provide their own structure for managing text, codings, translations and the relationship between elements and pre- and post-coordination.
 */
export interface CodeableConcept extends Element {
    /**
     * Code defined by a terminology system
     * A reference to a code defined by a terminology system.
     * Codes may be defined very casually in enumerations, or code lists, up to very formal definitions such as SNOMED CT - see the HL7 v3 Core Principles for more information.  Ordering of codings is undefined and SHALL NOT be used to infer meaning. Generally, at most only one of the coding values will be labeled as UserSelected = true.
     */
    coding?: Coding[];
    /**
     * Plain text representation of the concept
     * 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.
     * Very often the text is the same as a displayName of one of the codings.
     */
    text?: string;
    /**
     * Extension for text
     **/
    _text?: Element;
}
/**
 * A reference to a code defined by a terminology system
 * A reference to a code defined by a terminology system.
 * Codes may be defined very casually in enumerations or code lists, up to very formal definitions such as SNOMED CT - see the HL7 v3 Core Principles for more information.
 */
export interface Coding extends Element {
    /**
     * Identity of the terminology system
     * The identification of the code system that defines the meaning of the symbol in the code.
     * The URI may be an OID (urn:oid:...) or a UUID (urn:uuid:...).  OIDs and UUIDs SHALL be references to the HL7 OID registry. Otherwise, the URI should come from HL7's list of FHIR defined special URIs or it should reference to some definition that establishes the system clearly and unambiguously.
     */
    system?: uri;
    /**
     * Extension for system
     **/
    _system?: Element;
    /**
     * Version of the system - if relevant
     * 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.
     * Where the terminology does not clearly define what string should be used to identify code system versions, the recommendation is to use the date (expressed in FHIR date format) on which that version was officially published as the version date.
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
    /**
     * Symbol in syntax defined by the system
     * 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).
     */
    code?: code;
    /**
     * Extension for code
     **/
    _code?: Element;
    /**
     * Representation defined by the system
     * A representation of the meaning of the code in the system, following the rules of the system.
     */
    display?: string;
    /**
     * Extension for display
     **/
    _display?: Element;
    /**
     * If this coding was chosen directly by the user
     * Indicates that this coding was chosen by a user directly - e.g. off a pick list of available items (codes or displays).
     * Amongst a set of alternatives, a directly chosen code is the most appropriate starting point for new translations. There is some ambiguity about what exactly 'directly chosen' implies, and trading partner agreement may be needed to clarify the use of this element and its consequences more completely.
     */
    userSelected?: boolean;
    /**
     * Extension for userSelected
     **/
    _userSelected?: Element;
}
/**
 * Contact information
 * Specifies contact information for a person or organization.
 */
export interface ContactDetail extends Element {
    /**
     * Name of an individual to contact
     * The name of an individual to contact.
     * If there is no named individual, the telecom information is for the organization as a whole.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Contact details for individual or organization
     * The contact details for the individual (if a name was provided) or the organization.
     */
    telecom?: ContactPoint[];
}
/**
 * Amount of medication administered
 * The amount of medication administered.
 */
export interface DosageDoseAndRate extends Element {
    /**
     * The kind of dose or rate specified
     * The kind of dose or rate specified, for example, ordered or calculated.
     */
    type?: CodeableConcept;
    /**
     * Amount of medication per dose
     * Amount of medication per dose.
     * Note that this specifies the quantity of the specified medication, not the quantity for each active ingredient(s). Each ingredient amount can be communicated in the Medication resource. For example, if one wants to communicate that a tablet was 375 mg, where the dose was one tablet, you can use the Medication resource to document that the tablet was comprised of 375 mg of drug XYZ. Alternatively if the dose was 375 mg, then you may only need to use the Medication resource to indicate this was a tablet. If the example were an IV such as dopamine and you wanted to communicate that 400mg of dopamine was mixed in 500 ml of some IV solution, then this would all be communicated in the Medication resource. If the administration is not intended to be instantaneous (rate is present or timing has a duration), this can be specified to convey the total amount to be administered over the period of time as indicated by the schedule e.g. 500 ml in dose, with timing used to convey that this should be done over 4 hours.
     */
    doseRange?: Range;
    /**
     * Amount of medication per dose
     * Amount of medication per dose.
     * Note that this specifies the quantity of the specified medication, not the quantity for each active ingredient(s). Each ingredient amount can be communicated in the Medication resource. For example, if one wants to communicate that a tablet was 375 mg, where the dose was one tablet, you can use the Medication resource to document that the tablet was comprised of 375 mg of drug XYZ. Alternatively if the dose was 375 mg, then you may only need to use the Medication resource to indicate this was a tablet. If the example were an IV such as dopamine and you wanted to communicate that 400mg of dopamine was mixed in 500 ml of some IV solution, then this would all be communicated in the Medication resource. If the administration is not intended to be instantaneous (rate is present or timing has a duration), this can be specified to convey the total amount to be administered over the period of time as indicated by the schedule e.g. 500 ml in dose, with timing used to convey that this should be done over 4 hours.
     */
    doseQuantity?: Quantity;
    /**
     * Amount of medication per unit of time
     * Amount of medication per unit of time.
     * It is possible to supply both a rate and a doseQuantity to provide full details about how the medication is to be administered and supplied. If the rate is intended to change over time, depending on local rules/regulations, each change should be captured as a new version of the MedicationRequest with an updated rate, or captured with a new MedicationRequest with the new rate.

It is possible to specify a rate over time (for example, 100 ml/hour) using either the rateRatio and rateQuantity.  The rateQuantity approach requires systems to have the capability to parse UCUM grammer where ml/hour is included rather than a specific ratio where the time is specified as the denominator.  Where a rate such as 500ml over 2 hours is specified, the use of rateRatio may be more semantically correct than specifying using a rateQuantity of 250 mg/hour.
     */
    rateRatio?: Ratio;
    /**
     * Amount of medication per unit of time
     * Amount of medication per unit of time.
     * It is possible to supply both a rate and a doseQuantity to provide full details about how the medication is to be administered and supplied. If the rate is intended to change over time, depending on local rules/regulations, each change should be captured as a new version of the MedicationRequest with an updated rate, or captured with a new MedicationRequest with the new rate.

It is possible to specify a rate over time (for example, 100 ml/hour) using either the rateRatio and rateQuantity.  The rateQuantity approach requires systems to have the capability to parse UCUM grammer where ml/hour is included rather than a specific ratio where the time is specified as the denominator.  Where a rate such as 500ml over 2 hours is specified, the use of rateRatio may be more semantically correct than specifying using a rateQuantity of 250 mg/hour.
     */
    rateRange?: Range;
    /**
     * Amount of medication per unit of time
     * Amount of medication per unit of time.
     * It is possible to supply both a rate and a doseQuantity to provide full details about how the medication is to be administered and supplied. If the rate is intended to change over time, depending on local rules/regulations, each change should be captured as a new version of the MedicationRequest with an updated rate, or captured with a new MedicationRequest with the new rate.

It is possible to specify a rate over time (for example, 100 ml/hour) using either the rateRatio and rateQuantity.  The rateQuantity approach requires systems to have the capability to parse UCUM grammer where ml/hour is included rather than a specific ratio where the time is specified as the denominator.  Where a rate such as 500ml over 2 hours is specified, the use of rateRatio may be more semantically correct than specifying using a rateQuantity of 250 mg/hour.
     */
    rateQuantity?: Quantity;
}
/**
 * How the medication is/was taken or should be taken
 * Indicates how the medication is/was taken or should be taken by the patient.
 */
export interface Dosage extends BackboneElement {
    /**
     * The order of the dosage instructions
     * Indicates the order in which the dosage instructions should be applied or interpreted.
     */
    sequence?: integer;
    /**
     * Extension for sequence
     **/
    _sequence?: Element;
    /**
     * Free text dosage instructions e.g. SIG
     * Free text dosage instructions e.g. SIG.
     */
    text?: string;
    /**
     * Extension for text
     **/
    _text?: Element;
    /**
     * Supplemental instruction or warnings to the patient - e.g. "with meals", "may cause drowsiness"
     * Supplemental instructions to the patient on how to take the medication  (e.g. "with meals" or"take half to one hour before food") or warnings for the patient about the medication (e.g. "may cause drowsiness" or "avoid exposure of skin to direct sunlight or sunlamps").
     * Information about administration or preparation of the medication (e.g. "infuse as rapidly as possibly via intraperitoneal port" or "immediately following drug x") should be populated in dosage.text.
     */
    additionalInstruction?: CodeableConcept[];
    /**
     * Patient or consumer oriented instructions
     * Instructions in terms that are understood by the patient or consumer.
     */
    patientInstruction?: string;
    /**
     * Extension for patientInstruction
     **/
    _patientInstruction?: Element;
    /**
     * When medication should be administered
     * When medication should be administered.
     * This attribute might not always be populated while the Dosage.text is expected to be populated.  If both are populated, then the Dosage.text should reflect the content of the Dosage.timing.
     */
    timing?: Timing;
    /**
     * Take "as needed" (for x)
     * 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).
     * Can express "as needed" without a reason by setting the Boolean = True.  In this case the CodeableConcept is not populated.  Or you can express "as needed" with a reason by including the CodeableConcept.  In this case the Boolean is assumed to be True.  If you set the Boolean to False, then the dose is given according to the schedule and is not "prn" or "as needed".
     */
    asNeededBoolean?: boolean;
    /**
     * Extension for asNeededBoolean
     **/
    _asNeededBoolean?: Element;
    /**
     * Take "as needed" (for x)
     * 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).
     * Can express "as needed" without a reason by setting the Boolean = True.  In this case the CodeableConcept is not populated.  Or you can express "as needed" with a reason by including the CodeableConcept.  In this case the Boolean is assumed to be True.  If you set the Boolean to False, then the dose is given according to the schedule and is not "prn" or "as needed".
     */
    asNeededCodeableConcept?: CodeableConcept;
    /**
     * Body site to administer to
     * Body site to administer to.
     * If the use case requires attributes from the BodySite resource (e.g. to identify and track separately) then use the standard extension [bodySite](extension-bodysite.html).  May be a summary code, or a reference to a very precise definition of the location, or both.
     */
    site?: CodeableConcept;
    /**
     * How drug should enter body
     * How drug should enter body.
     */
    route?: CodeableConcept;
    /**
     * Technique for administering medication
     * Technique for administering medication.
     * Terminologies used often pre-coordinate this term with the route and or form of administration.
     */
    method?: CodeableConcept;
    /**
     * Amount of medication administered
     * The amount of medication administered.
     */
    doseAndRate?: DosageDoseAndRate[];
    /**
     * Upper limit on medication per unit of time
     * Upper limit on medication per unit of time.
     * This is intended for use as an adjunct to the dosage when there is an upper cap.  For example "2 tablets every 4 hours to a maximum of 8/day".
     */
    maxDosePerPeriod?: Ratio;
    /**
     * Upper limit on medication per administration
     * Upper limit on medication per administration.
     * This is intended for use as an adjunct to the dosage when there is an upper cap.  For example, a body surface area related dose with a maximum amount, such as 1.5 mg/m2 (maximum 2 mg) IV over 5 – 10 minutes would have doseQuantity of 1.5 mg/m2 and maxDosePerAdministration of 2 mg.
     */
    maxDosePerAdministration?: Quantity;
    /**
     * Upper limit on medication per lifetime of the patient
     * Upper limit on medication per lifetime of the patient.
     */
    maxDosePerLifetime?: Quantity;
}
/**
 * Base for all elements
 * Base definition for all elements in a resource.
 */
export interface Element {
    /**
     * Unique id for inter-element referencing
     * Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.
     */
    id?: string;
    /**
     * Extension for id
     **/
    _id?: Element;
    /**
     * Additional content defined by implementations
     * May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
     * There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions.  The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.
     */
    extension?: Extension[];
}
/**
 * Optional Extensions Element
 * Optional Extension Element - found in all resources.
 */
export interface Extension extends Element {
    /**
     * identifies the meaning of the extension
     * Source of the definition for the extension code - a logical name or a URL.
     * The definition may point directly to a computable or human-readable definition of the extensibility codes, or it may be a logical URI as declared in some other specification. The definition SHALL be a URI for the Structure Definition defining the extension.
     */
    url: string;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueBase64Binary?: base64Binary;
    /**
     * Extension for valueBase64Binary
     **/
    _valueBase64Binary?: Element;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueBoolean?: boolean;
    /**
     * Extension for valueBoolean
     **/
    _valueBoolean?: Element;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueCanonical?: canonical;
    /**
     * Extension for valueCanonical
     **/
    _valueCanonical?: Element;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueCode?: code;
    /**
     * Extension for valueCode
     **/
    _valueCode?: Element;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueDate?: date;
    /**
     * Extension for valueDate
     **/
    _valueDate?: Element;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueDateTime?: dateTime;
    /**
     * Extension for valueDateTime
     **/
    _valueDateTime?: Element;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueDecimal?: decimal;
    /**
     * Extension for valueDecimal
     **/
    _valueDecimal?: Element;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueId?: id;
    /**
     * Extension for valueId
     **/
    _valueId?: Element;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueInstant?: instant;
    /**
     * Extension for valueInstant
     **/
    _valueInstant?: Element;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueInteger?: integer;
    /**
     * Extension for valueInteger
     **/
    _valueInteger?: Element;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueMarkdown?: markdown;
    /**
     * Extension for valueMarkdown
     **/
    _valueMarkdown?: Element;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueOid?: oid;
    /**
     * Extension for valueOid
     **/
    _valueOid?: Element;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valuePositiveInt?: positiveInt;
    /**
     * Extension for valuePositiveInt
     **/
    _valuePositiveInt?: Element;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueString?: string;
    /**
     * Extension for valueString
     **/
    _valueString?: Element;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueTime?: time;
    /**
     * Extension for valueTime
     **/
    _valueTime?: Element;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueUnsignedInt?: unsignedInt;
    /**
     * Extension for valueUnsignedInt
     **/
    _valueUnsignedInt?: Element;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueUri?: uri;
    /**
     * Extension for valueUri
     **/
    _valueUri?: Element;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueUrl?: url;
    /**
     * Extension for valueUrl
     **/
    _valueUrl?: Element;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueUuid?: uuid;
    /**
     * Extension for valueUuid
     **/
    _valueUuid?: Element;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueAddress?: Address;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueAge?: Age;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueAnnotation?: Annotation;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueAttachment?: Attachment;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueCodeableConcept?: CodeableConcept;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueCoding?: Coding;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueContactPoint?: ContactPoint;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueCount?: Count;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueDistance?: Distance;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueDuration?: Duration;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueHumanName?: HumanName;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueIdentifier?: Identifier;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueMoney?: Money;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valuePeriod?: Period;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueQuantity?: Quantity;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueRange?: Range;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueRatio?: Ratio;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueReference?: Reference;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueSampledData?: SampledData;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueSignature?: Signature;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueTiming?: Timing;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueContactDetail?: ContactDetail;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueContributor?: Contributor;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueDataRequirement?: DataRequirement;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueExpression?: Expression;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueParameterDefinition?: ParameterDefinition;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueRelatedArtifact?: RelatedArtifact;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueTriggerDefinition?: TriggerDefinition;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueUsageContext?: UsageContext;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueDosage?: Dosage;
    /**
     * Value of extension
     * Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).
     */
    valueMeta?: Meta;
}
/**
 * The marketing status describes the date when a medicinal product is actually put on the market or the date as of which it is no longer available
 * The marketing status describes the date when a medicinal product is actually put on the market or the date as of which it is no longer available.
 */
export interface MarketingStatus extends BackboneElement {
    /**
     * The country in which the marketing authorisation has been granted shall be specified It should be specified using the ISO 3166 ‑ 1 alpha-2 code elements
     * The country in which the marketing authorisation has been granted shall be specified It should be specified using the ISO 3166 ‑ 1 alpha-2 code elements.
     */
    country: CodeableConcept;
    /**
     * Where a Medicines Regulatory Agency has granted a marketing authorisation for which specific provisions within a jurisdiction apply, the jurisdiction can be specified using an appropriate controlled terminology The controlled term and the controlled term identifier shall be specified
     * Where a Medicines Regulatory Agency has granted a marketing authorisation for which specific provisions within a jurisdiction apply, the jurisdiction can be specified using an appropriate controlled terminology The controlled term and the controlled term identifier shall be specified.
     */
    jurisdiction?: CodeableConcept;
    /**
     * This attribute provides information on the status of the marketing of the medicinal product See ISO/TS 20443 for more information and examples
     * This attribute provides information on the status of the marketing of the medicinal product See ISO/TS 20443 for more information and examples.
     */
    status: CodeableConcept;
    /**
     * The date when the Medicinal Product is placed on the market by the Marketing Authorisation Holder (or where applicable, the manufacturer/distributor) in a country and/or jurisdiction shall be provided A complete date consisting of day, month and year shall be specified using the ISO 8601 date format NOTE “Placed on the market” refers to the release of the Medicinal Product into the distribution chain
     * The date when the Medicinal Product is placed on the market by the Marketing Authorisation Holder (or where applicable, the manufacturer/distributor) in a country and/or jurisdiction shall be provided A complete date consisting of day, month and year shall be specified using the ISO 8601 date format NOTE “Placed on the market” refers to the release of the Medicinal Product into the distribution chain.
     */
    dateRange: Period;
    /**
     * The date when the Medicinal Product is placed on the market by the Marketing Authorisation Holder (or where applicable, the manufacturer/distributor) in a country and/or jurisdiction shall be provided A complete date consisting of day, month and year shall be specified using the ISO 8601 date format NOTE “Placed on the market” refers to the release of the Medicinal Product into the distribution chain
     * The date when the Medicinal Product is placed on the market by the Marketing Authorisation Holder (or where applicable, the manufacturer/distributor) in a country and/or jurisdiction shall be provided A complete date consisting of day, month and year shall be specified using the ISO 8601 date format NOTE “Placed on the market” refers to the release of the Medicinal Product into the distribution chain.
     */
    restoreDate?: dateTime;
    /**
     * Extension for restoreDate
     **/
    _restoreDate?: Element;
}
/**
 * Metadata about a resource
 * The metadata about a resource. This is content in the resource that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.
 */
export interface Meta extends Element {
    /**
     * Version specific identifier
     * The version specific identifier, as it appears in the version portion of the URL. This value changes when the resource is created, updated, or deleted.
     * The server assigns this value, and ignores what the client specifies, except in the case that the server is imposing version integrity on updates/deletes.
     */
    versionId?: id;
    /**
     * Extension for versionId
     **/
    _versionId?: Element;
    /**
     * When the resource version last changed
     * When the resource last changed - e.g. when the version changed.
     * This value is always populated except when the resource is first being created. The server / resource manager sets this value; what a client provides is irrelevant. This is equivalent to the HTTP Last-Modified and SHOULD have the same value on a [read](http.html#read) interaction.
     */
    lastUpdated?: instant;
    /**
     * Extension for lastUpdated
     **/
    _lastUpdated?: Element;
    /**
     * Identifies where the resource comes from
     * A uri that identifies the source system of the resource. This provides a minimal amount of [Provenance](provenance.html#) information that can be used to track or differentiate the source of information in the resource. The source may identify another FHIR server, document, message, database, etc.
     * In the provenance resource, this corresponds to Provenance.entity.what[x]. The exact use of the source (and the implied Provenance.entity.role) is left to implementer discretion. Only one nominated source is allowed; for additional provenance details, a full Provenance resource should be used.

This element can be used to indicate where the current master source of a resource that has a canonical URL if the resource is no longer hosted at the canonical URL.
     */
    source?: uri;
    /**
     * Extension for source
     **/
    _source?: Element;
    /**
     * Profiles this resource claims to conform to
     * A list of profiles (references to [StructureDefinition](structuredefinition.html#) resources) that this resource claims to conform to. The URL is a reference to [StructureDefinition.url](structuredefinition-definitions.html#StructureDefinition.url).
     * It is up to the server and/or other infrastructure of policy to determine whether/how these claims are verified and/or updated over time.  The list of profile URLs is a set.
     */
    profile?: canonical[];
    /**
     * Extension for profile
     **/
    _profile?: Element[];
    /**
     * Security Labels applied to this resource
     * Security labels applied to this resource. These tags connect specific resources to the overall security policy and infrastructure.
     * The security labels can be updated without changing the stated version of the resource. The list of security labels is a set. Uniqueness is based the system/code, and version and display are ignored.
     */
    security?: Coding[];
    /**
     * Tags applied to this resource
     * 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.
     * The tags can be updated without changing the stated version of the resource. The list of tags is a set. Uniqueness is based the system/code, and version and display are ignored.
     */
    tag?: Coding[];
}
/**
 * An amount of economic utility in some recognized currency
 * An amount of economic utility in some recognized currency.
 */
export interface Money extends Element {
    /**
     * Numerical value (with implicit precision)
     * Numerical value (with implicit precision).
     * Monetary values have their own rules for handling precision (refer to standard accounting text books).
     */
    value?: decimal;
    /**
     * Extension for value
     **/
    _value?: Element;
    /**
     * ISO 4217 Currency Code
     * ISO 4217 Currency Code.
     */
    currency?: code;
    /**
     * Extension for currency
     **/
    _currency?: Element;
}
/**
 * Time range defined by start and end date/time
 * A time period defined by a start and end date and optionally time.
 * A Period specifies a range of time; the context of use will specify whether the entire range applies (e.g. "the patient was an inpatient of the hospital for this time range") or one value from the range applies (e.g. "give to the patient between these two times").

Period is not used for a duration (a measure of elapsed time). See [Duration](datatypes.html#Duration).
 */
export interface Period extends Element {
    /**
     * Starting time with inclusive boundary
     * The start of the period. The boundary is inclusive.
     * If the low element is missing, the meaning is that the low boundary is not known.
     */
    start?: dateTime;
    /**
     * Extension for start
     **/
    _start?: Element;
    /**
     * End time with inclusive boundary, if not ongoing
     * The end of the period. If the end of the period is missing, it means no end was known or planned at the time the instance was created. 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.
     * The high value includes any matching date/time. i.e. 2012-02-03T10:00:00 is in a period that has an end value of 2012-02-03.
     */
    end?: dateTime;
    /**
     * Extension for end
     **/
    _end?: Element;
}
/**
 * A definition of a set of people that apply to some clinically related context, for example people contraindicated for a certain medication
 * A populatioof people with some set of grouping criteria.
 */
export interface Population extends BackboneElement {
    /**
     * The age of the specific population
     * The age of the specific population.
     */
    ageRange?: Range;
    /**
     * The age of the specific population
     * The age of the specific population.
     */
    ageCodeableConcept?: CodeableConcept;
    /**
     * The gender of the specific population
     * The gender of the specific population.
     */
    gender?: CodeableConcept;
    /**
     * Race of the specific population
     * Race of the specific population.
     */
    race?: CodeableConcept;
    /**
     * The existing physiological conditions of the specific population to which this applies
     * The existing physiological conditions of the specific population to which this applies.
     */
    physiologicalCondition?: CodeableConcept;
}
/**
 * The marketing status describes the date when a medicinal product is actually put on the market or the date as of which it is no longer available
 * The marketing status describes the date when a medicinal product is actually put on the market or the date as of which it is no longer available.
 */
export interface ProdCharacteristic extends BackboneElement {
    /**
     * Where applicable, the height can be specified using a numerical value and its unit of measurement The unit of measurement shall be specified in accordance with ISO 11240 and the resulting terminology The symbol and the symbol identifier shall be used
     * Where applicable, the height can be specified using a numerical value and its unit of measurement The unit of measurement shall be specified in accordance with ISO 11240 and the resulting terminology The symbol and the symbol identifier shall be used.
     */
    height?: Quantity;
    /**
     * Where applicable, the width can be specified using a numerical value and its unit of measurement The unit of measurement shall be specified in accordance with ISO 11240 and the resulting terminology The symbol and the symbol identifier shall be used
     * Where applicable, the width can be specified using a numerical value and its unit of measurement The unit of measurement shall be specified in accordance with ISO 11240 and the resulting terminology The symbol and the symbol identifier shall be used.
     */
    width?: Quantity;
    /**
     * Where applicable, the depth can be specified using a numerical value and its unit of measurement The unit of measurement shall be specified in accordance with ISO 11240 and the resulting terminology The symbol and the symbol identifier shall be used
     * Where applicable, the depth can be specified using a numerical value and its unit of measurement The unit of measurement shall be specified in accordance with ISO 11240 and the resulting terminology The symbol and the symbol identifier shall be used.
     */
    depth?: Quantity;
    /**
     * Where applicable, the weight can be specified using a numerical value and its unit of measurement The unit of measurement shall be specified in accordance with ISO 11240 and the resulting terminology The symbol and the symbol identifier shall be used
     * Where applicable, the weight can be specified using a numerical value and its unit of measurement The unit of measurement shall be specified in accordance with ISO 11240 and the resulting terminology The symbol and the symbol identifier shall be used.
     */
    weight?: Quantity;
    /**
     * Where applicable, the nominal volume can be specified using a numerical value and its unit of measurement The unit of measurement shall be specified in accordance with ISO 11240 and the resulting terminology The symbol and the symbol identifier shall be used
     * Where applicable, the nominal volume can be specified using a numerical value and its unit of measurement The unit of measurement shall be specified in accordance with ISO 11240 and the resulting terminology The symbol and the symbol identifier shall be used.
     */
    nominalVolume?: Quantity;
    /**
     * Where applicable, the external diameter can be specified using a numerical value and its unit of measurement The unit of measurement shall be specified in accordance with ISO 11240 and the resulting terminology The symbol and the symbol identifier shall be used
     * Where applicable, the external diameter can be specified using a numerical value and its unit of measurement The unit of measurement shall be specified in accordance with ISO 11240 and the resulting terminology The symbol and the symbol identifier shall be used.
     */
    externalDiameter?: Quantity;
    /**
     * Where applicable, the shape can be specified An appropriate controlled vocabulary shall be used The term and the term identifier shall be used
     * Where applicable, the shape can be specified An appropriate controlled vocabulary shall be used The term and the term identifier shall be used.
     */
    shape?: string;
    /**
     * Extension for shape
     **/
    _shape?: Element;
    /**
     * Where applicable, the color can be specified An appropriate controlled vocabulary shall be used The term and the term identifier shall be used
     * Where applicable, the color can be specified An appropriate controlled vocabulary shall be used The term and the term identifier shall be used.
     */
    color?: string[];
    /**
     * Extension for color
     **/
    _color?: Element[];
    /**
     * Where applicable, the imprint can be specified as text
     * Where applicable, the imprint can be specified as text.
     */
    imprint?: string[];
    /**
     * Extension for imprint
     **/
    _imprint?: Element[];
    /**
     * Where applicable, the image can be provided The format of the image attachment shall be specified by regional implementations
     * Where applicable, the image can be provided The format of the image attachment shall be specified by regional implementations.
     */
    image?: Attachment[];
    /**
     * Where applicable, the scoring can be specified An appropriate controlled vocabulary shall be used The term and the term identifier shall be used
     * Where applicable, the scoring can be specified An appropriate controlled vocabulary shall be used The term and the term identifier shall be used.
     */
    scoring?: CodeableConcept;
}
/**
 * The shelf-life and storage information for a medicinal product item or container can be described using this class
 * The shelf-life and storage information for a medicinal product item or container can be described using this class.
 */
export interface ProductShelfLife extends BackboneElement {
    /**
     * Unique identifier for the packaged Medicinal Product
     * Unique identifier for the packaged Medicinal Product.
     */
    identifier?: Identifier;
    /**
     * This describes the shelf life, taking into account various scenarios such as shelf life of the packaged Medicinal Product itself, shelf life after transformation where necessary and shelf life after the first opening of a bottle, etc. The shelf life type shall be specified using an appropriate controlled vocabulary The controlled term and the controlled term identifier shall be specified
     * This describes the shelf life, taking into account various scenarios such as shelf life of the packaged Medicinal Product itself, shelf life after transformation where necessary and shelf life after the first opening of a bottle, etc. The shelf life type shall be specified using an appropriate controlled vocabulary The controlled term and the controlled term identifier shall be specified.
     */
    type: CodeableConcept;
    /**
     * The shelf life time period can be specified using a numerical value for the period of time and its unit of time measurement The unit of measurement shall be specified in accordance with ISO 11240 and the resulting terminology The symbol and the symbol identifier shall be used
     * The shelf life time period can be specified using a numerical value for the period of time and its unit of time measurement The unit of measurement shall be specified in accordance with ISO 11240 and the resulting terminology The symbol and the symbol identifier shall be used.
     */
    period: Quantity;
    /**
     * Special precautions for storage, if any, can be specified using an appropriate controlled vocabulary The controlled term and the controlled term identifier shall be specified
     * Special precautions for storage, if any, can be specified using an appropriate controlled vocabulary The controlled term and the controlled term identifier shall be specified.
     */
    specialPrecautionsForStorage?: CodeableConcept[];
}
/**
 * Set of values bounded by low and high
 * A set of ordered Quantities defined by a low and high limit.
 * The stated low and high value are assumed to have arbitrarily high precision when it comes to determining which values are in the range. I.e. 1.99 is not in the range 2 -> 3.
 */
export interface Range extends Element {
    /**
     * Low limit
     * The low limit. The boundary is inclusive.
     * If the low element is missing, the low boundary is not known.
     */
    low?: Quantity;
    /**
     * High limit
     * The high limit. The boundary is inclusive.
     * If the high element is missing, the high boundary is not known.
     */
    high?: Quantity;
}
/**
 * A ratio of two Quantity values - a numerator and a denominator
 * A relationship of two Quantity values - expressed as a numerator and a denominator.
 * The Ratio datatype should only be used to express a relationship of two numbers if the relationship cannot be suitably expressed using a Quantity and a common unit.  Where the denominator value is known to be fixed to "1", Quantity should be used instead of Ratio.
 */
export interface Ratio extends Element {
    /**
     * Numerator value
     * The value of the numerator.
     */
    numerator?: Quantity;
    /**
     * Denominator value
     * The value of the denominator.
     */
    denominator?: Quantity;
}
/**
 * A reference from one resource to another
 * A reference from one resource to another.
 * References SHALL be a reference to an actual FHIR resource, and SHALL be resolveable (allowing for access control, temporary unavailability, etc.). Resolution can be either by retrieval from the URL, or, where applicable by resource type, by treating an absolute reference as a canonical URL and looking it up in a local registry/repository.
 */
export interface Reference extends Element {
    /**
     * Literal reference, Relative, internal or absolute URL
     * 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.
     * Using absolute URLs provides a stable scalable approach suitable for a cloud/web context, while using relative/logical references provides a flexible approach suitable for use when trading across closed eco-system boundaries.   Absolute URLs do not need to point to a FHIR RESTful server, though this is the preferred approach. If the URL conforms to the structure "/[type]/[id]" then it should be assumed that the reference is to a FHIR RESTful server.
     */
    reference?: string;
    /**
     * Extension for reference
     **/
    _reference?: Element;
    /**
     * Type the reference refers to (e.g. "Patient")
     * The expected type of the target of the reference. If both Reference.type and Reference.reference are populated and Reference.reference is a FHIR URL, both SHALL be consistent.

The type is the Canonical URL of Resource Definition that is the type this reference refers to. References are URLs that are relative to http://hl7.org/fhir/StructureDefinition/ e.g. "Patient" is a reference to http://hl7.org/fhir/StructureDefinition/Patient. Absolute URLs are only allowed for logical models (and can only be used in references in logical models, not resources).
     * This element is used to indicate the type of  the target of the reference. This may be used which ever of the other elements are populated (or not). In some cases, the type of the target may be determined by inspection of the reference (e.g. a RESTful URL) or by resolving the target of the reference; if both the type and a reference is provided, the reference SHALL resolve to a resource of the same type as that specified.
     */
    type?: uri;
    /**
     * Extension for type
     **/
    _type?: Element;
    /**
     * Logical reference, when literal reference is not known
     * An identifier for the target resource. This is used when there is no way to reference the other resource directly, either because the entity it represents 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.
     * When an identifier is provided in place of a reference, any system processing the reference will only be able to resolve the identifier to a reference if it understands the business context in which the identifier is used. Sometimes this is global (e.g. a national identifier) but often it is not. For this reason, none of the useful mechanisms described for working with references (e.g. chaining, includes) are possible, nor should servers be expected to be able resolve the reference. Servers may accept an identifier based reference untouched, resolve it, and/or reject it - see CapabilityStatement.rest.resource.referencePolicy.

When both an identifier and a literal reference are provided, the literal reference is preferred. Applications processing the resource are allowed - but not required - to check that the identifier matches the literal reference

Applications converting a logical reference to a literal reference may choose to leave the logical reference present, or remove it.

Reference is intended to point to a structure that can potentially be expressed as a FHIR resource, though there is no need for it to exist as an actual FHIR resource instance - except in as much as an application wishes to actual find the target of the reference. The content referred to be the identifier must meet the logical constraints implied by any limitations on what resource types are permitted for the reference.  For example, it would not be legitimate to send the identifier for a drug prescription if the type were Reference(Observation|DiagnosticReport).  One of the use-cases for Reference.identifier is the situation where no FHIR representation exists (where the type is Reference (Any).
     */
    identifier?: Identifier;
    /**
     * Text alternative for the resource
     * Plain text narrative that identifies the resource in addition to the resource reference.
     * This is generally not the same as the Resource.text of the referenced resource.  The purpose is to identify what's being referenced, not to fully describe it.
     */
    display?: string;
    /**
     * Extension for display
     **/
    _display?: Element;
}
/**
 * A series of measurements taken by a device
 * A series of measurements taken by a device, with upper and lower limits. There may be more than one dimension in the data.
 * The data is not interpretable without at least origin, period, and dimensions, but these are optional to allow a separation between the template of measurement and the actual measurement, such as between DeviceCapabilities and DeviceLog.  When providing a summary view (for example with Observation.value[x]) SampledData should be represented with a brief display text such as "Sampled Data".
 */
export interface SampledData extends Element {
    /**
     * Zero value and units
     * The base quantity that a measured value of zero represents. In addition, this provides the units of the entire measurement series.
     */
    origin: Quantity;
    /**
     * Number of milliseconds between samples
     * The length of time between sampling times, measured in milliseconds.
     * This is usually a whole number.
     */
    period: decimal;
    /**
     * Extension for period
     **/
    _period?: Element;
    /**
     * Multiply data by this before adding to origin
     * A correction factor that is applied to the sampled data points before they are added to the origin.
     */
    factor?: decimal;
    /**
     * Extension for factor
     **/
    _factor?: Element;
    /**
     * Lower limit of detection
     * 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).
     */
    lowerLimit?: decimal;
    /**
     * Extension for lowerLimit
     **/
    _lowerLimit?: Element;
    /**
     * Upper limit of detection
     * 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).
     */
    upperLimit?: decimal;
    /**
     * Extension for upperLimit
     **/
    _upperLimit?: Element;
    /**
     * Number of sample points at each time point
     * 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.
     * If there is more than one dimension, the code for the type of data will define the meaning of the dimensions (typically ECG data).
     */
    dimensions: positiveInt;
    /**
     * Extension for dimensions
     **/
    _dimensions?: Element;
    /**
     * Decimal values with spaces, or "E" | "U" | "L"
     * 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.
     * Data may be missing if it is omitted for summarization purposes. In general, data is required for any actual use of a SampledData.
     */
    data?: string;
    /**
     * Extension for data
     **/
    _data?: Element;
}
/**
 * A Signature - XML DigSig, JWS, Graphical image of signature, etc.
 * A signature along with supporting context. The signature may be a digital signature that is cryptographic in nature, or some other signature acceptable to the domain. This other signature may be as simple as a graphical image representing a hand-written signature, or a signature ceremony Different signature approaches have different utilities.
 * The elements of the Signature Resource are for ease of access of these elements. For digital signatures (Xml DigSig, JWS), the non-repudiation proof comes from the Signature  validation, which includes validation of the referenced objects (e.g. Resources) (a.k.a., Content) in the XML-Signature Detached form.
 */
export interface Signature extends Element {
    /**
     * Indication of the reason the entity signed the object(s)
     * 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.
     * Examples include attesting to: authorship, correct transcription, and witness of specific event. Also known as a &quot;Commitment Type Indication&quot;.
     */
    type: Coding[];
    /**
     * When the signature was created
     * When the digital signature was signed.
     * This should agree with the information in the signature.
     */
    when: instant;
    /**
     * Extension for when
     **/
    _when?: Element;
    /**
     * Who signed
     * A reference to an application-usable description of the identity that signed  (e.g. the signature used their private key).
     * This should agree with the information in the signature.
     */
    who: Reference;
    /**
     * The party represented
     * A reference to an application-usable description of the identity that is represented by the signature.
     * The party that can't sign. For example a child.
     */
    onBehalfOf?: Reference;
    /**
     * The technical format of the signed resources
     * A mime type that indicates the technical format of the target resources signed by the signature.
     * "xml", "json" and "ttl" are allowed, which describe the simple encodings described in the specification (and imply appropriate bundle support). Otherwise, mime types are legal here.
     */
    targetFormat?: code;
    /**
     * Extension for targetFormat
     **/
    _targetFormat?: Element;
    /**
     * The technical format of the signature
     * A mime type that indicates the technical format of the signature. Important mime types are application/signature+xml for X ML DigSig, application/jose for JWS, and image/* for a graphical image of a signature, etc.
     */
    sigFormat?: code;
    /**
     * Extension for sigFormat
     **/
    _sigFormat?: Element;
    /**
     * The actual signature content (XML DigSig. JWS, picture, etc.)
     * The base64 encoding of the Signature content. When signature is not recorded electronically this element would be empty.
     * Where the signature type is an XML DigSig, the signed content is a FHIR Resource(s), the signature is of the XML form of the Resource(s) using  XML-Signature (XMLDIG) "Detached Signature" form.
     */
    data?: base64Binary;
    /**
     * Extension for data
     **/
    _data?: Element;
}
/**
 * A fixed quantity (no comparator)
 * The comparator is not used on a SimpleQuantity
 */
export interface SimpleQuantity extends Quantity {
    /**
     * Not allowed to be used in this context
     */
    comparator?: undefined;
}
/**
 * Reference range of possible or expected values
 * Reference range of possible or expected values.
 */
export interface SubstanceAmountReferenceRange extends Element {
    /**
     * Lower limit possible or expected
     * Lower limit possible or expected.
     */
    lowLimit?: Quantity;
    /**
     * Upper limit possible or expected
     * Upper limit possible or expected.
     */
    highLimit?: Quantity;
}
/**
 * Chemical substances are a single substance type whose primary defining element is the molecular structure. Chemical substances shall be defined on the basis of their complete covalent molecular structure; the presence of a salt (counter-ion) and/or solvates (water, alcohols) is also captured. Purity, grade, physical form or particle size are not taken into account in the definition of a chemical substance or in the assignment of a Substance ID
 * Chemical substances are a single substance type whose primary defining element is the molecular structure. Chemical substances shall be defined on the basis of their complete covalent molecular structure; the presence of a salt (counter-ion) and/or solvates (water, alcohols) is also captured. Purity, grade, physical form or particle size are not taken into account in the definition of a chemical substance or in the assignment of a Substance ID.
 */
export interface SubstanceAmount extends BackboneElement {
    /**
     * Used to capture quantitative values for a variety of elements. If only limits are given, the arithmetic mean would be the average. If only a single definite value for a given element is given, it would be captured in this field
     * Used to capture quantitative values for a variety of elements. If only limits are given, the arithmetic mean would be the average. If only a single definite value for a given element is given, it would be captured in this field.
     */
    amountQuantity?: Quantity;
    /**
     * Used to capture quantitative values for a variety of elements. If only limits are given, the arithmetic mean would be the average. If only a single definite value for a given element is given, it would be captured in this field
     * Used to capture quantitative values for a variety of elements. If only limits are given, the arithmetic mean would be the average. If only a single definite value for a given element is given, it would be captured in this field.
     */
    amountRange?: Range;
    /**
     * Used to capture quantitative values for a variety of elements. If only limits are given, the arithmetic mean would be the average. If only a single definite value for a given element is given, it would be captured in this field
     * Used to capture quantitative values for a variety of elements. If only limits are given, the arithmetic mean would be the average. If only a single definite value for a given element is given, it would be captured in this field.
     */
    amountString?: string;
    /**
     * Extension for amountString
     **/
    _amountString?: Element;
    /**
     * Most elements that require a quantitative value will also have a field called amount type. Amount type should always be specified because the actual value of the amount is often dependent on it. EXAMPLE: In capturing the actual relative amounts of substances or molecular fragments it is essential to indicate whether the amount refers to a mole ratio or weight ratio. For any given element an effort should be made to use same the amount type for all related definitional elements
     * Most elements that require a quantitative value will also have a field called amount type. Amount type should always be specified because the actual value of the amount is often dependent on it. EXAMPLE: In capturing the actual relative amounts of substances or molecular fragments it is essential to indicate whether the amount refers to a mole ratio or weight ratio. For any given element an effort should be made to use same the amount type for all related definitional elements.
     */
    amountType?: CodeableConcept;
    /**
     * A textual comment on a numeric value
     * A textual comment on a numeric value.
     */
    amountText?: string;
    /**
     * Extension for amountText
     **/
    _amountText?: Element;
    /**
     * Reference range of possible or expected values
     * Reference range of possible or expected values.
     */
    referenceRange?: SubstanceAmountReferenceRange;
}
/**
 * Describes the context of use for a conformance or 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).
 */
export interface UsageContext extends Element {
    /**
     * Type of context being specified
     * A code that identifies the type of context being specified by this usage context.
     */
    code: Coding;
    /**
     * Value that defines the context
     * A value that defines the context specified in this context of use. The interpretation of the value is defined by the code.
     */
    valueCodeableConcept?: CodeableConcept;
    /**
     * Value that defines the context
     * A value that defines the context specified in this context of use. The interpretation of the value is defined by the code.
     */
    valueQuantity?: Quantity;
    /**
     * Value that defines the context
     * A value that defines the context specified in this context of use. The interpretation of the value is defined by the code.
     */
    valueRange?: Range;
    /**
     * Value that defines the context
     * A value that defines the context specified in this context of use. The interpretation of the value is defined by the code.
     */
    valueReference?: Reference;
}
/**
 * An address expressed using postal conventions (as opposed to GPS or other location definition formats)
 * 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.
 * Note: address is intended to describe postal addresses for administrative purposes, not to describe absolute geographical coordinates.  Postal addresses are often used as proxies for physical locations (also see the [Location](location.html#) resource).
 */
export interface Address extends Element {
    /**
     * Text representation of the address
     * Specifies the entire address as it should be displayed e.g. on a postal label. This may be provided instead of or as well as the specific parts.
     * Can provide both a text representation and parts. Applications updating an address SHALL ensure that  when both text and parts are present,  no content is included in the text that isn't found in a part.
     */
    text?: string;
    /**
     * Extension for text
     **/
    _text?: Element;
    /**
     * Street name, number, direction & P.O. Box etc.
     * This component contains the house number, apartment number, street name, street direction,  P.O. Box number, delivery hints, and similar address information.
     */
    line?: string[];
    /**
     * Extension for line
     **/
    _line?: Element[];
    /**
     * Name of city, town etc.
     * The name of the city, town, suburb, village or other community or delivery center.
     */
    city?: string;
    /**
     * Extension for city
     **/
    _city?: Element;
    /**
     * District name (aka county)
     * The name of the administrative area (county).
     * District is sometimes known as county, but in some regions 'county' is used in place of city (municipality), so county name should be conveyed in city instead.
     */
    district?: string;
    /**
     * Extension for district
     **/
    _district?: Element;
    /**
     * Sub-unit of country (abbreviations ok)
     * Sub-unit of a country with limited sovereignty in a federally organized country. A code may be used if codes are in common use (e.g. US 2 letter state codes).
     */
    state?: string;
    /**
     * Extension for state
     **/
    _state?: Element;
    /**
     * Postal code for area
     * A postal code designating a region defined by the postal service.
     */
    postalCode?: string;
    /**
     * Extension for postalCode
     **/
    _postalCode?: Element;
    /**
     * Country (e.g. can be ISO 3166 2 or 3 letter code)
     * Country - a nation as commonly understood or generally accepted.
     * ISO 3166 3 letter codes can be used in place of a human readable country name.
     */
    country?: string;
    /**
     * Extension for country
     **/
    _country?: Element;
    /**
     * Time period when address was/is in use
     * Time period when address was/is in use.
     */
    period?: Period;
    /**
     * home | work | temp | old | billing - purpose of this address
     * The purpose of this address.
     * Applications can assume that an address is current unless it explicitly says that it is temporary or old.
     */
    use?: AddressUse;
    /**
     * postal | physical | both
     * Distinguishes between physical addresses (those you can visit) and mailing addresses (e.g. PO Boxes and care-of addresses). Most addresses are both.
     * The definition of Address states that "address is intended to describe postal addresses, not physical locations". However, many applications track whether an address has a dual purpose of being a location that can be visited as well as being a valid delivery destination, and Postal addresses are often used as proxies for physical locations (also see the [Location](location.html#) resource).
     */
    type?: AddressType;
}
/**
 * Details of a Technology mediated contact point (phone, fax, email, etc.)
 * Details for all kinds of technology mediated contact points for a person or organization, including telephone, email, etc.
 */
export interface ContactPoint extends Element {
    /**
     * The actual contact point details
     * The actual contact point details, in a form that is meaningful to the designated communication system (i.e. phone number or email address).
     * Additional text data such as phone extension numbers, or notes about use of the contact are sometimes included in the value.
     */
    value?: string;
    /**
     * Extension for value
     **/
    _value?: Element;
    /**
     * Specify preferred order of use (1 = highest)
     * Specifies a preferred order in which to use a set of contacts. ContactPoints with lower rank values are more preferred than those with higher rank values.
     * Note that rank does not necessarily follow the order in which the contacts are represented in the instance.
     */
    rank?: positiveInt;
    /**
     * Extension for rank
     **/
    _rank?: Element;
    /**
     * Time period when the contact point was/is in use
     * Time period when the contact point was/is in use.
     */
    period?: Period;
    /**
     * phone | fax | email | pager | url | sms | other
     * Telecommunications form for contact point - what communications system is required to make use of the contact.
     */
    system?: ContactPointSystem;
    /**
     * home | work | temp | old | mobile - purpose of this contact point
     * Identifies the purpose for the contact point.
     * Applications can assume that a contact is current unless it explicitly says that it is temporary or old.
     */
    use?: ContactPointUse;
}
/**
 * Contributor information
 * A contributor to the content of a knowledge asset, including authors, editors, reviewers, and endorsers.
 */
export interface Contributor extends Element {
    /**
     * Who contributed the content
     * The name of the individual or organization responsible for the contribution.
     */
    name: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Contact details of the contributor
     * Contact details to assist a user in finding and communicating with the contributor.
     */
    contact?: ContactDetail[];
    /**
     * author | editor | reviewer | endorser
     * The type of contributor.
     */
    type: ContributorType;
}
/**
 * What codes are expected
 * Code filters specify additional constraints on the data, specifying the value set of interest for a particular element of the data. Each code filter defines an additional constraint on the data, i.e. code filters are AND'ed, not OR'ed.
 */
export interface DataRequirementCodeFilter extends Element {
    /**
     * A code-valued attribute to filter on
     * The code-valued attribute of the filter. The specified path SHALL be a FHIRPath resolveable on the specified type of the DataRequirement, and SHALL consist only of identifiers, constant indexers, and .resolve(). The path is allowed to contain qualifiers (.) to traverse sub-elements, as well as indexers ([x]) to traverse multiple-cardinality sub-elements (see the [Simple FHIRPath Profile](fhirpath.html#simple) for full details). Note that the index must be an integer constant. The path must resolve to an element of type code, Coding, or CodeableConcept.
     * The path attribute contains a [Simple FHIRPath Subset](fhirpath.html#simple) that allows path traversal, but not calculation.
     */
    path?: string;
    /**
     * Extension for path
     **/
    _path?: Element;
    /**
     * A coded (token) parameter to search on
     * A token parameter that refers to a search parameter defined on the specified type of the DataRequirement, and which searches on elements of type code, Coding, or CodeableConcept.
     */
    searchParam?: string;
    /**
     * Extension for searchParam
     **/
    _searchParam?: Element;
    /**
     * Valueset for the filter
     * The valueset for the code filter. The valueSet and code elements are additive. 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.
     */
    valueSet?: canonical;
    /**
     * Extension for valueSet
     **/
    _valueSet?: Element;
    /**
     * What code is expected
     * The codes for the code filter. 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. If codes are specified in addition to a value set, the filter returns items matching a code in the value set or one of the specified codes.
     */
    code?: Coding[];
}
/**
 * What dates/date ranges are expected
 * Date filters specify additional constraints on the data in terms of the applicable date range for specific elements. Each date filter specifies an additional constraint on the data, i.e. date filters are AND'ed, not OR'ed.
 */
export interface DataRequirementDateFilter extends Element {
    /**
     * A date-valued attribute to filter on
     * The date-valued attribute of the filter. The specified path SHALL be a FHIRPath resolveable on the specified type of the DataRequirement, and SHALL consist only of identifiers, constant indexers, and .resolve(). The path is allowed to contain qualifiers (.) to traverse sub-elements, as well as indexers ([x]) to traverse multiple-cardinality sub-elements (see the [Simple FHIRPath Profile](fhirpath.html#simple) for full details). Note that the index must be an integer constant. The path must resolve to an element of type date, dateTime, Period, Schedule, or Timing.
     * The path attribute contains a [Simple FHIR Subset](fhirpath.html#simple) that allows path traversal, but not calculation.
     */
    path?: string;
    /**
     * Extension for path
     **/
    _path?: Element;
    /**
     * A date valued parameter to search on
     * A date parameter that refers to a search parameter defined on the specified type of the DataRequirement, and which searches on elements of type date, dateTime, Period, Schedule, or Timing.
     */
    searchParam?: string;
    /**
     * Extension for searchParam
     **/
    _searchParam?: Element;
    /**
     * The value of the filter, as a Period, DateTime, or Duration value
     * 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 before now.
     */
    valueDateTime?: dateTime;
    /**
     * Extension for valueDateTime
     **/
    _valueDateTime?: Element;
    /**
     * The value of the filter, as a Period, DateTime, or Duration value
     * 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 before now.
     */
    valuePeriod?: Period;
    /**
     * The value of the filter, as a Period, DateTime, or Duration value
     * 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 before now.
     */
    valueDuration?: Duration;
}
/**
 * Order of the results
 * Specifies the order of the results to be returned.
 * This element can be used in combination with the sort element to specify quota requirements such as "the most recent 5" or "the highest 5". When multiple sorts are specified, they are applied in the order they appear in the resource.
 */
export interface DataRequirementSort extends Element {
    /**
     * The name of the attribute to perform the sort
     * The attribute of the sort. 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.
     */
    path: string;
    /**
     * Extension for path
     **/
    _path?: Element;
    /**
     * ascending | descending
     * The direction of the sort, ascending or descending.
     */
    direction: DataRequirementSortDirection;
}
/**
 * Describes a required data item
 * Describes a required data item for evaluation in terms of the type of data, and optional code or date-based filters of the data.
 */
export interface DataRequirement extends Element {
    /**
     * The type of the required data
     * 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.
     */
    type: code;
    /**
     * Extension for type
     **/
    _type?: Element;
    /**
     * The profile of the required data
     * The profile of the required data, specified as the uri of the profile definition.
     */
    profile?: canonical[];
    /**
     * Extension for profile
     **/
    _profile?: Element[];
    /**
     * E.g. Patient, Practitioner, RelatedPerson, Organization, Location, Device
     * The intended subjects of the data requirement. If this element is not provided, a Patient subject is assumed.
     * The subject of a data requirement is critical, as the data being specified is determined with respect to a particular subject. This corresponds roughly to the notion of a Compartment in that it limits what data is available based on its relationship to the subject. In CQL, this corresponds to the context declaration.
     */
    subjectCodeableConcept?: CodeableConcept;
    /**
     * E.g. Patient, Practitioner, RelatedPerson, Organization, Location, Device
     * The intended subjects of the data requirement. If this element is not provided, a Patient subject is assumed.
     * The subject of a data requirement is critical, as the data being specified is determined with respect to a particular subject. This corresponds roughly to the notion of a Compartment in that it limits what data is available based on its relationship to the subject. In CQL, this corresponds to the context declaration.
     */
    subjectReference?: Reference;
    /**
     * Indicates specific structure elements that are referenced by the knowledge module
     * 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.

The value of mustSupport SHALL be a FHIRPath resolveable on the type of the DataRequirement. The path SHALL consist only of identifiers, constant indexers, and .resolve() (see the [Simple FHIRPath Profile](fhirpath.html#simple) for full details).
     */
    mustSupport?: string[];
    /**
     * Extension for mustSupport
     **/
    _mustSupport?: Element[];
    /**
     * What codes are expected
     * Code filters specify additional constraints on the data, specifying the value set of interest for a particular element of the data. Each code filter defines an additional constraint on the data, i.e. code filters are AND'ed, not OR'ed.
     */
    codeFilter?: DataRequirementCodeFilter[];
    /**
     * What dates/date ranges are expected
     * Date filters specify additional constraints on the data in terms of the applicable date range for specific elements. Each date filter specifies an additional constraint on the data, i.e. date filters are AND'ed, not OR'ed.
     */
    dateFilter?: DataRequirementDateFilter[];
    /**
     * Number of results
     * Specifies a maximum number of results that are required (uses the _count search parameter).
     * This element can be used in combination with the sort element to specify quota requirements such as "the most recent 5" or "the highest 5".
     */
    limit?: positiveInt;
    /**
     * Extension for limit
     **/
    _limit?: Element;
    /**
     * Order of the results
     * Specifies the order of the results to be returned.
     * This element can be used in combination with the sort element to specify quota requirements such as "the most recent 5" or "the highest 5". When multiple sorts are specified, they are applied in the order they appear in the resource.
     */
    sort?: DataRequirementSort[];
}
/**
 * Element values that are used to distinguish the slices
 * 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.
 * If there is no discriminator, the content is hard to process, so this should be avoided.
 */
export interface ElementDefinitionSlicingDiscriminator extends Element {
    /**
     * Path to element value
     * A FHIRPath expression, using [the simple subset of FHIRPath](fhirpath.html#simple), that is used to identify the element on which discrimination is based.
     * The only FHIRPath functions that are allowed are as(type), resolve(), and extension(url).
     */
    path: string;
    /**
     * Extension for path
     **/
    _path?: Element;
    /**
     * value | exists | pattern | type | profile
     * How the element value is interpreted when discrimination is evaluated.
     */
    type: ElementDefinitionDiscriminatorType;
}
/**
 * This element is sliced - slices follow
 * 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).
 * The first element in the sequence, the one that carries the slicing, is the definition that applies to all the slices. This is based on the unconstrained element, but can apply any constraints as appropriate. This may include the common constraints on the children of the element.
 */
export interface ElementDefinitionSlicing extends Element {
    /**
     * Element values that are used to distinguish the slices
     * 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.
     * If there is no discriminator, the content is hard to process, so this should be avoided.
     */
    discriminator?: ElementDefinitionSlicingDiscriminator[];
    /**
     * Text description of how slicing works (or not)
     * 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.
     * If it's really not possible to differentiate them, the design should be re-evaluated to make the content usable.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * If elements must be in same order as slices
     * If the matching elements have to occur in the same order as defined in the profile.
     * Order should only be required when it is a pressing concern for presentation. Profile authors should consider making the order a feature of the rules about the narrative, not the rules about the data - requiring ordered data makes the profile much less re-usable.
     */
    ordered?: boolean;
    /**
     * Extension for ordered
     **/
    _ordered?: Element;
    /**
     * closed | open | openAtEnd
     * 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.
     * Allowing additional elements makes for a much for flexible template - it's open for use in wider contexts, but also means that the content of the resource is not closed, and applications have to decide how to handle content not described by the profile.
     */
    rules: ElementDefinitionSlicingRules;
}
/**
 * Base definition information for tools
 * 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. 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 - then the information in provided in the element definition may be different to the base definition. On the original definition of the element, it will be same.
 * The base information does not carry any information that could not be determined from the path and related profiles, but making this determination requires both that the related profiles are available, and that the algorithm to determine them be available. For tooling simplicity, the base information must always be populated in element definitions in snap shots, even if it is the same.
 */
export interface ElementDefinitionBase extends Element {
    /**
     * Path that identifies the base element
     * 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](structuredefinition.html#) without a StructureDefinition.base.
     */
    path: string;
    /**
     * Extension for path
     **/
    _path?: Element;
    /**
     * Min cardinality of the base element
     * Minimum cardinality of the base element identified by the path.
     * This is provided for consistency with max, and may affect code generation of mandatory elements of the base resource are generated differently (some reference implementations have done this).
     */
    min: unsignedInt;
    /**
     * Extension for min
     **/
    _min?: Element;
    /**
     * Max cardinality of the base element
     * Maximum cardinality of the base element identified by the path.
     * This is provided to code generation, since the serialization representation in JSON differs depending on whether the base element has max > 1. Also, some forms of code generation may differ.
     */
    max: string;
    /**
     * Extension for max
     **/
    _max?: Element;
}
/**
 * Data type and Profile for this element
 * The data type or resource that the value of this element is permitted to be.
 * The Type of the element can be left blank in a differential constraint, in which case the type is inherited from the resource. Abstract types are not permitted to appear as a type when multiple types are listed.  (I.e. Abstract types cannot be part of a choice).
 */
export interface ElementDefinitionType extends Element {
    /**
     * Data type or Resource (reference to definition)
     * 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.
     * If the element is a reference to another resource, this element contains "Reference", and the targetProfile element defines what resources can be referenced. The targetProfile may be a reference to the general definition of a resource (e.g. http://hl7.org/fhir/StructureDefinition/Patient).
     */
    code: uri;
    /**
     * Extension for code
     **/
    _code?: Element;
    /**
     * Profiles (StructureDefinition or IG) - one must apply
     * Identifies a profile structure or implementation Guide that applies to the datatype this element refers to. If any profiles are specified, then the content must conform to at least one of them. The URL 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 type SHALL conform to at least one profile defined in the implementation guide.
     * It is possible to profile  backbone element (e.g. part of a resource), using the [profile-element](extension-elementdefinition-profile-element.html) extension.
     */
    profile?: canonical[];
    /**
     * Extension for profile
     **/
    _profile?: Element[];
    /**
     * Profile (StructureDefinition or IG) on the Reference/canonical target - one must apply
     * Used when the type is "Reference" or "canonical", and identifies a profile structure or implementation Guide that applies to the target of the reference this element refers to. If any profiles are specified, then the content must conform to at least one of them. The URL 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 target resource SHALL conform to at least one profile defined in the implementation guide.
     */
    targetProfile?: canonical[];
    /**
     * Extension for targetProfile
     **/
    _targetProfile?: Element[];
    /**
     * contained | referenced | bundled - how aggregated
     * 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.
     * See [Aggregation Rules](elementdefinition.html#aggregation) for further clarification.
     */
    aggregation?: ElementDefinitionAggregationMode[];
    /**
     * either | independent | specific
     * Whether this reference needs to be version specific or version independent, or whether either can be used.
     * The base specification never makes a rule as to which form is allowed, but implementation guides may do this. See [Aggregation Rules](elementdefinition.html#aggregation) for further clarification.
     */
    versioning?: ElementDefinitionReferenceVersionRules;
}
/**
 * Example value (as defined for type)
 * A sample value for this element demonstrating the type of information that would typically be found in the element.
 * Examples will most commonly be present for data where it's not implicitly obvious from either the data type or value set what the values might be.  (I.e. Example values for dates or quantities would generally be unnecessary.)  If the example value is fully populated, the publication tool can generate an instance automatically.
 */
export interface ElementDefinitionExample extends Element {
    /**
     * Describes the purpose of this example
     * Describes the purpose of this example amoung the set of examples.
     */
    label: string;
    /**
     * Extension for label
     **/
    _label?: Element;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueBase64Binary?: base64Binary;
    /**
     * Extension for valueBase64Binary
     **/
    _valueBase64Binary?: Element;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueBoolean?: boolean;
    /**
     * Extension for valueBoolean
     **/
    _valueBoolean?: Element;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueCanonical?: canonical;
    /**
     * Extension for valueCanonical
     **/
    _valueCanonical?: Element;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueCode?: code;
    /**
     * Extension for valueCode
     **/
    _valueCode?: Element;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueDate?: date;
    /**
     * Extension for valueDate
     **/
    _valueDate?: Element;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueDateTime?: dateTime;
    /**
     * Extension for valueDateTime
     **/
    _valueDateTime?: Element;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueDecimal?: decimal;
    /**
     * Extension for valueDecimal
     **/
    _valueDecimal?: Element;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueId?: id;
    /**
     * Extension for valueId
     **/
    _valueId?: Element;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueInstant?: instant;
    /**
     * Extension for valueInstant
     **/
    _valueInstant?: Element;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueInteger?: integer;
    /**
     * Extension for valueInteger
     **/
    _valueInteger?: Element;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueMarkdown?: markdown;
    /**
     * Extension for valueMarkdown
     **/
    _valueMarkdown?: Element;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueOid?: oid;
    /**
     * Extension for valueOid
     **/
    _valueOid?: Element;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valuePositiveInt?: positiveInt;
    /**
     * Extension for valuePositiveInt
     **/
    _valuePositiveInt?: Element;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueString?: string;
    /**
     * Extension for valueString
     **/
    _valueString?: Element;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueTime?: time;
    /**
     * Extension for valueTime
     **/
    _valueTime?: Element;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueUnsignedInt?: unsignedInt;
    /**
     * Extension for valueUnsignedInt
     **/
    _valueUnsignedInt?: Element;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueUri?: uri;
    /**
     * Extension for valueUri
     **/
    _valueUri?: Element;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueUrl?: url;
    /**
     * Extension for valueUrl
     **/
    _valueUrl?: Element;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueUuid?: uuid;
    /**
     * Extension for valueUuid
     **/
    _valueUuid?: Element;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueAddress?: Address;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueAge?: Age;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueAnnotation?: Annotation;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueAttachment?: Attachment;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueCodeableConcept?: CodeableConcept;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueCoding?: Coding;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueContactPoint?: ContactPoint;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueCount?: Count;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueDistance?: Distance;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueDuration?: Duration;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueHumanName?: HumanName;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueIdentifier?: Identifier;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueMoney?: Money;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valuePeriod?: Period;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueQuantity?: Quantity;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueRange?: Range;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueRatio?: Ratio;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueReference?: Reference;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueSampledData?: SampledData;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueSignature?: Signature;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueTiming?: Timing;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueContactDetail?: ContactDetail;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueContributor?: Contributor;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueDataRequirement?: DataRequirement;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueExpression?: Expression;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueParameterDefinition?: ParameterDefinition;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueRelatedArtifact?: RelatedArtifact;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueTriggerDefinition?: TriggerDefinition;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueUsageContext?: UsageContext;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueDosage?: Dosage;
    /**
     * Value of Example (one of allowed types)
     * The actual value for the element, which must be one of the types allowed for this element.
     */
    valueMeta?: Meta;
}
/**
 * Condition that must evaluate to true
 * Formal constraints such as co-occurrence and other constraints that can be computationally evaluated within the context of the instance.
 * Constraints should be declared on the "context" element - the lowest element in the hierarchy that is common to all nodes referenced by the constraint.
 */
export interface ElementDefinitionConstraint extends Element {
    /**
     * Target of 'condition' reference above
     * Allows identification of which elements have their cardinalities impacted by the constraint.  Will not be referenced for constraints that do not affect cardinality.
     */
    key: id;
    /**
     * Extension for key
     **/
    _key?: Element;
    /**
     * Why this constraint is necessary or appropriate
     * Description of why this constraint is necessary or appropriate.
     * To be used if the reason for the constraint might not be intuitive to all implementers.
     */
    requirements?: string;
    /**
     * Extension for requirements
     **/
    _requirements?: Element;
    /**
     * Human description of constraint
     * Text that can be used to describe the constraint in messages identifying that the constraint has been violated.
     * Should be expressed in business terms as much as possible.
     */
    human: string;
    /**
     * Extension for human
     **/
    _human?: Element;
    /**
     * FHIRPath expression of constraint
     * A [FHIRPath](fhirpath.html) expression of constraint that can be executed to see if this constraint is met.
     * In the absense of an expression, the expression is likely not enforceable by validators, and might be missed by many systems.
     */
    expression?: string;
    /**
     * Extension for expression
     **/
    _expression?: Element;
    /**
     * XPath expression of constraint
     * An XPath expression of constraint that can be executed to see if this constraint is met.
     * Elements SHALL use "f" as the namespace prefix for the FHIR namespace, and "x" for the xhtml namespace, and SHALL NOT use any other prefixes.     Note: XPath is generally considered not useful because it does not apply to JSON and other formats and because of XSLT implementation issues, and may be removed in the future.
     */
    xpath?: string;
    /**
     * Extension for xpath
     **/
    _xpath?: Element;
    /**
     * Reference to original source of constraint
     * A reference to the original source of the constraint, for traceability purposes.
     * This is used when, e.g. rendering, where it is not useful to present inherited constraints when rendering the snapshot.
     */
    source?: canonical;
    /**
     * Extension for source
     **/
    _source?: Element;
    /**
     * error | warning
     * Identifies the impact constraint violation has on the conformance of the instance.
     * This allows constraints to be asserted as "shall" (error) and "should" (warning).
     */
    severity: ElementDefinitionConstraintSeverity;
}
/**
 * ValueSet details if this is coded
 * Binds to a value set if this element is coded (code, Coding, CodeableConcept, Quantity), or the data types (string, uri).
 * For a CodeableConcept, when no codes are allowed - only text, use a binding of strength "required" with a description explaining that no coded values are allowed and what sort of information to put in the "text" element.
 */
export interface ElementDefinitionBinding extends Element {
    /**
     * Human explanation of the value set
     * Describes the intended use of this particular set of codes.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Source of value set
     * Refers to the value set that identifies the set of codes the binding refers to.
     * The reference may be version-specific or not (e.g. have a |[version] at the end of the canonical URL).
     */
    valueSet?: canonical;
    /**
     * Extension for valueSet
     **/
    _valueSet?: Element;
    /**
     * required | extensible | preferred | example
     * 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.
     * For further discussion, see [Using Terminologies](terminologies.html).
     */
    strength: ElementDefinitionBindingStrength;
}
/**
 * Map element to another set of definitions
 * Identifies a concept from an external specification that roughly corresponds to this element.
 * Mappings are not necessarily specific enough for safe translation.
 */
export interface ElementDefinitionMapping extends Element {
    /**
     * Reference to mapping declaration
     * An internal reference to the definition of a mapping.
     */
    identity: id;
    /**
     * Extension for identity
     **/
    _identity?: Element;
    /**
     * Computable language of mapping
     * Identifies the computable language in which mapping.map is expressed.
     * If omitted, then there can be no expectation of computational interpretation of the mapping.
     */
    language?: code;
    /**
     * Extension for language
     **/
    _language?: Element;
    /**
     * Details of the mapping
     * Expresses what part of the target specification corresponds to this element.
     * For most mappings, the syntax is undefined.  Syntax will be provided for mappings to the RIM.  Multiple mappings may be possible and may include constraints on other resource elements that identify when a particular mapping applies.
     */
    map: string;
    /**
     * Extension for map
     **/
    _map?: Element;
    /**
     * Comments about the mapping or its use
     * Comments that provide information about the mapping or its use.
     */
    comment?: string;
    /**
     * Extension for comment
     **/
    _comment?: Element;
}
/**
 * Definition of an element in a resource or extension
 * Captures constraints on each element within the resource, profile, or extension.
 */
export interface ElementDefinition extends BackboneElement {
    /**
     * Path of the element in the hierarchy of elements
     * The path identifies the element and is expressed as a "."-separated list of ancestor elements, beginning with the name of the resource or extension.
     */
    path: string;
    /**
     * Extension for path
     **/
    _path?: Element;
    /**
     * Name for this particular element (in a set of slices)
     * 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.
     * The name SHALL be unique within the structure within the context of the constrained resource element.  (Though to avoid confusion, uniqueness across all elements is recommended.).
     */
    sliceName?: string;
    /**
     * Extension for sliceName
     **/
    _sliceName?: Element;
    /**
     * If this slice definition constrains an inherited slice definition (or not)
     * If true, indicates that this slice definition is constraining a slice definition with the same name in an inherited profile. If false, the slice is not overriding any slice in an inherited profile. If missing, the slice might or might not be overriding a slice in an inherited profile, depending on the sliceName.
     * If set to true, an ancestor profile SHALL have a slicing definition with this name.  If set to false, no ancestor profile is permitted to have a slicing definition with this name.
     */
    sliceIsConstraining?: boolean;
    /**
     * Extension for sliceIsConstraining
     **/
    _sliceIsConstraining?: Element;
    /**
     * Name for element to display with or prompt for element
     * 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.
     * See also the extension (http://hl7.org/fhir/StructureDefinition/elementdefinition-question)[extension-elementdefinition-question.html].
     */
    label?: string;
    /**
     * Extension for label
     **/
    _label?: Element;
    /**
     * Corresponding codes in terminologies
     * A code that has the same meaning as the element in a particular terminology.
     * The concept SHALL be properly aligned with the data element definition and other constraints, as defined in the code system, including relationships, of any code listed here.  Where multiple codes exist in a terminology that could correspond to the data element, the most granular code(s) should be selected, so long as they are not more restrictive than the data element itself. The mappings may be used to provide more or less granular or structured equivalences in the code system.
     */
    code?: Coding[];
    /**
     * This element is sliced - slices follow
     * 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).
     * The first element in the sequence, the one that carries the slicing, is the definition that applies to all the slices. This is based on the unconstrained element, but can apply any constraints as appropriate. This may include the common constraints on the children of the element.
     */
    slicing?: ElementDefinitionSlicing;
    /**
     * Concise definition for space-constrained presentation
     * A concise description of what this element means (e.g. for use in autogenerated summaries).
     * It is easy for a different short definition to change the meaning of an element and this can have nasty downstream consequences. Please be careful when providing short definitions in a profile.
     */
    short?: string;
    /**
     * Extension for short
     **/
    _short?: Element;
    /**
     * Full formal definition as narrative text
     * 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. (Note: The text you are reading is specified in ElementDefinition.definition).
     * It is easy for a different definition to change the meaning of an element and this can have nasty downstream consequences. Please be careful when providing definitions in a profile.
     */
    definition?: markdown;
    /**
     * Extension for definition
     **/
    _definition?: Element;
    /**
     * Comments about the use of this element
     * Explanatory notes and implementation guidance about the data element, including notes about how to use the data properly, exceptions to proper use, etc. (Note: The text you are reading is specified in ElementDefinition.comment).
     * If it is possible to capture usage rules using constraints, that mechanism should be used in preference to this element.
     */
    comment?: markdown;
    /**
     * Extension for comment
     **/
    _comment?: Element;
    /**
     * Why this resource has been created
     * 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.
     * This element does not describe the usage of the element (that's done in comments), rather it's for traceability of *why* the element is either needed or why the constraints exist as they do.  This may be used to point to source materials or specifications that drove the structure of this data element.
     */
    requirements?: markdown;
    /**
     * Extension for requirements
     **/
    _requirements?: Element;
    /**
     * Other names
     * Identifies additional names by which this element might also be known.
     */
    alias?: string[];
    /**
     * Extension for alias
     **/
    _alias?: Element[];
    /**
     * Minimum Cardinality
     * The minimum number of times this element SHALL appear in the instance.
     */
    min?: unsignedInt;
    /**
     * Extension for min
     **/
    _min?: Element;
    /**
     * Maximum Cardinality (a number or *)
     * The maximum number of times this element is permitted to appear in the instance.
     */
    max?: string;
    /**
     * Extension for max
     **/
    _max?: Element;
    /**
     * Base definition information for tools
     * 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. 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 - then the information in provided in the element definition may be different to the base definition. On the original definition of the element, it will be same.
     * The base information does not carry any information that could not be determined from the path and related profiles, but making this determination requires both that the related profiles are available, and that the algorithm to determine them be available. For tooling simplicity, the base information must always be populated in element definitions in snap shots, even if it is the same.
     */
    base?: ElementDefinitionBase;
    /**
     * Reference to definition of content for the element
     * Identifies an element defined elsewhere in the definition whose content rules should be applied to the current element. ContentReferences bring across all the rules that are in the ElementDefinition for the element, including definitions, cardinality constraints, bindings, invariants etc.
     * ContentReferences can only be defined in specializations, not constrained types, and they cannot be changed and always reference the non-constrained definition.
     */
    contentReference?: uri;
    /**
     * Extension for contentReference
     **/
    _contentReference?: Element;
    /**
     * Data type and Profile for this element
     * The data type or resource that the value of this element is permitted to be.
     * The Type of the element can be left blank in a differential constraint, in which case the type is inherited from the resource. Abstract types are not permitted to appear as a type when multiple types are listed.  (I.e. Abstract types cannot be part of a choice).
     */
    type?: ElementDefinitionType[];
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueBase64Binary?: base64Binary;
    /**
     * Extension for defaultValueBase64Binary
     **/
    _defaultValueBase64Binary?: Element;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueBoolean?: boolean;
    /**
     * Extension for defaultValueBoolean
     **/
    _defaultValueBoolean?: Element;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueCanonical?: canonical;
    /**
     * Extension for defaultValueCanonical
     **/
    _defaultValueCanonical?: Element;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueCode?: code;
    /**
     * Extension for defaultValueCode
     **/
    _defaultValueCode?: Element;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueDate?: date;
    /**
     * Extension for defaultValueDate
     **/
    _defaultValueDate?: Element;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueDateTime?: dateTime;
    /**
     * Extension for defaultValueDateTime
     **/
    _defaultValueDateTime?: Element;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueDecimal?: decimal;
    /**
     * Extension for defaultValueDecimal
     **/
    _defaultValueDecimal?: Element;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueId?: id;
    /**
     * Extension for defaultValueId
     **/
    _defaultValueId?: Element;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueInstant?: instant;
    /**
     * Extension for defaultValueInstant
     **/
    _defaultValueInstant?: Element;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueInteger?: integer;
    /**
     * Extension for defaultValueInteger
     **/
    _defaultValueInteger?: Element;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueMarkdown?: markdown;
    /**
     * Extension for defaultValueMarkdown
     **/
    _defaultValueMarkdown?: Element;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueOid?: oid;
    /**
     * Extension for defaultValueOid
     **/
    _defaultValueOid?: Element;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValuePositiveInt?: positiveInt;
    /**
     * Extension for defaultValuePositiveInt
     **/
    _defaultValuePositiveInt?: Element;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueString?: string;
    /**
     * Extension for defaultValueString
     **/
    _defaultValueString?: Element;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueTime?: time;
    /**
     * Extension for defaultValueTime
     **/
    _defaultValueTime?: Element;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueUnsignedInt?: unsignedInt;
    /**
     * Extension for defaultValueUnsignedInt
     **/
    _defaultValueUnsignedInt?: Element;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueUri?: uri;
    /**
     * Extension for defaultValueUri
     **/
    _defaultValueUri?: Element;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueUrl?: url;
    /**
     * Extension for defaultValueUrl
     **/
    _defaultValueUrl?: Element;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueUuid?: uuid;
    /**
     * Extension for defaultValueUuid
     **/
    _defaultValueUuid?: Element;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueAddress?: Address;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueAge?: Age;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueAnnotation?: Annotation;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueAttachment?: Attachment;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueCodeableConcept?: CodeableConcept;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueCoding?: Coding;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueContactPoint?: ContactPoint;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueCount?: Count;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueDistance?: Distance;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueDuration?: Duration;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueHumanName?: HumanName;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueIdentifier?: Identifier;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueMoney?: Money;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValuePeriod?: Period;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueQuantity?: Quantity;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueRange?: Range;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueRatio?: Ratio;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueReference?: Reference;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueSampledData?: SampledData;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueSignature?: Signature;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueTiming?: Timing;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueContactDetail?: ContactDetail;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueContributor?: Contributor;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueDataRequirement?: DataRequirement;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueExpression?: Expression;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueParameterDefinition?: ParameterDefinition;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueRelatedArtifact?: RelatedArtifact;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueTriggerDefinition?: TriggerDefinition;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueUsageContext?: UsageContext;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueDosage?: Dosage;
    /**
     * Specified value if missing from instance
     * 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').
     * Specifying a default value means that the property can never been unknown - it must always have a value. Further, the default value can never be changed, or changed in constraints on content models. Defining default values creates many difficulties in implementation (e.g. when is a value missing?). For these reasons, default values are (and should be) used extremely sparingly.

No default values are ever defined in the FHIR specification, nor can they be defined in constraints ("profiles") on data types or resources. This element only exists so that default values may be defined in logical models.
     */
    defaultValueMeta?: Meta;
    /**
     * Implicit meaning when this element is missing
     * The Implicit meaning that is to be understood when this element is missing (e.g. 'when this element is missing, the period is ongoing').
     * Implicit meanings for missing values can only be specified on a resource, data type, or extension definition, and never in a profile that applies to one of these. An implicit meaning for a missing value can never be changed, and specifying one has the consequence that constraining its use in profiles eliminates use cases as possibilities, not merely moving them out of scope.
     */
    meaningWhenMissing?: markdown;
    /**
     * Extension for meaningWhenMissing
     **/
    _meaningWhenMissing?: Element;
    /**
     * What the order of the elements means
     * 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.
     * This element can only be asserted on repeating elements and can only be introduced when defining resources or data types.  It can be further refined profiled elements but if absent in the base type, a profile cannot assert meaning.
     */
    orderMeaning?: string;
    /**
     * Extension for orderMeaning
     **/
    _orderMeaning?: Element;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedBase64Binary?: base64Binary;
    /**
     * Extension for fixedBase64Binary
     **/
    _fixedBase64Binary?: Element;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedBoolean?: boolean;
    /**
     * Extension for fixedBoolean
     **/
    _fixedBoolean?: Element;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedCanonical?: canonical;
    /**
     * Extension for fixedCanonical
     **/
    _fixedCanonical?: Element;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedCode?: code;
    /**
     * Extension for fixedCode
     **/
    _fixedCode?: Element;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedDate?: date;
    /**
     * Extension for fixedDate
     **/
    _fixedDate?: Element;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedDateTime?: dateTime;
    /**
     * Extension for fixedDateTime
     **/
    _fixedDateTime?: Element;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedDecimal?: decimal;
    /**
     * Extension for fixedDecimal
     **/
    _fixedDecimal?: Element;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedId?: id;
    /**
     * Extension for fixedId
     **/
    _fixedId?: Element;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedInstant?: instant;
    /**
     * Extension for fixedInstant
     **/
    _fixedInstant?: Element;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedInteger?: integer;
    /**
     * Extension for fixedInteger
     **/
    _fixedInteger?: Element;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedMarkdown?: markdown;
    /**
     * Extension for fixedMarkdown
     **/
    _fixedMarkdown?: Element;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedOid?: oid;
    /**
     * Extension for fixedOid
     **/
    _fixedOid?: Element;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedPositiveInt?: positiveInt;
    /**
     * Extension for fixedPositiveInt
     **/
    _fixedPositiveInt?: Element;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedString?: string;
    /**
     * Extension for fixedString
     **/
    _fixedString?: Element;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedTime?: time;
    /**
     * Extension for fixedTime
     **/
    _fixedTime?: Element;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedUnsignedInt?: unsignedInt;
    /**
     * Extension for fixedUnsignedInt
     **/
    _fixedUnsignedInt?: Element;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedUri?: uri;
    /**
     * Extension for fixedUri
     **/
    _fixedUri?: Element;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedUrl?: url;
    /**
     * Extension for fixedUrl
     **/
    _fixedUrl?: Element;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedUuid?: uuid;
    /**
     * Extension for fixedUuid
     **/
    _fixedUuid?: Element;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedAddress?: Address;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedAge?: Age;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedAnnotation?: Annotation;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedAttachment?: Attachment;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedCodeableConcept?: CodeableConcept;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedCoding?: Coding;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedContactPoint?: ContactPoint;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedCount?: Count;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedDistance?: Distance;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedDuration?: Duration;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedHumanName?: HumanName;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedIdentifier?: Identifier;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedMoney?: Money;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedPeriod?: Period;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedQuantity?: Quantity;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedRange?: Range;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedRatio?: Ratio;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedReference?: Reference;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedSampledData?: SampledData;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedSignature?: Signature;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedTiming?: Timing;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedContactDetail?: ContactDetail;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedContributor?: Contributor;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedDataRequirement?: DataRequirement;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedExpression?: Expression;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedParameterDefinition?: ParameterDefinition;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedRelatedArtifact?: RelatedArtifact;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedTriggerDefinition?: TriggerDefinition;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedUsageContext?: UsageContext;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedDosage?: Dosage;
    /**
     * Value must be exactly this
     * 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.
     * This is not recommended for Coding and CodeableConcept since these often have highly contextual properties such as version or display.
     */
    fixedMeta?: Meta;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternBase64Binary?: base64Binary;
    /**
     * Extension for patternBase64Binary
     **/
    _patternBase64Binary?: Element;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternBoolean?: boolean;
    /**
     * Extension for patternBoolean
     **/
    _patternBoolean?: Element;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternCanonical?: canonical;
    /**
     * Extension for patternCanonical
     **/
    _patternCanonical?: Element;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternCode?: code;
    /**
     * Extension for patternCode
     **/
    _patternCode?: Element;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternDate?: date;
    /**
     * Extension for patternDate
     **/
    _patternDate?: Element;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternDateTime?: dateTime;
    /**
     * Extension for patternDateTime
     **/
    _patternDateTime?: Element;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternDecimal?: decimal;
    /**
     * Extension for patternDecimal
     **/
    _patternDecimal?: Element;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternId?: id;
    /**
     * Extension for patternId
     **/
    _patternId?: Element;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternInstant?: instant;
    /**
     * Extension for patternInstant
     **/
    _patternInstant?: Element;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternInteger?: integer;
    /**
     * Extension for patternInteger
     **/
    _patternInteger?: Element;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternMarkdown?: markdown;
    /**
     * Extension for patternMarkdown
     **/
    _patternMarkdown?: Element;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternOid?: oid;
    /**
     * Extension for patternOid
     **/
    _patternOid?: Element;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternPositiveInt?: positiveInt;
    /**
     * Extension for patternPositiveInt
     **/
    _patternPositiveInt?: Element;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternString?: string;
    /**
     * Extension for patternString
     **/
    _patternString?: Element;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternTime?: time;
    /**
     * Extension for patternTime
     **/
    _patternTime?: Element;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternUnsignedInt?: unsignedInt;
    /**
     * Extension for patternUnsignedInt
     **/
    _patternUnsignedInt?: Element;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternUri?: uri;
    /**
     * Extension for patternUri
     **/
    _patternUri?: Element;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternUrl?: url;
    /**
     * Extension for patternUrl
     **/
    _patternUrl?: Element;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternUuid?: uuid;
    /**
     * Extension for patternUuid
     **/
    _patternUuid?: Element;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternAddress?: Address;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternAge?: Age;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternAnnotation?: Annotation;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternAttachment?: Attachment;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternCodeableConcept?: CodeableConcept;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternCoding?: Coding;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternContactPoint?: ContactPoint;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternCount?: Count;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternDistance?: Distance;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternDuration?: Duration;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternHumanName?: HumanName;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternIdentifier?: Identifier;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternMoney?: Money;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternPeriod?: Period;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternQuantity?: Quantity;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternRange?: Range;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternRatio?: Ratio;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternReference?: Reference;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternSampledData?: SampledData;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternSignature?: Signature;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternTiming?: Timing;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternContactDetail?: ContactDetail;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternContributor?: Contributor;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternDataRequirement?: DataRequirement;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternExpression?: Expression;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternParameterDefinition?: ParameterDefinition;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternRelatedArtifact?: RelatedArtifact;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternTriggerDefinition?: TriggerDefinition;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternUsageContext?: UsageContext;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternDosage?: Dosage;
    /**
     * Value must have at least these property values
     * 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.

When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.

When pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.

When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,

1. If primitive: it must match exactly the pattern value
2. If a complex object: it must match (recursively) the pattern value
3. If an array: it must match (recursively) the pattern value.
     * Mostly used for fixing values of CodeableConcept. In general, pattern[x] is not intended for use with primitive types, where is has the same meaning as fixed[x].
     */
    patternMeta?: Meta;
    /**
     * Example value (as defined for type)
     * A sample value for this element demonstrating the type of information that would typically be found in the element.
     * Examples will most commonly be present for data where it's not implicitly obvious from either the data type or value set what the values might be.  (I.e. Example values for dates or quantities would generally be unnecessary.)  If the example value is fully populated, the publication tool can generate an instance automatically.
     */
    example?: ElementDefinitionExample[];
    /**
     * Minimum Allowed Value (for some types)
     * 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.
     * Except for date/date/instant, the type of the minValue[x] SHALL be the same as the specified type of the element. For the date/dateTime/instant values, the type of minValue[x] SHALL be either the same, or a [Duration](datatypes.html#Duration) which specifies a relative time limit to the current time. The duration value is positive, and is subtracted from the current clock to determine the minimum allowable value.   A minimum value for a Quantity is interpreted as an canonical minimum - e.g. you cannot provide 100mg if the minimum value is 10g.
     */
    minValueDate?: date;
    /**
     * Extension for minValueDate
     **/
    _minValueDate?: Element;
    /**
     * Minimum Allowed Value (for some types)
     * 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.
     * Except for date/date/instant, the type of the minValue[x] SHALL be the same as the specified type of the element. For the date/dateTime/instant values, the type of minValue[x] SHALL be either the same, or a [Duration](datatypes.html#Duration) which specifies a relative time limit to the current time. The duration value is positive, and is subtracted from the current clock to determine the minimum allowable value.   A minimum value for a Quantity is interpreted as an canonical minimum - e.g. you cannot provide 100mg if the minimum value is 10g.
     */
    minValueDateTime?: dateTime;
    /**
     * Extension for minValueDateTime
     **/
    _minValueDateTime?: Element;
    /**
     * Minimum Allowed Value (for some types)
     * 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.
     * Except for date/date/instant, the type of the minValue[x] SHALL be the same as the specified type of the element. For the date/dateTime/instant values, the type of minValue[x] SHALL be either the same, or a [Duration](datatypes.html#Duration) which specifies a relative time limit to the current time. The duration value is positive, and is subtracted from the current clock to determine the minimum allowable value.   A minimum value for a Quantity is interpreted as an canonical minimum - e.g. you cannot provide 100mg if the minimum value is 10g.
     */
    minValueInstant?: instant;
    /**
     * Extension for minValueInstant
     **/
    _minValueInstant?: Element;
    /**
     * Minimum Allowed Value (for some types)
     * 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.
     * Except for date/date/instant, the type of the minValue[x] SHALL be the same as the specified type of the element. For the date/dateTime/instant values, the type of minValue[x] SHALL be either the same, or a [Duration](datatypes.html#Duration) which specifies a relative time limit to the current time. The duration value is positive, and is subtracted from the current clock to determine the minimum allowable value.   A minimum value for a Quantity is interpreted as an canonical minimum - e.g. you cannot provide 100mg if the minimum value is 10g.
     */
    minValueTime?: time;
    /**
     * Extension for minValueTime
     **/
    _minValueTime?: Element;
    /**
     * Minimum Allowed Value (for some types)
     * 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.
     * Except for date/date/instant, the type of the minValue[x] SHALL be the same as the specified type of the element. For the date/dateTime/instant values, the type of minValue[x] SHALL be either the same, or a [Duration](datatypes.html#Duration) which specifies a relative time limit to the current time. The duration value is positive, and is subtracted from the current clock to determine the minimum allowable value.   A minimum value for a Quantity is interpreted as an canonical minimum - e.g. you cannot provide 100mg if the minimum value is 10g.
     */
    minValueDecimal?: decimal;
    /**
     * Extension for minValueDecimal
     **/
    _minValueDecimal?: Element;
    /**
     * Minimum Allowed Value (for some types)
     * 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.
     * Except for date/date/instant, the type of the minValue[x] SHALL be the same as the specified type of the element. For the date/dateTime/instant values, the type of minValue[x] SHALL be either the same, or a [Duration](datatypes.html#Duration) which specifies a relative time limit to the current time. The duration value is positive, and is subtracted from the current clock to determine the minimum allowable value.   A minimum value for a Quantity is interpreted as an canonical minimum - e.g. you cannot provide 100mg if the minimum value is 10g.
     */
    minValueInteger?: integer;
    /**
     * Extension for minValueInteger
     **/
    _minValueInteger?: Element;
    /**
     * Minimum Allowed Value (for some types)
     * 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.
     * Except for date/date/instant, the type of the minValue[x] SHALL be the same as the specified type of the element. For the date/dateTime/instant values, the type of minValue[x] SHALL be either the same, or a [Duration](datatypes.html#Duration) which specifies a relative time limit to the current time. The duration value is positive, and is subtracted from the current clock to determine the minimum allowable value.   A minimum value for a Quantity is interpreted as an canonical minimum - e.g. you cannot provide 100mg if the minimum value is 10g.
     */
    minValuePositiveInt?: positiveInt;
    /**
     * Extension for minValuePositiveInt
     **/
    _minValuePositiveInt?: Element;
    /**
     * Minimum Allowed Value (for some types)
     * 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.
     * Except for date/date/instant, the type of the minValue[x] SHALL be the same as the specified type of the element. For the date/dateTime/instant values, the type of minValue[x] SHALL be either the same, or a [Duration](datatypes.html#Duration) which specifies a relative time limit to the current time. The duration value is positive, and is subtracted from the current clock to determine the minimum allowable value.   A minimum value for a Quantity is interpreted as an canonical minimum - e.g. you cannot provide 100mg if the minimum value is 10g.
     */
    minValueUnsignedInt?: unsignedInt;
    /**
     * Extension for minValueUnsignedInt
     **/
    _minValueUnsignedInt?: Element;
    /**
     * Minimum Allowed Value (for some types)
     * 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.
     * Except for date/date/instant, the type of the minValue[x] SHALL be the same as the specified type of the element. For the date/dateTime/instant values, the type of minValue[x] SHALL be either the same, or a [Duration](datatypes.html#Duration) which specifies a relative time limit to the current time. The duration value is positive, and is subtracted from the current clock to determine the minimum allowable value.   A minimum value for a Quantity is interpreted as an canonical minimum - e.g. you cannot provide 100mg if the minimum value is 10g.
     */
    minValueQuantity?: Quantity;
    /**
     * Maximum Allowed Value (for some types)
     * 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.
     * Except for date/date/instant, the type of the maxValue[x] SHALL be the same as the specified type of the element. For the date/dateTime/instant values, the type of maxValue[x] SHALL be either the same, or a [Duration](datatypes.html#Duration) which specifies a relative time limit to the current time. The duration value is positive, and is added to the current clock to determine the maximum allowable value.   A maximum value for a Quantity is interpreted as an canonical maximum - e.g. you cannot provide 10g if the maximum value is 50mg.
     */
    maxValueDate?: date;
    /**
     * Extension for maxValueDate
     **/
    _maxValueDate?: Element;
    /**
     * Maximum Allowed Value (for some types)
     * 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.
     * Except for date/date/instant, the type of the maxValue[x] SHALL be the same as the specified type of the element. For the date/dateTime/instant values, the type of maxValue[x] SHALL be either the same, or a [Duration](datatypes.html#Duration) which specifies a relative time limit to the current time. The duration value is positive, and is added to the current clock to determine the maximum allowable value.   A maximum value for a Quantity is interpreted as an canonical maximum - e.g. you cannot provide 10g if the maximum value is 50mg.
     */
    maxValueDateTime?: dateTime;
    /**
     * Extension for maxValueDateTime
     **/
    _maxValueDateTime?: Element;
    /**
     * Maximum Allowed Value (for some types)
     * 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.
     * Except for date/date/instant, the type of the maxValue[x] SHALL be the same as the specified type of the element. For the date/dateTime/instant values, the type of maxValue[x] SHALL be either the same, or a [Duration](datatypes.html#Duration) which specifies a relative time limit to the current time. The duration value is positive, and is added to the current clock to determine the maximum allowable value.   A maximum value for a Quantity is interpreted as an canonical maximum - e.g. you cannot provide 10g if the maximum value is 50mg.
     */
    maxValueInstant?: instant;
    /**
     * Extension for maxValueInstant
     **/
    _maxValueInstant?: Element;
    /**
     * Maximum Allowed Value (for some types)
     * 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.
     * Except for date/date/instant, the type of the maxValue[x] SHALL be the same as the specified type of the element. For the date/dateTime/instant values, the type of maxValue[x] SHALL be either the same, or a [Duration](datatypes.html#Duration) which specifies a relative time limit to the current time. The duration value is positive, and is added to the current clock to determine the maximum allowable value.   A maximum value for a Quantity is interpreted as an canonical maximum - e.g. you cannot provide 10g if the maximum value is 50mg.
     */
    maxValueTime?: time;
    /**
     * Extension for maxValueTime
     **/
    _maxValueTime?: Element;
    /**
     * Maximum Allowed Value (for some types)
     * 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.
     * Except for date/date/instant, the type of the maxValue[x] SHALL be the same as the specified type of the element. For the date/dateTime/instant values, the type of maxValue[x] SHALL be either the same, or a [Duration](datatypes.html#Duration) which specifies a relative time limit to the current time. The duration value is positive, and is added to the current clock to determine the maximum allowable value.   A maximum value for a Quantity is interpreted as an canonical maximum - e.g. you cannot provide 10g if the maximum value is 50mg.
     */
    maxValueDecimal?: decimal;
    /**
     * Extension for maxValueDecimal
     **/
    _maxValueDecimal?: Element;
    /**
     * Maximum Allowed Value (for some types)
     * 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.
     * Except for date/date/instant, the type of the maxValue[x] SHALL be the same as the specified type of the element. For the date/dateTime/instant values, the type of maxValue[x] SHALL be either the same, or a [Duration](datatypes.html#Duration) which specifies a relative time limit to the current time. The duration value is positive, and is added to the current clock to determine the maximum allowable value.   A maximum value for a Quantity is interpreted as an canonical maximum - e.g. you cannot provide 10g if the maximum value is 50mg.
     */
    maxValueInteger?: integer;
    /**
     * Extension for maxValueInteger
     **/
    _maxValueInteger?: Element;
    /**
     * Maximum Allowed Value (for some types)
     * 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.
     * Except for date/date/instant, the type of the maxValue[x] SHALL be the same as the specified type of the element. For the date/dateTime/instant values, the type of maxValue[x] SHALL be either the same, or a [Duration](datatypes.html#Duration) which specifies a relative time limit to the current time. The duration value is positive, and is added to the current clock to determine the maximum allowable value.   A maximum value for a Quantity is interpreted as an canonical maximum - e.g. you cannot provide 10g if the maximum value is 50mg.
     */
    maxValuePositiveInt?: positiveInt;
    /**
     * Extension for maxValuePositiveInt
     **/
    _maxValuePositiveInt?: Element;
    /**
     * Maximum Allowed Value (for some types)
     * 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.
     * Except for date/date/instant, the type of the maxValue[x] SHALL be the same as the specified type of the element. For the date/dateTime/instant values, the type of maxValue[x] SHALL be either the same, or a [Duration](datatypes.html#Duration) which specifies a relative time limit to the current time. The duration value is positive, and is added to the current clock to determine the maximum allowable value.   A maximum value for a Quantity is interpreted as an canonical maximum - e.g. you cannot provide 10g if the maximum value is 50mg.
     */
    maxValueUnsignedInt?: unsignedInt;
    /**
     * Extension for maxValueUnsignedInt
     **/
    _maxValueUnsignedInt?: Element;
    /**
     * Maximum Allowed Value (for some types)
     * 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.
     * Except for date/date/instant, the type of the maxValue[x] SHALL be the same as the specified type of the element. For the date/dateTime/instant values, the type of maxValue[x] SHALL be either the same, or a [Duration](datatypes.html#Duration) which specifies a relative time limit to the current time. The duration value is positive, and is added to the current clock to determine the maximum allowable value.   A maximum value for a Quantity is interpreted as an canonical maximum - e.g. you cannot provide 10g if the maximum value is 50mg.
     */
    maxValueQuantity?: Quantity;
    /**
     * Max length for strings
     * 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.
     * Receivers are not required to reject instances that exceed the maximum length.  The full length could be stored.  In some cases, data might be truncated, though truncation should be undertaken with care and an understanding of the consequences of doing so. If not specified, there is no conformance expectation for length support.
     */
    maxLength?: integer;
    /**
     * Extension for maxLength
     **/
    _maxLength?: Element;
    /**
     * Reference to invariant about presence
     * A reference to an invariant that may make additional statements about the cardinality or value in the instance.
     */
    condition?: id[];
    /**
     * Extension for condition
     **/
    _condition?: Element[];
    /**
     * Condition that must evaluate to true
     * Formal constraints such as co-occurrence and other constraints that can be computationally evaluated within the context of the instance.
     * Constraints should be declared on the "context" element - the lowest element in the hierarchy that is common to all nodes referenced by the constraint.
     */
    constraint?: ElementDefinitionConstraint[];
    /**
     * If the element must be supported
     * 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. If false, whether to populate or use the data element in any way is at the discretion of the implementation.
     * "Something useful" is context dependent and impossible to describe in the base FHIR specification. For this reason, tue mustSupport flag is never set to true by the FHIR specification itself - it is only set to true in profiles.  A profile on a type can always make musSupport = true if it is false in the base type but cannot make mustSupport = false if it is true in the base type.   This is done in [Resource Profiles](profiling.html#mustsupport), where the profile labels an element as mustSupport=true. When a profile does this, it SHALL also make clear exactly what kind of "support" is required, as this can mean many things.    Note that an element that has the property IsModifier is not necessarily a "key" element (e.g. one of the important elements to make use of the resource), nor is it automatically mustSupport - however both of these things are more likely to be true for IsModifier elements than for other elements.
     */
    mustSupport?: boolean;
    /**
     * Extension for mustSupport
     **/
    _mustSupport?: Element;
    /**
     * If this modifies the meaning of other elements
     * 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.
     * Only the definition of an element can set IsModifier true - either the specification itself or where an extension is originally defined. Once set, it cannot be changed in derived profiles. An element/extension that has isModifier=true SHOULD also have a minimum cardinality of 1, so that there is no lack of clarity about what to do if it is missing. If it can be missing, the definition SHALL make the meaning of a missing element clear.
     */
    isModifier?: boolean;
    /**
     * Extension for isModifier
     **/
    _isModifier?: Element;
    /**
     * Reason that this element is marked as a modifier
     * Explains how that element affects the interpretation of the resource or element that contains it.
     */
    isModifierReason?: string;
    /**
     * Extension for isModifierReason
     **/
    _isModifierReason?: Element;
    /**
     * Include when _summary = true?
     * Whether the element should be included if a client requests a search with the parameter _summary=true.
     * Some resources include a set of simple metadata, and some very large data. This element is used to reduce the quantity of data returned in searches. Note that servers may pre-cache summarized resources for optimal performance, so servers might not support per-profile use of the isSummary flag. When a request is made with _summary=true, serailisers only include elements marked as 'isSummary = true'. Other than Attachment.data, all data type properties are included in the summary form. In resource and data type definitions, if an element is at the root or has a parent that is 'mustSupport' and the minimum cardinality is 1 or the element is a modifier, it must be marked as isSummary=true.
     */
    isSummary?: boolean;
    /**
     * Extension for isSummary
     **/
    _isSummary?: Element;
    /**
     * ValueSet details if this is coded
     * Binds to a value set if this element is coded (code, Coding, CodeableConcept, Quantity), or the data types (string, uri).
     * For a CodeableConcept, when no codes are allowed - only text, use a binding of strength "required" with a description explaining that no coded values are allowed and what sort of information to put in the "text" element.
     */
    binding?: ElementDefinitionBinding;
    /**
     * Map element to another set of definitions
     * Identifies a concept from an external specification that roughly corresponds to this element.
     * Mappings are not necessarily specific enough for safe translation.
     */
    mapping?: ElementDefinitionMapping[];
    /**
     * xmlAttr | xmlText | typeAttr | cdaText | xhtml
     * Codes that define how this element is represented in instances, when the deviation varies from the normal case.
     * In resources, this is rarely used except for special cases where the representation deviates from the normal, and can only be done in the base standard (and profiles must reproduce what the base standard does). This element is used quite commonly in Logical models when the logical models represent a specific serialization format (e.g. CDA, v2 etc.).
     */
    representation?: ElementDefinitionPropertyRepresentation[];
}
/**
 * An expression that can be used to generate a value
 * A expression that is evaluated in a specified context and returns a value. The context of use of the expression must specify the context in which the expression is evaluated, and how the result of the expression is used.
 */
export interface Expression extends Element {
    /**
     * Natural language description of the condition
     * A brief, natural language description of the condition that effectively communicates the intended semantics.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Short name assigned to expression for reuse
     * A short name assigned to the expression to allow for multiple reuse of the expression in the context where it is defined.
     */
    name?: id;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Expression in specified language
     * An expression in the specified language that returns a value.
     */
    expression?: string;
    /**
     * Extension for expression
     **/
    _expression?: Element;
    /**
     * Where the expression is found
     * A URI that defines where the expression is found.
     * If both a reference and an expression is found, the reference SHALL point to the same expression.
     */
    reference?: uri;
    /**
     * Extension for reference
     **/
    _reference?: Element;
    /**
     * text/cql | text/fhirpath | application/x-fhir-query | etc.
     * The media type of the language for the expression.
     */
    language: Expressionundefined;
}
/**
 * Name of a human - parts and usage
 * A human's name with the ability to identify parts and usage.
 * Names may be changed, or repudiated, or people may have different names in different contexts. Names may be divided into parts of different type that have variable significance depending on context, though the division into parts does not always matter. With personal names, the different parts might or might not be imbued with some implicit meaning; various cultures associate different importance with the name parts and the degree to which systems must care about name parts around the world varies widely.
 */
export interface HumanName extends Element {
    /**
     * Text representation of the full name
     * Specifies the entire name as it should be displayed e.g. on an application UI. This may be provided instead of or as well as the specific parts.
     * Can provide both a text representation and parts. Applications updating a name SHALL ensure that when both text and parts are present,  no content is included in the text that isn't found in a part.
     */
    text?: string;
    /**
     * Extension for text
     **/
    _text?: Element;
    /**
     * Family name (often called 'Surname')
     * 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.
     * Family Name may be decomposed into specific parts using extensions (de, nl, es related cultures).
     */
    family?: string;
    /**
     * Extension for family
     **/
    _family?: Element;
    /**
     * Given names (not always 'first'). Includes middle names
     * Given name.
     * If only initials are recorded, they may be used in place of the full name parts. Initials may be separated into multiple given names but often aren't due to paractical limitations.  This element is not called "first name" since given names do not always come first.
     */
    given?: string[];
    /**
     * Extension for given
     **/
    _given?: Element[];
    /**
     * Parts that come before the name
     * 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.
     */
    prefix?: string[];
    /**
     * Extension for prefix
     **/
    _prefix?: Element[];
    /**
     * Parts that come after the name
     * 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.
     */
    suffix?: string[];
    /**
     * Extension for suffix
     **/
    _suffix?: Element[];
    /**
     * Time period when name was/is in use
     * Indicates the period of time when this name was valid for the named person.
     */
    period?: Period;
    /**
     * usual | official | temp | nickname | anonymous | old | maiden
     * Identifies the purpose for this name.
     * Applications can assume that a name is current unless it explicitly says that it is temporary or old.
     */
    use?: HumanNameNameUse;
}
/**
 * An identifier intended for computation
 * An identifier - identifies some entity uniquely and unambiguously. Typically this is used for business identifiers.
 */
export interface Identifier extends Element {
    /**
     * Description of identifier
     * A coded type for the identifier that can be used to determine which identifier to use for a specific purpose.
     * This element deals only with general categories of identifiers.  It SHOULD not be used for codes that correspond 1..1 with the Identifier.system. Some identifiers may fall into multiple categories due to common usage.   Where the system is known, a type is unnecessary because the type is always part of the system definition. However systems often need to handle identifiers where the system is not known. There is not a 1:1 relationship between type and system, since many different systems have the same type.
     */
    type?: CodeableConcept;
    /**
     * The namespace for the identifier value
     * Establishes the namespace for the value - that is, a URL that describes a set values that are unique.
     * Identifier.system is always case sensitive.
     */
    system?: uri;
    /**
     * Extension for system
     **/
    _system?: Element;
    /**
     * The value that is unique
     * The portion of the identifier typically relevant to the user and which is unique within the context of the system.
     * If the value is a full URI, then the system SHALL be urn:ietf:rfc:3986.  The value's primary purpose is computational mapping.  As a result, it may be normalized for comparison purposes (e.g. removing non-significant whitespace, dashes, etc.)  A value formatted for human display can be conveyed using the [Rendered Value extension](extension-rendered-value.html). Identifier.value is to be treated as case sensitive unless knowledge of the Identifier.system allows the processer to be confident that non-case-sensitive processing is safe.
     */
    value?: string;
    /**
     * Extension for value
     **/
    _value?: Element;
    /**
     * Time period when id is/was valid for use
     * Time period during which identifier is/was valid for use.
     */
    period?: Period;
    /**
     * Organization that issued id (may be just text)
     * Organization that issued/manages the identifier.
     * The Identifier.assigner may omit the .reference element and only contain a .display element reflecting the name or other textual information about the assigning organization.
     */
    assigner?: Reference;
    /**
     * usual | official | temp | secondary | old (If known)
     * The purpose of this identifier.
     * Applications can assume that an identifier is permanent unless it explicitly says that it is temporary.
     */
    use?: IdentifierUse;
}
/**
 * Human-readable summary of the resource (essential clinical and business information)
 * A human-readable summary of the resource conveying the essential clinical and business information for the resource.
 */
export interface Narrative extends Element {
    /**
     * Limited xhtml content
     * The actual narrative content, a stripped down version of XHTML.
     * The contents of the html element are an XHTML fragment containing only the basic html formatting elements described in chapters 7-11 and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained stylesheets. The XHTML content SHALL NOT contain a head, a body, external stylesheet references, scripts, forms, base/link/xlink, frames, iframes and objects.
     */
    div: xhtml;
    /**
     * Extension for div
     **/
    _div?: Element;
    /**
     * generated | extensions | additional | empty
     * 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.
     */
    status: NarrativeStatus;
}
/**
 * Definition of a parameter to a module
 * 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.
 */
export interface ParameterDefinition extends Element {
    /**
     * Name used to access the parameter value
     * The name of the parameter used to allow access to the value of the parameter in evaluation contexts.
     */
    name?: code;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Minimum cardinality
     * The minimum number of times this parameter SHALL appear in the request or response.
     */
    min?: integer;
    /**
     * Extension for min
     **/
    _min?: Element;
    /**
     * Maximum cardinality (a number of *)
     * The maximum number of times this element is permitted to appear in the request or response.
     */
    max?: string;
    /**
     * Extension for max
     **/
    _max?: Element;
    /**
     * A brief description of the parameter
     * A brief discussion of what the parameter is for and how it is used by the module.
     */
    documentation?: string;
    /**
     * Extension for documentation
     **/
    _documentation?: Element;
    /**
     * What type of value
     * The type of the parameter.
     */
    type: code;
    /**
     * Extension for type
     **/
    _type?: Element;
    /**
     * What profile the value is expected to be
     * If specified, this indicates a profile that the input data must conform to, or that the output data will conform to.
     */
    profile?: canonical;
    /**
     * Extension for profile
     **/
    _profile?: Element;
    /**
     * in | out
     * Whether the parameter is input or output for the module.
     */
    use: ParameterDefinitionParameterUse;
}
/**
 * A measured or measurable amount
 * 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.
 * The context of use may frequently define what kind of quantity this is and therefore what kind of units can be used. The context of use may also restrict the values for the comparator.
 */
export interface Quantity extends Element {
    /**
     * Numerical value (with implicit precision)
     * The value of the measured amount. The value includes an implicit precision in the presentation of the value.
     * The implicit precision in the value should always be honored. Monetary values have their own rules for handling precision (refer to standard accounting text books).
     */
    value?: decimal;
    /**
     * Extension for value
     **/
    _value?: Element;
    /**
     * Unit representation
     * A human-readable form of the unit.
     */
    unit?: string;
    /**
     * Extension for unit
     **/
    _unit?: Element;
    /**
     * System that defines coded unit form
     * The identification of the system that provides the coded form of the unit.
     */
    system?: uri;
    /**
     * Extension for system
     **/
    _system?: Element;
    /**
     * Coded form of the unit
     * A computer processable form of the unit in some unit representation system.
     * The preferred system is UCUM, but SNOMED CT can also be used (for customary units) or ISO 4217 for currency.  The context of use may additionally require a code from a particular system.
     */
    code?: code;
    /**
     * Extension for code
     **/
    _code?: Element;
    /**
     * < | <= | >= | > - how to understand the value
     * 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.
     */
    comparator?: QuantityComparator;
}
/**
 * Related artifacts for a knowledge resource
 * Related artifacts such as additional documentation, justification, or bibliographic references.
 * Each related artifact is either an attachment, or a reference to another knowledge resource, but not both.
 */
export interface RelatedArtifact extends Element {
    /**
     * Short label
     * A short label that can be used to reference the citation from elsewhere in the containing artifact, such as a footnote index.
     */
    label?: string;
    /**
     * Extension for label
     **/
    _label?: Element;
    /**
     * Brief description of the related artifact
     * A brief description of the document or knowledge resource being referenced, suitable for display to a consumer.
     */
    display?: string;
    /**
     * Extension for display
     **/
    _display?: Element;
    /**
     * Bibliographic citation for the artifact
     * A bibliographic citation for the related artifact. This text SHOULD be formatted according to an accepted citation format.
     * Additional structured information about citations should be captured as extensions.
     */
    citation?: markdown;
    /**
     * Extension for citation
     **/
    _citation?: Element;
    /**
     * Where the artifact can be accessed
     * A url for the artifact that can be followed to access the actual content.
     * If a document or resource element is present, this element SHALL NOT be provided (use the url or reference in the Attachment or resource reference).
     */
    url?: url;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * What document is being referenced
     * The document being referenced, represented as an attachment. This is exclusive with the resource element.
     */
    document?: Attachment;
    /**
     * What resource is being referenced
     * The related resource, such as a library, value set, profile, or other knowledge resource.
     * If the type is predecessor, this is a reference to the succeeding knowledge resource. If the type is successor, this is a reference to the prior knowledge resource.
     */
    resource?: canonical;
    /**
     * Extension for resource
     **/
    _resource?: Element;
    /**
     * documentation | justification | citation | predecessor | successor | derived-from | depends-on | composed-of
     * The type of relationship to the related artifact.
     */
    type: RelatedArtifactType;
}
/**
 * When the event is to occur
 * A set of rules that describe when the event is scheduled.
 */
export interface TimingRepeat extends Element {
    /**
     * Length/Range of lengths, or (Start and/or end) limits
     * 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.
     */
    boundsDuration?: Duration;
    /**
     * Length/Range of lengths, or (Start and/or end) limits
     * 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.
     */
    boundsRange?: Range;
    /**
     * Length/Range of lengths, or (Start and/or end) limits
     * 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.
     */
    boundsPeriod?: Period;
    /**
     * Number of times to repeat
     * A total count of the desired number of repetitions across the duration of the entire timing specification. If countMax is present, this element indicates the lower bound of the allowed range of count values.
     * If you have both bounds and count, then this should be understood as within the bounds period, until count times happens.
     */
    count?: positiveInt;
    /**
     * Extension for count
     **/
    _count?: Element;
    /**
     * Maximum number of times to repeat
     * If present, indicates that the count is a range - so to perform the action between [count] and [countMax] times.
     */
    countMax?: positiveInt;
    /**
     * Extension for countMax
     **/
    _countMax?: Element;
    /**
     * How long when it happens
     * How long this thing happens for when it happens. If durationMax is present, this element indicates the lower bound of the allowed range of the duration.
     * For some events the duration is part of the definition of the event (e.g. IV infusions, where the duration is implicit in the specified quantity and rate). For others, it's part of the timing specification (e.g. exercise).
     */
    duration?: decimal;
    /**
     * Extension for duration
     **/
    _duration?: Element;
    /**
     * How long when it happens (Max)
     * If present, indicates that the duration is a range - so to perform the action between [duration] and [durationMax] time length.
     * For some events the duration is part of the definition of the event (e.g. IV infusions, where the duration is implicit in the specified quantity and rate). For others, it's part of the timing specification (e.g. exercise).
     */
    durationMax?: decimal;
    /**
     * Extension for durationMax
     **/
    _durationMax?: Element;
    /**
     * Event occurs frequency times per period
     * The number of times to repeat the action within the specified period. If frequencyMax is present, this element indicates the lower bound of the allowed range of the frequency.
     */
    frequency?: positiveInt;
    /**
     * Extension for frequency
     **/
    _frequency?: Element;
    /**
     * Event occurs up to frequencyMax times per period
     * If present, indicates that the frequency is a range - so to repeat between [frequency] and [frequencyMax] times within the period or period range.
     */
    frequencyMax?: positiveInt;
    /**
     * Extension for frequencyMax
     **/
    _frequencyMax?: Element;
    /**
     * Event occurs frequency times per period
     * 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. If periodMax is present, this element indicates the lower bound of the allowed range of the period length.
     */
    period?: decimal;
    /**
     * Extension for period
     **/
    _period?: Element;
    /**
     * Upper limit of period (3-4 hours)
     * 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.
     */
    periodMax?: decimal;
    /**
     * Extension for periodMax
     **/
    _periodMax?: Element;
    /**
     * Time of day for action
     * Specified time of day for action to take place.
     * When time of day is specified, it is inferred that the action happens every day (as filtered by dayofWeek) on the specified times. The elements when, frequency and period cannot be used as well as timeOfDay.
     */
    timeOfDay?: time[];
    /**
     * Extension for timeOfDay
     **/
    _timeOfDay?: Element[];
    /**
     * Code for time period of occurrence
     * An approximate time period during the day, potentially linked to an event of daily living that indicates when the action should occur.
     * When more than one event is listed, the event is tied to the union of the specified events.
     */
    when?: code[];
    /**
     * Extension for when
     **/
    _when?: Element[];
    /**
     * Minutes from event (before or after)
     * 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.
     */
    offset?: unsignedInt;
    /**
     * Extension for offset
     **/
    _offset?: Element;
    /**
     * s | min | h | d | wk | mo | a - unit of time (UCUM)
     * The units of time for the duration, in UCUM units.
     */
    durationUnit?: TimingUnitsOfTime;
    /**
     * s | min | h | d | wk | mo | a - unit of time (UCUM)
     * The units of time for the period in UCUM units.
     */
    periodUnit?: TimingUnitsOfTime;
    /**
     * mon | tue | wed | thu | fri | sat | sun
     * If one or more days of week is provided, then the action happens only on the specified day(s).
     * If no days are specified, the action is assumed to happen every day as otherwise specified. The elements frequency and period cannot be used as well as dayOfWeek.
     */
    dayOfWeek?: TimingDayOfWeek[];
}
/**
 * A timing schedule that specifies an event that may occur multiple times
 * 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.
 * Describes the occurrence of an event that may occur multiple times. Timing schedules are used for specifying when events are expected or requested to occur, and may also be used to represent the summary of a past or ongoing event.  For simplicity, the definitions of Timing components are expressed as 'future' events, but such components can also be used to describe historic or ongoing events.

A Timing schedule can be a list of events and/or criteria for when the event happens, which can be expressed in a structured form and/or as a code. When both event and a repeating specification are provided, the list of events should be understood as an interpretation of the information in the repeat structure.
 */
export interface Timing extends BackboneElement {
    /**
     * When the event occurs
     * Identifies specific times when the event occurs.
     */
    event?: dateTime[];
    /**
     * Extension for event
     **/
    _event?: Element[];
    /**
     * When the event is to occur
     * A set of rules that describe when the event is scheduled.
     */
    repeat?: TimingRepeat;
    /**
     * BID | TID | QID | AM | PM | QD | QOD | +
     * A code for the timing schedule (or just text in code.text). 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).
     * BID etc. are defined as 'at institutionally specified times'. For example, an institution may choose that BID is "always at 7am and 6pm".  If it is inappropriate for this choice to be made, the code BID should not be used. Instead, a distinct organization-specific code should be used in place of the HL7-defined BID code and/or a structured representation should be used (in this case, specifying the two event times).
     */
    code?: CodeableConcept;
}
/**
 * Defines an expected trigger for a module
 * A description of a triggering event. Triggering events can be named events, data events, or periodic, as determined by the type element.
 * If an event is a named-event, it means the event is completely pre-coordinated, and no other information can be specified for the event. If the event is one of the data- events, the data and condition elements specify the triggering criteria. The data element specifies the structured component, and the condition element provides additional optional refinement of that structured component. If the event is periodic, the timing element defines when the event is triggered. For both data- and periodic events, a name can be provided as a shorthand for the formal semantics provided by the other elements.
 */
export interface TriggerDefinition extends Element {
    /**
     * Name or URI that identifies the event
     * A formal name for the event. This may be an absolute URI that identifies the event formally (e.g. from a trigger registry), or a simple relative URI that identifies the event in a local context.
     * An event name can be provided for all event types, but is required for named events. If a name is provided for a type other than named events, it is considered to be a shorthand for the semantics described by the formal description of the event.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Timing of the event
     * The timing of the event (if this is a periodic trigger).
     */
    timingTiming?: Timing;
    /**
     * Timing of the event
     * The timing of the event (if this is a periodic trigger).
     */
    timingReference?: Reference;
    /**
     * Timing of the event
     * The timing of the event (if this is a periodic trigger).
     */
    timingDate?: date;
    /**
     * Extension for timingDate
     **/
    _timingDate?: Element;
    /**
     * Timing of the event
     * The timing of the event (if this is a periodic trigger).
     */
    timingDateTime?: dateTime;
    /**
     * Extension for timingDateTime
     **/
    _timingDateTime?: Element;
    /**
     * Triggering data of the event (multiple = 'and')
     * The triggering data of the event (if this is a data trigger). If more than one data is requirement is specified, then all the data requirements must be true.
     * This element shall be present for any data type trigger.
     */
    data?: DataRequirement[];
    /**
     * Whether the event triggers (boolean expression)
     * A boolean-valued expression that is evaluated in the context of the container of the trigger definition and returns whether or not the trigger fires.
     * This element can be only be specified for data type triggers and provides additional semantics for the trigger. The context available within the condition is based on the type of data event. For all events, the current resource will be available as context. In addition, for modification events, the previous resource will also be available. The expression may be inlined, or may be a simple absolute URI, which is a reference to a named expression within a logic library referenced by a library element or extension within the containing resource. If the expression is a FHIR Path expression, it evaluates in the context of a resource of one of the type identified in the data requirement, and may also refer to the variable %previous for delta comparisons on events of type data-changed, data-modified, and data-deleted which will always have the same type.
     */
    condition?: Expression;
    /**
     * named-event | periodic | data-changed | data-added | data-modified | data-removed | data-accessed | data-access-ended
     * The type of triggering event.
     */
    type: TriggerDefinitionTriggerType;
}
/**
 * The party(s) that are responsible for covering the payment of this account, and what order should they be applied to the account
 * The party(s) that are responsible for covering the payment of this account, and what order should they be applied to the account.
 * Typically. this may be some form of insurance, internal charges, or self-pay.

Local or jurisdictional business rules may determine which coverage covers which types of billable items charged to the account, and in which order.
Where the order is important, a local/jurisdictional extension may be defined to specify the order for the type of charge.
 */
export interface AccountCoverage extends BackboneElement {
    /**
     * The party(s), such as insurances, that may contribute to the payment of this account
     * The party(s) that contribute to payment (or part of) of the charges applied to this account (including self-pay).

A coverage may only be responsible for specific types of charges, and the sequence of the coverages in the account could be important when processing billing.
     */
    coverage: Reference;
    /**
     * The priority of the coverage in the context of this account
     * The priority of the coverage in the context of this account.
     * It is common in some jurisdictions for there to be multiple coverages allocated to an account, and a sequence is required to order the settling of the account (often with insurance claiming).
     */
    priority?: positiveInt;
    /**
     * Extension for priority
     **/
    _priority?: Element;
}
/**
 * The parties ultimately responsible for balancing the Account
 * The parties responsible for balancing the account if other payment options fall short.
 */
export interface AccountGuarantor extends BackboneElement {
    /**
     * Responsible entity
     * The entity who is responsible.
     */
    party: Reference;
    /**
     * Credit or other hold applied
     * A guarantor may be placed on credit hold or otherwise have their role temporarily suspended.
     */
    onHold?: boolean;
    /**
     * Extension for onHold
     **/
    _onHold?: Element;
    /**
     * Guarantee account during
     * The timeframe during which the guarantor accepts responsibility for the account.
     */
    period?: Period;
}
/**
 * Tracks balance, charges, for patient or cost center
 * 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.
 */
export interface Account extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Account';
    /**
     * Account number
     * Unique identifier used to reference the account.  Might or might not be intended for human use (e.g. credit card number).
     */
    identifier?: Identifier[];
    /**
     * E.g. patient, expense, depreciation
     * Categorizes the account for reporting and searching purposes.
     */
    type?: CodeableConcept;
    /**
     * Human-readable label
     * Name used for the account when displaying it to humans in reports, etc.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * The entity that caused the expenses
     * Identifies the entity which incurs the expenses. While the immediate recipients of services or goods might be entities related to the subject, the expenses were ultimately incurred by the subject of the Account.
     * Accounts can be applied to non-patients for tracking other non-patient related activities, such as group services (patients not tracked, and costs charged to another body), or might not be allocated.
     */
    subject?: Reference[];
    /**
     * Transaction window
     * The date range of services associated with this account.
     * It is possible for transactions to be posted outside the service period, as long as the service was provided within the defined service period.
     */
    servicePeriod?: Period;
    /**
     * The party(s) that are responsible for covering the payment of this account, and what order should they be applied to the account
     * The party(s) that are responsible for covering the payment of this account, and what order should they be applied to the account.
     * Typically. this may be some form of insurance, internal charges, or self-pay.

Local or jurisdictional business rules may determine which coverage covers which types of billable items charged to the account, and in which order.
Where the order is important, a local/jurisdictional extension may be defined to specify the order for the type of charge.
     */
    coverage?: AccountCoverage[];
    /**
     * Entity managing the Account
     * Indicates the service area, hospital, department, etc. with responsibility for managing the Account.
     */
    owner?: Reference;
    /**
     * Explanation of purpose/use
     * Provides additional information about what the account tracks and how it is used.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * The parties ultimately responsible for balancing the Account
     * The parties responsible for balancing the account if other payment options fall short.
     */
    guarantor?: AccountGuarantor[];
    /**
     * Reference to a parent Account
     * Reference to a parent Account.
     */
    partOf?: Reference;
    /**
     * active | inactive | entered-in-error | on-hold | unknown
     * Indicates whether the account is presently used/usable or not.
     * This element is labeled as a modifier because the status contains the codes inactive and entered-in-error that mark the Account as not currently valid.
     */
    status: AccountStatus;
}
/**
 * Who should participate in the action
 * Indicates who should participate in performing the action described.
 */
export interface ActivityDefinitionParticipant extends BackboneElement {
    /**
     * E.g. Nurse, Surgeon, Parent, etc.
     * The role the participant should play in performing the described action.
     */
    role?: CodeableConcept;
    /**
     * patient | practitioner | related-person | device
     * The type of participant in the action.
     */
    type: ActivityDefinitionActivityParticipantType;
}
/**
 * Dynamic aspects of the definition
 * 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 request resource that would contain the result.
 * Dynamic values are applied in the order in which they are defined in the ActivityDefinition. Note that if both a transform and dynamic values are specified, the dynamic values will be applied to the result of the transform.
 */
export interface ActivityDefinitionDynamicValue extends BackboneElement {
    /**
     * The path to the element to be set dynamically
     * 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. The specified path SHALL be a FHIRPath resolveable on the specified target type of the ActivityDefinition, and SHALL consist only of identifiers, constant indexers, and a restricted subset of functions. The path is allowed to contain qualifiers (.) to traverse sub-elements, as well as indexers ([x]) to traverse multiple-cardinality sub-elements (see the [Simple FHIRPath Profile](fhirpath.html#simple) for full details).
     * The path attribute contains a [Simple FHIRPath Subset](fhirpath.html#simple) that allows path traversal, but not calculation.
     */
    path: string;
    /**
     * Extension for path
     **/
    _path?: Element;
    /**
     * An expression that provides the dynamic value for the customization
     * An expression specifying the value of the customized element.
     * The expression may be inlined, or may be a reference to a named expression within a logic library referenced by the library element.
     */
    expression: Expression;
}
/**
 * The definition of a specific activity to be taken, independent of any particular patient or context
 * This resource allows for the definition of some activity to be performed, independent of a particular patient, practitioner, or other performance context.
 */
export interface ActivityDefinition extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'ActivityDefinition';
    /**
     * Canonical identifier for this activity definition, represented as a URI (globally unique)
     * An absolute URI that is used to identify this activity definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this activity definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the activity definition is stored on different servers.
     * Can be a urn:uuid: or a urn:oid: but real http: addresses are preferred.  Multiple instances may share the same URL if they have a distinct version.

The determination of when to create a new version of a resource (same url, new version) vs. defining a new artifact is up to the author.  Considerations for making this decision are found in [Technical and Business Versions](resource.html#versions).

In some cases, the resource can no longer be found at the stated url, but the url itself cannot change. Implementations can use the [meta.source](resource.html#meta) element to indicate where the current master source of the resource can be found.
     */
    url?: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Additional identifier for the activity definition
     * 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.
     * Typically, this is used for identifiers that can go in an HL7 V3 II (instance identifier) data type, and can then identify this activity definition outside of FHIR, where it is not possible to use the logical URI.
     */
    identifier?: Identifier[];
    /**
     * Business version of the activity definition
     * 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.
     * There may be different activity definition instances that have the same identifier but different versions.  The version can be appended to the url in a reference to allow a reference to a particular business version of the activity definition with the format [url]|[version].
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
    /**
     * Name for this activity definition (computer friendly)
     * 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.
     * The name is not expected to be globally unique. The name should be a simple alphanumeric type name to ensure that it is machine-processing friendly.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Name for this activity definition (human friendly)
     * A short, descriptive, user-friendly title for the activity definition.
     * This name does not need to be machine-processing friendly and may contain punctuation, white-space, etc.
     */
    title?: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * Subordinate title of the activity definition
     * An explanatory or alternate title for the activity definition giving additional information about its content.
     */
    subtitle?: string;
    /**
     * Extension for subtitle
     **/
    _subtitle?: Element;
    /**
     * For testing purposes, not real usage
     * 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.
     * Allows filtering of activity definitions that are appropriate for use versus not.
     */
    experimental?: boolean;
    /**
     * Extension for experimental
     **/
    _experimental?: Element;
    /**
     * Type of individual the activity definition is intended for
     * A code or group definition that describes the intended subject of the activity being defined.
     */
    subjectCodeableConcept?: CodeableConcept;
    /**
     * Type of individual the activity definition is intended for
     * A code or group definition that describes the intended subject of the activity being defined.
     */
    subjectReference?: Reference;
    /**
     * Date last changed
     * The date  (and optionally time) when the activity definition was published. The date must change 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.
     * Note that this is not the same as the resource last-modified-date, since the resource may be a secondary representation of the activity definition. Additional specific dates may be added as extensions or be found by consulting Provenances associated with past versions of the resource.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Name of the publisher (organization or individual)
     * The name of the organization or individual that published the activity definition.
     * Usually an organization but may be an individual. The publisher (or steward) of the activity definition is the organization or individual primarily responsible for the maintenance and upkeep of the activity definition. This is not necessarily the same individual or organization that developed and initially authored the content. The publisher is the primary point of contact for questions or issues with the activity definition. This item SHOULD be populated unless the information is available from context.
     */
    publisher?: string;
    /**
     * Extension for publisher
     **/
    _publisher?: Element;
    /**
     * Contact details for the publisher
     * Contact details to assist a user in finding and communicating with the publisher.
     * May be a web site, an email address, a telephone number, etc.
     */
    contact?: ContactDetail[];
    /**
     * Natural language description of the activity definition
     * A free text natural language description of the activity definition from a consumer's perspective.
     * This description can be used to capture details such as why the activity definition was built, comments about misuse, instructions for clinical use and interpretation, literature references, examples from the paper world, etc. It is not a rendering of the activity definition as conveyed in the 'text' field of the resource itself. This item SHOULD be populated unless the information is available from context (e.g. the language of the activity definition is presumed to be the predominant language in the place the activity definition was created).
     */
    description?: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * The context that the content is intended to support
     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate activity definition instances.
     * When multiple useContexts are specified, there is no expectation that all or any of the contexts apply.
     */
    useContext?: UsageContext[];
    /**
     * Intended jurisdiction for activity definition (if applicable)
     * A legal or geographic region in which the activity definition is intended to be used.
     * It may be possible for the activity definition to be used in jurisdictions other than those for which it was originally designed or intended.
     */
    jurisdiction?: CodeableConcept[];
    /**
     * Why this activity definition is defined
     * Explanation of why this activity definition is needed and why it has been designed as it has.
     * This element does not describe the usage of the activity definition. Instead, it provides traceability of ''why'' the resource is either needed or ''why'' it is defined as it is.  This may be used to point to source materials or specifications that drove the structure of this activity definition.
     */
    purpose?: markdown;
    /**
     * Extension for purpose
     **/
    _purpose?: Element;
    /**
     * Describes the clinical usage of the activity definition
     * A detailed description of how the activity definition is used from a clinical perspective.
     */
    usage?: string;
    /**
     * Extension for usage
     **/
    _usage?: Element;
    /**
     * Use and/or publishing restrictions
     * 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.
     */
    copyright?: markdown;
    /**
     * Extension for copyright
     **/
    _copyright?: Element;
    /**
     * When the activity definition was approved by publisher
     * The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
     * The 'date' element may be more recent than the approval date because of minor changes or editorial corrections.
     */
    approvalDate?: date;
    /**
     * Extension for approvalDate
     **/
    _approvalDate?: Element;
    /**
     * When the activity definition was last reviewed
     * The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.
     * If specified, this date follows the original approval date.
     */
    lastReviewDate?: date;
    /**
     * Extension for lastReviewDate
     **/
    _lastReviewDate?: Element;
    /**
     * When the activity definition is expected to be used
     * The period during which the activity definition content was or is planned to be in active use.
     * The effective period for a activity definition  determines when the content is applicable for usage and is independent of publication and review dates. For example, a measure intended to be used for the year 2016 might be published in 2015.
     */
    effectivePeriod?: Period;
    /**
     * E.g. Education, Treatment, Assessment, etc.
     * 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.
     */
    topic?: CodeableConcept[];
    /**
     * Who authored the content
     * An individiual or organization primarily involved in the creation and maintenance of the content.
     */
    author?: ContactDetail[];
    /**
     * Who edited the content
     * An individual or organization primarily responsible for internal coherence of the content.
     */
    editor?: ContactDetail[];
    /**
     * Who reviewed the content
     * An individual or organization primarily responsible for review of some aspect of the content.
     */
    reviewer?: ContactDetail[];
    /**
     * Who endorsed the content
     * An individual or organization responsible for officially endorsing the content for use in some setting.
     */
    endorser?: ContactDetail[];
    /**
     * Additional documentation, citations, etc.
     * Related artifacts such as additional documentation, justification, or bibliographic references.
     * Each related artifact is either an attachment, or a reference to another resource, but not both.
     */
    relatedArtifact?: RelatedArtifact[];
    /**
     * Logic used by the activity definition
     * A reference to a Library resource containing any formal logic used by the activity definition.
     */
    library?: canonical[];
    /**
     * Extension for library
     **/
    _library?: Element[];
    /**
     * Kind of resource
     * A description of the kind of resource the activity definition is representing. For example, a MedicationRequest, a ServiceRequest, or a CommunicationRequest. Typically, but not always, this is a Request resource.
     * May determine what types of extensions are permitted.
     */
    kind?: code;
    /**
     * Extension for kind
     **/
    _kind?: Element;
    /**
     * What profile the resource needs to conform to
     * A profile to which the target of the activity definition is expected to conform.
     */
    profile?: canonical;
    /**
     * Extension for profile
     **/
    _profile?: Element;
    /**
     * Detail type of activity
     * Detailed description of the type of activity; e.g. What lab test, what procedure, what kind of encounter.
     * Tends to be less relevant for activities involving particular products.
     */
    code?: CodeableConcept;
    /**
     * True if the activity should not be performed
     * Set this to true if the definition is to indicate that a particular activity should NOT be performed. If true, this element should be interpreted to reinforce a negative coding. For example NPO as a code with a doNotPerform of true would still indicate to NOT perform the action.
     * This element is not intended to be used to communicate a decision support response to cancel an order in progress. That should be done with the "remove" type of a PlanDefinition or RequestGroup.
     */
    doNotPerform?: boolean;
    /**
     * Extension for doNotPerform
     **/
    _doNotPerform?: Element;
    /**
     * When activity is to occur
     * The period, timing or frequency upon which the described activity is to occur.
     */
    timingTiming?: Timing;
    /**
     * When activity is to occur
     * The period, timing or frequency upon which the described activity is to occur.
     */
    timingDateTime?: dateTime;
    /**
     * Extension for timingDateTime
     **/
    _timingDateTime?: Element;
    /**
     * When activity is to occur
     * The period, timing or frequency upon which the described activity is to occur.
     */
    timingAge?: Age;
    /**
     * When activity is to occur
     * The period, timing or frequency upon which the described activity is to occur.
     */
    timingPeriod?: Period;
    /**
     * When activity is to occur
     * The period, timing or frequency upon which the described activity is to occur.
     */
    timingRange?: Range;
    /**
     * When activity is to occur
     * The period, timing or frequency upon which the described activity is to occur.
     */
    timingDuration?: Duration;
    /**
     * Where it should happen
     * Identifies the facility where the activity will occur; e.g. home, hospital, specific clinic, etc.
     * May reference a specific clinical location or may just identify a type of location.
     */
    location?: Reference;
    /**
     * Who should participate in the action
     * Indicates who should participate in performing the action described.
     */
    participant?: ActivityDefinitionParticipant[];
    /**
     * What's administered/supplied
     * Identifies the food, drug or other product being consumed or supplied in the activity.
     */
    productReference?: Reference;
    /**
     * What's administered/supplied
     * Identifies the food, drug or other product being consumed or supplied in the activity.
     */
    productCodeableConcept?: CodeableConcept;
    /**
     * How much is administered/consumed/supplied
     * Identifies the quantity expected to be consumed at once (per dose, per meal, etc.).
     */
    quantity?: Quantity;
    /**
     * Detailed dosage instructions
     * Provides detailed dosage instructions in the same way that they are described for MedicationRequest resources.
     * If a dosage instruction is used, the definition should not specify timing or quantity.
     */
    dosage?: Dosage[];
    /**
     * What part of body to perform on
     * Indicates the sites on the subject's body where the procedure should be performed (I.e. the target sites).
     * Only used if not implicit in the code found in ServiceRequest.type.
     */
    bodySite?: CodeableConcept[];
    /**
     * What specimens are required to perform this action
     * Defines specimen requirements for the action to be performed, such as required specimens for a lab test.
     */
    specimenRequirement?: Reference[];
    /**
     * What observations are required to perform this action
     * Defines observation requirements for the action to be performed, such as body weight or surface area.
     */
    observationRequirement?: Reference[];
    /**
     * What observations must be produced by this action
     * Defines the observations that are expected to be produced by the action.
     */
    observationResultRequirement?: Reference[];
    /**
     * Transform to apply the template
     * 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.
     * Note that if both a transform and dynamic values are specified, the dynamic values will be applied to the result of the transform.
     */
    transform?: canonical;
    /**
     * Extension for transform
     **/
    _transform?: Element;
    /**
     * Dynamic aspects of the definition
     * 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 request resource that would contain the result.
     * Dynamic values are applied in the order in which they are defined in the ActivityDefinition. Note that if both a transform and dynamic values are specified, the dynamic values will be applied to the result of the transform.
     */
    dynamicValue?: ActivityDefinitionDynamicValue[];
    /**
     * draft | active | retired | unknown
     * The status of this activity definition. Enables tracking the life-cycle of the content.
     * Allows filtering of activity definitions that are appropriate for use versus not.
     */
    status: ActivityDefinitionPublicationStatus;
    /**
     * proposal | plan | directive | order | original-order | reflex-order | filler-order | instance-order | option
     * Indicates the level of authority/intentionality associated with the activity and where the request should fit into the workflow chain.
     */
    intent?: ActivityDefinitionRequestIntent;
    /**
     * routine | urgent | asap | stat
     * Indicates how quickly the activity  should be addressed with respect to other requests.
     */
    priority?: ActivityDefinitionRequestPriority;
}
/**
 * Information on the possible cause of the event
 * Information on the possible cause of the event.
 */
export interface AdverseEventSuspectEntityCausality extends BackboneElement {
    /**
     * Assessment of if the entity caused the event
     * Assessment of if the entity caused the event.
     */
    assessment?: CodeableConcept;
    /**
     * AdverseEvent.suspectEntity.causalityProductRelatedness
     * AdverseEvent.suspectEntity.causalityProductRelatedness.
     */
    productRelatedness?: string;
    /**
     * Extension for productRelatedness
     **/
    _productRelatedness?: Element;
    /**
     * AdverseEvent.suspectEntity.causalityAuthor
     * AdverseEvent.suspectEntity.causalityAuthor.
     */
    author?: Reference;
    /**
     * ProbabilityScale | Bayesian | Checklist
     * ProbabilityScale | Bayesian | Checklist.
     */
    method?: CodeableConcept;
}
/**
 * The suspected agent causing the adverse event
 * Describes the entity that is suspected to have caused the adverse event.
 */
export interface AdverseEventSuspectEntity extends BackboneElement {
    /**
     * Refers to the specific entity that caused the adverse event
     * Identifies the actual instance of what caused the adverse event.  May be a substance, medication, medication administration, medication statement or a device.
     */
    instance: Reference;
    /**
     * Information on the possible cause of the event
     * Information on the possible cause of the event.
     */
    causality?: AdverseEventSuspectEntityCausality[];
}
/**
 * Medical care, research study or other healthcare event causing physical injury
 * 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.
 */
export interface AdverseEvent extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'AdverseEvent';
    /**
     * Business identifier for the event
     * Business identifiers assigned to this adverse event by the performer or other systems which remain constant as the resource is updated and propagates from server to server.
     * This is a business identifier, not a resource identifier (see [discussion](resource.html#identifiers)).  It is best practice for the identifier to only appear on a single resource instance, however business practices may occasionally dictate that multiple resource instances with the same identifier can exist - possibly even with different resource types.  For example, multiple Patient and a Person resource instance might share the same social insurance number.
     */
    identifier?: Identifier;
    /**
     * product-problem | product-quality | product-use-error | wrong-dose | incorrect-prescribing-information | wrong-technique | wrong-route-of-administration | wrong-rate | wrong-duration | wrong-time | expired-drug | medical-device-use-error | problem-different-manufacturer | unsafe-physical-environment
     * The overall type of event, intended for search and filtering purposes.
     */
    category?: CodeableConcept[];
    /**
     * Type of the event itself in relation to the subject
     * This element defines the specific type of event that occurred or that was prevented from occurring.
     */
    event?: CodeableConcept;
    /**
     * Subject impacted by event
     * This subject or group impacted by the event.
     * If AdverseEvent.resultingCondition differs among members of the group, then use Patient as the subject.
     */
    subject: Reference;
    /**
     * Encounter created as part of
     * The Encounter during which AdverseEvent was created or to which the creation of this record is tightly associated.
     * This will typically be the encounter the event occurred within, but some activities may be initiated prior to or after the official completion of an encounter but still be tied to the context of the encounter.  For example, if a medication administration was considered an adverse event because it resulted in a rash, then the encounter when the medication administration was given is the context.  If the patient reports the AdverseEvent during a second encounter, that second encounter is not the context.
     */
    encounter?: Reference;
    /**
     * When the event occurred
     * The date (and perhaps time) when the adverse event occurred.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * When the event was detected
     * Estimated or actual date the AdverseEvent began, in the opinion of the reporter.
     */
    detected?: dateTime;
    /**
     * Extension for detected
     **/
    _detected?: Element;
    /**
     * When the event was recorded
     * The date on which the existence of the AdverseEvent was first recorded.
     * The recordedDate represents the date when this particular AdverseEvent record was created in the system, not the date of the most recent update.  The date of the last record modification can be retrieved from the resource metadata.
     */
    recordedDate?: dateTime;
    /**
     * Extension for recordedDate
     **/
    _recordedDate?: Element;
    /**
     * Effect on the subject due to this event
     * Includes information about the reaction that occurred as a result of exposure to a substance (for example, a drug or a chemical).
     */
    resultingCondition?: Reference[];
    /**
     * Location where adverse event occurred
     * The information about where the adverse event occurred.
     */
    location?: Reference;
    /**
     * Seriousness of the event
     * Assessment whether this event was of real importance.
     */
    seriousness?: CodeableConcept;
    /**
     * mild | moderate | severe
     * Describes the severity of the adverse event, in relation to the subject. Contrast to AdverseEvent.seriousness - a severe rash might not be serious, but a mild heart problem is.
     */
    severity?: CodeableConcept;
    /**
     * resolved | recovering | ongoing | resolvedWithSequelae | fatal | unknown
     * Describes the type of outcome from the adverse event.
     */
    outcome?: CodeableConcept;
    /**
     * Who recorded the adverse event
     * Information on who recorded the adverse event.  May be the patient or a practitioner.
     */
    recorder?: Reference;
    /**
     * Who  was involved in the adverse event or the potential adverse event
     * Parties that may or should contribute or have contributed information to the adverse event, which can consist of one or more activities.  Such information includes information leading to the decision to perform the activity and how to perform the activity (e.g. consultant), information that the activity itself seeks to reveal (e.g. informant of clinical history), or information about what activity was performed (e.g. informant witness).
     */
    contributor?: Reference[];
    /**
     * The suspected agent causing the adverse event
     * Describes the entity that is suspected to have caused the adverse event.
     */
    suspectEntity?: AdverseEventSuspectEntity[];
    /**
     * AdverseEvent.subjectMedicalHistory
     * AdverseEvent.subjectMedicalHistory.
     */
    subjectMedicalHistory?: Reference[];
    /**
     * AdverseEvent.referenceDocument
     * AdverseEvent.referenceDocument.
     */
    referenceDocument?: Reference[];
    /**
     * AdverseEvent.study
     * AdverseEvent.study.
     */
    study?: Reference[];
    /**
     * actual | potential
     * Whether the event actually happened, or just had the potential to. Note that this is independent of whether anyone was affected or harmed or how severely.
     */
    actuality: AdverseEventActuality;
}
/**
 * Adverse Reaction Events linked to exposure to substance
 * Details about each adverse reaction event linked to exposure to the identified substance.
 */
export interface AllergyIntoleranceReaction extends BackboneElement {
    /**
     * Specific substance or pharmaceutical product considered to be responsible for event
     * 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'.  If a receiving system is unable to confirm that AllergyIntolerance.reaction.substance falls within the semantic scope of AllergyIntolerance.code, then the receiving system should ignore AllergyIntolerance.reaction.substance.
     * Coding of the specific substance (or pharmaceutical product) with a terminology capable of triggering decision support should be used wherever possible.  The 'code' element allows for the use of a specific substance or pharmaceutical product, or a group or class of substances. In the case of an allergy or intolerance to a class of substances, (for example, "penicillins"), the 'reaction.substance' element could be used to code the specific substance that was identified as having caused the reaction (for example, "amoxycillin"). Duplication of the value in the 'code' and 'reaction.substance' elements is acceptable when a specific substance has been recorded in 'code'.
     */
    substance?: CodeableConcept;
    /**
     * Clinical symptoms/signs associated with the Event
     * Clinical symptoms and/or signs that are observed or associated with the adverse reaction event.
     * Manifestation can be expressed as a single word, phrase or brief description. For example: nausea, rash or no reaction. It is preferable that manifestation should be coded with a terminology, where possible. The values entered here may be used to display on an application screen as part of a list of adverse reactions, as recommended in the UK NHS CUI guidelines.  Terminologies commonly used include, but are not limited to, SNOMED CT or ICD10.
     */
    manifestation: CodeableConcept[];
    /**
     * Description of the event as a whole
     * Text description about the reaction as a whole, including details of the manifestation if required.
     * Use the description to provide any details of a particular event of the occurred reaction such as circumstances, reaction specifics, what happened before/after. Information, related to the event, but not describing a particular care should be captured in the comment field. For example: at the age of four, the patient was given penicillin for strep throat and subsequently developed severe hives.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Date(/time) when manifestations showed
     * Record of the date and/or time of the onset of the Reaction.
     */
    onset?: dateTime;
    /**
     * Extension for onset
     **/
    _onset?: Element;
    /**
     * How the subject was exposed to the substance
     * Identification of the route by which the subject was exposed to the substance.
     * Coding of the route of exposure with a terminology should be used wherever possible.
     */
    exposureRoute?: CodeableConcept;
    /**
     * Text about event not captured in other fields
     * Additional text about the adverse reaction event not captured in other fields.
     * Use this field to record information indirectly related to a particular event and not captured in the description. For example: Clinical records are no longer available, recorded based on information provided to the patient by her mother and her mother is deceased.
     */
    note?: Annotation[];
    /**
     * mild | moderate | severe (of event as a whole)
     * Clinical assessment of the severity of the reaction event as a whole, potentially considering multiple different manifestations.
     * It is acknowledged that this assessment is very subjective. There may be some specific practice domains where objective scales have been applied. Objective scales can be included in this model as extensions.
     */
    severity?: AllergyIntoleranceSeverity;
}
/**
 * Allergy or Intolerance (generally: Risk of adverse reaction to a substance)
 * Risk of harmful or undesirable, physiological response which is unique to an individual and associated with exposure to a substance.
 * Substances include, but are not limited to: a therapeutic substance administered correctly at an appropriate dosage for the individual; food; material derived from plants or animals; or venom from insect stings.
 */
export interface AllergyIntolerance extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'AllergyIntolerance';
    /**
     * External ids for this item
     * Business identifiers assigned to this AllergyIntolerance by the performer or other systems which remain constant as the resource is updated and propagates from server to server.
     * This is a business identifier, not a resource identifier (see [discussion](resource.html#identifiers)).  It is best practice for the identifier to only appear on a single resource instance, however business practices may occasionally dictate that multiple resource instances with the same identifier can exist - possibly even with different resource types.  For example, multiple Patient and a Person resource instance might share the same social insurance number.
     */
    identifier?: Identifier[];
    /**
     * active | inactive | resolved
     * The clinical status of the allergy or intolerance.
     * Refer to [discussion](extensibility.html#Special-Case) if clincalStatus is missing data.
The data type is CodeableConcept because clinicalStatus has some clinical judgment involved, such that there might need to be more specificity than the required FHIR value set allows. For example, a SNOMED coding might allow for additional specificity.
     */
    clinicalStatus?: CodeableConcept;
    /**
     * unconfirmed | confirmed | refuted | entered-in-error
     * Assertion about certainty associated with the propensity, or potential risk, of a reaction to the identified substance (including pharmaceutical product).
     * The data type is CodeableConcept because verificationStatus has some clinical judgment involved, such that there might need to be more specificity than the required FHIR value set allows. For example, a SNOMED coding might allow for additional specificity.
     */
    verificationStatus?: CodeableConcept;
    /**
     * Code that identifies the allergy or intolerance
     * 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").  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'.  If a receiving system is unable to confirm that AllergyIntolerance.reaction.substance falls within the semantic scope of AllergyIntolerance.code, then the receiving system should ignore AllergyIntolerance.reaction.substance.
     * It is strongly recommended that this element be populated using a terminology, where possible. For example, some terminologies used include RxNorm, SNOMED CT, DM+D, NDFRT, ICD-9, IDC-10, UNII, and ATC. Plain text should only be used if there is no appropriate terminology available. Additional details can be specified in the text.

When a substance or product code is specified for the 'code' element, the "default" semantic context is that this is a positive statement of an allergy or intolerance (depending on the value of the 'type' element, if present) condition to the specified substance/product.  In the corresponding SNOMED CT allergy model, the specified substance/product is the target (destination) of the "Causative agent" relationship.

The 'substanceExposureRisk' extension is available as a structured and more flexible alternative to the 'code' element for making positive or negative allergy or intolerance statements.  This extension provides the capability to make "no known allergy" (or "no risk of adverse reaction") statements regarding any coded substance/product (including cases when a pre-coordinated "no allergy to x" concept for that substance/product does not exist).  If the 'substanceExposureRisk' extension is present, the AllergyIntolerance.code element SHALL be omitted.
     */
    code?: CodeableConcept;
    /**
     * Who the sensitivity is for
     * The patient who has the allergy or intolerance.
     */
    patient: Reference;
    /**
     * Encounter when the allergy or intolerance was asserted
     * The encounter when the allergy or intolerance was asserted.
     */
    encounter?: Reference;
    /**
     * When allergy or intolerance was identified
     * Estimated or actual date,  date-time, or age when allergy or intolerance was identified.
     */
    onsetDateTime?: dateTime;
    /**
     * Extension for onsetDateTime
     **/
    _onsetDateTime?: Element;
    /**
     * When allergy or intolerance was identified
     * Estimated or actual date,  date-time, or age when allergy or intolerance was identified.
     */
    onsetAge?: Age;
    /**
     * When allergy or intolerance was identified
     * Estimated or actual date,  date-time, or age when allergy or intolerance was identified.
     */
    onsetPeriod?: Period;
    /**
     * When allergy or intolerance was identified
     * Estimated or actual date,  date-time, or age when allergy or intolerance was identified.
     */
    onsetRange?: Range;
    /**
     * When allergy or intolerance was identified
     * Estimated or actual date,  date-time, or age when allergy or intolerance was identified.
     */
    onsetString?: string;
    /**
     * Extension for onsetString
     **/
    _onsetString?: Element;
    /**
     * Date first version of the resource instance was recorded
     * The recordedDate represents when this particular AllergyIntolerance record was created in the system, which is often a system-generated date.
     */
    recordedDate?: dateTime;
    /**
     * Extension for recordedDate
     **/
    _recordedDate?: Element;
    /**
     * Who recorded the sensitivity
     * Individual who recorded the record and takes responsibility for its content.
     */
    recorder?: Reference;
    /**
     * Source of the information about the allergy
     * The source of the information about the allergy that is recorded.
     * The recorder takes responsibility for the content, but can reference the source from where they got it.
     */
    asserter?: Reference;
    /**
     * Date(/time) of last known occurrence of a reaction
     * Represents the date and/or time of the last known occurrence of a reaction event.
     * This date may be replicated by one of the Onset of Reaction dates. Where a textual representation of the date of last occurrence is required e.g. 'In Childhood, '10 years ago' the Comment element should be used.
     */
    lastOccurrence?: dateTime;
    /**
     * Extension for lastOccurrence
     **/
    _lastOccurrence?: Element;
    /**
     * Additional text not captured in other fields
     * Additional narrative about the propensity for the Adverse Reaction, not captured in other fields.
     * For example: including reason for flagging a seriousness of 'High Risk'; and instructions related to future exposure or administration of the substance, such as administration within an Intensive Care Unit or under corticosteroid cover. The notes should be related to an allergy or intolerance as a condition in general and not related to any particular episode of it. For episode notes and descriptions, use AllergyIntolerance.event.description and  AllergyIntolerance.event.notes.
     */
    note?: Annotation[];
    /**
     * Adverse Reaction Events linked to exposure to substance
     * Details about each adverse reaction event linked to exposure to the identified substance.
     */
    reaction?: AllergyIntoleranceReaction[];
    /**
     * allergy | intolerance - Underlying mechanism (if known)
     * Identification of the underlying physiological mechanism for the reaction risk.
     * Allergic (typically immune-mediated) reactions have been traditionally regarded as an indicator for potential escalation to significant future risk. Contemporary knowledge suggests that some reactions previously thought to be immune-mediated are, in fact, non-immune, but in some cases can still pose a life threatening risk. It is acknowledged that many clinicians might not be in a position to distinguish the mechanism of a particular reaction. Often the term "allergy" is used rather generically and may overlap with the use of "intolerance" - in practice the boundaries between these two concepts might not be well-defined or understood. This data element is included nevertheless, because many legacy systems have captured this attribute. Immunologic testing may provide supporting evidence for the basis of the reaction and the causative substance, but no tests are 100% sensitive or specific for sensitivity to a particular substance. If, as is commonly the case, it is unclear whether the reaction is due to an allergy or an intolerance, then the type element should be omitted from the resource.
     */
    type?: AllergyIntoleranceType;
    /**
     * food | medication | environment | biologic
     * Category of the identified substance.
     * This data element has been included because it is currently being captured in some clinical systems. This data can be derived from the substance where coding systems are used, and is effectively redundant in that situation.  When searching on category, consider the implications of AllergyIntolerance resources without a category.  For example, when searching on category = medication, medication allergies that don't have a category valued will not be returned.  Refer to [search](search.html) for more information on how to search category with a :missing modifier to get allergies that don't have a category.  Additionally, category should be used with caution because category can be subjective based on the sender.
     */
    category?: AllergyIntoleranceCategory[];
    /**
     * low | high | unable-to-assess
     * Estimate of the potential clinical harm, or seriousness, of the reaction to the identified substance.
     * The default criticality value for any propensity to an adverse reaction should be 'Low Risk', indicating at the very least a relative contraindication to deliberate or voluntary exposure to the substance. 'High Risk' is flagged if the clinician has identified a propensity for a more serious or potentially life-threatening reaction, such as anaphylaxis, and implies an absolute contraindication to deliberate or voluntary exposure to the substance. If this element is missing, the criticality is unknown (though it may be known elsewhere).  Systems that capture a severity at the condition level are actually representing the concept of criticality whereas the severity documented at the reaction level is representing the true reaction severity.  Existing systems that are capturing both condition criticality and reaction severity may use the term "severity" to represent both.  Criticality is the worst it could be in the future (i.e. situation-agnostic) whereas severity is situation-dependent.
     */
    criticality?: AllergyIntoleranceCriticality;
}
/**
 * Participants involved in appointment
 * List of participants involved in the appointment.
 */
export interface AppointmentParticipant extends BackboneElement {
    /**
     * Role of participant in the appointment
     * Role of participant in the appointment.
     * The role of the participant can be used to declare what the actor will be doing in the scope of this appointment.

If the actor is not specified, then it is expected that the actor will be filled in at a later stage of planning.

This value SHALL be the same when creating an AppointmentResponse so that they can be matched, and subsequently update the Appointment.
     */
    type?: CodeableConcept[];
    /**
     * Person, Location/HealthcareService or Device
     * A Person, Location/HealthcareService or Device that is participating in the appointment.
     */
    actor?: Reference;
    /**
     * Participation period of the actor
     * Participation period of the actor.
     */
    period?: Period;
    /**
     * required | optional | information-only
     * Whether this participant is required to be present at the meeting. This covers a use-case where two doctors need to meet to discuss the results for a specific patient, and the patient is not required to be present.
     */
    required?: AppointmentParticipantRequired;
    /**
     * accepted | declined | tentative | needs-action
     * Participation status of the actor.
     */
    status: AppointmentParticipationStatus;
}
/**
 * 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)
 * 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).
 */
export interface Appointment extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Appointment';
    /**
     * External Ids for this item
     * 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).
     */
    identifier?: Identifier[];
    /**
     * The coded reason for the appointment being cancelled
     * The coded reason for the appointment being cancelled. This is often used in reporting/billing/futher processing to determine if further actions are required, or specific fees apply.
     */
    cancelationReason?: CodeableConcept;
    /**
     * A broad categorization of the service that is to be performed during this appointment
     * A broad categorization of the service that is to be performed during this appointment.
     */
    serviceCategory?: CodeableConcept[];
    /**
     * The specific service that is to be performed during this appointment
     * The specific service that is to be performed during this appointment.
     * For a provider to provider appointment the code "FOLLOWUP" may be appropriate, as this is expected to be discussing some patient that was seen in the past.
     */
    serviceType?: CodeableConcept[];
    /**
     * The specialty of a practitioner that would be required to perform the service requested in this appointment
     * The specialty of a practitioner that would be required to perform the service requested in this appointment.
     */
    specialty?: CodeableConcept[];
    /**
     * The style of appointment or patient that has been booked in the slot (not service type)
     * The style of appointment or patient that has been booked in the slot (not service type).
     */
    appointmentType?: CodeableConcept;
    /**
     * Coded reason this appointment is scheduled
     * The coded reason that this appointment is being scheduled. This is more clinical than administrative.
     */
    reasonCode?: CodeableConcept[];
    /**
     * Reason the appointment is to take place (resource)
     * 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.
     */
    reasonReference?: Reference[];
    /**
     * Used to make informed decisions if needing to re-prioritize
     * 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).
     * Seeking implementer feedback on this property and how interoperable it is.

Using an extension to record a CodeableConcept for named values may be tested at a future connectathon.
     */
    priority?: unsignedInt;
    /**
     * Extension for priority
     **/
    _priority?: Element;
    /**
     * Shown on a subject line in a meeting request, or appointment list
     * 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.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Additional information to support the appointment
     * Additional information to support the appointment provided when making the appointment.
     */
    supportingInformation?: Reference[];
    /**
     * When appointment is to take place
     * Date/Time that the appointment is to take place.
     */
    start?: instant;
    /**
     * Extension for start
     **/
    _start?: Element;
    /**
     * When appointment is to conclude
     * Date/Time that the appointment is to conclude.
     */
    end?: instant;
    /**
     * Extension for end
     **/
    _end?: Element;
    /**
     * Can be less than start/end (e.g. estimate)
     * Number of minutes that the appointment is to take. This can be less than the duration between the start and end times.  For example, where the actual time of appointment is only an estimate or if a 30 minute appointment is being requested, but any time would work.  Also, if there is, for example, a planned 15 minute break in the middle of a long appointment, the duration may be 15 minutes less than the difference between the start and end.
     */
    minutesDuration?: positiveInt;
    /**
     * Extension for minutesDuration
     **/
    _minutesDuration?: Element;
    /**
     * The slots that this appointment is filling
     * The slots from the participants' schedules that will be filled by the appointment.
     */
    slot?: Reference[];
    /**
     * The date that this appointment was initially created
     * 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.
     * This property is required for many use cases where the age of an appointment is considered in processing workflows for scheduling and billing of appointments.
     */
    created?: dateTime;
    /**
     * Extension for created
     **/
    _created?: Element;
    /**
     * Additional comments
     * Additional comments about the appointment.
     * Additional text to aid in facilitating the appointment. For instance, a comment might be, "patient should proceed immediately to infusion room upon arrival"

Where this is a planned appointment and the start/end dates are not set then this field can be used to provide additional guidance on the details of the appointment request, including any restrictions on when to book it.
     */
    comment?: string;
    /**
     * Extension for comment
     **/
    _comment?: Element;
    /**
     * Detailed information and instructions for the patient
     * While Appointment.comment contains information for internal use, Appointment.patientInstructions is used to capture patient facing information about the Appointment (e.g. please bring your referral or fast from 8pm night before).
     */
    patientInstruction?: string;
    /**
     * Extension for patientInstruction
     **/
    _patientInstruction?: Element;
    /**
     * The service request this appointment is allocated to assess
     * The service request this appointment is allocated to assess (e.g. incoming referral or procedure request).
     */
    basedOn?: Reference[];
    /**
     * Participants involved in appointment
     * List of participants involved in the appointment.
     */
    participant: AppointmentParticipant[];
    /**
     * Potential date/time interval(s) requested to allocate the appointment within
     * A set of date ranges (potentially including times) that the appointment is preferred to be scheduled within.

The duration (usually in minutes) could also be provided to indicate the length of the appointment to fill and populate the start/end times for the actual allocated time. However, in other situations the duration may be calculated by the scheduling system.
     * This does not introduce a capacity for recurring appointments.
     */
    requestedPeriod?: Period[];
    /**
     * proposed | pending | booked | arrived | fulfilled | cancelled | noshow | entered-in-error | checked-in | waitlist
     * 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.
     * If the Appointment's status is "cancelled" then all participants are expected to have their calendars released for the appointment period, and as such any Slots that were marked as BUSY can be re-set to FREE.

This element is labeled as a modifier because the status contains the code entered-in-error that mark the Appointment as not currently valid.
     */
    status: AppointmentStatus;
}
/**
 * A reply to an appointment request for a patient and/or practitioner(s), such as a confirmation or rejection
 * A reply to an appointment request for a patient and/or practitioner(s), such as a confirmation or rejection.
 */
export interface AppointmentResponse extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'AppointmentResponse';
    /**
     * External Ids for this item
     * 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.
     */
    identifier?: Identifier[];
    /**
     * Appointment this response relates to
     * Appointment that this response is replying to.
     */
    appointment: Reference;
    /**
     * Time from appointment, or requested new start time
     * Date/Time that the appointment is to take place, or requested new start time.
     * 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 start time.
     */
    start?: instant;
    /**
     * Extension for start
     **/
    _start?: Element;
    /**
     * Time from appointment, or requested new end time
     * 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.
     */
    end?: instant;
    /**
     * Extension for end
     **/
    _end?: Element;
    /**
     * Role of participant in the appointment
     * Role of participant in the appointment.
     * The role of the participant can be used to declare what the actor will be doing in the scope of the referenced appointment.

If the actor is not specified, then it is expected that the actor will be filled in at a later stage of planning.

This value SHALL be the same as specified on the referenced Appointment so that they can be matched, and subsequently updated.
     */
    participantType?: CodeableConcept[];
    /**
     * Person, Location, HealthcareService, or Device
     * A Person, Location, HealthcareService, or Device that is participating in the appointment.
     */
    actor?: Reference;
    /**
     * Additional comments
     * Additional comments about the appointment.
     * This comment is particularly important when the responder is declining, tentatively accepting or requesting another time to indicate the reasons why.
     */
    comment?: string;
    /**
     * Extension for comment
     **/
    _comment?: Element;
    /**
     * accepted | declined | tentative | needs-action
     * 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.
     * This element is labeled as a modifier because the status contains the code entered-in-error that marks the participant as not currently valid.
     */
    participantStatus: AppointmentResponseParticipantStatus;
}
/**
 * Logical network location for application activity
 * Logical network location for application activity, if the activity has a network location.
 */
export interface AuditEventAgentNetwork extends BackboneElement {
    /**
     * Identifier for the network access point of the user device
     * An identifier for the network access point of the user device for the audit event.
     * This could be a device id, IP address or some other identifier associated with a device.
     */
    address?: string;
    /**
     * Extension for address
     **/
    _address?: Element;
    /**
     * The type of network access point
     * An identifier for the type of network access point that originated the audit event.
     */
    type?: code;
    /**
     * Extension for type
     **/
    _type?: Element;
}
/**
 * Actor involved in the event
 * An actor taking an active role in the event or activity that is logged.
 * Several agents may be associated (i.e. have some responsibility for an activity) with an event or activity.

For example, an activity may be initiated by one user for other users or involve more than one user. However, only one user may be the initiator/requestor for the activity.
 */
export interface AuditEventAgent extends BackboneElement {
    /**
     * How agent participated
     * Specification of the participation type the user plays when performing the event.
     */
    type?: CodeableConcept;
    /**
     * Agent role in the event
     * 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.
     * Should be roles relevant to the event. Should  not be an exhaustive list of roles.
     */
    role?: CodeableConcept[];
    /**
     * Identifier of who
     * Reference to who this agent is that was involved in the event.
     * Where a User ID is available it will go into who.identifier.
     */
    who?: Reference;
    /**
     * Alternative User identity
     * 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.
     */
    altId?: string;
    /**
     * Extension for altId
     **/
    _altId?: Element;
    /**
     * Human friendly name for the agent
     * Human-meaningful name for the agent.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Whether user is initiator
     * Indicator that the user is or is not the requestor, or initiator, for the event being audited.
     * There can only be one initiator. If the initiator is not clear, then do not choose any one agent as the initiator.
     */
    requestor: boolean;
    /**
     * Extension for requestor
     **/
    _requestor?: Element;
    /**
     * Where
     * Where the event occurred.
     */
    location?: Reference;
    /**
     * Policy that authorized event
     * 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.
     * For example: Where an OAuth token authorizes, the unique identifier from the OAuth token is placed into the policy element Where a policy engine (e.g. XACML) holds policy logic, the unique policy identifier is placed into the policy element.
     */
    policy?: uri[];
    /**
     * Extension for policy
     **/
    _policy?: Element[];
    /**
     * Type of media
     * Type of media involved. Used when the event is about exporting/importing onto media.
     */
    media?: Coding;
    /**
     * Logical network location for application activity
     * Logical network location for application activity, if the activity has a network location.
     */
    network?: AuditEventAgentNetwork;
    /**
     * Reason given for this user
     * The reason (purpose of use), specific to this agent, that was used during the event being recorded.
     * Use AuditEvent.agent.purposeOfUse when you know that is specific to the agent, otherwise use AuditEvent.purposeOfEvent. For example, during a machine-to-machine transfer it might not be obvious to the audit system who caused the event, but it does know why.
     */
    purposeOfUse?: CodeableConcept[];
}
/**
 * Audit Event Reporter
 * The system that is reporting the event.
 * Since multi-tier, distributed, or composite applications make source identification ambiguous, this collection of fields may repeat for each application or process actively involved in the event. For example, multiple value-sets can identify participating web servers, application processes, and database server threads in an n-tier distributed application. Passive event participants (e.g. low-level network transports) need not be identified.
 */
export interface AuditEventSource extends BackboneElement {
    /**
     * Logical source location within the enterprise
     * Logical source location within the healthcare enterprise network.  For example, a hospital or other provider location within a multi-entity provider group.
     */
    site?: string;
    /**
     * Extension for site
     **/
    _site?: Element;
    /**
     * The identity of source detecting the event
     * Identifier of the source where the event was detected.
     */
    observer: Reference;
    /**
     * The type of source where event originated
     * Code specifying the type of source where event originated.
     */
    type?: Coding[];
}
/**
 * Additional Information about the entity
 * Tagged value pairs for conveying additional information about the entity.
 */
export interface AuditEventEntityDetail extends BackboneElement {
    /**
     * Name of the property
     * The type of extra detail provided in the value.
     */
    type: string;
    /**
     * Extension for type
     **/
    _type?: Element;
    /**
     * Property value
     * The  value of the extra detail.
     * The value can be string when known to be a string, else base64 encoding should be used to protect binary or undefined content.  The meaning and secondary-encoding of the content of base64 encoded blob is specific to the AuditEvent.type, AuditEvent.subtype, AuditEvent.entity.type, and AuditEvent.entity.role.  The base64 is a general-use and safe container for event specific data blobs regardless of the encoding used by the transaction being recorded.  An AuditEvent consuming application must understand the event it is consuming and the formats used by the event. For example if auditing an Oracle network database access, the Oracle formats must be understood as they will be simply encoded in the base64binary blob.
     */
    valueString?: string;
    /**
     * Extension for valueString
     **/
    _valueString?: Element;
    /**
     * Property value
     * The  value of the extra detail.
     * The value can be string when known to be a string, else base64 encoding should be used to protect binary or undefined content.  The meaning and secondary-encoding of the content of base64 encoded blob is specific to the AuditEvent.type, AuditEvent.subtype, AuditEvent.entity.type, and AuditEvent.entity.role.  The base64 is a general-use and safe container for event specific data blobs regardless of the encoding used by the transaction being recorded.  An AuditEvent consuming application must understand the event it is consuming and the formats used by the event. For example if auditing an Oracle network database access, the Oracle formats must be understood as they will be simply encoded in the base64binary blob.
     */
    valueBase64Binary?: base64Binary;
    /**
     * Extension for valueBase64Binary
     **/
    _valueBase64Binary?: Element;
}
/**
 * Data or objects used
 * Specific instances of data or objects that have been accessed.
 * Required unless the values for event identification, agent identification, and audit source identification are sufficient to document the entire auditable event. Because events may have more than one entity, this group can be a repeating set of values.
 */
export interface AuditEventEntity extends BackboneElement {
    /**
     * Specific instance of resource
     * Identifies a specific instance of the entity. The reference should be version specific.
     */
    what?: Reference;
    /**
     * Type of entity involved
     * The type of the object that was involved in this audit event.
     * This value is distinct from the user's role or any user relationship to the entity.
     */
    type?: Coding;
    /**
     * What role the entity played
     * Code representing the role the entity played in the event being audited.
     */
    role?: Coding;
    /**
     * Life-cycle stage for the entity
     * Identifier for the data life-cycle stage for the entity.
     * This can be used to provide an audit trail for data, over time, as it passes through the system.
     */
    lifecycle?: Coding;
    /**
     * Security labels on the entity
     * Security labels for the identified entity.
     * Copied from entity meta security tags.
     */
    securityLabel?: Coding[];
    /**
     * Descriptor for entity
     * A name of the entity in the audit event.
     * This field may be used in a query/report to identify audit events for a specific person.  For example, where multiple synonymous entity identifiers (patient number, medical record number, encounter number, etc.) have been used.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Descriptive text
     * Text that describes the entity in more detail.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Query parameters
     * The query parameters for a query-type entities.
     * The meaning and secondary-encoding of the content of base64 encoded blob is specific to the AuditEvent.type, AuditEvent.subtype, AuditEvent.entity.type, and AuditEvent.entity.role.  The base64 is a general-use and safe container for event specific data blobs regardless of the encoding used by the transaction being recorded.  An AuditEvent consuming application must understand the event it is consuming and the formats used by the event. For example, if auditing an Oracle network database access, the Oracle formats must be understood as they will be simply encoded in the base64binary blob.
     */
    query?: base64Binary;
    /**
     * Extension for query
     **/
    _query?: Element;
    /**
     * Additional Information about the entity
     * Tagged value pairs for conveying additional information about the entity.
     */
    detail?: AuditEventEntityDetail[];
}
/**
 * Event record kept for security purposes
 * 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.
 * Based on IHE-ATNA.
 */
export interface AuditEvent extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'AuditEvent';
    /**
     * Type/identifier of event
     * 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.
     */
    type: Coding;
    /**
     * More specific type/id for the event
     * Identifier for the category of event.
     */
    subtype?: Coding[];
    /**
     * Type of action performed during the event
     * Indicator for type of action performed during the event that generated the audit.
     */
    action?: code;
    /**
     * Extension for action
     **/
    _action?: Element;
    /**
     * When the activity occurred
     * The period during which the activity occurred.
     * The period can be a little arbitrary; where possible, the time should correspond to human assessment of the activity time.
     */
    period?: Period;
    /**
     * Time when the event was recorded
     * The time when the event was recorded.
     * In a distributed system, some sort of common time base (e.g. an NTP [RFC1305] server) is a good implementation tactic.
     */
    recorded: instant;
    /**
     * Extension for recorded
     **/
    _recorded?: Element;
    /**
     * Whether the event succeeded or failed
     * Indicates whether the event succeeded or failed.
     * In some cases a "success" may be partial, for example, an incomplete or interrupted transfer of a radiological study. For the purpose of establishing accountability, these distinctions are not relevant.
     */
    outcome?: code;
    /**
     * Extension for outcome
     **/
    _outcome?: Element;
    /**
     * Description of the event outcome
     * A free text description of the outcome of the event.
     */
    outcomeDesc?: string;
    /**
     * Extension for outcomeDesc
     **/
    _outcomeDesc?: Element;
    /**
     * The purposeOfUse of the event
     * The purposeOfUse (reason) that was used during the event being recorded.
     * Use AuditEvent.agent.purposeOfUse when you know that it is specific to the agent, otherwise use AuditEvent.purposeOfEvent. For example, during a machine-to-machine transfer it might not be obvious to the audit system who caused the event, but it does know why.
     */
    purposeOfEvent?: CodeableConcept[];
    /**
     * Actor involved in the event
     * An actor taking an active role in the event or activity that is logged.
     * Several agents may be associated (i.e. have some responsibility for an activity) with an event or activity.

For example, an activity may be initiated by one user for other users or involve more than one user. However, only one user may be the initiator/requestor for the activity.
     */
    agent: AuditEventAgent[];
    /**
     * Audit Event Reporter
     * The system that is reporting the event.
     * Since multi-tier, distributed, or composite applications make source identification ambiguous, this collection of fields may repeat for each application or process actively involved in the event. For example, multiple value-sets can identify participating web servers, application processes, and database server threads in an n-tier distributed application. Passive event participants (e.g. low-level network transports) need not be identified.
     */
    source: AuditEventSource;
    /**
     * Data or objects used
     * Specific instances of data or objects that have been accessed.
     * Required unless the values for event identification, agent identification, and audit source identification are sufficient to document the entire auditable event. Because events may have more than one entity, this group can be a repeating set of values.
     */
    entity?: AuditEventEntity[];
}
/**
 * Resource for non-supported content
 * 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.
 */
export interface Basic extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Basic';
    /**
     * Business identifier
     * Identifier assigned to the resource for business purposes, outside the context of FHIR.
     */
    identifier?: Identifier[];
    /**
     * Kind of Resource
     * Identifies the 'type' of resource - equivalent to the resource name for other resources.
     * Because resource references will only be able to indicate 'Basic', the type of reference will need to be specified in a Profile identified as part of the resource.  Refer to the resource notes section for information on appropriate terminologies for this code.

This element is labeled as a modifier because it defines the meaning of the resource and cannot be ignored.
     */
    code: CodeableConcept;
    /**
     * Identifies the focus of this resource
     * Identifies the patient, practitioner, device or any other resource that is the "focus" of this resource.
     * Optional as not all potential resources will have subjects.  Resources associated with multiple subjects can handle this via extension.
     */
    subject?: Reference;
    /**
     * When created
     * Identifies when the resource was first created.
     */
    created?: date;
    /**
     * Extension for created
     **/
    _created?: Element;
    /**
     * Who created
     * Indicates who was responsible for creating the resource instance.
     */
    author?: Reference;
}
/**
 * Pure binary content defined by a format other than FHIR
 * A resource that represents the data of a single raw artifact as digital content accessible in its native format.  A Binary resource can contain any content, whether text, image, pdf, zip archive, etc.
 * Typically, Binary resources are used for handling content such as:

* CDA Documents (i.e. with XDS)
* PDF Documents
* Images (the Media resource is preferred for handling images, but not possible when the content is already binary - e.g. XDS).
 */
export interface Binary extends Resource {
    /**
     * MimeType of the binary content
     * MimeType of the binary content represented as a standard MimeType (BCP 13).
     */
    contentType: code;
    /**
     * Extension for contentType
     **/
    _contentType?: Element;
    /**
     * Identifies another resource to use as proxy when enforcing access control
     * This element identifies another resource that can be used as a proxy of the security sensitivity to use when deciding and enforcing access control rules for the Binary resource. Given that the Binary resource contains very few elements that can be used to determine the sensitivity of the data and relationships to individuals, the referenced resource stands in as a proxy equivalent for this purpose. This referenced resource may be related to the Binary (e.g. Media, DocumentReference), or may be some non-related Resource purely as a security proxy. E.g. to identify that the binary resource relates to a patient, and access should only be granted to applications that have access to the patient.
     * Very often, a server will also know of a resource that references the binary, and can automatically apply the appropriate access rules based on that reference. However, there are some circumstances where this is not appropriate, e.g. the binary is uploaded directly to the server without any linking resource, the binary is referred to from multiple different resources, and/or the binary is content such as an application logo that has less protection than any of the resources that reference it.
     */
    securityContext?: Reference;
    /**
     * The actual content
     * The actual content, base64 encoded.
     * If the content type is itself base64 encoding, then this will be base64 encoded twice - what is created by un-base64ing the content must be the specified content type.
     */
    data?: base64Binary;
    /**
     * Extension for data
     **/
    _data?: Element;
}
/**
 * How this product was collected
 * How this product was collected.
 */
export interface BiologicallyDerivedProductCollection extends BackboneElement {
    /**
     * Individual performing collection
     * Healthcare professional who is performing the collection.
     */
    collector?: Reference;
    /**
     * Who is product from
     * The patient or entity, such as a hospital or vendor in the case of a processed/manipulated/manufactured product, providing the product.
     */
    source?: Reference;
    /**
     * Time of product collection
     * Time of product collection.
     */
    collectedDateTime?: dateTime;
    /**
     * Extension for collectedDateTime
     **/
    _collectedDateTime?: Element;
    /**
     * Time of product collection
     * Time of product collection.
     */
    collectedPeriod?: Period;
}
/**
 * Any processing of the product during collection
 * Any processing of the product during collection that does not change the fundamental nature of the product. For example adding anti-coagulants during the collection of Peripheral Blood Stem Cells.
 */
export interface BiologicallyDerivedProductProcessing extends BackboneElement {
    /**
     * Description of of processing
     * Description of of processing.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Procesing code
     * Procesing code.
     */
    procedure?: CodeableConcept;
    /**
     * Substance added during processing
     * Substance added during processing.
     */
    additive?: Reference;
    /**
     * Time of processing
     * Time of processing.
     */
    timeDateTime?: dateTime;
    /**
     * Extension for timeDateTime
     **/
    _timeDateTime?: Element;
    /**
     * Time of processing
     * Time of processing.
     */
    timePeriod?: Period;
}
/**
 * Any manipulation of product post-collection
 * Any manipulation of product post-collection that is intended to alter the product.  For example a buffy-coat enrichment or CD8 reduction of Peripheral Blood Stem Cells to make it more suitable for infusion.
 */
export interface BiologicallyDerivedProductManipulation extends BackboneElement {
    /**
     * Description of manipulation
     * Description of manipulation.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Time of manipulation
     * Time of manipulation.
     */
    timeDateTime?: dateTime;
    /**
     * Extension for timeDateTime
     **/
    _timeDateTime?: Element;
    /**
     * Time of manipulation
     * Time of manipulation.
     */
    timePeriod?: Period;
}
/**
 * Product storage
 * Product storage.
 */
export interface BiologicallyDerivedProductStorage extends BackboneElement {
    /**
     * Description of storage
     * Description of storage.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Storage temperature
     * Storage temperature.
     */
    temperature?: decimal;
    /**
     * Extension for temperature
     **/
    _temperature?: Element;
    /**
     * Storage timeperiod
     * Storage timeperiod.
     */
    duration?: Period;
    /**
     * farenheit | celsius | kelvin
     * Temperature scale used.
     */
    scale?: BiologicallyDerivedProductStorageScale;
}
/**
 * A material substance originating from a biological entity
 * A material substance originating from a biological entity intended to be transplanted or infused
into another (possibly the same) biological entity.
 * Substances include, but are not limited to: whole blood, bone marrow, organs, and manipulated blood cells.
 */
export interface BiologicallyDerivedProduct extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'BiologicallyDerivedProduct';
    /**
     * External ids for this item
     * This records identifiers associated with this biologically derived product instance 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).
     */
    identifier?: Identifier[];
    /**
     * What this biologically derived product is
     * A code that identifies the kind of this biologically derived product (SNOMED Ctcode).
     */
    productCode?: CodeableConcept;
    /**
     * Procedure request
     * Procedure request to obtain this biologically derived product.
     */
    request?: Reference[];
    /**
     * The amount of this biologically derived product
     * Number of discrete units within this product.
     */
    quantity?: integer;
    /**
     * Extension for quantity
     **/
    _quantity?: Element;
    /**
     * BiologicallyDerivedProduct parent
     * Parent product (if any).
     * For products that have multiple collections. For example Peripheral Blood Stem Cells may be collected over several days from a single donor and the donation split into in multiple containers which must be linked to the parent donation.
     */
    parent?: Reference[];
    /**
     * How this product was collected
     * How this product was collected.
     */
    collection?: BiologicallyDerivedProductCollection;
    /**
     * Any processing of the product during collection
     * Any processing of the product during collection that does not change the fundamental nature of the product. For example adding anti-coagulants during the collection of Peripheral Blood Stem Cells.
     */
    processing?: BiologicallyDerivedProductProcessing[];
    /**
     * Any manipulation of product post-collection
     * Any manipulation of product post-collection that is intended to alter the product.  For example a buffy-coat enrichment or CD8 reduction of Peripheral Blood Stem Cells to make it more suitable for infusion.
     */
    manipulation?: BiologicallyDerivedProductManipulation;
    /**
     * Product storage
     * Product storage.
     */
    storage?: BiologicallyDerivedProductStorage[];
    /**
     * organ | tissue | fluid | cells | biologicalAgent
     * Broad category of this product.
     */
    productCategory?: BiologicallyDerivedProductCategory;
    /**
     * available | unavailable
     * Whether the product is currently available.
     */
    status?: BiologicallyDerivedProductStatus;
}
/**
 * Specific and identified anatomical structure
 * Record details about an anatomical structure.  This resource may be used when a coded concept does not provide the necessary detail needed for the use case.
 */
export interface BodyStructure extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'BodyStructure';
    /**
     * Bodystructure identifier
     * Identifier for this instance of the anatomical structure.
     */
    identifier?: Identifier[];
    /**
     * Whether this record is in active use
     * Whether this body site is in active use.
     * This element is labeled as a modifier because it may be used to mark that the resource was created in error.
     */
    active?: boolean;
    /**
     * Extension for active
     **/
    _active?: Element;
    /**
     * Kind of Structure
     * The kind of structure being represented by the body structure at `BodyStructure.location`.  This can define both normal and abnormal morphologies.
     * The minimum cardinality of 0 supports the use case of specifying a location without defining a morphology.
     */
    morphology?: CodeableConcept;
    /**
     * Body site
     * The anatomical location or region of the specimen, lesion, or body structure.
     */
    location?: CodeableConcept;
    /**
     * Body site modifier
     * Qualifier to refine the anatomical location.  These include qualifiers for laterality, relative location, directionality, number, and plane.
     */
    locationQualifier?: CodeableConcept[];
    /**
     * Text description
     * A summary, characterization or explanation of the body structure.
     * This description could include any visual markings used to orientate the viewer e.g. external reference points, special sutures, ink markings.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Attached images
     * Image or images used to identify a location.
     */
    image?: Attachment[];
    /**
     * Who this is about
     * The person to which the body site belongs.
     */
    patient: Reference;
}
/**
 * Links related to this Bundle
 * A series of links that provide context to this bundle.
 * Both Bundle.link and Bundle.entry.link are defined to support providing additional context when Bundles are used (e.g. [HATEOAS](http://en.wikipedia.org/wiki/HATEOAS)).

Bundle.entry.link corresponds to links found in the HTTP header if the resource in the entry was [read](http.html#read) directly.

This specification defines some specific uses of Bundle.link for [searching](search.html#conformance) and [paging](http.html#paging), but no specific uses for Bundle.entry.link, and no defined function in a transaction - the meaning is implementation specific.
 */
export interface BundleLink extends BackboneElement {
    /**
     * See http://www.iana.org/assignments/link-relations/link-relations.xhtml#link-relations-1
     * 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).
     */
    relation: string;
    /**
     * Extension for relation
     **/
    _relation?: Element;
    /**
     * Reference details for the link
     * The reference details for the link.
     */
    url: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
}
/**
 * Search related information
 * Information about the search process that lead to the creation of this entry.
 */
export interface BundleEntrySearch extends BackboneElement {
    /**
     * Search ranking (between 0 and 1)
     * When searching, the server's search ranking score for the entry.
     * Servers are not required to return a ranking score. 1 is most relevant, and 0 is least relevant. Often, search results are sorted by score, but the client may specify a different sort order.

See [Patient Match](patient-operation-match.html) for the EMPI search which relates to this element.
     */
    score?: decimal;
    /**
     * Extension for score
     **/
    _score?: Element;
    /**
     * match | include | outcome - why this is in the result set
     * Why this entry is in the result set - whether it's included as a match or because of an _include requirement, or to convey information or warning information about the search process.
     * There is only one mode. In some corner cases, a resource may be included because it is both a match and an include. In these circumstances, 'match' takes precedence.
     */
    mode?: BundleSearchEntryMode;
}
/**
 * Additional execution information (transaction/batch/history)
 * Additional information about how this entry should be processed as part of a transaction or batch.  For history, it shows how the entry was processed to create the version contained in the entry.
 */
export interface BundleEntryRequest extends BackboneElement {
    /**
     * URL for HTTP equivalent of this entry
     * The URL for this entry, relative to the root (the address to which the request is posted).
     * E.g. for a Patient Create, the method would be "POST" and the URL would be "Patient". For a Patient Update, the method would be PUT and the URL would be "Patient/[id]".
     */
    url: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * For managing cache currency
     * If the ETag values match, return a 304 Not Modified status. See the API documentation for ["Conditional Read"](http.html#cread).
     */
    ifNoneMatch?: string;
    /**
     * Extension for ifNoneMatch
     **/
    _ifNoneMatch?: Element;
    /**
     * For managing cache currency
     * Only perform the operation if the last updated date matches. See the API documentation for ["Conditional Read"](http.html#cread).
     */
    ifModifiedSince?: instant;
    /**
     * Extension for ifModifiedSince
     **/
    _ifModifiedSince?: Element;
    /**
     * For managing update contention
     * Only perform the operation if the Etag value matches. For more information, see the API section ["Managing Resource Contention"](http.html#concurrency).
     */
    ifMatch?: string;
    /**
     * Extension for ifMatch
     **/
    _ifMatch?: Element;
    /**
     * For conditional creates
     * 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 "?").
     */
    ifNoneExist?: string;
    /**
     * Extension for ifNoneExist
     **/
    _ifNoneExist?: Element;
    /**
     * GET | HEAD | POST | PUT | DELETE | PATCH
     * In a transaction or batch, this is the HTTP action to be executed for this entry. In a history bundle, this indicates the HTTP action that occurred.
     */
    method: BundleHTTPVerb;
}
/**
 * Results of execution (transaction/batch/history)
 * Indicates the results of processing the corresponding 'request' entry in the batch or transaction being responded to or what the results of an operation where when returning history.
 */
export interface BundleEntryResponse extends BackboneElement {
    /**
     * Status response code (text optional)
     * 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.
     */
    status: string;
    /**
     * Extension for status
     **/
    _status?: Element;
    /**
     * The location (if the operation returns a location)
     * The location header created by processing this operation, populated if the operation returns a location.
     */
    location?: uri;
    /**
     * Extension for location
     **/
    _location?: Element;
    /**
     * The Etag for the resource (if relevant)
     * The Etag for the resource, if the operation for the entry produced a versioned resource (see [Resource Metadata and Versioning](http.html#versioning) and [Managing Resource Contention](http.html#concurrency)).
     * Etags match the Resource.meta.versionId. The ETag has to match the version id in the header if a resource is included.
     */
    etag?: string;
    /**
     * Extension for etag
     **/
    _etag?: Element;
    /**
     * Server's date time modified
     * The date/time that the resource was modified on the server.
     * This has to match the same time in the meta header (meta.lastUpdated) if a resource is included.
     */
    lastModified?: instant;
    /**
     * Extension for lastModified
     **/
    _lastModified?: Element;
    /**
     * OperationOutcome with hints and warnings (for batch/transaction)
     * An OperationOutcome containing hints and warnings produced as part of processing this entry in a batch or transaction.
     * For a POST/PUT operation, this is the equivalent outcome that would be returned for prefer = operationoutcome - except that the resource is always returned whether or not the outcome is returned.

This outcome is not used for error responses in batch/transaction, only for hints and warnings. In a batch operation, the error will be in Bundle.entry.response, and for transaction, there will be a single OperationOutcome instead of a bundle in the case of an error.
     */
    outcome?: Resource;
}
/**
 * Entry in the bundle - will have a resource or information
 * An entry in a bundle resource - will either contain a resource or information about a resource (transactions and history only).
 */
export interface BundleEntry extends BackboneElement {
    /**
     * Links related to this entry
     * A series of links that provide context to this entry.
     */
    link?: BundleLink[];
    /**
     * URI for resource (Absolute URL server address or URI for UUID/OID)
     * The Absolute URL for the resource.  The fullUrl SHALL NOT disagree with the id in the resource - i.e. if the fullUrl is not a urn:uuid, the URL shall be version-independent URL consistent with the Resource.id. 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.
     * fullUrl might not be [unique in the context of a resource](bundle.html#bundle-unique). Note that since [FHIR resources do not need to be served through the FHIR API](references.html), the fullURL might be a URN or an absolute URL that does not end with the logical id of the resource (Resource.id). However, but if the fullUrl does look like a RESTful server URL (e.g. meets the [regex](references.html#regex), then the 'id' portion of the fullUrl SHALL end with the Resource.id.

Note that the fullUrl is not the same as the canonical URL - it's an absolute url for an endpoint serving the resource (these will happen to have the same value on the canonical server for the resource with the canonical URL).
     */
    fullUrl?: uri;
    /**
     * Extension for fullUrl
     **/
    _fullUrl?: Element;
    /**
     * A resource in the bundle
     * The Resource for the entry. The purpose/meaning of the resource is determined by the Bundle.type.
     */
    resource?: Resource;
    /**
     * Search related information
     * Information about the search process that lead to the creation of this entry.
     */
    search?: BundleEntrySearch;
    /**
     * Additional execution information (transaction/batch/history)
     * Additional information about how this entry should be processed as part of a transaction or batch.  For history, it shows how the entry was processed to create the version contained in the entry.
     */
    request?: BundleEntryRequest;
    /**
     * Results of execution (transaction/batch/history)
     * Indicates the results of processing the corresponding 'request' entry in the batch or transaction being responded to or what the results of an operation where when returning history.
     */
    response?: BundleEntryResponse;
}
/**
 * Contains a collection of resources
 * A container for a collection of resources.
 */
export interface Bundle extends Resource {
    /**
     * Persistent identifier for the bundle
     * A persistent identifier for the bundle that won't change as a bundle is copied from server to server.
     * Persistent identity generally only matters for batches of type Document, Message, and Collection. It would not normally be populated for search and history results and servers ignore Bundle.identifier when processing batches and transactions. For Documents  the .identifier SHALL be populated such that the .identifier is globally unique.
     */
    identifier?: Identifier;
    /**
     * When the bundle was assembled
     * The date/time that the bundle was assembled - i.e. when the resources were placed in the bundle.
     * For many bundles, the timestamp is equal to .meta.lastUpdated, because they are not stored (e.g. search results). When a bundle is placed in a persistent store, .meta.lastUpdated will be usually be changed by the server. When the bundle is a message, a middleware agent altering the message (even if not stored) SHOULD update .meta.lastUpdated. .timestamp is used to track the original time of the Bundle, and SHOULD be populated.

Usage:

* document : the date the document was created. Note: the composition may predate the document, or be associated with multiple documents. The date of the composition - the authoring time - may be earlier than the document assembly time
* message : the date that the content of the message was assembled. This date is not changed by middleware engines unless they add additional data that changes the meaning of the time of the message
* history : the date that the history was assembled. This time would be used as the _since time to ask for subsequent updates
* searchset : the time that the search set was assembled. Note that different pages MAY have different timestamps but need not. Having different timestamps does not imply that subsequent pages will represent or include changes made since the initial query
* transaction | transaction-response | batch | batch-response | collection : no particular assigned meaning

The timestamp value should be greater than the lastUpdated and other timestamps in the resources in the bundle, and it should be equal or earlier than the .meta.lastUpdated on the Bundle itself.
     */
    timestamp?: instant;
    /**
     * Extension for timestamp
     **/
    _timestamp?: Element;
    /**
     * If search, the total number of matches
     * If a set of search matches, this is the total number of entries of type 'match' across all pages in the search.  It does not include search.mode = 'include' or 'outcome' entries and it does not provide a count of the number of entries in the Bundle.
     * Only used if the bundle is a search result set. The total does not include resources such as OperationOutcome and included resources, only the total number of matching resources.
     */
    total?: unsignedInt;
    /**
     * Extension for total
     **/
    _total?: Element;
    /**
     * Links related to this Bundle
     * A series of links that provide context to this bundle.
     * Both Bundle.link and Bundle.entry.link are defined to support providing additional context when Bundles are used (e.g. [HATEOAS](http://en.wikipedia.org/wiki/HATEOAS)).

Bundle.entry.link corresponds to links found in the HTTP header if the resource in the entry was [read](http.html#read) directly.

This specification defines some specific uses of Bundle.link for [searching](search.html#conformance) and [paging](http.html#paging), but no specific uses for Bundle.entry.link, and no defined function in a transaction - the meaning is implementation specific.
     */
    link?: BundleLink[];
    /**
     * Entry in the bundle - will have a resource or information
     * An entry in a bundle resource - will either contain a resource or information about a resource (transactions and history only).
     */
    entry?: BundleEntry[];
    /**
     * Digital Signature
     * Digital Signature - base64 encoded. XML-DSig or a JWT.
     * The signature could be created by the "author" of the bundle or by the originating device.   Requirements around inclusion of a signature, verification of signatures and treatment of signed/non-signed bundles is implementation-environment specific.
     */
    signature?: Signature;
    /**
     * document | message | transaction | transaction-response | batch | batch-response | history | searchset | collection
     * Indicates the purpose of this bundle - how it is intended to be used.
     * It's possible to use a bundle for other purposes (e.g. a document can be accepted as a transaction). This is primarily defined so that there can be specific rules for some of the bundle types.
     */
    type: BundleType;
}
/**
 * Software that is covered by this capability statement
 * 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.
 */
export interface CapabilityStatementSoftware extends BackboneElement {
    /**
     * A name the software is known by
     * Name the software is known by.
     */
    name: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Version covered by this statement
     * The version identifier for the software covered by this statement.
     * If possible, a version should be specified, as statements are likely to be different for different versions of software.
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
    /**
     * Date this version was released
     * Date this version of the software was released.
     */
    releaseDate?: dateTime;
    /**
     * Extension for releaseDate
     **/
    _releaseDate?: Element;
}
/**
 * If this describes a specific instance
 * 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.
 */
export interface CapabilityStatementImplementation extends BackboneElement {
    /**
     * Describes this specific instance
     * Information about the specific installation that this capability statement relates to.
     */
    description: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Base URL for the installation
     * An absolute base URL for the implementation.  This forms the base for REST interfaces as well as the mailbox and document interfaces.
     */
    url?: url;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Organization that manages the data
     * The organization responsible for the management of the instance and oversight of the data on the server at the specified URL.
     */
    custodian?: Reference;
}
/**
 * Information about security of implementation
 * Information about security implementation from an interface perspective - what a client needs to know.
 */
export interface CapabilityStatementRestSecurity extends BackboneElement {
    /**
     * Adds CORS Headers (http://enable-cors.org/)
     * Server adds CORS headers when responding to requests - this enables Javascript applications to use the server.
     * The easiest CORS headers to add are Access-Control-Allow-Origin: * & Access-Control-Request-Method: GET, POST, PUT, DELETE. All servers SHOULD support CORS.
     */
    cors?: boolean;
    /**
     * Extension for cors
     **/
    _cors?: Element;
    /**
     * OAuth | SMART-on-FHIR | NTLM | Basic | Kerberos | Certificates
     * Types of security services that are supported/required by the system.
     */
    service?: CodeableConcept[];
    /**
     * General description of how security works
     * General description of how security works.
     */
    description?: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
}
/**
 * What operations are supported?
 * Identifies a restful operation supported by the solution.
 * In general, a Resource will only appear in a CapabilityStatement if the server actually has some capabilities - e.g. there is at least one interaction supported. However interactions can be omitted to support summarization (_summary = true).
 */
export interface CapabilityStatementRestResourceInteraction extends BackboneElement {
    /**
     * Anything special about operation behavior
     * 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'.
     */
    documentation?: markdown;
    /**
     * Extension for documentation
     **/
    _documentation?: Element;
    /**
     * read | vread | update | patch | delete | history-instance | history-type | create | search-type
     * Coded identifier of the operation, supported by the system resource.
     */
    code: CapabilityStatementTypeRestfulInteraction;
}
/**
 * Search parameters supported by implementation
 * 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.
 * The search parameters should include the control search parameters such as _sort, _count, etc. that also apply to this resource (though many will be listed at [CapabilityStatement.rest.searchParam](capabilitystatement-definitions.html#CapabilityStatement.rest.searchParam)). The behavior of some search parameters may be further described by other code or extension elements, or narrative within the capability statement or linked [SearchParameter](searchparameter.html#) definitions.
 */
export interface CapabilityStatementRestResourceSearchParam extends BackboneElement {
    /**
     * Name of search parameter
     * The name of the search parameter used in the interface.
     * Parameter names cannot overlap with standard parameter names, and standard parameters cannot be redefined.
     */
    name: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Source of definition for parameter
     * 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](searchparameter-definitions.html#SearchParameter.url)). This element SHALL be populated if the search parameter refers to a SearchParameter defined by the FHIR core specification or externally defined IGs.
     * This SHOULD be present, and matches refers to a SearchParameter by its canonical URL. If systems wish to document their support for modifiers, comparators, target resource types, and chained parameters, they should do using a search parameter resource. This element SHALL be populated if the search parameter refers to a SearchParameter defined by the FHIR core specification or externally defined IGs.
     */
    definition?: canonical;
    /**
     * Extension for definition
     **/
    _definition?: Element;
    /**
     * Server-specific usage
     * This allows documentation of any distinct behaviors about how the search parameter is used.  For example, text matching algorithms.
     */
    documentation?: markdown;
    /**
     * Extension for documentation
     **/
    _documentation?: Element;
    /**
     * number | date | string | token | reference | composite | quantity | uri | special
     * The type of value a search parameter refers to, and how the content is interpreted.
     * While this can be looked up from the definition, it is included here as a convenience for systems that autogenerate a query interface based on the server capability statement.  It SHALL be the same as the type in the search parameter definition.
     */
    type: CapabilityStatementSearchParamType;
}
/**
 * Definition of a resource operation
 * Definition of an operation or a named query together with its parameters and their meaning and type. Consult the definition of the operation for details about how to invoke the operation, and the parameters.
 * Operations linked from CapabilityStatement.rest.resource.operation must have OperationDefinition.type = true or OperationDefinition.instance = true.

If an operation that is listed in multiple CapabilityStatement.rest.resource.operation (e.g. for different resource types), then clients should understand that the operation is only supported on the specified resource types, and that may be a subset of those listed in OperationDefinition.resource.
 */
export interface CapabilityStatementRestResourceOperation extends BackboneElement {
    /**
     * Name by which the operation/query is invoked
     * 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.
     * The name here SHOULD be the same as the name in the definition, unless there is a name clash and the name cannot be used. The name does not include the "$" portion that is always included in the URL.
     */
    name: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * The defined operation/query
     * Where the formal definition can be found. If a server references the base definition of an Operation (i.e. from the specification itself such as ```http://hl7.org/fhir/OperationDefinition/ValueSet-expand```), that means it supports the full capabilities of the operation - e.g. both GET and POST invocation.  If it only supports a subset, it must define its own custom [OperationDefinition](operationdefinition.html#) with a 'base' of the original OperationDefinition.  The custom definition would describe the specific subset of functionality supported.
     * This can be used to build an HTML form to invoke the operation, for instance.
     */
    definition: canonical;
    /**
     * Extension for definition
     **/
    _definition?: Element;
    /**
     * Specific details about operation behavior
     * Documentation that describes anything special about the operation behavior, possibly detailing different behavior for system, type and instance-level invocation of the operation.
     */
    documentation?: markdown;
    /**
     * Extension for documentation
     **/
    _documentation?: Element;
}
/**
 * Resource served on the REST interface
 * A specification of the restful capabilities of the solution for a specific resource type.
 * Max of one repetition per resource type.
 */
export interface CapabilityStatementRestResource extends BackboneElement {
    /**
     * A resource type that is supported
     * A type of resource exposed via the restful interface.
     */
    type: code;
    /**
     * Extension for type
     **/
    _type?: Element;
    /**
     * Base System profile for all uses of resource
     * 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).
     * The profile applies to all  resources of this type - i.e. it is the superset of what is supported by the system.
     */
    profile?: canonical;
    /**
     * Extension for profile
     **/
    _profile?: Element;
    /**
     * Profiles for use cases supported
     * 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).
     * Supported profiles are different than the profile that applies to a particular resource in .rest.resource.profile. The resource profile is a general statement of what features of the resource are supported overall by the system - the sum total of the facilities it supports. A supported profile is a deeper statement about the functionality of the data and services provided by the server (or used by the client). A typical case is a laboratory system that produces a set of different reports - this is the list of types of data that it publishes. A key aspect of declaring profiles here is the question of how the client converts knowledge that the server publishes this data into working with the data; the client can inspect individual resources to determine whether they conform to a particular profile, but how does it find the ones that do? It does so by searching using the _profile parameter, so any resources listed here must be valid values for the _profile resource (using the identifier in the target profile).
     */
    supportedProfile?: canonical[];
    /**
     * Extension for supportedProfile
     **/
    _supportedProfile?: Element[];
    /**
     * Additional information about the use of the resource type
     * Additional information about the resource type used by the system.
     */
    documentation?: markdown;
    /**
     * Extension for documentation
     **/
    _documentation?: Element;
    /**
     * What operations are supported?
     * Identifies a restful operation supported by the solution.
     * In general, a Resource will only appear in a CapabilityStatement if the server actually has some capabilities - e.g. there is at least one interaction supported. However interactions can be omitted to support summarization (_summary = true).
     */
    interaction?: CapabilityStatementRestResourceInteraction[];
    /**
     * Whether vRead can return past versions
     * A flag for whether the server is able to return past versions as part of the vRead operation.
     * It is useful to support the vRead operation for current operations, even if past versions aren't available.
     */
    readHistory?: boolean;
    /**
     * Extension for readHistory
     **/
    _readHistory?: Element;
    /**
     * If update can commit to a new identity
     * A flag to indicate that the server allows or needs to allow the client to create new identities on the server (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.
     * Allowing the clients to create new identities on the server means that the system administrator needs to have confidence that the clients do not create clashing identities between them. Obviously, if there is only one client, this won't happen. While creating identities on the client means that the clients need to be managed, it's much more convenient for many scenarios if such management can be put in place.
     */
    updateCreate?: boolean;
    /**
     * Extension for updateCreate
     **/
    _updateCreate?: Element;
    /**
     * If allows/uses conditional create
     * A flag that indicates that the server supports conditional create.
     * Conditional Create is mainly appropriate for interface engine scripts converting from other formats, such as v2.
     */
    conditionalCreate?: boolean;
    /**
     * Extension for conditionalCreate
     **/
    _conditionalCreate?: Element;
    /**
     * If allows/uses conditional update
     * A flag that indicates that the server supports conditional update.
     * Conditional Update is mainly appropriate for interface engine scripts converting from other formats, such as v2.
     */
    conditionalUpdate?: boolean;
    /**
     * Extension for conditionalUpdate
     **/
    _conditionalUpdate?: Element;
    /**
     * _include values supported by the server
     * A list of _include values supported by the server.
     * If this list is empty, the server does not support includes.
     */
    searchInclude?: string[];
    /**
     * Extension for searchInclude
     **/
    _searchInclude?: Element[];
    /**
     * _revinclude values supported by the server
     * A list of _revinclude (reverse include) values supported by the server.
     * If this list is empty, the server does not support reverse includes.
     */
    searchRevInclude?: string[];
    /**
     * Extension for searchRevInclude
     **/
    _searchRevInclude?: Element[];
    /**
     * Search parameters supported by implementation
     * 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.
     * The search parameters should include the control search parameters such as _sort, _count, etc. that also apply to this resource (though many will be listed at [CapabilityStatement.rest.searchParam](capabilitystatement-definitions.html#CapabilityStatement.rest.searchParam)). The behavior of some search parameters may be further described by other code or extension elements, or narrative within the capability statement or linked [SearchParameter](searchparameter.html#) definitions.
     */
    searchParam?: CapabilityStatementRestResourceSearchParam[];
    /**
     * Definition of a resource operation
     * Definition of an operation or a named query together with its parameters and their meaning and type. Consult the definition of the operation for details about how to invoke the operation, and the parameters.
     * Operations linked from CapabilityStatement.rest.resource.operation must have OperationDefinition.type = true or OperationDefinition.instance = true.

If an operation that is listed in multiple CapabilityStatement.rest.resource.operation (e.g. for different resource types), then clients should understand that the operation is only supported on the specified resource types, and that may be a subset of those listed in OperationDefinition.resource.
     */
    operation?: CapabilityStatementRestResourceOperation[];
    /**
     * no-version | versioned | versioned-update
     * 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.
     * If a server supports versionIds correctly, it SHOULD support vread too, but is not required to do so.
     */
    versioning?: CapabilityStatementResourceVersionPolicy;
    /**
     * not-supported | modified-since | not-match | full-support
     * A code that indicates how the server supports conditional read.
     * Conditional Read is mainly appropriate for interface engine scripts converting from other formats, such as v2.
     */
    conditionalRead?: CapabilityStatementConditionalReadStatus;
    /**
     * not-supported | single | multiple - how conditional delete is supported
     * A code that indicates how the server supports conditional delete.
     * Conditional Delete is mainly appropriate for interface engine scripts converting from other formats, such as v2.
     */
    conditionalDelete?: CapabilityStatementConditionalDeleteStatus;
    /**
     * literal | logical | resolves | enforced | local
     * A set of flags that defines how references are supported.
     */
    referencePolicy?: CapabilityStatementReferenceHandlingPolicy[];
}
/**
 * What operations are supported?
 * A specification of restful operations supported by the system.
 */
export interface CapabilityStatementRestInteraction extends BackboneElement {
    /**
     * Anything special about operation behavior
     * 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.
     */
    documentation?: markdown;
    /**
     * Extension for documentation
     **/
    _documentation?: Element;
    /**
     * transaction | batch | search-system | history-system
     * A coded identifier of the operation, supported by the system.
     */
    code: CapabilityStatementSystemRestfulInteraction;
}
/**
 * If the endpoint is a RESTful one
 * A definition of the restful capabilities of the solution, if any.
 * Multiple repetitions allow definition of both client and/or server behaviors or possibly behaviors under different configuration settings (for software or requirements statements).
 */
export interface CapabilityStatementRest extends BackboneElement {
    /**
     * General description of implementation
     * Information about the system's restful capabilities that apply across all applications, such as security.
     */
    documentation?: markdown;
    /**
     * Extension for documentation
     **/
    _documentation?: Element;
    /**
     * Information about security of implementation
     * Information about security implementation from an interface perspective - what a client needs to know.
     */
    security?: CapabilityStatementRestSecurity;
    /**
     * Resource served on the REST interface
     * A specification of the restful capabilities of the solution for a specific resource type.
     * Max of one repetition per resource type.
     */
    resource?: CapabilityStatementRestResource[];
    /**
     * What operations are supported?
     * A specification of restful operations supported by the system.
     */
    interaction?: CapabilityStatementRestInteraction[];
    /**
     * Search parameters for searching all resources
     * 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.
     * Typically, the only search parameters supported for all searches are those that apply to all resources - tags, profiles, text search etc. These search parameters should include the control search parameters such as _sort, _count, etc. that also apply to this resource (though many will be listed at [CapabilityStatement.rest.searchParam](capabilitystatement-definitions.html#CapabilityStatement.rest.searchParam)). The behavior of some search parameters may be further described by other code or extension elements, or narrative within the capability statement or linked [SearchParameter](searchparameter.html#) definitions.
     */
    searchParam?: CapabilityStatementRestResourceSearchParam[];
    /**
     * Definition of a system level operation
     * Definition of an operation or a named query together with its parameters and their meaning and type.
     * CapabilityStatement.rest.operation is for operations invoked at the system level, or for operations that are supported across multiple resource types. Operations linked from CapabilityStatement.rest.operation must have OperationDefinition.system = true, or more than one Operation.resource.
     */
    operation?: CapabilityStatementRestResourceOperation[];
    /**
     * Compartments served/used by system
     * 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 .
     * At present, the only defined compartments are at [CompartmentDefinition](compartmentdefinition.html).
     */
    compartment?: canonical[];
    /**
     * Extension for compartment
     **/
    _compartment?: Element[];
    /**
     * client | server
     * Identifies whether this portion of the statement is describing the ability to initiate or receive restful operations.
     */
    mode: CapabilityStatementRestfulCapabilityMode;
}
/**
 * Where messages should be sent
 * An endpoint (network accessible address) to which messages and/or replies are to be sent.
 */
export interface CapabilityStatementMessagingEndpoint extends BackboneElement {
    /**
     * http | ftp | mllp +
     * A list of the messaging transport protocol(s) identifiers, supported by this endpoint.
     */
    protocol: Coding;
    /**
     * Network address or identifier of the end-point
     * The network address of the endpoint. For solutions that do not use network addresses for routing, it can be just an identifier.
     */
    address: url;
    /**
     * Extension for address
     **/
    _address?: Element;
}
/**
 * Messages supported by this system
 * References to message definitions for messages this system can send or receive.
 * This is a proposed alternative to the messaging.event structure.
 */
export interface CapabilityStatementMessagingSupportedMessage extends BackboneElement {
    /**
     * Message supported by this system
     * Points to a message definition that identifies the messaging event, message structure, allowed responses, etc.
     */
    definition: canonical;
    /**
     * Extension for definition
     **/
    _definition?: Element;
    /**
     * sender | receiver
     * The mode of this event declaration - whether application is sender or receiver.
     */
    mode: CapabilityStatementEventCapabilityMode;
}
/**
 * If messaging is supported
 * A description of the messaging capabilities of the solution.
 * Multiple repetitions allow the documentation of multiple endpoints per solution.
 */
export interface CapabilityStatementMessaging extends BackboneElement {
    /**
     * Where messages should be sent
     * An endpoint (network accessible address) to which messages and/or replies are to be sent.
     */
    endpoint?: CapabilityStatementMessagingEndpoint[];
    /**
     * Reliable Message Cache Length (min)
     * 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).
     * If this value is missing then the application does not implement (receiver) or depend on (sender) reliable messaging.
     */
    reliableCache?: unsignedInt;
    /**
     * Extension for reliableCache
     **/
    _reliableCache?: Element;
    /**
     * Messaging interface behavior details
     * 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.
     */
    documentation?: markdown;
    /**
     * Extension for documentation
     **/
    _documentation?: Element;
    /**
     * Messages supported by this system
     * References to message definitions for messages this system can send or receive.
     * This is a proposed alternative to the messaging.event structure.
     */
    supportedMessage?: CapabilityStatementMessagingSupportedMessage[];
}
/**
 * Document definition
 * A document definition.
 */
export interface CapabilityStatementDocument extends BackboneElement {
    /**
     * Description of document support
     * 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.
     */
    documentation?: markdown;
    /**
     * Extension for documentation
     **/
    _documentation?: Element;
    /**
     * Constraint on the resources used in the document
     * A profile on the document Bundle that constrains which resources are present, and their contents.
     * The profile is actually on the Bundle.
     */
    profile: canonical;
    /**
     * Extension for profile
     **/
    _profile?: Element;
    /**
     * producer | consumer
     * Mode of this document declaration - whether an application is a producer or consumer.
     */
    mode: CapabilityStatementDocumentMode;
}
/**
 * A statement of system capabilities
 * A Capability Statement documents a set of capabilities (behaviors) of a FHIR Server for a particular version of FHIR that may be used as a statement of actual server functionality or a statement of required or desired server implementation.
 * Applications may implement multiple versions (see [Managing Multiple Versions](versioning.html), and the [$versions](capabilitystatement-operation-versions.html) operation). If they do, then a CapabilityStatement describes the system's support for a particular version of FHIR, and the server will have multiple statements, one for each version.
 */
export interface CapabilityStatement extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'CapabilityStatement';
    /**
     * Canonical identifier for this capability statement, represented as a URI (globally unique)
     * An absolute URI that is used to identify this capability statement when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this capability statement is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the capability statement is stored on different servers.
     * Can be a urn:uuid: or a urn:oid: but real http: addresses are preferred.  Multiple instances may share the same URL if they have a distinct version.

The determination of when to create a new version of a resource (same url, new version) vs. defining a new artifact is up to the author.  Considerations for making this decision are found in [Technical and Business Versions](resource.html#versions).

In some cases, the resource can no longer be found at the stated url, but the url itself cannot change. Implementations can use the [meta.source](resource.html#meta) element to indicate where the current master source of the resource can be found.
     */
    url?: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Business version of the capability statement
     * 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.
     * There may be different capability statement instances that have the same identifier but different versions.  The version can be appended to the url in a reference to allow a reference to a particular business version of the capability statement with the format [url]|[version].
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
    /**
     * Name for this capability statement (computer friendly)
     * 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.
     * The name is not expected to be globally unique. The name should be a simple alphanumeric type name to ensure that it is machine-processing friendly.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Name for this capability statement (human friendly)
     * A short, descriptive, user-friendly title for the capability statement.
     * This name does not need to be machine-processing friendly and may contain punctuation, white-space, etc.
     */
    title?: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * For testing purposes, not real usage
     * 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.
     * Allows filtering of capability statements that are appropriate for use versus not.
     */
    experimental?: boolean;
    /**
     * Extension for experimental
     **/
    _experimental?: Element;
    /**
     * Date last changed
     * The date  (and optionally time) when the capability statement was published. The date must change 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.
     * Note that this is not the same as the resource last-modified-date, since the resource may be a secondary representation of the capability statement. Additional specific dates may be added as extensions or be found by consulting Provenances associated with past versions of the resource.
     */
    date: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Name of the publisher (organization or individual)
     * The name of the organization or individual that published the capability statement.
     * Usually an organization but may be an individual. The publisher (or steward) of the capability statement is the organization or individual primarily responsible for the maintenance and upkeep of the capability statement. This is not necessarily the same individual or organization that developed and initially authored the content. The publisher is the primary point of contact for questions or issues with the capability statement. This item SHOULD be populated unless the information is available from context.
     */
    publisher?: string;
    /**
     * Extension for publisher
     **/
    _publisher?: Element;
    /**
     * Contact details for the publisher
     * Contact details to assist a user in finding and communicating with the publisher.
     * May be a web site, an email address, a telephone number, etc.
     */
    contact?: ContactDetail[];
    /**
     * Natural language description of the capability statement
     * 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.
     * This description can be used to capture details such as why the capability statement was built, comments about misuse, instructions for clinical use and interpretation, literature references, examples from the paper world, etc. It is not a rendering of the capability statement as conveyed in the 'text' field of the resource itself. This item SHOULD be populated unless the information is available from context (e.g. the language of the capability statement is presumed to be the predominant language in the place the capability statement was created).This does not need to be populated if the description is adequately implied by the software or implementation details.
     */
    description?: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * The context that the content is intended to support
     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate capability statement instances.
     * When multiple useContexts are specified, there is no expectation that all or any of the contexts apply.
     */
    useContext?: UsageContext[];
    /**
     * Intended jurisdiction for capability statement (if applicable)
     * A legal or geographic region in which the capability statement is intended to be used.
     * It may be possible for the capability statement to be used in jurisdictions other than those for which it was originally designed or intended.
     */
    jurisdiction?: CodeableConcept[];
    /**
     * Why this capability statement is defined
     * Explanation of why this capability statement is needed and why it has been designed as it has.
     * This element does not describe the usage of the capability statement. Instead, it provides traceability of ''why'' the resource is either needed or ''why'' it is defined as it is.  This may be used to point to source materials or specifications that drove the structure of this capability statement.
     */
    purpose?: markdown;
    /**
     * Extension for purpose
     **/
    _purpose?: Element;
    /**
     * Use and/or publishing restrictions
     * 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.
     */
    copyright?: markdown;
    /**
     * Extension for copyright
     **/
    _copyright?: Element;
    /**
     * Canonical URL of another capability statement this implements
     * Reference to a canonical URL of another CapabilityStatement that this software implements. This capability statement is a published API description that corresponds to a business service. The server may actually implement a subset of the capability statement it claims to implement, so the capability statement must specify the full capability details.
     * HL7 defines the following Services: [Terminology Service](terminology-service.html).

Many [Implementation Guides](http://fhir.org/guides/registry) define additional services.
     */
    instantiates?: canonical[];
    /**
     * Extension for instantiates
     **/
    _instantiates?: Element[];
    /**
     * Canonical URL of another capability statement this adds to
     * Reference to a canonical URL of another CapabilityStatement that this software adds to. The capability statement automatically includes everything in the other statement, and it is not duplicated, though the server may repeat the same resources, interactions and operations to add additional details to them.
     * the contents of any directly or indirectly imported CapabilityStatements SHALL NOT overlap, i.e. they cannot refer to the same rest/resource, operations/name, searchparam/name, interaction/code, messaging/endpoint, document/mode pair.

A capability statement that imports another CapabilityStatement automatically instantiates it too (though this is often not a very useful statement for the kinds of CapabilityStatements that are suitable for importing).
     */
    imports?: canonical[];
    /**
     * Extension for imports
     **/
    _imports?: Element[];
    /**
     * Software that is covered by this capability statement
     * 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.
     */
    software?: CapabilityStatementSoftware;
    /**
     * If this describes a specific instance
     * 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.
     */
    implementation?: CapabilityStatementImplementation;
    /**
     * FHIR Version the system supports
     * The version of the FHIR specification that this CapabilityStatement describes (which SHALL be the same as the FHIR version of the CapabilityStatement itself). There is no default value.
     * Servers may implement multiple versions (see [Managing Multiple Versions](versioning.html), and the [$versions](capabilitystatement-operation-versions.html) operation). If they do, and the CapabilityStatement is requested from the server, then this fhirVersion will be either the version requested, or the server's default version.
     */
    fhirVersion: code;
    /**
     * Extension for fhirVersion
     **/
    _fhirVersion?: Element;
    /**
     * formats supported (xml | json | ttl | mime type)
     * A list of the formats supported by this implementation using their content types.
     * "xml", "json" and "ttl" are allowed, which describe the simple encodings described in the specification (and imply appropriate bundle support). Otherwise, mime types are legal here.
     */
    format: code[];
    /**
     * Extension for format
     **/
    _format?: Element[];
    /**
     * Patch formats supported
     * A list of the patch formats supported by this implementation using their content types.
     * At present, the patch mime types application/json-patch+json and application/xml-patch+xml are legal. Generally, if a server supports PATCH, it would be expected to support the patch formats and match the formats it supports, but this is not always possible or necessary.
     */
    patchFormat?: code[];
    /**
     * Extension for patchFormat
     **/
    _patchFormat?: Element[];
    /**
     * Implementation guides supported
     * A list of implementation guides that the server does (or should) support in their entirety.
     */
    implementationGuide?: canonical[];
    /**
     * Extension for implementationGuide
     **/
    _implementationGuide?: Element[];
    /**
     * If the endpoint is a RESTful one
     * A definition of the restful capabilities of the solution, if any.
     * Multiple repetitions allow definition of both client and/or server behaviors or possibly behaviors under different configuration settings (for software or requirements statements).
     */
    rest?: CapabilityStatementRest[];
    /**
     * If messaging is supported
     * A description of the messaging capabilities of the solution.
     * Multiple repetitions allow the documentation of multiple endpoints per solution.
     */
    messaging?: CapabilityStatementMessaging[];
    /**
     * Document definition
     * A document definition.
     */
    document?: CapabilityStatementDocument[];
    /**
     * draft | active | retired | unknown
     * The status of this capability statement. Enables tracking the life-cycle of the content.
     * Allows filtering of capability statements that are appropriate for use versus not.This is not intended for use with actual capability statements, but where capability statements are used to describe possible or desired systems.
     */
    status: CapabilityStatementPublicationStatus;
    /**
     * instance | capability | requirements
     * 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).
     */
    kind: CapabilityStatementKind;
}
/**
 * In-line definition of activity
 * 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.
 */
export interface CarePlanActivityDetail extends BackboneElement {
    /**
     * Instantiates FHIR protocol or definition
     * The URL pointing to a FHIR-defined protocol, guideline, questionnaire or other definition that is adhered to in whole or in part by this CarePlan activity.
     */
    instantiatesCanonical?: canonical[];
    /**
     * Extension for instantiatesCanonical
     **/
    _instantiatesCanonical?: Element[];
    /**
     * Instantiates external protocol or definition
     * The URL pointing to an externally maintained protocol, guideline, questionnaire or other definition that is adhered to in whole or in part by this CarePlan activity.
     * This might be an HTML page, PDF, etc. or could just be a non-resolvable URI identifier.
     */
    instantiatesUri?: uri[];
    /**
     * Extension for instantiatesUri
     **/
    _instantiatesUri?: Element[];
    /**
     * Detail type of activity
     * Detailed description of the type of planned activity; e.g. what lab test, what procedure, what kind of encounter.
     * Tends to be less relevant for activities involving particular products.  Codes should not convey negation - use "prohibited" instead.
     */
    code?: CodeableConcept;
    /**
     * Why activity should be done or why activity was prohibited
     * Provides the rationale that drove the inclusion of this particular activity as part of the plan or the reason why the activity was prohibited.
     * This could be a diagnosis code.  If a full condition record exists or additional detail is needed, use reasonCondition instead.
     */
    reasonCode?: CodeableConcept[];
    /**
     * Why activity is needed
     * Indicates another resource, such as the health condition(s), whose existence justifies this request and drove the inclusion of this particular activity as part of the plan.
     * Conditions can be identified at the activity level that are not identified as reasons for the overall plan.
     */
    reasonReference?: Reference[];
    /**
     * Goals this activity relates to
     * Internal reference that identifies the goals that this activity is intended to contribute towards meeting.
     */
    goal?: Reference[];
    /**
     * Reason for current status
     * Provides reason why the activity isn't yet started, is on hold, was cancelled, etc.
     * Will generally not be present if status is "complete".  Be sure to prompt to update this (or at least remove the existing value) if the status is changed.
     */
    statusReason?: CodeableConcept;
    /**
     * If true, activity is prohibiting action
     * If true, indicates that the described activity is one that must NOT be engaged in when following the plan.  If false, or missing, indicates that the described activity is one that should be engaged in when following the plan.
     * This element is labeled as a modifier because it marks an activity as an activity that is not to be performed.
     */
    doNotPerform?: boolean;
    /**
     * Extension for doNotPerform
     **/
    _doNotPerform?: Element;
    /**
     * When activity is to occur
     * The period, timing or frequency upon which the described activity is to occur.
     */
    scheduledTiming?: Timing;
    /**
     * When activity is to occur
     * The period, timing or frequency upon which the described activity is to occur.
     */
    scheduledPeriod?: Period;
    /**
     * When activity is to occur
     * The period, timing or frequency upon which the described activity is to occur.
     */
    scheduledString?: string;
    /**
     * Extension for scheduledString
     **/
    _scheduledString?: Element;
    /**
     * Where it should happen
     * Identifies the facility where the activity will occur; e.g. home, hospital, specific clinic, etc.
     * May reference a specific clinical location or may identify a type of location.
     */
    location?: Reference;
    /**
     * Who will be responsible?
     * Identifies who's expected to be involved in the activity.
     * A performer MAY also be a participant in the care plan.
     */
    performer?: Reference[];
    /**
     * What is to be administered/supplied
     * Identifies the food, drug or other product to be consumed or supplied in the activity.
     */
    productCodeableConcept?: CodeableConcept;
    /**
     * What is to be administered/supplied
     * Identifies the food, drug or other product to be consumed or supplied in the activity.
     */
    productReference?: Reference;
    /**
     * How to consume/day?
     * Identifies the quantity expected to be consumed in a given day.
     */
    dailyAmount?: Quantity;
    /**
     * How much to administer/supply/consume
     * Identifies the quantity expected to be supplied, administered or consumed by the subject.
     */
    quantity?: Quantity;
    /**
     * Extra info describing activity to perform
     * 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.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Appointment | CommunicationRequest | DeviceRequest | MedicationRequest | NutritionOrder | Task | ServiceRequest | VisionPrescription
     * A description of the kind of resource the in-line definition of a care plan activity is representing.  The CarePlan.activity.detail is an in-line definition when a resource is not referenced using CarePlan.activity.reference.  For example, a MedicationRequest, a ServiceRequest, or a CommunicationRequest.
     */
    kind?: CarePlanActivityKind;
    /**
     * not-started | scheduled | in-progress | on-hold | completed | cancelled | stopped | unknown | entered-in-error
     * Identifies what progress is being made for the specific activity.
     * Some aspects of status can be inferred based on the resources linked in actionTaken.  Note that "status" is only as current as the plan was most recently updated.
The unknown code is not to be used to convey other statuses.  The unknown code should be used when one of the statuses applies, but the authoring system doesn't know the current state of the activity.
     */
    status: CarePlanActivityStatus;
}
/**
 * Action to occur as part of plan
 * 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.
 */
export interface CarePlanActivity extends BackboneElement {
    /**
     * Results of the activity
     * 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).
     * Note that this should not duplicate the activity status (e.g. completed or in progress).
     */
    outcomeCodeableConcept?: CodeableConcept[];
    /**
     * Appointment, Encounter, Procedure, etc.
     * 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).
     * The activity outcome is independent of the outcome of the related goal(s).  For example, if the goal is to achieve a target body weight of 150 lbs and an activity is defined to diet, then the activity outcome could be calories consumed whereas the goal outcome is an observation for the actual body weight measured.
     */
    outcomeReference?: Reference[];
    /**
     * Comments about the activity status/progress
     * Notes about the adherence/status/progress of the activity.
     * This element should NOT be used to describe the activity to be performed - that occurs either within the resource pointed to by activity.detail.reference or in activity.detail.description.
     */
    progress?: Annotation[];
    /**
     * Activity details defined in specific resource
     * The details of the proposed activity represented in a specific resource.
     * Standard extension exists ([resource-pertainsToGoal](extension-resource-pertainstogoal.html)) that allows goals to be referenced from any of the referenced resources in CarePlan.activity.reference.
The goal should be visible when the resource referenced by CarePlan.activity.reference is viewed independently from the CarePlan.  Requests that are pointed to by a CarePlan using this element should *not* point to this CarePlan using the "basedOn" element.  i.e. Requests that are part of a CarePlan are not "based on" the CarePlan.
     */
    reference?: Reference;
    /**
     * In-line definition of activity
     * 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.
     */
    detail?: CarePlanActivityDetail;
}
/**
 * Healthcare plan for patient or group
 * 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.
 */
export interface CarePlan extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'CarePlan';
    /**
     * External Ids for this plan
     * Business identifiers assigned to this care plan by the performer or other systems which remain constant as the resource is updated and propagates from server to server.
     * This is a business identifier, not a resource identifier (see [discussion](resource.html#identifiers)).  It is best practice for the identifier to only appear on a single resource instance, however business practices may occasionally dictate that multiple resource instances with the same identifier can exist - possibly even with different resource types.  For example, multiple Patient and a Person resource instance might share the same social insurance number.
     */
    identifier?: Identifier[];
    /**
     * Instantiates FHIR protocol or definition
     * The URL pointing to a FHIR-defined protocol, guideline, questionnaire or other definition that is adhered to in whole or in part by this CarePlan.
     */
    instantiatesCanonical?: canonical[];
    /**
     * Extension for instantiatesCanonical
     **/
    _instantiatesCanonical?: Element[];
    /**
     * Instantiates external protocol or definition
     * The URL pointing to an externally maintained protocol, guideline, questionnaire or other definition that is adhered to in whole or in part by this CarePlan.
     * This might be an HTML page, PDF, etc. or could just be a non-resolvable URI identifier.
     */
    instantiatesUri?: uri[];
    /**
     * Extension for instantiatesUri
     **/
    _instantiatesUri?: Element[];
    /**
     * Fulfills CarePlan
     * A care plan that is fulfilled in whole or in part by this care plan.
     */
    basedOn?: Reference[];
    /**
     * CarePlan replaced by this CarePlan
     * Completed or terminated care plan whose function is taken by this new care plan.
     * The replacement could be because the initial care plan was immediately rejected (due to an issue) or because the previous care plan was completed, but the need for the action described by the care plan remains ongoing.
     */
    replaces?: Reference[];
    /**
     * Part of referenced CarePlan
     * A larger care plan of which this particular care plan is a component or step.
     * Each care plan is an independent request, such that having a care plan be part of another care plan can cause issues with cascading statuses.  As such, this element is still being discussed.
     */
    partOf?: Reference[];
    /**
     * Type of plan
     * 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.
     * There may be multiple axes of categorization and one plan may serve multiple purposes.  In some cases, this may be redundant with references to CarePlan.concern.
     */
    category?: CodeableConcept[];
    /**
     * Human-friendly name for the care plan
     * Human-friendly name for the care plan.
     */
    title?: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * Summary of nature of plan
     * A description of the scope and nature of the plan.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Who the care plan is for
     * Identifies the patient or group whose intended care is described by the plan.
     */
    subject: Reference;
    /**
     * Encounter created as part of
     * The Encounter during which this CarePlan was created or to which the creation of this record is tightly associated.
     * This will typically be the encounter the event occurred within, but some activities may be initiated prior to or after the official completion of an encounter but still be tied to the context of the encounter. CarePlan activities conducted as a result of the care plan may well occur as part of other encounters.
     */
    encounter?: Reference;
    /**
     * Time period plan covers
     * Indicates when the plan did (or is intended to) come into effect and end.
     * Any activities scheduled as part of the plan should be constrained to the specified period regardless of whether the activities are planned within a single encounter/episode or across multiple encounters/episodes (e.g. the longitudinal management of a chronic condition).
     */
    period?: Period;
    /**
     * Date record was first recorded
     * Represents when this particular CarePlan record was created in the system, which is often a system-generated date.
     */
    created?: dateTime;
    /**
     * Extension for created
     **/
    _created?: Element;
    /**
     * Who is the designated responsible party
     * When populated, the author is responsible for the care plan.  The care plan is attributed to the author.
     * The author may also be a contributor.  For example, an organization can be an author, but not listed as a contributor.
     */
    author?: Reference;
    /**
     * Who provided the content of the care plan
     * Identifies the individual(s) or organization who provided the contents of the care plan.
     * Collaborative care plans may have multiple contributors.
     */
    contributor?: Reference[];
    /**
     * Who's involved in plan?
     * Identifies all people and organizations who are expected to be involved in the care envisioned by this plan.
     */
    careTeam?: Reference[];
    /**
     * Health issues this plan addresses
     * Identifies the conditions/problems/concerns/diagnoses/etc. whose management and/or mitigation are handled by this plan.
     * When the diagnosis is related to an allergy or intolerance, the Condition and AllergyIntolerance resources can both be used. However, to be actionable for decision support, using Condition alone is not sufficient as the allergy or intolerance condition needs to be represented as an AllergyIntolerance.
     */
    addresses?: Reference[];
    /**
     * Information considered as part of plan
     * Identifies portions of the patient's record that specifically influenced the formation of the plan.  These might include comorbidities, recent procedures, limitations, recent assessments, etc.
     * Use "concern" to identify specific conditions addressed by the care plan.
     */
    supportingInfo?: Reference[];
    /**
     * Desired outcome of plan
     * Describes the intended objective(s) of carrying out the care plan.
     * Goal can be achieving a particular change or merely maintaining a current state or even slowing a decline.
     */
    goal?: Reference[];
    /**
     * Action to occur as part of plan
     * 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.
     */
    activity?: CarePlanActivity[];
    /**
     * Comments about the plan
     * General notes about the care plan not covered elsewhere.
     */
    note?: Annotation[];
    /**
     * draft | active | on-hold | revoked | completed | entered-in-error | unknown
     * Indicates whether the plan is currently being acted upon, represents future intentions or is now a historical record.
     * The unknown code is not to be used to convey other statuses.  The unknown code should be used when one of the statuses applies, but the authoring system doesn't know the current state of the care plan.

This element is labeled as a modifier because the status contains the code entered-in-error that marks the plan as not currently valid.
     */
    status: CarePlanStatus;
    /**
     * proposal | plan | order | option
     * Indicates the level of authority/intentionality associated with the care plan and where the care plan fits into the workflow chain.
     * This element is labeled as a modifier because the intent alters when and how the resource is actually applicable.
     */
    intent: CarePlanIntent;
}
/**
 * Members of the team
 * Identifies all people and organizations who are expected to be involved in the care team.
 */
export interface CareTeamParticipant extends BackboneElement {
    /**
     * Type of involvement
     * Indicates specific responsibility of an individual within the care team, such as "Primary care physician", "Trained social worker counselor", "Caregiver", etc.
     * Roles may sometimes be inferred by type of Practitioner.  These are relationships that hold only within the context of the care team.  General relationships should be handled as properties of the Patient resource directly.
     */
    role?: CodeableConcept[];
    /**
     * Who is involved
     * The specific person or organization who is participating/expected to participate in the care team.
     * Patient only needs to be listed if they have a role other than "subject of care".

Member is optional because some participants may be known only by their role, particularly in draft plans.
     */
    member?: Reference;
    /**
     * Organization of the practitioner
     * The organization of the practitioner.
     */
    onBehalfOf?: Reference;
    /**
     * Time period of participant
     * Indicates when the specific member or organization did (or is intended to) come into effect and end.
     */
    period?: Period;
}
/**
 * Planned participants in the coordination and delivery of care for a patient or group
 * The Care Team includes all the people and organizations who plan to participate in the coordination and delivery of care for a patient.
 */
export interface CareTeam extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'CareTeam';
    /**
     * External Ids for this team
     * Business identifiers assigned to this care team by the performer or other systems which remain constant as the resource is updated and propagates from server to server.
     * This is a business identifier, not a resource identifier (see [discussion](resource.html#identifiers)).  It is best practice for the identifier to only appear on a single resource instance, however business practices may occasionally dictate that multiple resource instances with the same identifier can exist - possibly even with different resource types.  For example, multiple Patient and a Person resource instance might share the same social insurance number.
     */
    identifier?: Identifier[];
    /**
     * Type of team
     * 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.
     * There may be multiple axis of categorization and one team may serve multiple purposes.
     */
    category?: CodeableConcept[];
    /**
     * Name of the team, such as crisis assessment team
     * A label for human use intended to distinguish like teams.  E.g. the "red" vs. "green" trauma teams.
     * The meaning/purpose of the team is conveyed in CareTeam.category.  This element may also convey semantics of the team (e.g. "Red trauma team"), but its primary purpose is to distinguish between identical teams in a human-friendly way.  ("Team 18735" isn't as friendly.).
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Who care team is for
     * Identifies the patient or group whose intended care is handled by the team.
     */
    subject?: Reference;
    /**
     * Encounter created as part of
     * The Encounter during which this CareTeam was created or to which the creation of this record is tightly associated.
     * This will typically be the encounter the event occurred within, but some activities may be initiated prior to or after the official completion of an encounter but still be tied to the context of the encounter.
     */
    encounter?: Reference;
    /**
     * Time period team covers
     * Indicates when the team did (or is intended to) come into effect and end.
     */
    period?: Period;
    /**
     * Members of the team
     * Identifies all people and organizations who are expected to be involved in the care team.
     */
    participant?: CareTeamParticipant[];
    /**
     * Why the care team exists
     * Describes why the care team exists.
     */
    reasonCode?: CodeableConcept[];
    /**
     * Why the care team exists
     * Condition(s) that this care team addresses.
     */
    reasonReference?: Reference[];
    /**
     * Organization responsible for the care team
     * The organization responsible for the care team.
     */
    managingOrganization?: Reference[];
    /**
     * A contact detail for the care team (that applies to all members)
     * A central contact detail for the care team (that applies to all members).
     * The ContactPoint.use code of home is not appropriate to use. These contacts are not the contact details of individual care team members.
     */
    telecom?: ContactPoint[];
    /**
     * Comments made about the CareTeam
     * Comments made about the CareTeam.
     */
    note?: Annotation[];
    /**
     * proposed | active | suspended | inactive | entered-in-error
     * Indicates the current state of the care team.
     * This element is labeled as a modifier because the status contains the code entered-in-error that marks the care team as not currently valid.
     */
    status?: CareTeamStatus;
}
/**
 * An item that this catalog entry is related to
 * Used for example, to point to a substance, or to a device used to administer a medication.
 */
export interface CatalogEntryRelatedEntry extends BackboneElement {
    /**
     * The reference to the related item
     * The reference to the related item.
     */
    item: Reference;
    /**
     * triggers | is-replaced-by
     * The type of relation to the related item: child, parent, packageContent, containerPackage, usedIn, uses, requires, etc.
     */
    relationtype: CatalogEntryRelationType;
}
/**
 * An entry in a catalog
 * Catalog entries are wrappers that contextualize items included in a catalog.
 */
export interface CatalogEntry extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'CatalogEntry';
    /**
     * Unique identifier of the catalog item
     * Used in supporting different identifiers for the same product, e.g. manufacturer code and retailer code.
     */
    identifier?: Identifier[];
    /**
     * The type of item - medication, device, service, protocol or other
     * The type of item - medication, device, service, protocol or other.
     */
    type?: CodeableConcept;
    /**
     * Whether the entry represents an orderable item
     * Whether the entry represents an orderable item.
     */
    orderable: boolean;
    /**
     * Extension for orderable
     **/
    _orderable?: Element;
    /**
     * The item that is being defined
     * The item in a catalog or definition.
     */
    referencedItem: Reference;
    /**
     * Any additional identifier(s) for the catalog item, in the same granularity or concept
     * Used in supporting related concepts, e.g. NDC to RxNorm.
     */
    additionalIdentifier?: Identifier[];
    /**
     * Classification (category or class) of the item entry
     * Classes of devices, or ATC for medication.
     */
    classification?: CodeableConcept[];
    /**
     * The time period in which this catalog entry is expected to be active
     * The time period in which this catalog entry is expected to be active.
     */
    validityPeriod?: Period;
    /**
     * The date until which this catalog entry is expected to be active
     * The date until which this catalog entry is expected to be active.
     */
    validTo?: dateTime;
    /**
     * Extension for validTo
     **/
    _validTo?: Element;
    /**
     * When was this catalog last updated
     * Typically date of issue is different from the beginning of the validity. This can be used to see when an item was last updated.
     * Perhaps not needed - if we use fhir resource metadata.
     */
    lastUpdated?: dateTime;
    /**
     * Extension for lastUpdated
     **/
    _lastUpdated?: Element;
    /**
     * Additional characteristics of the catalog entry
     * Used for examplefor Out of Formulary, or any specifics.
     */
    additionalCharacteristic?: CodeableConcept[];
    /**
     * Additional classification of the catalog entry
     * User for example for ATC classification, or.
     */
    additionalClassification?: CodeableConcept[];
    /**
     * An item that this catalog entry is related to
     * Used for example, to point to a substance, or to a device used to administer a medication.
     */
    relatedEntry?: CatalogEntryRelatedEntry[];
    /**
     * draft | active | retired | unknown
     * Used to support catalog exchange even for unsupported products, e.g. getting list of medications even if not prescribable.
     */
    status?: CatalogEntryPublicationStatus;
}
/**
 * Who performed charged service
 * Indicates who or what performed or participated in the charged service.
 */
export interface ChargeItemPerformer extends BackboneElement {
    /**
     * What type of performance was done
     * Describes the type of performance or participation(e.g. primary surgeon, anesthesiologiest, etc.).
     */
    function?: CodeableConcept;
    /**
     * Individual who was performing
     * The device, practitioner, etc. who performed or participated in the service.
     */
    actor: Reference;
}
/**
 * Item containing charge code(s) associated with the provision of healthcare provider products
 * 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.
 */
export interface ChargeItem extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'ChargeItem';
    /**
     * Business Identifier for item
     * Identifiers assigned to this event performer or other systems.
     */
    identifier?: Identifier[];
    /**
     * Defining information about the code of this charge item
     * References the (external) source of pricing information, rules of application for the code this ChargeItem uses.
     */
    definitionUri?: uri[];
    /**
     * Extension for definitionUri
     **/
    _definitionUri?: Element[];
    /**
     * Resource defining the code of this ChargeItem
     * References the source of pricing information, rules of application for the code this ChargeItem uses.
     */
    definitionCanonical?: canonical[];
    /**
     * Extension for definitionCanonical
     **/
    _definitionCanonical?: Element[];
    /**
     * Part of referenced ChargeItem
     * ChargeItems can be grouped to larger ChargeItems covering the whole set.
     */
    partOf?: Reference[];
    /**
     * A code that identifies the charge, like a billing code
     * A code that identifies the charge, like a billing code.
     */
    code: CodeableConcept;
    /**
     * Individual service was done for/to
     * The individual or set of individuals the action is being or was performed on.
     */
    subject: Reference;
    /**
     * Encounter / Episode associated with event
     * The encounter or episode of care that establishes the context for this event.
     */
    context?: Reference;
    /**
     * When the charged service was applied
     * Date/time(s) or duration when the charged service was applied.
     * The list of types may be constrained as appropriate for the type of charge item.
     */
    occurrenceDateTime?: dateTime;
    /**
     * Extension for occurrenceDateTime
     **/
    _occurrenceDateTime?: Element;
    /**
     * When the charged service was applied
     * Date/time(s) or duration when the charged service was applied.
     * The list of types may be constrained as appropriate for the type of charge item.
     */
    occurrencePeriod?: Period;
    /**
     * When the charged service was applied
     * Date/time(s) or duration when the charged service was applied.
     * The list of types may be constrained as appropriate for the type of charge item.
     */
    occurrenceTiming?: Timing;
    /**
     * Who performed charged service
     * Indicates who or what performed or participated in the charged service.
     */
    performer?: ChargeItemPerformer[];
    /**
     * Organization providing the charged service
     * The organization requesting the service.
     * Practitioners and Devices can be associated with multiple organizations. It has to be made clear, on behalf of which Organization the services have been rendered.
     */
    performingOrganization?: Reference;
    /**
     * Organization requesting the charged service
     * The organization performing the service.
     * The rendered Service might not be associated with a Request. This property indicates which Organization requested the services to be rendered. (In many cases, this may just be the Department associated with the Encounter.location).
     */
    requestingOrganization?: Reference;
    /**
     * Organization that has ownership of the (potential, future) revenue
     * The financial cost center permits the tracking of charge attribution.
     * The costCenter could either be given as a reference to an Organization(Role) resource or as the identifier of the cost center determined by Reference.identifier.value and Reference.identifier.system, depending on use case requirements.
     */
    costCenter?: Reference;
    /**
     * Quantity of which the charge item has been serviced
     * Quantity of which the charge item has been serviced.
     * In many cases this may just be a value, if the underlying units are implicit in the definition of the charge item code.
     */
    quantity?: Quantity;
    /**
     * Anatomical location, if relevant
     * The anatomical location where the related service has been applied.
     * Only used if not implicit in code found in Condition.code. If the use case requires attributes from the BodySite resource (e.g. to identify and track separately) then use the standard extension [bodySite](extension-bodysite.html).  May be a summary code, or a reference to a very precise definition of the location, or both.
     */
    bodysite?: CodeableConcept[];
    /**
     * Factor overriding the associated rules
     * Factor overriding the factor determined by the rules associated with the code.
     * There is no reason to carry the factor in the instance of a ChargeItem unless special circumstances require a manual override. The factors are usually defined by a set of rules in a back catalogue of the billing codes  (see ChargeItem.definition). Derived profiles may require a ChargeItem.overrideReason to be provided if either factor or price are manually overridden.
     */
    factorOverride?: decimal;
    /**
     * Extension for factorOverride
     **/
    _factorOverride?: Element;
    /**
     * Price overriding the associated rules
     * Total price of the charge overriding the list price associated with the code.
     * There is no reason to carry the price in the instance of a ChargeItem unless circumstances require a manual override. The list prices or are usually defined in a back catalogue of the billing codes  (see ChargeItem.definition). Derived profiles may require a ChargeItem.overrideReason to be provided if either factor or price are manually overridden.
     */
    priceOverride?: Money;
    /**
     * Reason for overriding the list price/factor
     * 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.
     * Derived Profiles may choose to add invariants requiring this field to be populated if either priceOverride or factorOverride have been filled.
     */
    overrideReason?: string;
    /**
     * Extension for overrideReason
     **/
    _overrideReason?: Element;
    /**
     * Individual who was entering
     * The device, practitioner, etc. who entered the charge item.
     * The enterer is also the person considered responsible for factor/price overrides if applicable.
     */
    enterer?: Reference;
    /**
     * Date the charge item was entered
     * Date the charge item was entered.
     * The actual date when the service associated with the charge has been rendered is captured in occurrence[x].
     */
    enteredDate?: dateTime;
    /**
     * Extension for enteredDate
     **/
    _enteredDate?: Element;
    /**
     * Why was the charged  service rendered?
     * Describes why the event occurred in coded or textual form.
     * If the application of the charge item requires a reason to be given, it can be captured here. Textual reasons can be captured using reasonCode.text.
     */
    reason?: CodeableConcept[];
    /**
     * Which rendered service is being charged?
     * Indicated the rendered service that caused this charge.
     */
    service?: Reference[];
    /**
     * Product charged
     * Identifies the device, food, drug or other product being charged either by type code or reference to an instance.
     */
    productReference?: Reference;
    /**
     * Product charged
     * Identifies the device, food, drug or other product being charged either by type code or reference to an instance.
     */
    productCodeableConcept?: CodeableConcept;
    /**
     * Account to place this charge
     * Account into which this ChargeItems belongs.
     * Systems posting the ChargeItems might not always be able to determine, which accounts the Items need to be places into. It is up to the postprocessing Financial System to apply internal rules to decide based on the Encounter/EpisodeOfCare/Patient/Coverage context and the type of ChargeItem, which Account is appropriate.
     */
    account?: Reference[];
    /**
     * Comments made about the ChargeItem
     * Comments made about the event by the performer, subject or other participants.
     */
    note?: Annotation[];
    /**
     * Further information supporting this charge
     * Further information supporting this charge.
     */
    supportingInformation?: Reference[];
    /**
     * planned | billable | not-billable | aborted | billed | entered-in-error | unknown
     * The current state of the ChargeItem.
     * Unknown does not represent "other" - one of the defined statuses must apply.  Unknown is used when the authoring system is not sure what the current status is.

This element is labeled as a modifier because the status contains the code entered-in-error that marks the charge item as not currently valid.
     */
    status: ChargeItemStatus;
}
/**
 * Whether or not the billing code is applicable
 * Expressions that describe applicability criteria for the billing code.
 * The applicability conditions can be used to ascertain whether a billing item is allowed in a specific context. E.g. some billing codes may only be applicable in out-patient settings, only to male/female patients or only to children.
 */
export interface ChargeItemDefinitionApplicability extends BackboneElement {
    /**
     * Natural language description of the condition
     * A brief, natural language description of the condition that effectively communicates the intended semantics.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Language of the expression
     * The media type of the language for the expression, e.g. "text/cql" for Clinical Query Language expressions or "text/fhirpath" for FHIRPath expressions.
     */
    language?: string;
    /**
     * Extension for language
     **/
    _language?: Element;
    /**
     * Boolean-valued expression
     * An expression that returns true or false, indicating whether the condition is satisfied. When using FHIRPath expressions, the %context environment variable must be replaced at runtime with the ChargeItem resource to which this definition is applied.
     * Please note that FHIRPath Expressions can only be evaluated in the scope of the current ChargeItem resource to which this definition is being applied.
FHIRPath expressions can traverse into other resources linked from the ChargeItem resource, however, testing rules such as that a billing code may be billed only once per encounter need a wider scope. In such scenarios, CQL may be the appropriate choice.
     */
    expression?: string;
    /**
     * Extension for expression
     **/
    _expression?: Element;
}
/**
 * Components of total line item price
 * The price for a ChargeItem may be calculated as a base price with surcharges/deductions that apply in certain conditions. A ChargeItemDefinition resource that defines the prices, factors and conditions that apply to a billing code is currently under development. The priceComponent element can be used to offer transparency to the recipient of the Invoice of how the prices have been calculated.
 */
export interface ChargeItemDefinitionPropertyGroupPriceComponent extends BackboneElement {
    /**
     * Code identifying the specific component
     * A code that identifies the component. Codes may be used to differentiate between kinds of taxes, surcharges, discounts etc.
     */
    code?: CodeableConcept;
    /**
     * Factor used for calculating this component
     * The factor that has been applied on the base price for calculating this component.
     */
    factor?: decimal;
    /**
     * Extension for factor
     **/
    _factor?: Element;
    /**
     * Monetary amount associated with this component
     * The amount calculated for this component.
     */
    amount?: Money;
    /**
     * base | surcharge | deduction | discount | tax | informational
     * This code identifies the type of the component.
     */
    type: ChargeItemDefinitionPriceComponentType;
}
/**
 * Group of properties which are applicable under the same conditions
 * Group of properties which are applicable under the same conditions. If no applicability rules are established for the group, then all properties always apply.
 */
export interface ChargeItemDefinitionPropertyGroup extends BackboneElement {
    /**
     * Conditions under which the priceComponent is applicable
     * Expressions that describe applicability criteria for the priceComponent.
     * The applicability conditions can be used to ascertain whether a billing item is allowed in a specific context. E.g. some billing codes may only be applicable in out-patient settings, only to male/female patients or only to children.
     */
    applicability?: ChargeItemDefinitionApplicability[];
    /**
     * Components of total line item price
     * The price for a ChargeItem may be calculated as a base price with surcharges/deductions that apply in certain conditions. A ChargeItemDefinition resource that defines the prices, factors and conditions that apply to a billing code is currently under development. The priceComponent element can be used to offer transparency to the recipient of the Invoice of how the prices have been calculated.
     */
    priceComponent?: ChargeItemDefinitionPropertyGroupPriceComponent[];
}
/**
 * Definition of properties and rules about how the price and the applicability of a ChargeItem can be determined
 * The ChargeItemDefinition resource provides the properties that apply to the (billing) codes necessary to calculate costs and prices. The properties may differ largely depending on type and realm, therefore this resource gives only a rough structure and requires profiling for each type of billing code system.
 */
export interface ChargeItemDefinition extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'ChargeItemDefinition';
    /**
     * Canonical identifier for this charge item definition, represented as a URI (globally unique)
     * An absolute URI that is used to identify this charge item definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this charge item definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the charge item definition is stored on different servers.
     * Can be a urn:uuid: or a urn:oid: but real http: addresses are preferred.  Multiple instances may share the same URL if they have a distinct version.

The determination of when to create a new version of a resource (same url, new version) vs. defining a new artifact is up to the author.  Considerations for making this decision are found in [Technical and Business Versions](resource.html#versions).

In some cases, the resource can no longer be found at the stated url, but the url itself cannot change. Implementations can use the [meta.source](resource.html#meta) element to indicate where the current master source of the resource can be found.
     */
    url: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Additional identifier for the charge item definition
     * A formal identifier that is used to identify this charge item definition when it is represented in other formats, or referenced in a specification, model, design or an instance.
     * Typically, this is used for identifiers that can go in an HL7 V3 II (instance identifier) data type, and can then identify this charge item definition outside of FHIR, where it is not possible to use the logical URI.
     */
    identifier?: Identifier[];
    /**
     * Business version of the charge item definition
     * The identifier that is used to identify this version of the charge item definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the charge item 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.
     * There may be different charge item definition instances that have the same identifier but different versions.  The version can be appended to the url in a reference to allow a reference to a particular business version of the charge item definition with the format [url]|[version].
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
    /**
     * Name for this charge item definition (human friendly)
     * A short, descriptive, user-friendly title for the charge item definition.
     * This name does not need to be machine-processing friendly and may contain punctuation, white-space, etc.
     */
    title?: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * Underlying externally-defined charge item definition
     * The URL pointing to an externally-defined charge item definition that is adhered to in whole or in part by this definition.
     */
    derivedFromUri?: uri[];
    /**
     * Extension for derivedFromUri
     **/
    _derivedFromUri?: Element[];
    /**
     * A larger definition of which this particular definition is a component or step
     * A larger definition of which this particular definition is a component or step.
     */
    partOf?: canonical[];
    /**
     * Extension for partOf
     **/
    _partOf?: Element[];
    /**
     * Completed or terminated request(s) whose function is taken by this new request
     * As new versions of a protocol or guideline are defined, allows identification of what versions are replaced by a new instance.
     */
    replaces?: canonical[];
    /**
     * Extension for replaces
     **/
    _replaces?: Element[];
    /**
     * For testing purposes, not real usage
     * A Boolean value to indicate that this charge item definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.
     * Allows filtering of charge item definitions that are appropriate for use versus not.
     */
    experimental?: boolean;
    /**
     * Extension for experimental
     **/
    _experimental?: Element;
    /**
     * Date last changed
     * The date  (and optionally time) when the charge item definition was published. The date must change 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 charge item definition changes.
     * Note that this is not the same as the resource last-modified-date, since the resource may be a secondary representation of the charge item definition. Additional specific dates may be added as extensions or be found by consulting Provenances associated with past versions of the resource.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Name of the publisher (organization or individual)
     * The name of the organization or individual that published the charge item definition.
     * Usually an organization but may be an individual. The publisher (or steward) of the charge item definition is the organization or individual primarily responsible for the maintenance and upkeep of the charge item definition. This is not necessarily the same individual or organization that developed and initially authored the content. The publisher is the primary point of contact for questions or issues with the charge item definition. This item SHOULD be populated unless the information is available from context.
     */
    publisher?: string;
    /**
     * Extension for publisher
     **/
    _publisher?: Element;
    /**
     * Contact details for the publisher
     * Contact details to assist a user in finding and communicating with the publisher.
     * May be a web site, an email address, a telephone number, etc.
     */
    contact?: ContactDetail[];
    /**
     * Natural language description of the charge item definition
     * A free text natural language description of the charge item definition from a consumer's perspective.
     * This description can be used to capture details such as why the charge item definition was built, comments about misuse, instructions for clinical use and interpretation, literature references, examples from the paper world, etc. It is not a rendering of the charge item definition as conveyed in the 'text' field of the resource itself. This item SHOULD be populated unless the information is available from context (e.g. the language of the charge item definition is presumed to be the predominant language in the place the charge item definition was created).
     */
    description?: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * The context that the content is intended to support
     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate charge item definition instances.
     * When multiple useContexts are specified, there is no expectation that all or any of the contexts apply.
     */
    useContext?: UsageContext[];
    /**
     * Intended jurisdiction for charge item definition (if applicable)
     * A legal or geographic region in which the charge item definition is intended to be used.
     * It may be possible for the charge item definition to be used in jurisdictions other than those for which it was originally designed or intended.
     */
    jurisdiction?: CodeableConcept[];
    /**
     * Use and/or publishing restrictions
     * A copyright statement relating to the charge item definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the charge item definition.
     */
    copyright?: markdown;
    /**
     * Extension for copyright
     **/
    _copyright?: Element;
    /**
     * When the charge item definition was approved by publisher
     * The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
     * The 'date' element may be more recent than the approval date because of minor changes or editorial corrections.
     */
    approvalDate?: date;
    /**
     * Extension for approvalDate
     **/
    _approvalDate?: Element;
    /**
     * When the charge item definition was last reviewed
     * The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.
     * If specified, this date follows the original approval date.
     */
    lastReviewDate?: date;
    /**
     * Extension for lastReviewDate
     **/
    _lastReviewDate?: Element;
    /**
     * When the charge item definition is expected to be used
     * The period during which the charge item definition content was or is planned to be in active use.
     * The effective period for a charge item definition  determines when the content is applicable for usage and is independent of publication and review dates. For example, a measure intended to be used for the year 2016 might be published in 2015.
     */
    effectivePeriod?: Period;
    /**
     * Billing codes or product types this definition applies to
     * The defined billing details in this resource pertain to the given billing code.
     */
    code?: CodeableConcept;
    /**
     * Instances this definition applies to
     * The defined billing details in this resource pertain to the given product instance(s).
     * In case of highly customized, individually produced or fitted devices/substances, the pricing information may be different for each instance of the product. This reference links pricing details to specific product instances.
     */
    instance?: Reference[];
    /**
     * Whether or not the billing code is applicable
     * Expressions that describe applicability criteria for the billing code.
     * The applicability conditions can be used to ascertain whether a billing item is allowed in a specific context. E.g. some billing codes may only be applicable in out-patient settings, only to male/female patients or only to children.
     */
    applicability?: ChargeItemDefinitionApplicability[];
    /**
     * Group of properties which are applicable under the same conditions
     * Group of properties which are applicable under the same conditions. If no applicability rules are established for the group, then all properties always apply.
     */
    propertyGroup?: ChargeItemDefinitionPropertyGroup[];
    /**
     * draft | active | retired | unknown
     * The current state of the ChargeItemDefinition.
     * Allows filtering of charge item definitions that are appropriate for use versus not.
     */
    status: ChargeItemDefinitionPublicationStatus;
}
/**
 * Prior or corollary claims
 * Other claims which are related to this claim such as prior submissions or claims for related services or for the same event.
 * For example,  for the original treatment and follow-up exams.
 */
export interface ClaimRelated extends BackboneElement {
    /**
     * Reference to the related claim
     * Reference to a related claim.
     */
    claim?: Reference;
    /**
     * How the reference claim is related
     * A code to convey how the claims are related.
     * For example, prior claim or umbrella.
     */
    relationship?: CodeableConcept;
    /**
     * File or case reference
     * An alternate organizational reference to the case or file to which this particular claim pertains.
     * For example, Property/Casualty insurer claim # or Workers Compensation case # .
     */
    reference?: Identifier;
}
/**
 * Recipient of benefits payable
 * The party to be reimbursed for cost of the products and services according to the terms of the policy.
 * Often providers agree to receive the benefits payable to reduce the near-term costs to the patient. The insurer may decline to pay the provider and choose to pay the subscriber instead.
 */
export interface ClaimPayee extends BackboneElement {
    /**
     * Category of recipient
     * Type of Party to be reimbursed: subscriber, provider, other.
     */
    type: CodeableConcept;
    /**
     * Recipient reference
     * Reference to the individual or organization to whom any payment will be made.
     * Not required if the payee is 'subscriber' or 'provider'.
     */
    party?: Reference;
}
/**
 * Members of the care team
 * The members of the team who provided the products and services.
 */
export interface ClaimCareTeam extends BackboneElement {
    /**
     * Order of care team
     * A number to uniquely identify care team entries.
     */
    sequence: positiveInt;
    /**
     * Extension for sequence
     **/
    _sequence?: Element;
    /**
     * Practitioner or organization
     * Member of the team who provided the product or service.
     */
    provider: Reference;
    /**
     * Indicator of the lead practitioner
     * The party who is billing and/or responsible for the claimed products or services.
     * Responsible might not be required when there is only a single provider listed.
     */
    responsible?: boolean;
    /**
     * Extension for responsible
     **/
    _responsible?: Element;
    /**
     * Function within the team
     * The lead, assisting or supervising practitioner and their discipline if a multidisciplinary team.
     * Role might not be required when there is only a single provider listed.
     */
    role?: CodeableConcept;
    /**
     * Practitioner credential or specialization
     * The qualification of the practitioner which is applicable for this service.
     */
    qualification?: CodeableConcept;
}
/**
 * Supporting information
 * Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.
 * Often there are multiple jurisdiction specific valuesets which are required.
 */
export interface ClaimSupportingInfo extends BackboneElement {
    /**
     * Information instance identifier
     * A number to uniquely identify supporting information entries.
     */
    sequence: positiveInt;
    /**
     * Extension for sequence
     **/
    _sequence?: Element;
    /**
     * Classification of the supplied information
     * The general class of the information supplied: information; exception; accident, employment; onset, etc.
     * This may contain a category for the local bill type codes.
     */
    category: CodeableConcept;
    /**
     * Type of information
     * System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient  for which care is sought.
     */
    code?: CodeableConcept;
    /**
     * When it occurred
     * The date when or period to which this information refers.
     */
    timingDate?: date;
    /**
     * Extension for timingDate
     **/
    _timingDate?: Element;
    /**
     * When it occurred
     * The date when or period to which this information refers.
     */
    timingPeriod?: Period;
    /**
     * Data to be provided
     * Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.
     * Could be used to provide references to other resources, document. For example could contain a PDF in an Attachment of the Police Report for an Accident.
     */
    valueBoolean?: boolean;
    /**
     * Extension for valueBoolean
     **/
    _valueBoolean?: Element;
    /**
     * Data to be provided
     * Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.
     * Could be used to provide references to other resources, document. For example could contain a PDF in an Attachment of the Police Report for an Accident.
     */
    valueString?: string;
    /**
     * Extension for valueString
     **/
    _valueString?: Element;
    /**
     * Data to be provided
     * Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.
     * Could be used to provide references to other resources, document. For example could contain a PDF in an Attachment of the Police Report for an Accident.
     */
    valueQuantity?: Quantity;
    /**
     * Data to be provided
     * Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.
     * Could be used to provide references to other resources, document. For example could contain a PDF in an Attachment of the Police Report for an Accident.
     */
    valueAttachment?: Attachment;
    /**
     * Data to be provided
     * Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.
     * Could be used to provide references to other resources, document. For example could contain a PDF in an Attachment of the Police Report for an Accident.
     */
    valueReference?: Reference;
    /**
     * Explanation for the information
     * Provides the reason in the situation where a reason code is required in addition to the content.
     * For example: the reason for the additional stay, or why a tooth is  missing.
     */
    reason?: CodeableConcept;
}
/**
 * Pertinent diagnosis information
 * Information about diagnoses relevant to the claim items.
 */
export interface ClaimDiagnosis extends BackboneElement {
    /**
     * Diagnosis instance identifier
     * A number to uniquely identify diagnosis entries.
     * Diagnosis are presented in list order to their expected importance: primary, secondary, etc.
     */
    sequence: positiveInt;
    /**
     * Extension for sequence
     **/
    _sequence?: Element;
    /**
     * Nature of illness or problem
     * The nature of illness or problem in a coded form or as a reference to an external defined Condition.
     */
    diagnosisCodeableConcept?: CodeableConcept;
    /**
     * Nature of illness or problem
     * The nature of illness or problem in a coded form or as a reference to an external defined Condition.
     */
    diagnosisReference?: Reference;
    /**
     * Timing or nature of the diagnosis
     * When the condition was observed or the relative ranking.
     * For example: admitting, primary, secondary, discharge.
     */
    type?: CodeableConcept[];
    /**
     * Present on admission
     * Indication of whether the diagnosis was present on admission to a facility.
     */
    onAdmission?: CodeableConcept;
    /**
     * Package billing code
     * A package billing code or bundle code used to group products and services to a particular health condition (such as heart attack) which is based on a predetermined grouping code system.
     * For example DRG (Diagnosis Related Group) or a bundled billing code. A patient may have a diagnosis of a Myocardial Infarction and a DRG for HeartAttack would be assigned. The Claim item (and possible subsequent claims) would refer to the DRG for those line items that were for services related to the heart attack event.
     */
    packageCode?: CodeableConcept;
}
/**
 * Clinical procedures performed
 * Procedures performed on the patient relevant to the billing items with the claim.
 */
export interface ClaimProcedure extends BackboneElement {
    /**
     * Procedure instance identifier
     * A number to uniquely identify procedure entries.
     */
    sequence: positiveInt;
    /**
     * Extension for sequence
     **/
    _sequence?: Element;
    /**
     * Category of Procedure
     * When the condition was observed or the relative ranking.
     * For example: primary, secondary.
     */
    type?: CodeableConcept[];
    /**
     * When the procedure was performed
     * Date and optionally time the procedure was performed.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Specific clinical procedure
     * The code or reference to a Procedure resource which identifies the clinical intervention performed.
     */
    procedureCodeableConcept?: CodeableConcept;
    /**
     * Specific clinical procedure
     * The code or reference to a Procedure resource which identifies the clinical intervention performed.
     */
    procedureReference?: Reference;
    /**
     * Unique device identifier
     * Unique Device Identifiers associated with this line item.
     */
    udi?: Reference[];
}
/**
 * Patient insurance information
 * Financial instruments for reimbursement for the health care products and services specified on the claim.
 * All insurance coverages for the patient which may be applicable for reimbursement, of the products and services listed in the claim, are typically provided in the claim to allow insurers to confirm the ordering of the insurance coverages relative to local 'coordination of benefit' rules. One coverage (and only one) with 'focal=true' is to be used in the adjudication of this claim. Coverages appearing before the focal Coverage in the list, and where 'Coverage.subrogation=false', should provide a reference to the ClaimResponse containing the adjudication results of the prior claim.
 */
export interface ClaimInsurance extends BackboneElement {
    /**
     * Insurance instance identifier
     * A number to uniquely identify insurance entries and provide a sequence of coverages to convey coordination of benefit order.
     */
    sequence: positiveInt;
    /**
     * Extension for sequence
     **/
    _sequence?: Element;
    /**
     * Coverage to be used for adjudication
     * A flag to indicate that this Coverage is to be used for adjudication of this claim when set to true.
     * A patient may (will) have multiple insurance policies which provide reimbursement for healthcare services and products. For example a person may also be covered by their spouse's policy and both appear in the list (and may be from the same insurer). This flag will be set to true for only one of the listed policies and that policy will be used for adjudicating this claim. Other claims would be created to request adjudication against the other listed policies.
     */
    focal: boolean;
    /**
     * Extension for focal
     **/
    _focal?: Element;
    /**
     * Pre-assigned Claim number
     * The business identifier to be used when the claim is sent for adjudication against this insurance policy.
     * Only required in jurisdictions where insurers, rather than the provider, are required to send claims to  insurers that appear after them in the list. This element is not required when 'subrogation=true'.
     */
    identifier?: Identifier;
    /**
     * Insurance information
     * Reference to the insurance card level information contained in the Coverage resource. The coverage issuing insurer will use these details to locate the patient's actual coverage within the insurer's information system.
     */
    coverage: Reference;
    /**
     * Additional provider contract number
     * A business agreement number established between the provider and the insurer for special business processing purposes.
     */
    businessArrangement?: string;
    /**
     * Extension for businessArrangement
     **/
    _businessArrangement?: Element;
    /**
     * Prior authorization reference number
     * Reference numbers previously provided by the insurer to the provider to be quoted on subsequent claims containing services or products related to the prior authorization.
     * This value is an alphanumeric string that may be provided over the phone, via text, via paper, or within a ClaimResponse resource and is not a FHIR Identifier.
     */
    preAuthRef?: string[];
    /**
     * Extension for preAuthRef
     **/
    _preAuthRef?: Element[];
    /**
     * Adjudication results
     * The result of the adjudication of the line items for the Coverage specified in this insurance.
     * Must not be specified when 'focal=true' for this insurance.
     */
    claimResponse?: Reference;
}
/**
 * Details of the event
 * Details of an accident which resulted in injuries which required the products and services listed in the claim.
 */
export interface ClaimAccident extends BackboneElement {
    /**
     * When the incident occurred
     * Date of an accident event  related to the products and services contained in the claim.
     * The date of the accident has to precede the dates of the products and services but within a reasonable timeframe.
     */
    date: date;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * The nature of the accident
     * The type or context of the accident event for the purposes of selection of potential insurance coverages and determination of coordination between insurers.
     */
    type?: CodeableConcept;
    /**
     * Where the event occurred
     * The physical location of the accident event.
     */
    locationAddress?: Address;
    /**
     * Where the event occurred
     * The physical location of the accident event.
     */
    locationReference?: Reference;
}
/**
 * Product or service provided
 * A claim detail line. Either a simple (a product or service) or a 'group' of sub-details which are simple items.
 */
export interface ClaimItemDetailSubDetail extends BackboneElement {
    /**
     * Item instance identifier
     * A number to uniquely identify item entries.
     */
    sequence: positiveInt;
    /**
     * Extension for sequence
     **/
    _sequence?: Element;
    /**
     * Revenue or cost center code
     * The type of revenue or cost center providing the product and/or service.
     */
    revenue?: CodeableConcept;
    /**
     * Benefit classification
     * Code to identify the general type of benefits under which products and services are provided.
     * Examples include Medical Care, Periodontics, Renal Dialysis, Vision Coverage.
     */
    category?: CodeableConcept;
    /**
     * Billing, service, product, or drug code
     * When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.
     * If this is an actual service or product line, i.e. not a Group, then use code to indicate the Professional Service or Product supplied (e.g. 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 e.g. 'glasses' or 'compound'.
     */
    productOrService: CodeableConcept;
    /**
     * Service/Product billing modifiers
     * Item typification or modifiers codes to convey additional context for the product or service.
     * For example in 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.
     */
    modifier?: CodeableConcept[];
    /**
     * Program the product or service is provided under
     * Identifies the program under which this may be recovered.
     * For example: Neonatal program, child dental program or drug users recovery program.
     */
    programCode?: CodeableConcept[];
    /**
     * Count of products or services
     * The number of repetitions of a service or product.
     */
    quantity?: Quantity;
    /**
     * Fee, charge or cost per item
     * If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.
     */
    unitPrice?: Money;
    /**
     * Price scaling factor
     * 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.
     * To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).
     */
    factor?: decimal;
    /**
     * Extension for factor
     **/
    _factor?: Element;
    /**
     * Total item cost
     * The quantity times the unit price for an additional service or product or charge.
     * For example, the formula: quantity * unitPrice * factor  = net. Quantity and factor are assumed to be 1 if not supplied.
     */
    net?: Money;
    /**
     * Unique device identifier
     * Unique Device Identifiers associated with this line item.
     */
    udi?: Reference[];
}
/**
 * Product or service provided
 * A claim detail line. Either a simple (a product or service) or a 'group' of sub-details which are simple items.
 */
export interface ClaimItemDetail extends BackboneElement {
    /**
     * Item instance identifier
     * A number to uniquely identify item entries.
     */
    sequence: positiveInt;
    /**
     * Extension for sequence
     **/
    _sequence?: Element;
    /**
     * Revenue or cost center code
     * The type of revenue or cost center providing the product and/or service.
     */
    revenue?: CodeableConcept;
    /**
     * Benefit classification
     * Code to identify the general type of benefits under which products and services are provided.
     * Examples include Medical Care, Periodontics, Renal Dialysis, Vision Coverage.
     */
    category?: CodeableConcept;
    /**
     * Billing, service, product, or drug code
     * When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.
     * If this is an actual service or product line, i.e. not a Group, then use code to indicate the Professional Service or Product supplied (e.g. 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 e.g. 'glasses' or 'compound'.
     */
    productOrService: CodeableConcept;
    /**
     * Service/Product billing modifiers
     * Item typification or modifiers codes to convey additional context for the product or service.
     * For example in 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.
     */
    modifier?: CodeableConcept[];
    /**
     * Program the product or service is provided under
     * Identifies the program under which this may be recovered.
     * For example: Neonatal program, child dental program or drug users recovery program.
     */
    programCode?: CodeableConcept[];
    /**
     * Count of products or services
     * The number of repetitions of a service or product.
     */
    quantity?: Quantity;
    /**
     * Fee, charge or cost per item
     * If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.
     */
    unitPrice?: Money;
    /**
     * Price scaling factor
     * 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.
     * To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).
     */
    factor?: decimal;
    /**
     * Extension for factor
     **/
    _factor?: Element;
    /**
     * Total item cost
     * The quantity times the unit price for an additional service or product or charge.
     * For example, the formula: quantity * unitPrice * factor  = net. Quantity and factor are assumed to be 1 if not supplied.
     */
    net?: Money;
    /**
     * Unique device identifier
     * Unique Device Identifiers associated with this line item.
     */
    udi?: Reference[];
    /**
     * Product or service provided
     * A claim detail line. Either a simple (a product or service) or a 'group' of sub-details which are simple items.
     */
    subDetail?: ClaimItemDetailSubDetail[];
}
/**
 * Product or service provided
 * A claim line. Either a simple  product or service or a 'group' of details which can each be a simple items or groups of sub-details.
 */
export interface ClaimItem extends BackboneElement {
    /**
     * Item instance identifier
     * A number to uniquely identify item entries.
     */
    sequence: positiveInt;
    /**
     * Extension for sequence
     **/
    _sequence?: Element;
    /**
     * Applicable careTeam members
     * CareTeam members related to this service or product.
     */
    careTeamSequence?: positiveInt[];
    /**
     * Extension for careTeamSequence
     **/
    _careTeamSequence?: Element[];
    /**
     * Applicable diagnoses
     * Diagnosis applicable for this service or product.
     */
    diagnosisSequence?: positiveInt[];
    /**
     * Extension for diagnosisSequence
     **/
    _diagnosisSequence?: Element[];
    /**
     * Applicable procedures
     * Procedures applicable for this service or product.
     */
    procedureSequence?: positiveInt[];
    /**
     * Extension for procedureSequence
     **/
    _procedureSequence?: Element[];
    /**
     * Applicable exception and supporting information
     * Exceptions, special conditions and supporting information applicable for this service or product.
     */
    informationSequence?: positiveInt[];
    /**
     * Extension for informationSequence
     **/
    _informationSequence?: Element[];
    /**
     * Revenue or cost center code
     * The type of revenue or cost center providing the product and/or service.
     */
    revenue?: CodeableConcept;
    /**
     * Benefit classification
     * Code to identify the general type of benefits under which products and services are provided.
     * Examples include Medical Care, Periodontics, Renal Dialysis, Vision Coverage.
     */
    category?: CodeableConcept;
    /**
     * Billing, service, product, or drug code
     * When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.
     * If this is an actual service or product line, i.e. not a Group, then use code to indicate the Professional Service or Product supplied (e.g. 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 e.g. 'glasses' or 'compound'.
     */
    productOrService: CodeableConcept;
    /**
     * Product or service billing modifiers
     * Item typification or modifiers codes to convey additional context for the product or service.
     * For example in Oral whether the treatment is cosmetic or associated with TMJ, or for Medical whether the treatment was outside the clinic or outside of office hours.
     */
    modifier?: CodeableConcept[];
    /**
     * Program the product or service is provided under
     * Identifies the program under which this may be recovered.
     * For example: Neonatal program, child dental program or drug users recovery program.
     */
    programCode?: CodeableConcept[];
    /**
     * Date or dates of service or product delivery
     * The date or dates when the service or product was supplied, performed or completed.
     */
    servicedDate?: date;
    /**
     * Extension for servicedDate
     **/
    _servicedDate?: Element;
    /**
     * Date or dates of service or product delivery
     * The date or dates when the service or product was supplied, performed or completed.
     */
    servicedPeriod?: Period;
    /**
     * Place of service or where product was supplied
     * Where the product or service was provided.
     */
    locationCodeableConcept?: CodeableConcept;
    /**
     * Place of service or where product was supplied
     * Where the product or service was provided.
     */
    locationAddress?: Address;
    /**
     * Place of service or where product was supplied
     * Where the product or service was provided.
     */
    locationReference?: Reference;
    /**
     * Count of products or services
     * The number of repetitions of a service or product.
     */
    quantity?: Quantity;
    /**
     * Fee, charge or cost per item
     * If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.
     */
    unitPrice?: Money;
    /**
     * Price scaling factor
     * 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.
     * To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).
     */
    factor?: decimal;
    /**
     * Extension for factor
     **/
    _factor?: Element;
    /**
     * Total item cost
     * The quantity times the unit price for an additional service or product or charge.
     * For example, the formula: quantity * unitPrice * factor  = net. Quantity and factor are assumed to be 1 if not supplied.
     */
    net?: Money;
    /**
     * Unique device identifier
     * Unique Device Identifiers associated with this line item.
     */
    udi?: Reference[];
    /**
     * Anatomical location
     * Physical service site on the patient (limb, tooth, etc.).
     * For example: Providing a tooth code, allows an insurer to identify a provider performing a filling on a tooth that was previously removed.
     */
    bodySite?: CodeableConcept;
    /**
     * Anatomical sub-location
     * A region or surface of the bodySite, e.g. limb region or tooth surface(s).
     */
    subSite?: CodeableConcept[];
    /**
     * Encounters related to this billed item
     * The Encounters during which this Claim was created or to which the creation of this record is tightly associated.
     * This will typically be the encounter the event occurred within, but some activities may be initiated prior to or after the official completion of an encounter but still be tied to the context of the encounter.
     */
    encounter?: Reference[];
    /**
     * Product or service provided
     * A claim detail line. Either a simple (a product or service) or a 'group' of sub-details which are simple items.
     */
    detail?: ClaimItemDetail[];
}
/**
 * Claim, Pre-determination or Pre-authorization
 * A provider issued list of professional services and products which have been provided, or are to be provided, to a patient which is sent to an insurer for reimbursement.
 * The Claim resource fulfills three information request requirements: Claim - a request for adjudication for reimbursement for products and/or services provided; Preauthorization - a request to authorize the future provision of products and/or services including an anticipated adjudication; and, Predetermination - a request for a non-bind adjudication of possible future products and/or services.
 */
export interface Claim extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Claim';
    /**
     * Business Identifier for claim
     * A unique identifier assigned to this claim.
     */
    identifier?: Identifier[];
    /**
     * Category or discipline
     * The category of claim, e.g. oral, pharmacy, vision, institutional, professional.
     * The majority of jurisdictions use: oral, pharmacy, vision, professional and institutional, or variants on those terms, as the general styles of claims. The valueset is extensible to accommodate other jurisdictional requirements.
     */
    type: CodeableConcept;
    /**
     * More granular claim type
     * A finer grained suite of claim type codes which may convey additional information such as Inpatient vs Outpatient and/or a specialty service.
     * This may contain the local bill type codes, for example the US UB-04 bill type code or the CMS bill type.
     */
    subType?: CodeableConcept;
    /**
     * The recipient of the products and services
     * The party to whom the professional services and/or products have been supplied or are being considered and for whom actual or forecast reimbursement is sought.
     */
    patient: Reference;
    /**
     * Relevant time frame for the claim
     * The period for which charges are being submitted.
     * Typically this would be today or in the past for a claim, and today or in the future for preauthorizations and predeterminations. Typically line item dates of service should fall within the billing period if one is specified.
     */
    billablePeriod?: Period;
    /**
     * Resource creation date
     * The date this resource was created.
     * This field is independent of the date of creation of the resource as it may reflect the creation date of a source document prior to digitization. Typically for claims all services must be completed as of this date.
     */
    created: dateTime;
    /**
     * Extension for created
     **/
    _created?: Element;
    /**
     * Author of the claim
     * Individual who created the claim, predetermination or preauthorization.
     */
    enterer?: Reference;
    /**
     * Target
     * The Insurer who is target of the request.
     */
    insurer?: Reference;
    /**
     * Party responsible for the claim
     * The provider which is responsible for the claim, predetermination or preauthorization.
     * Typically this field would be 1..1 where this party is responsible for the claim but not necessarily professionally responsible for the provision of the individual products and services listed below.
     */
    provider: Reference;
    /**
     * Desired processing ugency
     * The provider-required urgency of processing the request. Typical values include: stat, routine deferred.
     * If a claim processor is unable to complete the processing as per the priority then they should generate and error and not process the request.
     */
    priority: CodeableConcept;
    /**
     * For whom to reserve funds
     * A code to indicate whether and for whom funds are to be reserved for future claims.
     * This field is only used for preauthorizations.
     */
    fundsReserve?: CodeableConcept;
    /**
     * Prior or corollary claims
     * Other claims which are related to this claim such as prior submissions or claims for related services or for the same event.
     * For example,  for the original treatment and follow-up exams.
     */
    related?: ClaimRelated[];
    /**
     * Prescription authorizing services and products
     * Prescription to support the dispensing of pharmacy, device or vision products.
     */
    prescription?: Reference;
    /**
     * Original prescription if superseded by fulfiller
     * Original prescription which has been superseded 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 therefore issues a new prescription for an alternate medication which has the same therapeutic intent. The prescription from the pharmacy becomes the 'prescription' and that from the physician becomes the 'original prescription'.
     */
    originalPrescription?: Reference;
    /**
     * Recipient of benefits payable
     * The party to be reimbursed for cost of the products and services according to the terms of the policy.
     * Often providers agree to receive the benefits payable to reduce the near-term costs to the patient. The insurer may decline to pay the provider and choose to pay the subscriber instead.
     */
    payee?: ClaimPayee;
    /**
     * Treatment referral
     * A reference to a referral resource.
     * The referral resource which lists the date, practitioner, reason and other supporting information.
     */
    referral?: Reference;
    /**
     * Servicing facility
     * Facility where the services were provided.
     */
    facility?: Reference;
    /**
     * Members of the care team
     * The members of the team who provided the products and services.
     */
    careTeam?: ClaimCareTeam[];
    /**
     * Supporting information
     * Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.
     * Often there are multiple jurisdiction specific valuesets which are required.
     */
    supportingInfo?: ClaimSupportingInfo[];
    /**
     * Pertinent diagnosis information
     * Information about diagnoses relevant to the claim items.
     */
    diagnosis?: ClaimDiagnosis[];
    /**
     * Clinical procedures performed
     * Procedures performed on the patient relevant to the billing items with the claim.
     */
    procedure?: ClaimProcedure[];
    /**
     * Patient insurance information
     * Financial instruments for reimbursement for the health care products and services specified on the claim.
     * All insurance coverages for the patient which may be applicable for reimbursement, of the products and services listed in the claim, are typically provided in the claim to allow insurers to confirm the ordering of the insurance coverages relative to local 'coordination of benefit' rules. One coverage (and only one) with 'focal=true' is to be used in the adjudication of this claim. Coverages appearing before the focal Coverage in the list, and where 'Coverage.subrogation=false', should provide a reference to the ClaimResponse containing the adjudication results of the prior claim.
     */
    insurance: ClaimInsurance[];
    /**
     * Details of the event
     * Details of an accident which resulted in injuries which required the products and services listed in the claim.
     */
    accident?: ClaimAccident;
    /**
     * Product or service provided
     * A claim line. Either a simple  product or service or a 'group' of details which can each be a simple items or groups of sub-details.
     */
    item?: ClaimItem[];
    /**
     * Total claim cost
     * The total value of the all the items in the claim.
     */
    total?: Money;
    /**
     * active | cancelled | draft | entered-in-error
     * The status of the resource instance.
     * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
     */
    status: ClaimStatus;
    /**
     * claim | preauthorization | predetermination
     * A code to indicate whether the nature of the request is: to request adjudication of products and services previously rendered; or requesting authorization and adjudication for provision in the future; or requesting the non-binding adjudication of the listed products and services which could be provided in the future.
     */
    use: ClaimUse;
}
/**
 * Adjudication details
 * If this item is a group then the values here are a summary of the adjudication of the detail items. If this item is a simple product or service then this is the result of the adjudication of this item.
 */
export interface ClaimResponseItemAdjudication extends BackboneElement {
    /**
     * Type of adjudication information
     * A code to indicate the information type of this adjudication record. Information types may include the value submitted, maximum values or percentages allowed or payable under the plan, amounts that: the patient is responsible for in aggregate or pertaining to this item; amounts paid by other coverages; and, the benefit payable for this item.
     * For example codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.
     */
    category: CodeableConcept;
    /**
     * Explanation of adjudication outcome
     * A code supporting the understanding of the adjudication result and explaining variance from expected amount.
     * For example may indicate that the funds for this benefit type have been exhausted.
     */
    reason?: CodeableConcept;
    /**
     * Monetary amount
     * Monetary amount associated with the category.
     * For example: amount submitted, eligible amount, co-payment, and benefit payable.
     */
    amount?: Money;
    /**
     * Non-monetary value
     * A non-monetary value associated with the category. Mutually exclusive to the amount element above.
     * For example: eligible percentage or co-payment percentage.
     */
    value?: decimal;
    /**
     * Extension for value
     **/
    _value?: Element;
}
/**
 * Adjudication for claim sub-details
 * A sub-detail adjudication of a simple product or service.
 */
export interface ClaimResponseItemDetailSubDetail extends BackboneElement {
    /**
     * Claim sub-detail instance identifier
     * A number to uniquely reference the claim sub-detail entry.
     */
    subDetailSequence: positiveInt;
    /**
     * Extension for subDetailSequence
     **/
    _subDetailSequence?: Element;
    /**
     * Applicable note numbers
     * The numbers associated with notes below which apply to the adjudication of this item.
     */
    noteNumber?: positiveInt[];
    /**
     * Extension for noteNumber
     **/
    _noteNumber?: Element[];
    /**
     * Subdetail level adjudication details
     * The adjudication results.
     */
    adjudication?: ClaimResponseItemAdjudication[];
}
/**
 * Adjudication for claim details
 * A claim detail. Either a simple (a product or service) or a 'group' of sub-details which are simple items.
 */
export interface ClaimResponseItemDetail extends BackboneElement {
    /**
     * Claim detail instance identifier
     * A number to uniquely reference the claim detail entry.
     */
    detailSequence: positiveInt;
    /**
     * Extension for detailSequence
     **/
    _detailSequence?: Element;
    /**
     * Applicable note numbers
     * The numbers associated with notes below which apply to the adjudication of this item.
     */
    noteNumber?: positiveInt[];
    /**
     * Extension for noteNumber
     **/
    _noteNumber?: Element[];
    /**
     * Detail level adjudication details
     * The adjudication results.
     */
    adjudication: ClaimResponseItemAdjudication[];
    /**
     * Adjudication for claim sub-details
     * A sub-detail adjudication of a simple product or service.
     */
    subDetail?: ClaimResponseItemDetailSubDetail[];
}
/**
 * Adjudication for claim line items
 * A claim line. Either a simple (a product or service) or a 'group' of details which can also be a simple items or groups of sub-details.
 */
export interface ClaimResponseItem extends BackboneElement {
    /**
     * Claim item instance identifier
     * A number to uniquely reference the claim item entries.
     */
    itemSequence: positiveInt;
    /**
     * Extension for itemSequence
     **/
    _itemSequence?: Element;
    /**
     * Applicable note numbers
     * The numbers associated with notes below which apply to the adjudication of this item.
     */
    noteNumber?: positiveInt[];
    /**
     * Extension for noteNumber
     **/
    _noteNumber?: Element[];
    /**
     * Adjudication details
     * If this item is a group then the values here are a summary of the adjudication of the detail items. If this item is a simple product or service then this is the result of the adjudication of this item.
     */
    adjudication: ClaimResponseItemAdjudication[];
    /**
     * Adjudication for claim details
     * A claim detail. Either a simple (a product or service) or a 'group' of sub-details which are simple items.
     */
    detail?: ClaimResponseItemDetail[];
}
/**
 * Insurer added line items
 * The third-tier service adjudications for payor added services.
 */
export interface ClaimResponseAddItemDetailSubDetail extends BackboneElement {
    /**
     * Billing, service, product, or drug code
     * When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.
     * If this is an actual service or product line, i.e. not a Group, then use code to indicate the Professional Service or Product supplied (e.g. 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 e.g. 'glasses' or 'compound'.
     */
    productOrService: CodeableConcept;
    /**
     * Service/Product billing modifiers
     * Item typification or modifiers codes to convey additional context for the product or service.
     * For example in Oral whether the treatment is cosmetic or associated with TMJ, or for Medical whether the treatment was outside the clinic or outside of office hours.
     */
    modifier?: CodeableConcept[];
    /**
     * Count of products or services
     * The number of repetitions of a service or product.
     */
    quantity?: Quantity;
    /**
     * Fee, charge or cost per item
     * If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.
     */
    unitPrice?: Money;
    /**
     * Price scaling factor
     * 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.
     * To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).
     */
    factor?: decimal;
    /**
     * Extension for factor
     **/
    _factor?: Element;
    /**
     * Total item cost
     * The quantity times the unit price for an additional service or product or charge.
     * For example, the formula: quantity * unitPrice * factor  = net. Quantity and factor are assumed to be 1 if not supplied.
     */
    net?: Money;
    /**
     * Applicable note numbers
     * The numbers associated with notes below which apply to the adjudication of this item.
     */
    noteNumber?: positiveInt[];
    /**
     * Extension for noteNumber
     **/
    _noteNumber?: Element[];
    /**
     * Added items detail adjudication
     * The adjudication results.
     */
    adjudication: ClaimResponseItemAdjudication[];
}
/**
 * Insurer added line details
 * The second-tier service adjudications for payor added services.
 */
export interface ClaimResponseAddItemDetail extends BackboneElement {
    /**
     * Billing, service, product, or drug code
     * When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.
     * If this is an actual service or product line, i.e. not a Group, then use code to indicate the Professional Service or Product supplied (e.g. 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 e.g. 'glasses' or 'compound'.
     */
    productOrService: CodeableConcept;
    /**
     * Service/Product billing modifiers
     * Item typification or modifiers codes to convey additional context for the product or service.
     * For example in Oral whether the treatment is cosmetic or associated with TMJ, or for Medical whether the treatment was outside the clinic or outside of office hours.
     */
    modifier?: CodeableConcept[];
    /**
     * Count of products or services
     * The number of repetitions of a service or product.
     */
    quantity?: Quantity;
    /**
     * Fee, charge or cost per item
     * If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.
     */
    unitPrice?: Money;
    /**
     * Price scaling factor
     * 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.
     * To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).
     */
    factor?: decimal;
    /**
     * Extension for factor
     **/
    _factor?: Element;
    /**
     * Total item cost
     * The quantity times the unit price for an additional service or product or charge.
     * For example, the formula: quantity * unitPrice * factor  = net. Quantity and factor are assumed to be 1 if not supplied.
     */
    net?: Money;
    /**
     * Applicable note numbers
     * The numbers associated with notes below which apply to the adjudication of this item.
     */
    noteNumber?: positiveInt[];
    /**
     * Extension for noteNumber
     **/
    _noteNumber?: Element[];
    /**
     * Added items detail adjudication
     * The adjudication results.
     */
    adjudication: ClaimResponseItemAdjudication[];
    /**
     * Insurer added line items
     * The third-tier service adjudications for payor added services.
     */
    subDetail?: ClaimResponseAddItemDetailSubDetail[];
}
/**
 * Insurer added line items
 * The first-tier service adjudications for payor added product or service lines.
 */
export interface ClaimResponseAddItem extends BackboneElement {
    /**
     * Item sequence number
     * Claim items which this service line is intended to replace.
     */
    itemSequence?: positiveInt[];
    /**
     * Extension for itemSequence
     **/
    _itemSequence?: Element[];
    /**
     * Detail sequence number
     * The sequence number of the details within the claim item which this line is intended to replace.
     */
    detailSequence?: positiveInt[];
    /**
     * Extension for detailSequence
     **/
    _detailSequence?: Element[];
    /**
     * Subdetail sequence number
     * The sequence number of the sub-details within the details within the claim item which this line is intended to replace.
     */
    subdetailSequence?: positiveInt[];
    /**
     * Extension for subdetailSequence
     **/
    _subdetailSequence?: Element[];
    /**
     * Authorized providers
     * The providers who are authorized for the services rendered to the patient.
     */
    provider?: Reference[];
    /**
     * Billing, service, product, or drug code
     * When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.
     * If this is an actual service or product line, i.e. not a Group, then use code to indicate the Professional Service or Product supplied (e.g. 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 e.g. 'glasses' or 'compound'.
     */
    productOrService: CodeableConcept;
    /**
     * Service/Product billing modifiers
     * Item typification or modifiers codes to convey additional context for the product or service.
     * For example in Oral whether the treatment is cosmetic or associated with TMJ, or for Medical whether the treatment was outside the clinic or outside of office hours.
     */
    modifier?: CodeableConcept[];
    /**
     * Program the product or service is provided under
     * Identifies the program under which this may be recovered.
     * For example: Neonatal program, child dental program or drug users recovery program.
     */
    programCode?: CodeableConcept[];
    /**
     * Date or dates of service or product delivery
     * The date or dates when the service or product was supplied, performed or completed.
     */
    servicedDate?: date;
    /**
     * Extension for servicedDate
     **/
    _servicedDate?: Element;
    /**
     * Date or dates of service or product delivery
     * The date or dates when the service or product was supplied, performed or completed.
     */
    servicedPeriod?: Period;
    /**
     * Place of service or where product was supplied
     * Where the product or service was provided.
     */
    locationCodeableConcept?: CodeableConcept;
    /**
     * Place of service or where product was supplied
     * Where the product or service was provided.
     */
    locationAddress?: Address;
    /**
     * Place of service or where product was supplied
     * Where the product or service was provided.
     */
    locationReference?: Reference;
    /**
     * Count of products or services
     * The number of repetitions of a service or product.
     */
    quantity?: Quantity;
    /**
     * Fee, charge or cost per item
     * If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.
     */
    unitPrice?: Money;
    /**
     * Price scaling factor
     * 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.
     * To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).
     */
    factor?: decimal;
    /**
     * Extension for factor
     **/
    _factor?: Element;
    /**
     * Total item cost
     * The quantity times the unit price for an additional service or product or charge.
     * For example, the formula: quantity * unitPrice * factor  = net. Quantity and factor are assumed to be 1 if not supplied.
     */
    net?: Money;
    /**
     * Anatomical location
     * Physical service site on the patient (limb, tooth, etc.).
     * For example: Providing a tooth code allows an insurer to identify a provider performing a filling on a tooth that was previously removed.
     */
    bodySite?: CodeableConcept;
    /**
     * Anatomical sub-location
     * A region or surface of the bodySite, e.g. limb region or tooth surface(s).
     */
    subSite?: CodeableConcept[];
    /**
     * Applicable note numbers
     * The numbers associated with notes below which apply to the adjudication of this item.
     */
    noteNumber?: positiveInt[];
    /**
     * Extension for noteNumber
     **/
    _noteNumber?: Element[];
    /**
     * Added items adjudication
     * The adjudication results.
     */
    adjudication: ClaimResponseItemAdjudication[];
    /**
     * Insurer added line details
     * The second-tier service adjudications for payor added services.
     */
    detail?: ClaimResponseAddItemDetail[];
}
/**
 * Adjudication totals
 * Categorized monetary totals for the adjudication.
 * Totals for amounts submitted, co-pays, benefits payable etc.
 */
export interface ClaimResponseTotal extends BackboneElement {
    /**
     * Type of adjudication information
     * A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.
     * For example codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.
     */
    category: CodeableConcept;
    /**
     * Financial total for the category
     * Monetary total amount associated with the category.
     */
    amount: Money;
}
/**
 * Payment Details
 * Payment details for the adjudication of the claim.
 */
export interface ClaimResponsePayment extends BackboneElement {
    /**
     * Partial or complete payment
     * Whether this represents partial or complete payment of the benefits payable.
     */
    type: CodeableConcept;
    /**
     * Payment adjustment for non-claim issues
     * Total amount of all adjustments to this payment included in this transaction which are not related to this claim's adjudication.
     * Insurers will deduct amounts owing from the provider (adjustment), such as a prior overpayment, from the amount owing to the provider (benefits payable) when payment is made to the provider.
     */
    adjustment?: Money;
    /**
     * Explanation for the adjustment
     * Reason for the payment adjustment.
     */
    adjustmentReason?: CodeableConcept;
    /**
     * Expected date of payment
     * Estimated date the payment will be issued or the actual issue date of payment.
     */
    date?: date;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Payable amount after adjustment
     * Benefits payable less any payment adjustment.
     */
    amount: Money;
    /**
     * Business identifier for the payment
     * Issuer's unique identifier for the payment instrument.
     * For example: EFT number or check number.
     */
    identifier?: Identifier;
}
/**
 * Note concerning adjudication
 * A note that describes or explains adjudication results in a human readable form.
 */
export interface ClaimResponseProcessNote extends BackboneElement {
    /**
     * Note instance identifier
     * A number to uniquely identify a note entry.
     */
    number?: positiveInt;
    /**
     * Extension for number
     **/
    _number?: Element;
    /**
     * Note explanatory text
     * The explanation or description associated with the processing.
     */
    text: string;
    /**
     * Extension for text
     **/
    _text?: Element;
    /**
     * Language of the text
     * A code to define the language used in the text of the note.
     * Only required if the language is different from the resource language.
     */
    language?: CodeableConcept;
    /**
     * display | print | printoper
     * The business purpose of the note text.
     */
    type?: ClaimResponseNoteType;
}
/**
 * Patient insurance information
 * Financial instruments for reimbursement for the health care products and services specified on the claim.
 * All insurance coverages for the patient which may be applicable for reimbursement, of the products and services listed in the claim, are typically provided in the claim to allow insurers to confirm the ordering of the insurance coverages relative to local 'coordination of benefit' rules. One coverage (and only one) with 'focal=true' is to be used in the adjudication of this claim. Coverages appearing before the focal Coverage in the list, and where 'subrogation=false', should provide a reference to the ClaimResponse containing the adjudication results of the prior claim.
 */
export interface ClaimResponseInsurance extends BackboneElement {
    /**
     * Insurance instance identifier
     * A number to uniquely identify insurance entries and provide a sequence of coverages to convey coordination of benefit order.
     */
    sequence: positiveInt;
    /**
     * Extension for sequence
     **/
    _sequence?: Element;
    /**
     * Coverage to be used for adjudication
     * A flag to indicate that this Coverage is to be used for adjudication of this claim when set to true.
     * A patient may (will) have multiple insurance policies which provide reimbursement for healthcare services and products. For example a person may also be covered by their spouse's policy and both appear in the list (and may be from the same insurer). This flag will be set to true for only one of the listed policies and that policy will be used for adjudicating this claim. Other claims would be created to request adjudication against the other listed policies.
     */
    focal: boolean;
    /**
     * Extension for focal
     **/
    _focal?: Element;
    /**
     * Insurance information
     * Reference to the insurance card level information contained in the Coverage resource. The coverage issuing insurer will use these details to locate the patient's actual coverage within the insurer's information system.
     */
    coverage: Reference;
    /**
     * Additional provider contract number
     * A business agreement number established between the provider and the insurer for special business processing purposes.
     */
    businessArrangement?: string;
    /**
     * Extension for businessArrangement
     **/
    _businessArrangement?: Element;
    /**
     * Adjudication results
     * The result of the adjudication of the line items for the Coverage specified in this insurance.
     * Must not be specified when 'focal=true' for this insurance.
     */
    claimResponse?: Reference;
}
/**
 * Processing errors
 * Errors encountered during the processing of the adjudication.
 * If the request contains errors then an error element should be provided and no adjudication related sections (item, addItem, or payment) should be present.
 */
export interface ClaimResponseError extends BackboneElement {
    /**
     * Item sequence number
     * The sequence number of the line item submitted which contains the error. This value is omitted when the error occurs outside of the item structure.
     */
    itemSequence?: positiveInt;
    /**
     * Extension for itemSequence
     **/
    _itemSequence?: Element;
    /**
     * Detail sequence number
     * The sequence number of the detail within the line item submitted which contains the error. This value is omitted when the error occurs outside of the item structure.
     */
    detailSequence?: positiveInt;
    /**
     * Extension for detailSequence
     **/
    _detailSequence?: Element;
    /**
     * Subdetail sequence number
     * The sequence number of the sub-detail within the detail within the line item submitted which contains the error. This value is omitted when the error occurs outside of the item structure.
     */
    subDetailSequence?: positiveInt;
    /**
     * Extension for subDetailSequence
     **/
    _subDetailSequence?: Element;
    /**
     * Error code detailing processing issues
     * An error code, from a specified code system, which details why the claim could not be adjudicated.
     */
    code: CodeableConcept;
}
/**
 * Response to a claim predetermination or preauthorization
 * This resource provides the adjudication details from the processing of a Claim resource.
 */
export interface ClaimResponse extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'ClaimResponse';
    /**
     * Business Identifier for a claim response
     * A unique identifier assigned to this claim response.
     */
    identifier?: Identifier[];
    /**
     * More granular claim type
     * A finer grained suite of claim type codes which may convey additional information such as Inpatient vs Outpatient and/or a specialty service.
     * This may contain the local bill type codes, for example the US UB-04 bill type code or the CMS bill type.
     */
    type: CodeableConcept;
    /**
     * More granular claim type
     * A finer grained suite of claim type codes which may convey additional information such as Inpatient vs Outpatient and/or a specialty service.
     * This may contain the local bill type codes, for example the US UB-04 bill type code or the CMS bill type.
     */
    subType?: CodeableConcept;
    /**
     * The recipient of the products and services
     * The party to whom the professional services and/or products have been supplied or are being considered and for whom actual for facast reimbursement is sought.
     */
    patient: Reference;
    /**
     * Response creation date
     * The date this resource was created.
     */
    created: dateTime;
    /**
     * Extension for created
     **/
    _created?: Element;
    /**
     * Party responsible for reimbursement
     * The party responsible for authorization, adjudication and reimbursement.
     */
    insurer: Reference;
    /**
     * Party responsible for the claim
     * The provider which is responsible for the claim, predetermination or preauthorization.
     * Typically this field would be 1..1 where this party is responsible for the claim but not necessarily professionally responsible for the provision of the individual products and services listed below.
     */
    requestor?: Reference;
    /**
     * Id of resource triggering adjudication
     * Original request resource reference.
     */
    request?: Reference;
    /**
     * Disposition Message
     * A human readable description of the status of the adjudication.
     */
    disposition?: string;
    /**
     * Extension for disposition
     **/
    _disposition?: Element;
    /**
     * Preauthorization reference
     * Reference from the Insurer which is used in later communications which refers to this adjudication.
     * This value is only present on preauthorization adjudications.
     */
    preAuthRef?: string;
    /**
     * Extension for preAuthRef
     **/
    _preAuthRef?: Element;
    /**
     * Preauthorization reference effective period
     * The time frame during which this authorization is effective.
     */
    preAuthPeriod?: Period;
    /**
     * Party to be paid any benefits payable
     * Type of Party to be reimbursed: subscriber, provider, other.
     */
    payeeType?: CodeableConcept;
    /**
     * Adjudication for claim line items
     * A claim line. Either a simple (a product or service) or a 'group' of details which can also be a simple items or groups of sub-details.
     */
    item?: ClaimResponseItem[];
    /**
     * Insurer added line items
     * The first-tier service adjudications for payor added product or service lines.
     */
    addItem?: ClaimResponseAddItem[];
    /**
     * Header-level adjudication
     * The adjudication results which are presented at the header level rather than at the line-item or add-item levels.
     */
    adjudication?: ClaimResponseItemAdjudication[];
    /**
     * Adjudication totals
     * Categorized monetary totals for the adjudication.
     * Totals for amounts submitted, co-pays, benefits payable etc.
     */
    total?: ClaimResponseTotal[];
    /**
     * Payment Details
     * Payment details for the adjudication of the claim.
     */
    payment?: ClaimResponsePayment;
    /**
     * Funds reserved status
     * A code, used only on a response to a preauthorization, to indicate whether the benefits payable have been reserved and for whom.
     * Fund would be release by a future claim quoting the preAuthRef of this response. Examples of values include: provider, patient, none.
     */
    fundsReserve?: CodeableConcept;
    /**
     * Printed form identifier
     * A code for the form to be used for printing the content.
     * May be needed to identify specific jurisdictional forms.
     */
    formCode?: CodeableConcept;
    /**
     * Printed reference or actual form
     * The actual form, by reference or inclusion, for printing the content or an EOB.
     * Needed to permit insurers to include the actual form.
     */
    form?: Attachment;
    /**
     * Note concerning adjudication
     * A note that describes or explains adjudication results in a human readable form.
     */
    processNote?: ClaimResponseProcessNote[];
    /**
     * Request for additional information
     * Request for additional supporting or authorizing information.
     * For example: professional reports, documents, images, clinical resources, or accident reports.
     */
    communicationRequest?: Reference[];
    /**
     * Patient insurance information
     * Financial instruments for reimbursement for the health care products and services specified on the claim.
     * All insurance coverages for the patient which may be applicable for reimbursement, of the products and services listed in the claim, are typically provided in the claim to allow insurers to confirm the ordering of the insurance coverages relative to local 'coordination of benefit' rules. One coverage (and only one) with 'focal=true' is to be used in the adjudication of this claim. Coverages appearing before the focal Coverage in the list, and where 'subrogation=false', should provide a reference to the ClaimResponse containing the adjudication results of the prior claim.
     */
    insurance?: ClaimResponseInsurance[];
    /**
     * Processing errors
     * Errors encountered during the processing of the adjudication.
     * If the request contains errors then an error element should be provided and no adjudication related sections (item, addItem, or payment) should be present.
     */
    error?: ClaimResponseError[];
    /**
     * active | cancelled | draft | entered-in-error
     * The status of the resource instance.
     * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
     */
    status: ClaimResponseStatus;
    /**
     * claim | preauthorization | predetermination
     * A code to indicate whether the nature of the request is: to request adjudication of products and services previously rendered; or requesting authorization and adjudication for provision in the future; or requesting the non-binding adjudication of the listed products and services which could be provided in the future.
     */
    use: ClaimResponseUse;
    /**
     * queued | complete | error | partial
     * The outcome of the claim, predetermination, or preauthorization processing.
     * The resource may be used to indicate that: the request has been held (queued) for processing; that it has been processed and errors found (error); that no errors were found and that some of the adjudication has been undertaken (partial) or that all of the adjudication has been undertaken (complete).
     */
    outcome: ClaimResponseRemittanceOutcome;
}
/**
 * One or more sets of investigations (signs, symptoms, etc.)
 * One or more sets of investigations (signs, symptoms, etc.). The actual grouping of investigations varies 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.
 */
export interface ClinicalImpressionInvestigation extends BackboneElement {
    /**
     * A name/code for the set
     * 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|nutritional) history may be used.
     */
    code: CodeableConcept;
    /**
     * Record of a specific investigation
     * A record of a specific investigation that was undertaken.
     * Most investigations are observations of one kind or another but some other specific types of data collection resources can also be used.
     */
    item?: Reference[];
}
/**
 * Possible or likely findings and diagnoses
 * Specific findings or diagnoses that were considered likely or relevant to ongoing treatment.
 */
export interface ClinicalImpressionFinding extends BackboneElement {
    /**
     * What was found
     * Specific text or code for finding or diagnosis, which may include ruled-out or resolved conditions.
     */
    itemCodeableConcept?: CodeableConcept;
    /**
     * What was found
     * Specific reference for finding or diagnosis, which may include ruled-out or resolved conditions.
     */
    itemReference?: Reference;
    /**
     * Which investigations support finding
     * Which investigations support finding or diagnosis.
     */
    basis?: string;
    /**
     * Extension for basis
     **/
    _basis?: Element;
}
/**
 * A clinical assessment performed when planning treatments and management strategies for a patient
 * 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.
 */
export interface ClinicalImpression extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'ClinicalImpression';
    /**
     * Business identifier
     * Business identifiers assigned to this clinical impression by the performer or other systems which remain constant as the resource is updated and propagates from server to server.
     * This is a business identifier, not a resource identifier (see [discussion](resource.html#identifiers)).  It is best practice for the identifier to only appear on a single resource instance, however business practices may occasionally dictate that multiple resource instances with the same identifier can exist - possibly even with different resource types.  For example, multiple Patient and a Person resource instance might share the same social insurance number.
     */
    identifier?: Identifier[];
    /**
     * Reason for current status
     * Captures the reason for the current state of the ClinicalImpression.
     * This is generally only used for "exception" statuses such as "not-done", "suspended" or "cancelled".

[distinct reason codes for different statuses can be enforced using invariants if they are universal bindings].
     */
    statusReason?: CodeableConcept;
    /**
     * Kind of assessment performed
     * Categorizes the type of clinical assessment performed.
     * This is present as a place-holder only and may be removed based on feedback/work group opinion.
     */
    code?: CodeableConcept;
    /**
     * Why/how the assessment was performed
     * A summary of the context and/or cause of the assessment - why / where it was performed, and what patient events/status prompted it.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Patient or group assessed
     * The patient or group of individuals assessed as part of this record.
     */
    subject: Reference;
    /**
     * Encounter created as part of
     * The Encounter during which this ClinicalImpression was created or to which the creation of this record is tightly associated.
     * This will typically be the encounter the event occurred within, but some activities may be initiated prior to or after the official completion of an encounter but still be tied to the context of the encounter.
     */
    encounter?: Reference;
    /**
     * Time of assessment
     * The point in time or period over which the subject was assessed.
     * This SHOULD be accurate to at least the minute, though some assessments only have a known date.
     */
    effectiveDateTime?: dateTime;
    /**
     * Extension for effectiveDateTime
     **/
    _effectiveDateTime?: Element;
    /**
     * Time of assessment
     * The point in time or period over which the subject was assessed.
     * This SHOULD be accurate to at least the minute, though some assessments only have a known date.
     */
    effectivePeriod?: Period;
    /**
     * When the assessment was documented
     * Indicates when the documentation of the assessment was complete.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * The clinician performing the assessment
     * The clinician performing the assessment.
     */
    assessor?: Reference;
    /**
     * Reference to last assessment
     * A reference to the last assessment that was conducted on 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.
     * It is always likely that multiple previous assessments exist for a patient. The point of quoting a previous assessment is that this assessment is relative to it (see resolved).
     */
    previous?: Reference;
    /**
     * Relevant impressions of patient state
     * A list of the relevant problems/conditions for a patient.
     * e.g. The patient is a pregnant, has congestive heart failure, has an ‎Adenocarcinoma, and is allergic to penicillin.
     */
    problem?: Reference[];
    /**
     * One or more sets of investigations (signs, symptoms, etc.)
     * One or more sets of investigations (signs, symptoms, etc.). The actual grouping of investigations varies 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.
     */
    investigation?: ClinicalImpressionInvestigation[];
    /**
     * Clinical Protocol followed
     * Reference to a specific published clinical protocol that was followed during this assessment, and/or that provides evidence in support of the diagnosis.
     */
    protocol?: uri[];
    /**
     * Extension for protocol
     **/
    _protocol?: Element[];
    /**
     * Summary of the assessment
     * A text summary of the investigations and the diagnosis.
     */
    summary?: string;
    /**
     * Extension for summary
     **/
    _summary?: Element;
    /**
     * Possible or likely findings and diagnoses
     * Specific findings or diagnoses that were considered likely or relevant to ongoing treatment.
     */
    finding?: ClinicalImpressionFinding[];
    /**
     * Estimate of likely outcome
     * Estimate of likely outcome.
     */
    prognosisCodeableConcept?: CodeableConcept[];
    /**
     * RiskAssessment expressing likely outcome
     * RiskAssessment expressing likely outcome.
     */
    prognosisReference?: Reference[];
    /**
     * Information supporting the clinical impression
     * Information supporting the clinical impression.
     */
    supportingInfo?: Reference[];
    /**
     * Comments made about the ClinicalImpression
     * Commentary about the impression, typically recorded after the impression itself was made, though supplemental notes by the original author could also appear.
     * Don't use this element for content that should more properly appear as one of the specific elements of the impression.
     */
    note?: Annotation[];
    /**
     * in-progress | completed | entered-in-error
     * Identifies the workflow status of the assessment.
     * This element is labeled as a modifier because the status contains the code entered-in-error that marks the clinical impression as not currently valid.
     */
    status: ClinicalImpressionStatus;
}
/**
 * Filter that can be used in a value set
 * A filter that can be used in a value set compose statement when selecting concepts using a filter.
 * Note that filters defined in code systems usually require custom code on the part of any terminology engine that will make them available for use in value set filters. For this reason, they are generally only seen in high value published terminologies.
 */
export interface CodeSystemFilter extends BackboneElement {
    /**
     * Code that identifies the filter
     * The code that identifies this filter when it is used as a filter in [ValueSet](valueset.html#).compose.include.filter.
     */
    code: code;
    /**
     * Extension for code
     **/
    _code?: Element;
    /**
     * How or why the filter is used
     * A description of how or why the filter is used.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * What to use for the value
     * A description of what the value for the filter should be.
     */
    value: string;
    /**
     * Extension for value
     **/
    _value?: Element;
    /**
     * = | is-a | descendent-of | is-not-a | regex | in | not-in | generalizes | exists
     * A list of operators that can be used with the filter.
     */
    operator: CodeSystemFilterOperator[];
}
/**
 * Additional information supplied about each concept
 * A property defines an additional slot through which additional information can be provided about a concept.
 */
export interface CodeSystemProperty extends BackboneElement {
    /**
     * Identifies the property on the concepts, and when referred to in operations
     * 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.
     */
    code: code;
    /**
     * Extension for code
     **/
    _code?: Element;
    /**
     * Formal identifier for the property
     * Reference to the formal meaning of the property. One possible source of meaning is the [Concept Properties](codesystem-concept-properties.html) code system.
     */
    uri?: uri;
    /**
     * Extension for uri
     **/
    _uri?: Element;
    /**
     * Why the property is defined, and/or what it conveys
     * A description of the property- why it is defined, and how its value might be used.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * code | Coding | string | integer | boolean | dateTime | decimal
     * The type of the property value. Properties of type "code" contain a code defined by the code system (e.g. a reference to another defined concept).
     */
    type: CodeSystemPropertyType;
}
/**
 * Additional representations for the concept
 * Additional representations for the concept - other languages, aliases, specialized purposes, used for particular purposes, etc.
 * Concepts have both a ```display``` and an array of ```designation```. The display is equivalent to a special designation with an implied ```designation.use``` of "primary code" and a language equal to the [Resource Language](resource.html#language).
 */
export interface CodeSystemConceptDesignation extends BackboneElement {
    /**
     * Human language of the designation
     * The language this designation is defined for.
     * In the absence of a language, the resource language applies.
     */
    language?: code;
    /**
     * Extension for language
     **/
    _language?: Element;
    /**
     * Details how this designation would be used
     * A code that details how this designation would be used.
     * If no use is provided, the designation can be assumed to be suitable for general display to a human user.
     */
    use?: Coding;
    /**
     * The text value for this designation
     * The text value for this designation.
     */
    value: string;
    /**
     * Extension for value
     **/
    _value?: Element;
}
/**
 * Property value for the concept
 * A property value for this concept.
 */
export interface CodeSystemConceptProperty extends BackboneElement {
    /**
     * Reference to CodeSystem.property.code
     * A code that is a reference to CodeSystem.property.code.
     */
    code: code;
    /**
     * Extension for code
     **/
    _code?: Element;
    /**
     * Value of the property for this concept
     * The value of this property.
     */
    valueCode?: code;
    /**
     * Extension for valueCode
     **/
    _valueCode?: Element;
    /**
     * Value of the property for this concept
     * The value of this property.
     */
    valueCoding?: Coding;
    /**
     * Value of the property for this concept
     * The value of this property.
     */
    valueString?: string;
    /**
     * Extension for valueString
     **/
    _valueString?: Element;
    /**
     * Value of the property for this concept
     * The value of this property.
     */
    valueInteger?: integer;
    /**
     * Extension for valueInteger
     **/
    _valueInteger?: Element;
    /**
     * Value of the property for this concept
     * The value of this property.
     */
    valueBoolean?: boolean;
    /**
     * Extension for valueBoolean
     **/
    _valueBoolean?: Element;
    /**
     * Value of the property for this concept
     * The value of this property.
     */
    valueDateTime?: dateTime;
    /**
     * Extension for valueDateTime
     **/
    _valueDateTime?: Element;
    /**
     * Value of the property for this concept
     * The value of this property.
     */
    valueDecimal?: decimal;
    /**
     * Extension for valueDecimal
     **/
    _valueDecimal?: Element;
}
/**
 * Concepts in the code system
 * Concepts that are in the code system. The concept definitions are inherently hierarchical, but the definitions must be consulted to determine what the meanings of the hierarchical relationships are.
 * If this is empty, it means that the code system resource does not represent the content of the code system.
 */
export interface CodeSystemConcept extends BackboneElement {
    /**
     * Code that identifies concept
     * A code - a text symbol - that uniquely identifies the concept within the code system.
     */
    code: code;
    /**
     * Extension for code
     **/
    _code?: Element;
    /**
     * Text to display to the user
     * A human readable string that is the recommended default way to present this concept to a user.
     */
    display?: string;
    /**
     * Extension for display
     **/
    _display?: Element;
    /**
     * Formal definition
     * 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.
     */
    definition?: string;
    /**
     * Extension for definition
     **/
    _definition?: Element;
    /**
     * Additional representations for the concept
     * Additional representations for the concept - other languages, aliases, specialized purposes, used for particular purposes, etc.
     * Concepts have both a ```display``` and an array of ```designation```. The display is equivalent to a special designation with an implied ```designation.use``` of "primary code" and a language equal to the [Resource Language](resource.html#language).
     */
    designation?: CodeSystemConceptDesignation[];
    /**
     * Property value for the concept
     * A property value for this concept.
     */
    property?: CodeSystemConceptProperty[];
    /**
     * Child Concepts (is-a/contains/categorizes)
     * Defines children of a concept to produce a hierarchy of concepts. The nature of the relationships is variable (is-a/contains/categorizes) - see hierarchyMeaning.
     */
    concept?: CodeSystemConcept[];
}
/**
 * Declares the existence of and describes a code system or code system supplement
 * The CodeSystem resource is used to declare the existence of and describe a code system or code system supplement and its key properties, and optionally define a part or all of its content.
 */
export interface CodeSystem extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'CodeSystem';
    /**
     * Canonical identifier for this code system, represented as a URI (globally unique) (Coding.system)
     * An absolute URI that is used to identify this code system when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this code system is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the code system is stored on different servers. This is used in [Coding](datatypes.html#Coding).system.
     * Can be a urn:uuid: or a urn:oid: but real http: addresses are preferred.  Multiple instances may share the same URL if they have a distinct version.

The determination of when to create a new version of a resource (same url, new version) vs. defining a new artifact is up to the author.  Considerations for making this decision are found in [Technical and Business Versions](resource.html#versions).

In some cases, the resource can no longer be found at the stated url, but the url itself cannot change. Implementations can use the [meta.source](resource.html#meta) element to indicate where the current master source of the resource can be found.
     */
    url?: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Additional identifier for the code system (business identifier)
     * 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.
     * Typically, this is used for identifiers that can go in an HL7 V3 II (instance identifier) data type, and can then identify this code system outside of FHIR, where it is not possible to use the logical URI.  Note that HL7 defines at least three identifiers for many of its code systems - the FHIR canonical URL, the OID and the V2 Table 0396 mnemonic code.
     */
    identifier?: Identifier[];
    /**
     * Business version of the code system (Coding.version)
     * 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.
     * There may be different code system instances that have the same identifier but different versions.  The version can be appended to the url in a reference to allow a reference to a particular business version of the code system with the format [url]|[version].
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
    /**
     * Name for this code system (computer friendly)
     * 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.
     * The name is not expected to be globally unique. The name should be a simple alphanumeric type name to ensure that it is machine-processing friendly.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Name for this code system (human friendly)
     * A short, descriptive, user-friendly title for the code system.
     * This name does not need to be machine-processing friendly and may contain punctuation, white-space, etc.
     */
    title?: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * For testing purposes, not real usage
     * 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.
     * Allows filtering of code systems that are appropriate for use versus not.
     */
    experimental?: boolean;
    /**
     * Extension for experimental
     **/
    _experimental?: Element;
    /**
     * Date last changed
     * The date  (and optionally time) when the code system was published. The date must change 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.
     * Note that this is not the same as the resource last-modified-date, since the resource may be a secondary representation of the code system. Additional specific dates may be added as extensions or be found by consulting Provenances associated with past versions of the resource.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Name of the publisher (organization or individual)
     * The name of the organization or individual that published the code system.
     * Usually an organization but may be an individual. The publisher (or steward) of the code system is the organization or individual primarily responsible for the maintenance and upkeep of the code system. This is not necessarily the same individual or organization that developed and initially authored the content. The publisher is the primary point of contact for questions or issues with the code system. This item SHOULD be populated unless the information is available from context.
     */
    publisher?: string;
    /**
     * Extension for publisher
     **/
    _publisher?: Element;
    /**
     * Contact details for the publisher
     * Contact details to assist a user in finding and communicating with the publisher.
     * May be a web site, an email address, a telephone number, etc.
     */
    contact?: ContactDetail[];
    /**
     * Natural language description of the code system
     * A free text natural language description of the code system from a consumer's perspective.
     * This description can be used to capture details such as why the code system was built, comments about misuse, instructions for clinical use and interpretation, literature references, examples from the paper world, etc. It is not a rendering of the code system as conveyed in the 'text' field of the resource itself. This item SHOULD be populated unless the information is available from context (e.g. the language of the code system is presumed to be the predominant language in the place the code system was created).
     */
    description?: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * The context that the content is intended to support
     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate code system instances.
     * When multiple useContexts are specified, there is no expectation that all or any of the contexts apply.
     */
    useContext?: UsageContext[];
    /**
     * Intended jurisdiction for code system (if applicable)
     * A legal or geographic region in which the code system is intended to be used.
     * It may be possible for the code system to be used in jurisdictions other than those for which it was originally designed or intended.
     */
    jurisdiction?: CodeableConcept[];
    /**
     * Why this code system is defined
     * Explanation of why this code system is needed and why it has been designed as it has.
     * This element does not describe the usage of the code system. Instead, it provides traceability of ''why'' the resource is either needed or ''why'' it is defined as it is.  This may be used to point to source materials or specifications that drove the structure of this code system.
     */
    purpose?: markdown;
    /**
     * Extension for purpose
     **/
    _purpose?: Element;
    /**
     * Use and/or publishing restrictions
     * 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.
     * ... Sometimes, the copyright differs between the code system and the codes that are included. The copyright statement should clearly differentiate between these when required.
     */
    copyright?: markdown;
    /**
     * Extension for copyright
     **/
    _copyright?: Element;
    /**
     * If code comparison is case sensitive
     * If code comparison is case sensitive when codes within this system are compared to each other.
     * If this value is missing, then it is not specified whether a code system is case sensitive or not. When the rule is not known, Postel's law should be followed: produce codes with the correct case, and accept codes in any case. This element is primarily provided to support validation software.
     */
    caseSensitive?: boolean;
    /**
     * Extension for caseSensitive
     **/
    _caseSensitive?: Element;
    /**
     * Canonical reference to the value set with entire code system
     * Canonical reference to the value set that contains the entire code system.
     * The definition of the value set SHALL include all codes from this code system and only codes from this code system, and it SHALL be immutable.
     */
    valueSet?: canonical;
    /**
     * Extension for valueSet
     **/
    _valueSet?: Element;
    /**
     * If code system defines a compositional grammar
     * The code system defines a compositional (post-coordination) grammar.
     * Note that the code system resource does not define what the compositional grammar is, only whether or not there is one.
     */
    compositional?: boolean;
    /**
     * Extension for compositional
     **/
    _compositional?: Element;
    /**
     * If definitions are not stable
     * This flag is used to signify that the code system does not commit to concept permanence across versions. If true, a version must be specified when referencing this code system.
     * Best practice is that code systems do not redefine concepts, or that if concepts are redefined, a new code system definition is created. But this is not always possible, so some code systems may be defined as 'versionNeeded'.

Most code systems occasionally refine the displays defined for concepts between versions. Contexts in which the concept display values are validated may require that the version be specified for some code systems irrespective of the value of this property.
     */
    versionNeeded?: boolean;
    /**
     * Extension for versionNeeded
     **/
    _versionNeeded?: Element;
    /**
     * Canonical URL of Code System this adds designations and properties to
     * The canonical URL of the code system that this code system supplement is adding designations and properties to.
     * The most common use of a code system supplement is to add additional language support.
     */
    supplements?: canonical;
    /**
     * Extension for supplements
     **/
    _supplements?: Element;
    /**
     * Total concepts in the code system
     * The total number of concepts defined by the code system. Where the code system has a compositional grammar, the basis of this count is defined by the system steward.
     * The count of concepts defined in this resource cannot be more than this value but may be less for several reasons - see the content element.
     */
    count?: unsignedInt;
    /**
     * Extension for count
     **/
    _count?: Element;
    /**
     * Filter that can be used in a value set
     * A filter that can be used in a value set compose statement when selecting concepts using a filter.
     * Note that filters defined in code systems usually require custom code on the part of any terminology engine that will make them available for use in value set filters. For this reason, they are generally only seen in high value published terminologies.
     */
    filter?: CodeSystemFilter[];
    /**
     * Additional information supplied about each concept
     * A property defines an additional slot through which additional information can be provided about a concept.
     */
    property?: CodeSystemProperty[];
    /**
     * Concepts in the code system
     * Concepts that are in the code system. The concept definitions are inherently hierarchical, but the definitions must be consulted to determine what the meanings of the hierarchical relationships are.
     * If this is empty, it means that the code system resource does not represent the content of the code system.
     */
    concept?: CodeSystemConcept[];
    /**
     * draft | active | retired | unknown
     * The date (and optionally time) when the code system resource was created or revised.
     * Allows filtering of code systems that are appropriate for use versus not.
     */
    status: CodeSystemPublicationStatus;
    /**
     * grouped-by | is-a | part-of | classified-with
     * The meaning of the hierarchy of concepts as represented in this resource.
     * Note that other representations might have a different hierarchy or none at all, and represent the information using properties.
     */
    hierarchyMeaning?: CodeSystemHierarchyMeaning;
    /**
     * not-present | example | fragment | complete | supplement
     * The extent of the content of the code system (the concepts and codes it defines) are represented in this resource instance.
     */
    content: CodeSystemContentMode;
}
/**
 * Message payload
 * Text, attachment(s), or resource(s) that was communicated to the recipient.
 */
export interface CommunicationPayload extends BackboneElement {
    /**
     * Message part content
     * A communicated content (or for multi-part communications, one portion of the communication).
     */
    contentString?: string;
    /**
     * Extension for contentString
     **/
    _contentString?: Element;
    /**
     * Message part content
     * A communicated content (or for multi-part communications, one portion of the communication).
     */
    contentAttachment?: Attachment;
    /**
     * Message part content
     * A communicated content (or for multi-part communications, one portion of the communication).
     */
    contentReference?: Reference;
}
/**
 * A record of information transmitted from a sender to a receiver
 * An occurrence of information being transmitted; e.g. an alert that was sent to a responsible provider, a public health agency that was notified about a reportable condition.
 */
export interface Communication extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Communication';
    /**
     * Unique identifier
     * Business identifiers assigned to this communication by the performer or other systems which remain constant as the resource is updated and propagates from server to server.
     * This is a business identifier, not a resource identifier (see [discussion](resource.html#identifiers)).  It is best practice for the identifier to only appear on a single resource instance, however business practices may occasionally dictate that multiple resource instances with the same identifier can exist - possibly even with different resource types.  For example, multiple Patient and a Person resource instance might share the same social insurance number.
     */
    identifier?: Identifier[];
    /**
     * Instantiates FHIR protocol or definition
     * The URL pointing to a FHIR-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this Communication.
     */
    instantiatesCanonical?: canonical[];
    /**
     * Extension for instantiatesCanonical
     **/
    _instantiatesCanonical?: Element[];
    /**
     * Instantiates external protocol or definition
     * The URL pointing to an externally maintained protocol, guideline, orderset or other definition that is adhered to in whole or in part by this Communication.
     * This might be an HTML page, PDF, etc. or could just be a non-resolvable URI identifier.
     */
    instantiatesUri?: uri[];
    /**
     * Extension for instantiatesUri
     **/
    _instantiatesUri?: Element[];
    /**
     * Request fulfilled by this communication
     * An order, proposal or plan fulfilled in whole or in part by this Communication.
     * This must point to some sort of a 'Request' resource, such as CarePlan, CommunicationRequest, ServiceRequest, MedicationRequest, etc.
     */
    basedOn?: Reference[];
    /**
     * Part of this action
     * Part of this action.
     */
    partOf?: Reference[];
    /**
     * Reply to
     * Prior communication that this communication is in response to.
     */
    inResponseTo?: Reference[];
    /**
     * Reason for current status
     * Captures the reason for the current state of the Communication.
     * This is generally only used for "exception" statuses such as "not-done", "suspended" or "aborted". The reason for performing the event at all is captured in reasonCode, not here.
     */
    statusReason?: CodeableConcept;
    /**
     * Message category
     * The type of message conveyed such as alert, notification, reminder, instruction, etc.
     * There may be multiple axes of categorization and one communication may serve multiple purposes.
     */
    category?: CodeableConcept[];
    /**
     * A channel of communication
     * A channel that was used for this communication (e.g. email, fax).
     */
    medium?: CodeableConcept[];
    /**
     * Focus of message
     * The patient or group that was the focus of this communication.
     */
    subject?: Reference;
    /**
     * Description of the purpose/content
     * Description of the purpose/content, similar to a subject line in an email.
     * Communication.topic.text can be used without any codings.
     */
    topic?: CodeableConcept;
    /**
     * Resources that pertain to this communication
     * Other resources that pertain to this communication and to which this communication should be associated.
     * Don't use Communication.about element when a more specific element exists, such as basedOn or reasonReference.
     */
    about?: Reference[];
    /**
     * Encounter created as part of
     * The Encounter during which this Communication was created or to which the creation of this record is tightly associated.
     * This will typically be the encounter the event occurred within, but some activities may be initiated prior to or after the official completion of an encounter but still be tied to the context of the encounter.
     */
    encounter?: Reference;
    /**
     * When sent
     * The time when this communication was sent.
     */
    sent?: dateTime;
    /**
     * Extension for sent
     **/
    _sent?: Element;
    /**
     * When received
     * The time when this communication arrived at the destination.
     */
    received?: dateTime;
    /**
     * Extension for received
     **/
    _received?: Element;
    /**
     * Message recipient
     * The entity (e.g. person, organization, clinical information system, care team or device) which was the target of the communication. If receipts need to be tracked by an individual, a separate resource instance will need to be created for each recipient.  Multiple recipient communications are intended where either receipts are not tracked (e.g. a mass mail-out) or a receipt is captured in aggregate (all emails confirmed received by a particular time).
     */
    recipient?: Reference[];
    /**
     * Message sender
     * The entity (e.g. person, organization, clinical information system, or device) which was the source of the communication.
     */
    sender?: Reference;
    /**
     * Indication for message
     * The reason or justification for the communication.
     * Textual reasons can be captured using reasonCode.text.
     */
    reasonCode?: CodeableConcept[];
    /**
     * Why was communication done?
     * Indicates another resource whose existence justifies this communication.
     */
    reasonReference?: Reference[];
    /**
     * Message payload
     * Text, attachment(s), or resource(s) that was communicated to the recipient.
     */
    payload?: CommunicationPayload[];
    /**
     * Comments made about the communication
     * Additional notes or commentary about the communication by the sender, receiver or other interested parties.
     */
    note?: Annotation[];
    /**
     * preparation | in-progress | not-done | on-hold | stopped | completed | entered-in-error | unknown
     * The status of the transmission.
     * This element is labeled as a modifier because the status contains the codes aborted and entered-in-error that mark the communication as not currently valid.
     */
    status: CommunicationStatus;
    /**
     * routine | urgent | asap | stat
     * Characterizes how quickly the planned or in progress communication must be addressed. Includes concepts such as stat, urgent, routine.
     * Used to prioritize workflow (such as which communication to read first) when the communication is planned or in progress.
     */
    priority?: CommunicationPriority;
}
/**
 * Message payload
 * Text, attachment(s), or resource(s) to be communicated to the recipient.
 */
export interface CommunicationRequestPayload extends BackboneElement {
    /**
     * Message part content
     * The communicated content (or for multi-part communications, one portion of the communication).
     */
    contentString?: string;
    /**
     * Extension for contentString
     **/
    _contentString?: Element;
    /**
     * Message part content
     * The communicated content (or for multi-part communications, one portion of the communication).
     */
    contentAttachment?: Attachment;
    /**
     * Message part content
     * The communicated content (or for multi-part communications, one portion of the communication).
     */
    contentReference?: Reference;
}
/**
 * A request for information to be sent to a receiver
 * 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.
 */
export interface CommunicationRequest extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'CommunicationRequest';
    /**
     * Unique identifier
     * Business identifiers assigned to this communication request by the performer or other systems which remain constant as the resource is updated and propagates from server to server.
     * This is a business identifier, not a resource identifier (see [discussion](resource.html#identifiers)).  It is best practice for the identifier to only appear on a single resource instance, however business practices may occasionally dictate that multiple resource instances with the same identifier can exist - possibly even with different resource types.  For example, multiple Patient and a Person resource instance might share the same social insurance number.
     */
    identifier?: Identifier[];
    /**
     * Fulfills plan or proposal
     * A plan or proposal that is fulfilled in whole or in part by this request.
     */
    basedOn?: Reference[];
    /**
     * Request(s) replaced by this request
     * Completed or terminated request(s) whose function is taken by this new request.
     * The replacement could be because the initial request was immediately rejected (due to an issue) or because the previous request was completed, but the need for the action described by the request remains ongoing.
     */
    replaces?: Reference[];
    /**
     * Composite request this is part of
     * 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.
     * Requests are linked either by a "basedOn" relationship (i.e. one request is fulfilling another) or by having a common requisition.  Requests that are part of the same requisition are generally treated independently from the perspective of changing their state or maintaining them after initial creation.
     */
    groupIdentifier?: Identifier;
    /**
     * Reason for current status
     * Captures the reason for the current state of the CommunicationRequest.
     * This is generally only used for "exception" statuses such as "suspended" or "cancelled".  The reason why the CommunicationRequest was created at all is captured in reasonCode, not here.  [distinct reason codes for different statuses can be enforced using invariants if they are universal bindings].
     */
    statusReason?: CodeableConcept;
    /**
     * Message category
     * The type of message to be sent such as alert, notification, reminder, instruction, etc.
     * There may be multiple axes of categorization and one communication request may serve multiple purposes.
     */
    category?: CodeableConcept[];
    /**
     * True if request is prohibiting action
     * If true indicates that the CommunicationRequest is asking for the specified action to *not* occur.
     * The attributes provided with the request qualify what is not to be done.
     */
    doNotPerform?: boolean;
    /**
     * Extension for doNotPerform
     **/
    _doNotPerform?: Element;
    /**
     * A channel of communication
     * A channel that was used for this communication (e.g. email, fax).
     */
    medium?: CodeableConcept[];
    /**
     * Focus of message
     * The patient or group that is the focus of this communication request.
     */
    subject?: Reference;
    /**
     * Resources that pertain to this communication request
     * Other resources that pertain to this communication request and to which this communication request should be associated.
     * Don't use CommunicationRequest.about element when a more specific element exists, such as basedOn, reasonReference, or replaces.
     */
    about?: Reference[];
    /**
     * Encounter created as part of
     * The Encounter during which this CommunicationRequest was created or to which the creation of this record is tightly associated.
     * This will typically be the encounter the event occurred within, but some activities may be initiated prior to or after the official completion of an encounter but still be tied to the context of the encounter.
     */
    encounter?: Reference;
    /**
     * Message payload
     * Text, attachment(s), or resource(s) to be communicated to the recipient.
     */
    payload?: CommunicationRequestPayload[];
    /**
     * When scheduled
     * The time when this communication is to occur.
     */
    occurrenceDateTime?: dateTime;
    /**
     * Extension for occurrenceDateTime
     **/
    _occurrenceDateTime?: Element;
    /**
     * When scheduled
     * The time when this communication is to occur.
     */
    occurrencePeriod?: Period;
    /**
     * When request transitioned to being actionable
     * For draft requests, indicates the date of initial creation.  For requests with other statuses, indicates the date of activation.
     */
    authoredOn?: dateTime;
    /**
     * Extension for authoredOn
     **/
    _authoredOn?: Element;
    /**
     * Who/what is requesting service
     * The device, individual, or organization who initiated the request and has responsibility for its activation.
     */
    requester?: Reference;
    /**
     * Message recipient
     * The entity (e.g. person, organization, clinical information system, device, group, or care team) which is the intended target of the communication.
     */
    recipient?: Reference[];
    /**
     * Message sender
     * The entity (e.g. person, organization, clinical information system, or device) which is to be the source of the communication.
     */
    sender?: Reference;
    /**
     * Why is communication needed?
     * Describes why the request is being made in coded or textual form.
     * Textual reasons can be captured using reasonCode.text.
     */
    reasonCode?: CodeableConcept[];
    /**
     * Why is communication needed?
     * Indicates another resource whose existence justifies this request.
     */
    reasonReference?: Reference[];
    /**
     * Comments made about communication request
     * Comments made about the request by the requester, sender, recipient, subject or other participants.
     */
    note?: Annotation[];
    /**
     * draft | active | on-hold | revoked | completed | entered-in-error | unknown
     * The status of the proposal or order.
     */
    status: CommunicationRequestStatus;
    /**
     * routine | urgent | asap | stat
     * Characterizes how quickly the proposed act must be initiated. Includes concepts such as stat, urgent, routine.
     */
    priority?: CommunicationRequestCommunicationPriority;
}
/**
 * How a resource is related to the compartment
 * Information about how a resource is related to the compartment.
 */
export interface CompartmentDefinitionResource extends BackboneElement {
    /**
     * Name of resource type
     * The name of a resource supported by the server.
     */
    code: code;
    /**
     * Extension for code
     **/
    _code?: Element;
    /**
     * Search Parameter Name, or chained parameters
     * 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,.
     * If no search parameters are listed, then the resource is not linked to the compartment.
     */
    param?: string[];
    /**
     * Extension for param
     **/
    _param?: Element[];
    /**
     * Additional documentation about the resource and compartment
     * Additional documentation about the resource and compartment.
     */
    documentation?: string;
    /**
     * Extension for documentation
     **/
    _documentation?: Element;
}
/**
 * Compartment Definition for a resource
 * A compartment definition that defines how resources are accessed on a server.
 * In FHIR, search is not performed directly on a resource (by XML or JSON path), but on a named parameter that maps into the resource content.
 */
export interface CompartmentDefinition extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'CompartmentDefinition';
    /**
     * Canonical identifier for this compartment definition, represented as a URI (globally unique)
     * An absolute URI that is used to identify this compartment definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this compartment definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the compartment definition is stored on different servers.
     * Can be a urn:uuid: or a urn:oid: but real http: addresses are preferred.  Multiple instances may share the same URL if they have a distinct version.

The determination of when to create a new version of a resource (same url, new version) vs. defining a new artifact is up to the author.  Considerations for making this decision are found in [Technical and Business Versions](resource.html#versions).

In some cases, the resource can no longer be found at the stated url, but the url itself cannot change. Implementations can use the [meta.source](resource.html#meta) element to indicate where the current master source of the resource can be found.
     */
    url: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Business version of the compartment definition
     * The identifier that is used to identify this version of the compartment definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the compartment 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.
     * There may be different compartment definition instances that have the same identifier but different versions.  The version can be appended to the url in a reference to allow a reference to a particular business version of the compartment definition with the format [url]|[version].
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
    /**
     * Name for this compartment definition (computer friendly)
     * 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.
     * The name is not expected to be globally unique. The name should be a simple alphanumeric type name to ensure that it is machine-processing friendly.This is often the same as the code for the parameter, but does not need to be.
     */
    name: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * For testing purposes, not real usage
     * 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.
     * Allows filtering of compartment definitions that are appropriate for use versus not.
     */
    experimental?: boolean;
    /**
     * Extension for experimental
     **/
    _experimental?: Element;
    /**
     * Date last changed
     * The date  (and optionally time) when the compartment definition was published. The date must change 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.
     * Note that this is not the same as the resource last-modified-date, since the resource may be a secondary representation of the compartment definition. Additional specific dates may be added as extensions or be found by consulting Provenances associated with past versions of the resource.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Name of the publisher (organization or individual)
     * The name of the organization or individual that published the compartment definition.
     * Usually an organization but may be an individual. The publisher (or steward) of the compartment definition is the organization or individual primarily responsible for the maintenance and upkeep of the compartment definition. This is not necessarily the same individual or organization that developed and initially authored the content. The publisher is the primary point of contact for questions or issues with the compartment definition. This item SHOULD be populated unless the information is available from context.
     */
    publisher?: string;
    /**
     * Extension for publisher
     **/
    _publisher?: Element;
    /**
     * Contact details for the publisher
     * Contact details to assist a user in finding and communicating with the publisher.
     * May be a web site, an email address, a telephone number, etc.
     */
    contact?: ContactDetail[];
    /**
     * Natural language description of the compartment definition
     * A free text natural language description of the compartment definition from a consumer's perspective.
     * This description can be used to capture details such as why the compartment definition was built, comments about misuse, instructions for clinical use and interpretation, literature references, examples from the paper world, etc. It is not a rendering of the compartment definition as conveyed in the 'text' field of the resource itself. This item SHOULD be populated unless the information is available from context (e.g. the language of the compartment definition is presumed to be the predominant language in the place the compartment definition was created).
     */
    description?: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * The context that the content is intended to support
     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate compartment definition instances.
     * When multiple useContexts are specified, there is no expectation that all or any of the contexts apply.
     */
    useContext?: UsageContext[];
    /**
     * Why this compartment definition is defined
     * Explanation of why this compartment definition is needed and why it has been designed as it has.
     * This element does not describe the usage of the compartment definition. Instead, it provides traceability of ''why'' the resource is either needed or ''why'' it is defined as it is.  This may be used to point to source materials or specifications that drove the structure of this compartment definition.
     */
    purpose?: markdown;
    /**
     * Extension for purpose
     **/
    _purpose?: Element;
    /**
     * Whether the search syntax is supported
     * Whether the search syntax is supported,.
     * Servers may define and use compartments to manage logical access without implementing the compartment related syntax.
     */
    search: boolean;
    /**
     * Extension for search
     **/
    _search?: Element;
    /**
     * How a resource is related to the compartment
     * Information about how a resource is related to the compartment.
     */
    resource?: CompartmentDefinitionResource[];
    /**
     * draft | active | retired | unknown
     * The status of this compartment definition. Enables tracking the life-cycle of the content.
     * Allows filtering of compartment definitions that are appropriate for use versus not.
     */
    status: CompartmentDefinitionPublicationStatus;
    /**
     * Patient | Encounter | RelatedPerson | Practitioner | Device
     * Which compartment this definition describes.
     * Only the specification can define the compartments that can exist. Servers can choose to support them.
     */
    code: CompartmentDefinitionCompartmentType;
}
/**
 * Attests to accuracy of composition
 * A participant who has attested to the accuracy of the composition/document.
 * Only list each attester once.
 */
export interface CompositionAttester extends BackboneElement {
    /**
     * When the composition was attested
     * When the composition was attested by the party.
     */
    time?: dateTime;
    /**
     * Extension for time
     **/
    _time?: Element;
    /**
     * Who attested the composition
     * Who attested the composition in the specified way.
     */
    party?: Reference;
    /**
     * personal | professional | legal | official
     * The type of attestation the authenticator offers.
     */
    mode: CompositionAttestationMode;
}
/**
 * Relationships to other compositions/documents
 * Relationships that this composition has with other compositions or documents that already exist.
 * A document is a version specific composition.
 */
export interface CompositionRelatesTo extends BackboneElement {
    /**
     * Target of the relationship
     * The target composition/document of this relationship.
     */
    targetIdentifier?: Identifier;
    /**
     * Target of the relationship
     * The target composition/document of this relationship.
     */
    targetReference?: Reference;
    /**
     * replaces | transforms | signs | appends
     * The type of relationship that this composition has with anther composition or document.
     * If this document appends another document, then the document cannot be fully understood without also accessing the referenced document.
     */
    code: CompositionDocumentRelationshipType;
}
/**
 * The clinical service(s) being documented
 * The clinical service, such as a colonoscopy or an appendectomy, being documented.
 * The event needs to be consistent with the type element, though can provide further information if desired.
 */
export interface CompositionEvent extends BackboneElement {
    /**
     * Code(s) that apply to the event being documented
     * 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.
     * An event can further specialize the act inherent in the typeCode, such as where it is simply "Procedure Report" and the procedure was a "colonoscopy". If one or more eventCodes are included, they SHALL NOT conflict with the values inherent in the classCode, practiceSettingCode or typeCode, as such a conflict would create an ambiguous situation. This short list of codes is provided to be used as key words for certain types of queries.
     */
    code?: CodeableConcept[];
    /**
     * The period covered by the documentation
     * 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.
     */
    period?: Period;
    /**
     * The event(s) being documented
     * 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.
     */
    detail?: Reference[];
}
/**
 * Composition is broken into sections
 * The root of the sections that make up the composition.
 */
export interface CompositionSection extends BackboneElement {
    /**
     * Label for section (e.g. for ToC)
     * 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.
     * The title identifies the section for a human reader. The title must be consistent with the narrative of the resource that is the target of the section.content reference. Generally, sections SHOULD have titles, but in some documents, it is unnecessary or inappropriate. Typically, this is where a section has subsections that have their own adequately distinguishing title,  or documents that only have a single section. Most Implementation Guides will make section title to be a required element.
     */
    title?: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * Classification of section (recommended)
     * A code identifying the kind of content contained within the section. This must be consistent with the section title.
     * The code identifies the section for an automated processor of the document. This is particularly relevant when using profiles to control the structure of the document.

If the section has content (instead of sub-sections), the section.code does not change the meaning or interpretation of the resource that is the content of the section in the comments for the section.code.
     */
    code?: CodeableConcept;
    /**
     * Who and/or what authored the section
     * Identifies who is responsible for the information in this section, not necessarily who typed it in.
     */
    author?: Reference[];
    /**
     * Who/what the section is about, when it is not about the subject of composition
     * The actual focus of the section when it is not the subject of the composition, but instead represents something or someone associated with the subject such as (for a patient subject) a spouse, parent, fetus, or donor. If not focus is specified, the focus is assumed to be focus of the parent section, or, for a section in the Composition itself, the subject of the composition. Sections with a focus SHALL only include resources where the logical subject (patient, subject, focus, etc.) matches the section focus, or the resources have no logical subject (few resources).
     * Typically, sections in a doument are about the subject of the document, whether that is a  patient, or group of patients, location, or device, or whatever. For some kind of documents, some sections actually contain data about related entities. Typical examples are  a section in a newborn discharge summary concerning the mother, or family history documents, with a section about each family member, though there are many other examples.
     */
    focus?: Reference;
    /**
     * Text summary of the section, for human interpretation
     * 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.
     * Document profiles may define what content should be represented in the narrative to ensure clinical safety.
     */
    text?: Narrative;
    /**
     * Order of section entries
     * Specifies the order applied to the items in the section entries.
     * Applications SHOULD render ordered lists in the order provided, but MAY allow users to re-order based on their own preferences as well. If there is no order specified, the order is unknown, though there may still be some order.
     */
    orderedBy?: CodeableConcept;
    /**
     * A reference to data that supports this section
     * A reference to the actual resource from which the narrative in the section is derived.
     * If there are no entries in the list, an emptyReason SHOULD be provided.
     */
    entry?: Reference[];
    /**
     * Why the section is empty
     * If the section is empty, why the list is empty. An empty section typically has some text explaining the empty reason.
     * The various reasons for an empty section make a significant interpretation to its interpretation. Note that this code is for use when the entire section content has been suppressed, and not for when individual items are omitted - implementers may consider using a text note or a flag on an entry in these cases.
     */
    emptyReason?: CodeableConcept;
    /**
     * Nested Section
     * A nested sub-section within this section.
     * Nested sections are primarily used to help human readers navigate to particular portions of the document.
     */
    section?: CompositionSection[];
    /**
     * working | snapshot | changes
     * 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.
     * This element is labeled as a modifier because a change list must not be misunderstood as a complete list.
     */
    mode?: CompositionSectionMode;
}
/**
 * A set of resources composed into a single coherent clinical statement with clinical attestation
 * A set of healthcare-related information that is assembled together into a single logical package 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. A Composition defines the structure and narrative content necessary for a document. However, a Composition alone does not constitute a document. Rather, the Composition must be the first entry in a Bundle where Bundle.type=document, and any other resources referenced from Composition must be included as subsequent entries in the Bundle (for example Patient, Practitioner, Encounter, etc.).
 * While the focus of this specification is on patient-specific clinical statements, this resource can also apply to other healthcare-related statements such as study protocol designs, healthcare invoices and other activities that are not necessarily patient-specific or clinical.
 */
export interface Composition extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Composition';
    /**
     * Version-independent identifier for the Composition
     * A version-independent identifier for the Composition. This identifier stays constant as the composition is changed over time.
     * Similar to ClinicalDocument/setId in CDA. See discussion in resource definition for how these relate.
     */
    identifier?: Identifier;
    /**
     * Kind of composition (LOINC if possible)
     * 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.
     * For Composition type, LOINC is ubiquitous and strongly endorsed by HL7. Most implementation guides will require a specific LOINC code, or use LOINC as an extensible binding.
     */
    type: CodeableConcept;
    /**
     * Categorization of Composition
     * 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.
     * This is a metadata field from [XDS/MHD](http://wiki.ihe.net/index.php?title=Mobile_access_to_Health_Documents_(MHD)).
     */
    category?: CodeableConcept[];
    /**
     * Who and/or what the composition is about
     * 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).
     * For clinical documents, this is usually the patient.
     */
    subject?: Reference;
    /**
     * Context of the Composition
     * Describes the clinical encounter or type of care this documentation is associated with.
     */
    encounter?: Reference;
    /**
     * Composition editing time
     * The composition editing time, when the composition was last logically changed by the author.
     * The Last Modified Date on the composition may be after the date of the document was attested without being changed.
     */
    date: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Who and/or what authored the composition
     * Identifies who is responsible for the information in the composition, not necessarily who typed it in.
     */
    author: Reference[];
    /**
     * Human Readable name/title
     * Official human-readable label for the composition.
     * For many compositions, the title is the same as the text or a display name of Composition.type (e.g. a "consultation" or "progress note"). Note that CDA does not make title mandatory, but there are no known cases where it is useful for title to be omitted, so it is mandatory here. Feedback on this requirement is welcome during the trial use period.
     */
    title: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * As defined by affinity domain
     * The code specifying the level of confidentiality of the Composition.
     * The exact use of this element, and enforcement and issues related to highly sensitive documents are out of scope for the base specification, and delegated to implementation profiles (see security section).  This element is labeled as a modifier because highly confidential documents must not be treated as if they are not.
     */
    confidentiality?: code;
    /**
     * Extension for confidentiality
     **/
    _confidentiality?: Element;
    /**
     * Attests to accuracy of composition
     * A participant who has attested to the accuracy of the composition/document.
     * Only list each attester once.
     */
    attester?: CompositionAttester[];
    /**
     * Organization which maintains the composition
     * Identifies the organization or group who is responsible for ongoing maintenance of and access to the composition/document information.
     * This is useful when documents are derived from a composition - provides guidance for how to get the latest version of the document. This is optional because this is sometimes not known by the authoring system, and can be inferred by context. However, it is important that this information be known when working with a derived document, so providing a custodian is encouraged.
     */
    custodian?: Reference;
    /**
     * Relationships to other compositions/documents
     * Relationships that this composition has with other compositions or documents that already exist.
     * A document is a version specific composition.
     */
    relatesTo?: CompositionRelatesTo[];
    /**
     * The clinical service(s) being documented
     * The clinical service, such as a colonoscopy or an appendectomy, being documented.
     * The event needs to be consistent with the type element, though can provide further information if desired.
     */
    event?: CompositionEvent[];
    /**
     * Composition is broken into sections
     * The root of the sections that make up the composition.
     */
    section?: CompositionSection[];
    /**
     * preliminary | final | amended | entered-in-error
     * The workflow/clinical status of this composition. The status is a marker for the clinical standing of the document.
     * If a composition is marked as withdrawn, the compositions/documents in the series, or data from the composition or document series, should never be displayed to a user without being clearly marked as untrustworthy. The flag "entered-in-error" is why this element is labeled as a modifier of other elements.

Some reporting work flows require that the original narrative of a final document never be altered; instead, only new narrative can be added. The composition resource has no explicit status for explicitly noting whether this business rule is in effect. This would be handled by an extension if required.
     */
    status: CompositionStatus;
}
/**
 * Other elements required for this mapping (from context)
 * 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.
 */
export interface ConceptMapGroupElementTargetDependsOn extends BackboneElement {
    /**
     * Reference to property mapping depends on
     * 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 somewhere that is labeled to correspond with a code system property.
     */
    property: uri;
    /**
     * Extension for property
     **/
    _property?: Element;
    /**
     * Code System (if necessary)
     * An absolute URI that identifies the code system of the dependency code (if the source/dependency is a value set that crosses code systems).
     */
    system?: canonical;
    /**
     * Extension for system
     **/
    _system?: Element;
    /**
     * Value of the referenced element
     * Identity (code or path) or the element/item/ValueSet/text that the map depends on / refers to.
     */
    value: string;
    /**
     * Extension for value
     **/
    _value?: Element;
    /**
     * Display for the code (if value is a code)
     * The display for the code. The display is only provided to help editors when editing the concept map.
     * The display is ignored when processing the map.
     */
    display?: string;
    /**
     * Extension for display
     **/
    _display?: Element;
}
/**
 * Concept in target system for element
 * A concept from the target value set that this concept maps to.
 * Ideally there would only be one map, with equal or equivalent mapping. But multiple maps are allowed for several narrower options, or to assert that other concepts are unmatched.
 */
export interface ConceptMapGroupElementTarget extends BackboneElement {
    /**
     * Code that identifies the target element
     * Identity (code or path) or the element/item that the map refers to.
     */
    code?: code;
    /**
     * Extension for code
     **/
    _code?: Element;
    /**
     * Display for the code
     * The display for the code. The display is only provided to help editors when editing the concept map.
     * The display is ignored when processing the map.
     */
    display?: string;
    /**
     * Extension for display
     **/
    _display?: Element;
    /**
     * Description of status/issues in mapping
     * A description of status/issues in mapping that conveys additional information not represented in  the structured data.
     */
    comment?: string;
    /**
     * Extension for comment
     **/
    _comment?: Element;
    /**
     * Other elements required for this mapping (from context)
     * 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.
     */
    dependsOn?: ConceptMapGroupElementTargetDependsOn[];
    /**
     * Other concepts that this mapping also produces
     * 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.
     */
    product?: ConceptMapGroupElementTargetDependsOn[];
    /**
     * relatedto | equivalent | equal | wider | subsumes | narrower | specializes | inexact | unmatched | disjoint
     * 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).
     * This element is labeled as a modifier because it may indicate that a target does not apply.
     */
    equivalence: ConceptMapEquivalence;
}
/**
 * Mappings for a concept from the source set
 * Mappings for an individual concept in the source to one or more concepts in the target.
 * Generally, the ideal is that there would only be one mapping for each concept in the source value set, but a given concept may be mapped multiple times with different comments or dependencies.
 */
export interface ConceptMapGroupElement extends BackboneElement {
    /**
     * Identifies element being mapped
     * Identity (code or path) or the element/item being mapped.
     */
    code?: code;
    /**
     * Extension for code
     **/
    _code?: Element;
    /**
     * Display for the code
     * The display for the code. The display is only provided to help editors when editing the concept map.
     * The display is ignored when processing the map.
     */
    display?: string;
    /**
     * Extension for display
     **/
    _display?: Element;
    /**
     * Concept in target system for element
     * A concept from the target value set that this concept maps to.
     * Ideally there would only be one map, with equal or equivalent mapping. But multiple maps are allowed for several narrower options, or to assert that other concepts are unmatched.
     */
    target?: ConceptMapGroupElementTarget[];
}
/**
 * What to do when there is no mapping for the source concept
 * What to do when there is no mapping for the source concept. "Unmapped" does not include codes that are unmatched, and the unmapped element is ignored in a code is specified to have equivalence = unmatched.
 * This only applies if the source code has a system value that matches the system defined for the group.
 */
export interface ConceptMapGroupUnmapped extends BackboneElement {
    /**
     * Fixed code when mode = fixed
     * The fixed code to use when the mode = 'fixed'  - all unmapped codes are mapped to a single fixed code.
     */
    code?: code;
    /**
     * Extension for code
     **/
    _code?: Element;
    /**
     * Display for the code
     * The display for the code. The display is only provided to help editors when editing the concept map.
     * The display is ignored when processing the map.
     */
    display?: string;
    /**
     * Extension for display
     **/
    _display?: Element;
    /**
     * canonical reference to an additional ConceptMap to use for mapping if the source concept is unmapped
     * The canonical reference to an additional ConceptMap resource instance to use for mapping if this ConceptMap resource contains no matching mapping for the source concept.
     */
    url?: canonical;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * provided | fixed | other-map
     * Defines which action to take if there is no match for the source concept in the target system designated for the group. One of 3 actions are 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).
     */
    mode: ConceptMapGroupUnmappedMode;
}
/**
 * Same source and target systems
 * A group of mappings that all have the same source and target system.
 */
export interface ConceptMapGroup extends BackboneElement {
    /**
     * Source system where concepts to be mapped are defined
     * An absolute URI that identifies the source system where the concepts to be mapped are defined.
     * This is not needed if the source value set is specified and it contains concepts from only a single system.
     */
    source?: uri;
    /**
     * Extension for source
     **/
    _source?: Element;
    /**
     * Specific version of the  code system
     * The specific version of the code system, as determined by the code system authority.
     * The specification of a particular code system version may be required for code systems which lack concept permanence.
     */
    sourceVersion?: string;
    /**
     * Extension for sourceVersion
     **/
    _sourceVersion?: Element;
    /**
     * Target system that the concepts are to be mapped to
     * An absolute URI that identifies the target system that the concepts will be mapped to.
     * This is not needed if the target value set is specified and it contains concepts from only a single system. The group target may also be omitted if all of the target element equivalence values are 'unmatched'.
     */
    target?: uri;
    /**
     * Extension for target
     **/
    _target?: Element;
    /**
     * Specific version of the  code system
     * The specific version of the code system, as determined by the code system authority.
     * The specification of a particular code system version may be required for code systems which lack concept permanence.
     */
    targetVersion?: string;
    /**
     * Extension for targetVersion
     **/
    _targetVersion?: Element;
    /**
     * Mappings for a concept from the source set
     * Mappings for an individual concept in the source to one or more concepts in the target.
     * Generally, the ideal is that there would only be one mapping for each concept in the source value set, but a given concept may be mapped multiple times with different comments or dependencies.
     */
    element: ConceptMapGroupElement[];
    /**
     * What to do when there is no mapping for the source concept
     * What to do when there is no mapping for the source concept. "Unmapped" does not include codes that are unmatched, and the unmapped element is ignored in a code is specified to have equivalence = unmatched.
     * This only applies if the source code has a system value that matches the system defined for the group.
     */
    unmapped?: ConceptMapGroupUnmapped;
}
/**
 * A map from one set of concepts to one or more other concepts
 * A statement of relationships from one set of concepts to one or more other concepts - either concepts in code systems, or data element/data element concepts, or classes in class models.
 */
export interface ConceptMap extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'ConceptMap';
    /**
     * Canonical identifier for this concept map, represented as a URI (globally unique)
     * An absolute URI that is used to identify this concept map when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this concept map is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the concept map is stored on different servers.
     * Can be a urn:uuid: or a urn:oid: but real http: addresses are preferred.  Multiple instances may share the same URL if they have a distinct version.

The determination of when to create a new version of a resource (same url, new version) vs. defining a new artifact is up to the author.  Considerations for making this decision are found in [Technical and Business Versions](resource.html#versions).

In some cases, the resource can no longer be found at the stated url, but the url itself cannot change. Implementations can use the [meta.source](resource.html#meta) element to indicate where the current master source of the resource can be found.
     */
    url?: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Additional identifier for the concept map
     * 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.
     * Typically, this is used for identifiers that can go in an HL7 V3 II (instance identifier) data type, and can then identify this concept map outside of FHIR, where it is not possible to use the logical URI.
     */
    identifier?: Identifier;
    /**
     * Business version of the concept map
     * 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.
     * There may be different concept map instances that have the same identifier but different versions.  The version can be appended to the url in a reference to allow a reference to a particular business version of the concept map with the format [url]|[version].
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
    /**
     * Name for this concept map (computer friendly)
     * 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.
     * The name is not expected to be globally unique. The name should be a simple alphanumeric type name to ensure that it is machine-processing friendly.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Name for this concept map (human friendly)
     * A short, descriptive, user-friendly title for the concept map.
     * This name does not need to be machine-processing friendly and may contain punctuation, white-space, etc.
     */
    title?: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * For testing purposes, not real usage
     * 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.
     * Allows filtering of concept maps that are appropriate for use versus not.
     */
    experimental?: boolean;
    /**
     * Extension for experimental
     **/
    _experimental?: Element;
    /**
     * Date last changed
     * The date  (and optionally time) when the concept map was published. The date must change 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.
     * Note that this is not the same as the resource last-modified-date, since the resource may be a secondary representation of the concept map. Additional specific dates may be added as extensions or be found by consulting Provenances associated with past versions of the resource.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Name of the publisher (organization or individual)
     * The name of the organization or individual that published the concept map.
     * Usually an organization but may be an individual. The publisher (or steward) of the concept map is the organization or individual primarily responsible for the maintenance and upkeep of the concept map. This is not necessarily the same individual or organization that developed and initially authored the content. The publisher is the primary point of contact for questions or issues with the concept map. This item SHOULD be populated unless the information is available from context.
     */
    publisher?: string;
    /**
     * Extension for publisher
     **/
    _publisher?: Element;
    /**
     * Contact details for the publisher
     * Contact details to assist a user in finding and communicating with the publisher.
     * May be a web site, an email address, a telephone number, etc.
     */
    contact?: ContactDetail[];
    /**
     * Natural language description of the concept map
     * A free text natural language description of the concept map from a consumer's perspective.
     * The description is not intended to describe the semantics of the concept map. The description should capture its intended use, which is needed for ensuring integrity for its use in models across future changes.
     */
    description?: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * The context that the content is intended to support
     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate concept map instances.
     * When multiple useContexts are specified, there is no expectation that all or any of the contexts apply.
     */
    useContext?: UsageContext[];
    /**
     * Intended jurisdiction for concept map (if applicable)
     * A legal or geographic region in which the concept map is intended to be used.
     * It may be possible for the concept map to be used in jurisdictions other than those for which it was originally designed or intended.
     */
    jurisdiction?: CodeableConcept[];
    /**
     * Why this concept map is defined
     * Explanation of why this concept map is needed and why it has been designed as it has.
     * This element does not describe the usage of the concept map. Instead, it provides traceability of ''why'' the resource is either needed or ''why'' it is defined as it is.  This may be used to point to source materials or specifications that drove the structure of this concept map.
     */
    purpose?: markdown;
    /**
     * Extension for purpose
     **/
    _purpose?: Element;
    /**
     * Use and/or publishing restrictions
     * 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.
     * Frequently the copyright differs between the concept map and codes that are included. The copyright statement should clearly differentiate between these when required.
     */
    copyright?: markdown;
    /**
     * Extension for copyright
     **/
    _copyright?: Element;
    /**
     * The source value set that contains the concepts that are being mapped
     * Identifier for the source value set that contains the concepts that are being mapped and provides context for the mappings.
     * Should be a version specific reference. URIs SHOULD be absolute. If there is no source or target value set, there is no specified context for the map (not recommended).  The source value set may select codes from either an explicit (standard or local) or implicit code system.
     */
    sourceUri?: uri;
    /**
     * Extension for sourceUri
     **/
    _sourceUri?: Element;
    /**
     * The source value set that contains the concepts that are being mapped
     * Identifier for the source value set that contains the concepts that are being mapped and provides context for the mappings.
     * Should be a version specific reference. URIs SHOULD be absolute. If there is no source or target value set, there is no specified context for the map (not recommended).  The source value set may select codes from either an explicit (standard or local) or implicit code system.
     */
    sourceCanonical?: canonical;
    /**
     * Extension for sourceCanonical
     **/
    _sourceCanonical?: Element;
    /**
     * The target value set which provides context for the mappings
     * The target value set provides context for 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.
     * Should be a version specific reference. URIs SHOULD be absolute. If there is no source or target value set, the is no specified context for the map.
     */
    targetUri?: uri;
    /**
     * Extension for targetUri
     **/
    _targetUri?: Element;
    /**
     * The target value set which provides context for the mappings
     * The target value set provides context for 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.
     * Should be a version specific reference. URIs SHOULD be absolute. If there is no source or target value set, the is no specified context for the map.
     */
    targetCanonical?: canonical;
    /**
     * Extension for targetCanonical
     **/
    _targetCanonical?: Element;
    /**
     * Same source and target systems
     * A group of mappings that all have the same source and target system.
     */
    group?: ConceptMapGroup[];
    /**
     * draft | active | retired | unknown
     * The status of this concept map. Enables tracking the life-cycle of the content.
     * Allows filtering of concept maps that are appropriate for use versus not.
     */
    status: ConceptMapPublicationStatus;
}
/**
 * Stage/grade, usually assessed formally
 * Clinical stage or grade of a condition. May include formal severity assessments.
 */
export interface ConditionStage extends BackboneElement {
    /**
     * Simple summary (disease specific)
     * A simple summary of the stage such as "Stage 3". The determination of the stage is disease-specific.
     */
    summary?: CodeableConcept;
    /**
     * Formal record of assessment
     * Reference to a formal record of the evidence on which the staging assessment is based.
     */
    assessment?: Reference[];
    /**
     * Kind of staging
     * The kind of staging, such as pathological or clinical staging.
     */
    type?: CodeableConcept;
}
/**
 * Supporting evidence
 * Supporting evidence / manifestations that are the basis of the Condition's verification status, such as evidence that confirmed or refuted the condition.
 * The evidence may be a simple list of coded symptoms/manifestations, or references to observations or formal assessments, or both.
 */
export interface ConditionEvidence extends BackboneElement {
    /**
     * Manifestation/symptom
     * A manifestation or symptom that led to the recording of this condition.
     */
    code?: CodeableConcept[];
    /**
     * Supporting information found elsewhere
     * Links to other relevant information, including pathology reports.
     */
    detail?: Reference[];
}
/**
 * Detailed information about conditions, problems or diagnoses
 * A clinical condition, problem, diagnosis, or other event, situation, issue, or clinical concept that has risen to a level of concern.
 */
export interface Condition extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Condition';
    /**
     * External Ids for this condition
     * Business identifiers assigned to this condition by the performer or other systems which remain constant as the resource is updated and propagates from server to server.
     * This is a business identifier, not a resource identifier (see [discussion](resource.html#identifiers)).  It is best practice for the identifier to only appear on a single resource instance, however business practices may occasionally dictate that multiple resource instances with the same identifier can exist - possibly even with different resource types.  For example, multiple Patient and a Person resource instance might share the same social insurance number.
     */
    identifier?: Identifier[];
    /**
     * active | recurrence | relapse | inactive | remission | resolved
     * The clinical status of the condition.
     * The data type is CodeableConcept because clinicalStatus has some clinical judgment involved, such that there might need to be more specificity than the required FHIR value set allows. For example, a SNOMED coding might allow for additional specificity.
     */
    clinicalStatus?: CodeableConcept;
    /**
     * unconfirmed | provisional | differential | confirmed | refuted | entered-in-error
     * The verification status to support the clinical status of the condition.
     * verificationStatus is not required.  For example, when a patient has abdominal pain in the ED, there is not likely going to be a verification status.
The data type is CodeableConcept because verificationStatus has some clinical judgment involved, such that there might need to be more specificity than the required FHIR value set allows. For example, a SNOMED coding might allow for additional specificity.
     */
    verificationStatus?: CodeableConcept;
    /**
     * problem-list-item | encounter-diagnosis
     * A category assigned to the condition.
     * The categorization is often highly contextual and may appear poorly differentiated or not very useful in other contexts.
     */
    category?: CodeableConcept[];
    /**
     * Subjective severity of condition
     * A subjective assessment of the severity of the condition as evaluated by the clinician.
     * Coding of the severity with a terminology is preferred, where possible.
     */
    severity?: CodeableConcept;
    /**
     * Identification of the condition, problem or diagnosis
     * Identification of the condition, problem or diagnosis.
     */
    code?: CodeableConcept;
    /**
     * Anatomical location, if relevant
     * The anatomical location where this condition manifests itself.
     * Only used if not implicit in code found in Condition.code. If the use case requires attributes from the BodySite resource (e.g. to identify and track separately) then use the standard extension [bodySite](extension-bodysite.html).  May be a summary code, or a reference to a very precise definition of the location, or both.
     */
    bodySite?: CodeableConcept[];
    /**
     * Who has the condition?
     * Indicates the patient or group who the condition record is associated with.
     */
    subject: Reference;
    /**
     * Encounter created as part of
     * The Encounter during which this Condition was created or to which the creation of this record is tightly associated.
     * This will typically be the encounter the event occurred within, but some activities may be initiated prior to or after the official completion of an encounter but still be tied to the context of the encounter. This record indicates the encounter this particular record is associated with.  In the case of a "new" diagnosis reflecting ongoing/revised information about the condition, this might be distinct from the first encounter in which the underlying condition was first "known".
     */
    encounter?: Reference;
    /**
     * Estimated or actual date,  date-time, or age
     * Estimated or actual date or date-time  the condition began, in the opinion of the clinician.
     * Age is generally used when the patient reports an age at which the Condition began to occur.
     */
    onsetDateTime?: dateTime;
    /**
     * Extension for onsetDateTime
     **/
    _onsetDateTime?: Element;
    /**
     * Estimated or actual date,  date-time, or age
     * Estimated or actual date or date-time  the condition began, in the opinion of the clinician.
     * Age is generally used when the patient reports an age at which the Condition began to occur.
     */
    onsetAge?: Age;
    /**
     * Estimated or actual date,  date-time, or age
     * Estimated or actual date or date-time  the condition began, in the opinion of the clinician.
     * Age is generally used when the patient reports an age at which the Condition began to occur.
     */
    onsetPeriod?: Period;
    /**
     * Estimated or actual date,  date-time, or age
     * Estimated or actual date or date-time  the condition began, in the opinion of the clinician.
     * Age is generally used when the patient reports an age at which the Condition began to occur.
     */
    onsetRange?: Range;
    /**
     * Estimated or actual date,  date-time, or age
     * Estimated or actual date or date-time  the condition began, in the opinion of the clinician.
     * Age is generally used when the patient reports an age at which the Condition began to occur.
     */
    onsetString?: string;
    /**
     * Extension for onsetString
     **/
    _onsetString?: Element;
    /**
     * When in resolution/remission
     * 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.
     * There is no explicit distinction between resolution and remission because in many cases the distinction is not clear. Age is generally used when the patient reports an age at which the Condition abated.  If there is no abatement element, it is unknown whether the condition has resolved or entered remission; applications and users should generally assume that the condition is still valid.  When abatementString exists, it implies the condition is abated.
     */
    abatementDateTime?: dateTime;
    /**
     * Extension for abatementDateTime
     **/
    _abatementDateTime?: Element;
    /**
     * When in resolution/remission
     * 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.
     * There is no explicit distinction between resolution and remission because in many cases the distinction is not clear. Age is generally used when the patient reports an age at which the Condition abated.  If there is no abatement element, it is unknown whether the condition has resolved or entered remission; applications and users should generally assume that the condition is still valid.  When abatementString exists, it implies the condition is abated.
     */
    abatementAge?: Age;
    /**
     * When in resolution/remission
     * 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.
     * There is no explicit distinction between resolution and remission because in many cases the distinction is not clear. Age is generally used when the patient reports an age at which the Condition abated.  If there is no abatement element, it is unknown whether the condition has resolved or entered remission; applications and users should generally assume that the condition is still valid.  When abatementString exists, it implies the condition is abated.
     */
    abatementPeriod?: Period;
    /**
     * When in resolution/remission
     * 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.
     * There is no explicit distinction between resolution and remission because in many cases the distinction is not clear. Age is generally used when the patient reports an age at which the Condition abated.  If there is no abatement element, it is unknown whether the condition has resolved or entered remission; applications and users should generally assume that the condition is still valid.  When abatementString exists, it implies the condition is abated.
     */
    abatementRange?: Range;
    /**
     * When in resolution/remission
     * 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.
     * There is no explicit distinction between resolution and remission because in many cases the distinction is not clear. Age is generally used when the patient reports an age at which the Condition abated.  If there is no abatement element, it is unknown whether the condition has resolved or entered remission; applications and users should generally assume that the condition is still valid.  When abatementString exists, it implies the condition is abated.
     */
    abatementString?: string;
    /**
     * Extension for abatementString
     **/
    _abatementString?: Element;
    /**
     * Date record was first recorded
     * The recordedDate represents when this particular Condition record was created in the system, which is often a system-generated date.
     */
    recordedDate?: dateTime;
    /**
     * Extension for recordedDate
     **/
    _recordedDate?: Element;
    /**
     * Who recorded the condition
     * Individual who recorded the record and takes responsibility for its content.
     */
    recorder?: Reference;
    /**
     * Person who asserts this condition
     * Individual who is making the condition statement.
     */
    asserter?: Reference;
    /**
     * Stage/grade, usually assessed formally
     * Clinical stage or grade of a condition. May include formal severity assessments.
     */
    stage?: ConditionStage[];
    /**
     * Supporting evidence
     * Supporting evidence / manifestations that are the basis of the Condition's verification status, such as evidence that confirmed or refuted the condition.
     * The evidence may be a simple list of coded symptoms/manifestations, or references to observations or formal assessments, or both.
     */
    evidence?: ConditionEvidence[];
    /**
     * Additional information about the Condition
     * Additional information about the Condition. This is a general notes/comments entry  for description of the Condition, its diagnosis and prognosis.
     */
    note?: Annotation[];
}
/**
 * Policies covered by this consent
 * The references to the policies that are included in this consent scope. Policies may be organizational, but are often defined jurisdictionally, or in law.
 */
export interface ConsentPolicy extends BackboneElement {
    /**
     * Enforcement source for policy
     * Entity or Organization having regulatory jurisdiction or accountability for  enforcing policies pertaining to Consent Directives.
     */
    authority?: uri;
    /**
     * Extension for authority
     **/
    _authority?: Element;
    /**
     * Specific policy covered by this consent
     * The references to the policies that are included in this consent scope. Policies may be organizational, but are often defined jurisdictionally, or in law.
     * This element is for discoverability / documentation and does not modify or qualify the policy rules.
     */
    uri?: uri;
    /**
     * Extension for uri
     **/
    _uri?: Element;
}
/**
 * Consent Verified by patient or family
 * Whether a treatment instruction (e.g. artificial respiration yes or no) was verified with the patient, his/her family or another authorized person.
 */
export interface ConsentVerification extends BackboneElement {
    /**
     * Has been verified
     * Has the instruction been verified.
     */
    verified: boolean;
    /**
     * Extension for verified
     **/
    _verified?: Element;
    /**
     * Person who verified
     * Who verified the instruction (Patient, Relative or other Authorized Person).
     */
    verifiedWith?: Reference;
    /**
     * When consent verified
     * Date verification was collected.
     */
    verificationDate?: dateTime;
    /**
     * Extension for verificationDate
     **/
    _verificationDate?: Element;
}
/**
 * Who|what controlled by this rule (or group, by role)
 * Who or what is controlled by this rule. Use group to identify a set of actors by some property they share (e.g. 'admitting officers').
 */
export interface ConsentProvisionActor extends BackboneElement {
    /**
     * How the actor is involved
     * How the individual is involved in the resources content that is described in the exception.
     */
    role: CodeableConcept;
    /**
     * Resource for the actor (or group, by role)
     * The resource that identifies the actor. To identify actors by type, use group to identify a set of actors by some property they share (e.g. 'admitting officers').
     */
    reference: Reference;
}
/**
 * Data controlled by this rule
 * The resources controlled by this rule if specific resources are referenced.
 */
export interface ConsentProvisionData extends BackboneElement {
    /**
     * The actual data reference
     * A reference to a specific resource that defines which resources are covered by this consent.
     */
    reference: Reference;
    /**
     * instance | related | dependents | authoredby
     * How the resource reference is interpreted when testing consent restrictions.
     */
    meaning: ConsentDataMeaning;
}
/**
 * Constraints to the base Consent.policyRule
 * An exception to the base policy of this consent. An exception can be an addition or removal of access permissions.
 */
export interface ConsentProvision extends BackboneElement {
    /**
     * Timeframe for this rule
     * The timeframe in this rule is valid.
     */
    period?: Period;
    /**
     * Who|what controlled by this rule (or group, by role)
     * Who or what is controlled by this rule. Use group to identify a set of actors by some property they share (e.g. 'admitting officers').
     */
    actor?: ConsentProvisionActor[];
    /**
     * Actions controlled by this rule
     * Actions controlled by this Rule.
     * Note that this is the direct action (not the grounds for the action covered in the purpose element). At present, the only action in the understood and tested scope of this resource is 'read'.
     */
    action?: CodeableConcept[];
    /**
     * Security Labels that define affected resources
     * A security label, comprised of 0..* security label fields (Privacy tags), which define which resources are controlled by this exception.
     * If the consent specifies a security label of "R" then it applies to all resources that are labeled "R" or lower. E.g. for Confidentiality, it's a high water mark. For other kinds of security labels, subsumption logic applies. When the purpose of use tag is on the data, access request purpose of use shall not conflict.
     */
    securityLabel?: Coding[];
    /**
     * Context of activities covered by this rule
     * The context of the activities a user is taking - why the user is accessing the data - that are controlled by this rule.
     * When the purpose of use tag is on the data, access request purpose of use shall not conflict.
     */
    purpose?: Coding[];
    /**
     * e.g. Resource Type, Profile, CDA, etc.
     * The class of information covered by this rule. 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.
     * Multiple types are or'ed together. The intention of the contentType element is that the codes refer to profiles or document types defined in a standard or an implementation guide somewhere.
     */
    class?: Coding[];
    /**
     * e.g. LOINC or SNOMED CT code, etc. in the content
     * If this code is found in an instance, then the rule applies.
     * Typical use of this is a Document code with class = CDA.
     */
    code?: CodeableConcept[];
    /**
     * Timeframe for data controlled by this rule
     * Clinical or Operational Relevant period of time that bounds the data controlled by this rule.
     * This has a different sense to the Consent.period - that is when the consent agreement holds. This is the time period of the data that is controlled by the agreement.
     */
    dataPeriod?: Period;
    /**
     * Data controlled by this rule
     * The resources controlled by this rule if specific resources are referenced.
     */
    data?: ConsentProvisionData[];
    /**
     * Nested Exception Rules
     * Rules which provide exceptions to the base rule or subrules.
     */
    provision?: ConsentProvision[];
    /**
     * deny | permit
     * Action  to take - permit or deny - when the rule conditions are met.  Not permitted in root rule, required in all nested rules.
     */
    type?: ConsentProvisionType;
}
/**
 * A healthcare consumer's  choices to permit or deny recipients or roles to perform actions for specific purposes and periods of time
 * A record of a healthcare consumer’s  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.
 * Broadly, there are 3 key areas of consent for patients: Consent around sharing information (aka Privacy Consent Directive - Authorization to Collect, Use, or Disclose information), consent for specific treatment, or kinds of treatment, and general advance care directives.
 */
export interface Consent extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Consent';
    /**
     * Identifier for this record (external references)
     * Unique identifier for this copy of the Consent Statement.
     * This identifier identifies this copy of the consent. Where this identifier is also used elsewhere as the identifier for a consent record (e.g. a CDA consent document) then the consent details are expected to be the same.
     */
    identifier?: Identifier[];
    /**
     * Which of the four areas this resource covers (extensible)
     * A selector of the type of consent being presented: ADR, Privacy, Treatment, Research.  This list is now extensible.
     */
    scope: CodeableConcept;
    /**
     * Classification of the consent statement - for indexing/retrieval
     * A classification of the type of consents found in the statement. This element supports indexing and retrieval of consent statements.
     */
    category: CodeableConcept[];
    /**
     * Who the consent applies to
     * The patient/healthcare consumer to whom this consent applies.
     * Commonly, the patient the consent pertains to is the author, but for young and old people, it may be some other person.
     */
    patient?: Reference;
    /**
     * When this Consent was created or indexed
     * When this  Consent was issued / created / indexed.
     * This is not the time of the original consent, but the time that this statement was made or derived.
     */
    dateTime?: dateTime;
    /**
     * Extension for dateTime
     **/
    _dateTime?: Element;
    /**
     * Who is agreeing to the policy and rules
     * 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.
     * Commonly, the patient the consent pertains to is the consentor, but particularly for young and old people, it may be some other person - e.g. a legal guardian.
     */
    performer?: Reference[];
    /**
     * Custodian of the consent
     * The organization that manages the consent, and the framework within which it is executed.
     */
    organization?: Reference[];
    /**
     * Source from which this consent is taken
     * 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.
     * The source can be contained inline (Attachment), referenced directly (Consent), referenced in a consent repository (DocumentReference), or simply by an identifier (Identifier), e.g. a CDA document id.
     */
    sourceAttachment?: Attachment;
    /**
     * Source from which this consent is taken
     * 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.
     * The source can be contained inline (Attachment), referenced directly (Consent), referenced in a consent repository (DocumentReference), or simply by an identifier (Identifier), e.g. a CDA document id.
     */
    sourceReference?: Reference;
    /**
     * Policies covered by this consent
     * The references to the policies that are included in this consent scope. Policies may be organizational, but are often defined jurisdictionally, or in law.
     */
    policy?: ConsentPolicy[];
    /**
     * Regulation that this consents to
     * A reference to the specific base computable regulation or policy.
     * If the policyRule is absent, computable consent would need to be constructed from the elements of the Consent resource.
     */
    policyRule?: CodeableConcept;
    /**
     * Consent Verified by patient or family
     * Whether a treatment instruction (e.g. artificial respiration yes or no) was verified with the patient, his/her family or another authorized person.
     */
    verification?: ConsentVerification[];
    /**
     * Constraints to the base Consent.policyRule
     * An exception to the base policy of this consent. An exception can be an addition or removal of access permissions.
     */
    provision?: ConsentProvision;
    /**
     * draft | proposed | active | rejected | inactive | entered-in-error
     * Indicates the current state of this consent.
     * This element is labeled as a modifier because the status contains the codes rejected and entered-in-error that mark the Consent as not currently valid.
     */
    status: ConsentState;
}
/**
 * Contract precursor content
 * Precusory content developed with a focus and intent of supporting the formation a Contract instance, which may be associated with and transformable into a Contract.
 */
export interface ContractContentDefinition extends BackboneElement {
    /**
     * Content structure and use
     * Precusory content structure and use, i.e., a boilerplate, template, application for a contract such as an insurance policy or benefits under a program, e.g., workers compensation.
     */
    type: CodeableConcept;
    /**
     * Detailed Content Type Definition
     * Detailed Precusory content type.
     */
    subType?: CodeableConcept;
    /**
     * Publisher Entity
     * The  individual or organization that published the Contract precursor content.
     */
    publisher?: Reference;
    /**
     * When published
     * The date (and optionally time) when the contract was published. The date must change 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 contract changes.
     */
    publicationDate?: dateTime;
    /**
     * Extension for publicationDate
     **/
    _publicationDate?: Element;
    /**
     * Publication Ownership
     * A copyright statement relating to Contract precursor content. Copyright statements are generally legal restrictions on the use and publishing of the Contract precursor content.
     */
    copyright?: markdown;
    /**
     * Extension for copyright
     **/
    _copyright?: Element;
    /**
     * amended | appended | cancelled | disputed | entered-in-error | executable | executed | negotiable | offered | policy | rejected | renewed | revoked | resolved | terminated
     * amended | appended | cancelled | disputed | entered-in-error | executable | executed | negotiable | offered | policy | rejected | renewed | revoked | resolved | terminated.
     */
    publicationStatus: ContractPublicationStatus;
}
/**
 * Protection for the Term
 * Security labels that protect the handling of information about the term and its elements, which may be specifically identified..
 */
export interface ContractTermSecurityLabel extends BackboneElement {
    /**
     * Link to Security Labels
     * Number used to link this term or term element to the applicable Security Label.
     */
    number?: unsignedInt[];
    /**
     * Extension for number
     **/
    _number?: Element[];
    /**
     * Confidentiality Protection
     * Security label privacy tag that species the level of confidentiality protection required for this term and/or term elements.
     */
    classification: Coding;
    /**
     * Applicable Policy
     * Security label privacy tag that species the applicable privacy and security policies governing this term and/or term elements.
     */
    category?: Coding[];
    /**
     * Handling Instructions
     * Security label privacy tag that species the manner in which term and/or term elements are to be protected.
     */
    control?: Coding[];
}
/**
 * Offer Recipient
 * Offer Recipient.
 */
export interface ContractTermOfferParty extends BackboneElement {
    /**
     * Referenced entity
     * Participant in the offer.
     */
    reference: Reference[];
    /**
     * Participant engagement type
     * How the party participates in the offer.
     */
    role: CodeableConcept;
}
/**
 * Response to offer text
 * Response to offer text.
 */
export interface ContractTermOfferAnswer extends BackboneElement {
    /**
     * The actual answer response
     * Response to an offer clause or question text,  which enables selection of values to be agreed to, e.g., the period of participation, the date of occupancy of a rental, warrently duration, or whether biospecimen may be used for further research.
     */
    valueBoolean?: boolean;
    /**
     * Extension for valueBoolean
     **/
    _valueBoolean?: Element;
    /**
     * The actual answer response
     * Response to an offer clause or question text,  which enables selection of values to be agreed to, e.g., the period of participation, the date of occupancy of a rental, warrently duration, or whether biospecimen may be used for further research.
     */
    valueDecimal?: decimal;
    /**
     * Extension for valueDecimal
     **/
    _valueDecimal?: Element;
    /**
     * The actual answer response
     * Response to an offer clause or question text,  which enables selection of values to be agreed to, e.g., the period of participation, the date of occupancy of a rental, warrently duration, or whether biospecimen may be used for further research.
     */
    valueInteger?: integer;
    /**
     * Extension for valueInteger
     **/
    _valueInteger?: Element;
    /**
     * The actual answer response
     * Response to an offer clause or question text,  which enables selection of values to be agreed to, e.g., the period of participation, the date of occupancy of a rental, warrently duration, or whether biospecimen may be used for further research.
     */
    valueDate?: date;
    /**
     * Extension for valueDate
     **/
    _valueDate?: Element;
    /**
     * The actual answer response
     * Response to an offer clause or question text,  which enables selection of values to be agreed to, e.g., the period of participation, the date of occupancy of a rental, warrently duration, or whether biospecimen may be used for further research.
     */
    valueDateTime?: dateTime;
    /**
     * Extension for valueDateTime
     **/
    _valueDateTime?: Element;
    /**
     * The actual answer response
     * Response to an offer clause or question text,  which enables selection of values to be agreed to, e.g., the period of participation, the date of occupancy of a rental, warrently duration, or whether biospecimen may be used for further research.
     */
    valueTime?: time;
    /**
     * Extension for valueTime
     **/
    _valueTime?: Element;
    /**
     * The actual answer response
     * Response to an offer clause or question text,  which enables selection of values to be agreed to, e.g., the period of participation, the date of occupancy of a rental, warrently duration, or whether biospecimen may be used for further research.
     */
    valueString?: string;
    /**
     * Extension for valueString
     **/
    _valueString?: Element;
    /**
     * The actual answer response
     * Response to an offer clause or question text,  which enables selection of values to be agreed to, e.g., the period of participation, the date of occupancy of a rental, warrently duration, or whether biospecimen may be used for further research.
     */
    valueUri?: uri;
    /**
     * Extension for valueUri
     **/
    _valueUri?: Element;
    /**
     * The actual answer response
     * Response to an offer clause or question text,  which enables selection of values to be agreed to, e.g., the period of participation, the date of occupancy of a rental, warrently duration, or whether biospecimen may be used for further research.
     */
    valueAttachment?: Attachment;
    /**
     * The actual answer response
     * Response to an offer clause or question text,  which enables selection of values to be agreed to, e.g., the period of participation, the date of occupancy of a rental, warrently duration, or whether biospecimen may be used for further research.
     */
    valueCoding?: Coding;
    /**
     * The actual answer response
     * Response to an offer clause or question text,  which enables selection of values to be agreed to, e.g., the period of participation, the date of occupancy of a rental, warrently duration, or whether biospecimen may be used for further research.
     */
    valueQuantity?: Quantity;
    /**
     * The actual answer response
     * Response to an offer clause or question text,  which enables selection of values to be agreed to, e.g., the period of participation, the date of occupancy of a rental, warrently duration, or whether biospecimen may be used for further research.
     */
    valueReference?: Reference;
}
/**
 * Context of the Contract term
 * The matter of concern in the context of this provision of the agrement.
 */
export interface ContractTermOffer extends BackboneElement {
    /**
     * Offer business ID
     * Unique identifier for this particular Contract Provision.
     */
    identifier?: Identifier[];
    /**
     * Offer Recipient
     * Offer Recipient.
     */
    party?: ContractTermOfferParty[];
    /**
     * Negotiable offer asset
     * The owner of an asset has the residual control rights over the asset: the right to decide all usages of the asset in any way not inconsistent with a prior contract, custom, or law (Hart, 1995, p. 30).
     * The Contract.topic may be an application for or offer of a policy or service (e.g., uri to a consent directive form or a health insurance policy), which becomes the Contract once accepted by both the grantor and grantee.
The Contract Resource may function simply as the computable representation of the executed contract, which may be the attached to the Contract Resource as the “binding” or as the “friendly” electronic form.  For example, a Contract Resource may be automatically populated with the values expressed in a related QuestionnaireResponse.
However, the Contract Resource may be considered the legally binding contract if it is the only “executed” form of this contract, and includes the signatures as *The Contract Resource may function as the computable representation of an application or offer in a pre-executed Contract if the grantor has not entered any values.  In this case, it is populated with values in a “legal” form of the application or offer or by the values in an associated Questionnaire.  If the grantor has filled in the legal form or the associated Questionnaire Response, then these values are used to populate a pre-executed Contract Resource.
If the Contract.topic is considered an application or offer, then the policy is often required to be attached as the “legal” basis for the application to ensure “informed consent” to the contract, and that any discrepancy between the application and the policy are interpreted against the policy.  Implementers should check organizational and jurisdictional policies to determine the relationship among multiple representations of a contract pre- and post-execution.
     */
    topic?: Reference;
    /**
     * Contract Offer Type or Form
     * Type of Contract Provision such as specific requirements, purposes for actions, obligations, prohibitions, e.g. life time maximum benefit.
     */
    type?: CodeableConcept;
    /**
     * Accepting party choice
     * Type of choice made by accepting party with respect to an offer made by an offeror/ grantee.
     */
    decision?: CodeableConcept;
    /**
     * How decision is conveyed
     * How the decision about a Contract was conveyed.
     */
    decisionMode?: CodeableConcept[];
    /**
     * Response to offer text
     * Response to offer text.
     */
    answer?: ContractTermOfferAnswer[];
    /**
     * Human readable offer text
     * Human readable form of this Contract Offer.
     */
    text?: string;
    /**
     * Extension for text
     **/
    _text?: Element;
    /**
     * Pointer to text
     * The id of the clause or question text of the offer in the referenced questionnaire/response.
     */
    linkId?: string[];
    /**
     * Extension for linkId
     **/
    _linkId?: Element[];
    /**
     * Offer restriction numbers
     * Security labels that protects the offer.
     */
    securityLabelNumber?: unsignedInt[];
    /**
     * Extension for securityLabelNumber
     **/
    _securityLabelNumber?: Element[];
}
/**
 * Circumstance of the asset
 * Circumstance of the asset.
 */
export interface ContractTermAssetContext extends BackboneElement {
    /**
     * Creator,custodian or owner
     * Asset context reference may include the creator, custodian, or owning Person or Organization (e.g., bank, repository),  location held, e.g., building,  jurisdiction.
     */
    reference?: Reference;
    /**
     * Codeable asset context
     * Coded representation of the context generally or of the Referenced entity, such as the asset holder type or location.
     */
    code?: CodeableConcept[];
    /**
     * Context description
     * Context description.
     */
    text?: string;
    /**
     * Extension for text
     **/
    _text?: Element;
}
/**
 * Contract Valued Item List
 * Contract Valued Item List.
 */
export interface ContractTermAssetValuedItem extends BackboneElement {
    /**
     * Contract Valued Item Type
     * Specific type of Contract Valued Item that may be priced.
     */
    entityCodeableConcept?: CodeableConcept;
    /**
     * Contract Valued Item Type
     * Specific type of Contract Valued Item that may be priced.
     */
    entityReference?: Reference;
    /**
     * Contract Valued Item Number
     * Identifies a Contract Valued Item instance.
     */
    identifier?: Identifier;
    /**
     * Contract Valued Item Effective Tiem
     * Indicates the time during which this Contract ValuedItem information is effective.
     */
    effectiveTime?: dateTime;
    /**
     * Extension for effectiveTime
     **/
    _effectiveTime?: Element;
    /**
     * Count of Contract Valued Items
     * Specifies the units by which the Contract Valued Item is measured or counted, and quantifies the countable or measurable Contract Valued Item instances.
     */
    quantity?: Quantity;
    /**
     * Contract Valued Item fee, charge, or cost
     * A Contract Valued Item unit valuation measure.
     */
    unitPrice?: Money;
    /**
     * Contract Valued Item Price Scaling Factor
     * 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.
     */
    factor?: decimal;
    /**
     * Extension for factor
     **/
    _factor?: Element;
    /**
     * Contract Valued Item Difficulty Scaling Factor
     * 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.
     */
    points?: decimal;
    /**
     * Extension for points
     **/
    _points?: Element;
    /**
     * Total Contract Valued Item Value
     * 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.
     */
    net?: Money;
    /**
     * Terms of valuation
     * Terms of valuation.
     */
    payment?: string;
    /**
     * Extension for payment
     **/
    _payment?: Element;
    /**
     * When payment is due
     * When payment is due.
     */
    paymentDate?: dateTime;
    /**
     * Extension for paymentDate
     **/
    _paymentDate?: Element;
    /**
     * Who will make payment
     * Who will make payment.
     */
    responsible?: Reference;
    /**
     * Who will receive payment
     * Who will receive payment.
     */
    recipient?: Reference;
    /**
     * Pointer to specific item
     * Id  of the clause or question text related to the context of this valuedItem in the referenced form or QuestionnaireResponse.
     */
    linkId?: string[];
    /**
     * Extension for linkId
     **/
    _linkId?: Element[];
    /**
     * Security Labels that define affected terms
     * A set of security labels that define which terms are controlled by this condition.
     */
    securityLabelNumber?: unsignedInt[];
    /**
     * Extension for securityLabelNumber
     **/
    _securityLabelNumber?: Element[];
}
/**
 * Contract Term Asset List
 * Contract Term Asset List.
 */
export interface ContractTermAsset extends BackboneElement {
    /**
     * Range of asset
     * Differentiates the kind of the asset .
     */
    scope?: CodeableConcept;
    /**
     * Asset category
     * Target entity type about which the term may be concerned.
     */
    type?: CodeableConcept[];
    /**
     * Associated entities
     * Associated entities.
     */
    typeReference?: Reference[];
    /**
     * Asset sub-category
     * May be a subtype or part of an offered asset.
     */
    subtype?: CodeableConcept[];
    /**
     * Kinship of the asset
     * Specifies the applicability of the term to an asset resource instance, and instances it refers to orinstances that refer to it, and/or are owned by the offeree.
     */
    relationship?: Coding;
    /**
     * Circumstance of the asset
     * Circumstance of the asset.
     */
    context?: ContractTermAssetContext[];
    /**
     * Quality desctiption of asset
     * Description of the quality and completeness of the asset that imay be a factor in its valuation.
     */
    condition?: string;
    /**
     * Extension for condition
     **/
    _condition?: Element;
    /**
     * Asset availability types
     * Type of Asset availability for use or ownership.
     */
    periodType?: CodeableConcept[];
    /**
     * Time period of the asset
     * Asset relevant contractual time period.
     */
    period?: Period[];
    /**
     * Time period
     * Time period of asset use.
     */
    usePeriod?: Period[];
    /**
     * Asset clause or question text
     * Clause or question text (Prose Object) concerning the asset in a linked form, such as a QuestionnaireResponse used in the formation of the contract.
     */
    text?: string;
    /**
     * Extension for text
     **/
    _text?: Element;
    /**
     * Pointer to asset text
     * Id [identifier??] of the clause or question text about the asset in the referenced form or QuestionnaireResponse.
     */
    linkId?: string[];
    /**
     * Extension for linkId
     **/
    _linkId?: Element[];
    /**
     * Response to assets
     * Response to assets.
     */
    answer?: ContractTermOfferAnswer[];
    /**
     * Asset restriction numbers
     * Security labels that protects the asset.
     */
    securityLabelNumber?: unsignedInt[];
    /**
     * Extension for securityLabelNumber
     **/
    _securityLabelNumber?: Element[];
    /**
     * Contract Valued Item List
     * Contract Valued Item List.
     */
    valuedItem?: ContractTermAssetValuedItem[];
}
/**
 * Entity of the action
 * Entity of the action.
 */
export interface ContractTermActionSubject extends BackboneElement {
    /**
     * Entity of the action
     * The entity the action is performed or not performed on or for.
     */
    reference: Reference[];
    /**
     * Role type of the agent
     * Role type of agent assigned roles in this Contract.
     */
    role?: CodeableConcept;
}
/**
 * Entity being ascribed responsibility
 * An actor taking a role in an activity for which it can be assigned some degree of responsibility for the activity taking place.
 * Several agents may be associated (i.e. has some responsibility for an activity) with an activity and vice-versa.
For example, in cases of actions initiated by one user for other users, or in events that involve more than one user, hardware device, software, or system process. However, only one user may be the initiator/requestor for the event.
 */
export interface ContractTermAction extends BackboneElement {
    /**
     * True if the term prohibits the  action
     * True if the term prohibits the  action.
     */
    doNotPerform?: boolean;
    /**
     * Extension for doNotPerform
     **/
    _doNotPerform?: Element;
    /**
     * Type or form of the action
     * Activity or service obligation to be done or not done, performed or not performed, effectuated or not by this Contract term.
     */
    type: CodeableConcept;
    /**
     * Entity of the action
     * Entity of the action.
     */
    subject?: ContractTermActionSubject[];
    /**
     * Purpose for the Contract Term Action
     * Reason or purpose for the action stipulated by this Contract Provision.
     */
    intent: CodeableConcept;
    /**
     * Pointer to specific item
     * Id [identifier??] of the clause or question text related to this action in the referenced form or QuestionnaireResponse.
     */
    linkId?: string[];
    /**
     * Extension for linkId
     **/
    _linkId?: Element[];
    /**
     * State of the action
     * Current state of the term action.
     */
    status: CodeableConcept;
    /**
     * Episode associated with action
     * Encounter or Episode with primary association to specified term activity.
     */
    context?: Reference;
    /**
     * Pointer to specific item
     * Id [identifier??] of the clause or question text related to the requester of this action in the referenced form or QuestionnaireResponse.
     */
    contextLinkId?: string[];
    /**
     * Extension for contextLinkId
     **/
    _contextLinkId?: Element[];
    /**
     * When action happens
     * When action happens.
     */
    occurrenceDateTime?: dateTime;
    /**
     * Extension for occurrenceDateTime
     **/
    _occurrenceDateTime?: Element;
    /**
     * When action happens
     * When action happens.
     */
    occurrencePeriod?: Period;
    /**
     * When action happens
     * When action happens.
     */
    occurrenceTiming?: Timing;
    /**
     * Who asked for action
     * Who or what initiated the action and has responsibility for its activation.
     */
    requester?: Reference[];
    /**
     * Pointer to specific item
     * Id [identifier??] of the clause or question text related to the requester of this action in the referenced form or QuestionnaireResponse.
     */
    requesterLinkId?: string[];
    /**
     * Extension for requesterLinkId
     **/
    _requesterLinkId?: Element[];
    /**
     * Kind of service performer
     * The type of individual that is desired or required to perform or not perform the action.
     */
    performerType?: CodeableConcept[];
    /**
     * Competency of the performer
     * The type of role or competency of an individual desired or required to perform or not perform the action.
     */
    performerRole?: CodeableConcept;
    /**
     * Actor that wil execute (or not) the action
     * Indicates who or what is being asked to perform (or not perform) the ction.
     */
    performer?: Reference;
    /**
     * Pointer to specific item
     * Id [identifier??] of the clause or question text related to the reason type or reference of this  action in the referenced form or QuestionnaireResponse.
     */
    performerLinkId?: string[];
    /**
     * Extension for performerLinkId
     **/
    _performerLinkId?: Element[];
    /**
     * Why is action (not) needed?
     * Rationale for the action to be performed or not performed. Describes why the action is permitted or prohibited.
     */
    reasonCode?: CodeableConcept[];
    /**
     * Why is action (not) needed?
     * Indicates another resource whose existence justifies permitting or not permitting this action.
     */
    reasonReference?: Reference[];
    /**
     * Why action is to be performed
     * Describes why the action is to be performed or not performed in textual form.
     */
    reason?: string[];
    /**
     * Extension for reason
     **/
    _reason?: Element[];
    /**
     * Pointer to specific item
     * Id [identifier??] of the clause or question text related to the reason type or reference of this  action in the referenced form or QuestionnaireResponse.
     */
    reasonLinkId?: string[];
    /**
     * Extension for reasonLinkId
     **/
    _reasonLinkId?: Element[];
    /**
     * Comments about the action
     * Comments made about the term action made by the requester, performer, subject or other participants.
     */
    note?: Annotation[];
    /**
     * Action restriction numbers
     * Security labels that protects the action.
     */
    securityLabelNumber?: unsignedInt[];
    /**
     * Extension for securityLabelNumber
     **/
    _securityLabelNumber?: Element[];
}
/**
 * Contract Term List
 * One or more Contract Provisions, which may be related and conveyed as a group, and may contain nested groups.
 */
export interface ContractTerm extends BackboneElement {
    /**
     * Contract Term Number
     * Unique identifier for this particular Contract Provision.
     */
    identifier?: Identifier;
    /**
     * Contract Term Issue Date Time
     * When this Contract Provision was issued.
     */
    issued?: dateTime;
    /**
     * Extension for issued
     **/
    _issued?: Element;
    /**
     * Contract Term Effective Time
     * Relevant time or time-period when this Contract Provision is applicable.
     */
    applies?: Period;
    /**
     * Term Concern
     * The entity that the term applies to.
     */
    topicCodeableConcept?: CodeableConcept;
    /**
     * Term Concern
     * The entity that the term applies to.
     */
    topicReference?: Reference;
    /**
     * Contract Term Type or Form
     * A legal clause or condition contained within a contract that requires one or both parties to perform a particular requirement by some specified time or prevents one or both parties from performing a particular requirement by some specified time.
     */
    type?: CodeableConcept;
    /**
     * Contract Term Type specific classification
     * A specialized legal clause or condition based on overarching contract type.
     */
    subType?: CodeableConcept;
    /**
     * Term Statement
     * Statement of a provision in a policy or a contract.
     */
    text?: string;
    /**
     * Extension for text
     **/
    _text?: Element;
    /**
     * Protection for the Term
     * Security labels that protect the handling of information about the term and its elements, which may be specifically identified..
     */
    securityLabel?: ContractTermSecurityLabel[];
    /**
     * Context of the Contract term
     * The matter of concern in the context of this provision of the agrement.
     */
    offer: ContractTermOffer;
    /**
     * Contract Term Asset List
     * Contract Term Asset List.
     */
    asset?: ContractTermAsset[];
    /**
     * Entity being ascribed responsibility
     * An actor taking a role in an activity for which it can be assigned some degree of responsibility for the activity taking place.
     * Several agents may be associated (i.e. has some responsibility for an activity) with an activity and vice-versa.
For example, in cases of actions initiated by one user for other users, or in events that involve more than one user, hardware device, software, or system process. However, only one user may be the initiator/requestor for the event.
     */
    action?: ContractTermAction[];
    /**
     * Nested Contract Term Group
     * Nested group of Contract Provisions.
     */
    group?: ContractTerm[];
}
/**
 * Contract Signatory
 * 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.
 * Signers who are principal parties to the contract are bound by the Contract.activity related to the Contract.topic, and the Contract.term(s), which either extend or restrict the overall action on the topic by, for example, stipulating specific policies or obligations constraining actions, action reason, or agents with respect to some or all of the topic.
For example, specifying how policies or obligations shall constrain actions and action reasons permitted or denied on all or a subset of the Contract.topic (e.g., all or a portion of property being transferred by the contract), agents (e.g., who can resell, assign interests, or alter the property being transferred by the contract), actions, and action reasons; or with respect to Contract.terms, stipulating, extending, or limiting the Contract.period of applicability or valuation of items under consideration.
 */
export interface ContractSigner extends BackboneElement {
    /**
     * Contract Signatory Role
     * Role of this Contract signer, e.g. notary, grantee.
     */
    type: Coding;
    /**
     * Contract Signatory Party
     * Party which is a signator to this Contract.
     */
    party: Reference;
    /**
     * Contract Documentation Signature
     * Legally binding Contract DSIG signature contents in Base64.
     */
    signature: Signature[];
}
/**
 * Contract Friendly Language
 * 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.
 */
export interface ContractFriendly extends BackboneElement {
    /**
     * Easily comprehended representation of this Contract
     * Human readable rendering of this Contract in a format and representation intended to enhance comprehension and ensure understandability.
     */
    contentAttachment?: Attachment;
    /**
     * Easily comprehended representation of this Contract
     * Human readable rendering of this Contract in a format and representation intended to enhance comprehension and ensure understandability.
     */
    contentReference?: Reference;
}
/**
 * Contract Legal Language
 * List of Legal expressions or representations of this Contract.
 */
export interface ContractLegal extends BackboneElement {
    /**
     * Contract Legal Text
     * Contract legal text in human renderable form.
     */
    contentAttachment?: Attachment;
    /**
     * Contract Legal Text
     * Contract legal text in human renderable form.
     */
    contentReference?: Reference;
}
/**
 * Computable Contract Language
 * List of Computable Policy Rule Language Representations of this Contract.
 */
export interface ContractRule extends BackboneElement {
    /**
     * Computable Contract Rules
     * Computable Contract conveyed using a policy rule language (e.g. XACML, DKAL, SecPal).
     */
    contentAttachment?: Attachment;
    /**
     * Computable Contract Rules
     * Computable Contract conveyed using a policy rule language (e.g. XACML, DKAL, SecPal).
     */
    contentReference?: Reference;
}
/**
 * Legal Agreement
 * Legally enforceable, formally recorded unilateral or bilateral directive i.e., a policy or agreement.
 */
export interface Contract extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Contract';
    /**
     * Contract number
     * Unique identifier for this Contract or a derivative that references a Source Contract.
     */
    identifier?: Identifier[];
    /**
     * Basal definition
     * Canonical identifier for this contract, represented as a URI (globally unique).
     * Used in a domain that uses a supplied contract repository.
     */
    url?: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Business edition
     * An edition identifier used for business purposes to label business significant variants.
     * Note -  This is a business versionId, not a resource version id (see discussion http://build.fhir.org/resource.html#versions)
Comments - There may be different contract instances that have the same identifier but different versions. The version can be appended to the url in a reference to allow a reference to a particular business version of the plan definition with the format [url]|[version].
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
    /**
     * Negotiation status
     * Legal states of the formation of a legal instrument, which is a formally executed written document that can be formally attributed to its author, records and formally expresses a legally enforceable act, process, or contractual duty, obligation, or right, and therefore evidences that act, process, or agreement.
     */
    legalState?: CodeableConcept;
    /**
     * Source Contract Definition
     * The URL pointing to a FHIR-defined Contract Definition that is adhered to in whole or part by this Contract.
     */
    instantiatesCanonical?: Reference;
    /**
     * External Contract Definition
     * The URL pointing to an externally maintained definition that is adhered to in whole or in part by this Contract.
     */
    instantiatesUri?: uri;
    /**
     * Extension for instantiatesUri
     **/
    _instantiatesUri?: Element;
    /**
     * Content derived from the basal information
     * The minimal content derived from the basal information source at a specific stage in its lifecycle.
     */
    contentDerivative?: CodeableConcept;
    /**
     * When this Contract was issued
     * When this  Contract was issued.
     */
    issued?: dateTime;
    /**
     * Extension for issued
     **/
    _issued?: Element;
    /**
     * Effective time
     * Relevant time or time-period when this Contract is applicable.
     */
    applies?: Period;
    /**
     * Contract cessation cause
     * Event resulting in discontinuation or termination of this Contract instance by one or more parties to the contract.
     */
    expirationType?: CodeableConcept;
    /**
     * Contract Target Entity
     * The target entity impacted by or of interest to parties to the agreement.
     * The Contract.subject is an entity that has some role with respect to the Contract.topic and Contract.topic.term, which is of focal interest to the parties to the contract and likely impacted in a significant way by the Contract.action/Contract.action.reason and the Contract.term.action/Contract.action.reason.
In many cases, the Contract.subject is a Contract.signer if the subject is an adult; has a legal interest in the contract; and incompetent to participate in the contract agreement.
     */
    subject?: Reference[];
    /**
     * Authority under which this Contract has standing
     * 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.
     */
    authority?: Reference[];
    /**
     * A sphere of control governed by an authoritative jurisdiction, organization, or person
     * 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.
     */
    domain?: Reference[];
    /**
     * Specific Location
     * Sites in which the contract is complied with,  exercised, or in force.
     */
    site?: Reference[];
    /**
     * Computer friendly designation
     * A natural language name identifying this Contract definition, derivative, or instance in any legal state. Provides additional information about its content. This name should be usable as an identifier for the module by machine processing applications such as code generation.
     * The name is not expected to be globally unique. The name should be a simple alphanumeric type name to ensure that it is machine-processing friendly.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Human Friendly name
     * A short, descriptive, user-friendly title for this Contract definition, derivative, or instance in any legal state.t giving additional information about its content.
     */
    title?: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * Subordinate Friendly name
     * An explanatory or alternate user-friendly title for this Contract definition, derivative, or instance in any legal state.t giving additional information about its content.
     */
    subtitle?: string;
    /**
     * Extension for subtitle
     **/
    _subtitle?: Element;
    /**
     * Acronym or short name
     * Alternative representation of the title for this Contract definition, derivative, or instance in any legal state., e.g., a domain specific contract number related to legislation.
     */
    alias?: string[];
    /**
     * Extension for alias
     **/
    _alias?: Element[];
    /**
     * Source of Contract
     * The individual or organization that authored the Contract definition, derivative, or instance in any legal state.
     */
    author?: Reference;
    /**
     * Range of Legal Concerns
     * A selector of legal concerns for this Contract definition, derivative, or instance in any legal state.
     */
    scope?: CodeableConcept;
    /**
     * Focus of contract interest
     * Narrows the range of legal concerns to focus on the achievement of specific contractual objectives.
     */
    topicCodeableConcept?: CodeableConcept;
    /**
     * Focus of contract interest
     * Narrows the range of legal concerns to focus on the achievement of specific contractual objectives.
     */
    topicReference?: Reference;
    /**
     * Legal instrument category
     * A high-level category for the legal instrument, whether constructed as a Contract definition, derivative, or instance in any legal state.  Provides additional information about its content within the context of the Contract's scope to distinguish the kinds of systems that would be interested in the contract.
     */
    type?: CodeableConcept;
    /**
     * Subtype within the context of type
     * Sub-category for the Contract that distinguishes the kinds of systems that would be interested in the Contract within the context of the Contract's scope.
     */
    subType?: CodeableConcept[];
    /**
     * Contract precursor content
     * Precusory content developed with a focus and intent of supporting the formation a Contract instance, which may be associated with and transformable into a Contract.
     */
    contentDefinition?: ContractContentDefinition;
    /**
     * Contract Term List
     * One or more Contract Provisions, which may be related and conveyed as a group, and may contain nested groups.
     */
    term?: ContractTerm[];
    /**
     * Extra Information
     * Information that may be needed by/relevant to the performer in their execution of this term action.
     */
    supportingInfo?: Reference[];
    /**
     * Key event in Contract History
     * Links to Provenance records for past versions of this Contract definition, derivative, or instance, which identify key state transitions or updates that are likely to be relevant to a user looking at the current version of the Contract.  The Provence.entity indicates the target that was changed in the update. http://build.fhir.org/provenance-definitions.html#Provenance.entity.
     */
    relevantHistory?: Reference[];
    /**
     * Contract Signatory
     * 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.
     * Signers who are principal parties to the contract are bound by the Contract.activity related to the Contract.topic, and the Contract.term(s), which either extend or restrict the overall action on the topic by, for example, stipulating specific policies or obligations constraining actions, action reason, or agents with respect to some or all of the topic.
For example, specifying how policies or obligations shall constrain actions and action reasons permitted or denied on all or a subset of the Contract.topic (e.g., all or a portion of property being transferred by the contract), agents (e.g., who can resell, assign interests, or alter the property being transferred by the contract), actions, and action reasons; or with respect to Contract.terms, stipulating, extending, or limiting the Contract.period of applicability or valuation of items under consideration.
     */
    signer?: ContractSigner[];
    /**
     * Contract Friendly Language
     * 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.
     */
    friendly?: ContractFriendly[];
    /**
     * Contract Legal Language
     * List of Legal expressions or representations of this Contract.
     */
    legal?: ContractLegal[];
    /**
     * Computable Contract Language
     * List of Computable Policy Rule Language Representations of this Contract.
     */
    rule?: ContractRule[];
    /**
     * Binding Contract
     * 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.
     */
    legallyBindingAttachment?: Attachment;
    /**
     * Binding Contract
     * 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.
     */
    legallyBindingReference?: Reference;
    /**
     * amended | appended | cancelled | disputed | entered-in-error | executable | executed | negotiable | offered | policy | rejected | renewed | revoked | resolved | terminated
     * The status of the resource instance.
     * This element is labeled as a modifier because the status contains codes that mark the contract as not currently valid or active.
     */
    status?: ContractStatus;
}
/**
 * Additional coverage classifications
 * A suite of underwriter specific classifiers.
 * For example may be used to identify a class of coverage or employer group, Policy, Plan.
 */
export interface CoverageClass extends BackboneElement {
    /**
     * Type of class such as 'group' or 'plan'
     * The type of classification for which an insurer-specific class label or number and optional name is provided, for example may be used to identify a class of coverage or employer group, Policy, Plan.
     */
    type: CodeableConcept;
    /**
     * Value associated with the type
     * The alphanumeric string value associated with the insurer issued label.
     * For example, the Group or Plan number.
     */
    value: string;
    /**
     * Extension for value
     **/
    _value?: Element;
    /**
     * Human readable description of the type and value
     * A short description for the class.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
}
/**
 * Exceptions for patient payments
 * A suite of codes indicating exceptions or reductions to patient costs and their effective periods.
 */
export interface CoverageCostToBeneficiaryException extends BackboneElement {
    /**
     * Exception category
     * The code for the specific exception.
     */
    type: CodeableConcept;
    /**
     * The effective period of the exception
     * The timeframe during when the exception is in force.
     */
    period?: Period;
}
/**
 * Patient payments for services/products
 * A suite of codes indicating the cost category and associated amount which have been detailed in the policy and may have been  included on the health card.
 * For example by knowing the patient visit co-pay, the provider can collect the amount prior to undertaking treatment.
 */
export interface CoverageCostToBeneficiary extends BackboneElement {
    /**
     * Cost category
     * The category of patient centric costs associated with treatment.
     * For example visit, specialist visits, emergency, inpatient care, etc.
     */
    type?: CodeableConcept;
    /**
     * The amount or percentage due from the beneficiary
     * The amount due from the patient for the cost category.
     * Amount may be expressed as a percentage of the service/product cost or a fixed amount of currency.
     */
    valueQuantity?: Quantity;
    /**
     * The amount or percentage due from the beneficiary
     * The amount due from the patient for the cost category.
     * Amount may be expressed as a percentage of the service/product cost or a fixed amount of currency.
     */
    valueMoney?: Money;
    /**
     * Exceptions for patient payments
     * A suite of codes indicating exceptions or reductions to patient costs and their effective periods.
     */
    exception?: CoverageCostToBeneficiaryException[];
}
/**
 * Insurance or medical plan or a payment agreement
 * Financial instrument which may be used to reimburse or pay for health care products and services. Includes both insurance and self-payment.
 * The Coverage resource contains the insurance card level information, which is customary to provide on claims and other communications between providers and insurers.
 */
export interface Coverage extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Coverage';
    /**
     * Business Identifier for the coverage
     * A unique identifier assigned to this coverage.
     * 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 concatenation of the Coverage.SubscriberID and the Coverage.dependant.
     */
    identifier?: Identifier[];
    /**
     * Coverage category such as medical or accident
     * The type of coverage: social program, medical plan, accident coverage (workers compensation, auto), group health or payment by an individual or organization.
     */
    type?: CodeableConcept;
    /**
     * Owner of the policy
     * The party who 'owns' the insurance policy.
     * For example: may be an individual, corporation or the subscriber's employer.
     */
    policyHolder?: Reference;
    /**
     * Subscriber to the policy
     * 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.
     * May be self or a parent in the case of dependants.
     */
    subscriber?: Reference;
    /**
     * ID assigned to the subscriber
     * The insurer assigned ID for the Subscriber.
     */
    subscriberId?: string;
    /**
     * Extension for subscriberId
     **/
    _subscriberId?: Element;
    /**
     * Plan beneficiary
     * The party who benefits from the insurance coverage; the patient when products and/or services are provided.
     */
    beneficiary: Reference;
    /**
     * Dependent number
     * A unique identifier for a dependent under the coverage.
     * Periodically the member number is constructed from the subscriberId and the dependant number.
     */
    dependent?: string;
    /**
     * Extension for dependent
     **/
    _dependent?: Element;
    /**
     * Beneficiary relationship to the subscriber
     * The relationship of beneficiary (patient) to the subscriber.
     * Typically, an individual uses policies which are theirs (relationship='self') before policies owned by others.
     */
    relationship?: CodeableConcept;
    /**
     * Coverage start and end dates
     * 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.
     */
    period?: Period;
    /**
     * Issuer of the policy
     * 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).
For selfpay it may provide multiple paying persons and/or organizations.
     */
    payor: Reference[];
    /**
     * Additional coverage classifications
     * A suite of underwriter specific classifiers.
     * For example may be used to identify a class of coverage or employer group, Policy, Plan.
     */
    class?: CoverageClass[];
    /**
     * Relative order of the coverage
     * The order of applicability of this coverage relative to other coverages which are currently in force. Note, there may be gaps in the numbering and this does not imply primary, secondary etc. as the specific positioning of coverages depends upon the episode of care.
     */
    order?: positiveInt;
    /**
     * Extension for order
     **/
    _order?: Element;
    /**
     * Insurer network
     * 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.
     */
    network?: string;
    /**
     * Extension for network
     **/
    _network?: Element;
    /**
     * Patient payments for services/products
     * A suite of codes indicating the cost category and associated amount which have been detailed in the policy and may have been  included on the health card.
     * For example by knowing the patient visit co-pay, the provider can collect the amount prior to undertaking treatment.
     */
    costToBeneficiary?: CoverageCostToBeneficiary[];
    /**
     * Reimbursement to insurer
     * When 'subrogation=true' this insurance instance has been included not for adjudication but to provide insurers with the details to recover costs.
     * Typically, automotive and worker's compensation policies would be flagged with 'subrogation=true' to enable healthcare payors to collect against accident claims.
     */
    subrogation?: boolean;
    /**
     * Extension for subrogation
     **/
    _subrogation?: Element;
    /**
     * Contract details
     * The policy(s) which constitute this insurance coverage.
     */
    contract?: Reference[];
    /**
     * active | cancelled | draft | entered-in-error
     * The status of the resource instance.
     * This element is labeled as a modifier because the status contains the code entered-in-error that marks the coverage as not currently valid.
     */
    status: CoverageStatus;
}
/**
 * Supporting information
 * Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.
 * Often there are multiple jurisdiction specific valuesets which are required.
 */
export interface CoverageEligibilityRequestSupportingInfo extends BackboneElement {
    /**
     * Information instance identifier
     * A number to uniquely identify supporting information entries.
     */
    sequence: positiveInt;
    /**
     * Extension for sequence
     **/
    _sequence?: Element;
    /**
     * Data to be provided
     * Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.
     * Could be used to provide references to other resources, document. For example could contain a PDF in an Attachment of the Police Report for an Accident.
     */
    information: Reference;
    /**
     * Applies to all items
     * The supporting materials are applicable for all detail items, product/servce categories and specific billing codes.
     */
    appliesToAll?: boolean;
    /**
     * Extension for appliesToAll
     **/
    _appliesToAll?: Element;
}
/**
 * Patient insurance information
 * Financial instruments for reimbursement for the health care products and services.
 * All insurance coverages for the patient which may be applicable for reimbursement, of the products and services listed in the claim, are typically provided in the claim to allow insurers to confirm the ordering of the insurance coverages relative to local 'coordination of benefit' rules. One coverage (and only one) with 'focal=true' is to be used in the adjudication of this claim. Coverages appearing before the focal Coverage in the list, and where 'subrogation=false', should provide a reference to the ClaimResponse containing the adjudication results of the prior claim.
 */
export interface CoverageEligibilityRequestInsurance extends BackboneElement {
    /**
     * Applicable coverage
     * A flag to indicate that this Coverage is to be used for evaluation of this request when set to true.
     * A patient may (will) have multiple insurance policies which provide reimburement for healthcare services and products. For example a person may also be covered by their spouse's policy and both appear in the list (and may be from the same insurer). This flag will be set to true for only one of the listed policies and that policy will be used for evaluating this request. Other requests would be created to request evaluation against the other listed policies.
     */
    focal?: boolean;
    /**
     * Extension for focal
     **/
    _focal?: Element;
    /**
     * Insurance information
     * Reference to the insurance card level information contained in the Coverage resource. The coverage issuing insurer will use these details to locate the patient's actual coverage within the insurer's information system.
     */
    coverage: Reference;
    /**
     * Additional provider contract number
     * A business agreement number established between the provider and the insurer for special business processing purposes.
     */
    businessArrangement?: string;
    /**
     * Extension for businessArrangement
     **/
    _businessArrangement?: Element;
}
/**
 * Applicable diagnosis
 * Patient diagnosis for which care is sought.
 */
export interface CoverageEligibilityRequestItemDiagnosis extends BackboneElement {
    /**
     * Nature of illness or problem
     * The nature of illness or problem in a coded form or as a reference to an external defined Condition.
     */
    diagnosisCodeableConcept?: CodeableConcept;
    /**
     * Nature of illness or problem
     * The nature of illness or problem in a coded form or as a reference to an external defined Condition.
     */
    diagnosisReference?: Reference;
}
/**
 * Item to be evaluated for eligibiity
 * Service categories or billable services for which benefit details and/or an authorization prior to service delivery may be required by the payor.
 */
export interface CoverageEligibilityRequestItem extends BackboneElement {
    /**
     * Applicable exception or supporting information
     * Exceptions, special conditions and supporting information applicable for this service or product line.
     */
    supportingInfoSequence?: positiveInt[];
    /**
     * Extension for supportingInfoSequence
     **/
    _supportingInfoSequence?: Element[];
    /**
     * Benefit classification
     * Code to identify the general type of benefits under which products and services are provided.
     * Examples include Medical Care, Periodontics, Renal Dialysis, Vision Coverage.
     */
    category?: CodeableConcept;
    /**
     * Billing, service, product, or drug code
     * This contains the product, service, drug or other billing code for the item.
     * Code to indicate the Professional Service or Product supplied (e.g. CTP, HCPCS, USCLS, ICD10, NCPDP, DIN, RxNorm, ACHI, CCI).
     */
    productOrService?: CodeableConcept;
    /**
     * Product or service billing modifiers
     * Item typification or modifiers codes to convey additional context for the product or service.
     * For example in 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.
     */
    modifier?: CodeableConcept[];
    /**
     * Perfoming practitioner
     * The practitioner who is responsible for the product or service to be rendered to the patient.
     */
    provider?: Reference;
    /**
     * Count of products or services
     * The number of repetitions of a service or product.
     */
    quantity?: Quantity;
    /**
     * Fee, charge or cost per item
     * The amount charged to the patient by the provider for a single unit.
     */
    unitPrice?: Money;
    /**
     * Servicing facility
     * Facility where the services will be provided.
     */
    facility?: Reference;
    /**
     * Applicable diagnosis
     * Patient diagnosis for which care is sought.
     */
    diagnosis?: CoverageEligibilityRequestItemDiagnosis[];
    /**
     * Product or service details
     * The plan/proposal/order describing the proposed service in detail.
     */
    detail?: Reference[];
}
/**
 * CoverageEligibilityRequest resource
 * The CoverageEligibilityRequest provides patient and insurance coverage information to an insurer for them to respond, in the form of an CoverageEligibilityResponse, with information regarding whether the stated coverage is valid and in-force and optionally to provide the insurance details of the policy.
 */
export interface CoverageEligibilityRequest extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'CoverageEligibilityRequest';
    /**
     * Business Identifier for coverage eligiblity request
     * A unique identifier assigned to this coverage eligiblity request.
     */
    identifier?: Identifier[];
    /**
     * Desired processing priority
     * When the requestor expects the processor to complete processing.
     */
    priority?: CodeableConcept;
    /**
     * Intended recipient of products and services
     * The party who is the beneficiary of the supplied coverage and for whom eligibility is sought.
     * 1..1.
     */
    patient: Reference;
    /**
     * Estimated date or dates of service
     * The date or dates when the enclosed suite of services were performed or completed.
     */
    servicedDate?: date;
    /**
     * Extension for servicedDate
     **/
    _servicedDate?: Element;
    /**
     * Estimated date or dates of service
     * The date or dates when the enclosed suite of services were performed or completed.
     */
    servicedPeriod?: Period;
    /**
     * Creation date
     * The date when this resource was created.
     */
    created: dateTime;
    /**
     * Extension for created
     **/
    _created?: Element;
    /**
     * Author
     * Person who created the request.
     */
    enterer?: Reference;
    /**
     * Party responsible for the request
     * The provider which is responsible for the request.
     * Typically this field would be 1..1 where this party is responsible for the eligibility request but not necessarily professionally responsible for the provision of the individual products and services listed below.
     */
    provider?: Reference;
    /**
     * Coverage issuer
     * The Insurer who issued the coverage in question and is the recipient of the request.
     */
    insurer: Reference;
    /**
     * Servicing facility
     * Facility where the services are intended to be provided.
     */
    facility?: Reference;
    /**
     * Supporting information
     * Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.
     * Often there are multiple jurisdiction specific valuesets which are required.
     */
    supportingInfo?: CoverageEligibilityRequestSupportingInfo[];
    /**
     * Patient insurance information
     * Financial instruments for reimbursement for the health care products and services.
     * All insurance coverages for the patient which may be applicable for reimbursement, of the products and services listed in the claim, are typically provided in the claim to allow insurers to confirm the ordering of the insurance coverages relative to local 'coordination of benefit' rules. One coverage (and only one) with 'focal=true' is to be used in the adjudication of this claim. Coverages appearing before the focal Coverage in the list, and where 'subrogation=false', should provide a reference to the ClaimResponse containing the adjudication results of the prior claim.
     */
    insurance?: CoverageEligibilityRequestInsurance[];
    /**
     * Item to be evaluated for eligibiity
     * Service categories or billable services for which benefit details and/or an authorization prior to service delivery may be required by the payor.
     */
    item?: CoverageEligibilityRequestItem[];
    /**
     * active | cancelled | draft | entered-in-error
     * The status of the resource instance.
     * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
     */
    status: CoverageEligibilityRequestEligibilityRequestStatus;
    /**
     * auth-requirements | benefits | discovery | validation
     * Code to specify whether requesting: prior authorization requirements for some service categories or billing codes; benefits for coverages specified or discovered; discovery and return of coverages for the patient; and/or validation that the specified coverage is in-force at the date/period specified or 'now' if not specified.
     */
    purpose: CoverageEligibilityRequestEligibilityRequestPurpose[];
}
/**
 * Benefit Summary
 * Benefits used to date.
 */
export interface CoverageEligibilityResponseInsuranceItemBenefit extends BackboneElement {
    /**
     * Benefit classification
     * Classification of benefit being provided.
     * For example: deductible, visits, benefit amount.
     */
    type: CodeableConcept;
    /**
     * Benefits allowed
     * The quantity of the benefit which is permitted under the coverage.
     */
    allowedUnsignedInt?: unsignedInt;
    /**
     * Extension for allowedUnsignedInt
     **/
    _allowedUnsignedInt?: Element;
    /**
     * Benefits allowed
     * The quantity of the benefit which is permitted under the coverage.
     */
    allowedString?: string;
    /**
     * Extension for allowedString
     **/
    _allowedString?: Element;
    /**
     * Benefits allowed
     * The quantity of the benefit which is permitted under the coverage.
     */
    allowedMoney?: Money;
    /**
     * Benefits used
     * The quantity of the benefit which have been consumed to date.
     */
    usedUnsignedInt?: unsignedInt;
    /**
     * Extension for usedUnsignedInt
     **/
    _usedUnsignedInt?: Element;
    /**
     * Benefits used
     * The quantity of the benefit which have been consumed to date.
     */
    usedString?: string;
    /**
     * Extension for usedString
     **/
    _usedString?: Element;
    /**
     * Benefits used
     * The quantity of the benefit which have been consumed to date.
     */
    usedMoney?: Money;
}
/**
 * Benefits and authorization details
 * Benefits and optionally current balances, and authorization details by category or service.
 */
export interface CoverageEligibilityResponseInsuranceItem extends BackboneElement {
    /**
     * Benefit classification
     * Code to identify the general type of benefits under which products and services are provided.
     * Examples include Medical Care, Periodontics, Renal Dialysis, Vision Coverage.
     */
    category?: CodeableConcept;
    /**
     * Billing, service, product, or drug code
     * This contains the product, service, drug or other billing code for the item.
     * Code to indicate the Professional Service or Product supplied (e.g. CTP, HCPCS, USCLS, ICD10, NCPDP, DIN, RxNorm, ACHI, CCI).
     */
    productOrService?: CodeableConcept;
    /**
     * Product or service billing modifiers
     * Item typification or modifiers codes to convey additional context for the product or service.
     * For example in 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.
     */
    modifier?: CodeableConcept[];
    /**
     * Performing practitioner
     * The practitioner who is eligible for the provision of the product or service.
     */
    provider?: Reference;
    /**
     * Excluded from the plan
     * True if the indicated class of service is excluded from the plan, missing or False indicates the product or service is included in the coverage.
     */
    excluded?: boolean;
    /**
     * Extension for excluded
     **/
    _excluded?: Element;
    /**
     * Short name for the benefit
     * A short name or tag for the benefit.
     * For example: MED01, or DENT2.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Description of the benefit or services covered
     * A richer description of the benefit or services covered.
     * For example 'DENT2 covers 100% of basic, 50% of major but excludes Ortho, Implants and Cosmetic services'.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * In or out of network
     * Is a flag to indicate whether the benefits refer to in-network providers or out-of-network providers.
     */
    network?: CodeableConcept;
    /**
     * Individual or family
     * Indicates if the benefits apply to an individual or to the family.
     */
    unit?: CodeableConcept;
    /**
     * Annual or lifetime
     * The term or period of the values such as 'maximum lifetime benefit' or 'maximum annual visits'.
     */
    term?: CodeableConcept;
    /**
     * Benefit Summary
     * Benefits used to date.
     */
    benefit?: CoverageEligibilityResponseInsuranceItemBenefit[];
    /**
     * Authorization required flag
     * A boolean flag indicating whether a preauthorization is required prior to actual service delivery.
     */
    authorizationRequired?: boolean;
    /**
     * Extension for authorizationRequired
     **/
    _authorizationRequired?: Element;
    /**
     * Type of required supporting materials
     * Codes or comments regarding information or actions associated with the preauthorization.
     */
    authorizationSupporting?: CodeableConcept[];
    /**
     * Preauthorization requirements endpoint
     * A web location for obtaining requirements or descriptive information regarding the preauthorization.
     */
    authorizationUrl?: uri;
    /**
     * Extension for authorizationUrl
     **/
    _authorizationUrl?: Element;
}
/**
 * Patient insurance information
 * Financial instruments for reimbursement for the health care products and services.
 * All insurance coverages for the patient which may be applicable for reimbursement, of the products and services listed in the claim, are typically provided in the claim to allow insurers to confirm the ordering of the insurance coverages relative to local 'coordination of benefit' rules. One coverage (and only one) with 'focal=true' is to be used in the adjudication of this claim. Coverages appearing before the focal Coverage in the list, and where 'subrogation=false', should provide a reference to the ClaimResponse containing the adjudication results of the prior claim.
 */
export interface CoverageEligibilityResponseInsurance extends BackboneElement {
    /**
     * Insurance information
     * Reference to the insurance card level information contained in the Coverage resource. The coverage issuing insurer will use these details to locate the patient's actual coverage within the insurer's information system.
     */
    coverage: Reference;
    /**
     * Coverage inforce indicator
     * Flag indicating if the coverage provided is inforce currently if no service date(s) specified or for the whole duration of the service dates.
     */
    inforce?: boolean;
    /**
     * Extension for inforce
     **/
    _inforce?: Element;
    /**
     * When the benefits are applicable
     * The term of the benefits documented in this response.
     */
    benefitPeriod?: Period;
    /**
     * Benefits and authorization details
     * Benefits and optionally current balances, and authorization details by category or service.
     */
    item?: CoverageEligibilityResponseInsuranceItem[];
}
/**
 * Processing errors
 * Errors encountered during the processing of the request.
 */
export interface CoverageEligibilityResponseError extends BackboneElement {
    /**
     * Error code detailing processing issues
     * An error code,from a specified code system, which details why the eligibility check could not be performed.
     */
    code: CodeableConcept;
}
/**
 * CoverageEligibilityResponse resource
 * This resource provides eligibility and plan details from the processing of an CoverageEligibilityRequest resource.
 */
export interface CoverageEligibilityResponse extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'CoverageEligibilityResponse';
    /**
     * Business Identifier for coverage eligiblity request
     * A unique identifier assigned to this coverage eligiblity request.
     */
    identifier?: Identifier[];
    /**
     * Intended recipient of products and services
     * The party who is the beneficiary of the supplied coverage and for whom eligibility is sought.
     */
    patient: Reference;
    /**
     * Estimated date or dates of service
     * The date or dates when the enclosed suite of services were performed or completed.
     */
    servicedDate?: date;
    /**
     * Extension for servicedDate
     **/
    _servicedDate?: Element;
    /**
     * Estimated date or dates of service
     * The date or dates when the enclosed suite of services were performed or completed.
     */
    servicedPeriod?: Period;
    /**
     * Response creation date
     * The date this resource was created.
     */
    created: dateTime;
    /**
     * Extension for created
     **/
    _created?: Element;
    /**
     * Party responsible for the request
     * The provider which is responsible for the request.
     * Typically this field would be 1..1 where this party is responsible for the claim but not necessarily professionally responsible for the provision of the individual products and services listed below.
     */
    requestor?: Reference;
    /**
     * Eligibility request reference
     * Reference to the original request resource.
     */
    request: Reference;
    /**
     * Disposition Message
     * A human readable description of the status of the adjudication.
     */
    disposition?: string;
    /**
     * Extension for disposition
     **/
    _disposition?: Element;
    /**
     * Coverage issuer
     * The Insurer who issued the coverage in question and is the author of the response.
     */
    insurer: Reference;
    /**
     * Patient insurance information
     * Financial instruments for reimbursement for the health care products and services.
     * All insurance coverages for the patient which may be applicable for reimbursement, of the products and services listed in the claim, are typically provided in the claim to allow insurers to confirm the ordering of the insurance coverages relative to local 'coordination of benefit' rules. One coverage (and only one) with 'focal=true' is to be used in the adjudication of this claim. Coverages appearing before the focal Coverage in the list, and where 'subrogation=false', should provide a reference to the ClaimResponse containing the adjudication results of the prior claim.
     */
    insurance?: CoverageEligibilityResponseInsurance[];
    /**
     * Preauthorization reference
     * A reference from the Insurer to which these services pertain to be used on further communication and as proof that the request occurred.
     */
    preAuthRef?: string;
    /**
     * Extension for preAuthRef
     **/
    _preAuthRef?: Element;
    /**
     * Printed form identifier
     * A code for the form to be used for printing the content.
     * May be needed to identify specific jurisdictional forms.
     */
    form?: CodeableConcept;
    /**
     * Processing errors
     * Errors encountered during the processing of the request.
     */
    error?: CoverageEligibilityResponseError[];
    /**
     * active | cancelled | draft | entered-in-error
     * The status of the resource instance.
     * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
     */
    status: CoverageEligibilityResponseEligibilityResponseStatus;
    /**
     * auth-requirements | benefits | discovery | validation
     * Code to specify whether requesting: prior authorization requirements for some service categories or billing codes; benefits for coverages specified or discovered; discovery and return of coverages for the patient; and/or validation that the specified coverage is in-force at the date/period specified or 'now' if not specified.
     */
    purpose: CoverageEligibilityResponseEligibilityResponsePurpose[];
    /**
     * queued | complete | error | partial
     * The outcome of the request processing.
     * The resource may be used to indicate that: the request has been held (queued) for processing; that it has been processed and errors found (error); that no errors were found and that some of the adjudication has been undertaken (partial) or that all of the adjudication has been undertaken (complete).
     */
    outcome: CoverageEligibilityResponseRemittanceOutcome;
}
/**
 * Supporting evidence
 * Supporting evidence or manifestations that provide the basis for identifying the detected issue such as a GuidanceResponse or MeasureReport.
 */
export interface DetectedIssueEvidence extends BackboneElement {
    /**
     * Manifestation
     * A manifestation that led to the recording of this detected issue.
     */
    code?: CodeableConcept[];
    /**
     * Supporting information
     * Links to resources that constitute evidence for the detected issue such as a GuidanceResponse or MeasureReport.
     */
    detail?: Reference[];
}
/**
 * Step taken to address
 * Indicates an action that has been taken or is committed 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.
 */
export interface DetectedIssueMitigation extends BackboneElement {
    /**
     * What mitigation?
     * Describes the action that was taken or the observation that was made that reduces/eliminates the risk associated with the identified issue.
     * The "text" component can be used for detail or when no appropriate code exists.
     */
    action: CodeableConcept;
    /**
     * Date committed
     * Indicates when the mitigating action was documented.
     * This might not be the same as when the mitigating step was actually taken.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Who is committing?
     * Identifies the practitioner who determined the mitigation and takes responsibility for the mitigation step occurring.
     */
    author?: Reference;
}
/**
 * Clinical issue with 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.
 */
export interface DetectedIssue extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'DetectedIssue';
    /**
     * Unique id for the detected issue
     * Business identifier associated with the detected issue record.
     */
    identifier?: Identifier[];
    /**
     * Issue Category, e.g. drug-drug, duplicate therapy, etc.
     * Identifies the general type of issue identified.
     */
    code?: CodeableConcept;
    /**
     * Associated patient
     * Indicates the patient whose record the detected issue is associated with.
     */
    patient?: Reference;
    /**
     * When identified
     * The date or period when the detected issue was initially identified.
     */
    identifiedDateTime?: dateTime;
    /**
     * Extension for identifiedDateTime
     **/
    _identifiedDateTime?: Element;
    /**
     * When identified
     * The date or period when the detected issue was initially identified.
     */
    identifiedPeriod?: Period;
    /**
     * The provider or device that identified the issue
     * Individual or device responsible for the issue being raised.  For example, a decision support application or a pharmacist conducting a medication review.
     */
    author?: Reference;
    /**
     * Problem resource
     * Indicates the resource representing the current activity or proposed activity that is potentially problematic.
     * There's an implicit constraint on the number of implicated resources based on DetectedIssue.type; e.g. For drug-drug, there would be more than one.  For timing, there would typically only be one.
     */
    implicated?: Reference[];
    /**
     * Supporting evidence
     * Supporting evidence or manifestations that provide the basis for identifying the detected issue such as a GuidanceResponse or MeasureReport.
     */
    evidence?: DetectedIssueEvidence[];
    /**
     * Description and context
     * A textual explanation of the detected issue.
     * Should focus on information not covered elsewhere as discrete data - no need to duplicate the narrative.
     */
    detail?: string;
    /**
     * Extension for detail
     **/
    _detail?: Element;
    /**
     * Authority for issue
     * The literature, knowledge-base or similar reference that describes the propensity for the detected issue identified.
     */
    reference?: uri;
    /**
     * Extension for reference
     **/
    _reference?: Element;
    /**
     * Step taken to address
     * Indicates an action that has been taken or is committed 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.
     */
    mitigation?: DetectedIssueMitigation[];
    /**
     * high | moderate | low
     * Indicates the degree of importance associated with the identified issue based on the potential impact on the patient.
     */
    severity?: DetectedIssueSeverity;
    /**
     * registered | preliminary | final | amended +
     * Indicates the status of the detected issue.
     * This element is labeled as a modifier because the status contains the codes cancelled and entered-in-error that mark the issue as not currently valid.
     */
    status: DetectedIssueStatus;
}
/**
 * Unique Device Identifier (UDI) Barcode string
 * Unique device identifier (UDI) assigned to device label or package.  Note that the Device may include multiple udiCarriers as it either may include just the udiCarrier for the jurisdiction it is sold, or for multiple jurisdictions it could have been sold.
 * UDI may identify an unique instance of a device, or it may only identify the type of the device.  See [UDI mappings](device-mappings.html#udi) for a complete mapping of UDI parts to Device.
 */
export interface DeviceUdiCarrier extends BackboneElement {
    /**
     * Mandatory fixed portion of UDI
     * 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.
     */
    deviceIdentifier?: string;
    /**
     * Extension for deviceIdentifier
     **/
    _deviceIdentifier?: Element;
    /**
     * UDI Issuing Organization
     * 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.
     */
    issuer?: uri;
    /**
     * Extension for issuer
     **/
    _issuer?: Element;
    /**
     * Regional UDI authority
     * 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.
     */
    jurisdiction?: uri;
    /**
     * Extension for jurisdiction
     **/
    _jurisdiction?: Element;
    /**
     * UDI Machine Readable Barcode String
     * 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.
     * The AIDC form of UDIs should be scanned or otherwise used for the identification of the device whenever possible to minimize errors in records resulting from manual transcriptions. If separate barcodes for DI and PI are present, concatenate the string with DI first and in order of human readable expression on label.
     */
    carrierAIDC?: base64Binary;
    /**
     * Extension for carrierAIDC
     **/
    _carrierAIDC?: Element;
    /**
     * UDI Human Readable Barcode String
     * The full UDI carrier as the human readable form (HRF) representation of the barcode string as printed on the packaging of the device.
     * If separate barcodes for DI and PI are present, concatenate the string with DI first and in order of human readable expression on label.
     */
    carrierHRF?: string;
    /**
     * Extension for carrierHRF
     **/
    _carrierHRF?: Element;
    /**
     * barcode | rfid | manual +
     * A coded entry to indicate how the data was entered.
     */
    entryType?: DeviceUDIEntryType;
}
/**
 * The name of the device as given by the manufacturer
 * This represents the manufacturer's name of the device as provided by the device, from a UDI label, or by a person describing the Device.  This typically would be used when a person provides the name(s) or when the device represents one of the names available from DeviceDefinition.
 */
export interface DeviceDeviceName extends BackboneElement {
    /**
     * The name of the device
     * The name of the device.
     */
    name: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * udi-label-name | user-friendly-name | patient-reported-name | manufacturer-name | model-name | other
     * The type of deviceName.
UDILabelName | UserFriendlyName | PatientReportedName | ManufactureDeviceName | ModelName.
     */
    type: DeviceNameType;
}
/**
 * The capabilities supported on a  device, the standards to which the device conforms for a particular purpose, and used for the communication
 * The capabilities supported on a  device, the standards to which the device conforms for a particular purpose, and used for the communication.
 */
export interface DeviceSpecialization extends BackboneElement {
    /**
     * The standard that is used to operate and communicate
     * The standard that is used to operate and communicate.
     */
    systemType: CodeableConcept;
    /**
     * The version of the standard that is used to operate and communicate
     * The version of the standard that is used to operate and communicate.
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
}
/**
 * The actual design of the device or software version running on the device
 * The actual design of the device or software version running on the device.
 */
export interface DeviceVersion extends BackboneElement {
    /**
     * The type of the device version
     * The type of the device version.
     */
    type?: CodeableConcept;
    /**
     * A single component of the device version
     * A single component of the device version.
     */
    component?: Identifier;
    /**
     * The version text
     * The version text.
     */
    value: string;
    /**
     * Extension for value
     **/
    _value?: Element;
}
/**
 * The actual configuration settings of a device as it actually operates, e.g., regulation status, time properties
 * The actual configuration settings of a device as it actually operates, e.g., regulation status, time properties.
 */
export interface DeviceProperty extends BackboneElement {
    /**
     * Code that specifies the property DeviceDefinitionPropetyCode (Extensible)
     * Code that specifies the property DeviceDefinitionPropetyCode (Extensible).
     */
    type: CodeableConcept;
    /**
     * Property value as a quantity
     * Property value as a quantity.
     */
    valueQuantity?: Quantity[];
    /**
     * Property value as a code, e.g., NTP4 (synced to NTP)
     * Property value as a code, e.g., NTP4 (synced to NTP).
     */
    valueCode?: CodeableConcept[];
}
/**
 * Item used in healthcare
 * 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.
 */
export interface Device extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Device';
    /**
     * Instance identifier
     * Unique instance identifiers assigned to a device by manufacturers other organizations or owners.
     * The barcode string from a barcode present on a device label or package may identify the instance, include names given to the device in local usage, or may identify the type of device. If the identifier identifies the type of device, Device.type element should be used.
     */
    identifier?: Identifier[];
    /**
     * The reference to the definition for the device
     * The reference to the definition for the device.
     */
    definition?: Reference;
    /**
     * Unique Device Identifier (UDI) Barcode string
     * Unique device identifier (UDI) assigned to device label or package.  Note that the Device may include multiple udiCarriers as it either may include just the udiCarrier for the jurisdiction it is sold, or for multiple jurisdictions it could have been sold.
     * UDI may identify an unique instance of a device, or it may only identify the type of the device.  See [UDI mappings](device-mappings.html#udi) for a complete mapping of UDI parts to Device.
     */
    udiCarrier?: DeviceUdiCarrier[];
    /**
     * online | paused | standby | offline | not-ready | transduc-discon | hw-discon | off
     * Reason for the dtatus of the Device availability.
     */
    statusReason?: CodeableConcept[];
    /**
     * The distinct identification string
     * The distinct identification string as required by regulation for a human cell, tissue, or cellular and tissue-based product.
     * For example, this applies to devices in the United States regulated under *Code of Federal Regulation 21CFR§1271.290(c)*.
     */
    distinctIdentifier?: string;
    /**
     * Extension for distinctIdentifier
     **/
    _distinctIdentifier?: Element;
    /**
     * Name of device manufacturer
     * A name of the manufacturer.
     */
    manufacturer?: string;
    /**
     * Extension for manufacturer
     **/
    _manufacturer?: Element;
    /**
     * Date when the device was made
     * The date and time when the device was manufactured.
     */
    manufactureDate?: dateTime;
    /**
     * Extension for manufactureDate
     **/
    _manufactureDate?: Element;
    /**
     * Date and time of expiry of this device (if applicable)
     * The date and time beyond which this device is no longer valid or should not be used (if applicable).
     */
    expirationDate?: dateTime;
    /**
     * Extension for expirationDate
     **/
    _expirationDate?: Element;
    /**
     * Lot number of manufacture
     * Lot number assigned by the manufacturer.
     */
    lotNumber?: string;
    /**
     * Extension for lotNumber
     **/
    _lotNumber?: Element;
    /**
     * Serial number assigned by the manufacturer
     * The serial number assigned by the organization when the device was manufactured.
     * Alphanumeric Maximum 20.
     */
    serialNumber?: string;
    /**
     * Extension for serialNumber
     **/
    _serialNumber?: Element;
    /**
     * The name of the device as given by the manufacturer
     * This represents the manufacturer's name of the device as provided by the device, from a UDI label, or by a person describing the Device.  This typically would be used when a person provides the name(s) or when the device represents one of the names available from DeviceDefinition.
     */
    deviceName?: DeviceDeviceName[];
    /**
     * The model number for the device
     * The model number for the device.
     */
    modelNumber?: string;
    /**
     * Extension for modelNumber
     **/
    _modelNumber?: Element;
    /**
     * The part number of the device
     * The part number of the device.
     * Alphanumeric Maximum 20.
     */
    partNumber?: string;
    /**
     * Extension for partNumber
     **/
    _partNumber?: Element;
    /**
     * The kind or type of device
     * The kind or type of device.
     */
    type?: CodeableConcept;
    /**
     * The capabilities supported on a  device, the standards to which the device conforms for a particular purpose, and used for the communication
     * The capabilities supported on a  device, the standards to which the device conforms for a particular purpose, and used for the communication.
     */
    specialization?: DeviceSpecialization[];
    /**
     * The actual design of the device or software version running on the device
     * The actual design of the device or software version running on the device.
     */
    version?: DeviceVersion[];
    /**
     * The actual configuration settings of a device as it actually operates, e.g., regulation status, time properties
     * The actual configuration settings of a device as it actually operates, e.g., regulation status, time properties.
     */
    property?: DeviceProperty[];
    /**
     * Patient to whom Device is affixed
     * Patient information, If the device is affixed to a person.
     */
    patient?: Reference;
    /**
     * Organization responsible for device
     * An organization that is responsible for the provision and ongoing maintenance of the device.
     */
    owner?: Reference;
    /**
     * Details for human/organization for support
     * Contact details for an organization or a particular human that is responsible for the device.
     * used for troubleshooting etc.
     */
    contact?: ContactPoint[];
    /**
     * Where the device is found
     * The place where the device can be found.
     */
    location?: Reference;
    /**
     * Network address to contact device
     * A network address on which the device may be contacted directly.
     * If the device is running a FHIR server, the network address should  be the Base URL from which a conformance statement may be retrieved.
     */
    url?: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Device notes and comments
     * Descriptive information, usage information or implantation information that is not captured in an existing element.
     */
    note?: Annotation[];
    /**
     * Safety Characteristics of Device
     * Provides additional safety characteristics about a medical device.  For example devices containing latex.
     */
    safety?: CodeableConcept[];
    /**
     * The parent device
     * The parent device.
     */
    parent?: Reference;
    /**
     * active | inactive | entered-in-error | unknown
     * Status of the Device availability.
     * This element is labeled as a modifier because the status contains the codes inactive and entered-in-error that mark the device (record)as not currently valid.
     */
    status?: DeviceFHIRDeviceStatus;
}
/**
 * Unique Device Identifier (UDI) Barcode string
 * Unique device identifier (UDI) assigned to device label or package.  Note that the Device may include multiple udiCarriers as it either may include just the udiCarrier for the jurisdiction it is sold, or for multiple jurisdictions it could have been sold.
 */
export interface DeviceDefinitionUdiDeviceIdentifier extends BackboneElement {
    /**
     * The identifier that is to be associated with every Device that references this DeviceDefintiion for the issuer and jurisdication porvided in the DeviceDefinition.udiDeviceIdentifier
     * The identifier that is to be associated with every Device that references this DeviceDefintiion for the issuer and jurisdication porvided in the DeviceDefinition.udiDeviceIdentifier.
     */
    deviceIdentifier: string;
    /**
     * Extension for deviceIdentifier
     **/
    _deviceIdentifier?: Element;
    /**
     * The organization that assigns the identifier algorithm
     * The organization that assigns the identifier algorithm.
     */
    issuer: uri;
    /**
     * Extension for issuer
     **/
    _issuer?: Element;
    /**
     * The jurisdiction to which the deviceIdentifier applies
     * The jurisdiction to which the deviceIdentifier applies.
     */
    jurisdiction: uri;
    /**
     * Extension for jurisdiction
     **/
    _jurisdiction?: Element;
}
/**
 * A name given to the device to identify it
 * A name given to the device to identify it.
 */
export interface DeviceDefinitionDeviceName extends BackboneElement {
    /**
     * The name of the device
     * The name of the device.
     */
    name: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * udi-label-name | user-friendly-name | patient-reported-name | manufacturer-name | model-name | other
     * The type of deviceName.
UDILabelName | UserFriendlyName | PatientReportedName | ManufactureDeviceName | ModelName.
     */
    type: DeviceDefinitionDeviceNameType;
}
/**
 * The capabilities supported on a  device, the standards to which the device conforms for a particular purpose, and used for the communication
 * The capabilities supported on a  device, the standards to which the device conforms for a particular purpose, and used for the communication.
 */
export interface DeviceDefinitionSpecialization extends BackboneElement {
    /**
     * The standard that is used to operate and communicate
     * The standard that is used to operate and communicate.
     */
    systemType: string;
    /**
     * Extension for systemType
     **/
    _systemType?: Element;
    /**
     * The version of the standard that is used to operate and communicate
     * The version of the standard that is used to operate and communicate.
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
}
/**
 * Device capabilities
 * Device capabilities.
 */
export interface DeviceDefinitionCapability extends BackboneElement {
    /**
     * Type of capability
     * Type of capability.
     */
    type: CodeableConcept;
    /**
     * Description of capability
     * Description of capability.
     */
    description?: CodeableConcept[];
}
/**
 * The actual configuration settings of a device as it actually operates, e.g., regulation status, time properties
 * The actual configuration settings of a device as it actually operates, e.g., regulation status, time properties.
 */
export interface DeviceDefinitionProperty extends BackboneElement {
    /**
     * Code that specifies the property DeviceDefinitionPropetyCode (Extensible)
     * Code that specifies the property DeviceDefinitionPropetyCode (Extensible).
     */
    type: CodeableConcept;
    /**
     * Property value as a quantity
     * Property value as a quantity.
     */
    valueQuantity?: Quantity[];
    /**
     * Property value as a code, e.g., NTP4 (synced to NTP)
     * Property value as a code, e.g., NTP4 (synced to NTP).
     */
    valueCode?: CodeableConcept[];
}
/**
 * A substance used to create the material(s) of which the device is made
 * A substance used to create the material(s) of which the device is made.
 */
export interface DeviceDefinitionMaterial extends BackboneElement {
    /**
     * The substance
     * The substance.
     */
    substance: CodeableConcept;
    /**
     * Indicates an alternative material of the device
     * Indicates an alternative material of the device.
     */
    alternate?: boolean;
    /**
     * Extension for alternate
     **/
    _alternate?: Element;
    /**
     * Whether the substance is a known or suspected allergen
     * Whether the substance is a known or suspected allergen.
     */
    allergenicIndicator?: boolean;
    /**
     * Extension for allergenicIndicator
     **/
    _allergenicIndicator?: Element;
}
/**
 * An instance of a medical-related component of a medical device
 * The characteristics, operational status and capabilities of a medical-related component of a medical device.
 * For the initial scope, this DeviceDefinition resource is only applicable to describe a single node in the containment tree that is produced by the context scanner in any medical device that implements or derives from the ISO/IEEE 11073 standard and that does not represent a metric. Examples for such a node are MDS, VMD, or Channel.
 */
export interface DeviceDefinition extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'DeviceDefinition';
    /**
     * Instance identifier
     * Unique instance identifiers assigned to a device by the software, manufacturers, other organizations or owners. For example: handle ID.
     */
    identifier?: Identifier[];
    /**
     * Unique Device Identifier (UDI) Barcode string
     * Unique device identifier (UDI) assigned to device label or package.  Note that the Device may include multiple udiCarriers as it either may include just the udiCarrier for the jurisdiction it is sold, or for multiple jurisdictions it could have been sold.
     */
    udiDeviceIdentifier?: DeviceDefinitionUdiDeviceIdentifier[];
    /**
     * Name of device manufacturer
     * A name of the manufacturer.
     */
    manufacturerString?: string;
    /**
     * Extension for manufacturerString
     **/
    _manufacturerString?: Element;
    /**
     * Name of device manufacturer
     * A name of the manufacturer.
     */
    manufacturerReference?: Reference;
    /**
     * A name given to the device to identify it
     * A name given to the device to identify it.
     */
    deviceName?: DeviceDefinitionDeviceName[];
    /**
     * The model number for the device
     * The model number for the device.
     */
    modelNumber?: string;
    /**
     * Extension for modelNumber
     **/
    _modelNumber?: Element;
    /**
     * What kind of device or device system this is
     * What kind of device or device system this is.
     */
    type?: CodeableConcept;
    /**
     * The capabilities supported on a  device, the standards to which the device conforms for a particular purpose, and used for the communication
     * The capabilities supported on a  device, the standards to which the device conforms for a particular purpose, and used for the communication.
     */
    specialization?: DeviceDefinitionSpecialization[];
    /**
     * Available versions
     * The available versions of the device, e.g., software versions.
     */
    version?: string[];
    /**
     * Extension for version
     **/
    _version?: Element[];
    /**
     * Safety characteristics of the device
     * Safety characteristics of the device.
     */
    safety?: CodeableConcept[];
    /**
     * Shelf Life and storage information
     * Shelf Life and storage information.
     */
    shelfLifeStorage?: ProductShelfLife[];
    /**
     * Dimensions, color etc.
     * Dimensions, color etc.
     */
    physicalCharacteristics?: ProdCharacteristic;
    /**
     * Language code for the human-readable text strings produced by the device (all supported)
     * Language code for the human-readable text strings produced by the device (all supported).
     */
    languageCode?: CodeableConcept[];
    /**
     * Device capabilities
     * Device capabilities.
     */
    capability?: DeviceDefinitionCapability[];
    /**
     * The actual configuration settings of a device as it actually operates, e.g., regulation status, time properties
     * The actual configuration settings of a device as it actually operates, e.g., regulation status, time properties.
     */
    property?: DeviceDefinitionProperty[];
    /**
     * Organization responsible for device
     * An organization that is responsible for the provision and ongoing maintenance of the device.
     */
    owner?: Reference;
    /**
     * Details for human/organization for support
     * Contact details for an organization or a particular human that is responsible for the device.
     * used for troubleshooting etc.
     */
    contact?: ContactPoint[];
    /**
     * Network address to contact device
     * A network address on which the device may be contacted directly.
     * If the device is running a FHIR server, the network address should  be the Base URL from which a conformance statement may be retrieved.
     */
    url?: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Access to on-line information
     * Access to on-line information about the device.
     */
    onlineInformation?: uri;
    /**
     * Extension for onlineInformation
     **/
    _onlineInformation?: Element;
    /**
     * Device notes and comments
     * Descriptive information, usage information or implantation information that is not captured in an existing element.
     */
    note?: Annotation[];
    /**
     * The quantity of the device present in the packaging (e.g. the number of devices present in a pack, or the number of devices in the same package of the medicinal product)
     * The quantity of the device present in the packaging (e.g. the number of devices present in a pack, or the number of devices in the same package of the medicinal product).
     */
    quantity?: Quantity;
    /**
     * The parent device it can be part of
     * The parent device it can be part of.
     */
    parentDevice?: Reference;
    /**
     * A substance used to create the material(s) of which the device is made
     * A substance used to create the material(s) of which the device is made.
     */
    material?: DeviceDefinitionMaterial[];
}
/**
 * Describes the calibrations that have been performed or that are required to be performed
 * Describes the calibrations that have been performed or that are required to be performed.
 */
export interface DeviceMetricCalibration extends BackboneElement {
    /**
     * Describes the time last calibration has been performed
     * Describes the time last calibration has been performed.
     */
    time?: instant;
    /**
     * Extension for time
     **/
    _time?: Element;
    /**
     * unspecified | offset | gain | two-point
     * Describes the type of the calibration method.
     */
    type?: DeviceMetricCalibrationType;
    /**
     * not-calibrated | calibration-required | calibrated | unspecified
     * Describes the state of the calibration.
     */
    state?: DeviceMetricCalibrationState;
}
/**
 * Measurement, calculation or setting capability of a medical device
 * Describes a measurement, calculation or setting capability of a medical device.
 * For the initial scope, this DeviceMetric resource is only applicable to describe a single metric node in the containment tree that is produced by the context scanner in any medical device that implements or derives from the ISO/IEEE 11073 standard.
 */
export interface DeviceMetric extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'DeviceMetric';
    /**
     * Instance identifier
     * Unique instance identifiers assigned to a device by the device or gateway software, manufacturers, other organizations or owners. For example: handle ID.
     * For identifiers assigned to a device by the device or gateway software, the `system` element of the identifier should be set to the unique identifier of the device.
     */
    identifier?: Identifier[];
    /**
     * Identity of metric, for example Heart Rate or PEEP Setting
     * Describes the type of the metric. For example: Heart Rate, PEEP Setting, etc.
     * DeviceMetric.type can be referred to either IEEE 11073-10101 or LOINC.
     */
    type: CodeableConcept;
    /**
     * Unit of Measure for the Metric
     * Describes the unit that an observed value determined for this metric will have. For example: Percent, Seconds, etc.
     * DeviceMetric.unit can refer to either UCUM or preferable a RTMMS coding system.
     */
    unit?: CodeableConcept;
    /**
     * Describes the link to the source Device
     * Describes the link to the  Device that this DeviceMetric belongs to and that contains administrative device information such as manufacturer, serial number, etc.
     */
    source?: Reference;
    /**
     * Describes the link to the parent Device
     * Describes the link to the  Device 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 Device 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.
     */
    parent?: Reference;
    /**
     * Describes the measurement repetition time
     * 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.
     */
    measurementPeriod?: Timing;
    /**
     * Describes the calibrations that have been performed or that are required to be performed
     * Describes the calibrations that have been performed or that are required to be performed.
     */
    calibration?: DeviceMetricCalibration[];
    /**
     * on | off | standby | entered-in-error
     * Indicates current operational state of the device. For example: On, Off, Standby, etc.
     */
    operationalStatus?: DeviceMetricOperationalStatus;
    /**
     * black | red | green | yellow | blue | magenta | cyan | white
     * 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.
     */
    color?: DeviceMetricColor;
    /**
     * measurement | setting | calculation | unspecified
     * Indicates the category of the observation generation process. A DeviceMetric can be for example a setting, measurement, or calculation.
     */
    category: DeviceMetricCategory;
}
/**
 * Device details
 * Specific parameters for the ordered item.  For example, the prism value for lenses.
 */
export interface DeviceRequestParameter extends BackboneElement {
    /**
     * Device detail
     * A code or string that identifies the device detail being asserted.
     */
    code?: CodeableConcept;
    /**
     * Value of detail
     * The value of the device detail.
     * Range means device should have a value that falls somewhere within the specified range.
     */
    valueCodeableConcept?: CodeableConcept;
    /**
     * Value of detail
     * The value of the device detail.
     * Range means device should have a value that falls somewhere within the specified range.
     */
    valueQuantity?: Quantity;
    /**
     * Value of detail
     * The value of the device detail.
     * Range means device should have a value that falls somewhere within the specified range.
     */
    valueRange?: Range;
    /**
     * Value of detail
     * The value of the device detail.
     * Range means device should have a value that falls somewhere within the specified range.
     */
    valueBoolean?: boolean;
    /**
     * Extension for valueBoolean
     **/
    _valueBoolean?: Element;
}
/**
 * Medical device 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.
 */
export interface DeviceRequest extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'DeviceRequest';
    /**
     * External Request identifier
     * Identifiers assigned to this order by the orderer or by the receiver.
     */
    identifier?: Identifier[];
    /**
     * Instantiates FHIR protocol or definition
     * The URL pointing to a FHIR-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this DeviceRequest.
     * Note: This is a business identifier, not a resource identifier (see [discussion](resource.html#identifiers)).  It is best practice for the identifier to only appear on a single resource instance, however business practices may occasionally dictate that multiple resource instances with the same identifier can exist - possibly even with different resource types.  For example, multiple Patient and a Person resource instance might share the same social insurance number.
     */
    instantiatesCanonical?: canonical[];
    /**
     * Extension for instantiatesCanonical
     **/
    _instantiatesCanonical?: Element[];
    /**
     * Instantiates external protocol or definition
     * The URL pointing to an externally maintained protocol, guideline, orderset or other definition that is adhered to in whole or in part by this DeviceRequest.
     * This might be an HTML page, PDF, etc. or could just be a non-resolvable URI identifier.
     */
    instantiatesUri?: uri[];
    /**
     * Extension for instantiatesUri
     **/
    _instantiatesUri?: Element[];
    /**
     * What request fulfills
     * Plan/proposal/order fulfilled by this request.
     */
    basedOn?: Reference[];
    /**
     * What request replaces
     * The request takes the place of the referenced completed or terminated request(s).
     */
    priorRequest?: Reference[];
    /**
     * Identifier of composite request
     * Composite request this is part of.
     */
    groupIdentifier?: Identifier;
    /**
     * Device requested
     * The details of the device to be used.
     */
    codeReference?: Reference;
    /**
     * Device requested
     * The details of the device to be used.
     */
    codeCodeableConcept?: CodeableConcept;
    /**
     * Device details
     * Specific parameters for the ordered item.  For example, the prism value for lenses.
     */
    parameter?: DeviceRequestParameter[];
    /**
     * Focus of request
     * The patient who will use the device.
     */
    subject: Reference;
    /**
     * Encounter motivating request
     * An encounter that provides additional context in which this request is made.
     */
    encounter?: Reference;
    /**
     * Desired time or schedule for use
     * 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".
     */
    occurrenceDateTime?: dateTime;
    /**
     * Extension for occurrenceDateTime
     **/
    _occurrenceDateTime?: Element;
    /**
     * Desired time or schedule for use
     * 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".
     */
    occurrencePeriod?: Period;
    /**
     * Desired time or schedule for use
     * 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".
     */
    occurrenceTiming?: Timing;
    /**
     * When recorded
     * When the request transitioned to being actionable.
     */
    authoredOn?: dateTime;
    /**
     * Extension for authoredOn
     **/
    _authoredOn?: Element;
    /**
     * Who/what is requesting diagnostics
     * The individual who initiated the request and has responsibility for its activation.
     */
    requester?: Reference;
    /**
     * Filler role
     * Desired type of performer for doing the diagnostic testing.
     */
    performerType?: CodeableConcept;
    /**
     * Requested Filler
     * The desired performer for doing the diagnostic testing.
     */
    performer?: Reference;
    /**
     * Coded Reason for request
     * Reason or justification for the use of this device.
     */
    reasonCode?: CodeableConcept[];
    /**
     * Linked Reason for request
     * Reason or justification for the use of this device.
     */
    reasonReference?: Reference[];
    /**
     * Associated insurance coverage
     * Insurance plans, coverage extensions, pre-authorizations and/or pre-determinations that may be required for delivering the requested service.
     */
    insurance?: Reference[];
    /**
     * Additional clinical information
     * Additional clinical information about the patient that may influence the request fulfilment.  For example, this may include where on the subject's body the device will be used (i.e. the target site).
     */
    supportingInfo?: Reference[];
    /**
     * Notes or comments
     * 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.
     */
    note?: Annotation[];
    /**
     * Request provenance
     * Key events in the history of the request.
     * This might not include provenances for all versions of the request - only those deemed "relevant" or important.
This SHALL NOT include the Provenance associated with this current version of the resource.  (If that provenance is deemed to be a "relevant" change, it will need to be added as part of a later update.  Until then, it can be queried directly as the Provenance that points to this version using _revinclude
All Provenances should have some historical version of this Request as their subject.
     */
    relevantHistory?: Reference[];
    /**
     * draft | active | on-hold | revoked | completed | entered-in-error | unknown
     * The status of the request.
     * This element is labeled as a modifier because the status contains the codes cancelled and entered-in-error that mark the request as not currently valid.
     */
    status?: DeviceRequestStatus;
    /**
     * proposal | plan | directive | order | original-order | reflex-order | filler-order | instance-order | option
     * Whether the request is a proposal, plan, an original order or a reflex order.
     */
    intent: DeviceRequestRequestIntent;
    /**
     * routine | urgent | asap | stat
     * Indicates how quickly the {{title}} should be addressed with respect to other requests.
     */
    priority?: DeviceRequestRequestPriority;
}
/**
 * Record of use of a device
 * 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.
 */
export interface DeviceUseStatement extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'DeviceUseStatement';
    /**
     * External identifier for this record
     * An external identifier for this statement such as an IRI.
     */
    identifier?: Identifier[];
    /**
     * Fulfills plan, proposal or order
     * A plan, proposal or order that is fulfilled in whole or in part by this DeviceUseStatement.
     */
    basedOn?: Reference[];
    /**
     * Patient using device
     * The patient who used the device.
     */
    subject: Reference;
    /**
     * Supporting information
     * Allows linking the DeviceUseStatement to the underlying Request, or to other information that supports or is used to derive the DeviceUseStatement.
     * The most common use cases for deriving a DeviceUseStatement comes from creating it from a request or from an observation or a claim. it should be noted that the amount of information that is available varies from the type resource that you derive the DeviceUseStatement from.
     */
    derivedFrom?: Reference[];
    /**
     * How often  the device was used
     * How often the device was used.
     */
    timingTiming?: Timing;
    /**
     * How often  the device was used
     * How often the device was used.
     */
    timingPeriod?: Period;
    /**
     * How often  the device was used
     * How often the device was used.
     */
    timingDateTime?: dateTime;
    /**
     * Extension for timingDateTime
     **/
    _timingDateTime?: Element;
    /**
     * When statement was recorded
     * The time at which the statement was made/recorded.
     */
    recordedOn?: dateTime;
    /**
     * Extension for recordedOn
     **/
    _recordedOn?: Element;
    /**
     * Who made the statement
     * Who reported the device was being used by the patient.
     */
    source?: Reference;
    /**
     * Reference to device used
     * The details of the device used.
     */
    device: Reference;
    /**
     * Why device was used
     * Reason or justification for the use of the device.
     */
    reasonCode?: CodeableConcept[];
    /**
     * Why was DeviceUseStatement performed?
     * Indicates another resource whose existence justifies this DeviceUseStatement.
     */
    reasonReference?: Reference[];
    /**
     * Target body site
     * Indicates the anotomic location on the subject's body where the device was used ( i.e. the target).
     */
    bodySite?: CodeableConcept;
    /**
     * Addition details (comments, instructions)
     * 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.
     */
    note?: Annotation[];
    /**
     * active | completed | entered-in-error +
     * 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.
     * DeviceUseStatment is a statement at a point in time.  The status is only representative at the point when it was asserted.  The value set for contains codes that assert the status of the use  by the patient (for example, stopped or on hold) as well as codes that assert the status of the resource itself (for example, entered in error).

This element is labeled as a modifier because the status contains the codes that mark the statement as not currently valid.
     */
    status: DeviceUseStatementStatus;
}
/**
 * Key images associated with this report
 * 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).
 */
export interface DiagnosticReportMedia extends BackboneElement {
    /**
     * Comment about the image (e.g. explanation)
     * 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.
     * The comment should be displayed with the image. It would be common for the report to include additional discussion of the image contents in other sections such as the conclusion.
     */
    comment?: string;
    /**
     * Extension for comment
     **/
    _comment?: Element;
    /**
     * Reference to the image source
     * Reference to the image source.
     */
    link: Reference;
}
/**
 * A Diagnostic report - a combination of request information, atomic results, images, interpretation, as well as formatted reports
 * 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.
 * This is intended to capture a single report and is not suitable for use in displaying summary information that covers multiple reports.  For example, this resource has not been designed for laboratory cumulative reporting formats nor detailed structured reports for sequencing.
 */
export interface DiagnosticReport extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'DiagnosticReport';
    /**
     * Business identifier for report
     * Identifiers assigned to this report by the performer or other systems.
     * Usually assigned by the Information System of the diagnostic service provider (filler id).
     */
    identifier?: Identifier[];
    /**
     * What was requested
     * Details concerning a service requested.
     * Note: Usually there is one test request for each result, however in some circumstances multiple test requests may be represented using a single test result resource. Note that there are also cases where one request leads to multiple reports.
     */
    basedOn?: Reference[];
    /**
     * Service category
     * 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.
     * Multiple categories are allowed using various categorization schemes.   The level of granularity is defined by the category concepts in the value set. More fine-grained filtering can be performed using the metadata and/or terminology hierarchy in DiagnosticReport.code.
     */
    category?: CodeableConcept[];
    /**
     * Name/Code for this diagnostic report
     * A code or name that describes this diagnostic report.
     */
    code: CodeableConcept;
    /**
     * The subject of the report - usually, but not always, the patient
     * 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.
     */
    subject?: Reference;
    /**
     * Health care event when test ordered
     * The healthcare event  (e.g. a patient and healthcare provider interaction) which this DiagnosticReport is about.
     * This will typically be the encounter the event occurred within, but some events may be initiated prior to or after the official completion of an encounter  but still be tied to the context of the encounter  (e.g. pre-admission laboratory tests).
     */
    encounter?: Reference;
    /**
     * Clinically relevant time/time-period for report
     * 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.
     * If the diagnostic procedure was performed on the patient, this is the time it was performed. If there are specimens, the diagnostically relevant time can be derived from the specimen collection times, but the specimen information is not always available, and the exact relationship between the specimens and the diagnostically relevant time is not always automatic.
     */
    effectiveDateTime?: dateTime;
    /**
     * Extension for effectiveDateTime
     **/
    _effectiveDateTime?: Element;
    /**
     * Clinically relevant time/time-period for report
     * 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.
     * If the diagnostic procedure was performed on the patient, this is the time it was performed. If there are specimens, the diagnostically relevant time can be derived from the specimen collection times, but the specimen information is not always available, and the exact relationship between the specimens and the diagnostically relevant time is not always automatic.
     */
    effectivePeriod?: Period;
    /**
     * DateTime this version was made
     * The date and time that this version of the report was made available to providers, typically after the report was reviewed and verified.
     * May be different from the update time of the resource itself, because that is the status of the record (potentially a secondary copy), not the actual release time of the report.
     */
    issued?: instant;
    /**
     * Extension for issued
     **/
    _issued?: Element;
    /**
     * Responsible Diagnostic Service
     * The diagnostic service that is responsible for issuing the report.
     * This is not necessarily the source of the atomic data items or the entity that interpreted the results. It is the entity that takes responsibility for the clinical report.
     */
    performer?: Reference[];
    /**
     * Primary result interpreter
     * The practitioner or organization that is responsible for the report's conclusions and interpretations.
     * Might not be the same entity that takes responsibility for the clinical report.
     */
    resultsInterpreter?: Reference[];
    /**
     * Specimens this report is based on
     * Details about the specimens on which this diagnostic report is based.
     * If the specimen is sufficiently specified with a code in the test result name, then this additional data may be redundant. If there are multiple specimens, these may be represented per observation or group.
     */
    specimen?: Reference[];
    /**
     * Observations
     * [Observations](observation.html)  that are part of this diagnostic report.
     * Observations can contain observations.
     */
    result?: Reference[];
    /**
     * Reference to full details of imaging associated with the diagnostic report
     * 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.
     * ImagingStudy and the image element are somewhat overlapping - typically, the list of image references in the image element will also be found in one of the imaging study resources. However, each caters to different types of displays for different types of purposes. Neither, either, or both may be provided.
     */
    imagingStudy?: Reference[];
    /**
     * Key images associated with this report
     * 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).
     */
    media?: DiagnosticReportMedia[];
    /**
     * Clinical conclusion (interpretation) of test results
     * Concise and clinically contextualized summary conclusion (interpretation/impression) of the diagnostic report.
     */
    conclusion?: string;
    /**
     * Extension for conclusion
     **/
    _conclusion?: Element;
    /**
     * Codes for the clinical conclusion of test results
     * One or more codes that represent the summary conclusion (interpretation/impression) of the diagnostic report.
     */
    conclusionCode?: CodeableConcept[];
    /**
     * Entire report as issued
     * Rich text representation of the entire result as issued by the diagnostic service. Multiple formats are allowed but they SHALL be semantically equivalent.
     * "application/pdf" is recommended as the most reliable and interoperable in this context.
     */
    presentedForm?: Attachment[];
    /**
     * registered | partial | preliminary | final +
     * The status of the diagnostic report.
     */
    status: DiagnosticReportStatus;
}
/**
 * Related things
 * Related identifiers or resources associated with the DocumentManifest.
 * May be identifiers or resources that caused the DocumentManifest to be created.
 */
export interface DocumentManifestRelated extends BackboneElement {
    /**
     * Identifiers of things that are related
     * Related identifier to this DocumentManifest.  For example, Order numbers, accession numbers, XDW workflow numbers.
     * If both identifier and ref elements are present they shall refer to the same thing.
     */
    identifier?: Identifier;
    /**
     * Related Resource
     * Related Resource to this DocumentManifest. For example, Order, ServiceRequest,  Procedure, EligibilityRequest, etc.
     * If both identifier and ref elements are present they shall refer to the same thing.
     */
    ref?: Reference;
}
/**
 * A list that defines a set of documents
 * A collection of documents compiled for a purpose together with metadata that applies to the collection.
 */
export interface DocumentManifest extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'DocumentManifest';
    /**
     * Unique Identifier for the set of documents
     * A single identifier that uniquely identifies this manifest. Principally used to refer to the manifest in non-FHIR contexts.
     */
    masterIdentifier?: Identifier;
    /**
     * Other identifiers for the manifest
     * Other identifiers associated with the document manifest, including version independent  identifiers.
     */
    identifier?: Identifier[];
    /**
     * Kind of document set
     * The code specifying the type of clinical activity that resulted in placing the associated content into the DocumentManifest.
     * 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.
     */
    type?: CodeableConcept;
    /**
     * The subject of the set of documents
     * 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).
     */
    subject?: Reference;
    /**
     * When this document manifest created
     * 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.).
     * Creation time is used for tracking, organizing versions and searching. This is the creation time of the document set, not the documents on which it is based.
     */
    created?: dateTime;
    /**
     * Extension for created
     **/
    _created?: Element;
    /**
     * Who and/or what authored the DocumentManifest
     * Identifies who is the author of the manifest. Manifest author is not necessarly the author of the references included.
     * Not necessarily who did the actual data entry (i.e. typist) or who was the source (informant).
     */
    author?: Reference[];
    /**
     * Intended to get notified about this set of documents
     * A patient, practitioner, or organization for which this set of documents is intended.
     * How the recipient receives the document set or is notified of it is up to the implementation. This element is just a statement of intent. If the recipient is a person, and it is not known whether the person is a patient or a practitioner, RelatedPerson would be the default choice.
     */
    recipient?: Reference[];
    /**
     * The source system/application/software
     * Identifies the source system, application, or software that produced the document manifest.
     */
    source?: uri;
    /**
     * Extension for source
     **/
    _source?: Element;
    /**
     * Human-readable description (title)
     * Human-readable description of the source document. This is sometimes known as the "title".
     * What the document is about, rather than a terse summary of the document. It is commonly the case that records do not have a title and are collectively referred to by the display name of Record code (e.g. a "consultation" or "progress note").
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Items in manifest
     * The list of Resources that consist of the parts of this manifest.
     * When used for XDS the intended focus of the DocumentManifest is for the reference to target to be a set of DocumentReference Resources. The reference is to "Any" to support EN 13606 usage, where an extract is DocumentManifest that references  List and Composition resources.
     */
    content: Reference[];
    /**
     * Related things
     * Related identifiers or resources associated with the DocumentManifest.
     * May be identifiers or resources that caused the DocumentManifest to be created.
     */
    related?: DocumentManifestRelated[];
    /**
     * current | superseded | entered-in-error
     * The status of this document manifest.
     * This element is labeled as a modifier because the status contains the codes that mark the manifest as not currently valid.
     */
    status: DocumentManifestDocumentReferenceStatus;
}
/**
 * Relationships to other documents
 * Relationships that this document has with other document references that already exist.
 * This element is labeled as a modifier because documents that append to other documents are incomplete on their own.
 */
export interface DocumentReferenceRelatesTo extends BackboneElement {
    /**
     * Target of the relationship
     * The target document of this relationship.
     */
    target: Reference;
    /**
     * replaces | transforms | signs | appends
     * The type of relationship that this document has with anther document.
     * If this document appends another document, then the document cannot be fully understood without also accessing the referenced document.
     */
    code: DocumentReferenceDocumentRelationshipType;
}
/**
 * Document referenced
 * The document and format referenced. There may be multiple content element repetitions, each with a different format.
 */
export interface DocumentReferenceContent extends BackboneElement {
    /**
     * Where to access the document
     * The document or URL of the document along with critical metadata to prove content has integrity.
     */
    attachment: Attachment;
    /**
     * Format/content rules for the document
     * An identifier of the document encoding, structure, and template that the document conforms to beyond the base format indicated in the mimeType.
     * Note that while IHE mostly issues URNs for format types, not all documents can be identified by a URI.
     */
    format?: Coding;
}
/**
 * Clinical context of document
 * The clinical context in which the document was prepared.
 * These values are primarily added to help with searching for interesting/relevant documents.
 */
export interface DocumentReferenceContext extends BackboneElement {
    /**
     * Context of the document  content
     * Describes the clinical encounter or type of care that the document content is associated with.
     */
    encounter?: Reference[];
    /**
     * Main clinical acts documented
     * 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 type Code, such as a "History and Physical Report" in which the procedure being documented is necessarily a "History and Physical" act.
     * An event can further specialize the act inherent in the type, such as  where it is simply "Procedure Report" and the procedure was a "colonoscopy". If one or more event codes are included, they shall not conflict with the values inherent in the class or type elements as such a conflict would create an ambiguous situation.
     */
    event?: CodeableConcept[];
    /**
     * Time of service that is being documented
     * The time period over which the service that is described by the document was provided.
     */
    period?: Period;
    /**
     * Kind of facility where patient was seen
     * The kind of facility where the patient was seen.
     */
    facilityType?: CodeableConcept;
    /**
     * Additional details about where the content was created (e.g. clinical specialty)
     * This property may convey specifics about the practice setting where the content was created, often reflecting the clinical specialty.
     * This element should be based on a coarse classification system for the class of specialty practice. Recommend the use of the classification system for Practice Setting, such as that described by the Subject Matter Domain in LOINC.
     */
    practiceSetting?: CodeableConcept;
    /**
     * Patient demographics from source
     * The Patient Information as known when the document was published. May be a reference to a version specific, or contained.
     */
    sourcePatientInfo?: Reference;
    /**
     * Related identifiers or resources
     * Related identifiers or resources associated with the DocumentReference.
     * May be identifiers or resources that caused the DocumentReference or referenced Document to be created.
     */
    related?: Reference[];
}
/**
 * A reference to a document
 * A reference to a document of any kind for any purpose. Provides metadata about the document so that the document can be discovered and managed. The scope of a document is any seralized object with a mime-type, so includes formal patient centric documents (CDA), cliical notes, scanned paper, and non-patient specific documents like policy text.
 * Usually, this is used for documents other than those defined by FHIR.
 */
export interface DocumentReference extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'DocumentReference';
    /**
     * Master Version Specific Identifier
     * 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.
     * CDA Document Id extension and root.
     */
    masterIdentifier?: Identifier;
    /**
     * Other identifiers for the document
     * Other identifiers associated with the document, including version independent identifiers.
     */
    identifier?: Identifier[];
    /**
     * Kind of document (LOINC if possible)
     * 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.
     * Key metadata element describing the document that describes he exact type of document. Helps humans to assess whether the document is of interest when viewing a list of documents.
     */
    type?: CodeableConcept;
    /**
     * Categorization of document
     * 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.
     * Key metadata element describing the the category or classification of the document. This is a broader perspective that groups similar documents based on how they would be used. This is a primary key used in searching.
     */
    category?: CodeableConcept[];
    /**
     * Who/what is the subject of the document
     * 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).
     */
    subject?: Reference;
    /**
     * When this document reference was created
     * When the document reference was created.
     * Referencing/indexing time is used for tracking, organizing versions and searching.
     */
    date?: instant;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Who and/or what authored the document
     * Identifies who is responsible for adding the information to the document.
     * Not necessarily who did the actual data entry (i.e. typist) or who was the source (informant).
     */
    author?: Reference[];
    /**
     * Who/what authenticated the document
     * Which person or organization authenticates that this document is valid.
     * Represents a participant within the author institution who has legally authenticated or attested the document. Legal authentication implies that a document has been signed manually or electronically by the legal Authenticator.
     */
    authenticator?: Reference;
    /**
     * Organization which maintains the document
     * Identifies the organization or group who is responsible for ongoing maintenance of and access to the document.
     * Identifies the logical organization (software system, vendor, or department) to go to find the current version, where to report issues, etc. This is different from the physical location (URL, disk drive, or server) of the document, which is the technical location of the document, which host may be delegated to the management of some other organization.
     */
    custodian?: Reference;
    /**
     * Relationships to other documents
     * Relationships that this document has with other document references that already exist.
     * This element is labeled as a modifier because documents that append to other documents are incomplete on their own.
     */
    relatesTo?: DocumentReferenceRelatesTo[];
    /**
     * Human-readable description
     * Human-readable description of the source document.
     * What the document is about,  a terse summary of the document.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Document security-tags
     * 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.
     * The confidentiality codes can carry multiple vocabulary items. HL7 has developed an understanding of security and privacy tags that might be desirable in a Document Sharing environment, called HL7 Healthcare Privacy and Security Classification System (HCS). The following specification is recommended but not mandated, as the vocabulary bindings are an administrative domain responsibility. The use of this method is up to the policy domain such as the XDS Affinity Domain or other Trust Domain where all parties including sender and recipients are trusted to appropriately tag and enforce.

In the HL7 Healthcare Privacy and Security Classification (HCS) there are code systems specific to Confidentiality, Sensitivity, Integrity, and Handling Caveats. Some values would come from a local vocabulary as they are related to workflow roles and special projects.
     */
    securityLabel?: CodeableConcept[];
    /**
     * Document referenced
     * The document and format referenced. There may be multiple content element repetitions, each with a different format.
     */
    content: DocumentReferenceContent[];
    /**
     * Clinical context of document
     * The clinical context in which the document was prepared.
     * These values are primarily added to help with searching for interesting/relevant documents.
     */
    context?: DocumentReferenceContext;
    /**
     * current | superseded | entered-in-error
     * The status of this document reference.
     * This is the status of the DocumentReference object, which might be independent from the docStatus element.

This element is labeled as a modifier because the status contains the codes that mark the document or reference as not currently valid.
     */
    status: DocumentReferenceStatus;
    /**
     * preliminary | final | amended | entered-in-error
     * The status of the underlying document.
     * The document that is pointed to might be in various lifecycle states.
     */
    docStatus?: DocumentReferenceReferredDocumentStatus;
}
/**
 * A resource with narrative, extensions, and contained resources
 * A resource that includes narrative, extensions, and contained resources.
 */
export interface DomainResource extends Resource {
    /**
     * Text summary of the resource, for human interpretation
     * A human-readable narrative that contains a summary of the resource and can 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.
     * Contained resources do not have narrative. Resources that are not contained SHOULD have a narrative. In some cases, a resource may only have text with little or no additional discrete data (as long as all minOccurs=1 elements are satisfied).  This may be necessary for data from legacy systems where information is captured as a "text blob" or where text is additionally entered raw or narrated and encoded information is added later.
     */
    text?: Narrative;
    /**
     * Contained, inline Resources
     * 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.
     * This should never be done when the content can be identified properly, as once identification is lost, it is extremely difficult (and context dependent) to restore it again. Contained resources may have profiles and tags In their meta elements, but SHALL NOT have security labels.
     */
    contained?: Resource[];
    /**
     * Additional content defined by implementations
     * May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
     * There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions.  The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.
     */
    extension?: Extension[];
    /**
     * Extensions that cannot be ignored
     * 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 and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.

Modifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).
     * There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions.  The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.
     */
    modifierExtension?: Extension[];
}
/**
 * What sample size was involved?
 * A description of the size of the sample involved in the synthesis.
 */
export interface EffectEvidenceSynthesisSampleSize extends BackboneElement {
    /**
     * Description of sample size
     * Human-readable summary of sample size.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * How many studies?
     * Number of studies included in this evidence synthesis.
     */
    numberOfStudies?: integer;
    /**
     * Extension for numberOfStudies
     **/
    _numberOfStudies?: Element;
    /**
     * How many participants?
     * Number of participants included in this evidence synthesis.
     */
    numberOfParticipants?: integer;
    /**
     * Extension for numberOfParticipants
     **/
    _numberOfParticipants?: Element;
}
/**
 * What was the result per exposure?
 * A description of the results for each exposure considered in the effect estimate.
 */
export interface EffectEvidenceSynthesisResultsByExposure extends BackboneElement {
    /**
     * Description of results by exposure
     * Human-readable summary of results by exposure state.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Variant exposure states
     * Used to define variant exposure states such as low-risk state.
     */
    variantState?: CodeableConcept;
    /**
     * Risk evidence synthesis
     * Reference to a RiskEvidenceSynthesis resource.
     */
    riskEvidenceSynthesis: Reference;
    /**
     * exposure | exposure-alternative
     * Whether these results are for the exposure state or alternative exposure state.
     */
    exposureState?: EffectEvidenceSynthesisExposureState;
}
/**
 * How precise the estimate is
 * A description of the precision of the estimate for the effect.
 */
export interface EffectEvidenceSynthesisEffectEstimatePrecisionEstimate extends BackboneElement {
    /**
     * Type of precision estimate
     * Examples include confidence interval and interquartile range.
     */
    type?: CodeableConcept;
    /**
     * Level of confidence interval
     * Use 95 for a 95% confidence interval.
     */
    level?: decimal;
    /**
     * Extension for level
     **/
    _level?: Element;
    /**
     * Lower bound
     * Lower bound of confidence interval.
     */
    from?: decimal;
    /**
     * Extension for from
     **/
    _from?: Element;
    /**
     * Upper bound
     * Upper bound of confidence interval.
     */
    to?: decimal;
    /**
     * Extension for to
     **/
    _to?: Element;
}
/**
 * What was the estimated effect
 * The estimated effect of the exposure variant.
 */
export interface EffectEvidenceSynthesisEffectEstimate extends BackboneElement {
    /**
     * Description of effect estimate
     * Human-readable summary of effect estimate.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Type of efffect estimate
     * Examples include relative risk and mean difference.
     */
    type?: CodeableConcept;
    /**
     * Variant exposure states
     * Used to define variant exposure states such as low-risk state.
     */
    variantState?: CodeableConcept;
    /**
     * Point estimate
     * The point estimate of the effect estimate.
     */
    value?: decimal;
    /**
     * Extension for value
     **/
    _value?: Element;
    /**
     * What unit is the outcome described in?
     * Specifies the UCUM unit for the outcome.
     */
    unitOfMeasure?: CodeableConcept;
    /**
     * How precise the estimate is
     * A description of the precision of the estimate for the effect.
     */
    precisionEstimate?: EffectEvidenceSynthesisEffectEstimatePrecisionEstimate[];
}
/**
 * A component that contributes to the overall certainty
 * A description of a component of the overall certainty.
 */
export interface EffectEvidenceSynthesisCertaintyCertaintySubcomponent extends BackboneElement {
    /**
     * Type of subcomponent of certainty rating
     * Type of subcomponent of certainty rating.
     */
    type?: CodeableConcept;
    /**
     * Subcomponent certainty rating
     * A rating of a subcomponent of rating certainty.
     */
    rating?: CodeableConcept[];
    /**
     * Used for footnotes or explanatory notes
     * A human-readable string to clarify or explain concepts about the resource.
     */
    note?: Annotation[];
}
/**
 * How certain is the effect
 * A description of the certainty of the effect estimate.
 */
export interface EffectEvidenceSynthesisCertainty extends BackboneElement {
    /**
     * Certainty rating
     * A rating of the certainty of the effect estimate.
     */
    rating?: CodeableConcept[];
    /**
     * Used for footnotes or explanatory notes
     * A human-readable string to clarify or explain concepts about the resource.
     */
    note?: Annotation[];
    /**
     * A component that contributes to the overall certainty
     * A description of a component of the overall certainty.
     */
    certaintySubcomponent?: EffectEvidenceSynthesisCertaintyCertaintySubcomponent[];
}
/**
 * A quantified estimate of effect based on a body of evidence
 * The EffectEvidenceSynthesis resource describes the difference in an outcome between exposures states in a population where the effect estimate is derived from a combination of research studies.
 */
export interface EffectEvidenceSynthesis extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'EffectEvidenceSynthesis';
    /**
     * Canonical identifier for this effect evidence synthesis, represented as a URI (globally unique)
     * An absolute URI that is used to identify this effect evidence synthesis when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this effect evidence synthesis is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the effect evidence synthesis is stored on different servers.
     * Can be a urn:uuid: or a urn:oid: but real http: addresses are preferred.  Multiple instances may share the same URL if they have a distinct version.

The determination of when to create a new version of a resource (same url, new version) vs. defining a new artifact is up to the author.  Considerations for making this decision are found in [Technical and Business Versions](resource.html#versions).

In some cases, the resource can no longer be found at the stated url, but the url itself cannot change. Implementations can use the [meta.source](resource.html#meta) element to indicate where the current master source of the resource can be found.
     */
    url?: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Additional identifier for the effect evidence synthesis
     * A formal identifier that is used to identify this effect evidence synthesis when it is represented in other formats, or referenced in a specification, model, design or an instance.
     * Typically, this is used for identifiers that can go in an HL7 V3 II (instance identifier) data type, and can then identify this effect evidence synthesis outside of FHIR, where it is not possible to use the logical URI.
     */
    identifier?: Identifier[];
    /**
     * Business version of the effect evidence synthesis
     * The identifier that is used to identify this version of the effect evidence synthesis when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the effect evidence synthesis 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.
     * There may be different effect evidence synthesis instances that have the same identifier but different versions.  The version can be appended to the url in a reference to allow a reference to a particular business version of the effect evidence synthesis with the format [url]|[version].
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
    /**
     * Name for this effect evidence synthesis (computer friendly)
     * A natural language name identifying the effect evidence synthesis. This name should be usable as an identifier for the module by machine processing applications such as code generation.
     * The name is not expected to be globally unique. The name should be a simple alphanumeric type name to ensure that it is machine-processing friendly.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Name for this effect evidence synthesis (human friendly)
     * A short, descriptive, user-friendly title for the effect evidence synthesis.
     * This name does not need to be machine-processing friendly and may contain punctuation, white-space, etc.
     */
    title?: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * Date last changed
     * The date  (and optionally time) when the effect evidence synthesis was published. The date must change 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 effect evidence synthesis changes.
     * Note that this is not the same as the resource last-modified-date, since the resource may be a secondary representation of the effect evidence synthesis. Additional specific dates may be added as extensions or be found by consulting Provenances associated with past versions of the resource.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Name of the publisher (organization or individual)
     * The name of the organization or individual that published the effect evidence synthesis.
     * Usually an organization but may be an individual. The publisher (or steward) of the effect evidence synthesis is the organization or individual primarily responsible for the maintenance and upkeep of the effect evidence synthesis. This is not necessarily the same individual or organization that developed and initially authored the content. The publisher is the primary point of contact for questions or issues with the effect evidence synthesis. This item SHOULD be populated unless the information is available from context.
     */
    publisher?: string;
    /**
     * Extension for publisher
     **/
    _publisher?: Element;
    /**
     * Contact details for the publisher
     * Contact details to assist a user in finding and communicating with the publisher.
     * May be a web site, an email address, a telephone number, etc.
     */
    contact?: ContactDetail[];
    /**
     * Natural language description of the effect evidence synthesis
     * A free text natural language description of the effect evidence synthesis from a consumer's perspective.
     * This description can be used to capture details such as why the effect evidence synthesis was built, comments about misuse, instructions for clinical use and interpretation, literature references, examples from the paper world, etc. It is not a rendering of the effect evidence synthesis as conveyed in the 'text' field of the resource itself. This item SHOULD be populated unless the information is available from context (e.g. the language of the effect evidence synthesis is presumed to be the predominant language in the place the effect evidence synthesis was created).
     */
    description?: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Used for footnotes or explanatory notes
     * A human-readable string to clarify or explain concepts about the resource.
     */
    note?: Annotation[];
    /**
     * The context that the content is intended to support
     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate effect evidence synthesis instances.
     * When multiple useContexts are specified, there is no expectation that all or any of the contexts apply.
     */
    useContext?: UsageContext[];
    /**
     * Intended jurisdiction for effect evidence synthesis (if applicable)
     * A legal or geographic region in which the effect evidence synthesis is intended to be used.
     * It may be possible for the effect evidence synthesis to be used in jurisdictions other than those for which it was originally designed or intended.
     */
    jurisdiction?: CodeableConcept[];
    /**
     * Use and/or publishing restrictions
     * A copyright statement relating to the effect evidence synthesis and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the effect evidence synthesis.
     */
    copyright?: markdown;
    /**
     * Extension for copyright
     **/
    _copyright?: Element;
    /**
     * When the effect evidence synthesis was approved by publisher
     * The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
     * The 'date' element may be more recent than the approval date because of minor changes or editorial corrections.
     */
    approvalDate?: date;
    /**
     * Extension for approvalDate
     **/
    _approvalDate?: Element;
    /**
     * When the effect evidence synthesis was last reviewed
     * The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.
     * If specified, this date follows the original approval date.
     */
    lastReviewDate?: date;
    /**
     * Extension for lastReviewDate
     **/
    _lastReviewDate?: Element;
    /**
     * When the effect evidence synthesis is expected to be used
     * The period during which the effect evidence synthesis content was or is planned to be in active use.
     * The effective period for a effect evidence synthesis  determines when the content is applicable for usage and is independent of publication and review dates. For example, a measure intended to be used for the year 2016 might be published in 2015.
     */
    effectivePeriod?: Period;
    /**
     * The category of the EffectEvidenceSynthesis, such as Education, Treatment, Assessment, etc.
     * Descriptive topics related to the content of the EffectEvidenceSynthesis. Topics provide a high-level categorization grouping types of EffectEvidenceSynthesiss that can be useful for filtering and searching.
     */
    topic?: CodeableConcept[];
    /**
     * Who authored the content
     * An individiual or organization primarily involved in the creation and maintenance of the content.
     */
    author?: ContactDetail[];
    /**
     * Who edited the content
     * An individual or organization primarily responsible for internal coherence of the content.
     */
    editor?: ContactDetail[];
    /**
     * Who reviewed the content
     * An individual or organization primarily responsible for review of some aspect of the content.
     */
    reviewer?: ContactDetail[];
    /**
     * Who endorsed the content
     * An individual or organization responsible for officially endorsing the content for use in some setting.
     */
    endorser?: ContactDetail[];
    /**
     * Additional documentation, citations, etc.
     * Related artifacts such as additional documentation, justification, or bibliographic references.
     * Each related artifact is either an attachment, or a reference to another resource, but not both.
     */
    relatedArtifact?: RelatedArtifact[];
    /**
     * Type of synthesis
     * Type of synthesis eg meta-analysis.
     */
    synthesisType?: CodeableConcept;
    /**
     * Type of study
     * Type of study eg randomized trial.
     */
    studyType?: CodeableConcept;
    /**
     * What population?
     * A reference to a EvidenceVariable resource that defines the population for the research.
     */
    population: Reference;
    /**
     * What exposure?
     * A reference to a EvidenceVariable resource that defines the exposure for the research.
     */
    exposure: Reference;
    /**
     * What comparison exposure?
     * A reference to a EvidenceVariable resource that defines the comparison exposure for the research.
     */
    exposureAlternative: Reference;
    /**
     * What outcome?
     * A reference to a EvidenceVariable resomece that defines the outcome for the research.
     */
    outcome: Reference;
    /**
     * What sample size was involved?
     * A description of the size of the sample involved in the synthesis.
     */
    sampleSize?: EffectEvidenceSynthesisSampleSize;
    /**
     * What was the result per exposure?
     * A description of the results for each exposure considered in the effect estimate.
     */
    resultsByExposure?: EffectEvidenceSynthesisResultsByExposure[];
    /**
     * What was the estimated effect
     * The estimated effect of the exposure variant.
     */
    effectEstimate?: EffectEvidenceSynthesisEffectEstimate[];
    /**
     * How certain is the effect
     * A description of the certainty of the effect estimate.
     */
    certainty?: EffectEvidenceSynthesisCertainty[];
    /**
     * draft | active | retired | unknown
     * The status of this effect evidence synthesis. Enables tracking the life-cycle of the content.
     * Allows filtering of effect evidence synthesiss that are appropriate for use versus not.
     */
    status: EffectEvidenceSynthesisPublicationStatus;
}
/**
 * List of past encounter statuses
 * 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.
 * The current status is always found in the current version of the resource, not the status history.
 */
export interface EncounterStatusHistory extends BackboneElement {
    /**
     * The time that the episode was in the specified status
     * The time that the episode was in the specified status.
     */
    period: Period;
    /**
     * planned | arrived | triaged | in-progress | onleave | finished | cancelled +
     * planned | arrived | triaged | in-progress | onleave | finished | cancelled +.
     */
    status: EncounterStatus;
}
/**
 * List of past encounter classes
 * 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 transitions 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 kind of discharge from emergency to inpatient.
 */
export interface EncounterClassHistory extends BackboneElement {
    /**
     * inpatient | outpatient | ambulatory | emergency +
     * inpatient | outpatient | ambulatory | emergency +.
     */
    class: Coding;
    /**
     * The time that the episode was in the specified class
     * The time that the episode was in the specified class.
     */
    period: Period;
}
/**
 * List of participants involved in the encounter
 * The list of people responsible for providing the service.
 */
export interface EncounterParticipant extends BackboneElement {
    /**
     * Role of participant in encounter
     * Role of participant in encounter.
     * The participant type indicates how an individual participates in an encounter. It includes non-practitioner participants, and for practitioners this is to describe the action type in the context of this encounter (e.g. Admitting Dr, Attending Dr, Translator, Consulting Dr). This is different to the practitioner roles which are functional roles, derived from terms of employment, education, licensing, etc.
     */
    type?: CodeableConcept[];
    /**
     * Period of time during the encounter that the participant participated
     * 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.
     */
    period?: Period;
    /**
     * Persons involved in the encounter other than the patient
     * Persons involved in the encounter other than the patient.
     */
    individual?: Reference;
}
/**
 * The list of diagnosis relevant to this encounter
 * The list of diagnosis relevant to this encounter.
 */
export interface EncounterDiagnosis extends BackboneElement {
    /**
     * The diagnosis or procedure relevant to the encounter
     * 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.
     * For systems that need to know which was the primary diagnosis, these will be marked with the standard extension primaryDiagnosis (which is a sequence value rather than a flag, 1 = primary diagnosis).
     */
    condition: Reference;
    /**
     * Role that this diagnosis has within the encounter (e.g. admission, billing, discharge …)
     * Role that this diagnosis has within the encounter (e.g. admission, billing, discharge …).
     */
    use?: CodeableConcept;
    /**
     * Ranking of the diagnosis (for each role type)
     * Ranking of the diagnosis (for each role type).
     */
    rank?: positiveInt;
    /**
     * Extension for rank
     **/
    _rank?: Element;
}
/**
 * Details about the admission to a healthcare service
 * Details about the admission to a healthcare service.
 * An Encounter may cover more than just the inpatient stay. Contexts such as outpatients, community clinics, and aged care facilities are also included.

The duration recorded in the period of this encounter covers the entire scope of this hospitalization record.
 */
export interface EncounterHospitalization extends BackboneElement {
    /**
     * Pre-admission identifier
     * Pre-admission identifier.
     */
    preAdmissionIdentifier?: Identifier;
    /**
     * The location/organization from which the patient came before admission
     * The location/organization from which the patient came before admission.
     */
    origin?: Reference;
    /**
     * From where patient was admitted (physician referral, transfer)
     * From where patient was admitted (physician referral, transfer).
     */
    admitSource?: CodeableConcept;
    /**
     * The type of hospital re-admission that has occurred (if any). If the value is absent, then this is not identified as a readmission
     * Whether this hospitalization is a readmission and why if known.
     */
    reAdmission?: CodeableConcept;
    /**
     * Diet preferences reported by the patient
     * Diet preferences reported by the patient.
     * For example, a patient may request both a dairy-free and nut-free diet preference (not mutually exclusive).
     */
    dietPreference?: CodeableConcept[];
    /**
     * Special courtesies (VIP, board member)
     * Special courtesies (VIP, board member).
     */
    specialCourtesy?: CodeableConcept[];
    /**
     * Wheelchair, translator, stretcher, etc.
     * Any special requests that have been made for this hospitalization encounter, such as the provision of specific equipment or other things.
     */
    specialArrangement?: CodeableConcept[];
    /**
     * Location/organization to which the patient is discharged
     * Location/organization to which the patient is discharged.
     */
    destination?: Reference;
    /**
     * Category or kind of location after discharge
     * Category or kind of location after discharge.
     */
    dischargeDisposition?: CodeableConcept;
}
/**
 * List of locations where the patient has been
 * List of locations where  the patient has been during this encounter.
 * Virtual encounters can be recorded in the Encounter by specifying a location reference to a location of type "kind" such as "client's home" and an encounter.class = "virtual".
 */
export interface EncounterLocation extends BackboneElement {
    /**
     * Location the encounter takes place
     * The location where the encounter takes place.
     */
    location: Reference;
    /**
     * The physical type of the location (usually the level in the location hierachy - bed room ward etc.)
     * This will be used to specify the required levels (bed/ward/room/etc.) desired to be recorded to simplify either messaging or query.
     * This information is de-normalized from the Location resource to support the easier understanding of the encounter resource and processing in messaging or query.

There may be many levels in the hierachy, and this may only pic specific levels that are required for a specific usage scenario.
     */
    physicalType?: CodeableConcept;
    /**
     * Time period during which the patient was present at the location
     * Time period during which the patient was present at the location.
     */
    period?: Period;
    /**
     * planned | active | reserved | completed
     * The status of the participants' presence at the specified location during the period specified. If the participant is no longer at the location, then the period will have an end date/time.
     * When the patient is no longer active at a location, then the period end date is entered, and the status may be changed to completed.
     */
    status?: EncounterLocationStatus;
}
/**
 * An interaction during which services are provided to 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.
 */
export interface Encounter extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Encounter';
    /**
     * Identifier(s) by which this encounter is known
     * Identifier(s) by which this encounter is known.
     */
    identifier?: Identifier[];
    /**
     * List of past encounter statuses
     * 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.
     * The current status is always found in the current version of the resource, not the status history.
     */
    statusHistory?: EncounterStatusHistory[];
    /**
     * Classification of patient encounter
     * Concepts representing classification of patient encounter such as ambulatory (outpatient), inpatient, emergency, home health or others due to local variations.
     */
    class: Coding;
    /**
     * List of past encounter classes
     * 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 transitions 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 kind of discharge from emergency to inpatient.
     */
    classHistory?: EncounterClassHistory[];
    /**
     * Specific type of encounter
     * Specific type of encounter (e.g. e-mail consultation, surgical day-care, skilled nursing, rehabilitation).
     * Since there are many ways to further classify encounters, this element is 0..*.
     */
    type?: CodeableConcept[];
    /**
     * Specific type of service
     * Broad categorization of the service that is to be provided (e.g. cardiology).
     */
    serviceType?: CodeableConcept;
    /**
     * Indicates the urgency of the encounter
     * Indicates the urgency of the encounter.
     */
    priority?: CodeableConcept;
    /**
     * The patient or group present at the encounter
     * The patient or group present at the encounter.
     * While the encounter is always about the patient, the patient might not actually be known in all contexts of use, and there may be a group of patients that could be anonymous (such as in a group therapy for Alcoholics Anonymous - where the recording of the encounter could be used for billing on the number of people/staff and not important to the context of the specific patients) or alternately in veterinary care a herd of sheep receiving treatment (where the animals are not individually tracked).
     */
    subject?: Reference;
    /**
     * Episode(s) of care that this encounter should be recorded against
     * 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).
     */
    episodeOfCare?: Reference[];
    /**
     * The ServiceRequest that initiated this encounter
     * The request this encounter satisfies (e.g. incoming referral or procedure request).
     */
    basedOn?: Reference[];
    /**
     * List of participants involved in the encounter
     * The list of people responsible for providing the service.
     */
    participant?: EncounterParticipant[];
    /**
     * The appointment that scheduled this encounter
     * The appointment that scheduled this encounter.
     */
    appointment?: Reference[];
    /**
     * The start and end time of the encounter
     * The start and end time of the encounter.
     * If not (yet) known, the end of the Period may be omitted.
     */
    period?: Period;
    /**
     * Quantity of time the encounter lasted (less time absent)
     * Quantity of time the encounter lasted. This excludes the time during leaves of absence.
     * May differ from the time the Encounter.period lasted because of leave of absence.
     */
    length?: Duration;
    /**
     * Coded reason the encounter takes place
     * Reason the encounter takes place, expressed as a code. For admissions, this can be used for a coded admission diagnosis.
     * For systems that need to know which was the primary diagnosis, these will be marked with the standard extension primaryDiagnosis (which is a sequence value rather than a flag, 1 = primary diagnosis).
     */
    reasonCode?: CodeableConcept[];
    /**
     * Reason the encounter takes place (reference)
     * Reason the encounter takes place, expressed as a code. For admissions, this can be used for a coded admission diagnosis.
     * For systems that need to know which was the primary diagnosis, these will be marked with the standard extension primaryDiagnosis (which is a sequence value rather than a flag, 1 = primary diagnosis).
     */
    reasonReference?: Reference[];
    /**
     * The list of diagnosis relevant to this encounter
     * The list of diagnosis relevant to this encounter.
     */
    diagnosis?: EncounterDiagnosis[];
    /**
     * The set of accounts that may be used for billing for this Encounter
     * The set of accounts that may be used for billing for this Encounter.
     * The billing system may choose to allocate billable items associated with the Encounter to different referenced Accounts based on internal business rules.
     */
    account?: Reference[];
    /**
     * Details about the admission to a healthcare service
     * Details about the admission to a healthcare service.
     * An Encounter may cover more than just the inpatient stay. Contexts such as outpatients, community clinics, and aged care facilities are also included.

The duration recorded in the period of this encounter covers the entire scope of this hospitalization record.
     */
    hospitalization?: EncounterHospitalization;
    /**
     * List of locations where the patient has been
     * List of locations where  the patient has been during this encounter.
     * Virtual encounters can be recorded in the Encounter by specifying a location reference to a location of type "kind" such as "client's home" and an encounter.class = "virtual".
     */
    location?: EncounterLocation[];
    /**
     * The organization (facility) responsible for this encounter
     * The organization that is primarily responsible for this Encounter's services. This MAY be the same as the organization on the Patient record, however it could be different, such as if the actor performing the services was from an external organization (which may be billed seperately) for an external consultation.  Refer to the example bundle showing an abbreviated set of Encounters for a colonoscopy.
     */
    serviceProvider?: Reference;
    /**
     * Another Encounter this encounter is part of
     * Another Encounter of which this encounter is a part of (administratively or in time).
     * This is also used for associating a child's encounter back to the mother's encounter.

Refer to the Notes section in the Patient resource for further details.
     */
    partOf?: Reference;
    /**
     * planned | arrived | triaged | in-progress | onleave | finished | cancelled +
     * planned | arrived | triaged | in-progress | onleave | finished | cancelled +.
     * Note that internal business rules will determine the appropriate transitions that may occur between statuses (and also classes).
     */
    status: EncounterStatus;
}
/**
 * The technical details of an endpoint that can be used for electronic services
 * 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.
 */
export interface Endpoint extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Endpoint';
    /**
     * Identifies this endpoint across multiple systems
     * Identifier for the organization that is used to identify the endpoint across multiple disparate systems.
     */
    identifier?: Identifier[];
    /**
     * Protocol/Profile/Standard to be used with this endpoint connection
     * 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).
     * For additional connectivity details for the protocol, extensions will be used at this point, as in the XDS example.
     */
    connectionType: Coding;
    /**
     * A name that this endpoint can be identified by
     * A friendly name that this endpoint can be referred to with.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Organization that manages this endpoint (might not be the organization that exposes the endpoint)
     * The organization that manages this endpoint (even if technically another organization is hosting this in the cloud, it is the organization associated with the data).
     * This property is not typically used when searching for Endpoint resources for usage. The typical usage is via the reference from an applicable Organization/Location/Practitioner resource, which is where the context is provided. Multiple Locations may reference a single endpoint, and don't have to be within the same organization resource, but most likely within the same organizational hierarchy.
     */
    managingOrganization?: Reference;
    /**
     * Contact details for source (e.g. troubleshooting)
     * Contact details for a human to contact about the subscription. The primary use of this for system administrator troubleshooting.
     */
    contact?: ContactPoint[];
    /**
     * Interval the endpoint is expected to be operational
     * The interval during which the endpoint is expected to be operational.
     */
    period?: Period;
    /**
     * The type of content that may be used at this endpoint (e.g. XDS Discharge summaries)
     * The payload type describes the acceptable content that can be communicated on the endpoint.
     * The payloadFormat describes the serialization format of the data, where the payloadType indicates the specific document/schema that is being transferred; e.g. DischargeSummary or CarePlan.
     */
    payloadType: CodeableConcept[];
    /**
     * Mimetype to send. If not specified, the content could be anything (including no payload, if the connectionType defined this)
     * 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).
     * Sending the payload has obvious security consequences. The server is responsible for ensuring that the content is appropriately secured.
     */
    payloadMimeType?: code[];
    /**
     * Extension for payloadMimeType
     **/
    _payloadMimeType?: Element[];
    /**
     * The technical base address for connecting to this endpoint
     * The uri that describes the actual end-point to connect to.
     * For rest-hook, and websocket, the end-point must be an http: or https: URL; for email, a mailto: url, for sms, a tel: url, and for message the endpoint can be in any form of url the server understands (usually, http: or mllp:). The URI is allowed to be relative; in which case, it is relative to the server end-point (since there may be more than one, clients should avoid using relative URIs)

This address will be to the service base, without any parameters, or sub-services or resources tacked on.

E.g. for a WADO-RS endpoint, the url should be "https://pacs.hospital.org/wado-rs"

and not "https://pacs.hospital.org/wado-rs/studies/1.2.250.1.59.40211.12345678.678910/series/1.2.250.1.59.40211.789001276.14556172.67789/instances/...".
     */
    address: url;
    /**
     * Extension for address
     **/
    _address?: Element;
    /**
     * Usage depends on the channel type
     * Additional headers / information to send as part of the notification.
     * Exactly what these mean depends on the channel type. The can convey additional information to the recipient and/or meet security requirements.
     */
    header?: string[];
    /**
     * Extension for header
     **/
    _header?: Element[];
    /**
     * active | suspended | error | off | entered-in-error | test
     * active | suspended | error | off | test.
     * This element is labeled as a modifier because the status contains codes that mark the endpoint as not currently valid.
     */
    status: EndpointStatus;
}
/**
 * Enroll in coverage
 * This resource provides the insurance enrollment details to the insurer regarding a specified coverage.
 */
export interface EnrollmentRequest extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'EnrollmentRequest';
    /**
     * Business Identifier
     * The Response business identifier.
     */
    identifier?: Identifier[];
    /**
     * Creation date
     * The date when this resource was created.
     */
    created?: dateTime;
    /**
     * Extension for created
     **/
    _created?: Element;
    /**
     * Target
     * The Insurer who is target  of the request.
     */
    insurer?: Reference;
    /**
     * Responsible practitioner
     * The practitioner who is responsible for the services rendered to the patient.
     */
    provider?: Reference;
    /**
     * The subject to be enrolled
     * Patient Resource.
     */
    candidate?: Reference;
    /**
     * Insurance information
     * Reference to the program or plan identification, underwriter or payor.
     */
    coverage?: Reference;
    /**
     * active | cancelled | draft | entered-in-error
     * The status of the resource instance.
     * This element is labeled as a modifier because the status contains codes that mark the request as not currently valid.
     */
    status?: EnrollmentRequestStatus;
}
/**
 * EnrollmentResponse resource
 * This resource provides enrollment and plan details from the processing of an EnrollmentRequest resource.
 */
export interface EnrollmentResponse extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'EnrollmentResponse';
    /**
     * Business Identifier
     * The Response business identifier.
     */
    identifier?: Identifier[];
    /**
     * Claim reference
     * Original request resource reference.
     */
    request?: Reference;
    /**
     * Disposition Message
     * A description of the status of the adjudication.
     */
    disposition?: string;
    /**
     * Extension for disposition
     **/
    _disposition?: Element;
    /**
     * Creation date
     * The date when the enclosed suite of services were performed or completed.
     */
    created?: dateTime;
    /**
     * Extension for created
     **/
    _created?: Element;
    /**
     * Insurer
     * The Insurer who produced this adjudicated response.
     */
    organization?: Reference;
    /**
     * Responsible practitioner
     * The practitioner who is responsible for the services rendered to the patient.
     */
    requestProvider?: Reference;
    /**
     * active | cancelled | draft | entered-in-error
     * The status of the resource instance.
     * This element is labeled as a modifier because the status contains codes that mark the response as not currently valid.
     */
    status?: EnrollmentResponseStatus;
    /**
     * queued | complete | error | partial
     * Processing status: error, complete.
     */
    outcome?: EnrollmentResponseRemittanceOutcome;
}
/**
 * Past list of status codes (the current status may be included to cover the start date of the status)
 * The history of statuses that the EpisodeOfCare has been through (without requiring processing the history of the resource).
 */
export interface EpisodeOfCareStatusHistory extends BackboneElement {
    /**
     * Duration the EpisodeOfCare was in the specified status
     * The period during this EpisodeOfCare that the specific status applied.
     */
    period: Period;
    /**
     * planned | waitlist | active | onhold | finished | cancelled | entered-in-error
     * planned | waitlist | active | onhold | finished | cancelled.
     */
    status: EpisodeOfCareStatus;
}
/**
 * The list of diagnosis relevant to this episode of care
 * The list of diagnosis relevant to this episode of care.
 */
export interface EpisodeOfCareDiagnosis extends BackboneElement {
    /**
     * Conditions/problems/diagnoses this episode of care is for
     * A list of conditions/problems/diagnoses that this episode of care is intended to be providing care for.
     */
    condition: Reference;
    /**
     * Role that this diagnosis has within the episode of care (e.g. admission, billing, discharge …)
     * Role that this diagnosis has within the episode of care (e.g. admission, billing, discharge …).
     */
    role?: CodeableConcept;
    /**
     * Ranking of the diagnosis (for each role type)
     * Ranking of the diagnosis (for each role type).
     */
    rank?: positiveInt;
    /**
     * Extension for rank
     **/
    _rank?: Element;
}
/**
 * An association of a Patient with an Organization and  Healthcare Provider(s) for a period of time that the Organization assumes some level of responsibility
 * 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.
 */
export interface EpisodeOfCare extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'EpisodeOfCare';
    /**
     * Business Identifier(s) relevant for this EpisodeOfCare
     * 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.
     */
    identifier?: Identifier[];
    /**
     * Past list of status codes (the current status may be included to cover the start date of the status)
     * The history of statuses that the EpisodeOfCare has been through (without requiring processing the history of the resource).
     */
    statusHistory?: EpisodeOfCareStatusHistory[];
    /**
     * Type/class  - e.g. specialist referral, disease management
     * A classification of the type of episode of care; e.g. specialist referral, disease management, type of funded care.
     * The type can be very important in processing as this could be used in determining if the EpisodeOfCare is relevant to specific government reporting, or other types of classifications.
     */
    type?: CodeableConcept[];
    /**
     * The list of diagnosis relevant to this episode of care
     * The list of diagnosis relevant to this episode of care.
     */
    diagnosis?: EpisodeOfCareDiagnosis[];
    /**
     * The patient who is the focus of this episode of care
     * The patient who is the focus of this episode of care.
     */
    patient: Reference;
    /**
     * Organization that assumes care
     * The organization that has assumed the specific responsibilities for the specified duration.
     */
    managingOrganization?: Reference;
    /**
     * Interval during responsibility is assumed
     * The interval during which the managing organization assumes the defined responsibility.
     */
    period?: Period;
    /**
     * Originating Referral Request(s)
     * Referral Request(s) that are fulfilled by this EpisodeOfCare, incoming referrals.
     */
    referralRequest?: Reference[];
    /**
     * Care manager/care coordinator for the patient
     * The practitioner that is the care manager/care coordinator for this patient.
     */
    careManager?: Reference;
    /**
     * Other practitioners facilitating this episode of care
     * The list of practitioners that may be facilitating this episode of care for specific purposes.
     */
    team?: Reference[];
    /**
     * The set of accounts that may be used for billing for this EpisodeOfCare
     * The set of accounts that may be used for billing for this EpisodeOfCare.
     * The billing system may choose to allocate billable items associated with the EpisodeOfCare to different referenced Accounts based on internal business rules.
     */
    account?: Reference[];
    /**
     * planned | waitlist | active | onhold | finished | cancelled | entered-in-error
     * planned | waitlist | active | onhold | finished | cancelled.
     * This element is labeled as a modifier because the status contains codes that mark the episode as not currently valid.
     */
    status: EpisodeOfCareStatus;
}
/**
 * A description of when an event can occur
 * The EventDefinition resource provides a reusable description of when a particular event can occur.
 */
export interface EventDefinition extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'EventDefinition';
    /**
     * Canonical identifier for this event definition, represented as a URI (globally unique)
     * An absolute URI that is used to identify this event definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this event definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the event definition is stored on different servers.
     * Can be a urn:uuid: or a urn:oid: but real http: addresses are preferred.  Multiple instances may share the same URL if they have a distinct version.

The determination of when to create a new version of a resource (same url, new version) vs. defining a new artifact is up to the author.  Considerations for making this decision are found in [Technical and Business Versions](resource.html#versions).

In some cases, the resource can no longer be found at the stated url, but the url itself cannot change. Implementations can use the [meta.source](resource.html#meta) element to indicate where the current master source of the resource can be found.
     */
    url?: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Additional identifier for the event definition
     * A formal identifier that is used to identify this event definition when it is represented in other formats, or referenced in a specification, model, design or an instance.
     * Typically, this is used for identifiers that can go in an HL7 V3 II (instance identifier) data type, and can then identify this event definition outside of FHIR, where it is not possible to use the logical URI.
     */
    identifier?: Identifier[];
    /**
     * Business version of the event definition
     * The identifier that is used to identify this version of the event definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the event 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.
     * There may be different event definition instances that have the same identifier but different versions.  The version can be appended to the url in a reference to allow a reference to a particular business version of the event definition with the format [url]|[version].
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
    /**
     * Name for this event definition (computer friendly)
     * A natural language name identifying the event definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.
     * The name is not expected to be globally unique. The name should be a simple alphanumeric type name to ensure that it is machine-processing friendly.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Name for this event definition (human friendly)
     * A short, descriptive, user-friendly title for the event definition.
     * This name does not need to be machine-processing friendly and may contain punctuation, white-space, etc.
     */
    title?: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * Subordinate title of the event definition
     * An explanatory or alternate title for the event definition giving additional information about its content.
     */
    subtitle?: string;
    /**
     * Extension for subtitle
     **/
    _subtitle?: Element;
    /**
     * For testing purposes, not real usage
     * A Boolean value to indicate that this event definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.
     * Allows filtering of event definitions that are appropriate for use versus not.
     */
    experimental?: boolean;
    /**
     * Extension for experimental
     **/
    _experimental?: Element;
    /**
     * Type of individual the event definition is focused on
     * A code or group definition that describes the intended subject of the event definition.
     */
    subjectCodeableConcept?: CodeableConcept;
    /**
     * Type of individual the event definition is focused on
     * A code or group definition that describes the intended subject of the event definition.
     */
    subjectReference?: Reference;
    /**
     * Date last changed
     * The date  (and optionally time) when the event definition was published. The date must change 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 event definition changes.
     * Note that this is not the same as the resource last-modified-date, since the resource may be a secondary representation of the event definition. Additional specific dates may be added as extensions or be found by consulting Provenances associated with past versions of the resource.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Name of the publisher (organization or individual)
     * The name of the organization or individual that published the event definition.
     * Usually an organization but may be an individual. The publisher (or steward) of the event definition is the organization or individual primarily responsible for the maintenance and upkeep of the event definition. This is not necessarily the same individual or organization that developed and initially authored the content. The publisher is the primary point of contact for questions or issues with the event definition. This item SHOULD be populated unless the information is available from context.
     */
    publisher?: string;
    /**
     * Extension for publisher
     **/
    _publisher?: Element;
    /**
     * Contact details for the publisher
     * Contact details to assist a user in finding and communicating with the publisher.
     * May be a web site, an email address, a telephone number, etc.
     */
    contact?: ContactDetail[];
    /**
     * Natural language description of the event definition
     * A free text natural language description of the event definition from a consumer's perspective.
     * This description can be used to capture details such as why the event definition was built, comments about misuse, instructions for clinical use and interpretation, literature references, examples from the paper world, etc. It is not a rendering of the event definition as conveyed in the 'text' field of the resource itself. This item SHOULD be populated unless the information is available from context (e.g. the language of the event definition is presumed to be the predominant language in the place the event definition was created).
     */
    description?: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * The context that the content is intended to support
     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate event definition instances.
     * When multiple useContexts are specified, there is no expectation that all or any of the contexts apply.
     */
    useContext?: UsageContext[];
    /**
     * Intended jurisdiction for event definition (if applicable)
     * A legal or geographic region in which the event definition is intended to be used.
     * It may be possible for the event definition to be used in jurisdictions other than those for which it was originally designed or intended.
     */
    jurisdiction?: CodeableConcept[];
    /**
     * Why this event definition is defined
     * Explanation of why this event definition is needed and why it has been designed as it has.
     * This element does not describe the usage of the event definition. Instead, it provides traceability of ''why'' the resource is either needed or ''why'' it is defined as it is.  This may be used to point to source materials or specifications that drove the structure of this event definition.
     */
    purpose?: markdown;
    /**
     * Extension for purpose
     **/
    _purpose?: Element;
    /**
     * Describes the clinical usage of the event definition
     * A detailed description of how the event definition is used from a clinical perspective.
     */
    usage?: string;
    /**
     * Extension for usage
     **/
    _usage?: Element;
    /**
     * Use and/or publishing restrictions
     * A copyright statement relating to the event definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the event definition.
     */
    copyright?: markdown;
    /**
     * Extension for copyright
     **/
    _copyright?: Element;
    /**
     * When the event definition was approved by publisher
     * The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
     * The 'date' element may be more recent than the approval date because of minor changes or editorial corrections.
     */
    approvalDate?: date;
    /**
     * Extension for approvalDate
     **/
    _approvalDate?: Element;
    /**
     * When the event definition was last reviewed
     * The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.
     * If specified, this date follows the original approval date.
     */
    lastReviewDate?: date;
    /**
     * Extension for lastReviewDate
     **/
    _lastReviewDate?: Element;
    /**
     * When the event definition is expected to be used
     * The period during which the event definition content was or is planned to be in active use.
     * The effective period for a event definition  determines when the content is applicable for usage and is independent of publication and review dates. For example, a measure intended to be used for the year 2016 might be published in 2015.
     */
    effectivePeriod?: Period;
    /**
     * E.g. Education, Treatment, Assessment, etc.
     * Descriptive topics related to the module. Topics provide a high-level categorization of the module that can be useful for filtering and searching.
     */
    topic?: CodeableConcept[];
    /**
     * Who authored the content
     * An individiual or organization primarily involved in the creation and maintenance of the content.
     */
    author?: ContactDetail[];
    /**
     * Who edited the content
     * An individual or organization primarily responsible for internal coherence of the content.
     */
    editor?: ContactDetail[];
    /**
     * Who reviewed the content
     * An individual or organization primarily responsible for review of some aspect of the content.
     */
    reviewer?: ContactDetail[];
    /**
     * Who endorsed the content
     * An individual or organization responsible for officially endorsing the content for use in some setting.
     */
    endorser?: ContactDetail[];
    /**
     * Additional documentation, citations, etc.
     * Related resources such as additional documentation, justification, or bibliographic references.
     * Each related resource is either an attachment, or a reference to another resource, but not both.
     */
    relatedArtifact?: RelatedArtifact[];
    /**
     * "when" the event occurs (multiple = 'or')
     * The trigger element defines when the event occurs. If more than one trigger condition is specified, the event fires whenever any one of the trigger conditions is met.
     */
    trigger: TriggerDefinition[];
    /**
     * draft | active | retired | unknown
     * The status of this event definition. Enables tracking the life-cycle of the content.
     * Allows filtering of event definitions that are appropriate for use versus not.
     */
    status: EventDefinitionPublicationStatus;
}
/**
 * A research context or question
 * The Evidence resource describes the conditional state (population and any exposures being compared within the population) and outcome (if specified) that the knowledge (evidence, assertion, recommendation) is about.
 */
export interface Evidence extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Evidence';
    /**
     * Canonical identifier for this evidence, represented as a URI (globally unique)
     * An absolute URI that is used to identify this evidence when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this evidence is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the evidence is stored on different servers.
     * Can be a urn:uuid: or a urn:oid: but real http: addresses are preferred.  Multiple instances may share the same URL if they have a distinct version.

The determination of when to create a new version of a resource (same url, new version) vs. defining a new artifact is up to the author.  Considerations for making this decision are found in [Technical and Business Versions](resource.html#versions).

In some cases, the resource can no longer be found at the stated url, but the url itself cannot change. Implementations can use the [meta.source](resource.html#meta) element to indicate where the current master source of the resource can be found.
     */
    url?: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Additional identifier for the evidence
     * A formal identifier that is used to identify this evidence when it is represented in other formats, or referenced in a specification, model, design or an instance.
     * Typically, this is used for identifiers that can go in an HL7 V3 II (instance identifier) data type, and can then identify this evidence outside of FHIR, where it is not possible to use the logical URI.
     */
    identifier?: Identifier[];
    /**
     * Business version of the evidence
     * The identifier that is used to identify this version of the evidence when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the evidence 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.
     * There may be different evidence instances that have the same identifier but different versions.  The version can be appended to the url in a reference to allow a reference to a particular business version of the evidence with the format [url]|[version].
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
    /**
     * Name for this evidence (computer friendly)
     * A natural language name identifying the evidence. This name should be usable as an identifier for the module by machine processing applications such as code generation.
     * The name is not expected to be globally unique. The name should be a simple alphanumeric type name to ensure that it is machine-processing friendly.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Name for this evidence (human friendly)
     * A short, descriptive, user-friendly title for the evidence.
     * This name does not need to be machine-processing friendly and may contain punctuation, white-space, etc.
     */
    title?: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * Title for use in informal contexts
     * The short title provides an alternate title for use in informal descriptive contexts where the full, formal title is not necessary.
     */
    shortTitle?: string;
    /**
     * Extension for shortTitle
     **/
    _shortTitle?: Element;
    /**
     * Subordinate title of the Evidence
     * An explanatory or alternate title for the Evidence giving additional information about its content.
     */
    subtitle?: string;
    /**
     * Extension for subtitle
     **/
    _subtitle?: Element;
    /**
     * Date last changed
     * The date  (and optionally time) when the evidence was published. The date must change 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 evidence changes.
     * Note that this is not the same as the resource last-modified-date, since the resource may be a secondary representation of the evidence. Additional specific dates may be added as extensions or be found by consulting Provenances associated with past versions of the resource.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Name of the publisher (organization or individual)
     * The name of the organization or individual that published the evidence.
     * Usually an organization but may be an individual. The publisher (or steward) of the evidence is the organization or individual primarily responsible for the maintenance and upkeep of the evidence. This is not necessarily the same individual or organization that developed and initially authored the content. The publisher is the primary point of contact for questions or issues with the evidence. This item SHOULD be populated unless the information is available from context.
     */
    publisher?: string;
    /**
     * Extension for publisher
     **/
    _publisher?: Element;
    /**
     * Contact details for the publisher
     * Contact details to assist a user in finding and communicating with the publisher.
     * May be a web site, an email address, a telephone number, etc.
     */
    contact?: ContactDetail[];
    /**
     * Natural language description of the evidence
     * A free text natural language description of the evidence from a consumer's perspective.
     * This description can be used to capture details such as why the evidence was built, comments about misuse, instructions for clinical use and interpretation, literature references, examples from the paper world, etc. It is not a rendering of the evidence as conveyed in the 'text' field of the resource itself. This item SHOULD be populated unless the information is available from context (e.g. the language of the evidence is presumed to be the predominant language in the place the evidence was created).
     */
    description?: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Used for footnotes or explanatory notes
     * A human-readable string to clarify or explain concepts about the resource.
     */
    note?: Annotation[];
    /**
     * The context that the content is intended to support
     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate evidence instances.
     * When multiple useContexts are specified, there is no expectation that all or any of the contexts apply.
     */
    useContext?: UsageContext[];
    /**
     * Intended jurisdiction for evidence (if applicable)
     * A legal or geographic region in which the evidence is intended to be used.
     * It may be possible for the evidence to be used in jurisdictions other than those for which it was originally designed or intended.
     */
    jurisdiction?: CodeableConcept[];
    /**
     * Use and/or publishing restrictions
     * A copyright statement relating to the evidence and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the evidence.
     */
    copyright?: markdown;
    /**
     * Extension for copyright
     **/
    _copyright?: Element;
    /**
     * When the evidence was approved by publisher
     * The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
     * The 'date' element may be more recent than the approval date because of minor changes or editorial corrections.
     */
    approvalDate?: date;
    /**
     * Extension for approvalDate
     **/
    _approvalDate?: Element;
    /**
     * When the evidence was last reviewed
     * The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.
     * If specified, this date follows the original approval date.
     */
    lastReviewDate?: date;
    /**
     * Extension for lastReviewDate
     **/
    _lastReviewDate?: Element;
    /**
     * When the evidence is expected to be used
     * The period during which the evidence content was or is planned to be in active use.
     * The effective period for a evidence  determines when the content is applicable for usage and is independent of publication and review dates. For example, a measure intended to be used for the year 2016 might be published in 2015.
     */
    effectivePeriod?: Period;
    /**
     * The category of the Evidence, such as Education, Treatment, Assessment, etc.
     * Descriptive topics related to the content of the Evidence. Topics provide a high-level categorization grouping types of Evidences that can be useful for filtering and searching.
     */
    topic?: CodeableConcept[];
    /**
     * Who authored the content
     * An individiual or organization primarily involved in the creation and maintenance of the content.
     */
    author?: ContactDetail[];
    /**
     * Who edited the content
     * An individual or organization primarily responsible for internal coherence of the content.
     */
    editor?: ContactDetail[];
    /**
     * Who reviewed the content
     * An individual or organization primarily responsible for review of some aspect of the content.
     */
    reviewer?: ContactDetail[];
    /**
     * Who endorsed the content
     * An individual or organization responsible for officially endorsing the content for use in some setting.
     */
    endorser?: ContactDetail[];
    /**
     * Additional documentation, citations, etc.
     * Related artifacts such as additional documentation, justification, or bibliographic references.
     * Each related artifact is either an attachment, or a reference to another resource, but not both.
     */
    relatedArtifact?: RelatedArtifact[];
    /**
     * What population?
     * A reference to a EvidenceVariable resource that defines the population for the research.
     */
    exposureBackground: Reference;
    /**
     * What exposure?
     * A reference to a EvidenceVariable resource that defines the exposure for the research.
     */
    exposureVariant?: Reference[];
    /**
     * What outcome?
     * A reference to a EvidenceVariable resomece that defines the outcome for the research.
     */
    outcome?: Reference[];
    /**
     * draft | active | retired | unknown
     * The status of this evidence. Enables tracking the life-cycle of the content.
     * Allows filtering of evidences that are appropriate for use versus not.
     */
    status: EvidencePublicationStatus;
}
/**
 * What defines the members of the evidence element
 * A characteristic that defines the members of the evidence element. Multiple characteristics are applied with "and" semantics.
 * Characteristics can be defined flexibly to accommodate different use cases for membership criteria, ranging from simple codes, all the way to using an expression language to express the criteria.
 */
export interface EvidenceVariableCharacteristic extends BackboneElement {
    /**
     * Natural language description of the characteristic
     * A short, natural language description of the characteristic that could be used to communicate the criteria to an end-user.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * What code or expression defines members?
     * Define members of the evidence element using Codes (such as condition, medication, or observation), Expressions ( using an expression language such as FHIRPath or CQL) or DataRequirements (such as Diabetes diagnosis onset in the last year).
     */
    definitionReference?: Reference;
    /**
     * What code or expression defines members?
     * Define members of the evidence element using Codes (such as condition, medication, or observation), Expressions ( using an expression language such as FHIRPath or CQL) or DataRequirements (such as Diabetes diagnosis onset in the last year).
     */
    definitionCanonical?: canonical;
    /**
     * Extension for definitionCanonical
     **/
    _definitionCanonical?: Element;
    /**
     * What code or expression defines members?
     * Define members of the evidence element using Codes (such as condition, medication, or observation), Expressions ( using an expression language such as FHIRPath or CQL) or DataRequirements (such as Diabetes diagnosis onset in the last year).
     */
    definitionCodeableConcept?: CodeableConcept;
    /**
     * What code or expression defines members?
     * Define members of the evidence element using Codes (such as condition, medication, or observation), Expressions ( using an expression language such as FHIRPath or CQL) or DataRequirements (such as Diabetes diagnosis onset in the last year).
     */
    definitionExpression?: Expression;
    /**
     * What code or expression defines members?
     * Define members of the evidence element using Codes (such as condition, medication, or observation), Expressions ( using an expression language such as FHIRPath or CQL) or DataRequirements (such as Diabetes diagnosis onset in the last year).
     */
    definitionDataRequirement?: DataRequirement;
    /**
     * What code or expression defines members?
     * Define members of the evidence element using Codes (such as condition, medication, or observation), Expressions ( using an expression language such as FHIRPath or CQL) or DataRequirements (such as Diabetes diagnosis onset in the last year).
     */
    definitionTriggerDefinition?: TriggerDefinition;
    /**
     * What code/value pairs define members?
     * Use UsageContext to define the members of the population, such as Age Ranges, Genders, Settings.
     */
    usageContext?: UsageContext[];
    /**
     * Whether the characteristic includes or excludes members
     * When true, members with this characteristic are excluded from the element.
     */
    exclude?: boolean;
    /**
     * Extension for exclude
     **/
    _exclude?: Element;
    /**
     * What time period do participants cover
     * Indicates what effective period the study covers.
     */
    participantEffectiveDateTime?: dateTime;
    /**
     * Extension for participantEffectiveDateTime
     **/
    _participantEffectiveDateTime?: Element;
    /**
     * What time period do participants cover
     * Indicates what effective period the study covers.
     */
    participantEffectivePeriod?: Period;
    /**
     * What time period do participants cover
     * Indicates what effective period the study covers.
     */
    participantEffectiveDuration?: Duration;
    /**
     * What time period do participants cover
     * Indicates what effective period the study covers.
     */
    participantEffectiveTiming?: Timing;
    /**
     * Observation time from study start
     * Indicates duration from the participant's study entry.
     */
    timeFromStart?: Duration;
    /**
     * mean | median | mean-of-mean | mean-of-median | median-of-mean | median-of-median
     * Indicates how elements are aggregated within the study effective period.
     */
    groupMeasure?: EvidenceVariableGroupMeasure;
}
/**
 * A population, intervention, or exposure definition
 * The EvidenceVariable resource describes a "PICO" element that knowledge (evidence, assertion, recommendation) is about.
 * PICO stands for Population (the population within which exposures are being compared), Intervention (the conditional state or exposure state being described for its effect on outcomes), Comparison (the alternative conditional state or alternative exposure state being compared against), and Outcome (the result or effect of the intervention in the population).
 */
export interface EvidenceVariable extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'EvidenceVariable';
    /**
     * Canonical identifier for this evidence variable, represented as a URI (globally unique)
     * An absolute URI that is used to identify this evidence variable when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this evidence variable is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the evidence variable is stored on different servers.
     * Can be a urn:uuid: or a urn:oid: but real http: addresses are preferred.  Multiple instances may share the same URL if they have a distinct version.

The determination of when to create a new version of a resource (same url, new version) vs. defining a new artifact is up to the author.  Considerations for making this decision are found in [Technical and Business Versions](resource.html#versions).

In some cases, the resource can no longer be found at the stated url, but the url itself cannot change. Implementations can use the [meta.source](resource.html#meta) element to indicate where the current master source of the resource can be found.
     */
    url?: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Additional identifier for the evidence variable
     * A formal identifier that is used to identify this evidence variable when it is represented in other formats, or referenced in a specification, model, design or an instance.
     * Typically, this is used for identifiers that can go in an HL7 V3 II (instance identifier) data type, and can then identify this evidence variable outside of FHIR, where it is not possible to use the logical URI.
     */
    identifier?: Identifier[];
    /**
     * Business version of the evidence variable
     * The identifier that is used to identify this version of the evidence variable when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the evidence variable 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.
     * There may be different evidence variable instances that have the same identifier but different versions.  The version can be appended to the url in a reference to allow a reference to a particular business version of the evidence variable with the format [url]|[version].
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
    /**
     * Name for this evidence variable (computer friendly)
     * A natural language name identifying the evidence variable. This name should be usable as an identifier for the module by machine processing applications such as code generation.
     * The name is not expected to be globally unique. The name should be a simple alphanumeric type name to ensure that it is machine-processing friendly.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Name for this evidence variable (human friendly)
     * A short, descriptive, user-friendly title for the evidence variable.
     * This name does not need to be machine-processing friendly and may contain punctuation, white-space, etc.
     */
    title?: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * Title for use in informal contexts
     * The short title provides an alternate title for use in informal descriptive contexts where the full, formal title is not necessary.
     */
    shortTitle?: string;
    /**
     * Extension for shortTitle
     **/
    _shortTitle?: Element;
    /**
     * Subordinate title of the EvidenceVariable
     * An explanatory or alternate title for the EvidenceVariable giving additional information about its content.
     */
    subtitle?: string;
    /**
     * Extension for subtitle
     **/
    _subtitle?: Element;
    /**
     * Date last changed
     * The date  (and optionally time) when the evidence variable was published. The date must change 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 evidence variable changes.
     * Note that this is not the same as the resource last-modified-date, since the resource may be a secondary representation of the evidence variable. Additional specific dates may be added as extensions or be found by consulting Provenances associated with past versions of the resource.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Name of the publisher (organization or individual)
     * The name of the organization or individual that published the evidence variable.
     * Usually an organization but may be an individual. The publisher (or steward) of the evidence variable is the organization or individual primarily responsible for the maintenance and upkeep of the evidence variable. This is not necessarily the same individual or organization that developed and initially authored the content. The publisher is the primary point of contact for questions or issues with the evidence variable. This item SHOULD be populated unless the information is available from context.
     */
    publisher?: string;
    /**
     * Extension for publisher
     **/
    _publisher?: Element;
    /**
     * Contact details for the publisher
     * Contact details to assist a user in finding and communicating with the publisher.
     * May be a web site, an email address, a telephone number, etc.
     */
    contact?: ContactDetail[];
    /**
     * Natural language description of the evidence variable
     * A free text natural language description of the evidence variable from a consumer's perspective.
     * This description can be used to capture details such as why the evidence variable was built, comments about misuse, instructions for clinical use and interpretation, literature references, examples from the paper world, etc. It is not a rendering of the evidence variable as conveyed in the 'text' field of the resource itself. This item SHOULD be populated unless the information is available from context (e.g. the language of the evidence variable is presumed to be the predominant language in the place the evidence variable was created).
     */
    description?: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Used for footnotes or explanatory notes
     * A human-readable string to clarify or explain concepts about the resource.
     */
    note?: Annotation[];
    /**
     * The context that the content is intended to support
     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate evidence variable instances.
     * When multiple useContexts are specified, there is no expectation that all or any of the contexts apply.
     */
    useContext?: UsageContext[];
    /**
     * Intended jurisdiction for evidence variable (if applicable)
     * A legal or geographic region in which the evidence variable is intended to be used.
     * It may be possible for the evidence variable to be used in jurisdictions other than those for which it was originally designed or intended.
     */
    jurisdiction?: CodeableConcept[];
    /**
     * Use and/or publishing restrictions
     * A copyright statement relating to the evidence variable and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the evidence variable.
     */
    copyright?: markdown;
    /**
     * Extension for copyright
     **/
    _copyright?: Element;
    /**
     * When the evidence variable was approved by publisher
     * The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
     * The 'date' element may be more recent than the approval date because of minor changes or editorial corrections.
     */
    approvalDate?: date;
    /**
     * Extension for approvalDate
     **/
    _approvalDate?: Element;
    /**
     * When the evidence variable was last reviewed
     * The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.
     * If specified, this date follows the original approval date.
     */
    lastReviewDate?: date;
    /**
     * Extension for lastReviewDate
     **/
    _lastReviewDate?: Element;
    /**
     * When the evidence variable is expected to be used
     * The period during which the evidence variable content was or is planned to be in active use.
     * The effective period for a evidence variable  determines when the content is applicable for usage and is independent of publication and review dates. For example, a measure intended to be used for the year 2016 might be published in 2015.
     */
    effectivePeriod?: Period;
    /**
     * The category of the EvidenceVariable, such as Education, Treatment, Assessment, etc.
     * Descriptive topics related to the content of the EvidenceVariable. Topics provide a high-level categorization grouping types of EvidenceVariables that can be useful for filtering and searching.
     */
    topic?: CodeableConcept[];
    /**
     * Who authored the content
     * An individiual or organization primarily involved in the creation and maintenance of the content.
     */
    author?: ContactDetail[];
    /**
     * Who edited the content
     * An individual or organization primarily responsible for internal coherence of the content.
     */
    editor?: ContactDetail[];
    /**
     * Who reviewed the content
     * An individual or organization primarily responsible for review of some aspect of the content.
     */
    reviewer?: ContactDetail[];
    /**
     * Who endorsed the content
     * An individual or organization responsible for officially endorsing the content for use in some setting.
     */
    endorser?: ContactDetail[];
    /**
     * Additional documentation, citations, etc.
     * Related artifacts such as additional documentation, justification, or bibliographic references.
     * Each related artifact is either an attachment, or a reference to another resource, but not both.
     */
    relatedArtifact?: RelatedArtifact[];
    /**
     * What defines the members of the evidence element
     * A characteristic that defines the members of the evidence element. Multiple characteristics are applied with "and" semantics.
     * Characteristics can be defined flexibly to accommodate different use cases for membership criteria, ranging from simple codes, all the way to using an expression language to express the criteria.
     */
    characteristic: EvidenceVariableCharacteristic[];
    /**
     * draft | active | retired | unknown
     * The status of this evidence variable. Enables tracking the life-cycle of the content.
     * Allows filtering of evidence variables that are appropriate for use versus not.
     */
    status: EvidenceVariablePublicationStatus;
    /**
     * dichotomous | continuous | descriptive
     * The type of evidence element, a population, an exposure, or an outcome.
     */
    type?: EvidenceVariableType;
}
/**
 * Actor participating in the resource
 * Actor participating in the resource.
 */
export interface ExampleScenarioActor extends BackboneElement {
    /**
     * ID or acronym of the actor
     * ID or acronym of actor.
     * should this be called ID or acronym?
     */
    actorId: string;
    /**
     * Extension for actorId
     **/
    _actorId?: Element;
    /**
     * The name of the actor as shown in the page
     * The name of the actor as shown in the page.
     * Cardinality: is name and description 1..1?
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * The description of the actor
     * The description of the actor.
     * Cardinality: is name and description 1..1?
     */
    description?: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * person | entity
     * The type of actor - person or system.
     */
    type: ExampleScenarioActorType;
}
/**
 * A specific version of the resource
 * A specific version of the resource.
 */
export interface ExampleScenarioInstanceVersion extends BackboneElement {
    /**
     * The identifier of a specific version of a resource
     * The identifier of a specific version of a resource.
     */
    versionId: string;
    /**
     * Extension for versionId
     **/
    _versionId?: Element;
    /**
     * The description of the resource version
     * The description of the resource version.
     */
    description: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
}
/**
 * Resources contained in the instance
 * Resources contained in the instance (e.g. the observations contained in a bundle).
 */
export interface ExampleScenarioInstanceContainedInstance extends BackboneElement {
    /**
     * Each resource contained in the instance
     * Each resource contained in the instance.
     */
    resourceId: string;
    /**
     * Extension for resourceId
     **/
    _resourceId?: Element;
    /**
     * A specific version of a resource contained in the instance
     * A specific version of a resource contained in the instance.
     */
    versionId?: string;
    /**
     * Extension for versionId
     **/
    _versionId?: Element;
}
/**
 * Each resource and each version that is present in the workflow
 * Each resource and each version that is present in the workflow.
 */
export interface ExampleScenarioInstance extends BackboneElement {
    /**
     * The id of the resource for referencing
     * The id of the resource for referencing.
     */
    resourceId: string;
    /**
     * Extension for resourceId
     **/
    _resourceId?: Element;
    /**
     * The type of the resource
     * The type of the resource.
     */
    resourceType: code;
    /**
     * Extension for resourceType
     **/
    _resourceType?: Element;
    /**
     * A short name for the resource instance
     * A short name for the resource instance.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Human-friendly description of the resource instance
     * Human-friendly description of the resource instance.
     */
    description?: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * A specific version of the resource
     * A specific version of the resource.
     */
    version?: ExampleScenarioInstanceVersion[];
    /**
     * Resources contained in the instance
     * Resources contained in the instance (e.g. the observations contained in a bundle).
     */
    containedInstance?: ExampleScenarioInstanceContainedInstance[];
}
/**
 * Each interaction or action
 * Each interaction or action.
 */
export interface ExampleScenarioProcessStepOperation extends BackboneElement {
    /**
     * The sequential number of the interaction
     * The sequential number of the interaction, e.g. 1.2.5.
     */
    number: string;
    /**
     * Extension for number
     **/
    _number?: Element;
    /**
     * The type of operation - CRUD
     * The type of operation - CRUD.
     */
    type?: string;
    /**
     * Extension for type
     **/
    _type?: Element;
    /**
     * The human-friendly name of the interaction
     * The human-friendly name of the interaction.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Who starts the transaction
     * Who starts the transaction.
     */
    initiator?: string;
    /**
     * Extension for initiator
     **/
    _initiator?: Element;
    /**
     * Who receives the transaction
     * Who receives the transaction.
     */
    receiver?: string;
    /**
     * Extension for receiver
     **/
    _receiver?: Element;
    /**
     * A comment to be inserted in the diagram
     * A comment to be inserted in the diagram.
     */
    description?: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Whether the initiator is deactivated right after the transaction
     * Whether the initiator is deactivated right after the transaction.
     */
    initiatorActive?: boolean;
    /**
     * Extension for initiatorActive
     **/
    _initiatorActive?: Element;
    /**
     * Whether the receiver is deactivated right after the transaction
     * Whether the receiver is deactivated right after the transaction.
     */
    receiverActive?: boolean;
    /**
     * Extension for receiverActive
     **/
    _receiverActive?: Element;
    /**
     * Each resource instance used by the initiator
     * Each resource instance used by the initiator.
     */
    request?: ExampleScenarioInstanceContainedInstance;
    /**
     * Each resource instance used by the responder
     * Each resource instance used by the responder.
     */
    response?: ExampleScenarioInstanceContainedInstance;
}
/**
 * Alternate non-typical step action
 * Indicates an alternative step that can be taken instead of the operations on the base step in exceptional/atypical circumstances.
 */
export interface ExampleScenarioProcessStepAlternative extends BackboneElement {
    /**
     * Label for alternative
     * The label to display for the alternative that gives a sense of the circumstance in which the alternative should be invoked.
     */
    title: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * A human-readable description of each option
     * A human-readable description of the alternative explaining when the alternative should occur rather than the base step.
     */
    description?: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * What happens in each alternative option
     * What happens in each alternative option.
     */
    step?: ExampleScenarioProcessStep[];
}
/**
 * Each step of the process
 * Each step of the process.
 */
export interface ExampleScenarioProcessStep extends BackboneElement {
    /**
     * Nested process
     * Nested process.
     */
    process?: ExampleScenarioProcess[];
    /**
     * If there is a pause in the flow
     * If there is a pause in the flow.
     */
    pause?: boolean;
    /**
     * Extension for pause
     **/
    _pause?: Element;
    /**
     * Each interaction or action
     * Each interaction or action.
     */
    operation?: ExampleScenarioProcessStepOperation;
    /**
     * Alternate non-typical step action
     * Indicates an alternative step that can be taken instead of the operations on the base step in exceptional/atypical circumstances.
     */
    alternative?: ExampleScenarioProcessStepAlternative[];
}
/**
 * Each major process - a group of operations
 * Each major process - a group of operations.
 */
export interface ExampleScenarioProcess extends BackboneElement {
    /**
     * The diagram title of the group of operations
     * The diagram title of the group of operations.
     */
    title: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * A longer description of the group of operations
     * A longer description of the group of operations.
     */
    description?: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Description of initial status before the process starts
     * Description of initial status before the process starts.
     */
    preConditions?: markdown;
    /**
     * Extension for preConditions
     **/
    _preConditions?: Element;
    /**
     * Description of final status after the process ends
     * Description of final status after the process ends.
     */
    postConditions?: markdown;
    /**
     * Extension for postConditions
     **/
    _postConditions?: Element;
    /**
     * Each step of the process
     * Each step of the process.
     */
    step?: ExampleScenarioProcessStep[];
}
/**
 * Example of workflow instance
 * Example of workflow instance.
 */
export interface ExampleScenario extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'ExampleScenario';
    /**
     * Canonical identifier for this example scenario, represented as a URI (globally unique)
     * An absolute URI that is used to identify this example scenario when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this example scenario is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the example scenario is stored on different servers.
     * Can be a urn:uuid: or a urn:oid: but real http: addresses are preferred.  Multiple instances may share the same URL if they have a distinct version.

The determination of when to create a new version of a resource (same url, new version) vs. defining a new artifact is up to the author.  Considerations for making this decision are found in [Technical and Business Versions](resource.html#versions).

In some cases, the resource can no longer be found at the stated url, but the url itself cannot change. Implementations can use the [meta.source](resource.html#meta) element to indicate where the current master source of the resource can be found.
     */
    url?: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Additional identifier for the example scenario
     * A formal identifier that is used to identify this example scenario when it is represented in other formats, or referenced in a specification, model, design or an instance.
     * Typically, this is used for identifiers that can go in an HL7 V3 II (instance identifier) data type, and can then identify this example scenario outside of FHIR, where it is not possible to use the logical URI.
     */
    identifier?: Identifier[];
    /**
     * Business version of the example scenario
     * The identifier that is used to identify this version of the example scenario when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the example scenario 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.
     * There may be different example scenario instances that have the same identifier but different versions.  The version can be appended to the url in a reference to allow a reference to a particular business version of the example scenario with the format [url]|[version].
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
    /**
     * Name for this example scenario (computer friendly)
     * A natural language name identifying the example scenario. This name should be usable as an identifier for the module by machine processing applications such as code generation.
     * The name is not expected to be globally unique. The name should be a simple alphanumeric type name to ensure that it is machine-processing friendly.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * For testing purposes, not real usage
     * A Boolean value to indicate that this example scenario is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.
     * Allows filtering of example scenarios that are appropriate for use versus not.
     */
    experimental?: boolean;
    /**
     * Extension for experimental
     **/
    _experimental?: Element;
    /**
     * Date last changed
     * The date  (and optionally time) when the example scenario was published. The date must change 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 example scenario changes. (e.g. the 'content logical definition').
     * Note that this is not the same as the resource last-modified-date, since the resource may be a secondary representation of the example scenario. Additional specific dates may be added as extensions or be found by consulting Provenances associated with past versions of the resource.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Name of the publisher (organization or individual)
     * The name of the organization or individual that published the example scenario.
     * Usually an organization but may be an individual. The publisher (or steward) of the example scenario is the organization or individual primarily responsible for the maintenance and upkeep of the example scenario. This is not necessarily the same individual or organization that developed and initially authored the content. The publisher is the primary point of contact for questions or issues with the example scenario. This item SHOULD be populated unless the information is available from context.
     */
    publisher?: string;
    /**
     * Extension for publisher
     **/
    _publisher?: Element;
    /**
     * Contact details for the publisher
     * Contact details to assist a user in finding and communicating with the publisher.
     * May be a web site, an email address, a telephone number, etc.
     */
    contact?: ContactDetail[];
    /**
     * The context that the content is intended to support
     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate example scenario instances.
     * When multiple useContexts are specified, there is no expectation that all or any of the contexts apply.
     */
    useContext?: UsageContext[];
    /**
     * Intended jurisdiction for example scenario (if applicable)
     * A legal or geographic region in which the example scenario is intended to be used.
     * It may be possible for the example scenario to be used in jurisdictions other than those for which it was originally designed or intended.
     */
    jurisdiction?: CodeableConcept[];
    /**
     * Use and/or publishing restrictions
     * A copyright statement relating to the example scenario and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the example scenario.
     * nullFrequently, the copyright differs between the value set and the codes that are included. The copyright statement should clearly differentiate between these when required.
     */
    copyright?: markdown;
    /**
     * Extension for copyright
     **/
    _copyright?: Element;
    /**
     * The purpose of the example, e.g. to illustrate a scenario
     * What the example scenario resource is created for. This should not be used to show the business purpose of the scenario itself, but the purpose of documenting a scenario.
     * This element does not describe the usage of the example scenario. Instead, it provides traceability of ''why'' the resource is either needed or ''why'' it is defined as it is.  This may be used to point to source materials or specifications that drove the structure of this example scenario.
     */
    purpose?: markdown;
    /**
     * Extension for purpose
     **/
    _purpose?: Element;
    /**
     * Actor participating in the resource
     * Actor participating in the resource.
     */
    actor?: ExampleScenarioActor[];
    /**
     * Each resource and each version that is present in the workflow
     * Each resource and each version that is present in the workflow.
     */
    instance?: ExampleScenarioInstance[];
    /**
     * Each major process - a group of operations
     * Each major process - a group of operations.
     */
    process?: ExampleScenarioProcess[];
    /**
     * Another nested workflow
     * Another nested workflow.
     */
    workflow?: canonical[];
    /**
     * Extension for workflow
     **/
    _workflow?: Element[];
    /**
     * draft | active | retired | unknown
     * The status of this example scenario. Enables tracking the life-cycle of the content.
     * Allows filtering of example scenarios that are appropriate for use versus not.
     */
    status: ExampleScenarioPublicationStatus;
}
/**
 * Prior or corollary claims
 * Other claims which are related to this claim such as prior submissions or claims for related services or for the same event.
 * For example,  for the original treatment and follow-up exams.
 */
export interface ExplanationOfBenefitRelated extends BackboneElement {
    /**
     * Reference to the related claim
     * Reference to a related claim.
     */
    claim?: Reference;
    /**
     * How the reference claim is related
     * A code to convey how the claims are related.
     * For example, prior claim or umbrella.
     */
    relationship?: CodeableConcept;
    /**
     * File or case reference
     * An alternate organizational reference to the case or file to which this particular claim pertains.
     * For example, Property/Casualty insurer claim number or Workers Compensation case number.
     */
    reference?: Identifier;
}
/**
 * Recipient of benefits payable
 * The party to be reimbursed for cost of the products and services according to the terms of the policy.
 * Often providers agree to receive the benefits payable to reduce the near-term costs to the patient. The insurer may decline to pay the provider and may choose to pay the subscriber instead.
 */
export interface ExplanationOfBenefitPayee extends BackboneElement {
    /**
     * Category of recipient
     * Type of Party to be reimbursed: Subscriber, provider, other.
     */
    type?: CodeableConcept;
    /**
     * Recipient reference
     * Reference to the individual or organization to whom any payment will be made.
     * Not required if the payee is 'subscriber' or 'provider'.
     */
    party?: Reference;
}
/**
 * Care Team members
 * The members of the team who provided the products and services.
 */
export interface ExplanationOfBenefitCareTeam extends BackboneElement {
    /**
     * Order of care team
     * A number to uniquely identify care team entries.
     */
    sequence: positiveInt;
    /**
     * Extension for sequence
     **/
    _sequence?: Element;
    /**
     * Practitioner or organization
     * Member of the team who provided the product or service.
     */
    provider: Reference;
    /**
     * Indicator of the lead practitioner
     * The party who is billing and/or responsible for the claimed products or services.
     * Responsible might not be required when there is only a single provider listed.
     */
    responsible?: boolean;
    /**
     * Extension for responsible
     **/
    _responsible?: Element;
    /**
     * Function within the team
     * The lead, assisting or supervising practitioner and their discipline if a multidisciplinary team.
     * Role might not be required when there is only a single provider listed.
     */
    role?: CodeableConcept;
    /**
     * Practitioner credential or specialization
     * The qualification of the practitioner which is applicable for this service.
     */
    qualification?: CodeableConcept;
}
/**
 * Supporting information
 * Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.
 * Often there are multiple jurisdiction specific valuesets which are required.
 */
export interface ExplanationOfBenefitSupportingInfo extends BackboneElement {
    /**
     * Information instance identifier
     * A number to uniquely identify supporting information entries.
     */
    sequence: positiveInt;
    /**
     * Extension for sequence
     **/
    _sequence?: Element;
    /**
     * Classification of the supplied information
     * The general class of the information supplied: information; exception; accident, employment; onset, etc.
     * This may contain a category for the local bill type codes.
     */
    category: CodeableConcept;
    /**
     * Type of information
     * System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient  for which care is sought.
     * This may contain the local bill type codes such as the US UB-04 bill type code.
     */
    code?: CodeableConcept;
    /**
     * When it occurred
     * The date when or period to which this information refers.
     */
    timingDate?: date;
    /**
     * Extension for timingDate
     **/
    _timingDate?: Element;
    /**
     * When it occurred
     * The date when or period to which this information refers.
     */
    timingPeriod?: Period;
    /**
     * Data to be provided
     * Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.
     * Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.
     */
    valueBoolean?: boolean;
    /**
     * Extension for valueBoolean
     **/
    _valueBoolean?: Element;
    /**
     * Data to be provided
     * Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.
     * Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.
     */
    valueString?: string;
    /**
     * Extension for valueString
     **/
    _valueString?: Element;
    /**
     * Data to be provided
     * Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.
     * Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.
     */
    valueQuantity?: Quantity;
    /**
     * Data to be provided
     * Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.
     * Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.
     */
    valueAttachment?: Attachment;
    /**
     * Data to be provided
     * Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.
     * Could be used to provide references to other resources, document. For example, could contain a PDF in an Attachment of the Police Report for an Accident.
     */
    valueReference?: Reference;
    /**
     * Explanation for the information
     * Provides the reason in the situation where a reason code is required in addition to the content.
     * For example: the reason for the additional stay, or why a tooth is  missing.
     */
    reason?: Coding;
}
/**
 * Pertinent diagnosis information
 * Information about diagnoses relevant to the claim items.
 */
export interface ExplanationOfBenefitDiagnosis extends BackboneElement {
    /**
     * Diagnosis instance identifier
     * A number to uniquely identify diagnosis entries.
     * Diagnosis are presented in list order to their expected importance: primary, secondary, etc.
     */
    sequence: positiveInt;
    /**
     * Extension for sequence
     **/
    _sequence?: Element;
    /**
     * Nature of illness or problem
     * The nature of illness or problem in a coded form or as a reference to an external defined Condition.
     */
    diagnosisCodeableConcept?: CodeableConcept;
    /**
     * Nature of illness or problem
     * The nature of illness or problem in a coded form or as a reference to an external defined Condition.
     */
    diagnosisReference?: Reference;
    /**
     * Timing or nature of the diagnosis
     * When the condition was observed or the relative ranking.
     * For example: admitting, primary, secondary, discharge.
     */
    type?: CodeableConcept[];
    /**
     * Present on admission
     * Indication of whether the diagnosis was present on admission to a facility.
     */
    onAdmission?: CodeableConcept;
    /**
     * Package billing code
     * A package billing code or bundle code used to group products and services to a particular health condition (such as heart attack) which is based on a predetermined grouping code system.
     * For example, DRG (Diagnosis Related Group) or a bundled billing code. A patient may have a diagnosis of a Myocardio-infarction and a DRG for HeartAttack would assigned. The Claim item (and possible subsequent claims) would refer to the DRG for those line items that were for services related to the heart attack event.
     */
    packageCode?: CodeableConcept;
}
/**
 * Clinical procedures performed
 * Procedures performed on the patient relevant to the billing items with the claim.
 */
export interface ExplanationOfBenefitProcedure extends BackboneElement {
    /**
     * Procedure instance identifier
     * A number to uniquely identify procedure entries.
     */
    sequence: positiveInt;
    /**
     * Extension for sequence
     **/
    _sequence?: Element;
    /**
     * Category of Procedure
     * When the condition was observed or the relative ranking.
     */
    type?: CodeableConcept[];
    /**
     * When the procedure was performed
     * Date and optionally time the procedure was performed.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Specific clinical procedure
     * The code or reference to a Procedure resource which identifies the clinical intervention performed.
     */
    procedureCodeableConcept?: CodeableConcept;
    /**
     * Specific clinical procedure
     * The code or reference to a Procedure resource which identifies the clinical intervention performed.
     */
    procedureReference?: Reference;
    /**
     * Unique device identifier
     * Unique Device Identifiers associated with this line item.
     */
    udi?: Reference[];
}
/**
 * Patient insurance information
 * Financial instruments for reimbursement for the health care products and services specified on the claim.
 * All insurance coverages for the patient which may be applicable for reimbursement, of the products and services listed in the claim, are typically provided in the claim to allow insurers to confirm the ordering of the insurance coverages relative to local 'coordination of benefit' rules. One coverage (and only one) with 'focal=true' is to be used in the adjudication of this claim. Coverages appearing before the focal Coverage in the list, and where 'Coverage.subrogation=false', should provide a reference to the ClaimResponse containing the adjudication results of the prior claim.
 */
export interface ExplanationOfBenefitInsurance extends BackboneElement {
    /**
     * Coverage to be used for adjudication
     * A flag to indicate that this Coverage is to be used for adjudication of this claim when set to true.
     * A patient may (will) have multiple insurance policies which provide reimbursement for healthcare services and products. For example, a person may also be covered by their spouse's policy and both appear in the list (and may be from the same insurer). This flag will be set to true for only one of the listed policies and that policy will be used for adjudicating this claim. Other claims would be created to request adjudication against the other listed policies.
     */
    focal: boolean;
    /**
     * Extension for focal
     **/
    _focal?: Element;
    /**
     * Insurance information
     * Reference to the insurance card level information contained in the Coverage resource. The coverage issuing insurer will use these details to locate the patient's actual coverage within the insurer's information system.
     */
    coverage: Reference;
    /**
     * Prior authorization reference number
     * Reference numbers previously provided by the insurer to the provider to be quoted on subsequent claims containing services or products related to the prior authorization.
     * This value is an alphanumeric string that may be provided over the phone, via text, via paper, or within a ClaimResponse resource and is not a FHIR Identifier.
     */
    preAuthRef?: string[];
    /**
     * Extension for preAuthRef
     **/
    _preAuthRef?: Element[];
}
/**
 * Details of the event
 * Details of a accident which resulted in injuries which required the products and services listed in the claim.
 */
export interface ExplanationOfBenefitAccident extends BackboneElement {
    /**
     * When the incident occurred
     * Date of an accident event  related to the products and services contained in the claim.
     * The date of the accident has to precede the dates of the products and services but within a reasonable timeframe.
     */
    date?: date;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * The nature of the accident
     * The type or context of the accident event for the purposes of selection of potential insurance coverages and determination of coordination between insurers.
     */
    type?: CodeableConcept;
    /**
     * Where the event occurred
     * The physical location of the accident event.
     */
    locationAddress?: Address;
    /**
     * Where the event occurred
     * The physical location of the accident event.
     */
    locationReference?: Reference;
}
/**
 * Adjudication details
 * If this item is a group then the values here are a summary of the adjudication of the detail items. If this item is a simple product or service then this is the result of the adjudication of this item.
 */
export interface ExplanationOfBenefitItemAdjudication extends BackboneElement {
    /**
     * Type of adjudication information
     * A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in-aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.
     * For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.
     */
    category: CodeableConcept;
    /**
     * Explanation of adjudication outcome
     * A code supporting the understanding of the adjudication result and explaining variance from expected amount.
     * For example, may indicate that the funds for this benefit type have been exhausted.
     */
    reason?: CodeableConcept;
    /**
     * Monetary amount
     * Monetary amount associated with the category.
     * For example, amount submitted, eligible amount, co-payment, and benefit payable.
     */
    amount?: Money;
    /**
     * Non-monitary value
     * A non-monetary value associated with the category. Mutually exclusive to the amount element above.
     * For example: eligible percentage or co-payment percentage.
     */
    value?: decimal;
    /**
     * Extension for value
     **/
    _value?: Element;
}
/**
 * Additional items
 * Third-tier of goods and services.
 */
export interface ExplanationOfBenefitItemDetailSubDetail extends BackboneElement {
    /**
     * Product or service provided
     * A claim detail line. Either a simple (a product or service) or a 'group' of sub-details which are simple items.
     */
    sequence: positiveInt;
    /**
     * Extension for sequence
     **/
    _sequence?: Element;
    /**
     * Revenue or cost center code
     * The type of revenue or cost center providing the product and/or service.
     */
    revenue?: CodeableConcept;
    /**
     * Benefit classification
     * Code to identify the general type of benefits under which products and services are provided.
     * Examples include Medical Care, Periodontics, Renal Dialysis, Vision Coverage.
     */
    category?: CodeableConcept;
    /**
     * Billing, service, product, or drug code
     * When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.
     * If this is an actual service or product line, i.e. not a Group, then use code to indicate the Professional Service or Product supplied (e.g. 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 e.g. 'glasses' or 'compound'.
     */
    productOrService: CodeableConcept;
    /**
     * Service/Product billing modifiers
     * Item typification or modifiers codes to convey additional context for the product or service.
     * For example, in Oral whether the treatment is cosmetic or associated with TMJ, or for Medical whether the treatment was outside the clinic or outside of office hours.
     */
    modifier?: CodeableConcept[];
    /**
     * Program the product or service is provided under
     * Identifies the program under which this may be recovered.
     * For example: Neonatal program, child dental program or drug users recovery program.
     */
    programCode?: CodeableConcept[];
    /**
     * Count of products or services
     * The number of repetitions of a service or product.
     */
    quantity?: Quantity;
    /**
     * Fee, charge or cost per item
     * If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.
     */
    unitPrice?: Money;
    /**
     * Price scaling factor
     * 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.
     * To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).
     */
    factor?: decimal;
    /**
     * Extension for factor
     **/
    _factor?: Element;
    /**
     * Total item cost
     * The quantity times the unit price for an additional service or product or charge.
     * For example, the formula: quantity * unitPrice * factor  = net. Quantity and factor are assumed to be 1 if not supplied.
     */
    net?: Money;
    /**
     * Unique device identifier
     * Unique Device Identifiers associated with this line item.
     */
    udi?: Reference[];
    /**
     * Applicable note numbers
     * The numbers associated with notes below which apply to the adjudication of this item.
     */
    noteNumber?: positiveInt[];
    /**
     * Extension for noteNumber
     **/
    _noteNumber?: Element[];
    /**
     * Subdetail level adjudication details
     * The adjudication results.
     */
    adjudication?: ExplanationOfBenefitItemAdjudication[];
}
/**
 * Additional items
 * Second-tier of goods and services.
 */
export interface ExplanationOfBenefitItemDetail extends BackboneElement {
    /**
     * Product or service provided
     * A claim detail line. Either a simple (a product or service) or a 'group' of sub-details which are simple items.
     */
    sequence: positiveInt;
    /**
     * Extension for sequence
     **/
    _sequence?: Element;
    /**
     * Revenue or cost center code
     * The type of revenue or cost center providing the product and/or service.
     */
    revenue?: CodeableConcept;
    /**
     * Benefit classification
     * Code to identify the general type of benefits under which products and services are provided.
     * Examples include: Medical Care, Periodontics, Renal Dialysis, Vision Coverage.
     */
    category?: CodeableConcept;
    /**
     * Billing, service, product, or drug code
     * When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.
     * If this is an actual service or product line, i.e. not a Group, then use code to indicate the Professional Service or Product supplied (e.g. 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 e.g. 'glasses' or 'compound'.
     */
    productOrService: CodeableConcept;
    /**
     * Service/Product billing modifiers
     * Item typification or modifiers codes to convey additional context for the product or service.
     * For example, in 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.
     */
    modifier?: CodeableConcept[];
    /**
     * Program the product or service is provided under
     * Identifies the program under which this may be recovered.
     * For example: Neonatal program, child dental program or drug users recovery program.
     */
    programCode?: CodeableConcept[];
    /**
     * Count of products or services
     * The number of repetitions of a service or product.
     */
    quantity?: Quantity;
    /**
     * Fee, charge or cost per item
     * If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.
     */
    unitPrice?: Money;
    /**
     * Price scaling factor
     * 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.
     * To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).
     */
    factor?: decimal;
    /**
     * Extension for factor
     **/
    _factor?: Element;
    /**
     * Total item cost
     * The quantity times the unit price for an additional service or product or charge.
     * For example, the formula: quantity * unitPrice * factor  = net. Quantity and factor are assumed to be 1 if not supplied.
     */
    net?: Money;
    /**
     * Unique device identifier
     * Unique Device Identifiers associated with this line item.
     */
    udi?: Reference[];
    /**
     * Applicable note numbers
     * The numbers associated with notes below which apply to the adjudication of this item.
     */
    noteNumber?: positiveInt[];
    /**
     * Extension for noteNumber
     **/
    _noteNumber?: Element[];
    /**
     * Detail level adjudication details
     * The adjudication results.
     */
    adjudication?: ExplanationOfBenefitItemAdjudication[];
    /**
     * Additional items
     * Third-tier of goods and services.
     */
    subDetail?: ExplanationOfBenefitItemDetailSubDetail[];
}
/**
 * Product or service provided
 * A claim line. Either a simple (a product or service) or a 'group' of details which can also be a simple items or groups of sub-details.
 */
export interface ExplanationOfBenefitItem extends BackboneElement {
    /**
     * Item instance identifier
     * A number to uniquely identify item entries.
     */
    sequence: positiveInt;
    /**
     * Extension for sequence
     **/
    _sequence?: Element;
    /**
     * Applicable care team members
     * Care team members related to this service or product.
     */
    careTeamSequence?: positiveInt[];
    /**
     * Extension for careTeamSequence
     **/
    _careTeamSequence?: Element[];
    /**
     * Applicable diagnoses
     * Diagnoses applicable for this service or product.
     */
    diagnosisSequence?: positiveInt[];
    /**
     * Extension for diagnosisSequence
     **/
    _diagnosisSequence?: Element[];
    /**
     * Applicable procedures
     * Procedures applicable for this service or product.
     */
    procedureSequence?: positiveInt[];
    /**
     * Extension for procedureSequence
     **/
    _procedureSequence?: Element[];
    /**
     * Applicable exception and supporting information
     * Exceptions, special conditions and supporting information applicable for this service or product.
     */
    informationSequence?: positiveInt[];
    /**
     * Extension for informationSequence
     **/
    _informationSequence?: Element[];
    /**
     * Revenue or cost center code
     * The type of revenue or cost center providing the product and/or service.
     */
    revenue?: CodeableConcept;
    /**
     * Benefit classification
     * Code to identify the general type of benefits under which products and services are provided.
     * Examples include Medical Care, Periodontics, Renal Dialysis, Vision Coverage.
     */
    category?: CodeableConcept;
    /**
     * Billing, service, product, or drug code
     * When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.
     * If this is an actual service or product line, i.e. not a Group, then use code to indicate the Professional Service or Product supplied (e.g. 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 e.g. 'glasses' or 'compound'.
     */
    productOrService: CodeableConcept;
    /**
     * Product or service billing modifiers
     * Item typification or modifiers codes to convey additional context for the product or service.
     * For example, in 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.
     */
    modifier?: CodeableConcept[];
    /**
     * Program the product or service is provided under
     * Identifies the program under which this may be recovered.
     * For example: Neonatal program, child dental program or drug users recovery program.
     */
    programCode?: CodeableConcept[];
    /**
     * Date or dates of service or product delivery
     * The date or dates when the service or product was supplied, performed or completed.
     */
    servicedDate?: date;
    /**
     * Extension for servicedDate
     **/
    _servicedDate?: Element;
    /**
     * Date or dates of service or product delivery
     * The date or dates when the service or product was supplied, performed or completed.
     */
    servicedPeriod?: Period;
    /**
     * Place of service or where product was supplied
     * Where the product or service was provided.
     */
    locationCodeableConcept?: CodeableConcept;
    /**
     * Place of service or where product was supplied
     * Where the product or service was provided.
     */
    locationAddress?: Address;
    /**
     * Place of service or where product was supplied
     * Where the product or service was provided.
     */
    locationReference?: Reference;
    /**
     * Count of products or services
     * The number of repetitions of a service or product.
     */
    quantity?: Quantity;
    /**
     * Fee, charge or cost per item
     * If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.
     */
    unitPrice?: Money;
    /**
     * Price scaling factor
     * 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.
     * To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).
     */
    factor?: decimal;
    /**
     * Extension for factor
     **/
    _factor?: Element;
    /**
     * Total item cost
     * The quantity times the unit price for an additional service or product or charge.
     * For example, the formula: quantity * unitPrice * factor  = net. Quantity and factor are assumed to be 1 if not supplied.
     */
    net?: Money;
    /**
     * Unique device identifier
     * Unique Device Identifiers associated with this line item.
     */
    udi?: Reference[];
    /**
     * Anatomical location
     * Physical service site on the patient (limb, tooth, etc.).
     * For example: Providing a tooth code, allows an insurer to identify a provider performing a filling on a tooth that was previously removed.
     */
    bodySite?: CodeableConcept;
    /**
     * Anatomical sub-location
     * A region or surface of the bodySite, e.g. limb region or tooth surface(s).
     */
    subSite?: CodeableConcept[];
    /**
     * Encounters related to this billed item
     * A billed item may include goods or services provided in multiple encounters.
     */
    encounter?: Reference[];
    /**
     * Applicable note numbers
     * The numbers associated with notes below which apply to the adjudication of this item.
     */
    noteNumber?: positiveInt[];
    /**
     * Extension for noteNumber
     **/
    _noteNumber?: Element[];
    /**
     * Adjudication details
     * If this item is a group then the values here are a summary of the adjudication of the detail items. If this item is a simple product or service then this is the result of the adjudication of this item.
     */
    adjudication?: ExplanationOfBenefitItemAdjudication[];
    /**
     * Additional items
     * Second-tier of goods and services.
     */
    detail?: ExplanationOfBenefitItemDetail[];
}
/**
 * Insurer added line items
 * The third-tier service adjudications for payor added services.
 */
export interface ExplanationOfBenefitAddItemDetailSubDetail extends BackboneElement {
    /**
     * Billing, service, product, or drug code
     * When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.
     * If this is an actual service or product line, i.e. not a Group, then use code to indicate the Professional Service or Product supplied (e.g. 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 e.g. 'glasses' or 'compound'.
     */
    productOrService: CodeableConcept;
    /**
     * Service/Product billing modifiers
     * Item typification or modifiers codes to convey additional context for the product or service.
     * For example, in 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.
     */
    modifier?: CodeableConcept[];
    /**
     * Count of products or services
     * The number of repetitions of a service or product.
     */
    quantity?: Quantity;
    /**
     * Fee, charge or cost per item
     * If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.
     */
    unitPrice?: Money;
    /**
     * Price scaling factor
     * 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.
     * To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).
     */
    factor?: decimal;
    /**
     * Extension for factor
     **/
    _factor?: Element;
    /**
     * Total item cost
     * The quantity times the unit price for an additional service or product or charge.
     * For example, the formula: quantity * unitPrice * factor  = net. Quantity and factor are assumed to be 1 if not supplied.
     */
    net?: Money;
    /**
     * Applicable note numbers
     * The numbers associated with notes below which apply to the adjudication of this item.
     */
    noteNumber?: positiveInt[];
    /**
     * Extension for noteNumber
     **/
    _noteNumber?: Element[];
    /**
     * Added items adjudication
     * The adjudication results.
     */
    adjudication?: ExplanationOfBenefitItemAdjudication[];
}
/**
 * Insurer added line items
 * The second-tier service adjudications for payor added services.
 */
export interface ExplanationOfBenefitAddItemDetail extends BackboneElement {
    /**
     * Billing, service, product, or drug code
     * When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.
     * If this is an actual service or product line, i.e. not a Group, then use code to indicate the Professional Service or Product supplied (e.g. 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 e.g. 'glasses' or 'compound'.
     */
    productOrService: CodeableConcept;
    /**
     * Service/Product billing modifiers
     * Item typification or modifiers codes to convey additional context for the product or service.
     * For example, in 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.
     */
    modifier?: CodeableConcept[];
    /**
     * Count of products or services
     * The number of repetitions of a service or product.
     */
    quantity?: Quantity;
    /**
     * Fee, charge or cost per item
     * If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.
     */
    unitPrice?: Money;
    /**
     * Price scaling factor
     * 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.
     * To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).
     */
    factor?: decimal;
    /**
     * Extension for factor
     **/
    _factor?: Element;
    /**
     * Total item cost
     * The quantity times the unit price for an additional service or product or charge.
     * For example, the formula: quantity * unitPrice * factor  = net. Quantity and factor are assumed to be 1 if not supplied.
     */
    net?: Money;
    /**
     * Applicable note numbers
     * The numbers associated with notes below which apply to the adjudication of this item.
     */
    noteNumber?: positiveInt[];
    /**
     * Extension for noteNumber
     **/
    _noteNumber?: Element[];
    /**
     * Added items adjudication
     * The adjudication results.
     */
    adjudication?: ExplanationOfBenefitItemAdjudication[];
    /**
     * Insurer added line items
     * The third-tier service adjudications for payor added services.
     */
    subDetail?: ExplanationOfBenefitAddItemDetailSubDetail[];
}
/**
 * Insurer added line items
 * The first-tier service adjudications for payor added product or service lines.
 */
export interface ExplanationOfBenefitAddItem extends BackboneElement {
    /**
     * Item sequence number
     * Claim items which this service line is intended to replace.
     */
    itemSequence?: positiveInt[];
    /**
     * Extension for itemSequence
     **/
    _itemSequence?: Element[];
    /**
     * Detail sequence number
     * The sequence number of the details within the claim item which this line is intended to replace.
     */
    detailSequence?: positiveInt[];
    /**
     * Extension for detailSequence
     **/
    _detailSequence?: Element[];
    /**
     * Subdetail sequence number
     * The sequence number of the sub-details woithin the details within the claim item which this line is intended to replace.
     */
    subDetailSequence?: positiveInt[];
    /**
     * Extension for subDetailSequence
     **/
    _subDetailSequence?: Element[];
    /**
     * Authorized providers
     * The providers who are authorized for the services rendered to the patient.
     */
    provider?: Reference[];
    /**
     * Billing, service, product, or drug code
     * When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.
     * If this is an actual service or product line, i.e. not a Group, then use code to indicate the Professional Service or Product supplied (e.g. 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 e.g. 'glasses' or 'compound'.
     */
    productOrService: CodeableConcept;
    /**
     * Service/Product billing modifiers
     * Item typification or modifiers codes to convey additional context for the product or service.
     * For example, in 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.
     */
    modifier?: CodeableConcept[];
    /**
     * Program the product or service is provided under
     * Identifies the program under which this may be recovered.
     * For example: Neonatal program, child dental program or drug users recovery program.
     */
    programCode?: CodeableConcept[];
    /**
     * Date or dates of service or product delivery
     * The date or dates when the service or product was supplied, performed or completed.
     */
    servicedDate?: date;
    /**
     * Extension for servicedDate
     **/
    _servicedDate?: Element;
    /**
     * Date or dates of service or product delivery
     * The date or dates when the service or product was supplied, performed or completed.
     */
    servicedPeriod?: Period;
    /**
     * Place of service or where product was supplied
     * Where the product or service was provided.
     */
    locationCodeableConcept?: CodeableConcept;
    /**
     * Place of service or where product was supplied
     * Where the product or service was provided.
     */
    locationAddress?: Address;
    /**
     * Place of service or where product was supplied
     * Where the product or service was provided.
     */
    locationReference?: Reference;
    /**
     * Count of products or services
     * The number of repetitions of a service or product.
     */
    quantity?: Quantity;
    /**
     * Fee, charge or cost per item
     * If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.
     */
    unitPrice?: Money;
    /**
     * Price scaling factor
     * 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.
     * To show a 10% senior's discount, the value entered is: 0.90 (1.00 - 0.10).
     */
    factor?: decimal;
    /**
     * Extension for factor
     **/
    _factor?: Element;
    /**
     * Total item cost
     * The quantity times the unit price for an additional service or product or charge.
     * For example, the formula: quantity * unitPrice * factor  = net. Quantity and factor are assumed to be 1 if not supplied.
     */
    net?: Money;
    /**
     * Anatomical location
     * Physical service site on the patient (limb, tooth, etc.).
     * For example, providing a tooth code allows an insurer to identify a provider performing a filling on a tooth that was previously removed.
     */
    bodySite?: CodeableConcept;
    /**
     * Anatomical sub-location
     * A region or surface of the bodySite, e.g. limb region or tooth surface(s).
     */
    subSite?: CodeableConcept[];
    /**
     * Applicable note numbers
     * The numbers associated with notes below which apply to the adjudication of this item.
     */
    noteNumber?: positiveInt[];
    /**
     * Extension for noteNumber
     **/
    _noteNumber?: Element[];
    /**
     * Added items adjudication
     * The adjudication results.
     */
    adjudication?: ExplanationOfBenefitItemAdjudication[];
    /**
     * Insurer added line items
     * The second-tier service adjudications for payor added services.
     */
    detail?: ExplanationOfBenefitAddItemDetail[];
}
/**
 * Adjudication totals
 * Categorized monetary totals for the adjudication.
 * Totals for amounts submitted, co-pays, benefits payable etc.
 */
export interface ExplanationOfBenefitTotal extends BackboneElement {
    /**
     * Type of adjudication information
     * A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.
     * For example, codes indicating: Co-Pay, deductible, eligible, benefit, tax, etc.
     */
    category: CodeableConcept;
    /**
     * Financial total for the category
     * Monetary total amount associated with the category.
     */
    amount: Money;
}
/**
 * Payment Details
 * Payment details for the adjudication of the claim.
 */
export interface ExplanationOfBenefitPayment extends BackboneElement {
    /**
     * Partial or complete payment
     * Whether this represents partial or complete payment of the benefits payable.
     */
    type?: CodeableConcept;
    /**
     * Payment adjustment for non-claim issues
     * Total amount of all adjustments to this payment included in this transaction which are not related to this claim's adjudication.
     * Insurers will deduct amounts owing from the provider (adjustment), such as a prior overpayment, from the amount owing to the provider (benefits payable) when payment is made to the provider.
     */
    adjustment?: Money;
    /**
     * Explanation for the variance
     * Reason for the payment adjustment.
     */
    adjustmentReason?: CodeableConcept;
    /**
     * Expected date of payment
     * Estimated date the payment will be issued or the actual issue date of payment.
     */
    date?: date;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Payable amount after adjustment
     * Benefits payable less any payment adjustment.
     */
    amount?: Money;
    /**
     * Business identifier for the payment
     * Issuer's unique identifier for the payment instrument.
     * For example: EFT number or check number.
     */
    identifier?: Identifier;
}
/**
 * Note concerning adjudication
 * A note that describes or explains adjudication results in a human readable form.
 */
export interface ExplanationOfBenefitProcessNote extends BackboneElement {
    /**
     * Note instance identifier
     * A number to uniquely identify a note entry.
     */
    number?: positiveInt;
    /**
     * Extension for number
     **/
    _number?: Element;
    /**
     * Note explanatory text
     * The explanation or description associated with the processing.
     */
    text?: string;
    /**
     * Extension for text
     **/
    _text?: Element;
    /**
     * Language of the text
     * A code to define the language used in the text of the note.
     * Only required if the language is different from the resource language.
     */
    language?: CodeableConcept;
    /**
     * display | print | printoper
     * The business purpose of the note text.
     */
    type?: ExplanationOfBenefitNoteType;
}
/**
 * Benefit Summary
 * Benefits Used to date.
 */
export interface ExplanationOfBenefitBenefitBalanceFinancial extends BackboneElement {
    /**
     * Benefit classification
     * Classification of benefit being provided.
     * For example: deductible, visits, benefit amount.
     */
    type: CodeableConcept;
    /**
     * Benefits allowed
     * The quantity of the benefit which is permitted under the coverage.
     */
    allowedUnsignedInt?: unsignedInt;
    /**
     * Extension for allowedUnsignedInt
     **/
    _allowedUnsignedInt?: Element;
    /**
     * Benefits allowed
     * The quantity of the benefit which is permitted under the coverage.
     */
    allowedString?: string;
    /**
     * Extension for allowedString
     **/
    _allowedString?: Element;
    /**
     * Benefits allowed
     * The quantity of the benefit which is permitted under the coverage.
     */
    allowedMoney?: Money;
    /**
     * Benefits used
     * The quantity of the benefit which have been consumed to date.
     */
    usedUnsignedInt?: unsignedInt;
    /**
     * Extension for usedUnsignedInt
     **/
    _usedUnsignedInt?: Element;
    /**
     * Benefits used
     * The quantity of the benefit which have been consumed to date.
     */
    usedMoney?: Money;
}
/**
 * Balance by Benefit Category
 * Balance by Benefit Category.
 */
export interface ExplanationOfBenefitBenefitBalance extends BackboneElement {
    /**
     * Benefit classification
     * Code to identify the general type of benefits under which products and services are provided.
     * Examples include Medical Care, Periodontics, Renal Dialysis, Vision Coverage.
     */
    category: CodeableConcept;
    /**
     * Excluded from the plan
     * True if the indicated class of service is excluded from the plan, missing or False indicates the product or service is included in the coverage.
     */
    excluded?: boolean;
    /**
     * Extension for excluded
     **/
    _excluded?: Element;
    /**
     * Short name for the benefit
     * A short name or tag for the benefit.
     * For example: MED01, or DENT2.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Description of the benefit or services covered
     * A richer description of the benefit or services covered.
     * For example, 'DENT2 covers 100% of basic, 50% of major but excludes Ortho, Implants and Cosmetic services'.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * In or out of network
     * Is a flag to indicate whether the benefits refer to in-network providers or out-of-network providers.
     */
    network?: CodeableConcept;
    /**
     * Individual or family
     * Indicates if the benefits apply to an individual or to the family.
     */
    unit?: CodeableConcept;
    /**
     * Annual or lifetime
     * The term or period of the values such as 'maximum lifetime benefit' or 'maximum annual visits'.
     */
    term?: CodeableConcept;
    /**
     * Benefit Summary
     * Benefits Used to date.
     */
    financial?: ExplanationOfBenefitBenefitBalanceFinancial[];
}
/**
 * Explanation of Benefit resource
 * 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.
 */
export interface ExplanationOfBenefit extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'ExplanationOfBenefit';
    /**
     * Business Identifier for the resource
     * A unique identifier assigned to this explanation of benefit.
     */
    identifier?: Identifier[];
    /**
     * Category or discipline
     * The category of claim, e.g. oral, pharmacy, vision, institutional, professional.
     * The majority of jurisdictions use: oral, pharmacy, vision, professional and institutional, or variants on those terms, as the general styles of claims. The valueset is extensible to accommodate other jurisdictional requirements.
     */
    type: CodeableConcept;
    /**
     * More granular claim type
     * A finer grained suite of claim type codes which may convey additional information such as Inpatient vs Outpatient and/or a specialty service.
     * This may contain the local bill type codes such as the US UB-04 bill type code.
     */
    subType?: CodeableConcept;
    /**
     * The recipient of the products and services
     * The party to whom the professional services and/or products have been supplied or are being considered and for whom actual for forecast reimbursement is sought.
     */
    patient: Reference;
    /**
     * Relevant time frame for the claim
     * The period for which charges are being submitted.
     * Typically this would be today or in the past for a claim, and today or in the future for preauthorizations and prodeterminations. Typically line item dates of service should fall within the billing period if one is specified.
     */
    billablePeriod?: Period;
    /**
     * Response creation date
     * The date this resource was created.
     * This field is independent of the date of creation of the resource as it may reflect the creation date of a source document prior to digitization. Typically for claims all services must be completed as of this date.
     */
    created: dateTime;
    /**
     * Extension for created
     **/
    _created?: Element;
    /**
     * Author of the claim
     * Individual who created the claim, predetermination or preauthorization.
     */
    enterer?: Reference;
    /**
     * Party responsible for reimbursement
     * The party responsible for authorization, adjudication and reimbursement.
     */
    insurer: Reference;
    /**
     * Party responsible for the claim
     * The provider which is responsible for the claim, predetermination or preauthorization.
     * Typically this field would be 1..1 where this party is responsible for the claim but not necessarily professionally responsible for the provision of the individual products and services listed below.
     */
    provider: Reference;
    /**
     * Desired processing urgency
     * The provider-required urgency of processing the request. Typical values include: stat, routine deferred.
     * If a claim processor is unable to complete the processing as per the priority then they should generate and error and not process the request.
     */
    priority?: CodeableConcept;
    /**
     * For whom to reserve funds
     * A code to indicate whether and for whom funds are to be reserved for future claims.
     * This field is only used for preauthorizations.
     */
    fundsReserveRequested?: CodeableConcept;
    /**
     * Funds reserved status
     * A code, used only on a response to a preauthorization, to indicate whether the benefits payable have been reserved and for whom.
     * Fund would be release by a future claim quoting the preAuthRef of this response. Examples of values include: provider, patient, none.
     */
    fundsReserve?: CodeableConcept;
    /**
     * Prior or corollary claims
     * Other claims which are related to this claim such as prior submissions or claims for related services or for the same event.
     * For example,  for the original treatment and follow-up exams.
     */
    related?: ExplanationOfBenefitRelated[];
    /**
     * Prescription authorizing services or products
     * Prescription to support the dispensing of pharmacy, device or vision products.
     */
    prescription?: Reference;
    /**
     * Original prescription if superceded by fulfiller
     * Original prescription which has been superseded 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 prescription for an alternate medication which has the same therapeutic intent. The prescription from the pharmacy becomes the 'prescription' and that from the physician becomes the 'original prescription'.
     */
    originalPrescription?: Reference;
    /**
     * Recipient of benefits payable
     * The party to be reimbursed for cost of the products and services according to the terms of the policy.
     * Often providers agree to receive the benefits payable to reduce the near-term costs to the patient. The insurer may decline to pay the provider and may choose to pay the subscriber instead.
     */
    payee?: ExplanationOfBenefitPayee;
    /**
     * Treatment Referral
     * A reference to a referral resource.
     * The referral resource which lists the date, practitioner, reason and other supporting information.
     */
    referral?: Reference;
    /**
     * Servicing Facility
     * Facility where the services were provided.
     */
    facility?: Reference;
    /**
     * Claim reference
     * The business identifier for the instance of the adjudication request: claim predetermination or preauthorization.
     */
    claim?: Reference;
    /**
     * Claim response reference
     * The business identifier for the instance of the adjudication response: claim, predetermination or preauthorization response.
     */
    claimResponse?: Reference;
    /**
     * Disposition Message
     * A human readable description of the status of the adjudication.
     */
    disposition?: string;
    /**
     * Extension for disposition
     **/
    _disposition?: Element;
    /**
     * Preauthorization reference
     * Reference from the Insurer which is used in later communications which refers to this adjudication.
     * This value is only present on preauthorization adjudications.
     */
    preAuthRef?: string[];
    /**
     * Extension for preAuthRef
     **/
    _preAuthRef?: Element[];
    /**
     * Preauthorization in-effect period
     * The timeframe during which the supplied preauthorization reference may be quoted on claims to obtain the adjudication as provided.
     * This value is only present on preauthorization adjudications.
     */
    preAuthRefPeriod?: Period[];
    /**
     * Care Team members
     * The members of the team who provided the products and services.
     */
    careTeam?: ExplanationOfBenefitCareTeam[];
    /**
     * Supporting information
     * Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.
     * Often there are multiple jurisdiction specific valuesets which are required.
     */
    supportingInfo?: ExplanationOfBenefitSupportingInfo[];
    /**
     * Pertinent diagnosis information
     * Information about diagnoses relevant to the claim items.
     */
    diagnosis?: ExplanationOfBenefitDiagnosis[];
    /**
     * Clinical procedures performed
     * Procedures performed on the patient relevant to the billing items with the claim.
     */
    procedure?: ExplanationOfBenefitProcedure[];
    /**
     * Precedence (primary, secondary, etc.)
     * This indicates the relative order of a series of EOBs related to different coverages for the same suite of services.
     */
    precedence?: positiveInt;
    /**
     * Extension for precedence
     **/
    _precedence?: Element;
    /**
     * Patient insurance information
     * Financial instruments for reimbursement for the health care products and services specified on the claim.
     * All insurance coverages for the patient which may be applicable for reimbursement, of the products and services listed in the claim, are typically provided in the claim to allow insurers to confirm the ordering of the insurance coverages relative to local 'coordination of benefit' rules. One coverage (and only one) with 'focal=true' is to be used in the adjudication of this claim. Coverages appearing before the focal Coverage in the list, and where 'Coverage.subrogation=false', should provide a reference to the ClaimResponse containing the adjudication results of the prior claim.
     */
    insurance: ExplanationOfBenefitInsurance[];
    /**
     * Details of the event
     * Details of a accident which resulted in injuries which required the products and services listed in the claim.
     */
    accident?: ExplanationOfBenefitAccident;
    /**
     * Product or service provided
     * A claim line. Either a simple (a product or service) or a 'group' of details which can also be a simple items or groups of sub-details.
     */
    item?: ExplanationOfBenefitItem[];
    /**
     * Insurer added line items
     * The first-tier service adjudications for payor added product or service lines.
     */
    addItem?: ExplanationOfBenefitAddItem[];
    /**
     * Header-level adjudication
     * The adjudication results which are presented at the header level rather than at the line-item or add-item levels.
     */
    adjudication?: ExplanationOfBenefitItemAdjudication[];
    /**
     * Adjudication totals
     * Categorized monetary totals for the adjudication.
     * Totals for amounts submitted, co-pays, benefits payable etc.
     */
    total?: ExplanationOfBenefitTotal[];
    /**
     * Payment Details
     * Payment details for the adjudication of the claim.
     */
    payment?: ExplanationOfBenefitPayment;
    /**
     * Printed form identifier
     * A code for the form to be used for printing the content.
     * May be needed to identify specific jurisdictional forms.
     */
    formCode?: CodeableConcept;
    /**
     * Printed reference or actual form
     * The actual form, by reference or inclusion, for printing the content or an EOB.
     * Needed to permit insurers to include the actual form.
     */
    form?: Attachment;
    /**
     * Note concerning adjudication
     * A note that describes or explains adjudication results in a human readable form.
     */
    processNote?: ExplanationOfBenefitProcessNote[];
    /**
     * When the benefits are applicable
     * The term of the benefits documented in this response.
     * Not applicable when use=claim.
     */
    benefitPeriod?: Period;
    /**
     * Balance by Benefit Category
     * Balance by Benefit Category.
     */
    benefitBalance?: ExplanationOfBenefitBenefitBalance[];
    /**
     * active | cancelled | draft | entered-in-error
     * The status of the resource instance.
     * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
     */
    status: ExplanationOfBenefitStatus;
    /**
     * claim | preauthorization | predetermination
     * A code to indicate whether the nature of the request is: to request adjudication of products and services previously rendered; or requesting authorization and adjudication for provision in the future; or requesting the non-binding adjudication of the listed products and services which could be provided in the future.
     */
    use: ExplanationOfBenefitUse;
    /**
     * queued | complete | error | partial
     * The outcome of the claim, predetermination, or preauthorization processing.
     * The resource may be used to indicate that: the request has been held (queued) for processing; that it has been processed and errors found (error); that no errors were found and that some of the adjudication has been undertaken (partial) or that all of the adjudication has been undertaken (complete).
     */
    outcome: ExplanationOfBenefitRemittanceOutcome;
}
/**
 * Condition that the related person had
 * 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.
 */
export interface FamilyMemberHistoryCondition extends BackboneElement {
    /**
     * Condition suffered by relation
     * 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.
     */
    code: CodeableConcept;
    /**
     * deceased | permanent disability | etc.
     * Indicates what happened following the condition.  If the condition resulted in death, deceased date is captured on the relation.
     */
    outcome?: CodeableConcept;
    /**
     * Whether the condition contributed to the cause of death
     * This condition contributed to the cause of death of the related person. If contributedToDeath is not populated, then it is unknown.
     */
    contributedToDeath?: boolean;
    /**
     * Extension for contributedToDeath
     **/
    _contributedToDeath?: Element;
    /**
     * When condition first manifested
     * 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.
     */
    onsetAge?: Age;
    /**
     * When condition first manifested
     * 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.
     */
    onsetRange?: Range;
    /**
     * When condition first manifested
     * 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.
     */
    onsetPeriod?: Period;
    /**
     * When condition first manifested
     * 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.
     */
    onsetString?: string;
    /**
     * Extension for onsetString
     **/
    _onsetString?: Element;
    /**
     * Extra information about condition
     * An area where general notes can be placed about this specific condition.
     */
    note?: Annotation[];
}
/**
 * Information about patient's relatives, relevant for patient
 * Significant health conditions for a person related to the patient relevant in the context of care for the patient.
 */
export interface FamilyMemberHistory extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'FamilyMemberHistory';
    /**
     * External Id(s) for this record
     * Business identifiers assigned to this family member history by the performer or other systems which remain constant as the resource is updated and propagates from server to server.
     * This is a business identifier, not a resource identifier (see [discussion](resource.html#identifiers)).  It is best practice for the identifier to only appear on a single resource instance, however business practices may occasionally dictate that multiple resource instances with the same identifier can exist - possibly even with different resource types.  For example, multiple Patient and a Person resource instance might share the same social insurance number.
     */
    identifier?: Identifier[];
    /**
     * Instantiates FHIR protocol or definition
     * The URL pointing to a FHIR-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this FamilyMemberHistory.
     */
    instantiatesCanonical?: canonical[];
    /**
     * Extension for instantiatesCanonical
     **/
    _instantiatesCanonical?: Element[];
    /**
     * Instantiates external protocol or definition
     * The URL pointing to an externally maintained protocol, guideline, orderset or other definition that is adhered to in whole or in part by this FamilyMemberHistory.
     * This might be an HTML page, PDF, etc. or could just be a non-resolvable URI identifier.
     */
    instantiatesUri?: uri[];
    /**
     * Extension for instantiatesUri
     **/
    _instantiatesUri?: Element[];
    /**
     * subject-unknown | withheld | unable-to-obtain | deferred
     * Describes why the family member's history is not available.
     */
    dataAbsentReason?: CodeableConcept;
    /**
     * Patient history is about
     * The person who this history concerns.
     */
    patient: Reference;
    /**
     * When history was recorded or last updated
     * The date (and possibly time) when the family member history was recorded or last updated.
     * This should be captured even if the same as the date on the List aggregating the full family history.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * The family member described
     * This will either be a name or a description; e.g. "Aunt Susan", "my cousin with the red hair".
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Relationship to the subject
     * The type of relationship this person has to the patient (father, mother, brother etc.).
     */
    relationship: CodeableConcept;
    /**
     * male | female | other | unknown
     * The birth sex of the family member.
     * This element should ideally reflect whether the individual is genetically male or female.  However, as reported information based on the knowledge of the patient or reporting friend/relative, there may be situations where the reported sex might not be totally accurate.  E.g. 'Aunt Sue' might be XY rather than XX.  Questions soliciting this information should be phrased to encourage capture of genetic sex where known.  However, systems performing analysis should also allow for the possibility of imprecision with this element.
     */
    sex?: CodeableConcept;
    /**
     * (approximate) date of birth
     * The actual or approximate date of birth of the relative.
     */
    bornPeriod?: Period;
    /**
     * (approximate) date of birth
     * The actual or approximate date of birth of the relative.
     */
    bornDate?: date;
    /**
     * Extension for bornDate
     **/
    _bornDate?: Element;
    /**
     * (approximate) date of birth
     * The actual or approximate date of birth of the relative.
     */
    bornString?: string;
    /**
     * Extension for bornString
     **/
    _bornString?: Element;
    /**
     * (approximate) age
     * The age of the relative at the time the family member history is recorded.
     * use estimatedAge to indicate whether the age is actual or not.
     */
    ageAge?: Age;
    /**
     * (approximate) age
     * The age of the relative at the time the family member history is recorded.
     * use estimatedAge to indicate whether the age is actual or not.
     */
    ageRange?: Range;
    /**
     * (approximate) age
     * The age of the relative at the time the family member history is recorded.
     * use estimatedAge to indicate whether the age is actual or not.
     */
    ageString?: string;
    /**
     * Extension for ageString
     **/
    _ageString?: Element;
    /**
     * Age is estimated?
     * If true, indicates that the age value specified is an estimated value.
     * This element is labeled as a modifier because the fact that age is estimated can/should change the results of any algorithm that calculates based on the specified age.
     */
    estimatedAge?: boolean;
    /**
     * Extension for estimatedAge
     **/
    _estimatedAge?: Element;
    /**
     * Dead? How old/when?
     * Deceased flag or the actual or approximate age of the relative at the time of death for the family member history record.
     */
    deceasedBoolean?: boolean;
    /**
     * Extension for deceasedBoolean
     **/
    _deceasedBoolean?: Element;
    /**
     * Dead? How old/when?
     * Deceased flag or the actual or approximate age of the relative at the time of death for the family member history record.
     */
    deceasedAge?: Age;
    /**
     * Dead? How old/when?
     * Deceased flag or the actual or approximate age of the relative at the time of death for the family member history record.
     */
    deceasedRange?: Range;
    /**
     * Dead? How old/when?
     * Deceased flag or the actual or approximate age of the relative at the time of death for the family member history record.
     */
    deceasedDate?: date;
    /**
     * Extension for deceasedDate
     **/
    _deceasedDate?: Element;
    /**
     * Dead? How old/when?
     * Deceased flag or the actual or approximate age of the relative at the time of death for the family member history record.
     */
    deceasedString?: string;
    /**
     * Extension for deceasedString
     **/
    _deceasedString?: Element;
    /**
     * Why was family member history performed?
     * Describes why the family member history occurred in coded or textual form.
     * Textual reasons can be captured using reasonCode.text.
     */
    reasonCode?: CodeableConcept[];
    /**
     * Why was family member history performed?
     * Indicates a Condition, Observation, AllergyIntolerance, or QuestionnaireResponse that justifies this family member history event.
     */
    reasonReference?: Reference[];
    /**
     * General note about related person
     * 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.
     */
    note?: Annotation[];
    /**
     * Condition that the related person had
     * 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.
     */
    condition?: FamilyMemberHistoryCondition[];
    /**
     * partial | completed | entered-in-error | health-unknown
     * A code specifying the status of the record of the family history of a specific family member.
     * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
     */
    status: FamilyMemberHistoryFamilyHistoryStatus;
}
/**
 * Key information to flag to healthcare providers
 * Prospective warnings of potential issues when providing care to the patient.
 */
export interface Flag extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Flag';
    /**
     * Business identifier
     * Business identifiers assigned to this flag by the performer or other systems which remain constant as the resource is updated and propagates from server to server.
     * This is a business identifier, not a resource identifier (see [discussion](resource.html#identifiers)).  It is best practice for the identifier to only appear on a single resource instance, however business practices may occasionally dictate that multiple resource instances with the same identifier can exist - possibly even with different resource types.  For example, multiple Patient and a Person resource instance might share the same social insurance number.
     */
    identifier?: Identifier[];
    /**
     * Clinical, administrative, etc.
     * Allows a 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.
     * The value set will often need to be adjusted based on local business rules and usage context.
     */
    category?: CodeableConcept[];
    /**
     * Coded or textual message to display to user
     * The coded value or textual component of the flag to display to the user.
     * If non-coded, use CodeableConcept.text.  This element should always be included in the narrative.
     */
    code: CodeableConcept;
    /**
     * Who/What is flag about?
     * The patient, location, group, organization, or practitioner etc. this is about record this flag is associated with.
     */
    subject: Reference;
    /**
     * Time period when flag is active
     * 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.
     */
    period?: Period;
    /**
     * Alert relevant during encounter
     * This alert is only relevant during the encounter.
     * If both Flag.encounter and Flag.period are valued, then Flag.period.start shall not be before Encounter.period.start and Flag.period.end shall not be after Encounter.period.end.
     */
    encounter?: Reference;
    /**
     * Flag creator
     * The person, organization or device that created the flag.
     */
    author?: Reference;
    /**
     * active | inactive | entered-in-error
     * Supports basic workflow.
     * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
     */
    status: FlagStatus;
}
/**
 * Target outcome for the goal
 * Indicates what should be done by when.
 * When multiple targets are present for a single goal instance, all targets must be met for the overall goal to be met.
 */
export interface GoalTarget extends BackboneElement {
    /**
     * The parameter whose value is being tracked
     * The parameter whose value is being tracked, e.g. body weight, blood pressure, or hemoglobin A1c level.
     */
    measure?: CodeableConcept;
    /**
     * The target value to be achieved
     * 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.
     * A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Goal.target.measure defines a coded value.
     */
    detailQuantity?: Quantity;
    /**
     * The target value to be achieved
     * 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.
     * A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Goal.target.measure defines a coded value.
     */
    detailRange?: Range;
    /**
     * The target value to be achieved
     * 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.
     * A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Goal.target.measure defines a coded value.
     */
    detailCodeableConcept?: CodeableConcept;
    /**
     * The target value to be achieved
     * 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.
     * A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Goal.target.measure defines a coded value.
     */
    detailString?: string;
    /**
     * Extension for detailString
     **/
    _detailString?: Element;
    /**
     * The target value to be achieved
     * 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.
     * A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Goal.target.measure defines a coded value.
     */
    detailBoolean?: boolean;
    /**
     * Extension for detailBoolean
     **/
    _detailBoolean?: Element;
    /**
     * The target value to be achieved
     * 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.
     * A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Goal.target.measure defines a coded value.
     */
    detailInteger?: integer;
    /**
     * Extension for detailInteger
     **/
    _detailInteger?: Element;
    /**
     * The target value to be achieved
     * 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.
     * A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Goal.target.measure defines a coded value.
     */
    detailRatio?: Ratio;
    /**
     * Reach goal on or before
     * Indicates either the date or the duration after start by which the goal should be met.
     */
    dueDate?: date;
    /**
     * Extension for dueDate
     **/
    _dueDate?: Element;
    /**
     * Reach goal on or before
     * Indicates either the date or the duration after start by which the goal should be met.
     */
    dueDuration?: Duration;
}
/**
 * Describes the intended objective(s) for a patient, group or organization
 * 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.
 * Goal can be achieving a particular change or merely maintaining a current state or even slowing a decline.
 */
export interface Goal extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Goal';
    /**
     * External Ids for this goal
     * Business identifiers assigned to this goal by the performer or other systems which remain constant as the resource is updated and propagates from server to server.
     * This is a business identifier, not a resource identifier (see [discussion](resource.html#identifiers)).  It is best practice for the identifier to only appear on a single resource instance, however business practices may occasionally dictate that multiple resource instances with the same identifier can exist - possibly even with different resource types.  For example, multiple Patient and a Person resource instance might share the same social insurance number.
     */
    identifier?: Identifier[];
    /**
     * in-progress | improving | worsening | no-change | achieved | sustaining | not-achieved | no-progress | not-attainable
     * Describes the progression, or lack thereof, towards the goal against the target.
     */
    achievementStatus?: CodeableConcept;
    /**
     * E.g. Treatment, dietary, behavioral, etc.
     * Indicates a category the goal falls within.
     */
    category?: CodeableConcept[];
    /**
     * high-priority | medium-priority | low-priority
     * Identifies the mutually agreed level of importance associated with reaching/sustaining the goal.
     * Extensions are available to track priorities as established by each participant (i.e. Priority from the patient's perspective, different practitioners' perspectives, family member's perspectives)

The ordinal extension on Coding can be used to convey a numerically comparable ranking to priority.  (Keep in mind that different coding systems may use a "low value=important".
     */
    priority?: CodeableConcept;
    /**
     * Code or text describing goal
     * 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".
     * If no code is available, use CodeableConcept.text.
     */
    description: CodeableConcept;
    /**
     * Who this goal is intended for
     * Identifies the patient, group or organization for whom the goal is being established.
     */
    subject: Reference;
    /**
     * When goal pursuit begins
     * The date or event after which the goal should begin being pursued.
     */
    startDate?: date;
    /**
     * Extension for startDate
     **/
    _startDate?: Element;
    /**
     * When goal pursuit begins
     * The date or event after which the goal should begin being pursued.
     */
    startCodeableConcept?: CodeableConcept;
    /**
     * Target outcome for the goal
     * Indicates what should be done by when.
     * When multiple targets are present for a single goal instance, all targets must be met for the overall goal to be met.
     */
    target?: GoalTarget[];
    /**
     * When goal status took effect
     * Identifies when the current status.  I.e. When initially created, when achieved, when cancelled, etc.
     * To see the date for past statuses, query history.
     */
    statusDate?: date;
    /**
     * Extension for statusDate
     **/
    _statusDate?: Element;
    /**
     * Reason for current status
     * Captures the reason for the current status.
     * This will typically be captured for statuses such as rejected, on-hold or cancelled, but could be present for others.
     */
    statusReason?: string;
    /**
     * Extension for statusReason
     **/
    _statusReason?: Element;
    /**
     * Who's responsible for creating Goal?
     * Indicates whose goal this is - patient goal, practitioner goal, etc.
     * This is the individual responsible for establishing the goal, not necessarily who recorded it.  (For that, use the Provenance resource.).
     */
    expressedBy?: Reference;
    /**
     * Issues addressed by this goal
     * The identified conditions and other health record elements that are intended to be addressed by the goal.
     */
    addresses?: Reference[];
    /**
     * Comments about the goal
     * Any comments related to the goal.
     * May be used for progress notes, concerns or other related information that doesn't actually describe the goal itself.
     */
    note?: Annotation[];
    /**
     * What result was achieved regarding the goal?
     * Identifies the change (or lack of change) at the point when the status of the goal is assessed.
     * Note that this should not duplicate the goal status.
     */
    outcomeCode?: CodeableConcept[];
    /**
     * Observation that resulted from goal
     * Details of what's changed (or not changed).
     * The goal outcome is independent of the outcome of the related activities.  For example, if the Goal is to achieve a target body weight of 150 lb and a care plan activity is defined to diet, then the care plan’s activity outcome could be calories consumed whereas goal outcome is an observation for the actual body weight measured.
     */
    outcomeReference?: Reference[];
    /**
     * proposed | planned | accepted | active | on-hold | completed | cancelled | entered-in-error | rejected
     * The state of the goal throughout its lifecycle.
     * This element is labeled as a modifier because the lifecycleStatus contains codes that mark the resource as not currently valid.
     */
    lifecycleStatus: GoalLifecycleStatus;
}
/**
 * Compartment Consistency Rules
 * Compartment Consistency Rules.
 */
export interface GraphDefinitionLinkTargetCompartment extends BackboneElement {
    /**
     * Custom rule, as a FHIRPath expression
     * Custom rule, as a FHIRPath expression.
     */
    expression?: string;
    /**
     * Extension for expression
     **/
    _expression?: Element;
    /**
     * Documentation for FHIRPath expression
     * Documentation for FHIRPath expression.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * condition | requirement
     * Defines how the compartment rule is used - whether it it is used to test whether resources are subject to the rule, or whether it is a rule that must be followed.
     * All conditional rules are evaluated; if they are true, then the rules are evaluated.
     */
    use: GraphDefinitionGraphCompartmentUse;
    /**
     * Patient | Encounter | RelatedPerson | Practitioner | Device
     * Identifies the compartment.
     */
    code: GraphDefinitionCompartmentCode;
    /**
     * identical | matching | different | custom
     * identical | matching | different | no-rule | custom.
     */
    rule: GraphDefinitionGraphCompartmentRule;
}
/**
 * Potential target for the link
 * Potential target for the link.
 */
export interface GraphDefinitionLinkTarget extends BackboneElement {
    /**
     * Type of resource this link refers to
     * Type of resource this link refers to.
     */
    type: code;
    /**
     * Extension for type
     **/
    _type?: Element;
    /**
     * Criteria for reverse lookup
     * A set of parameters to look up.
     * At least one of the parameters must have the value {ref} which identifies the focus resource.
     */
    params?: string;
    /**
     * Extension for params
     **/
    _params?: Element;
    /**
     * Profile for the target resource
     * Profile for the target resource.
     */
    profile?: canonical;
    /**
     * Extension for profile
     **/
    _profile?: Element;
    /**
     * Compartment Consistency Rules
     * Compartment Consistency Rules.
     */
    compartment?: GraphDefinitionLinkTargetCompartment[];
    /**
     * Additional links from target resource
     * Additional links from target resource.
     */
    link?: GraphDefinitionLink[];
}
/**
 * Links this graph makes rules about
 * Links this graph makes rules about.
 */
export interface GraphDefinitionLink extends BackboneElement {
    /**
     * Path in the resource that contains the link
     * A FHIR expression that identifies one of FHIR References to other resources.
     * The path expression cannot contain a resolve() function. If there is no path, the link is a reverse lookup, using target.params. If the path is "*" then this means all references in the resource.
     */
    path?: string;
    /**
     * Extension for path
     **/
    _path?: Element;
    /**
     * Which slice (if profiled)
     * Which slice (if profiled).
     */
    sliceName?: string;
    /**
     * Extension for sliceName
     **/
    _sliceName?: Element;
    /**
     * Minimum occurrences for this link
     * Minimum occurrences for this link.
     */
    min?: integer;
    /**
     * Extension for min
     **/
    _min?: Element;
    /**
     * Maximum occurrences for this link
     * Maximum occurrences for this link.
     */
    max?: string;
    /**
     * Extension for max
     **/
    _max?: Element;
    /**
     * Why this link is specified
     * Information about why this link is of interest in this graph definition.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Potential target for the link
     * Potential target for the link.
     */
    target?: GraphDefinitionLinkTarget[];
}
/**
 * Definition of a graph of resources
 * 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.
 */
export interface GraphDefinition extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'GraphDefinition';
    /**
     * Canonical identifier for this graph definition, represented as a URI (globally unique)
     * An absolute URI that is used to identify this graph definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this graph definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the graph definition is stored on different servers.
     * Can be a urn:uuid: or a urn:oid: but real http: addresses are preferred.  Multiple instances may share the same URL if they have a distinct version.

The determination of when to create a new version of a resource (same url, new version) vs. defining a new artifact is up to the author.  Considerations for making this decision are found in [Technical and Business Versions](resource.html#versions).

In some cases, the resource can no longer be found at the stated url, but the url itself cannot change. Implementations can use the [meta.source](resource.html#meta) element to indicate where the current master source of the resource can be found.
     */
    url?: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Business version of the graph definition
     * 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.
     * There may be different graph definition instances that have the same identifier but different versions.  The version can be appended to the url in a reference to allow a reference to a particular business version of the graph definition with the format [url]|[version].
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
    /**
     * Name for this graph definition (computer friendly)
     * 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.
     * The name is not expected to be globally unique. The name should be a simple alphanumeric type name to ensure that it is machine-processing friendly.
     */
    name: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * For testing purposes, not real usage
     * 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.
     * Allows filtering of graph definitions that are appropriate for use versus not.
     */
    experimental?: boolean;
    /**
     * Extension for experimental
     **/
    _experimental?: Element;
    /**
     * Date last changed
     * The date  (and optionally time) when the graph definition was published. The date must change 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.
     * Note that this is not the same as the resource last-modified-date, since the resource may be a secondary representation of the graph definition. Additional specific dates may be added as extensions or be found by consulting Provenances associated with past versions of the resource.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Name of the publisher (organization or individual)
     * The name of the organization or individual that published the graph definition.
     * Usually an organization but may be an individual. The publisher (or steward) of the graph definition is the organization or individual primarily responsible for the maintenance and upkeep of the graph definition. This is not necessarily the same individual or organization that developed and initially authored the content. The publisher is the primary point of contact for questions or issues with the graph definition. This item SHOULD be populated unless the information is available from context.
     */
    publisher?: string;
    /**
     * Extension for publisher
     **/
    _publisher?: Element;
    /**
     * Contact details for the publisher
     * Contact details to assist a user in finding and communicating with the publisher.
     * May be a web site, an email address, a telephone number, etc.
     */
    contact?: ContactDetail[];
    /**
     * Natural language description of the graph definition
     * A free text natural language description of the graph definition from a consumer's perspective.
     * This description can be used to capture details such as why the graph definition was built, comments about misuse, instructions for clinical use and interpretation, literature references, examples from the paper world, etc. It is not a rendering of the graph definition as conveyed in the 'text' field of the resource itself. This item SHOULD be populated unless the information is available from context (e.g. the language of the graph definition is presumed to be the predominant language in the place the graph definition was created).
     */
    description?: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * The context that the content is intended to support
     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate graph definition instances.
     * When multiple useContexts are specified, there is no expectation that all or any of the contexts apply.
     */
    useContext?: UsageContext[];
    /**
     * Intended jurisdiction for graph definition (if applicable)
     * A legal or geographic region in which the graph definition is intended to be used.
     * It may be possible for the graph definition to be used in jurisdictions other than those for which it was originally designed or intended.
     */
    jurisdiction?: CodeableConcept[];
    /**
     * Why this graph definition is defined
     * Explanation of why this graph definition is needed and why it has been designed as it has.
     * This element does not describe the usage of the graph definition. Instead, it provides traceability of ''why'' the resource is either needed or ''why'' it is defined as it is.  This may be used to point to source materials or specifications that drove the structure of this graph definition.
     */
    purpose?: markdown;
    /**
     * Extension for purpose
     **/
    _purpose?: Element;
    /**
     * Type of resource at which the graph starts
     * The type of FHIR resource at which instances of this graph start.
     */
    start: code;
    /**
     * Extension for start
     **/
    _start?: Element;
    /**
     * Profile on base resource
     * The profile that describes the use of the base resource.
     * The code does not include the '$' prefix that is always included in the URL when the operation is invoked.
     */
    profile?: canonical;
    /**
     * Extension for profile
     **/
    _profile?: Element;
    /**
     * Links this graph makes rules about
     * Links this graph makes rules about.
     */
    link?: GraphDefinitionLink[];
    /**
     * draft | active | retired | unknown
     * The status of this graph definition. Enables tracking the life-cycle of the content.
     * Allows filtering of graph definitions that are appropriate for use versus not.
     */
    status: GraphDefinitionPublicationStatus;
}
/**
 * Include / Exclude group members by Trait
 * Identifies traits whose presence r absence is shared by members of the group.
 * All the identified characteristics must be true for an entity to a member of the group.
 */
export interface GroupCharacteristic extends BackboneElement {
    /**
     * Kind of characteristic
     * A code that identifies the kind of trait being asserted.
     */
    code: CodeableConcept;
    /**
     * Value held by characteristic
     * The value of the trait that holds (or does not hold - see 'exclude') for members of the group.
     * For Range, it means members of the group have a value that falls somewhere within the specified range.
     */
    valueCodeableConcept?: CodeableConcept;
    /**
     * Value held by characteristic
     * The value of the trait that holds (or does not hold - see 'exclude') for members of the group.
     * For Range, it means members of the group have a value that falls somewhere within the specified range.
     */
    valueBoolean?: boolean;
    /**
     * Extension for valueBoolean
     **/
    _valueBoolean?: Element;
    /**
     * Value held by characteristic
     * The value of the trait that holds (or does not hold - see 'exclude') for members of the group.
     * For Range, it means members of the group have a value that falls somewhere within the specified range.
     */
    valueQuantity?: Quantity;
    /**
     * Value held by characteristic
     * The value of the trait that holds (or does not hold - see 'exclude') for members of the group.
     * For Range, it means members of the group have a value that falls somewhere within the specified range.
     */
    valueRange?: Range;
    /**
     * Value held by characteristic
     * The value of the trait that holds (or does not hold - see 'exclude') for members of the group.
     * For Range, it means members of the group have a value that falls somewhere within the specified range.
     */
    valueReference?: Reference;
    /**
     * Group includes or excludes
     * If true, indicates the characteristic is one that is NOT held by members of the group.
     * This is labeled as "Is Modifier" because applications cannot wrongly include excluded members as included or vice versa.
     */
    exclude: boolean;
    /**
     * Extension for exclude
     **/
    _exclude?: Element;
    /**
     * Period over which characteristic is tested
     * The period over which the characteristic is tested; e.g. the patient had an operation during the month of June.
     */
    period?: Period;
}
/**
 * Who or what is in group
 * Identifies the resource instances that are members of the group.
 */
export interface GroupMember extends BackboneElement {
    /**
     * Reference to the group member
     * A reference to the entity that is a member of the group. Must be consistent with Group.type. If the entity is another group, then the type must be the same.
     */
    entity: Reference;
    /**
     * Period member belonged to the group
     * The period that the member was in the group, if known.
     */
    period?: Period;
    /**
     * If member is no longer in group
     * A flag to indicate that the member is no longer in the group, but previously may have been a member.
     */
    inactive?: boolean;
    /**
     * Extension for inactive
     **/
    _inactive?: Element;
}
/**
 * Group of multiple entities
 * 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.
 * If both Group.characteristic and Group.member are present, then the members are the individuals who were found who met the characteristic.  It's possible that there might be other candidate members who meet the characteristic and aren't (yet) in the list.  All members SHALL have the listed characteristics.
 */
export interface Group extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Group';
    /**
     * Unique id
     * A unique business identifier for this group.
     */
    identifier?: Identifier[];
    /**
     * Whether this group's record is in active use
     * Indicates whether the record for the group is available for use or is merely being retained for historical purposes.
     */
    active?: boolean;
    /**
     * Extension for active
     **/
    _active?: Element;
    /**
     * Descriptive or actual
     * If true, indicates that the resource refers to a specific group of real individuals.  If false, the group defines a set of intended individuals.
     */
    actual: boolean;
    /**
     * Extension for actual
     **/
    _actual?: Element;
    /**
     * Kind of Group members
     * Provides a specific type of resource the group includes; e.g. "cow", "syringe", etc.
     * This would generally be omitted for Person resources.
     */
    code?: CodeableConcept;
    /**
     * Label for Group
     * A label assigned to the group for human identification and communication.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Number of members
     * A count of the number of resource instances that are part of the group.
     * Note that the quantity may be less than the number of members if some of the members are not active.
     */
    quantity?: unsignedInt;
    /**
     * Extension for quantity
     **/
    _quantity?: Element;
    /**
     * Entity that is the custodian of the Group's definition
     * Entity responsible for defining and maintaining Group characteristics and/or registered members.
     * This does not strictly align with ownership of a herd or flock, but may suffice to represent that relationship in simple cases. More complex cases will require an extension.
     */
    managingEntity?: Reference;
    /**
     * Include / Exclude group members by Trait
     * Identifies traits whose presence r absence is shared by members of the group.
     * All the identified characteristics must be true for an entity to a member of the group.
     */
    characteristic?: GroupCharacteristic[];
    /**
     * Who or what is in group
     * Identifies the resource instances that are members of the group.
     */
    member?: GroupMember[];
    /**
     * person | animal | practitioner | device | medication | substance
     * Identifies the broad classification of the kind of resources the group includes.
     * Group members SHALL be of the appropriate resource type (Patient for person or animal; or Practitioner, Device, Medication or Substance for the other types.).
     */
    type: GroupType;
}
/**
 * The formal response to a guidance request
 * 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.
 */
export interface GuidanceResponse extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'GuidanceResponse';
    /**
     * The identifier of the request associated with this response, if any
     * The identifier of the request associated with this response. If an identifier 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.
     */
    requestIdentifier?: Identifier;
    /**
     * Business identifier
     * Allows a service to provide  unique, business identifiers for the response.
     */
    identifier?: Identifier[];
    /**
     * What guidance was requested
     * An identifier, CodeableConcept or canonical reference to the guidance that was requested.
     */
    moduleUri?: uri;
    /**
     * Extension for moduleUri
     **/
    _moduleUri?: Element;
    /**
     * What guidance was requested
     * An identifier, CodeableConcept or canonical reference to the guidance that was requested.
     */
    moduleCanonical?: canonical;
    /**
     * Extension for moduleCanonical
     **/
    _moduleCanonical?: Element;
    /**
     * What guidance was requested
     * An identifier, CodeableConcept or canonical reference to the guidance that was requested.
     */
    moduleCodeableConcept?: CodeableConcept;
    /**
     * Patient the request was performed for
     * The patient for which the request was processed.
     */
    subject?: Reference;
    /**
     * Encounter during which the response was returned
     * The encounter during which this response was created or to which the creation of this record is tightly associated.
     * This will typically be the encounter the event occurred within, but some activities may be initiated prior to or after the official copmletion of an encounter but still be tied to the context of the encounter.
     */
    encounter?: Reference;
    /**
     * When the guidance response was processed
     * Indicates when the guidance response was processed.
     */
    occurrenceDateTime?: dateTime;
    /**
     * Extension for occurrenceDateTime
     **/
    _occurrenceDateTime?: Element;
    /**
     * Device returning the guidance
     * Provides a reference to the device that performed the guidance.
     */
    performer?: Reference;
    /**
     * Why guidance is needed
     * Describes the reason for the guidance response in coded or textual form.
     */
    reasonCode?: CodeableConcept[];
    /**
     * Why guidance is needed
     * 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.
     */
    reasonReference?: Reference[];
    /**
     * Additional notes about the response
     * Provides a mechanism to communicate additional information about the response.
     */
    note?: Annotation[];
    /**
     * Messages resulting from the evaluation of the artifact or artifacts
     * 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.
     */
    evaluationMessage?: Reference[];
    /**
     * The output parameters of the evaluation, if any
     * 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.
     */
    outputParameters?: Reference;
    /**
     * Proposed actions, if any
     * The actions, if any, produced by the evaluation of the artifact.
     */
    result?: Reference;
    /**
     * Additional required data
     * 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.
     */
    dataRequirement?: DataRequirement[];
    /**
     * success | data-requested | data-required | in-progress | failure | entered-in-error
     * 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.
     * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
     */
    status: GuidanceResponseStatus;
}
/**
 * Specific eligibility requirements required to use the service
 * Does this service have specific eligibility requirements that need to be met in order to use the service?
 */
export interface HealthcareServiceEligibility extends BackboneElement {
    /**
     * Coded value for the eligibility
     * Coded value for the eligibility.
     */
    code?: CodeableConcept;
    /**
     * Describes the eligibility conditions for the service
     * Describes the eligibility conditions for the service.
     * The description of service eligibility should, in general, not exceed one or two paragraphs. It should be sufficient for a prospective consumer to determine if they are likely to be eligible or not. Where eligibility requirements and conditions are complex, it may simply be noted that an eligibility assessment is required. Where eligibility is determined by an outside source, such as an Act of Parliament, this should be noted, preferably with a reference to a commonly available copy of the source document such as a web page.
     */
    comment?: markdown;
    /**
     * Extension for comment
     **/
    _comment?: Element;
}
/**
 * Times the Service Site is available
 * A collection of times that the Service Site is available.
 * More detailed availability information may be provided in associated Schedule/Slot resources.
 */
export interface HealthcareServiceAvailableTime extends BackboneElement {
    /**
     * Always available? e.g. 24 hour service
     * Is this always available? (hence times are irrelevant) e.g. 24 hour service.
     */
    allDay?: boolean;
    /**
     * Extension for allDay
     **/
    _allDay?: Element;
    /**
     * Opening time of day (ignored if allDay = true)
     * The opening time of day. Note: If the AllDay flag is set, then this time is ignored.
     * The time zone is expected to be for where this HealthcareService is provided at.
     */
    availableStartTime?: time;
    /**
     * Extension for availableStartTime
     **/
    _availableStartTime?: Element;
    /**
     * Closing time of day (ignored if allDay = true)
     * The closing time of day. Note: If the AllDay flag is set, then this time is ignored.
     * The time zone is expected to be for where this HealthcareService is provided at.
     */
    availableEndTime?: time;
    /**
     * Extension for availableEndTime
     **/
    _availableEndTime?: Element;
    /**
     * mon | tue | wed | thu | fri | sat | sun
     * Indicates which days of the week are available between the start and end Times.
     */
    daysOfWeek?: HealthcareServiceDaysOfWeek[];
}
/**
 * Not available during this time due to provided reason
 * The HealthcareService is not available during this period of time due to the provided reason.
 */
export interface HealthcareServiceNotAvailable extends BackboneElement {
    /**
     * Reason presented to the user explaining why time not available
     * The reason that can be presented to the user as to why this time is not available.
     */
    description: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Service not available from this date
     * Service is not available (seasonally or for a public holiday) from this date.
     */
    during?: Period;
}
/**
 * The details of a healthcare service available at a location
 * The details of a healthcare service available at a location.
 */
export interface HealthcareService extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'HealthcareService';
    /**
     * External identifiers for this item
     * External identifiers for this item.
     */
    identifier?: Identifier[];
    /**
     * Whether this HealthcareService record is in active use
     * This flag is used to mark the record to not be used. This is not used when a center is closed for maintenance, or for holidays, the notAvailable period is to be used for this.
     * This element is labeled as a modifier because it may be used to mark that the resource was created in error.
     */
    active?: boolean;
    /**
     * Extension for active
     **/
    _active?: Element;
    /**
     * Organization that provides this service
     * The organization that provides this healthcare service.
     * This property is recommended to be the same as the Location's managingOrganization, and if not provided should be interpreted as such. If the Location does not have a managing Organization, then this property should be populated.
     */
    providedBy?: Reference;
    /**
     * Broad category of service being performed or delivered
     * Identifies the broad category of service being performed or delivered.
     * Selecting a Service Category then determines the list of relevant service types that can be selected in the primary service type.
     */
    category?: CodeableConcept[];
    /**
     * Type of service that may be delivered or performed
     * The specific type of service that may be delivered or performed.
     */
    type?: CodeableConcept[];
    /**
     * Specialties handled by the HealthcareService
     * Collection of specialties handled by the service site. This is more of a medical term.
     */
    specialty?: CodeableConcept[];
    /**
     * Location(s) where service may be provided
     * The location(s) where this healthcare service may be provided.
     */
    location?: Reference[];
    /**
     * Description of service as presented to a consumer while searching
     * Further description of the service as it would be presented to a consumer while searching.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Additional description and/or any specific issues not covered elsewhere
     * 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.
     * Would expect that a user would not see this information on a search results, and it would only be available when viewing the complete details of the service.
     */
    comment?: string;
    /**
     * Extension for comment
     **/
    _comment?: Element;
    /**
     * Extra details about the service that can't be placed in the other fields
     * Extra details about the service that can't be placed in the other fields.
     */
    extraDetails?: markdown;
    /**
     * Extension for extraDetails
     **/
    _extraDetails?: Element;
    /**
     * Facilitates quick identification of the service
     * 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.
     */
    photo?: Attachment;
    /**
     * Contacts related to the healthcare service
     * List of contacts related to this specific healthcare service.
     * If this is empty, then refer to the location's contacts.
     */
    telecom?: ContactPoint[];
    /**
     * Location(s) service is intended for/available to
     * The location(s) that this service is available to (not where the service is provided).
     * The locations referenced by the coverage area can include both specific locations, including areas, and also conceptual domains too (mode = kind), such as a physical area (tri-state area) and some other attribute (covered by Example Care Organization). These types of Locations are often not managed by any specific organization. This could also include generic locations such as "in-home".
     */
    coverageArea?: Reference[];
    /**
     * Conditions under which service is available/offered
     * The code(s) that detail the conditions under which the healthcare service is available/offered.
     * The provision means being commissioned by, contractually obliged or financially sourced. Types of costings that may apply to this healthcare service, such if the service may be available for free, some discounts available, or fees apply.
     */
    serviceProvisionCode?: CodeableConcept[];
    /**
     * Specific eligibility requirements required to use the service
     * Does this service have specific eligibility requirements that need to be met in order to use the service?
     */
    eligibility?: HealthcareServiceEligibility[];
    /**
     * Programs that this service is applicable to
     * Programs that this service is applicable to.
     * Programs are often defined externally to an Organization, commonly by governments; e.g. Home and Community Care Programs, Homeless Program, ….
     */
    program?: CodeableConcept[];
    /**
     * Collection of characteristics (attributes)
     * Collection of characteristics (attributes).
     * These could be such things as is wheelchair accessible.
     */
    characteristic?: CodeableConcept[];
    /**
     * The language that this service is offered in
     * Some services are specifically made available in multiple languages, this property permits a directory to declare the languages this is offered in. Typically this is only provided where a service operates in communities with mixed languages used.
     * When using this property it indicates that the service is available with this language, it is not derived from the practitioners, and not all are required to use this language, just that this language is available while scheduling.
     */
    communication?: CodeableConcept[];
    /**
     * Ways that the service accepts referrals
     * Ways that the service accepts referrals, if this is not provided then it is implied that no referral is required.
     */
    referralMethod?: CodeableConcept[];
    /**
     * If an appointment is required for access to this service
     * 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.
     */
    appointmentRequired?: boolean;
    /**
     * Extension for appointmentRequired
     **/
    _appointmentRequired?: Element;
    /**
     * Times the Service Site is available
     * A collection of times that the Service Site is available.
     * More detailed availability information may be provided in associated Schedule/Slot resources.
     */
    availableTime?: HealthcareServiceAvailableTime[];
    /**
     * Not available during this time due to provided reason
     * The HealthcareService is not available during this period of time due to the provided reason.
     */
    notAvailable?: HealthcareServiceNotAvailable[];
    /**
     * Description of availability exceptions
     * 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.
     */
    availabilityExceptions?: string;
    /**
     * Extension for availabilityExceptions
     **/
    _availabilityExceptions?: Element;
    /**
     * Technical endpoints providing access to electronic services operated for the healthcare service
     * Technical endpoints providing access to services operated for the specific healthcare services defined at this resource.
     */
    endpoint?: Reference[];
}
/**
 * Who performed the series
 * Indicates who or what performed the series and how they were involved.
 * If the person who performed the series is not known, their Organization may be recorded. A patient, or related person, may be the performer, e.g. for patient-captured images.
 */
export interface ImagingStudySeriesPerformer extends BackboneElement {
    /**
     * Type of performance
     * Distinguishes the type of involvement of the performer in the series.
     */
    function?: CodeableConcept;
    /**
     * Who performed the series
     * Indicates who or what performed the series.
     */
    actor: Reference;
}
/**
 * A single SOP instance from the series
 * A single SOP instance within the series, e.g. an image, or presentation state.
 */
export interface ImagingStudySeriesInstance extends BackboneElement {
    /**
     * DICOM SOP Instance UID
     * The DICOM SOP Instance UID for this image or other DICOM content.
     * See  [DICOM PS3.3 C.12.1](http://dicom.nema.org/medical/dicom/current/output/chtml/part03/sect_C.12.html#sect_C.12.1).
     */
    uid: id;
    /**
     * Extension for uid
     **/
    _uid?: Element;
    /**
     * DICOM class type
     * DICOM instance  type.
     */
    sopClass: Coding;
    /**
     * The number of this instance in the series
     * The number of instance in the series.
     */
    number?: unsignedInt;
    /**
     * Extension for number
     **/
    _number?: Element;
    /**
     * Description of instance
     * The description of the instance.
     * Particularly for post-acquisition analytic objects, such as SR, presentation states, value mapping, etc.
     */
    title?: string;
    /**
     * Extension for title
     **/
    _title?: Element;
}
/**
 * Each study has one or more series of instances
 * Each study has one or more series of images or other content.
 */
export interface ImagingStudySeries extends BackboneElement {
    /**
     * DICOM Series Instance UID for the series
     * The DICOM Series Instance UID for the series.
     * See [DICOM PS3.3 C.7.3](http://dicom.nema.org/medical/dicom/current/output/chtml/part03/sect_C.7.3.html).
     */
    uid: id;
    /**
     * Extension for uid
     **/
    _uid?: Element;
    /**
     * Numeric identifier of this series
     * The numeric identifier of this series in the study.
     */
    number?: unsignedInt;
    /**
     * Extension for number
     **/
    _number?: Element;
    /**
     * The modality of the instances in the series
     * The modality of this series sequence.
     */
    modality: Coding;
    /**
     * A short human readable summary of the series
     * A description of the series.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Number of Series Related Instances
     * 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.
     */
    numberOfInstances?: unsignedInt;
    /**
     * Extension for numberOfInstances
     **/
    _numberOfInstances?: Element;
    /**
     * Series access endpoint
     * 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.connectionType.
     * Typical endpoint types include DICOM WADO-RS, which is used to retrieve DICOM instances in native or rendered (e.g., JPG, PNG) formats using a RESTful API; DICOM WADO-URI, which can similarly retrieve native or rendered instances, except using an HTTP query-based approach; and DICOM QIDO-RS, which allows RESTful query for DICOM information without retrieving the actual instances.
     */
    endpoint?: Reference[];
    /**
     * Body part examined
     * 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.
     */
    bodySite?: Coding;
    /**
     * Body part laterality
     * 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.
     */
    laterality?: Coding;
    /**
     * Specimen imaged
     * The specimen imaged, e.g., for whole slide imaging of a biopsy.
     */
    specimen?: Reference[];
    /**
     * When the series started
     * The date and time the series was started.
     */
    started?: dateTime;
    /**
     * Extension for started
     **/
    _started?: Element;
    /**
     * Who performed the series
     * Indicates who or what performed the series and how they were involved.
     * If the person who performed the series is not known, their Organization may be recorded. A patient, or related person, may be the performer, e.g. for patient-captured images.
     */
    performer?: ImagingStudySeriesPerformer[];
    /**
     * A single SOP instance from the series
     * A single SOP instance within the series, e.g. an image, or presentation state.
     */
    instance?: ImagingStudySeriesInstance[];
}
/**
 * A set of images produced in single study (one or more series of references images)
 * 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.
 */
export interface ImagingStudy extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'ImagingStudy';
    /**
     * Identifiers for the whole study
     * Identifiers for the ImagingStudy such as DICOM Study Instance UID, and Accession Number.
     * See discussion under [Imaging Study Implementation Notes](imagingstudy.html#notes) for encoding of DICOM Study Instance UID. Accession Number should use ACSN Identifier type.
     */
    identifier?: Identifier[];
    /**
     * All series modality if actual acquisition modalities
     * A list of all the series.modality 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).
     */
    modality?: Coding[];
    /**
     * Who or what is the subject of the study
     * The subject, typically a patient, of the imaging study.
     * QA phantoms can be recorded with a Device; multiple subjects (such as mice) can be recorded with a Group.
     */
    subject: Reference;
    /**
     * Encounter with which this imaging study is associated
     * The healthcare event (e.g. a patient and healthcare provider interaction) during which this ImagingStudy is made.
     * This will typically be the encounter the event occurred within, but some events may be initiated prior to or after the official completion of an encounter but still be tied to the context of the encounter (e.g. pre-admission test).
     */
    encounter?: Reference;
    /**
     * When the study was started
     * Date and time the study started.
     */
    started?: dateTime;
    /**
     * Extension for started
     **/
    _started?: Element;
    /**
     * Request fulfilled
     * A list of the diagnostic requests that resulted in this imaging study being performed.
     */
    basedOn?: Reference[];
    /**
     * Referring physician
     * The requesting/referring physician.
     */
    referrer?: Reference;
    /**
     * Who interpreted images
     * Who read the study and interpreted the images or other content.
     */
    interpreter?: Reference[];
    /**
     * Study access endpoint
     * 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.connectionType.
     * Typical endpoint types include DICOM WADO-RS, which is used to retrieve DICOM instances in native or rendered (e.g., JPG, PNG), formats using a RESTful API; DICOM WADO-URI, which can similarly retrieve native or rendered instances, except using an HTTP query-based approach; DICOM QIDO-RS, which allows RESTful query for DICOM information without retrieving the actual instances; or IHE Invoke Image Display (IID), which provides standard invocation of an imaging web viewer.
     */
    endpoint?: Reference[];
    /**
     * Number of Study Related Series
     * 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.
     */
    numberOfSeries?: unsignedInt;
    /**
     * Extension for numberOfSeries
     **/
    _numberOfSeries?: Element;
    /**
     * Number of Study Related Instances
     * 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.
     */
    numberOfInstances?: unsignedInt;
    /**
     * Extension for numberOfInstances
     **/
    _numberOfInstances?: Element;
    /**
     * The performed Procedure reference
     * The procedure which this ImagingStudy was part of.
     */
    procedureReference?: Reference;
    /**
     * The performed procedure code
     * The code for the performed procedure type.
     */
    procedureCode?: CodeableConcept[];
    /**
     * Where ImagingStudy occurred
     * The principal physical location where the ImagingStudy was performed.
     */
    location?: Reference;
    /**
     * Why the study was requested
     * Description of clinical condition indicating why the ImagingStudy was requested.
     */
    reasonCode?: CodeableConcept[];
    /**
     * Why was study performed
     * Indicates another resource whose existence justifies this Study.
     */
    reasonReference?: Reference[];
    /**
     * User-defined comments
     * Per the recommended DICOM mapping, this element is derived from the Study Description attribute (0008,1030). Observations or findings about the imaging study should be recorded in another resource, e.g. Observation, and not in this element.
     */
    note?: Annotation[];
    /**
     * Institution-generated description
     * The Imaging Manager description of the study. Institution-generated description or classification of the Study (component) performed.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Each study has one or more series of instances
     * Each study has one or more series of images or other content.
     */
    series?: ImagingStudySeries[];
    /**
     * registered | available | cancelled | entered-in-error | unknown
     * The current state of the ImagingStudy.
     * Unknown does not represent "other" - one of the defined statuses must apply.  Unknown is used when the authoring system is not sure what the current status is.
     */
    status: ImagingStudyStatus;
}
/**
 * Who performed event
 * Indicates who performed the immunization event.
 */
export interface ImmunizationPerformer extends BackboneElement {
    /**
     * What type of performance was done
     * Describes the type of performance (e.g. ordering provider, administering provider, etc.).
     */
    function?: CodeableConcept;
    /**
     * Individual or organization who was performing
     * The practitioner or organization who performed the action.
     * When the individual practitioner who performed the action is known, it is best to send.
     */
    actor: Reference;
}
/**
 * Educational material presented to patient
 * Educational material presented to the patient (or guardian) at the time of vaccine administration.
 */
export interface ImmunizationEducation extends BackboneElement {
    /**
     * Educational material document identifier
     * Identifier of the material presented to the patient.
     */
    documentType?: string;
    /**
     * Extension for documentType
     **/
    _documentType?: Element;
    /**
     * Educational material reference pointer
     * Reference pointer to the educational material given to the patient if the information was on line.
     */
    reference?: uri;
    /**
     * Extension for reference
     **/
    _reference?: Element;
    /**
     * Educational material publication date
     * Date the educational material was published.
     */
    publicationDate?: dateTime;
    /**
     * Extension for publicationDate
     **/
    _publicationDate?: Element;
    /**
     * Educational material presentation date
     * Date the educational material was given to the patient.
     */
    presentationDate?: dateTime;
    /**
     * Extension for presentationDate
     **/
    _presentationDate?: Element;
}
/**
 * Details of a reaction that follows immunization
 * Categorical data indicating that an adverse event is associated in time to an immunization.
 * A reaction may be an indication of an allergy or intolerance and, if this is determined to be the case, it should be recorded as a new AllergyIntolerance resource instance as most systems will not query against past Immunization.reaction elements.
 */
export interface ImmunizationReaction extends BackboneElement {
    /**
     * When reaction started
     * Date of reaction to the immunization.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Additional information on reaction
     * Details of the reaction.
     */
    detail?: Reference;
    /**
     * Indicates self-reported reaction
     * Self-reported indicator.
     */
    reported?: boolean;
    /**
     * Extension for reported
     **/
    _reported?: Element;
}
/**
 * Protocol followed by the provider
 * The protocol (set of recommendations) being followed by the provider who administered the dose.
 */
export interface ImmunizationProtocolApplied extends BackboneElement {
    /**
     * Name of vaccine series
     * One possible path to achieve presumed immunity against a disease - within the context of an authority.
     */
    series?: string;
    /**
     * Extension for series
     **/
    _series?: Element;
    /**
     * Who is responsible for publishing the recommendations
     * Indicates the authority who published the protocol (e.g. ACIP) that is being followed.
     */
    authority?: Reference;
    /**
     * Vaccine preventatable disease being targetted
     * The vaccine preventable disease the dose is being administered against.
     */
    targetDisease?: CodeableConcept[];
    /**
     * Dose number within series
     * Nominal position in a series.
     * The use of an integer is preferred if known. A string should only be used in cases where an integer is not available (such as when documenting a recurring booster dose).
     */
    doseNumberPositiveInt?: positiveInt;
    /**
     * Extension for doseNumberPositiveInt
     **/
    _doseNumberPositiveInt?: Element;
    /**
     * Dose number within series
     * Nominal position in a series.
     * The use of an integer is preferred if known. A string should only be used in cases where an integer is not available (such as when documenting a recurring booster dose).
     */
    doseNumberString?: string;
    /**
     * Extension for doseNumberString
     **/
    _doseNumberString?: Element;
    /**
     * Recommended number of doses for immunity
     * The recommended number of doses to achieve immunity.
     * The use of an integer is preferred if known. A string should only be used in cases where an integer is not available (such as when documenting a recurring booster dose).
     */
    seriesDosesPositiveInt?: positiveInt;
    /**
     * Extension for seriesDosesPositiveInt
     **/
    _seriesDosesPositiveInt?: Element;
    /**
     * Recommended number of doses for immunity
     * The recommended number of doses to achieve immunity.
     * The use of an integer is preferred if known. A string should only be used in cases where an integer is not available (such as when documenting a recurring booster dose).
     */
    seriesDosesString?: string;
    /**
     * Extension for seriesDosesString
     **/
    _seriesDosesString?: Element;
}
/**
 * Immunization event information
 * Describes the event of a patient being administered a vaccine or a record of an immunization as reported by a patient, a clinician or another party.
 */
export interface Immunization extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Immunization';
    /**
     * Business identifier
     * A unique identifier assigned to this immunization record.
     */
    identifier?: Identifier[];
    /**
     * Reason not done
     * Indicates the reason the immunization event was not performed.
     * This is generally only used for the status of "not-done". The reason for performing the immunization event is captured in reasonCode, not here.
     */
    statusReason?: CodeableConcept;
    /**
     * Vaccine product administered
     * Vaccine that was administered or was to be administered.
     */
    vaccineCode: CodeableConcept;
    /**
     * Who was immunized
     * The patient who either received or did not receive the immunization.
     */
    patient: Reference;
    /**
     * Encounter immunization was part of
     * The visit or admission or other contact between patient and health care provider the immunization was performed as part of.
     */
    encounter?: Reference;
    /**
     * Vaccine administration date
     * Date vaccine administered or was to be administered.
     * When immunizations are given a specific date and time should always be known.   When immunizations are patient reported, a specific date might not be known.  Although partial dates are allowed, an adult patient might not be able to recall the year a childhood immunization was given. An exact date is always preferable, but the use of the String data type is acceptable when an exact date is not known. A small number of vaccines (e.g. live oral typhoid vaccine) are given as a series of patient self-administered dose over a span of time. In cases like this, often, only the first dose (typically a provider supervised dose) is recorded with the occurrence indicating the date/time of the first dose.
     */
    occurrenceDateTime?: dateTime;
    /**
     * Extension for occurrenceDateTime
     **/
    _occurrenceDateTime?: Element;
    /**
     * Vaccine administration date
     * Date vaccine administered or was to be administered.
     * When immunizations are given a specific date and time should always be known.   When immunizations are patient reported, a specific date might not be known.  Although partial dates are allowed, an adult patient might not be able to recall the year a childhood immunization was given. An exact date is always preferable, but the use of the String data type is acceptable when an exact date is not known. A small number of vaccines (e.g. live oral typhoid vaccine) are given as a series of patient self-administered dose over a span of time. In cases like this, often, only the first dose (typically a provider supervised dose) is recorded with the occurrence indicating the date/time of the first dose.
     */
    occurrenceString?: string;
    /**
     * Extension for occurrenceString
     **/
    _occurrenceString?: Element;
    /**
     * When the immunization was first captured in the subject's record
     * The date the occurrence of the immunization was first captured in the record - potentially significantly after the occurrence of the event.
     */
    recorded?: dateTime;
    /**
     * Extension for recorded
     **/
    _recorded?: Element;
    /**
     * Indicates context the data was recorded in
     * 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.
     * Reflects the “reliability” of the content.
     */
    primarySource?: boolean;
    /**
     * Extension for primarySource
     **/
    _primarySource?: Element;
    /**
     * Indicates the source of a secondarily reported record
     * The source of the data when the report of the immunization event is not based on information from the person who administered the vaccine.
     * Should not be populated if primarySource = True, not required even if primarySource = False.
     */
    reportOrigin?: CodeableConcept;
    /**
     * Where immunization occurred
     * The service delivery location where the vaccine administration occurred.
     */
    location?: Reference;
    /**
     * Vaccine manufacturer
     * Name of vaccine manufacturer.
     */
    manufacturer?: Reference;
    /**
     * Vaccine lot number
     * Lot number of the  vaccine product.
     */
    lotNumber?: string;
    /**
     * Extension for lotNumber
     **/
    _lotNumber?: Element;
    /**
     * Vaccine expiration date
     * Date vaccine batch expires.
     */
    expirationDate?: date;
    /**
     * Extension for expirationDate
     **/
    _expirationDate?: Element;
    /**
     * Body site vaccine  was administered
     * Body site where vaccine was administered.
     */
    site?: CodeableConcept;
    /**
     * How vaccine entered body
     * The path by which the vaccine product is taken into the body.
     */
    route?: CodeableConcept;
    /**
     * Amount of vaccine administered
     * The quantity of vaccine product that was administered.
     */
    doseQuantity?: Quantity;
    /**
     * Who performed event
     * Indicates who performed the immunization event.
     */
    performer?: ImmunizationPerformer[];
    /**
     * Additional immunization notes
     * Extra information about the immunization that is not conveyed by the other attributes.
     */
    note?: Annotation[];
    /**
     * Why immunization occurred
     * Reasons why the vaccine was administered.
     */
    reasonCode?: CodeableConcept[];
    /**
     * Why immunization occurred
     * Condition, Observation or DiagnosticReport that supports why the immunization was administered.
     */
    reasonReference?: Reference[];
    /**
     * Dose potency
     * Indication if a dose is considered to be subpotent. By default, a dose should be considered to be potent.
     * Typically, the recognition of the dose being sub-potent is retrospective, after the administration (ex. notification of a manufacturer recall after administration). However, in the case of a partial administration (the patient moves unexpectedly and only some of the dose is actually administered), subpotency may be recognized immediately, but it is still important to record the event.
     */
    isSubpotent?: boolean;
    /**
     * Extension for isSubpotent
     **/
    _isSubpotent?: Element;
    /**
     * Reason for being subpotent
     * Reason why a dose is considered to be subpotent.
     */
    subpotentReason?: CodeableConcept[];
    /**
     * Educational material presented to patient
     * Educational material presented to the patient (or guardian) at the time of vaccine administration.
     */
    education?: ImmunizationEducation[];
    /**
     * Patient eligibility for a vaccination program
     * Indicates a patient's eligibility for a funding program.
     */
    programEligibility?: CodeableConcept[];
    /**
     * Funding source for the vaccine
     * Indicates the source of the vaccine actually administered. This may be different than the patient eligibility (e.g. the patient may be eligible for a publically purchased vaccine but due to inventory issues, vaccine purchased with private funds was actually administered).
     */
    fundingSource?: CodeableConcept;
    /**
     * Details of a reaction that follows immunization
     * Categorical data indicating that an adverse event is associated in time to an immunization.
     * A reaction may be an indication of an allergy or intolerance and, if this is determined to be the case, it should be recorded as a new AllergyIntolerance resource instance as most systems will not query against past Immunization.reaction elements.
     */
    reaction?: ImmunizationReaction[];
    /**
     * Protocol followed by the provider
     * The protocol (set of recommendations) being followed by the provider who administered the dose.
     */
    protocolApplied?: ImmunizationProtocolApplied[];
    /**
     * completed | entered-in-error | not-done
     * Indicates the current status of the immunization event.
     * Will generally be set to show that the immunization has been completed or not done.  This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
     */
    status: ImmunizationStatus;
}
/**
 * Immunization evaluation information
 * Describes a comparison of an immunization event against published recommendations to determine if the administration is "valid" in relation to those  recommendations.
 */
export interface ImmunizationEvaluation extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'ImmunizationEvaluation';
    /**
     * Business identifier
     * A unique identifier assigned to this immunization evaluation record.
     */
    identifier?: Identifier[];
    /**
     * Who this evaluation is for
     * The individual for whom the evaluation is being done.
     */
    patient: Reference;
    /**
     * Date evaluation was performed
     * The date the evaluation of the vaccine administration event was performed.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Who is responsible for publishing the recommendations
     * Indicates the authority who published the protocol (e.g. ACIP).
     */
    authority?: Reference;
    /**
     * Evaluation target disease
     * The vaccine preventable disease the dose is being evaluated against.
     */
    targetDisease: CodeableConcept;
    /**
     * Immunization being evaluated
     * The vaccine administration event being evaluated.
     */
    immunizationEvent: Reference;
    /**
     * Status of the dose relative to published recommendations
     * Indicates if the dose is valid or not valid with respect to the published recommendations.
     */
    doseStatus: CodeableConcept;
    /**
     * Reason for the dose status
     * Provides an explanation as to why the vaccine administration event is valid or not relative to the published recommendations.
     */
    doseStatusReason?: CodeableConcept[];
    /**
     * Evaluation notes
     * Additional information about the evaluation.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Name of vaccine series
     * One possible path to achieve presumed immunity against a disease - within the context of an authority.
     */
    series?: string;
    /**
     * Extension for series
     **/
    _series?: Element;
    /**
     * Dose number within series
     * Nominal position in a series.
     * The use of an integer is preferred if known. A string should only be used in cases where an integer is not available (such as when documenting a recurring booster dose).
     */
    doseNumberPositiveInt?: positiveInt;
    /**
     * Extension for doseNumberPositiveInt
     **/
    _doseNumberPositiveInt?: Element;
    /**
     * Dose number within series
     * Nominal position in a series.
     * The use of an integer is preferred if known. A string should only be used in cases where an integer is not available (such as when documenting a recurring booster dose).
     */
    doseNumberString?: string;
    /**
     * Extension for doseNumberString
     **/
    _doseNumberString?: Element;
    /**
     * Recommended number of doses for immunity
     * The recommended number of doses to achieve immunity.
     * The use of an integer is preferred if known. A string should only be used in cases where an integer is not available (such as when documenting a recurring booster dose).
     */
    seriesDosesPositiveInt?: positiveInt;
    /**
     * Extension for seriesDosesPositiveInt
     **/
    _seriesDosesPositiveInt?: Element;
    /**
     * Recommended number of doses for immunity
     * The recommended number of doses to achieve immunity.
     * The use of an integer is preferred if known. A string should only be used in cases where an integer is not available (such as when documenting a recurring booster dose).
     */
    seriesDosesString?: string;
    /**
     * Extension for seriesDosesString
     **/
    _seriesDosesString?: Element;
    /**
     * completed | entered-in-error
     * Indicates the current status of the evaluation of the vaccination administration event.
     */
    status: ImmunizationEvaluationStatus;
}
/**
 * Dates governing proposed immunization
 * Vaccine date recommendations.  For example, earliest date to administer, latest date to administer, etc.
 */
export interface ImmunizationRecommendationRecommendationDateCriterion extends BackboneElement {
    /**
     * Type of date
     * Date classification of recommendation.  For example, earliest date to give, latest date to give, etc.
     */
    code: CodeableConcept;
    /**
     * Recommended date
     * The date whose meaning is specified by dateCriterion.code.
     */
    value: dateTime;
    /**
     * Extension for value
     **/
    _value?: Element;
}
/**
 * Vaccine administration recommendations
 * Vaccine administration recommendations.
 */
export interface ImmunizationRecommendationRecommendation extends BackboneElement {
    /**
     * Vaccine  or vaccine group recommendation applies to
     * Vaccine(s) or vaccine group that pertain to the recommendation.
     */
    vaccineCode?: CodeableConcept[];
    /**
     * Disease to be immunized against
     * The targeted disease for the recommendation.
     */
    targetDisease?: CodeableConcept;
    /**
     * Vaccine which is contraindicated to fulfill the recommendation
     * Vaccine(s) which should not be used to fulfill the recommendation.
     */
    contraindicatedVaccineCode?: CodeableConcept[];
    /**
     * Vaccine recommendation status
     * Indicates the patient status with respect to the path to immunity for the target disease.
     */
    forecastStatus: CodeableConcept;
    /**
     * Vaccine administration status reason
     * The reason for the assigned forecast status.
     */
    forecastReason?: CodeableConcept[];
    /**
     * Dates governing proposed immunization
     * Vaccine date recommendations.  For example, earliest date to administer, latest date to administer, etc.
     */
    dateCriterion?: ImmunizationRecommendationRecommendationDateCriterion[];
    /**
     * Protocol details
     * Contains the description about the protocol under which the vaccine was administered.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Name of vaccination series
     * One possible path to achieve presumed immunity against a disease - within the context of an authority.
     */
    series?: string;
    /**
     * Extension for series
     **/
    _series?: Element;
    /**
     * Recommended dose number within series
     * Nominal position of the recommended dose in a series (e.g. dose 2 is the next recommended dose).
     * The use of an integer is prefered if known. A string should only be used in cases where an interger is not available (such as when documenting a recurring booster dose).
     */
    doseNumberPositiveInt?: positiveInt;
    /**
     * Extension for doseNumberPositiveInt
     **/
    _doseNumberPositiveInt?: Element;
    /**
     * Recommended dose number within series
     * Nominal position of the recommended dose in a series (e.g. dose 2 is the next recommended dose).
     * The use of an integer is prefered if known. A string should only be used in cases where an interger is not available (such as when documenting a recurring booster dose).
     */
    doseNumberString?: string;
    /**
     * Extension for doseNumberString
     **/
    _doseNumberString?: Element;
    /**
     * Recommended number of doses for immunity
     * The recommended number of doses to achieve immunity.
     * The use of an integer is prefered if known. A string should only be used in cases where an interger is not available (such as when documenting a recurring booster dose).
     */
    seriesDosesPositiveInt?: positiveInt;
    /**
     * Extension for seriesDosesPositiveInt
     **/
    _seriesDosesPositiveInt?: Element;
    /**
     * Recommended number of doses for immunity
     * The recommended number of doses to achieve immunity.
     * The use of an integer is prefered if known. A string should only be used in cases where an interger is not available (such as when documenting a recurring booster dose).
     */
    seriesDosesString?: string;
    /**
     * Extension for seriesDosesString
     **/
    _seriesDosesString?: Element;
    /**
     * Past immunizations supporting recommendation
     * Immunization event history and/or evaluation that supports the status and recommendation.
     */
    supportingImmunization?: Reference[];
    /**
     * Patient observations supporting recommendation
     * Patient Information that supports the status and recommendation.  This includes patient observations, adverse reactions and allergy/intolerance information.
     */
    supportingPatientInformation?: Reference[];
}
/**
 * Guidance or advice relating to an immunization
 * A patient's point-in-time set of recommendations (i.e. forecasting) according to a published schedule with optional supporting justification.
 */
export interface ImmunizationRecommendation extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'ImmunizationRecommendation';
    /**
     * Business identifier
     * A unique identifier assigned to this particular recommendation record.
     */
    identifier?: Identifier[];
    /**
     * Who this profile is for
     * The patient the recommendation(s) are for.
     */
    patient: Reference;
    /**
     * Date recommendation(s) created
     * The date the immunization recommendation(s) were created.
     */
    date: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Who is responsible for protocol
     * Indicates the authority who published the protocol (e.g. ACIP).
     */
    authority?: Reference;
    /**
     * Vaccine administration recommendations
     * Vaccine administration recommendations.
     */
    recommendation: ImmunizationRecommendationRecommendation[];
}
/**
 * Another Implementation guide this depends on
 * Another implementation guide that this implementation depends on. Typically, an implementation guide uses value sets, profiles etc.defined in other implementation guides.
 */
export interface ImplementationGuideDependsOn extends BackboneElement {
    /**
     * Identity of the IG that this depends on
     * A canonical reference to the Implementation guide for the dependency.
     * Usually, A canonical reference to the implementation guide is the same as the master location at which the implementation guide is published.
     */
    uri: canonical;
    /**
     * Extension for uri
     **/
    _uri?: Element;
    /**
     * NPM Package name for IG this depends on
     * The NPM package name for the Implementation Guide that this IG depends on.
     */
    packageId?: id;
    /**
     * Extension for packageId
     **/
    _packageId?: Element;
    /**
     * Version of the IG
     * The version of the IG that is depended on, when the correct version is required to understand the IG correctly.
     * This follows the syntax of the NPM packaging version field - see [[reference]].
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
}
/**
 * Profiles that apply globally
 * A set of profiles that all resources covered by this implementation guide must conform to.
 * See [Default Profiles](implementationguide.html#default) for a discussion of which resources are 'covered' by an implementation guide.
 */
export interface ImplementationGuideGlobal extends BackboneElement {
    /**
     * Type this profile applies to
     * The type of resource that all instances must conform to.
     * The type must match that of the profile that is referred to but is made explicit here as a denormalization so that a system processing the implementation guide resource knows which resources the profile applies to even if the profile itself is not available.
     */
    type: code;
    /**
     * Extension for type
     **/
    _type?: Element;
    /**
     * Profile that all resources must conform to
     * A reference to the profile that all instances must conform to.
     */
    profile: canonical;
    /**
     * Extension for profile
     **/
    _profile?: Element;
}
/**
 * Grouping used to present related resources in the IG
 * A logical group of resources. Logical groups can be used when building pages.
 * Groupings are arbitrary sub-divisions of content. Typically, they are used to help build Table of Contents automatically.
 */
export interface ImplementationGuideDefinitionGrouping extends BackboneElement {
    /**
     * Descriptive name for the package
     * The human-readable title to display for the package of resources when rendering the implementation guide.
     */
    name: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Human readable text describing the package
     * Human readable text describing the package.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
}
/**
 * Resource in the implementation guide
 * 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.
 */
export interface ImplementationGuideDefinitionResource extends BackboneElement {
    /**
     * Location of the resource
     * Where this resource is found.
     * Usually this is a relative URL that locates the resource within the implementation guide. If you authoring an implementation guide, and will publish it using the FHIR publication tooling, use a URI that may point to a resource, or to one of various alternative representations (e.g. spreadsheet). The tooling will convert this when it publishes it.
     */
    reference: Reference;
    /**
     * Versions this applies to (if different to IG)
     * Indicates the FHIR Version(s) this artifact is intended to apply to. If no versions are specified, the resource is assumed to apply to all the versions stated in ImplementationGuide.fhirVersion.
     * The resource SHALL be valid against all the versions it is specified to apply to. If the resource referred to is a StructureDefinition, the fhirVersion stated in the StructureDefinition cannot disagree with the version specified here; the specified versions SHALL include the version specified by the StructureDefinition, and may include additional versions using the [applicable-version](extension-structuredefinition-applicable-version.html) extension.
     */
    fhirVersion?: code[];
    /**
     * Extension for fhirVersion
     **/
    _fhirVersion?: Element[];
    /**
     * Human Name for the resource
     * 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).
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Reason why included in guide
     * A description of the reason that a resource has been included in the implementation guide.
     * This is mostly used with examples to explain why it is present (though they can have extensive comments in the examples).
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Is an example/What is this an example of?
     * If true or a reference, indicates the resource is an example instance.  If a reference is present, indicates that the example is an example of the specified profile.
     * Examples:

* StructureDefinition -> Any
* ValueSet -> expansion
* OperationDefinition -> Parameters
* Questionnaire -> QuestionnaireResponse.
     */
    exampleBoolean?: boolean;
    /**
     * Extension for exampleBoolean
     **/
    _exampleBoolean?: Element;
    /**
     * Is an example/What is this an example of?
     * If true or a reference, indicates the resource is an example instance.  If a reference is present, indicates that the example is an example of the specified profile.
     * Examples:

* StructureDefinition -> Any
* ValueSet -> expansion
* OperationDefinition -> Parameters
* Questionnaire -> QuestionnaireResponse.
     */
    exampleCanonical?: canonical;
    /**
     * Extension for exampleCanonical
     **/
    _exampleCanonical?: Element;
    /**
     * Grouping this is part of
     * Reference to the id of the grouping this resource appears in.
     * This must correspond to a package.id element within this implementation guide.
     */
    groupingId?: id;
    /**
     * Extension for groupingId
     **/
    _groupingId?: Element;
}
/**
 * Page/Section in the Guide
 * A page / section in the implementation guide. The root page is the implementation guide home page.
 * Pages automatically become sections if they have sub-pages. By convention, the home page is called index.html.
 */
export interface ImplementationGuideDefinitionPage extends BackboneElement {
    /**
     * Where to find that page
     * The source address for the page.
     * The publishing tool will autogenerate source for list (source = n/a) and inject included implementations for include (source = uri of guide to include).
     */
    nameUrl?: url;
    /**
     * Extension for nameUrl
     **/
    _nameUrl?: Element;
    /**
     * Where to find that page
     * The source address for the page.
     * The publishing tool will autogenerate source for list (source = n/a) and inject included implementations for include (source = uri of guide to include).
     */
    nameReference?: Reference;
    /**
     * Short title shown for navigational assistance
     * A short title used to represent this page in navigational structures such as table of contents, bread crumbs, etc.
     */
    title: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * Nested Pages / Sections
     * Nested Pages/Sections under this page.
     * The implementation guide breadcrumbs are generated from this structure.
     */
    page?: ImplementationGuideDefinitionPage[];
    /**
     * html | markdown | xml | generated
     * A code that indicates how the page is generated.
     */
    generation: ImplementationGuideGuidePageGeneration;
}
/**
 * Defines how IG is built by tools
 * Defines how IG is built by tools.
 */
export interface ImplementationGuideDefinitionParameter extends BackboneElement {
    /**
     * Value for named type
     * Value for named type.
     */
    value: string;
    /**
     * Extension for value
     **/
    _value?: Element;
    /**
     * apply | path-resource | path-pages | path-tx-cache | expansion-parameter | rule-broken-links | generate-xml | generate-json | generate-turtle | html-template
     * apply | path-resource | path-pages | path-tx-cache | expansion-parameter | rule-broken-links | generate-xml | generate-json | generate-turtle | html-template.
     */
    code: ImplementationGuideGuideParameterCode;
}
/**
 * A template for building resources
 * A template for building resources.
 */
export interface ImplementationGuideDefinitionTemplate extends BackboneElement {
    /**
     * Type of template specified
     * Type of template specified.
     */
    code: code;
    /**
     * Extension for code
     **/
    _code?: Element;
    /**
     * The source location for the template
     * The source location for the template.
     */
    source: string;
    /**
     * Extension for source
     **/
    _source?: Element;
    /**
     * The scope in which the template applies
     * The scope in which the template applies.
     */
    scope?: string;
    /**
     * Extension for scope
     **/
    _scope?: Element;
}
/**
 * Information needed to build the IG
 * The information needed by an IG publisher tool to publish the whole implementation guide.
 * Principally, this consists of information abuot source resource and file locations, and build parameters and templates.
 */
export interface ImplementationGuideDefinition extends BackboneElement {
    /**
     * Grouping used to present related resources in the IG
     * A logical group of resources. Logical groups can be used when building pages.
     * Groupings are arbitrary sub-divisions of content. Typically, they are used to help build Table of Contents automatically.
     */
    grouping?: ImplementationGuideDefinitionGrouping[];
    /**
     * Resource in the implementation guide
     * 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.
     */
    resource: ImplementationGuideDefinitionResource[];
    /**
     * Page/Section in the Guide
     * A page / section in the implementation guide. The root page is the implementation guide home page.
     * Pages automatically become sections if they have sub-pages. By convention, the home page is called index.html.
     */
    page?: ImplementationGuideDefinitionPage;
    /**
     * Defines how IG is built by tools
     * Defines how IG is built by tools.
     */
    parameter?: ImplementationGuideDefinitionParameter[];
    /**
     * A template for building resources
     * A template for building resources.
     */
    template?: ImplementationGuideDefinitionTemplate[];
}
/**
 * Resource in the implementation guide
 * 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.
 */
export interface ImplementationGuideManifestResource extends BackboneElement {
    /**
     * Location of the resource
     * Where this resource is found.
     * Usually this is a relative URL that locates the resource within the implementation guide. If you authoring an implementation guide, and will publish it using the FHIR publication tooling, use a URI that may point to a resource, or to one of various alternative representations (e.g. spreadsheet). The tooling will convert this when it publishes it.
     */
    reference: Reference;
    /**
     * Is an example/What is this an example of?
     * If true or a reference, indicates the resource is an example instance.  If a reference is present, indicates that the example is an example of the specified profile.
     * Typically, conformance resources and knowledge resources are directly part of the implementation guide, with their normal meaning, and patient linked resources are usually examples. However this is not always true.
     */
    exampleBoolean?: boolean;
    /**
     * Extension for exampleBoolean
     **/
    _exampleBoolean?: Element;
    /**
     * Is an example/What is this an example of?
     * If true or a reference, indicates the resource is an example instance.  If a reference is present, indicates that the example is an example of the specified profile.
     * Typically, conformance resources and knowledge resources are directly part of the implementation guide, with their normal meaning, and patient linked resources are usually examples. However this is not always true.
     */
    exampleCanonical?: canonical;
    /**
     * Extension for exampleCanonical
     **/
    _exampleCanonical?: Element;
    /**
     * Relative path for page in IG
     * The relative path for primary page for this resource within the IG.
     * Appending 'rendering' + "/" + this should resolve to the resource page.
     */
    relativePath?: url;
    /**
     * Extension for relativePath
     **/
    _relativePath?: Element;
}
/**
 * HTML page within the parent IG
 * Information about a page within the IG.
 */
export interface ImplementationGuideManifestPage extends BackboneElement {
    /**
     * HTML page name
     * Relative path to the page.
     * Appending 'rendering' + "/" + this should resolve to the page.
     */
    name: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Title of the page, for references
     * Label for the page intended for human display.
     */
    title?: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * Anchor available on the page
     * The name of an anchor available on the page.
     * Appending 'rendering' + "/" + page.name + "#" + page.anchor should resolve to the anchor.
     */
    anchor?: string[];
    /**
     * Extension for anchor
     **/
    _anchor?: Element[];
}
/**
 * Information about an assembled IG
 * Information about an assembled implementation guide, created by the publication tooling.
 */
export interface ImplementationGuideManifest extends BackboneElement {
    /**
     * Location of rendered implementation guide
     * A pointer to official web page, PDF or other rendering of the implementation guide.
     */
    rendering?: url;
    /**
     * Extension for rendering
     **/
    _rendering?: Element;
    /**
     * Resource in the implementation guide
     * 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.
     */
    resource: ImplementationGuideManifestResource[];
    /**
     * HTML page within the parent IG
     * Information about a page within the IG.
     */
    page?: ImplementationGuideManifestPage[];
    /**
     * Image within the IG
     * Indicates a relative path to an image that exists within the IG.
     */
    image?: string[];
    /**
     * Extension for image
     **/
    _image?: Element[];
    /**
     * Additional linkable file in IG
     * Indicates the relative path of an additional non-page, non-image file that is part of the IG - e.g. zip, jar and similar files that could be the target of a hyperlink in a derived IG.
     */
    other?: string[];
    /**
     * Extension for other
     **/
    _other?: Element[];
}
/**
 * A set of rules about how FHIR is used
 * A set of rules of how a particular interoperability or standards problem is solved - typically through the use of FHIR resources. 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.
 */
export interface ImplementationGuide extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'ImplementationGuide';
    /**
     * Canonical identifier for this implementation guide, represented as a URI (globally unique)
     * An absolute URI that is used to identify this implementation guide when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this implementation guide is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the implementation guide is stored on different servers.
     * Can be a urn:uuid: or a urn:oid: but real http: addresses are preferred.  Multiple instances may share the same URL if they have a distinct version.

The determination of when to create a new version of a resource (same url, new version) vs. defining a new artifact is up to the author.  Considerations for making this decision are found in [Technical and Business Versions](resource.html#versions).

In some cases, the resource can no longer be found at the stated url, but the url itself cannot change. Implementations can use the [meta.source](resource.html#meta) element to indicate where the current master source of the resource can be found.
     */
    url: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Business version of the implementation guide
     * 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.
     * There may be different implementation guide instances that have the same identifier but different versions.  The version can be appended to the url in a reference to allow a reference to a particular business version of the implementation guide with the format [url]|[version].
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
    /**
     * Name for this implementation guide (computer friendly)
     * 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.
     * The name is not expected to be globally unique. The name should be a simple alphanumeric type name to ensure that it is machine-processing friendly.
     */
    name: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Name for this implementation guide (human friendly)
     * A short, descriptive, user-friendly title for the implementation guide.
     * This name does not need to be machine-processing friendly and may contain punctuation, white-space, etc.
     */
    title?: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * For testing purposes, not real usage
     * 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.
     * Allows filtering of implementation guides that are appropriate for use versus not.
     */
    experimental?: boolean;
    /**
     * Extension for experimental
     **/
    _experimental?: Element;
    /**
     * Date last changed
     * The date  (and optionally time) when the implementation guide was published. The date must change 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.
     * Note that this is not the same as the resource last-modified-date, since the resource may be a secondary representation of the implementation guide. Additional specific dates may be added as extensions or be found by consulting Provenances associated with past versions of the resource.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Name of the publisher (organization or individual)
     * The name of the organization or individual that published the implementation guide.
     * Usually an organization but may be an individual. The publisher (or steward) of the implementation guide is the organization or individual primarily responsible for the maintenance and upkeep of the implementation guide. This is not necessarily the same individual or organization that developed and initially authored the content. The publisher is the primary point of contact for questions or issues with the implementation guide. This item SHOULD be populated unless the information is available from context.
     */
    publisher?: string;
    /**
     * Extension for publisher
     **/
    _publisher?: Element;
    /**
     * Contact details for the publisher
     * Contact details to assist a user in finding and communicating with the publisher.
     * May be a web site, an email address, a telephone number, etc.
     */
    contact?: ContactDetail[];
    /**
     * Natural language description of the implementation guide
     * A free text natural language description of the implementation guide from a consumer's perspective.
     * This description can be used to capture details such as why the implementation guide was built, comments about misuse, instructions for clinical use and interpretation, literature references, examples from the paper world, etc. It is not a rendering of the implementation guide as conveyed in the 'text' field of the resource itself. This item SHOULD be populated unless the information is available from context (e.g. the language of the implementation guide is presumed to be the predominant language in the place the implementation guide was created).
     */
    description?: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * The context that the content is intended to support
     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate implementation guide instances.
     * When multiple useContexts are specified, there is no expectation that all or any of the contexts apply.
     */
    useContext?: UsageContext[];
    /**
     * Intended jurisdiction for implementation guide (if applicable)
     * A legal or geographic region in which the implementation guide is intended to be used.
     * It may be possible for the implementation guide to be used in jurisdictions other than those for which it was originally designed or intended.
     */
    jurisdiction?: CodeableConcept[];
    /**
     * Use and/or publishing restrictions
     * 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.
     */
    copyright?: markdown;
    /**
     * Extension for copyright
     **/
    _copyright?: Element;
    /**
     * NPM Package name for IG
     * The NPM package name for this Implementation Guide, used in the NPM package distribution, which is the primary mechanism by which FHIR based tooling manages IG dependencies. This value must be globally unique, and should be assigned with care.
     * Many (if not all) IG publishing tools will require that this element be present. For implementation guides published through HL7 or the FHIR foundation, the FHIR product director assigns package IDs.
     */
    packageId: id;
    /**
     * Extension for packageId
     **/
    _packageId?: Element;
    /**
     * SPDX license code for this IG (or not-open-source)
     * The license that applies to this Implementation Guide, using an SPDX license code, or 'not-open-source'.
     */
    license?: code;
    /**
     * Extension for license
     **/
    _license?: Element;
    /**
     * FHIR Version(s) this Implementation Guide targets
     * The version(s) of the FHIR specification that this ImplementationGuide targets - e.g. describes how to use. The value of this element is the formal version of the specification, without the revision number, e.g. [publication].[major].[minor], which is 4.0.1. for this version.
     * Most implementation guides target a single version - e.g. they describe how to use a particular version, and the profiles and examples etc are valid for that version. But some implementation guides describe how to use multiple different versions of FHIR to solve the same problem, or in concert with each other. Typically, the requirement to support multiple versions arises as implementation matures and different implementation communities are stuck at different versions by regulation or market dynamics.
     */
    fhirVersion: code[];
    /**
     * Extension for fhirVersion
     **/
    _fhirVersion?: Element[];
    /**
     * Another Implementation guide this depends on
     * Another implementation guide that this implementation depends on. Typically, an implementation guide uses value sets, profiles etc.defined in other implementation guides.
     */
    dependsOn?: ImplementationGuideDependsOn[];
    /**
     * Profiles that apply globally
     * A set of profiles that all resources covered by this implementation guide must conform to.
     * See [Default Profiles](implementationguide.html#default) for a discussion of which resources are 'covered' by an implementation guide.
     */
    global?: ImplementationGuideGlobal[];
    /**
     * Information needed to build the IG
     * The information needed by an IG publisher tool to publish the whole implementation guide.
     * Principally, this consists of information abuot source resource and file locations, and build parameters and templates.
     */
    definition?: ImplementationGuideDefinition;
    /**
     * Information about an assembled IG
     * Information about an assembled implementation guide, created by the publication tooling.
     */
    manifest?: ImplementationGuideManifest;
    /**
     * draft | active | retired | unknown
     * The status of this implementation guide. Enables tracking the life-cycle of the content.
     * Allows filtering of implementation guides that are appropriate for use versus not.
     */
    status: ImplementationGuidePublicationStatus;
}
/**
 * Contact for the product
 * The contact for the health insurance product for a certain purpose.
 * Where multiple contacts for the same purpose are provided there is a standard extension that can be used to determine which one is the preferred contact to use.
 */
export interface InsurancePlanContact extends BackboneElement {
    /**
     * The type of contact
     * Indicates a purpose for which the contact can be reached.
     */
    purpose?: CodeableConcept;
    /**
     * A name associated with the contact
     * A name associated with the contact.
     */
    name?: HumanName;
    /**
     * Contact details (telephone, email, etc.)  for a contact
     * A contact detail (e.g. a telephone number or an email address) by which the party may be contacted.
     */
    telecom?: ContactPoint[];
    /**
     * Visiting or postal addresses for the contact
     * Visiting or postal addresses for the contact.
     */
    address?: Address;
}
/**
 * Benefit limits
 * The specific limits on the benefit.
 */
export interface InsurancePlanCoverageBenefitLimit extends BackboneElement {
    /**
     * Maximum value allowed
     * The maximum amount of a service item a plan will pay for a covered benefit.  For examples. wellness visits, or eyeglasses.
     * May also be called “eligible expense,” “payment allowance,” or “negotiated rate.”.
     */
    value?: Quantity;
    /**
     * Benefit limit details
     * The specific limit on the benefit.
     * Use `CodeableConcept.text` element if the data is free (uncoded) text.
     */
    code?: CodeableConcept;
}
/**
 * List of benefits
 * Specific benefits under this type of coverage.
 */
export interface InsurancePlanCoverageBenefit extends BackboneElement {
    /**
     * Type of benefit
     * Type of benefit (primary care; speciality care; inpatient; outpatient).
     */
    type: CodeableConcept;
    /**
     * Referral requirements
     * The referral requirements to have access/coverage for this benefit.
     */
    requirement?: string;
    /**
     * Extension for requirement
     **/
    _requirement?: Element;
    /**
     * Benefit limits
     * The specific limits on the benefit.
     */
    limit?: InsurancePlanCoverageBenefitLimit[];
}
/**
 * Coverage details
 * Details about the coverage offered by the insurance product.
 */
export interface InsurancePlanCoverage extends BackboneElement {
    /**
     * Type of coverage
     * Type of coverage  (Medical; Dental; Mental Health; Substance Abuse; Vision; Drug; Short Term; Long Term Care; Hospice; Home Health).
     */
    type: CodeableConcept;
    /**
     * What networks provide coverage
     * Reference to the network that providing the type of coverage.
     * Networks are represented as a hierarchy of organization resources.
     */
    network?: Reference[];
    /**
     * List of benefits
     * Specific benefits under this type of coverage.
     */
    benefit: InsurancePlanCoverageBenefit[];
}
/**
 * Overall costs
 * Overall costs associated with the plan.
 */
export interface InsurancePlanPlanGeneralCost extends BackboneElement {
    /**
     * Type of cost
     * Type of cost.
     */
    type?: CodeableConcept;
    /**
     * Number of enrollees
     * Number of participants enrolled in the plan.
     */
    groupSize?: positiveInt;
    /**
     * Extension for groupSize
     **/
    _groupSize?: Element;
    /**
     * Cost value
     * Value of the cost.
     */
    cost?: Money;
    /**
     * Additional cost information
     * Additional information about the general costs associated with this plan.
     */
    comment?: string;
    /**
     * Extension for comment
     **/
    _comment?: Element;
}
/**
 * List of the costs
 * List of the costs associated with a specific benefit.
 */
export interface InsurancePlanPlanSpecificCostBenefitCost extends BackboneElement {
    /**
     * Type of cost
     * Type of cost (copay; individual cap; family cap; coinsurance; deductible).
     */
    type: CodeableConcept;
    /**
     * in-network | out-of-network | other
     * Whether the cost applies to in-network or out-of-network providers (in-network; out-of-network; other).
     */
    applicability?: CodeableConcept;
    /**
     * Additional information about the cost
     * Additional information about the cost, such as information about funding sources (e.g. HSA, HRA, FSA, RRA).
     */
    qualifiers?: CodeableConcept[];
    /**
     * The actual cost value
     * The actual cost value. (some of the costs may be represented as percentages rather than currency, e.g. 10% coinsurance).
     */
    value?: Quantity;
}
/**
 * Benefits list
 * List of the specific benefits under this category of benefit.
 */
export interface InsurancePlanPlanSpecificCostBenefit extends BackboneElement {
    /**
     * Type of specific benefit
     * Type of specific benefit (preventative; primary care office visit; speciality office visit; hospitalization; emergency room; urgent care).
     */
    type: CodeableConcept;
    /**
     * List of the costs
     * List of the costs associated with a specific benefit.
     */
    cost?: InsurancePlanPlanSpecificCostBenefitCost[];
}
/**
 * Specific costs
 * Costs associated with the coverage provided by the product.
 */
export interface InsurancePlanPlanSpecificCost extends BackboneElement {
    /**
     * General category of benefit
     * General category of benefit (Medical; Dental; Vision; Drug; Mental Health; Substance Abuse; Hospice, Home Health).
     */
    category: CodeableConcept;
    /**
     * Benefits list
     * List of the specific benefits under this category of benefit.
     */
    benefit?: InsurancePlanPlanSpecificCostBenefit[];
}
/**
 * Plan details
 * Details about an insurance plan.
 */
export interface InsurancePlanPlan extends BackboneElement {
    /**
     * Business Identifier for Product
     * Business identifiers assigned to this health insurance plan which remain constant as the resource is updated and propagates from server to server.
     */
    identifier?: Identifier[];
    /**
     * Type of plan
     * Type of plan. For example, "Platinum" or "High Deductable".
     */
    type?: CodeableConcept;
    /**
     * Where product applies
     * The geographic region in which a health insurance plan's benefits apply.
     */
    coverageArea?: Reference[];
    /**
     * What networks provide coverage
     * Reference to the network that providing the type of coverage.
     * Networks are represented as a hierarchy of organization resources.
     */
    network?: Reference[];
    /**
     * Overall costs
     * Overall costs associated with the plan.
     */
    generalCost?: InsurancePlanPlanGeneralCost[];
    /**
     * Specific costs
     * Costs associated with the coverage provided by the product.
     */
    specificCost?: InsurancePlanPlanSpecificCost[];
}
/**
 * Details of a Health Insurance product/plan provided by an organization
 * Details of a Health Insurance product/plan provided by an organization.
 */
export interface InsurancePlan extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'InsurancePlan';
    /**
     * Business Identifier for Product
     * Business identifiers assigned to this health insurance product which remain constant as the resource is updated and propagates from server to server.
     */
    identifier?: Identifier[];
    /**
     * Kind of product
     * The kind of health insurance product.
     */
    type?: CodeableConcept[];
    /**
     * Official name
     * Official name of the health insurance product as designated by the owner.
     * If the name of the product/plan changes, consider putting the old name in the alias column so that it can still be located through searches.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Alternate names
     * A list of alternate names that the product is known as, or was known as in the past.
     * There are no dates associated with the alias/historic names, as this is not intended to track when names were used, but to assist in searching so that older names can still result in identifying the product/plan.
     */
    alias?: string[];
    /**
     * Extension for alias
     **/
    _alias?: Element[];
    /**
     * When the product is available
     * The period of time that the health insurance product is available.
     */
    period?: Period;
    /**
     * Plan issuer
     * The entity that is providing  the health insurance product and underwriting the risk.  This is typically an insurance carriers, other third-party payers, or health plan sponsors comonly referred to as 'payers'.
     */
    ownedBy?: Reference;
    /**
     * Product administrator
     * An organization which administer other services such as underwriting, customer service and/or claims processing on behalf of the health insurance product owner.
     */
    administeredBy?: Reference;
    /**
     * Where product applies
     * The geographic region in which a health insurance product's benefits apply.
     */
    coverageArea?: Reference[];
    /**
     * Contact for the product
     * The contact for the health insurance product for a certain purpose.
     * Where multiple contacts for the same purpose are provided there is a standard extension that can be used to determine which one is the preferred contact to use.
     */
    contact?: InsurancePlanContact[];
    /**
     * Technical endpoint
     * The technical endpoints providing access to services operated for the health insurance product.
     */
    endpoint?: Reference[];
    /**
     * What networks are Included
     * Reference to the network included in the health insurance product.
     * Networks are represented as a hierarchy of organization resources.
     */
    network?: Reference[];
    /**
     * Coverage details
     * Details about the coverage offered by the insurance product.
     */
    coverage?: InsurancePlanCoverage[];
    /**
     * Plan details
     * Details about an insurance plan.
     */
    plan?: InsurancePlanPlan[];
    /**
     * draft | active | retired | unknown
     * The current state of the health insurance product.
     */
    status?: InsurancePlanPublicationStatus;
}
/**
 * Participant in creation of this Invoice
 * Indicates who or what performed or participated in the charged service.
 */
export interface InvoiceParticipant extends BackboneElement {
    /**
     * Type of involvement in creation of this Invoice
     * Describes the type of involvement (e.g. transcriptionist, creator etc.). If the invoice has been created automatically, the Participant may be a billing engine or another kind of device.
     */
    role?: CodeableConcept;
    /**
     * Individual who was involved
     * The device, practitioner, etc. who performed or participated in the service.
     */
    actor: Reference;
}
/**
 * Components of total line item price
 * The price for a ChargeItem may be calculated as a base price with surcharges/deductions that apply in certain conditions. A ChargeItemDefinition resource that defines the prices, factors and conditions that apply to a billing code is currently under development. The priceComponent element can be used to offer transparency to the recipient of the Invoice as to how the prices have been calculated.
 */
export interface InvoiceLineItemPriceComponent extends BackboneElement {
    /**
     * Code identifying the specific component
     * A code that identifies the component. Codes may be used to differentiate between kinds of taxes, surcharges, discounts etc.
     */
    code?: CodeableConcept;
    /**
     * Factor used for calculating this component
     * The factor that has been applied on the base price for calculating this component.
     * There is no reason to carry the price in the instance of a ChargeItem unless circumstances require a manual override. The list prices or are usually defined in a back catalogue of the billing codes  (see ChargeItem.definition). Derived profiles may require a ChargeItem.overrideReason to be provided if either factor or price are manually overridden.
     */
    factor?: decimal;
    /**
     * Extension for factor
     **/
    _factor?: Element;
    /**
     * Monetary amount associated with this component
     * The amount calculated for this component.
     * There is no reason to carry the price in the instance of a ChargeItem unless circumstances require a manual override. The list prices or are usually defined in a back catalogue of the billing codes  (see ChargeItem.definition). Derived profiles may require a ChargeItem.overrideReason to be provided if either factor or price are manually overridden.
     */
    amount?: Money;
    /**
     * base | surcharge | deduction | discount | tax | informational
     * This code identifies the type of the component.
     */
    type: InvoicePriceComponentType;
}
/**
 * Line items of this Invoice
 * Each line item represents one charge for goods and services rendered. Details such as date, code and amount are found in the referenced ChargeItem resource.
 */
export interface InvoiceLineItem extends BackboneElement {
    /**
     * Sequence number of line item
     * Sequence in which the items appear on the invoice.
     */
    sequence?: positiveInt;
    /**
     * Extension for sequence
     **/
    _sequence?: Element;
    /**
     * Reference to ChargeItem containing details of this line item or an inline billing code
     * The ChargeItem contains information such as the billing code, date, amount etc. If no further details are required for the lineItem, inline billing codes can be added using the CodeableConcept data type instead of the Reference.
     */
    chargeItemReference?: Reference;
    /**
     * Reference to ChargeItem containing details of this line item or an inline billing code
     * The ChargeItem contains information such as the billing code, date, amount etc. If no further details are required for the lineItem, inline billing codes can be added using the CodeableConcept data type instead of the Reference.
     */
    chargeItemCodeableConcept?: CodeableConcept;
    /**
     * Components of total line item price
     * The price for a ChargeItem may be calculated as a base price with surcharges/deductions that apply in certain conditions. A ChargeItemDefinition resource that defines the prices, factors and conditions that apply to a billing code is currently under development. The priceComponent element can be used to offer transparency to the recipient of the Invoice as to how the prices have been calculated.
     */
    priceComponent?: InvoiceLineItemPriceComponent[];
}
/**
 * Invoice containing ChargeItems from an Account
 * Invoice containing collected ChargeItems from an Account with calculated individual and total price for Billing purpose.
 */
export interface Invoice extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Invoice';
    /**
     * Business Identifier for item
     * Identifier of this Invoice, often used for reference in correspondence about this invoice or for tracking of payments.
     */
    identifier?: Identifier[];
    /**
     * Reason for cancellation of this Invoice
     * In case of Invoice cancellation a reason must be given (entered in error, superseded by corrected invoice etc.).
     * Derived Profiles may choose to add invariants requiring this field to be populated if either priceOverride or factorOverride have been filled.
     */
    cancelledReason?: string;
    /**
     * Extension for cancelledReason
     **/
    _cancelledReason?: Element;
    /**
     * Type of Invoice
     * Type of Invoice depending on domain, realm an usage (e.g. internal/external, dental, preliminary).
     */
    type?: CodeableConcept;
    /**
     * Recipient(s) of goods and services
     * The individual or set of individuals receiving the goods and services billed in this invoice.
     */
    subject?: Reference;
    /**
     * Recipient of this invoice
     * The individual or Organization responsible for balancing of this invoice.
     */
    recipient?: Reference;
    /**
     * Invoice date / posting date
     * Date/time(s) of when this Invoice was posted.
     * The list of types may be constrained as appropriate for the type of charge item.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Participant in creation of this Invoice
     * Indicates who or what performed or participated in the charged service.
     */
    participant?: InvoiceParticipant[];
    /**
     * Issuing Organization of Invoice
     * The organizationissuing the Invoice.
     * Practitioners and Devices can be associated with multiple organizations. It has to be made clear, on behalf of which Organization the services have been rendered.
     */
    issuer?: Reference;
    /**
     * Account that is being balanced
     * Account which is supposed to be balanced with this Invoice.
     * Systems posting the ChargeItems might not always be able to determine, which accounts the Items need to be places into. It is up to the potprocessing Financial System to apply internal rules to decide based on the Encounter/EpisodeOfCare/Patient/Coverage context and the type of ChargeItem, which Account is appropriate.
     */
    account?: Reference;
    /**
     * Line items of this Invoice
     * Each line item represents one charge for goods and services rendered. Details such as date, code and amount are found in the referenced ChargeItem resource.
     */
    lineItem?: InvoiceLineItem[];
    /**
     * Components of Invoice total
     * The total amount for the Invoice may be calculated as the sum of the line items with surcharges/deductions that apply in certain conditions.  The priceComponent element can be used to offer transparency to the recipient of the Invoice of how the total price was calculated.
     */
    totalPriceComponent?: InvoiceLineItemPriceComponent[];
    /**
     * Net total of this Invoice
     * Invoice total , taxes excluded.
     * There is no reason to carry the price in the instance of a ChargeItem unless circumstances require a manual override. The list prices or are usually defined in a back catalogue of the billing codes  (see ChargeItem.definition). Derived profiles may require a ChargeItem.overrideReason to be provided if either factor or price are manually overridden.
     */
    totalNet?: Money;
    /**
     * Gross total of this Invoice
     * Invoice total, tax included.
     * There is no reason to carry the price in the instance of a ChargeItem unless circumstances require a manual override. The list prices or are usually defined in a back catalogue of the billing codes  (see ChargeItem.definition). Derived profiles may require a ChargeItem.overrideReason to be provided if either factor or price are manually overridden.
     */
    totalGross?: Money;
    /**
     * Payment details
     * Payment details such as banking details, period of payment, deductibles, methods of payment.
     * Derived Profiles may chose to add invariants requiring this field to be populated if either priceOverride or factorOverride have been filled.
     */
    paymentTerms?: markdown;
    /**
     * Extension for paymentTerms
     **/
    _paymentTerms?: Element;
    /**
     * Comments made about the invoice
     * Comments made about the invoice by the issuer, subject, or other participants.
     */
    note?: Annotation[];
    /**
     * draft | issued | balanced | cancelled | entered-in-error
     * The current state of the Invoice.
     */
    status: InvoiceStatus;
}
/**
 * Represents a library of quality improvement components
 * 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.
 */
export interface Library extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Library';
    /**
     * Canonical identifier for this library, represented as a URI (globally unique)
     * An absolute URI that is used to identify this library when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this library is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the library is stored on different servers.
     * Can be a urn:uuid: or a urn:oid: but real http: addresses are preferred.  Multiple instances may share the same URL if they have a distinct version.

The determination of when to create a new version of a resource (same url, new version) vs. defining a new artifact is up to the author.  Considerations for making this decision are found in [Technical and Business Versions](resource.html#versions).

In some cases, the resource can no longer be found at the stated url, but the url itself cannot change. Implementations can use the [meta.source](resource.html#meta) element to indicate where the current master source of the resource can be found.
     */
    url?: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Additional identifier for the library
     * 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.
     * Typically, this is used for identifiers that can go in an HL7 V3 II (instance identifier) data type, and can then identify this library outside of FHIR, where it is not possible to use the logical URI.
     */
    identifier?: Identifier[];
    /**
     * Business version of the library
     * 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.
     * There may be different library instances that have the same identifier but different versions.  The version can be appended to the url in a reference to allow a reference to a particular business version of the library with the format [url]|[version].
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
    /**
     * Name for this library (computer friendly)
     * 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.
     * The name is not expected to be globally unique. The name should be a simple alphanumeric type name to ensure that it is machine-processing friendly.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Name for this library (human friendly)
     * A short, descriptive, user-friendly title for the library.
     * This name does not need to be machine-processing friendly and may contain punctuation, white-space, etc.
     */
    title?: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * Subordinate title of the library
     * An explanatory or alternate title for the library giving additional information about its content.
     */
    subtitle?: string;
    /**
     * Extension for subtitle
     **/
    _subtitle?: Element;
    /**
     * For testing purposes, not real usage
     * 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.
     * Allows filtering of librarys that are appropriate for use versus not.
     */
    experimental?: boolean;
    /**
     * Extension for experimental
     **/
    _experimental?: Element;
    /**
     * logic-library | model-definition | asset-collection | module-definition
     * Identifies the type of library such as a Logic Library, Model Definition, Asset Collection, or Module Definition.
     */
    type: CodeableConcept;
    /**
     * Type of individual the library content is focused on
     * A code or group definition that describes the intended subject of the contents of the library.
     */
    subjectCodeableConcept?: CodeableConcept;
    /**
     * Type of individual the library content is focused on
     * A code or group definition that describes the intended subject of the contents of the library.
     */
    subjectReference?: Reference;
    /**
     * Date last changed
     * The date  (and optionally time) when the library was published. The date must change 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.
     * Note that this is not the same as the resource last-modified-date, since the resource may be a secondary representation of the library. Additional specific dates may be added as extensions or be found by consulting Provenances associated with past versions of the resource.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Name of the publisher (organization or individual)
     * The name of the organization or individual that published the library.
     * Usually an organization but may be an individual. The publisher (or steward) of the library is the organization or individual primarily responsible for the maintenance and upkeep of the library. This is not necessarily the same individual or organization that developed and initially authored the content. The publisher is the primary point of contact for questions or issues with the library. This item SHOULD be populated unless the information is available from context.
     */
    publisher?: string;
    /**
     * Extension for publisher
     **/
    _publisher?: Element;
    /**
     * Contact details for the publisher
     * Contact details to assist a user in finding and communicating with the publisher.
     * May be a web site, an email address, a telephone number, etc.
     */
    contact?: ContactDetail[];
    /**
     * Natural language description of the library
     * A free text natural language description of the library from a consumer's perspective.
     * This description can be used to capture details such as why the library was built, comments about misuse, instructions for clinical use and interpretation, literature references, examples from the paper world, etc. It is not a rendering of the library as conveyed in the 'text' field of the resource itself. This item SHOULD be populated unless the information is available from context (e.g. the language of the library is presumed to be the predominant language in the place the library was created).
     */
    description?: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * The context that the content is intended to support
     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate library instances.
     * When multiple useContexts are specified, there is no expectation that all or any of the contexts apply.
     */
    useContext?: UsageContext[];
    /**
     * Intended jurisdiction for library (if applicable)
     * A legal or geographic region in which the library is intended to be used.
     * It may be possible for the library to be used in jurisdictions other than those for which it was originally designed or intended.
     */
    jurisdiction?: CodeableConcept[];
    /**
     * Why this library is defined
     * Explanation of why this library is needed and why it has been designed as it has.
     * This element does not describe the usage of the library. Instead, it provides traceability of ''why'' the resource is either needed or ''why'' it is defined as it is.  This may be used to point to source materials or specifications that drove the structure of this library.
     */
    purpose?: markdown;
    /**
     * Extension for purpose
     **/
    _purpose?: Element;
    /**
     * Describes the clinical usage of the library
     * A detailed description of how the library is used from a clinical perspective.
     */
    usage?: string;
    /**
     * Extension for usage
     **/
    _usage?: Element;
    /**
     * Use and/or publishing restrictions
     * 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.
     */
    copyright?: markdown;
    /**
     * Extension for copyright
     **/
    _copyright?: Element;
    /**
     * When the library was approved by publisher
     * The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
     * The 'date' element may be more recent than the approval date because of minor changes or editorial corrections.
     */
    approvalDate?: date;
    /**
     * Extension for approvalDate
     **/
    _approvalDate?: Element;
    /**
     * When the library was last reviewed
     * The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.
     * If specified, this date follows the original approval date.
     */
    lastReviewDate?: date;
    /**
     * Extension for lastReviewDate
     **/
    _lastReviewDate?: Element;
    /**
     * When the library is expected to be used
     * The period during which the library content was or is planned to be in active use.
     * The effective period for a library  determines when the content is applicable for usage and is independent of publication and review dates. For example, a measure intended to be used for the year 2016 might be published in 2015.
     */
    effectivePeriod?: Period;
    /**
     * E.g. Education, Treatment, Assessment, etc.
     * 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.
     */
    topic?: CodeableConcept[];
    /**
     * Who authored the content
     * An individiual or organization primarily involved in the creation and maintenance of the content.
     */
    author?: ContactDetail[];
    /**
     * Who edited the content
     * An individual or organization primarily responsible for internal coherence of the content.
     */
    editor?: ContactDetail[];
    /**
     * Who reviewed the content
     * An individual or organization primarily responsible for review of some aspect of the content.
     */
    reviewer?: ContactDetail[];
    /**
     * Who endorsed the content
     * An individual or organization responsible for officially endorsing the content for use in some setting.
     */
    endorser?: ContactDetail[];
    /**
     * Additional documentation, citations, etc.
     * Related artifacts such as additional documentation, justification, or bibliographic references.
     * Each related artifact is either an attachment, or a reference to another resource, but not both.
     */
    relatedArtifact?: RelatedArtifact[];
    /**
     * Parameters defined by the library
     * The parameter element defines parameters used by the library.
     */
    parameter?: ParameterDefinition[];
    /**
     * What data is referenced by this library
     * Describes a set of data that must be provided in order to be able to successfully perform the computations defined by the library.
     */
    dataRequirement?: DataRequirement[];
    /**
     * Contents of the library, either embedded or referenced
     * 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.
     */
    content?: Attachment[];
    /**
     * draft | active | retired | unknown
     * The status of this library. Enables tracking the life-cycle of the content.
     * Allows filtering of libraries that are appropriate for use vs. not.
     */
    status: LibraryPublicationStatus;
}
/**
 * Item to be linked
 * Identifies which record considered as the reference to the same real-world occurrence as well as how the items should be evaluated within the collection of linked items.
 */
export interface LinkageItem extends BackboneElement {
    /**
     * Resource being linked
     * The resource instance being linked as part of the group.
     */
    resource: Reference;
    /**
     * source | alternate | historical
     * Distinguishes which item is "source of truth" (if any) and which items are no longer considered to be current representations.
     */
    type: LinkageType;
}
/**
 * Links records for 'same' item
 * Identifies two or more records (resource instances) that refer to the same real-world "occurrence".
 */
export interface Linkage extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Linkage';
    /**
     * Whether this linkage assertion is active or not
     * Indicates whether the asserted set of linkages are considered to be "in effect".
     * If false, any asserted linkages should not be considered current/relevant/applicable.
     */
    active?: boolean;
    /**
     * Extension for active
     **/
    _active?: Element;
    /**
     * Who is responsible for linkages
     * Identifies the user or organization responsible for asserting the linkages as well as the user or organization who establishes the context in which the nature of each linkage is evaluated.
     */
    author?: Reference;
    /**
     * Item to be linked
     * Identifies which record considered as the reference to the same real-world occurrence as well as how the items should be evaluated within the collection of linked items.
     */
    item: LinkageItem[];
}
/**
 * Entries in the list
 * Entries in this list.
 * If there are no entries in the list, an emptyReason SHOULD be provided.
 */
export interface ListEntry extends BackboneElement {
    /**
     * Status/Workflow information about this item
     * The flag allows the system constructing the list to indicate the role and significance of the item in the list.
     * The flag can only be understood in the context of the List.code. If the flag means that the entry has actually been deleted from the list, the deleted element SHALL be true. Deleted can only be used if the List.mode is "changes".
     */
    flag?: CodeableConcept;
    /**
     * If this item is actually marked as deleted
     * True if this item is marked as deleted in the list.
     * If the flag means that the entry has actually been deleted from the list, the deleted element SHALL be true. Both flag and deleted can only be used if the List.mode is "changes". A deleted entry should be displayed in narrative as deleted.  This element is labeled as a modifier because it indicates that an item is (to be) no longer in the list.
     */
    deleted?: boolean;
    /**
     * Extension for deleted
     **/
    _deleted?: Element;
    /**
     * When item added to list
     * When this item was added to the list.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Actual entry
     * A reference to the actual resource from which data was derived.
     */
    item: Reference;
}
/**
 * A list is a curated collection of resources
 * A list is a curated collection of resources.
 */
export interface List extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'List';
    /**
     * Business identifier
     * Identifier for the List assigned for business purposes outside the context of FHIR.
     */
    identifier?: Identifier[];
    /**
     * Descriptive name for the list
     * A label for the list assigned by the author.
     */
    title?: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * What the purpose of this list is
     * This code defines the purpose of the list - why it was created.
     * If there is no code, the purpose of the list is implied where it is used, such as in a document section using Document.section.code.
     */
    code?: CodeableConcept;
    /**
     * If all resources have the same subject
     * The common subject (or patient) of the resources that are in the list if there is one.
     * Some purely arbitrary lists do not have a common subject, so this is optional.
     */
    subject?: Reference;
    /**
     * Context in which list created
     * The encounter that is the context in which this list was created.
     */
    encounter?: Reference;
    /**
     * When the list was prepared
     * The date that the list was prepared.
     * The actual important date is the date of currency of the resources that were summarized, but it is usually assumed that these are current when the preparation occurs.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Who and/or what defined the list contents (aka Author)
     * 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.
     * The primary source is the entity that made the decisions what items are in the list. This may be software or user.
     */
    source?: Reference;
    /**
     * What order the list has
     * What order applies to the items in the list.
     * Applications SHOULD render ordered lists in the order provided, but MAY allow users to re-order based on their own preferences as well. If there is no order specified, the order is unknown, though there may still be some order.
     */
    orderedBy?: CodeableConcept;
    /**
     * Comments about the list
     * Comments that apply to the overall list.
     */
    note?: Annotation[];
    /**
     * Entries in the list
     * Entries in this list.
     * If there are no entries in the list, an emptyReason SHOULD be provided.
     */
    entry?: ListEntry[];
    /**
     * Why list is empty
     * If the list is empty, why the list is empty.
     * The various reasons for an empty list make a significant interpretation to its interpretation. Note that this code is for use when the entire list has been suppressed, and not for when individual items are omitted - implementers may consider using a text note or a flag on an entry in these cases.
     */
    emptyReason?: CodeableConcept;
    /**
     * current | retired | entered-in-error
     * Indicates the current state of this list.
     * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
     */
    status: ListStatus;
    /**
     * working | snapshot | changes
     * 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.
     * This element is labeled as a modifier because a change list must not be misunderstood as a complete list.
     */
    mode: ListMode;
}
/**
 * The absolute geographic location
 * The absolute geographic location of the Location, expressed using the WGS84 datum (This is the same co-ordinate system used in KML).
 */
export interface LocationPosition extends BackboneElement {
    /**
     * Longitude with WGS84 datum
     * Longitude. The value domain and the interpretation are the same as for the text of the longitude element in KML (see notes below).
     */
    longitude: decimal;
    /**
     * Extension for longitude
     **/
    _longitude?: Element;
    /**
     * Latitude with WGS84 datum
     * Latitude. The value domain and the interpretation are the same as for the text of the latitude element in KML (see notes below).
     */
    latitude: decimal;
    /**
     * Extension for latitude
     **/
    _latitude?: Element;
    /**
     * Altitude with WGS84 datum
     * Altitude. The value domain and the interpretation are the same as for the text of the altitude element in KML (see notes below).
     */
    altitude?: decimal;
    /**
     * Extension for altitude
     **/
    _altitude?: Element;
}
/**
 * What days/times during a week is this location usually open
 * What days/times during a week is this location usually open.
 * This type of information is commonly found published in directories and on websites informing customers when the facility is available.

Specific services within the location may have their own hours which could be shorter (or longer) than the locations hours.
 */
export interface LocationHoursOfOperation extends BackboneElement {
    /**
     * The Location is open all day
     * The Location is open all day.
     */
    allDay?: boolean;
    /**
     * Extension for allDay
     **/
    _allDay?: Element;
    /**
     * Time that the Location opens
     * Time that the Location opens.
     */
    openingTime?: time;
    /**
     * Extension for openingTime
     **/
    _openingTime?: Element;
    /**
     * Time that the Location closes
     * Time that the Location closes.
     */
    closingTime?: time;
    /**
     * Extension for closingTime
     **/
    _closingTime?: Element;
    /**
     * mon | tue | wed | thu | fri | sat | sun
     * Indicates which days of the week are available between the start and end Times.
     */
    daysOfWeek?: LocationDaysOfWeek[];
}
/**
 * Details and position information for a physical place
 * Details and position information for a physical place where services are provided and resources and participants may be stored, found, contained, or accommodated.
 */
export interface Location extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Location';
    /**
     * Unique code or number identifying the location to its users
     * Unique code or number identifying the location to its users.
     */
    identifier?: Identifier[];
    /**
     * The operational status of the location (typically only for a bed/room)
     * The operational status covers operation values most relevant to beds (but can also apply to rooms/units/chairs/etc. such as an isolation unit/dialysis chair). This typically covers concepts such as contamination, housekeeping, and other activities like maintenance.
     */
    operationalStatus?: Coding;
    /**
     * Name of the location as used by humans
     * Name of the location as used by humans. Does not need to be unique.
     * If the name of a location changes, consider putting the old name in the alias column so that it can still be located through searches.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * A list of alternate names that the location is known as, or was known as, in the past
     * A list of alternate names that the location is known as, or was known as, in the past.
     * There are no dates associated with the alias/historic names, as this is not intended to track when names were used, but to assist in searching so that older names can still result in identifying the location.
     */
    alias?: string[];
    /**
     * Extension for alias
     **/
    _alias?: Element[];
    /**
     * Additional details about the location that could be displayed as further information to identify the location beyond its name
     * Description of the Location, which helps in finding or referencing the place.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Type of function performed
     * Indicates the type of function performed at the location.
     */
    type?: CodeableConcept[];
    /**
     * Contact details of the location
     * The contact details of communication devices available at the location. This can include phone numbers, fax numbers, mobile numbers, email addresses and web sites.
     */
    telecom?: ContactPoint[];
    /**
     * Physical location
     * Physical location.
     * Additional addresses should be recorded using another instance of the Location resource, or via the Organization.
     */
    address?: Address;
    /**
     * Physical form of the location
     * Physical form of the location, e.g. building, room, vehicle, road.
     */
    physicalType?: CodeableConcept;
    /**
     * The absolute geographic location
     * The absolute geographic location of the Location, expressed using the WGS84 datum (This is the same co-ordinate system used in KML).
     */
    position?: LocationPosition;
    /**
     * Organization responsible for provisioning and upkeep
     * The organization responsible for the provisioning and upkeep of the location.
     * This can also be used as the part of the organization hierarchy where this location provides services. These services can be defined through the HealthcareService resource.
     */
    managingOrganization?: Reference;
    /**
     * Another Location this one is physically a part of
     * Another Location of which this Location is physically a part of.
     */
    partOf?: Reference;
    /**
     * What days/times during a week is this location usually open
     * What days/times during a week is this location usually open.
     * This type of information is commonly found published in directories and on websites informing customers when the facility is available.

Specific services within the location may have their own hours which could be shorter (or longer) than the locations hours.
     */
    hoursOfOperation?: LocationHoursOfOperation[];
    /**
     * Description of availability exceptions
     * A description of when the locations opening ours are different to normal, e.g. public holiday availability. Succinctly describing all possible exceptions to normal site availability as detailed in the opening hours Times.
     */
    availabilityExceptions?: string;
    /**
     * Extension for availabilityExceptions
     **/
    _availabilityExceptions?: Element;
    /**
     * Technical endpoints providing access to services operated for the location
     * Technical endpoints providing access to services operated for the location.
     */
    endpoint?: Reference[];
    /**
     * active | suspended | inactive
     * 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.
     */
    status?: LocationStatus;
    /**
     * instance | kind
     * Indicates whether a resource instance represents a specific location or a class of locations.
     * This is labeled as a modifier because whether or not the location is a class of locations changes how it can be used and understood.
     */
    mode?: LocationMode;
}
/**
 * Population criteria
 * A population criteria for the measure.
 */
export interface MeasureGroupPopulation extends BackboneElement {
    /**
     * initial-population | numerator | numerator-exclusion | denominator | denominator-exclusion | denominator-exception | measure-population | measure-population-exclusion | measure-observation
     * The type of population criteria.
     */
    code?: CodeableConcept;
    /**
     * The human readable description of this population criteria
     * The human readable description of this population criteria.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * The criteria that defines this population
     * An expression that specifies the criteria for the population, typically the name of an expression in a library.
     * In the case of a continuous-variable or ratio measure, this may be the name of a function that calculates the value of the individual observation for each patient or event in the population. For these types of measures, individual observations are reported as observation resources included in the evaluatedResources bundle for each patient. See the MeasureReport resource or the Quality Reporting topic for more information.
     */
    criteria: Expression;
}
/**
 * Stratifier criteria component for the measure
 * A component of 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.
 * Stratifiers are defined either as a single criteria, or as a set of component criteria.
 */
export interface MeasureGroupStratifierComponent extends BackboneElement {
    /**
     * Meaning of the stratifier component
     * Indicates a meaning for the stratifier component. This can be as simple as a unique identifier, or it can establish meaning in a broader context by drawing from a terminology, allowing stratifiers to be correlated across measures.
     */
    code?: CodeableConcept;
    /**
     * The human readable description of this stratifier component
     * The human readable description of this stratifier criteria component.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Component of how the measure should be stratified
     * An expression that specifies the criteria for this component of the stratifier. This is typically the name of an expression defined within a referenced library, but it may also be a path to a stratifier element.
     */
    criteria: Expression;
}
/**
 * Stratifier criteria for the measure
 * 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.
 */
export interface MeasureGroupStratifier extends BackboneElement {
    /**
     * Meaning of the stratifier
     * Indicates a meaning for the stratifier. This can be as simple as a unique identifier, or it can establish meaning in a broader context by drawing from a terminology, allowing stratifiers to be correlated across measures.
     */
    code?: CodeableConcept;
    /**
     * The human readable description of this stratifier
     * The human readable description of this stratifier criteria.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * How the measure should be stratified
     * An expression that specifies the criteria for the stratifier. This is typically the name of an expression defined within a referenced library, but it may also be a path to a stratifier element.
     */
    criteria?: Expression;
    /**
     * Stratifier criteria component for the measure
     * A component of 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.
     * Stratifiers are defined either as a single criteria, or as a set of component criteria.
     */
    component?: MeasureGroupStratifierComponent[];
}
/**
 * Population criteria group
 * A group of population criteria for the measure.
 */
export interface MeasureGroup extends BackboneElement {
    /**
     * Meaning of the group
     * Indicates a meaning for the group. This can be as simple as a unique identifier, or it can establish meaning in a broader context by drawing from a terminology, allowing groups to be correlated across measures.
     */
    code?: CodeableConcept;
    /**
     * Summary description
     * The human readable description of this population group.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Population criteria
     * A population criteria for the measure.
     */
    population?: MeasureGroupPopulation[];
    /**
     * Stratifier criteria for the measure
     * 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.
     */
    stratifier?: MeasureGroupStratifier[];
}
/**
 * What other data should be reported with the measure
 * 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.
 * Note that supplemental data are reported as observations for each patient and included in the evaluatedResources bundle. See the MeasureReport resource or the Quality Reporting topic for more information.
 */
export interface MeasureSupplementalData extends BackboneElement {
    /**
     * Meaning of the supplemental data
     * Indicates a meaning for the supplemental data. This can be as simple as a unique identifier, or it can establish meaning in a broader context by drawing from a terminology, allowing supplemental data to be correlated across measures.
     */
    code?: CodeableConcept;
    /**
     * supplemental-data | risk-adjustment-factor
     * 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.
     */
    usage?: CodeableConcept[];
    /**
     * The human readable description of this supplemental data
     * The human readable description of this supplemental data.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Expression describing additional data to be reported
     * The criteria for the supplemental data. This is typically the name of a valid expression defined within a referenced library, but it may also be a path to a specific data element. The criteria defines the data to be returned for this element.
     */
    criteria: Expression;
}
/**
 * A quality measure definition
 * The Measure resource provides the definition of a quality measure.
 */
export interface Measure extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Measure';
    /**
     * Canonical identifier for this measure, represented as a URI (globally unique)
     * An absolute URI that is used to identify this measure when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this measure is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the measure is stored on different servers.
     * Can be a urn:uuid: or a urn:oid: but real http: addresses are preferred.  Multiple instances may share the same URL if they have a distinct version.

The determination of when to create a new version of a resource (same url, new version) vs. defining a new artifact is up to the author.  Considerations for making this decision are found in [Technical and Business Versions](resource.html#versions).

In some cases, the resource can no longer be found at the stated url, but the url itself cannot change. Implementations can use the [meta.source](resource.html#meta) element to indicate where the current master source of the resource can be found.
     */
    url?: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Additional identifier for the measure
     * 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.
     * Typically, this is used for identifiers that can go in an HL7 V3 II (instance identifier) data type, and can then identify this measure outside of FHIR, where it is not possible to use the logical URI.
     */
    identifier?: Identifier[];
    /**
     * Business version of the measure
     * 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.
     * There may be different measure instances that have the same identifier but different versions.  The version can be appended to the url in a reference to allow a reference to a particular business version of the measure with the format [url]|[version].
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
    /**
     * Name for this measure (computer friendly)
     * 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.
     * The name is not expected to be globally unique. The name should be a simple alphanumeric type name to ensure that it is machine-processing friendly.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Name for this measure (human friendly)
     * A short, descriptive, user-friendly title for the measure.
     * This name does not need to be machine-processing friendly and may contain punctuation, white-space, etc.
     */
    title?: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * Subordinate title of the measure
     * An explanatory or alternate title for the measure giving additional information about its content.
     */
    subtitle?: string;
    /**
     * Extension for subtitle
     **/
    _subtitle?: Element;
    /**
     * For testing purposes, not real usage
     * 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.
     * Allows filtering of measures that are appropriate for use versus not.
     */
    experimental?: boolean;
    /**
     * Extension for experimental
     **/
    _experimental?: Element;
    /**
     * E.g. Patient, Practitioner, RelatedPerson, Organization, Location, Device
     * The intended subjects for the measure. If this element is not provided, a Patient subject is assumed, but the subject of the measure can be anything.
     * The subject of the measure is critical in interpreting the criteria definitions, as the logic in the measures is evaluated with respect to a particular subject. This corresponds roughly to the notion of a Compartment in that it limits what content is available based on its relationship to the subject. In CQL, this corresponds to the context declaration.
     */
    subjectCodeableConcept?: CodeableConcept;
    /**
     * E.g. Patient, Practitioner, RelatedPerson, Organization, Location, Device
     * The intended subjects for the measure. If this element is not provided, a Patient subject is assumed, but the subject of the measure can be anything.
     * The subject of the measure is critical in interpreting the criteria definitions, as the logic in the measures is evaluated with respect to a particular subject. This corresponds roughly to the notion of a Compartment in that it limits what content is available based on its relationship to the subject. In CQL, this corresponds to the context declaration.
     */
    subjectReference?: Reference;
    /**
     * Date last changed
     * The date  (and optionally time) when the measure was published. The date must change 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.
     * Note that this is not the same as the resource last-modified-date, since the resource may be a secondary representation of the measure. Additional specific dates may be added as extensions or be found by consulting Provenances associated with past versions of the resource.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Name of the publisher (organization or individual)
     * The name of the organization or individual that published the measure.
     * Usually an organization but may be an individual. The publisher (or steward) of the measure is the organization or individual primarily responsible for the maintenance and upkeep of the measure. This is not necessarily the same individual or organization that developed and initially authored the content. The publisher is the primary point of contact for questions or issues with the measure. This item SHOULD be populated unless the information is available from context.
     */
    publisher?: string;
    /**
     * Extension for publisher
     **/
    _publisher?: Element;
    /**
     * Contact details for the publisher
     * Contact details to assist a user in finding and communicating with the publisher.
     * May be a web site, an email address, a telephone number, etc.
     */
    contact?: ContactDetail[];
    /**
     * Natural language description of the measure
     * A free text natural language description of the measure from a consumer's perspective.
     * This description can be used to capture details such as why the measure was built, comments about misuse, instructions for clinical use and interpretation, literature references, examples from the paper world, etc. It is not a rendering of the measure as conveyed in the 'text' field of the resource itself. This item SHOULD be populated unless the information is available from context (e.g. the language of the measure is presumed to be the predominant language in the place the measure was created).
     */
    description?: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * The context that the content is intended to support
     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate measure instances.
     * When multiple useContexts are specified, there is no expectation that all or any of the contexts apply.
     */
    useContext?: UsageContext[];
    /**
     * Intended jurisdiction for measure (if applicable)
     * A legal or geographic region in which the measure is intended to be used.
     * It may be possible for the measure to be used in jurisdictions other than those for which it was originally designed or intended.
     */
    jurisdiction?: CodeableConcept[];
    /**
     * Why this measure is defined
     * Explanation of why this measure is needed and why it has been designed as it has.
     * This element does not describe the usage of the measure. Instead, it provides traceability of ''why'' the resource is either needed or ''why'' it is defined as it is.  This may be used to point to source materials or specifications that drove the structure of this measure.
     */
    purpose?: markdown;
    /**
     * Extension for purpose
     **/
    _purpose?: Element;
    /**
     * Describes the clinical usage of the measure
     * A detailed description, from a clinical perspective, of how the measure is used.
     */
    usage?: string;
    /**
     * Extension for usage
     **/
    _usage?: Element;
    /**
     * Use and/or publishing restrictions
     * 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.
     */
    copyright?: markdown;
    /**
     * Extension for copyright
     **/
    _copyright?: Element;
    /**
     * When the measure was approved by publisher
     * The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
     * The 'date' element may be more recent than the approval date because of minor changes or editorial corrections.
     */
    approvalDate?: date;
    /**
     * Extension for approvalDate
     **/
    _approvalDate?: Element;
    /**
     * When the measure was last reviewed
     * The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.
     * If specified, this date follows the original approval date.
     */
    lastReviewDate?: date;
    /**
     * Extension for lastReviewDate
     **/
    _lastReviewDate?: Element;
    /**
     * When the measure is expected to be used
     * The period during which the measure content was or is planned to be in active use.
     * The effective period for a measure  determines when the content is applicable for usage and is independent of publication and review dates. For example, a measure intended to be used for the year 2016 might be published in 2015.
     */
    effectivePeriod?: Period;
    /**
     * The category of the measure, such as Education, Treatment, Assessment, etc.
     * Descriptive topics related to the content of the measure. Topics provide a high-level categorization grouping types of measures that can be useful for filtering and searching.
     */
    topic?: CodeableConcept[];
    /**
     * Who authored the content
     * An individiual or organization primarily involved in the creation and maintenance of the content.
     */
    author?: ContactDetail[];
    /**
     * Who edited the content
     * An individual or organization primarily responsible for internal coherence of the content.
     */
    editor?: ContactDetail[];
    /**
     * Who reviewed the content
     * An individual or organization primarily responsible for review of some aspect of the content.
     */
    reviewer?: ContactDetail[];
    /**
     * Who endorsed the content
     * An individual or organization responsible for officially endorsing the content for use in some setting.
     */
    endorser?: ContactDetail[];
    /**
     * Additional documentation, citations, etc.
     * Related artifacts such as additional documentation, justification, or bibliographic references.
     * Each related artifact is either an attachment, or a reference to another resource, but not both.
     */
    relatedArtifact?: RelatedArtifact[];
    /**
     * Logic used by the measure
     * A reference to a Library resource containing the formal logic used by the measure.
     */
    library?: canonical[];
    /**
     * Extension for library
     **/
    _library?: Element[];
    /**
     * Disclaimer for use of the measure or its referenced content
     * Notices and disclaimers regarding the use of the measure or related to intellectual property (such as code systems) referenced by the measure.
     */
    disclaimer?: markdown;
    /**
     * Extension for disclaimer
     **/
    _disclaimer?: Element;
    /**
     * proportion | ratio | continuous-variable | cohort
     * 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.
     */
    scoring?: CodeableConcept;
    /**
     * opportunity | all-or-nothing | linear | weighted
     * If this is a composite measure, the scoring method used to combine the component measures to determine the composite score.
     */
    compositeScoring?: CodeableConcept;
    /**
     * process | outcome | structure | patient-reported-outcome | composite
     * 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.
     */
    type?: CodeableConcept[];
    /**
     * How risk adjustment is applied for this measure
     * 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.
     * Describes the method of adjusting for clinical severity and conditions present at the start of care that can influence patient outcomes for making valid comparisons of outcome measures across providers. Indicates whether a measure is subject to the statistical process for reducing, removing, or clarifying the influences of confounding factors to allow for more useful comparisons.
     */
    riskAdjustment?: string;
    /**
     * Extension for riskAdjustment
     **/
    _riskAdjustment?: Element;
    /**
     * How is rate aggregation performed for this measure
     * Describes how to combine the information calculated, based on logic in each of several populations, into one summarized result.
     * The measure rate for an organization or clinician is based upon the entities’ aggregate data and summarizes the performance of the entity over a given time period (e.g., monthly, quarterly, yearly). The aggregated data are derived from the results of a specific measure algorithm and, if appropriate, the application of specific risk adjustment models.  Can also be used to describe how to risk adjust the data based on supplemental data elements described in the eMeasure (e.g., pneumonia hospital measures antibiotic selection in the ICU versus non-ICU and then the roll-up of the two). This could be applied to aggregated cohort measure definitions (e.g., CDC's aggregate reporting for TB at the state level).
     */
    rateAggregation?: string;
    /**
     * Extension for rateAggregation
     **/
    _rateAggregation?: Element;
    /**
     * Detailed description of why the measure exists
     * Provides a succinct statement of the need for the measure. Usually includes statements pertaining to importance criterion: impact, gap in care, and evidence.
     */
    rationale?: markdown;
    /**
     * Extension for rationale
     **/
    _rationale?: Element;
    /**
     * Summary of clinical guidelines
     * Provides a summary of relevant clinical guidelines or other clinical recommendations supporting the measure.
     */
    clinicalRecommendationStatement?: markdown;
    /**
     * Extension for clinicalRecommendationStatement
     **/
    _clinicalRecommendationStatement?: Element;
    /**
     * increase | decrease
     * 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 within a range).
     */
    improvementNotation?: CodeableConcept;
    /**
     * Defined terms used in the measure documentation
     * Provides a description of an individual term used within the measure.
     */
    definition?: markdown[];
    /**
     * Extension for definition
     **/
    _definition?: Element[];
    /**
     * Additional guidance for implementers
     * Additional guidance for the measure including how it can be used in a clinical context, and the intent of the measure.
     */
    guidance?: markdown;
    /**
     * Extension for guidance
     **/
    _guidance?: Element;
    /**
     * Population criteria group
     * A group of population criteria for the measure.
     */
    group?: MeasureGroup[];
    /**
     * What other data should be reported with the measure
     * 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.
     * Note that supplemental data are reported as observations for each patient and included in the evaluatedResources bundle. See the MeasureReport resource or the Quality Reporting topic for more information.
     */
    supplementalData?: MeasureSupplementalData[];
    /**
     * draft | active | retired | unknown
     * The status of this measure. Enables tracking the life-cycle of the content.
     * Allows filtering of measures that are appropriate for use versus not.
     */
    status: MeasurePublicationStatus;
}
/**
 * The populations in the group
 * The populations that make up the population group, one for each type of population appropriate for the measure.
 */
export interface MeasureReportGroupPopulation extends BackboneElement {
    /**
     * initial-population | numerator | numerator-exclusion | denominator | denominator-exclusion | denominator-exception | measure-population | measure-population-exclusion | measure-observation
     * The type of the population.
     */
    code?: CodeableConcept;
    /**
     * Size of the population
     * The number of members of the population.
     */
    count?: integer;
    /**
     * Extension for count
     **/
    _count?: Element;
    /**
     * For subject-list reports, the subject results in this population
     * This element refers to a List of subject level MeasureReport resources, one for each subject in this population.
     */
    subjectResults?: Reference;
}
/**
 * Stratifier component values
 * A stratifier component value.
 */
export interface MeasureReportGroupStratifierStratumComponent extends BackboneElement {
    /**
     * What stratifier component of the group
     * The code for the stratum component value.
     */
    code: CodeableConcept;
    /**
     * The stratum component value, e.g. male
     * The stratum component value.
     */
    value: CodeableConcept;
}
/**
 * Population results in this stratum
 * The populations that make up the stratum, one for each type of population appropriate to the measure.
 */
export interface MeasureReportGroupStratifierStratumPopulation extends BackboneElement {
    /**
     * initial-population | numerator | numerator-exclusion | denominator | denominator-exclusion | denominator-exception | measure-population | measure-population-exclusion | measure-observation
     * The type of the population.
     */
    code?: CodeableConcept;
    /**
     * Size of the population
     * The number of members of the population in this stratum.
     */
    count?: integer;
    /**
     * Extension for count
     **/
    _count?: Element;
    /**
     * For subject-list reports, the subject results in this population
     * This element refers to a List of subject level MeasureReport resources, one for each subject in this population in this stratum.
     */
    subjectResults?: Reference;
}
/**
 * Stratum results, one for each unique value, or set of values, in the stratifier, or stratifier components
 * 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.
 */
export interface MeasureReportGroupStratifierStratum extends BackboneElement {
    /**
     * The stratum value, e.g. male
     * The value for this stratum, expressed as a CodeableConcept. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique.
     */
    value?: CodeableConcept;
    /**
     * Stratifier component values
     * A stratifier component value.
     */
    component?: MeasureReportGroupStratifierStratumComponent[];
    /**
     * Population results in this stratum
     * The populations that make up the stratum, one for each type of population appropriate to the measure.
     */
    population?: MeasureReportGroupStratifierStratumPopulation[];
    /**
     * What score this stratum achieved
     * 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.
     */
    measureScore?: Quantity;
}
/**
 * Stratification results
 * When a measure includes multiple stratifiers, there will be a stratifier group for each stratifier defined by the measure.
 */
export interface MeasureReportGroupStratifier extends BackboneElement {
    /**
     * What stratifier of the group
     * The meaning of this stratifier, as defined in the measure definition.
     */
    code?: CodeableConcept[];
    /**
     * Stratum results, one for each unique value, or set of values, in the stratifier, or stratifier components
     * 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.
     */
    stratum?: MeasureReportGroupStratifierStratum[];
}
/**
 * Measure results for each group
 * The results of the calculation, one for each population group in the measure.
 */
export interface MeasureReportGroup extends BackboneElement {
    /**
     * Meaning of the group
     * The meaning of the population group as defined in the measure definition.
     */
    code?: CodeableConcept;
    /**
     * The populations in the group
     * The populations that make up the population group, one for each type of population appropriate for the measure.
     */
    population?: MeasureReportGroupPopulation[];
    /**
     * What score this group achieved
     * 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.
     */
    measureScore?: Quantity;
    /**
     * Stratification results
     * When a measure includes multiple stratifiers, there will be a stratifier group for each stratifier defined by the measure.
     */
    stratifier?: MeasureReportGroupStratifier[];
}
/**
 * Results of a measure evaluation
 * The MeasureReport resource contains the results of the calculation of a measure; and optionally a reference to the resources involved in that calculation.
 */
export interface MeasureReport extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'MeasureReport';
    /**
     * Additional identifier for the MeasureReport
     * A formal identifier that is used to identify this MeasureReport when it is represented in other formats or referenced in a specification, model, design or an instance.
     * Typically, this is used for identifiers that can go in an HL7 V3 II data type - e.g. to identify this {{title}} outside of FHIR, where the logical URL is not possible to use.
     */
    identifier?: Identifier[];
    /**
     * What measure was calculated
     * A reference to the Measure that was calculated to produce this report.
     */
    measure: canonical;
    /**
     * Extension for measure
     **/
    _measure?: Element;
    /**
     * What individual(s) the report is for
     * Optional subject identifying the individual or individuals the report is for.
     */
    subject?: Reference;
    /**
     * When the report was generated
     * The date this measure report was generated.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Who is reporting the data
     * The individual, location, or organization that is reporting the data.
     */
    reporter?: Reference;
    /**
     * What period the report covers
     * The reporting period for which the report was calculated.
     */
    period: Period;
    /**
     * increase | decrease
     * Whether improvement in the measure is noted by an increase or decrease in the measure score.
     * This element is typically defined by the measure, but reproduced here to ensure the measure score can be interpreted. The element is labeled as a modifier because it changes the interpretation of the reported measure score.
     */
    improvementNotation?: CodeableConcept;
    /**
     * Measure results for each group
     * The results of the calculation, one for each population group in the measure.
     */
    group?: MeasureReportGroup[];
    /**
     * What data was used to calculate the measure score
     * A reference to a Bundle containing the Resources that were used in the calculation of this measure.
     */
    evaluatedResource?: Reference[];
    /**
     * complete | pending | error
     * The MeasureReport status. No data will be available until the MeasureReport status is complete.
     * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
     */
    status: MeasureReportStatus;
    /**
     * individual | subject-list | summary | data-collection
     * The type of measure report. This may be an individual report, which provides the score for the measure for an individual member of the population; a subject-listing, which returns the list of members that meet the various criteria in the measure; a summary report, which returns a population count for each of the criteria in the measure; or a data-collection, which enables the MeasureReport to be used to exchange the data-of-interest for a quality measure.
     * Data-collection reports are used only to communicate data-of-interest for a measure. They do not necessarily include all the data for a particular subject or population, but they may.
     */
    type: MeasureReportType;
}
/**
 * A photo, video, or audio recording acquired or used in healthcare. The actual content may be inline or provided by direct reference
 * A photo, video, or audio recording acquired or used in healthcare. The actual content may be inline or provided by direct reference.
 */
export interface Media extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Media';
    /**
     * Identifier(s) for the image
     * 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.
     * The identifier label and use can be used to determine what kind of identifier it is.
     */
    identifier?: Identifier[];
    /**
     * Procedure that caused this media to be created
     * A procedure that is fulfilled in whole or in part by the creation of this media.
     */
    basedOn?: Reference[];
    /**
     * Part of referenced event
     * A larger event of which this particular event is a component or step.
     * Not to be used to link an event to an Encounter - use Media.encounter for that.

[The allowed reference resources may be adjusted as appropriate for the event resource].
     */
    partOf?: Reference[];
    /**
     * Classification of media as image, video, or audio
     * A code that classifies whether the media is an image, video or audio recording or some other media category.
     */
    type?: CodeableConcept;
    /**
     * The type of acquisition equipment/process
     * 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.
     */
    modality?: CodeableConcept;
    /**
     * Imaging view, e.g. Lateral or Antero-posterior
     * The name of the imaging view e.g. Lateral or Antero-posterior (AP).
     */
    view?: CodeableConcept;
    /**
     * Who/What this Media is a record of
     * Who/What this Media is a record of.
     */
    subject?: Reference;
    /**
     * Encounter associated with media
     * The encounter that establishes the context for this media.
     * This will typically be the encounter the media occurred within.
     */
    encounter?: Reference;
    /**
     * When Media was collected
     * The date and time(s) at which the media was collected.
     */
    createdDateTime?: dateTime;
    /**
     * Extension for createdDateTime
     **/
    _createdDateTime?: Element;
    /**
     * When Media was collected
     * The date and time(s) at which the media was collected.
     */
    createdPeriod?: Period;
    /**
     * Date/Time this version was made available
     * The date and time this version of the media was made available to providers, typically after having been reviewed.
     * It may be the same as the [`lastUpdated` ](resource-definitions.html#Meta.lastUpdated) time of the resource itself.  For Observations that do require review and verification for certain updates, it might not be the same as the `lastUpdated` time of the resource itself due to a non-clinically significant update that does not require the new version to be reviewed and verified again.
     */
    issued?: instant;
    /**
     * Extension for issued
     **/
    _issued?: Element;
    /**
     * The person who generated the image
     * The person who administered the collection of the image.
     */
    operator?: Reference;
    /**
     * Why was event performed?
     * Describes why the event occurred in coded or textual form.
     * Textual reasons can be captured using reasonCode.text.
     */
    reasonCode?: CodeableConcept[];
    /**
     * Observed body part
     * Indicates the site on the subject's body where the observation was made (i.e. the target site).
     * Only used if not implicit in code found in Observation.code.  In many systems, this may be represented as a related observation instead of an inline component.

If the use case requires BodySite to be handled as a separate resource (e.g. to identify and track separately) then use the standard extension[ bodySite](extension-bodysite.html).
     */
    bodySite?: CodeableConcept;
    /**
     * Name of the device/manufacturer
     * The name of the device / manufacturer of the device  that was used to make the recording.
     */
    deviceName?: string;
    /**
     * Extension for deviceName
     **/
    _deviceName?: Element;
    /**
     * Observing Device
     * The device used to collect the media.
     * An extension should be used if further typing of the device is needed.  Secondary devices used to support collecting a media can be represented using either extension or through the Observation.related element.
     */
    device?: Reference;
    /**
     * Height of the image in pixels (photo/video)
     * Height of the image in pixels (photo/video).
     */
    height?: positiveInt;
    /**
     * Extension for height
     **/
    _height?: Element;
    /**
     * Width of the image in pixels (photo/video)
     * Width of the image in pixels (photo/video).
     */
    width?: positiveInt;
    /**
     * Extension for width
     **/
    _width?: Element;
    /**
     * Number of frames if > 1 (photo)
     * 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.
     * if the number of frames is not supplied, the value may be unknown. Applications should not assume that there is only one frame unless it is explicitly stated.
     */
    frames?: positiveInt;
    /**
     * Extension for frames
     **/
    _frames?: Element;
    /**
     * Length in seconds (audio / video)
     * The duration of the recording in seconds - for audio and video.
     * The duration might differ from occurrencePeriod if recording was paused.
     */
    duration?: decimal;
    /**
     * Extension for duration
     **/
    _duration?: Element;
    /**
     * Actual Media - reference or data
     * The actual content of the media - inline or by direct reference to the media source file.
     * Recommended content types: image/jpeg, image/png, image/tiff, video/mpeg, audio/mp4, application/dicom. Application/dicom can contain the transfer syntax as a parameter.  For media that covers a period of time (video/sound), the content.creationTime is the end time. Creation time is used for tracking, organizing versions and searching.
     */
    content: Attachment;
    /**
     * Comments made about the media
     * Comments made about the media by the performer, subject or other participants.
     * Not to be used for observations, conclusions, etc. Instead use an [Observation](observation.html) based on the Media/ImagingStudy resource.
     */
    note?: Annotation[];
    /**
     * preparation | in-progress | not-done | on-hold | stopped | completed | entered-in-error | unknown
     * The current state of the {{title}}.
     * A nominal state-transition diagram can be found in the [[event.html#statemachine | Event pattern]] documentation

Unknown does not represent "other" - one of the defined statuses must apply.  Unknown is used when the authoring system is not sure what the current status is.
     */
    status: MediaStatus;
}
/**
 * Active or inactive ingredient
 * Identifies a particular constituent of interest in the product.
 * The ingredients need not be a complete list.  If an ingredient is not specified, this does not indicate whether an ingredient is present or absent.  If an ingredient is specified it does not mean that all ingredients are specified.  It is possible to specify both inactive and active ingredients.
 */
export interface MedicationIngredient extends BackboneElement {
    /**
     * The actual ingredient or content
     * The actual ingredient - either a substance (simple ingredient) or another medication of a medication.
     */
    itemCodeableConcept?: CodeableConcept;
    /**
     * The actual ingredient or content
     * The actual ingredient - either a substance (simple ingredient) or another medication of a medication.
     */
    itemReference?: Reference;
    /**
     * Active ingredient indicator
     * Indication of whether this ingredient affects the therapeutic action of the drug.
     */
    isActive?: boolean;
    /**
     * Extension for isActive
     **/
    _isActive?: Element;
    /**
     * Quantity of ingredient present
     * 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.
     */
    strength?: Ratio;
}
/**
 * Details about packaged medications
 * Information that only applies to packages (not products).
 */
export interface MedicationBatch extends BackboneElement {
    /**
     * Identifier assigned to batch
     * The assigned lot number of a batch of the specified product.
     */
    lotNumber?: string;
    /**
     * Extension for lotNumber
     **/
    _lotNumber?: Element;
    /**
     * When batch will expire
     * When this specific batch of product will expire.
     */
    expirationDate?: dateTime;
    /**
     * Extension for expirationDate
     **/
    _expirationDate?: Element;
}
/**
 * Definition of a Medication
 * This resource is primarily used for the identification and definition of a medication for the purposes of prescribing, dispensing, and administering a medication as well as for making statements about medication use.
 */
export interface Medication extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Medication';
    /**
     * Business identifier for this medication
     * Business identifier for this medication.
     * The serial number could be included as an identifier.
     */
    identifier?: Identifier[];
    /**
     * Codes that identify this medication
     * 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.
     * Depending on the context of use, the code that was actually selected by the user (prescriber, dispenser, etc.) will have the coding.userSelected set to true.  As described in the coding datatype: "A coding may be marked as a "userSelected" if a user selected the particular coded value in a user interface (e.g. the user selects an item in a pick-list). If a user selected coding exists, it is the preferred choice for performing translations etc. Other codes can only be literal translations to alternative code systems, or codes at a lower level of granularity (e.g. a generic code for a vendor-specific primary one).
     */
    code?: CodeableConcept;
    /**
     * Manufacturer of the item
     * Describes the details of the manufacturer of the medication product.  This is not intended to represent the distributor of a medication product.
     */
    manufacturer?: Reference;
    /**
     * powder | tablets | capsule +
     * Describes the form of the item.  Powder; tablets; capsule.
     * When Medication is referenced from MedicationRequest, this is the ordered form.  When Medication is referenced within MedicationDispense, this is the dispensed form.  When Medication is referenced within MedicationAdministration, this is administered form.
     */
    form?: CodeableConcept;
    /**
     * Amount of drug in package
     * Specific amount of the drug in the packaged product.  For example, when specifying a product that has the same strength (For example, Insulin glargine 100 unit per mL solution for injection), this attribute provides additional clarification of the package amount (For example, 3 mL, 10mL, etc.).
     */
    amount?: Ratio;
    /**
     * Active or inactive ingredient
     * Identifies a particular constituent of interest in the product.
     * The ingredients need not be a complete list.  If an ingredient is not specified, this does not indicate whether an ingredient is present or absent.  If an ingredient is specified it does not mean that all ingredients are specified.  It is possible to specify both inactive and active ingredients.
     */
    ingredient?: MedicationIngredient[];
    /**
     * Details about packaged medications
     * Information that only applies to packages (not products).
     */
    batch?: MedicationBatch;
    /**
     * active | inactive | entered-in-error
     * A code to indicate if the medication is in active use.
     * This status is intended to identify if the medication in a local system is in active use within a drug database or inventory.  For example, a pharmacy system may create a new drug file record for a compounded product "ABC Hospital Special Cream" with an active status.  At some point in the future, it may be determined that the drug record was created with an error and the status is changed to "entered in error".   This status is not intended to specify if a medication is part of a particular formulary.  It is possible that the drug record may be referenced by multiple formularies or catalogues and each of those entries would have a separate status.
     */
    status?: MedicationStatus;
}
/**
 * Who performed the medication administration and what they did
 * Indicates who or what performed the medication administration and how they were involved.
 */
export interface MedicationAdministrationPerformer extends BackboneElement {
    /**
     * Type of performance
     * Distinguishes the type of involvement of the performer in the medication administration.
     */
    function?: CodeableConcept;
    /**
     * Who performed the medication administration
     * Indicates who or what performed the medication administration.
     */
    actor: Reference;
}
/**
 * Details of how medication was taken
 * Describes the medication dosage information details e.g. dose, rate, site, route, etc.
 */
export interface MedicationAdministrationDosage extends BackboneElement {
    /**
     * Free text dosage instructions e.g. SIG
     * 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.
     */
    text?: string;
    /**
     * Extension for text
     **/
    _text?: Element;
    /**
     * Body site administered to
     * A coded specification of the anatomic site where the medication first entered the body.  For example, "left arm".
     * If the use case requires attributes from the BodySite resource (e.g. to identify and track separately) then use the standard extension [bodySite](extension-bodysite.html).  May be a summary code, or a reference to a very precise definition of the location, or both.
     */
    site?: CodeableConcept;
    /**
     * Path of substance into body
     * A code specifying the route or physiological path of administration of a therapeutic agent into or onto the patient.  For example, topical, intravenous, etc.
     */
    route?: CodeableConcept;
    /**
     * How drug was administered
     * 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.
     * One of the reasons this attribute is not used often, is that the method is often pre-coordinated with the route and/or form of administration.  This means the codes used in route or form may pre-coordinate the method in the route code or the form code.  The implementation decision about what coding system to use for route or form code will determine how frequently the method code will be populated e.g. if route or form code pre-coordinate method code, then this attribute will not be populated often; if there is no pre-coordination then method code may  be used frequently.
     */
    method?: CodeableConcept;
    /**
     * Amount of medication per dose
     * 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.
     * If the administration is not instantaneous (rate is present), this can be specified to convey the total amount administered over period of time of a single administration.
     */
    dose?: Quantity;
    /**
     * Dose quantity per unit of time
     * 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.
     * If the rate changes over time, and you want to capture this in MedicationAdministration, then each change should be captured as a distinct MedicationAdministration, with a specific MedicationAdministration.dosage.rate, and the date time when the rate change occurred. Typically, the MedicationAdministration.dosage.rate element is not used to convey an average rate.
     */
    rateRatio?: Ratio;
    /**
     * Dose quantity per unit of time
     * 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.
     * If the rate changes over time, and you want to capture this in MedicationAdministration, then each change should be captured as a distinct MedicationAdministration, with a specific MedicationAdministration.dosage.rate, and the date time when the rate change occurred. Typically, the MedicationAdministration.dosage.rate element is not used to convey an average rate.
     */
    rateQuantity?: Quantity;
}
/**
 * Administration of medication to a patient
 * 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.
 */
export interface MedicationAdministration extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'MedicationAdministration';
    /**
     * External identifier
     * Identifiers associated with this Medication Administration 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. They are business identifiers assigned to this resource by the performer or other systems and remain constant as the resource is updated and propagates from server to server.
     * This is a business identifier, not a resource identifier.
     */
    identifier?: Identifier[];
    /**
     * Instantiates protocol or definition
     * A protocol, guideline, orderset, or other definition that was adhered to in whole or in part by this event.
     */
    instantiates?: uri[];
    /**
     * Extension for instantiates
     **/
    _instantiates?: Element[];
    /**
     * Part of referenced event
     * A larger event of which this particular event is a component or step.
     */
    partOf?: Reference[];
    /**
     * Reason administration not performed
     * A code indicating why the administration was not performed.
     */
    statusReason?: CodeableConcept[];
    /**
     * Type of medication usage
     * Indicates where the medication is expected to be consumed or administered.
     */
    category?: CodeableConcept;
    /**
     * What was administered
     * 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.
     * If only a code is specified, then it needs to be a code for a specific product. If more information is required, then the use of the medication resource is recommended.  For example, if you require form or lot number, then you must reference the Medication resource.
     */
    medicationCodeableConcept?: CodeableConcept;
    /**
     * What was administered
     * 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.
     * If only a code is specified, then it needs to be a code for a specific product. If more information is required, then the use of the medication resource is recommended.  For example, if you require form or lot number, then you must reference the Medication resource.
     */
    medicationReference?: Reference;
    /**
     * Who received medication
     * The person or animal or group receiving the medication.
     */
    subject: Reference;
    /**
     * Encounter or Episode of Care administered as part of
     * The visit, admission, or other contact between patient and health care provider during which the medication administration was performed.
     */
    context?: Reference;
    /**
     * Additional information to support administration
     * Additional information (for example, patient height and weight) that supports the administration of the medication.
     */
    supportingInformation?: Reference[];
    /**
     * Start and end time of administration
     * 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.
     */
    effectiveDateTime?: dateTime;
    /**
     * Extension for effectiveDateTime
     **/
    _effectiveDateTime?: Element;
    /**
     * Start and end time of administration
     * 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.
     */
    effectivePeriod?: Period;
    /**
     * Who performed the medication administration and what they did
     * Indicates who or what performed the medication administration and how they were involved.
     */
    performer?: MedicationAdministrationPerformer[];
    /**
     * Reason administration performed
     * A code indicating why the medication was given.
     */
    reasonCode?: CodeableConcept[];
    /**
     * Condition or observation that supports why the medication was administered
     * Condition or observation that supports why the medication was administered.
     * This is a reference to a condition that is the reason for the medication request.  If only a code exists, use reasonCode.
     */
    reasonReference?: Reference[];
    /**
     * Request administration performed against
     * The original request, instruction or authority to perform the administration.
     * This is a reference to the MedicationRequest  where the intent is either order or instance-order.  It should not reference MedicationRequests where the intent is any other value.
     */
    request?: Reference;
    /**
     * Device used to administer
     * The device used in administering the medication to the patient.  For example, a particular infusion pump.
     */
    device?: Reference[];
    /**
     * Information about the administration
     * Extra information about the medication administration that is not conveyed by the other attributes.
     */
    note?: Annotation[];
    /**
     * Details of how medication was taken
     * Describes the medication dosage information details e.g. dose, rate, site, route, etc.
     */
    dosage?: MedicationAdministrationDosage;
    /**
     * A list of events of interest in the lifecycle
     * A summary of the events of interest that have occurred, such as when the administration was verified.
     * This might not include provenances for all versions of the request – only those deemed “relevant” or important. This SHALL NOT include the Provenance associated with this current version of the resource. (If that provenance is deemed to be a “relevant” change, it will need to be added as part of a later update. Until then, it can be queried directly as the Provenance that points to this version using _revinclude All Provenances should have some historical version of this Request as their subject.
     */
    eventHistory?: Reference[];
    /**
     * in-progress | not-done | on-hold | completed | entered-in-error | stopped | unknown
     * 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.
     * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
     */
    status: MedicationAdministrationStatus;
}
/**
 * Who performed event
 * Indicates who or what performed the event.
 */
export interface MedicationDispensePerformer extends BackboneElement {
    /**
     * Who performed the dispense and what they did
     * Distinguishes the type of performer in the dispense.  For example, date enterer, packager, final checker.
     */
    function?: CodeableConcept;
    /**
     * Individual who was performing
     * The device, practitioner, etc. who performed the action.  It should be assumed that the actor is the dispenser of the medication.
     */
    actor: Reference;
}
/**
 * Whether a substitution was performed on the dispense
 * 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.
 */
export interface MedicationDispenseSubstitution extends BackboneElement {
    /**
     * Whether a substitution was or was not performed on the dispense
     * True if the dispenser dispensed a different drug or product from what was prescribed.
     */
    wasSubstituted: boolean;
    /**
     * Extension for wasSubstituted
     **/
    _wasSubstituted?: Element;
    /**
     * Code signifying whether a different drug was dispensed from what was prescribed
     * A code signifying whether a different drug was dispensed from what was prescribed.
     */
    type?: CodeableConcept;
    /**
     * Why was substitution made
     * Indicates the reason for the substitution (or lack of substitution) from what was prescribed.
     */
    reason?: CodeableConcept[];
    /**
     * Who is responsible for the substitution
     * The person or organization that has primary responsibility for the substitution.
     */
    responsibleParty?: Reference[];
}
/**
 * Dispensing a medication to a named patient
 * 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.
 */
export interface MedicationDispense extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'MedicationDispense';
    /**
     * External identifier
     * Identifiers associated with this Medication Dispense 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. They are business identifiers assigned to this resource by the performer or other systems and remain constant as the resource is updated and propagates from server to server.
     * This is a business identifier, not a resource identifier.
     */
    identifier?: Identifier[];
    /**
     * Event that dispense is part of
     * The procedure that trigger the dispense.
     */
    partOf?: Reference[];
    /**
     * Why a dispense was not performed
     * Indicates the reason why a dispense was not performed.
     */
    statusReasonCodeableConcept?: CodeableConcept;
    /**
     * Why a dispense was not performed
     * Indicates the reason why a dispense was not performed.
     */
    statusReasonReference?: Reference;
    /**
     * Type of medication dispense
     * Indicates the type of medication dispense (for example, where the medication is expected to be consumed or administered (i.e. inpatient or outpatient)).
     * The category can be used to include where the medication is expected to be consumed or other types of dispenses.  Invariants can be used to bind to different value sets when profiling to bind.
     */
    category?: CodeableConcept;
    /**
     * What medication was supplied
     * 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.
     * If only a code is specified, then it needs to be a code for a specific product. If more information is required, then the use of the medication resource is recommended.  For example, if you require form or lot number, then you must reference the Medication resource.
     */
    medicationCodeableConcept?: CodeableConcept;
    /**
     * What medication was supplied
     * 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.
     * If only a code is specified, then it needs to be a code for a specific product. If more information is required, then the use of the medication resource is recommended.  For example, if you require form or lot number, then you must reference the Medication resource.
     */
    medicationReference?: Reference;
    /**
     * Who the dispense is for
     * A link to a resource representing the person or the group to whom the medication will be given.
     * SubstanceAdministration->subject->Patient.
     */
    subject?: Reference;
    /**
     * Encounter / Episode associated with event
     * The encounter or episode of care that establishes the context for this event.
     */
    context?: Reference;
    /**
     * Information that supports the dispensing of the medication
     * Additional information that supports the medication being dispensed.
     */
    supportingInformation?: Reference[];
    /**
     * Who performed event
     * Indicates who or what performed the event.
     */
    performer?: MedicationDispensePerformer[];
    /**
     * Where the dispense occurred
     * The principal physical location where the dispense was performed.
     */
    location?: Reference;
    /**
     * Medication order that authorizes the dispense
     * Indicates the medication order that is being dispensed against.
     * Maps to basedOn in Event logical model.
     */
    authorizingPrescription?: Reference[];
    /**
     * Trial fill, partial fill, emergency fill, etc.
     * Indicates the type of dispensing event that is performed. For example, Trial Fill, Completion of Trial, Partial Fill, Emergency Fill, Samples, etc.
     */
    type?: CodeableConcept;
    /**
     * Amount dispensed
     * The amount of medication that has been dispensed. Includes unit of measure.
     */
    quantity?: Quantity;
    /**
     * Amount of medication expressed as a timing amount
     * The amount of medication expressed as a timing amount.
     */
    daysSupply?: Quantity;
    /**
     * When product was packaged and reviewed
     * The time when the dispensed product was packaged and reviewed.
     */
    whenPrepared?: dateTime;
    /**
     * Extension for whenPrepared
     **/
    _whenPrepared?: Element;
    /**
     * When product was given out
     * The time the dispensed product was provided to the patient or their representative.
     */
    whenHandedOver?: dateTime;
    /**
     * Extension for whenHandedOver
     **/
    _whenHandedOver?: Element;
    /**
     * Where the medication was sent
     * Identification of the facility/location where the medication was shipped to, as part of the dispense event.
     */
    destination?: Reference;
    /**
     * Who collected the medication
     * 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.
     */
    receiver?: Reference[];
    /**
     * Information about the dispense
     * Extra information about the dispense that could not be conveyed in the other attributes.
     */
    note?: Annotation[];
    /**
     * How the medication is to be used by the patient or administered by the caregiver
     * Indicates how the medication is to be used by the patient.
     * When the dose or rate is intended to change over the entire administration period (e.g. Tapering dose prescriptions), multiple instances of dosage instructions will need to be supplied to convey the different doses/rates.
The pharmacist reviews the medication order prior to dispense and updates the dosageInstruction based on the actual product being dispensed.
     */
    dosageInstruction?: Dosage[];
    /**
     * Whether a substitution was performed on the dispense
     * 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.
     */
    substitution?: MedicationDispenseSubstitution;
    /**
     * Clinical issue with 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, duplicate therapy, dosage alert etc.
     * This element can include a detected issue that has been identified either by a decision support system or by a clinician and may include information on the steps that were taken to address the issue.
     */
    detectedIssue?: Reference[];
    /**
     * A list of relevant lifecycle events
     * A summary of the events of interest that have occurred, such as when the dispense was verified.
     * This might not include provenances for all versions of the request – only those deemed “relevant” or important. This SHALL NOT include the Provenance associated with this current version of the resource. (If that provenance is deemed to be a “relevant” change, it will need to be added as part of a later update. Until then, it can be queried directly as the Provenance that points to this version using _revinclude All Provenances should have some historical version of this Request as their subject.).
     */
    eventHistory?: Reference[];
    /**
     * preparation | in-progress | cancelled | on-hold | completed | entered-in-error | stopped | declined | unknown
     * A code specifying the state of the set of dispense events.
     * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
     */
    status: MedicationDispenseStatus;
}
/**
 * Associated or related medication information
 * Associated or related knowledge about a medication.
 */
export interface MedicationKnowledgeRelatedMedicationKnowledge extends BackboneElement {
    /**
     * Category of medicationKnowledge
     * The category of the associated medication knowledge reference.
     */
    type: CodeableConcept;
    /**
     * Associated documentation about the associated medication knowledge
     * Associated documentation about the associated medication knowledge.
     */
    reference: Reference[];
}
/**
 * Associated documentation about the medication
 * Associated documentation about the medication.
 */
export interface MedicationKnowledgeMonograph extends BackboneElement {
    /**
     * The category of medication document
     * The category of documentation about the medication. (e.g. professional monograph, patient education monograph).
     */
    type?: CodeableConcept;
    /**
     * Associated documentation about the medication
     * Associated documentation about the medication.
     */
    source?: Reference;
}
/**
 * Active or inactive ingredient
 * Identifies a particular constituent of interest in the product.
 */
export interface MedicationKnowledgeIngredient extends BackboneElement {
    /**
     * Medication(s) or substance(s) contained in the medication
     * The actual ingredient - either a substance (simple ingredient) or another medication.
     */
    itemCodeableConcept?: CodeableConcept;
    /**
     * Medication(s) or substance(s) contained in the medication
     * The actual ingredient - either a substance (simple ingredient) or another medication.
     */
    itemReference?: Reference;
    /**
     * Active ingredient indicator
     * Indication of whether this ingredient affects the therapeutic action of the drug.
     */
    isActive?: boolean;
    /**
     * Extension for isActive
     **/
    _isActive?: Element;
    /**
     * Quantity of ingredient present
     * 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.
     */
    strength?: Ratio;
}
/**
 * The pricing of the medication
 * The price of the medication.
 */
export interface MedicationKnowledgeCost extends BackboneElement {
    /**
     * The category of the cost information
     * The category of the cost information.  For example, manufacturers' cost, patient cost, claim reimbursement cost, actual acquisition cost.
     */
    type: CodeableConcept;
    /**
     * The source or owner for the price information
     * The source or owner that assigns the price to the medication.
     */
    source?: string;
    /**
     * Extension for source
     **/
    _source?: Element;
    /**
     * The price of the medication
     * The price of the medication.
     */
    cost: Money;
}
/**
 * Program under which a medication is reviewed
 * The program under which the medication is reviewed.
 */
export interface MedicationKnowledgeMonitoringProgram extends BackboneElement {
    /**
     * Type of program under which the medication is monitored
     * Type of program under which the medication is monitored.
     */
    type?: CodeableConcept;
    /**
     * Name of the reviewing program
     * Name of the reviewing program.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
}
/**
 * Dosage for the medication for the specific guidelines
 * Dosage for the medication for the specific guidelines.
 */
export interface MedicationKnowledgeAdministrationGuidelinesDosage extends BackboneElement {
    /**
     * Type of dosage
     * The type of dosage (for example, prophylaxis, maintenance, therapeutic, etc.).
     */
    type: CodeableConcept;
    /**
     * Dosage for the medication for the specific guidelines
     * Dosage for the medication for the specific guidelines.
     */
    dosage: Dosage[];
}
/**
 * Characteristics of the patient that are relevant to the administration guidelines
 * Characteristics of the patient that are relevant to the administration guidelines (for example, height, weight, gender, etc.).
 */
export interface MedicationKnowledgeAdministrationGuidelinesPatientCharacteristics extends BackboneElement {
    /**
     * Specific characteristic that is relevant to the administration guideline
     * Specific characteristic that is relevant to the administration guideline (e.g. height, weight, gender).
     */
    characteristicCodeableConcept?: CodeableConcept;
    /**
     * Specific characteristic that is relevant to the administration guideline
     * Specific characteristic that is relevant to the administration guideline (e.g. height, weight, gender).
     */
    characteristicQuantity?: Quantity;
    /**
     * The specific characteristic
     * The specific characteristic (e.g. height, weight, gender, etc.).
     */
    value?: string[];
    /**
     * Extension for value
     **/
    _value?: Element[];
}
/**
 * Guidelines for administration of the medication
 * Guidelines for the administration of the medication.
 */
export interface MedicationKnowledgeAdministrationGuidelines extends BackboneElement {
    /**
     * Dosage for the medication for the specific guidelines
     * Dosage for the medication for the specific guidelines.
     */
    dosage?: MedicationKnowledgeAdministrationGuidelinesDosage[];
    /**
     * Indication for use that apply to the specific administration guidelines
     * Indication for use that apply to the specific administration guidelines.
     */
    indicationCodeableConcept?: CodeableConcept;
    /**
     * Indication for use that apply to the specific administration guidelines
     * Indication for use that apply to the specific administration guidelines.
     */
    indicationReference?: Reference;
    /**
     * Characteristics of the patient that are relevant to the administration guidelines
     * Characteristics of the patient that are relevant to the administration guidelines (for example, height, weight, gender, etc.).
     */
    patientCharacteristics?: MedicationKnowledgeAdministrationGuidelinesPatientCharacteristics[];
}
/**
 * Categorization of the medication within a formulary or classification system
 * Categorization of the medication within a formulary or classification system.
 */
export interface MedicationKnowledgeMedicineClassification extends BackboneElement {
    /**
     * The type of category for the medication (for example, therapeutic classification, therapeutic sub-classification)
     * The type of category for the medication (for example, therapeutic classification, therapeutic sub-classification).
     */
    type: CodeableConcept;
    /**
     * Specific category assigned to the medication
     * Specific category assigned to the medication (e.g. anti-infective, anti-hypertensive, antibiotic, etc.).
     */
    classification?: CodeableConcept[];
}
/**
 * Details about packaged medications
 * Information that only applies to packages (not products).
 */
export interface MedicationKnowledgePackaging extends BackboneElement {
    /**
     * A code that defines the specific type of packaging that the medication can be found in
     * A code that defines the specific type of packaging that the medication can be found in (e.g. blister sleeve, tube, bottle).
     */
    type?: CodeableConcept;
    /**
     * The number of product units the package would contain if fully loaded
     * The number of product units the package would contain if fully loaded.
     */
    quantity?: Quantity;
}
/**
 * Specifies descriptive properties of the medicine
 * Specifies descriptive properties of the medicine, such as color, shape, imprints, etc.
 */
export interface MedicationKnowledgeDrugCharacteristic extends BackboneElement {
    /**
     * Code specifying the type of characteristic of medication
     * A code specifying which characteristic of the medicine is being described (for example, colour, shape, imprint).
     */
    type?: CodeableConcept;
    /**
     * Description of the characteristic
     * Description of the characteristic.
     * The description should be provided as a CodeableConcept, SimpleQuantity or an image.  The description can be a string only when these others are not available.
     */
    valueCodeableConcept?: CodeableConcept;
    /**
     * Description of the characteristic
     * Description of the characteristic.
     * The description should be provided as a CodeableConcept, SimpleQuantity or an image.  The description can be a string only when these others are not available.
     */
    valueString?: string;
    /**
     * Extension for valueString
     **/
    _valueString?: Element;
    /**
     * Description of the characteristic
     * Description of the characteristic.
     * The description should be provided as a CodeableConcept, SimpleQuantity or an image.  The description can be a string only when these others are not available.
     */
    valueQuantity?: Quantity;
    /**
     * Description of the characteristic
     * Description of the characteristic.
     * The description should be provided as a CodeableConcept, SimpleQuantity or an image.  The description can be a string only when these others are not available.
     */
    valueBase64Binary?: base64Binary;
    /**
     * Extension for valueBase64Binary
     **/
    _valueBase64Binary?: Element;
}
/**
 * Specifies if changes are allowed when dispensing a medication from a regulatory perspective
 * Specifies if changes are allowed when dispensing a medication from a regulatory perspective.
 */
export interface MedicationKnowledgeRegulatorySubstitution extends BackboneElement {
    /**
     * Specifies the type of substitution allowed
     * Specifies the type of substitution allowed.
     */
    type: CodeableConcept;
    /**
     * Specifies if regulation allows for changes in the medication when dispensing
     * Specifies if regulation allows for changes in the medication when dispensing.
     */
    allowed: boolean;
    /**
     * Extension for allowed
     **/
    _allowed?: Element;
}
/**
 * Specifies the schedule of a medication in jurisdiction
 * Specifies the schedule of a medication in jurisdiction.
 */
export interface MedicationKnowledgeRegulatorySchedule extends BackboneElement {
    /**
     * Specifies the specific drug schedule
     * Specifies the specific drug schedule.
     */
    schedule: CodeableConcept;
}
/**
 * The maximum number of units of the medication that can be dispensed in a period
 * The maximum number of units of the medication that can be dispensed in a period.
 */
export interface MedicationKnowledgeRegulatoryMaxDispense extends BackboneElement {
    /**
     * The maximum number of units of the medication that can be dispensed
     * The maximum number of units of the medication that can be dispensed.
     */
    quantity: Quantity;
    /**
     * The period that applies to the maximum number of units
     * The period that applies to the maximum number of units.
     */
    period?: Duration;
}
/**
 * Regulatory information about a medication
 * Regulatory information about a medication.
 */
export interface MedicationKnowledgeRegulatory extends BackboneElement {
    /**
     * Specifies the authority of the regulation
     * The authority that is specifying the regulations.
     */
    regulatoryAuthority: Reference;
    /**
     * Specifies if changes are allowed when dispensing a medication from a regulatory perspective
     * Specifies if changes are allowed when dispensing a medication from a regulatory perspective.
     */
    substitution?: MedicationKnowledgeRegulatorySubstitution[];
    /**
     * Specifies the schedule of a medication in jurisdiction
     * Specifies the schedule of a medication in jurisdiction.
     */
    schedule?: MedicationKnowledgeRegulatorySchedule[];
    /**
     * The maximum number of units of the medication that can be dispensed in a period
     * The maximum number of units of the medication that can be dispensed in a period.
     */
    maxDispense?: MedicationKnowledgeRegulatoryMaxDispense;
}
/**
 * The time course of drug absorption, distribution, metabolism and excretion of a medication from the body
 * The time course of drug absorption, distribution, metabolism and excretion of a medication from the body.
 */
export interface MedicationKnowledgeKinetics extends BackboneElement {
    /**
     * The drug concentration measured at certain discrete points in time
     * The drug concentration measured at certain discrete points in time.
     */
    areaUnderCurve?: Quantity[];
    /**
     * The median lethal dose of a drug
     * The median lethal dose of a drug.
     */
    lethalDose50?: Quantity[];
    /**
     * Time required for concentration in the body to decrease by half
     * The time required for any specified property (e.g., the concentration of a substance in the body) to decrease by half.
     */
    halfLifePeriod?: Duration;
}
/**
 * Definition of Medication Knowledge
 * Information about a medication that is used to support knowledge.
 */
export interface MedicationKnowledge extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'MedicationKnowledge';
    /**
     * Code that identifies this medication
     * A code that specifies 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.
     * Depending on the context of use, the code that was actually selected by the user (prescriber, dispenser, etc.) will have the coding.userSelected set to true.  As described in the coding datatype: "A coding may be marked as a "userSelected" if a user selected the particular coded value in a user interface (e.g. the user selects an item in a pick-list). If a user selected coding exists, it is the preferred choice for performing translations etc. Other codes can only be literal translations to alternative code systems, or codes at a lower level of granularity (e.g. a generic code for a vendor-specific primary one).
     */
    code?: CodeableConcept;
    /**
     * Manufacturer of the item
     * Describes the details of the manufacturer of the medication product.  This is not intended to represent the distributor of a medication product.
     */
    manufacturer?: Reference;
    /**
     * powder | tablets | capsule +
     * Describes the form of the item.  Powder; tablets; capsule.
     * When Medication is referenced from MedicationRequest, this is the ordered form.  When Medication is referenced within MedicationDispense, this is the dispensed form.  When Medication is referenced within MedicationAdministration, this is administered form.
     */
    doseForm?: CodeableConcept;
    /**
     * Amount of drug in package
     * Specific amount of the drug in the packaged product.  For example, when specifying a product that has the same strength (For example, Insulin glargine 100 unit per mL solution for injection), this attribute provides additional clarification of the package amount (For example, 3 mL, 10mL, etc.).
     * This is the quantity of medication in a package.  To specify the strength of the medication, the Ingredient.strength attribute is used.
     */
    amount?: Quantity;
    /**
     * Additional names for a medication
     * Additional names for a medication, for example, the name(s) given to a medication in different countries.  For example, acetaminophen and paracetamol or salbutamol and albuterol.
     */
    synonym?: string[];
    /**
     * Extension for synonym
     **/
    _synonym?: Element[];
    /**
     * Associated or related medication information
     * Associated or related knowledge about a medication.
     */
    relatedMedicationKnowledge?: MedicationKnowledgeRelatedMedicationKnowledge[];
    /**
     * A medication resource that is associated with this medication
     * Associated or related medications.  For example, if the medication is a branded product (e.g. Crestor), this is the Therapeutic Moeity (e.g. Rosuvastatin) or if this is a generic medication (e.g. Rosuvastatin), this would link to a branded product (e.g. Crestor).
     */
    associatedMedication?: Reference[];
    /**
     * Category of the medication or product
     * Category of the medication or product (e.g. branded product, therapeutic moeity, generic product, innovator product, etc.).
     */
    productType?: CodeableConcept[];
    /**
     * Associated documentation about the medication
     * Associated documentation about the medication.
     */
    monograph?: MedicationKnowledgeMonograph[];
    /**
     * Active or inactive ingredient
     * Identifies a particular constituent of interest in the product.
     */
    ingredient?: MedicationKnowledgeIngredient[];
    /**
     * The instructions for preparing the medication
     * The instructions for preparing the medication.
     */
    preparationInstruction?: markdown;
    /**
     * Extension for preparationInstruction
     **/
    _preparationInstruction?: Element;
    /**
     * The intended or approved route of administration
     * The intended or approved route of administration.
     */
    intendedRoute?: CodeableConcept[];
    /**
     * The pricing of the medication
     * The price of the medication.
     */
    cost?: MedicationKnowledgeCost[];
    /**
     * Program under which a medication is reviewed
     * The program under which the medication is reviewed.
     */
    monitoringProgram?: MedicationKnowledgeMonitoringProgram[];
    /**
     * Guidelines for administration of the medication
     * Guidelines for the administration of the medication.
     */
    administrationGuidelines?: MedicationKnowledgeAdministrationGuidelines[];
    /**
     * Categorization of the medication within a formulary or classification system
     * Categorization of the medication within a formulary or classification system.
     */
    medicineClassification?: MedicationKnowledgeMedicineClassification[];
    /**
     * Details about packaged medications
     * Information that only applies to packages (not products).
     */
    packaging?: MedicationKnowledgePackaging;
    /**
     * Specifies descriptive properties of the medicine
     * Specifies descriptive properties of the medicine, such as color, shape, imprints, etc.
     */
    drugCharacteristic?: MedicationKnowledgeDrugCharacteristic[];
    /**
     * Potential clinical issue with or between medication(s)
     * Potential clinical issue with or between medication(s) (for example, drug-drug interaction, drug-disease contraindication, drug-allergy interaction, etc.).
     */
    contraindication?: Reference[];
    /**
     * Regulatory information about a medication
     * Regulatory information about a medication.
     */
    regulatory?: MedicationKnowledgeRegulatory[];
    /**
     * The time course of drug absorption, distribution, metabolism and excretion of a medication from the body
     * The time course of drug absorption, distribution, metabolism and excretion of a medication from the body.
     */
    kinetics?: MedicationKnowledgeKinetics[];
    /**
     * active | inactive | entered-in-error
     * A code to indicate if the medication is in active use.  The status refers to the validity about the information of the medication and not to its medicinal properties.
     * This status is intended to identify if the medication in a local system is in active use within a drug database or inventory.  For example, a pharmacy system may create a new drug file record for a compounded product "ABC Hospital Special Cream" with an active status.  At some point in the future, it may be determined that the drug record was created with an error and the status is changed to "entered in error".   This status is not intended to specify if a medication is part of a particular formulary.  It is possible that the drug record may be referenced by multiple formularies or catalogues and each of those entries would have a separate status.
     */
    status?: MedicationKnowledgeStatus;
}
/**
 * First fill details
 * Indicates the quantity or duration for the first dispense of the medication.
 * If populating this element, either the quantity or the duration must be included.
 */
export interface MedicationRequestDispenseRequestInitialFill extends BackboneElement {
    /**
     * First fill quantity
     * The amount or quantity to provide as part of the first dispense.
     */
    quantity?: Quantity;
    /**
     * First fill duration
     * The length of time that the first dispense is expected to last.
     */
    duration?: Duration;
}
/**
 * Medication supply authorization
 * 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.
 */
export interface MedicationRequestDispenseRequest extends BackboneElement {
    /**
     * First fill details
     * Indicates the quantity or duration for the first dispense of the medication.
     * If populating this element, either the quantity or the duration must be included.
     */
    initialFill?: MedicationRequestDispenseRequestInitialFill;
    /**
     * Minimum period of time between dispenses
     * The minimum period of time that must occur between dispenses of the medication.
     */
    dispenseInterval?: Duration;
    /**
     * Time period supply is authorized for
     * This indicates the validity period of a prescription (stale dating the Prescription).
     * It reflects the prescribers' perspective for the validity of the prescription. Dispenses must not be made against the prescription outside of this period. The lower-bound of the Dispensing Window signifies the earliest date that the prescription can be filled for the first time. If an upper-bound is not specified then the Prescription is open-ended or will default to a stale-date based on regulations.
     */
    validityPeriod?: Period;
    /**
     * Number of refills authorized
     * 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.  A prescriber may explicitly say that zero refills are permitted after the initial dispense.
     * If displaying "number of authorized fills", add 1 to this number.
     */
    numberOfRepeatsAllowed?: unsignedInt;
    /**
     * Extension for numberOfRepeatsAllowed
     **/
    _numberOfRepeatsAllowed?: Element;
    /**
     * Amount of medication to supply per dispense
     * The amount that is to be dispensed for one fill.
     */
    quantity?: Quantity;
    /**
     * Number of days supply per dispense
     * 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.
     * In some situations, this attribute may be used instead of quantity to identify the amount supplied by how long it is expected to last, rather than the physical quantity issued, e.g. 90 days supply of medication (based on an ordered dosage). When possible, it is always better to specify quantity, as this tends to be more precise. expectedSupplyDuration will always be an estimate that can be influenced by external factors.
     */
    expectedSupplyDuration?: Duration;
    /**
     * Intended dispenser
     * Indicates the intended dispensing Organization specified by the prescriber.
     */
    performer?: Reference;
}
/**
 * Any restrictions on medication substitution
 * 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.
 */
export interface MedicationRequestSubstitution extends BackboneElement {
    /**
     * Whether substitution is allowed or not
     * True if the prescriber allows a different drug to be dispensed from what was prescribed.
     * This element is labeled as a modifier because whether substitution is allow or not, it cannot be ignored.
     */
    allowedBoolean?: boolean;
    /**
     * Extension for allowedBoolean
     **/
    _allowedBoolean?: Element;
    /**
     * Whether substitution is allowed or not
     * True if the prescriber allows a different drug to be dispensed from what was prescribed.
     * This element is labeled as a modifier because whether substitution is allow or not, it cannot be ignored.
     */
    allowedCodeableConcept?: CodeableConcept;
    /**
     * Why should (not) substitution be made
     * Indicates the reason for the substitution, or why substitution must or must not be performed.
     */
    reason?: CodeableConcept;
}
/**
 * Ordering of medication for patient or group
 * 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.
 */
export interface MedicationRequest extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'MedicationRequest';
    /**
     * External ids for this request
     * 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. They are business identifiers assigned to this resource by the performer or other systems and remain constant as the resource is updated and propagates from server to server.
     * This is a business identifier, not a resource identifier.
     */
    identifier?: Identifier[];
    /**
     * Reason for current status
     * Captures the reason for the current state of the MedicationRequest.
     * This is generally only used for "exception" statuses such as "suspended" or "cancelled". The reason why the MedicationRequest was created at all is captured in reasonCode, not here.
     */
    statusReason?: CodeableConcept;
    /**
     * Type of medication usage
     * Indicates the type of medication request (for example, where the medication is expected to be consumed or administered (i.e. inpatient or outpatient)).
     * The category can be used to include where the medication is expected to be consumed or other types of requests.
     */
    category?: CodeableConcept[];
    /**
     * True if request is prohibiting action
     * If true indicates that the provider is asking for the medication request not to occur.
     * If do not perform is not specified, the request is a positive request e.g. "do perform".
     */
    doNotPerform?: boolean;
    /**
     * Extension for doNotPerform
     **/
    _doNotPerform?: Element;
    /**
     * Reported rather than primary record
     * Indicates if this record was captured as a secondary 'reported' record rather than as an original primary source-of-truth record.  It may also indicate the source of the report.
     */
    reportedBoolean?: boolean;
    /**
     * Extension for reportedBoolean
     **/
    _reportedBoolean?: Element;
    /**
     * Reported rather than primary record
     * Indicates if this record was captured as a secondary 'reported' record rather than as an original primary source-of-truth record.  It may also indicate the source of the report.
     */
    reportedReference?: Reference;
    /**
     * Medication to be taken
     * 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.
     * If only a code is specified, then it needs to be a code for a specific product. If more information is required, then the use of the Medication resource is recommended.  For example, if you require form or lot number or if the medication is compounded or extemporaneously prepared, then you must reference the Medication resource.
     */
    medicationCodeableConcept?: CodeableConcept;
    /**
     * Medication to be taken
     * 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.
     * If only a code is specified, then it needs to be a code for a specific product. If more information is required, then the use of the Medication resource is recommended.  For example, if you require form or lot number or if the medication is compounded or extemporaneously prepared, then you must reference the Medication resource.
     */
    medicationReference?: Reference;
    /**
     * Who or group medication request is for
     * A link to a resource representing the person or set of individuals to whom the medication will be given.
     * The subject on a medication request is mandatory.  For the secondary use case where the actual subject is not provided, there still must be an anonymized subject specified.
     */
    subject: Reference;
    /**
     * Encounter created as part of encounter/admission/stay
     * The Encounter during which this [x] was created or to which the creation of this record is tightly associated.
     * This will typically be the encounter the event occurred within, but some activities may be initiated prior to or after the official completion of an encounter but still be tied to the context of the encounter."    If there is a need to link to episodes of care they will be handled with an extension.
     */
    encounter?: Reference;
    /**
     * Information to support ordering of the medication
     * Include additional information (for example, patient height and weight) that supports the ordering of the medication.
     */
    supportingInformation?: Reference[];
    /**
     * When request was initially authored
     * The date (and perhaps time) when the prescription was initially written or authored on.
     */
    authoredOn?: dateTime;
    /**
     * Extension for authoredOn
     **/
    _authoredOn?: Element;
    /**
     * Who/What requested the Request
     * The individual, organization, or device that initiated the request and has responsibility for its activation.
     */
    requester?: Reference;
    /**
     * Intended performer of administration
     * The specified desired performer of the medication treatment (e.g. the performer of the medication administration).
     */
    performer?: Reference;
    /**
     * Desired kind of performer of the medication administration
     * Indicates the type of performer of the administration of the medication.
     * If specified without indicating a performer, this indicates that the performer must be of the specified type. If specified with a performer then it indicates the requirements of the performer if the designated performer is not available.
     */
    performerType?: CodeableConcept;
    /**
     * Person who entered the request
     * The person who entered the order on behalf of another individual for example in the case of a verbal or a telephone order.
     */
    recorder?: Reference;
    /**
     * Reason or indication for ordering or not ordering the medication
     * The reason or the indication for ordering or not ordering the medication.
     * This could be a diagnosis code. If a full condition record exists or additional detail is needed, use reasonReference.
     */
    reasonCode?: CodeableConcept[];
    /**
     * Condition or observation that supports why the prescription is being written
     * Condition or observation that supports why the medication was ordered.
     * This is a reference to a condition or observation that is the reason for the medication order.  If only a code exists, use reasonCode.
     */
    reasonReference?: Reference[];
    /**
     * Instantiates FHIR protocol or definition
     * The URL pointing to a protocol, guideline, orderset, or other definition that is adhered to in whole or in part by this MedicationRequest.
     */
    instantiatesCanonical?: canonical[];
    /**
     * Extension for instantiatesCanonical
     **/
    _instantiatesCanonical?: Element[];
    /**
     * Instantiates external protocol or definition
     * The URL pointing to an externally maintained protocol, guideline, orderset or other definition that is adhered to in whole or in part by this MedicationRequest.
     */
    instantiatesUri?: uri[];
    /**
     * Extension for instantiatesUri
     **/
    _instantiatesUri?: Element[];
    /**
     * What request fulfills
     * A plan or request that is fulfilled in whole or in part by this medication request.
     */
    basedOn?: Reference[];
    /**
     * Composite request this is part of
     * 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.
     */
    groupIdentifier?: Identifier;
    /**
     * Overall pattern of medication administration
     * The description of the overall patte3rn of the administration of the medication to the patient.
     * This attribute should not be confused with the protocol of the medication.
     */
    courseOfTherapyType?: CodeableConcept;
    /**
     * Associated insurance coverage
     * Insurance plans, coverage extensions, pre-authorizations and/or pre-determinations that may be required for delivering the requested service.
     */
    insurance?: Reference[];
    /**
     * Information about the prescription
     * Extra information about the prescription that could not be conveyed by the other attributes.
     */
    note?: Annotation[];
    /**
     * How the medication should be taken
     * Indicates how the medication is to be used by the patient.
     * There are examples where a medication request may include the option of an oral dose or an Intravenous or Intramuscular dose.  For example, "Ondansetron 8mg orally or IV twice a day as needed for nausea" or "Compazine® (prochlorperazine) 5-10mg PO or 25mg PR bid prn nausea or vomiting".  In these cases, two medication requests would be created that could be grouped together.  The decision on which dose and route of administration to use is based on the patient's condition at the time the dose is needed.
     */
    dosageInstruction?: Dosage[];
    /**
     * Medication supply authorization
     * 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.
     */
    dispenseRequest?: MedicationRequestDispenseRequest;
    /**
     * Any restrictions on medication substitution
     * 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.
     */
    substitution?: MedicationRequestSubstitution;
    /**
     * An order/prescription that is being replaced
     * A link to a resource representing an earlier order related order or prescription.
     */
    priorPrescription?: Reference;
    /**
     * Clinical Issue with 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, duplicate therapy, dosage alert etc.
     * This element can include a detected issue that has been identified either by a decision support system or by a clinician and may include information on the steps that were taken to address the issue.
     */
    detectedIssue?: Reference[];
    /**
     * A list of events of interest in the lifecycle
     * 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.
     * This might not include provenances for all versions of the request – only those deemed “relevant” or important. This SHALL NOT include the provenance associated with this current version of the resource. (If that provenance is deemed to be a “relevant” change, it will need to be added as part of a later update. Until then, it can be queried directly as the provenance that points to this version using _revinclude All Provenances should have some historical version of this Request as their subject.).
     */
    eventHistory?: Reference[];
    /**
     * active | on-hold | cancelled | completed | entered-in-error | stopped | draft | unknown
     * A code specifying the current state of the order.  Generally, this will be active or completed state.
     * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
     */
    status: MedicationRequestStatus;
    /**
     * proposal | plan | order | original-order | reflex-order | filler-order | instance-order | option
     * Whether the request is a proposal, plan, or an original order.
     * It is expected that the type of requester will be restricted for different stages of a MedicationRequest.  For example, Proposals can be created by a patient, relatedPerson, Practitioner or Device.  Plans can be created by Practitioners, Patients, RelatedPersons and Devices.  Original orders can be created by a Practitioner only.

An instance-order is an instantiation of a request or order and may be used to populate Medication Administration Record.

This element is labeled as a modifier because the intent alters when and how the resource is actually applicable.
     */
    intent: MedicationRequestIntent;
    /**
     * routine | urgent | asap | stat
     * Indicates how quickly the Medication Request should be addressed with respect to other requests.
     */
    priority?: MedicationRequestPriority;
}
/**
 * Record of medication being taken by a patient
 * 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.
 * When interpreting a medicationStatement, the value of the status and NotTaken needed to be considered:
MedicationStatement.status + MedicationStatement.wasNotTaken
Status=Active + NotTaken=T = Not currently taking
Status=Completed + NotTaken=T = Not taken in the past
Status=Intended + NotTaken=T = No intention of taking
Status=Active + NotTaken=F = Taking, but not as prescribed
Status=Active + NotTaken=F = Taking
Status=Intended +NotTaken= F = Will be taking (not started)
Status=Completed + NotTaken=F = Taken in past
Status=In Error + NotTaken=N/A = In Error.
 */
export interface MedicationStatement extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'MedicationStatement';
    /**
     * External identifier
     * Identifiers associated with this Medication Statement 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. They are business identifiers assigned to this resource by the performer or other systems and remain constant as the resource is updated and propagates from server to server.
     * This is a business identifier, not a resource identifier.
     */
    identifier?: Identifier[];
    /**
     * Fulfils plan, proposal or order
     * A plan, proposal or order that is fulfilled in whole or in part by this event.
     */
    basedOn?: Reference[];
    /**
     * Part of referenced event
     * A larger event of which this particular event is a component or step.
     */
    partOf?: Reference[];
    /**
     * Reason for current status
     * Captures the reason for the current state of the MedicationStatement.
     * This is generally only used for "exception" statuses such as "not-taken", "on-hold", "cancelled" or "entered-in-error". The reason for performing the event at all is captured in reasonCode, not here.
     */
    statusReason?: CodeableConcept[];
    /**
     * Type of medication usage
     * Indicates where the medication is expected to be consumed or administered.
     */
    category?: CodeableConcept;
    /**
     * What medication was taken
     * 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.
     * If only a code is specified, then it needs to be a code for a specific product. If more information is required, then the use of the medication resource is recommended.  For example, if you require form or lot number, then you must reference the Medication resource.
     */
    medicationCodeableConcept?: CodeableConcept;
    /**
     * What medication was taken
     * 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.
     * If only a code is specified, then it needs to be a code for a specific product. If more information is required, then the use of the medication resource is recommended.  For example, if you require form or lot number, then you must reference the Medication resource.
     */
    medicationReference?: Reference;
    /**
     * Who is/was taking  the medication
     * The person, animal or group who is/was taking the medication.
     */
    subject: Reference;
    /**
     * Encounter / Episode associated with MedicationStatement
     * The encounter or episode of care that establishes the context for this MedicationStatement.
     */
    context?: Reference;
    /**
     * The date/time or interval when the medication is/was/will be taken
     * The interval of time during which it is being asserted that the patient is/was/will be taking the medication (or was not taking, when the MedicationStatement.taken element is No).
     * This attribute reflects the period over which the patient consumed the medication and is expected to be populated on the majority of Medication Statements. If the medication is still being taken at the time the statement is recorded, the "end" date will be omitted.  The date/time attribute supports a variety of dates - year, year/month and exact date.  If something more than this is required, this should be conveyed as text.
     */
    effectiveDateTime?: dateTime;
    /**
     * Extension for effectiveDateTime
     **/
    _effectiveDateTime?: Element;
    /**
     * The date/time or interval when the medication is/was/will be taken
     * The interval of time during which it is being asserted that the patient is/was/will be taking the medication (or was not taking, when the MedicationStatement.taken element is No).
     * This attribute reflects the period over which the patient consumed the medication and is expected to be populated on the majority of Medication Statements. If the medication is still being taken at the time the statement is recorded, the "end" date will be omitted.  The date/time attribute supports a variety of dates - year, year/month and exact date.  If something more than this is required, this should be conveyed as text.
     */
    effectivePeriod?: Period;
    /**
     * When the statement was asserted?
     * The date when the medication statement was asserted by the information source.
     */
    dateAsserted?: dateTime;
    /**
     * Extension for dateAsserted
     **/
    _dateAsserted?: Element;
    /**
     * Person or organization that provided the information about the taking of this medication
     * 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.
     */
    informationSource?: Reference;
    /**
     * Additional supporting information
     * Allows linking the MedicationStatement to the underlying MedicationRequest, or to other information that supports or is used to derive the MedicationStatement.
     * Likely references would be to MedicationRequest, MedicationDispense, Claim, Observation or QuestionnaireAnswers.  The most common use cases for deriving a MedicationStatement comes from creating a MedicationStatement from a MedicationRequest or from a lab observation or a claim.  it should be noted that the amount of information that is available varies from the type resource that you derive the MedicationStatement from.
     */
    derivedFrom?: Reference[];
    /**
     * Reason for why the medication is being/was taken
     * A reason for why the medication is being/was taken.
     * This could be a diagnosis code. If a full condition record exists or additional detail is needed, use reasonForUseReference.
     */
    reasonCode?: CodeableConcept[];
    /**
     * Condition or observation that supports why the medication is being/was taken
     * Condition or observation that supports why the medication is being/was taken.
     * This is a reference to a condition that is the reason why the medication is being/was taken.  If only a code exists, use reasonForUseCode.
     */
    reasonReference?: Reference[];
    /**
     * Further information about the statement
     * Provides extra information about the medication statement that is not conveyed by the other attributes.
     */
    note?: Annotation[];
    /**
     * Details of how medication is/was taken or should be taken
     * Indicates how the medication is/was or should be taken by the patient.
     * The dates included in the dosage on a Medication Statement reflect the dates for a given dose.  For example, "from November 1, 2016 to November 3, 2016, take one tablet daily and from November 4, 2016 to November 7, 2016, take two tablets daily."  It is expected that this specificity may only be populated where the patient brings in their labeled container or where the Medication Statement is derived from a MedicationRequest.
     */
    dosage?: Dosage[];
    /**
     * active | completed | entered-in-error | intended | stopped | on-hold | unknown | not-taken
     * 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.
     * MedicationStatement is a statement at a point in time.  The status is only representative at the point when it was asserted.  The value set for MedicationStatement.status contains codes that assert the status of the use of the medication by the patient (for example, stopped or on hold) as well as codes that assert the status of the medication statement itself (for example, entered in error).

This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
     */
    status: MedicationStatementStatus;
}
/**
 * Coding words or phrases of the name
 * Coding words or phrases of the name.
 */
export interface MedicinalProductNameNamePart extends BackboneElement {
    /**
     * A fragment of a product name
     * A fragment of a product name.
     */
    part: string;
    /**
     * Extension for part
     **/
    _part?: Element;
    /**
     * Idenifying type for this part of the name (e.g. strength part)
     * Idenifying type for this part of the name (e.g. strength part).
     */
    type: Coding;
}
/**
 * Country where the name applies
 * Country where the name applies.
 */
export interface MedicinalProductNameCountryLanguage extends BackboneElement {
    /**
     * Country code for where this name applies
     * Country code for where this name applies.
     */
    country: CodeableConcept;
    /**
     * Jurisdiction code for where this name applies
     * Jurisdiction code for where this name applies.
     */
    jurisdiction?: CodeableConcept;
    /**
     * Language code for this name
     * Language code for this name.
     */
    language: CodeableConcept;
}
/**
 * The product's name, including full name and possibly coded parts
 * The product's name, including full name and possibly coded parts.
 */
export interface MedicinalProductName extends BackboneElement {
    /**
     * The full product name
     * The full product name.
     */
    productName: string;
    /**
     * Extension for productName
     **/
    _productName?: Element;
    /**
     * Coding words or phrases of the name
     * Coding words or phrases of the name.
     */
    namePart?: MedicinalProductNameNamePart[];
    /**
     * Country where the name applies
     * Country where the name applies.
     */
    countryLanguage?: MedicinalProductNameCountryLanguage[];
}
/**
 * An operation applied to the product, for manufacturing or adminsitrative purpose
 * An operation applied to the product, for manufacturing or adminsitrative purpose.
 */
export interface MedicinalProductManufacturingBusinessOperation extends BackboneElement {
    /**
     * The type of manufacturing operation
     * The type of manufacturing operation.
     */
    operationType?: CodeableConcept;
    /**
     * Regulatory authorization reference number
     * Regulatory authorization reference number.
     */
    authorisationReferenceNumber?: Identifier;
    /**
     * Regulatory authorization date
     * Regulatory authorization date.
     */
    effectiveDate?: dateTime;
    /**
     * Extension for effectiveDate
     **/
    _effectiveDate?: Element;
    /**
     * To indicate if this proces is commercially confidential
     * To indicate if this proces is commercially confidential.
     */
    confidentialityIndicator?: CodeableConcept;
    /**
     * The manufacturer or establishment associated with the process
     * The manufacturer or establishment associated with the process.
     */
    manufacturer?: Reference[];
    /**
     * A regulator which oversees the operation
     * A regulator which oversees the operation.
     */
    regulator?: Reference;
}
/**
 * Indicates if the medicinal product has an orphan designation for the treatment of a rare disease
 * Indicates if the medicinal product has an orphan designation for the treatment of a rare disease.
 */
export interface MedicinalProductSpecialDesignation extends BackboneElement {
    /**
     * Identifier for the designation, or procedure number
     * Identifier for the designation, or procedure number.
     */
    identifier?: Identifier[];
    /**
     * The type of special designation, e.g. orphan drug, minor use
     * The type of special designation, e.g. orphan drug, minor use.
     */
    type?: CodeableConcept;
    /**
     * The intended use of the product, e.g. prevention, treatment
     * The intended use of the product, e.g. prevention, treatment.
     */
    intendedUse?: CodeableConcept;
    /**
     * Condition for which the medicinal use applies
     * Condition for which the medicinal use applies.
     */
    indicationCodeableConcept?: CodeableConcept;
    /**
     * Condition for which the medicinal use applies
     * Condition for which the medicinal use applies.
     */
    indicationReference?: Reference;
    /**
     * For example granted, pending, expired or withdrawn
     * For example granted, pending, expired or withdrawn.
     */
    status?: CodeableConcept;
    /**
     * Date when the designation was granted
     * Date when the designation was granted.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Animal species for which this applies
     * Animal species for which this applies.
     */
    species?: CodeableConcept;
}
/**
 * Detailed definition of a medicinal product, typically for uses other than direct patient care (e.g. regulatory use)
 * Detailed definition of a medicinal product, typically for uses other than direct patient care (e.g. regulatory use).
 */
export interface MedicinalProduct extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'MedicinalProduct';
    /**
     * Business identifier for this product. Could be an MPID
     * Business identifier for this product. Could be an MPID.
     */
    identifier?: Identifier[];
    /**
     * Regulatory type, e.g. Investigational or Authorized
     * Regulatory type, e.g. Investigational or Authorized.
     */
    type?: CodeableConcept;
    /**
     * If this medicine applies to human or veterinary uses
     * If this medicine applies to human or veterinary uses.
     */
    domain?: Coding;
    /**
     * The dose form for a single part product, or combined form of a multiple part product
     * The dose form for a single part product, or combined form of a multiple part product.
     */
    combinedPharmaceuticalDoseForm?: CodeableConcept;
    /**
     * The legal status of supply of the medicinal product as classified by the regulator
     * The legal status of supply of the medicinal product as classified by the regulator.
     */
    legalStatusOfSupply?: CodeableConcept;
    /**
     * Whether the Medicinal Product is subject to additional monitoring for regulatory reasons
     * Whether the Medicinal Product is subject to additional monitoring for regulatory reasons.
     */
    additionalMonitoringIndicator?: CodeableConcept;
    /**
     * Whether the Medicinal Product is subject to special measures for regulatory reasons
     * Whether the Medicinal Product is subject to special measures for regulatory reasons.
     */
    specialMeasures?: string[];
    /**
     * Extension for specialMeasures
     **/
    _specialMeasures?: Element[];
    /**
     * If authorised for use in children
     * If authorised for use in children.
     */
    paediatricUseIndicator?: CodeableConcept;
    /**
     * Allows the product to be classified by various systems
     * Allows the product to be classified by various systems.
     */
    productClassification?: CodeableConcept[];
    /**
     * Marketing status of the medicinal product, in contrast to marketing authorizaton
     * Marketing status of the medicinal product, in contrast to marketing authorizaton.
     */
    marketingStatus?: MarketingStatus[];
    /**
     * Pharmaceutical aspects of product
     * Pharmaceutical aspects of product.
     */
    pharmaceuticalProduct?: Reference[];
    /**
     * Package representation for the product
     * Package representation for the product.
     */
    packagedMedicinalProduct?: Reference[];
    /**
     * Supporting documentation, typically for regulatory submission
     * Supporting documentation, typically for regulatory submission.
     */
    attachedDocument?: Reference[];
    /**
     * A master file for to the medicinal product (e.g. Pharmacovigilance System Master File)
     * A master file for to the medicinal product (e.g. Pharmacovigilance System Master File).
     */
    masterFile?: Reference[];
    /**
     * A product specific contact, person (in a role), or an organization
     * A product specific contact, person (in a role), or an organization.
     */
    contact?: Reference[];
    /**
     * Clinical trials or studies that this product is involved in
     * Clinical trials or studies that this product is involved in.
     */
    clinicalTrial?: Reference[];
    /**
     * The product's name, including full name and possibly coded parts
     * The product's name, including full name and possibly coded parts.
     */
    name: MedicinalProductName[];
    /**
     * Reference to another product, e.g. for linking authorised to investigational product
     * Reference to another product, e.g. for linking authorised to investigational product.
     */
    crossReference?: Identifier[];
    /**
     * An operation applied to the product, for manufacturing or adminsitrative purpose
     * An operation applied to the product, for manufacturing or adminsitrative purpose.
     */
    manufacturingBusinessOperation?: MedicinalProductManufacturingBusinessOperation[];
    /**
     * Indicates if the medicinal product has an orphan designation for the treatment of a rare disease
     * Indicates if the medicinal product has an orphan designation for the treatment of a rare disease.
     */
    specialDesignation?: MedicinalProductSpecialDesignation[];
}
/**
 * Authorization in areas within a country
 * Authorization in areas within a country.
 */
export interface MedicinalProductAuthorizationJurisdictionalAuthorization extends BackboneElement {
    /**
     * The assigned number for the marketing authorization
     * The assigned number for the marketing authorization.
     */
    identifier?: Identifier[];
    /**
     * Country of authorization
     * Country of authorization.
     */
    country?: CodeableConcept;
    /**
     * Jurisdiction within a country
     * Jurisdiction within a country.
     */
    jurisdiction?: CodeableConcept[];
    /**
     * The legal status of supply in a jurisdiction or region
     * The legal status of supply in a jurisdiction or region.
     */
    legalStatusOfSupply?: CodeableConcept;
    /**
     * The start and expected end date of the authorization
     * The start and expected end date of the authorization.
     */
    validityPeriod?: Period;
}
/**
 * The regulatory procedure for granting or amending a marketing authorization
 * The regulatory procedure for granting or amending a marketing authorization.
 */
export interface MedicinalProductAuthorizationProcedure extends BackboneElement {
    /**
     * Identifier for this procedure
     * Identifier for this procedure.
     */
    identifier?: Identifier;
    /**
     * Type of procedure
     * Type of procedure.
     */
    type: CodeableConcept;
    /**
     * Date of procedure
     * Date of procedure.
     */
    datePeriod?: Period;
    /**
     * Date of procedure
     * Date of procedure.
     */
    dateDateTime?: dateTime;
    /**
     * Extension for dateDateTime
     **/
    _dateDateTime?: Element;
    /**
     * Applcations submitted to obtain a marketing authorization
     * Applcations submitted to obtain a marketing authorization.
     */
    application?: MedicinalProductAuthorizationProcedure[];
}
/**
 * The regulatory authorization of a medicinal product
 * The regulatory authorization of a medicinal product.
 */
export interface MedicinalProductAuthorization extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'MedicinalProductAuthorization';
    /**
     * Business identifier for the marketing authorization, as assigned by a regulator
     * Business identifier for the marketing authorization, as assigned by a regulator.
     */
    identifier?: Identifier[];
    /**
     * The medicinal product that is being authorized
     * The medicinal product that is being authorized.
     */
    subject?: Reference;
    /**
     * The country in which the marketing authorization has been granted
     * The country in which the marketing authorization has been granted.
     */
    country?: CodeableConcept[];
    /**
     * Jurisdiction within a country
     * Jurisdiction within a country.
     */
    jurisdiction?: CodeableConcept[];
    /**
     * The status of the marketing authorization
     * The status of the marketing authorization.
     */
    status?: CodeableConcept;
    /**
     * The date at which the given status has become applicable
     * The date at which the given status has become applicable.
     */
    statusDate?: dateTime;
    /**
     * Extension for statusDate
     **/
    _statusDate?: Element;
    /**
     * The date when a suspended the marketing or the marketing authorization of the product is anticipated to be restored
     * The date when a suspended the marketing or the marketing authorization of the product is anticipated to be restored.
     */
    restoreDate?: dateTime;
    /**
     * Extension for restoreDate
     **/
    _restoreDate?: Element;
    /**
     * The beginning of the time period in which the marketing authorization is in the specific status shall be specified A complete date consisting of day, month and year shall be specified using the ISO 8601 date format
     * The beginning of the time period in which the marketing authorization is in the specific status shall be specified A complete date consisting of day, month and year shall be specified using the ISO 8601 date format.
     */
    validityPeriod?: Period;
    /**
     * A period of time after authorization before generic product applicatiosn can be submitted
     * A period of time after authorization before generic product applicatiosn can be submitted.
     */
    dataExclusivityPeriod?: Period;
    /**
     * The date when the first authorization was granted by a Medicines Regulatory Agency
     * The date when the first authorization was granted by a Medicines Regulatory Agency.
     */
    dateOfFirstAuthorization?: dateTime;
    /**
     * Extension for dateOfFirstAuthorization
     **/
    _dateOfFirstAuthorization?: Element;
    /**
     * Date of first marketing authorization for a company's new medicinal product in any country in the World
     * Date of first marketing authorization for a company's new medicinal product in any country in the World.
     */
    internationalBirthDate?: dateTime;
    /**
     * Extension for internationalBirthDate
     **/
    _internationalBirthDate?: Element;
    /**
     * The legal framework against which this authorization is granted
     * The legal framework against which this authorization is granted.
     */
    legalBasis?: CodeableConcept;
    /**
     * Authorization in areas within a country
     * Authorization in areas within a country.
     */
    jurisdictionalAuthorization?: MedicinalProductAuthorizationJurisdictionalAuthorization[];
    /**
     * Marketing Authorization Holder
     * Marketing Authorization Holder.
     */
    holder?: Reference;
    /**
     * Medicines Regulatory Agency
     * Medicines Regulatory Agency.
     */
    regulator?: Reference;
    /**
     * The regulatory procedure for granting or amending a marketing authorization
     * The regulatory procedure for granting or amending a marketing authorization.
     */
    procedure?: MedicinalProductAuthorizationProcedure;
}
/**
 * Information about the use of the medicinal product in relation to other therapies described as part of the indication
 * Information about the use of the medicinal product in relation to other therapies described as part of the indication.
 */
export interface MedicinalProductContraindicationOtherTherapy extends BackboneElement {
    /**
     * The type of relationship between the medicinal product indication or contraindication and another therapy
     * The type of relationship between the medicinal product indication or contraindication and another therapy.
     */
    therapyRelationshipType: CodeableConcept;
    /**
     * Reference to a specific medication (active substance, medicinal product or class of products) as part of an indication or contraindication
     * Reference to a specific medication (active substance, medicinal product or class of products) as part of an indication or contraindication.
     */
    medicationCodeableConcept?: CodeableConcept;
    /**
     * Reference to a specific medication (active substance, medicinal product or class of products) as part of an indication or contraindication
     * Reference to a specific medication (active substance, medicinal product or class of products) as part of an indication or contraindication.
     */
    medicationReference?: Reference;
}
/**
 * MedicinalProductContraindication
 * The clinical particulars - indications, contraindications etc. of a medicinal product, including for regulatory purposes.
 */
export interface MedicinalProductContraindication extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'MedicinalProductContraindication';
    /**
     * The medication for which this is an indication
     * The medication for which this is an indication.
     */
    subject?: Reference[];
    /**
     * The disease, symptom or procedure for the contraindication
     * The disease, symptom or procedure for the contraindication.
     */
    disease?: CodeableConcept;
    /**
     * The status of the disease or symptom for the contraindication
     * The status of the disease or symptom for the contraindication.
     */
    diseaseStatus?: CodeableConcept;
    /**
     * A comorbidity (concurrent condition) or coinfection
     * A comorbidity (concurrent condition) or coinfection.
     */
    comorbidity?: CodeableConcept[];
    /**
     * Information about the use of the medicinal product in relation to other therapies as part of the indication
     * Information about the use of the medicinal product in relation to other therapies as part of the indication.
     */
    therapeuticIndication?: Reference[];
    /**
     * Information about the use of the medicinal product in relation to other therapies described as part of the indication
     * Information about the use of the medicinal product in relation to other therapies described as part of the indication.
     */
    otherTherapy?: MedicinalProductContraindicationOtherTherapy[];
    /**
     * The population group to which this applies
     * The population group to which this applies.
     */
    population?: Population[];
}
/**
 * Information about the use of the medicinal product in relation to other therapies described as part of the indication
 * Information about the use of the medicinal product in relation to other therapies described as part of the indication.
 */
export interface MedicinalProductIndicationOtherTherapy extends BackboneElement {
    /**
     * The type of relationship between the medicinal product indication or contraindication and another therapy
     * The type of relationship between the medicinal product indication or contraindication and another therapy.
     */
    therapyRelationshipType: CodeableConcept;
    /**
     * Reference to a specific medication (active substance, medicinal product or class of products) as part of an indication or contraindication
     * Reference to a specific medication (active substance, medicinal product or class of products) as part of an indication or contraindication.
     */
    medicationCodeableConcept?: CodeableConcept;
    /**
     * Reference to a specific medication (active substance, medicinal product or class of products) as part of an indication or contraindication
     * Reference to a specific medication (active substance, medicinal product or class of products) as part of an indication or contraindication.
     */
    medicationReference?: Reference;
}
/**
 * MedicinalProductIndication
 * Indication for the Medicinal Product.
 */
export interface MedicinalProductIndication extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'MedicinalProductIndication';
    /**
     * The medication for which this is an indication
     * The medication for which this is an indication.
     */
    subject?: Reference[];
    /**
     * The disease, symptom or procedure that is the indication for treatment
     * The disease, symptom or procedure that is the indication for treatment.
     */
    diseaseSymptomProcedure?: CodeableConcept;
    /**
     * The status of the disease or symptom for which the indication applies
     * The status of the disease or symptom for which the indication applies.
     */
    diseaseStatus?: CodeableConcept;
    /**
     * Comorbidity (concurrent condition) or co-infection as part of the indication
     * Comorbidity (concurrent condition) or co-infection as part of the indication.
     */
    comorbidity?: CodeableConcept[];
    /**
     * The intended effect, aim or strategy to be achieved by the indication
     * The intended effect, aim or strategy to be achieved by the indication.
     */
    intendedEffect?: CodeableConcept;
    /**
     * Timing or duration information as part of the indication
     * Timing or duration information as part of the indication.
     */
    duration?: Quantity;
    /**
     * Information about the use of the medicinal product in relation to other therapies described as part of the indication
     * Information about the use of the medicinal product in relation to other therapies described as part of the indication.
     */
    otherTherapy?: MedicinalProductIndicationOtherTherapy[];
    /**
     * Describe the undesirable effects of the medicinal product
     * Describe the undesirable effects of the medicinal product.
     */
    undesirableEffect?: Reference[];
    /**
     * The population group to which this applies
     * The population group to which this applies.
     */
    population?: Population[];
}
/**
 * Strength expressed in terms of a reference substance
 * Strength expressed in terms of a reference substance.
 */
export interface MedicinalProductIngredientSpecifiedSubstanceStrengthReferenceStrength extends BackboneElement {
    /**
     * Relevant reference substance
     * Relevant reference substance.
     */
    substance?: CodeableConcept;
    /**
     * Strength expressed in terms of a reference substance
     * Strength expressed in terms of a reference substance.
     */
    strength: Ratio;
    /**
     * Strength expressed in terms of a reference substance
     * Strength expressed in terms of a reference substance.
     */
    strengthLowLimit?: Ratio;
    /**
     * For when strength is measured at a particular point or distance
     * For when strength is measured at a particular point or distance.
     */
    measurementPoint?: string;
    /**
     * Extension for measurementPoint
     **/
    _measurementPoint?: Element;
    /**
     * The country or countries for which the strength range applies
     * The country or countries for which the strength range applies.
     */
    country?: CodeableConcept[];
}
/**
 * Quantity of the substance or specified substance present in the manufactured item or pharmaceutical product
 * Quantity of the substance or specified substance present in the manufactured item or pharmaceutical product.
 */
export interface MedicinalProductIngredientSpecifiedSubstanceStrength extends BackboneElement {
    /**
     * The quantity of substance in the unit of presentation, or in the volume (or mass) of the single pharmaceutical product or manufactured item
     * The quantity of substance in the unit of presentation, or in the volume (or mass) of the single pharmaceutical product or manufactured item.
     */
    presentation: Ratio;
    /**
     * A lower limit for the quantity of substance in the unit of presentation. For use when there is a range of strengths, this is the lower limit, with the presentation attribute becoming the upper limit
     * A lower limit for the quantity of substance in the unit of presentation. For use when there is a range of strengths, this is the lower limit, with the presentation attribute becoming the upper limit.
     */
    presentationLowLimit?: Ratio;
    /**
     * The strength per unitary volume (or mass)
     * The strength per unitary volume (or mass).
     */
    concentration?: Ratio;
    /**
     * A lower limit for the strength per unitary volume (or mass), for when there is a range. The concentration attribute then becomes the upper limit
     * A lower limit for the strength per unitary volume (or mass), for when there is a range. The concentration attribute then becomes the upper limit.
     */
    concentrationLowLimit?: Ratio;
    /**
     * For when strength is measured at a particular point or distance
     * For when strength is measured at a particular point or distance.
     */
    measurementPoint?: string;
    /**
     * Extension for measurementPoint
     **/
    _measurementPoint?: Element;
    /**
     * The country or countries for which the strength range applies
     * The country or countries for which the strength range applies.
     */
    country?: CodeableConcept[];
    /**
     * Strength expressed in terms of a reference substance
     * Strength expressed in terms of a reference substance.
     */
    referenceStrength?: MedicinalProductIngredientSpecifiedSubstanceStrengthReferenceStrength[];
}
/**
 * A specified substance that comprises this ingredient
 * A specified substance that comprises this ingredient.
 */
export interface MedicinalProductIngredientSpecifiedSubstance extends BackboneElement {
    /**
     * The specified substance
     * The specified substance.
     */
    code: CodeableConcept;
    /**
     * The group of specified substance, e.g. group 1 to 4
     * The group of specified substance, e.g. group 1 to 4.
     */
    group: CodeableConcept;
    /**
     * Confidentiality level of the specified substance as the ingredient
     * Confidentiality level of the specified substance as the ingredient.
     */
    confidentiality?: CodeableConcept;
    /**
     * Quantity of the substance or specified substance present in the manufactured item or pharmaceutical product
     * Quantity of the substance or specified substance present in the manufactured item or pharmaceutical product.
     */
    strength?: MedicinalProductIngredientSpecifiedSubstanceStrength[];
}
/**
 * The ingredient substance
 * The ingredient substance.
 */
export interface MedicinalProductIngredientSubstance extends BackboneElement {
    /**
     * The ingredient substance
     * The ingredient substance.
     */
    code: CodeableConcept;
    /**
     * Quantity of the substance or specified substance present in the manufactured item or pharmaceutical product
     * Quantity of the substance or specified substance present in the manufactured item or pharmaceutical product.
     */
    strength?: MedicinalProductIngredientSpecifiedSubstanceStrength[];
}
/**
 * An ingredient of a manufactured item or pharmaceutical product
 * An ingredient of a manufactured item or pharmaceutical product.
 */
export interface MedicinalProductIngredient extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'MedicinalProductIngredient';
    /**
     * Identifier for the ingredient
     * The identifier(s) of this Ingredient that are assigned by business processes and/or used to refer to it when a direct URL reference to the resource itself is not appropriate.
     */
    identifier?: Identifier;
    /**
     * Ingredient role e.g. Active ingredient, excipient
     * Ingredient role e.g. Active ingredient, excipient.
     */
    role: CodeableConcept;
    /**
     * If the ingredient is a known or suspected allergen
     * If the ingredient is a known or suspected allergen.
     */
    allergenicIndicator?: boolean;
    /**
     * Extension for allergenicIndicator
     **/
    _allergenicIndicator?: Element;
    /**
     * Manufacturer of this Ingredient
     * Manufacturer of this Ingredient.
     */
    manufacturer?: Reference[];
    /**
     * A specified substance that comprises this ingredient
     * A specified substance that comprises this ingredient.
     */
    specifiedSubstance?: MedicinalProductIngredientSpecifiedSubstance[];
    /**
     * The ingredient substance
     * The ingredient substance.
     */
    substance?: MedicinalProductIngredientSubstance;
}
/**
 * The specific medication, food or laboratory test that interacts
 * The specific medication, food or laboratory test that interacts.
 */
export interface MedicinalProductInteractionInteractant extends BackboneElement {
    /**
     * The specific medication, food or laboratory test that interacts
     * The specific medication, food or laboratory test that interacts.
     */
    itemReference?: Reference;
    /**
     * The specific medication, food or laboratory test that interacts
     * The specific medication, food or laboratory test that interacts.
     */
    itemCodeableConcept?: CodeableConcept;
}
/**
 * MedicinalProductInteraction
 * The interactions of the medicinal product with other medicinal products, or other forms of interactions.
 */
export interface MedicinalProductInteraction extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'MedicinalProductInteraction';
    /**
     * The medication for which this is a described interaction
     * The medication for which this is a described interaction.
     */
    subject?: Reference[];
    /**
     * The interaction described
     * The interaction described.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * The specific medication, food or laboratory test that interacts
     * The specific medication, food or laboratory test that interacts.
     */
    interactant?: MedicinalProductInteractionInteractant[];
    /**
     * The type of the interaction e.g. drug-drug interaction, drug-food interaction, drug-lab test interaction
     * The type of the interaction e.g. drug-drug interaction, drug-food interaction, drug-lab test interaction.
     */
    type?: CodeableConcept;
    /**
     * The effect of the interaction, for example "reduced gastric absorption of primary medication"
     * The effect of the interaction, for example "reduced gastric absorption of primary medication".
     */
    effect?: CodeableConcept;
    /**
     * The incidence of the interaction, e.g. theoretical, observed
     * The incidence of the interaction, e.g. theoretical, observed.
     */
    incidence?: CodeableConcept;
    /**
     * Actions for managing the interaction
     * Actions for managing the interaction.
     */
    management?: CodeableConcept;
}
/**
 * The manufactured item as contained in the packaged medicinal product
 * The manufactured item as contained in the packaged medicinal product.
 */
export interface MedicinalProductManufactured extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'MedicinalProductManufactured';
    /**
     * Dose form as manufactured and before any transformation into the pharmaceutical product
     * Dose form as manufactured and before any transformation into the pharmaceutical product.
     */
    manufacturedDoseForm: CodeableConcept;
    /**
     * The “real world” units in which the quantity of the manufactured item is described
     * The “real world” units in which the quantity of the manufactured item is described.
     */
    unitOfPresentation?: CodeableConcept;
    /**
     * The quantity or "count number" of the manufactured item
     * The quantity or "count number" of the manufactured item.
     */
    quantity: Quantity;
    /**
     * Manufacturer of the item (Note that this should be named "manufacturer" but it currently causes technical issues)
     * Manufacturer of the item (Note that this should be named "manufacturer" but it currently causes technical issues).
     */
    manufacturer?: Reference[];
    /**
     * Ingredient
     * Ingredient.
     */
    ingredient?: Reference[];
    /**
     * Dimensions, color etc.
     * Dimensions, color etc.
     */
    physicalCharacteristics?: ProdCharacteristic;
    /**
     * Other codeable characteristics
     * Other codeable characteristics.
     */
    otherCharacteristics?: CodeableConcept[];
}
/**
 * Batch numbering
 * Batch numbering.
 */
export interface MedicinalProductPackagedBatchIdentifier extends BackboneElement {
    /**
     * A number appearing on the outer packaging of a specific batch
     * A number appearing on the outer packaging of a specific batch.
     */
    outerPackaging: Identifier;
    /**
     * A number appearing on the immediate packaging (and not the outer packaging)
     * A number appearing on the immediate packaging (and not the outer packaging).
     */
    immediatePackaging?: Identifier;
}
/**
 * A packaging item, as a contained for medicine, possibly with other packaging items within
 * A packaging item, as a contained for medicine, possibly with other packaging items within.
 */
export interface MedicinalProductPackagedPackageItem extends BackboneElement {
    /**
     * Including possibly Data Carrier Identifier
     * Including possibly Data Carrier Identifier.
     */
    identifier?: Identifier[];
    /**
     * The physical type of the container of the medicine
     * The physical type of the container of the medicine.
     */
    type: CodeableConcept;
    /**
     * The quantity of this package in the medicinal product, at the current level of packaging. The outermost is always 1
     * The quantity of this package in the medicinal product, at the current level of packaging. The outermost is always 1.
     */
    quantity: Quantity;
    /**
     * Material type of the package item
     * Material type of the package item.
     */
    material?: CodeableConcept[];
    /**
     * A possible alternate material for the packaging
     * A possible alternate material for the packaging.
     */
    alternateMaterial?: CodeableConcept[];
    /**
     * A device accompanying a medicinal product
     * A device accompanying a medicinal product.
     */
    device?: Reference[];
    /**
     * The manufactured item as contained in the packaged medicinal product
     * The manufactured item as contained in the packaged medicinal product.
     */
    manufacturedItem?: Reference[];
    /**
     * Allows containers within containers
     * Allows containers within containers.
     */
    packageItem?: MedicinalProductPackagedPackageItem[];
    /**
     * Dimensions, color etc.
     * Dimensions, color etc.
     */
    physicalCharacteristics?: ProdCharacteristic;
    /**
     * Other codeable characteristics
     * Other codeable characteristics.
     */
    otherCharacteristics?: CodeableConcept[];
    /**
     * Shelf Life and storage information
     * Shelf Life and storage information.
     */
    shelfLifeStorage?: ProductShelfLife[];
    /**
     * Manufacturer of this Package Item
     * Manufacturer of this Package Item.
     */
    manufacturer?: Reference[];
}
/**
 * A medicinal product in a container or package
 * A medicinal product in a container or package.
 */
export interface MedicinalProductPackaged extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'MedicinalProductPackaged';
    /**
     * Unique identifier
     * Unique identifier.
     */
    identifier?: Identifier[];
    /**
     * The product with this is a pack for
     * The product with this is a pack for.
     */
    subject?: Reference[];
    /**
     * Textual description
     * Textual description.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * The legal status of supply of the medicinal product as classified by the regulator
     * The legal status of supply of the medicinal product as classified by the regulator.
     */
    legalStatusOfSupply?: CodeableConcept;
    /**
     * Marketing information
     * Marketing information.
     */
    marketingStatus?: MarketingStatus[];
    /**
     * Manufacturer of this Package Item
     * Manufacturer of this Package Item.
     */
    marketingAuthorization?: Reference;
    /**
     * Manufacturer of this Package Item
     * Manufacturer of this Package Item.
     */
    manufacturer?: Reference[];
    /**
     * Batch numbering
     * Batch numbering.
     */
    batchIdentifier?: MedicinalProductPackagedBatchIdentifier[];
    /**
     * A packaging item, as a contained for medicine, possibly with other packaging items within
     * A packaging item, as a contained for medicine, possibly with other packaging items within.
     */
    packageItem: MedicinalProductPackagedPackageItem[];
}
/**
 * Characteristics e.g. a products onset of action
 * Characteristics e.g. a products onset of action.
 */
export interface MedicinalProductPharmaceuticalCharacteristics extends BackboneElement {
    /**
     * A coded characteristic
     * A coded characteristic.
     */
    code: CodeableConcept;
    /**
     * The status of characteristic e.g. assigned or pending
     * The status of characteristic e.g. assigned or pending.
     */
    status?: CodeableConcept;
}
/**
 * A species specific time during which consumption of animal product is not appropriate
 * A species specific time during which consumption of animal product is not appropriate.
 */
export interface MedicinalProductPharmaceuticalRouteOfAdministrationTargetSpeciesWithdrawalPeriod extends BackboneElement {
    /**
     * Coded expression for the type of tissue for which the withdrawal period applues, e.g. meat, milk
     * Coded expression for the type of tissue for which the withdrawal period applues, e.g. meat, milk.
     */
    tissue: CodeableConcept;
    /**
     * A value for the time
     * A value for the time.
     */
    value: Quantity;
    /**
     * Extra information about the withdrawal period
     * Extra information about the withdrawal period.
     */
    supportingInformation?: string;
    /**
     * Extension for supportingInformation
     **/
    _supportingInformation?: Element;
}
/**
 * A species for which this route applies
 * A species for which this route applies.
 */
export interface MedicinalProductPharmaceuticalRouteOfAdministrationTargetSpecies extends BackboneElement {
    /**
     * Coded expression for the species
     * Coded expression for the species.
     */
    code: CodeableConcept;
    /**
     * A species specific time during which consumption of animal product is not appropriate
     * A species specific time during which consumption of animal product is not appropriate.
     */
    withdrawalPeriod?: MedicinalProductPharmaceuticalRouteOfAdministrationTargetSpeciesWithdrawalPeriod[];
}
/**
 * The path by which the pharmaceutical product is taken into or makes contact with the body
 * The path by which the pharmaceutical product is taken into or makes contact with the body.
 */
export interface MedicinalProductPharmaceuticalRouteOfAdministration extends BackboneElement {
    /**
     * Coded expression for the route
     * Coded expression for the route.
     */
    code: CodeableConcept;
    /**
     * The first dose (dose quantity) administered in humans can be specified, for a product under investigation, using a numerical value and its unit of measurement
     * The first dose (dose quantity) administered in humans can be specified, for a product under investigation, using a numerical value and its unit of measurement.
     */
    firstDose?: Quantity;
    /**
     * The maximum single dose that can be administered as per the protocol of a clinical trial can be specified using a numerical value and its unit of measurement
     * The maximum single dose that can be administered as per the protocol of a clinical trial can be specified using a numerical value and its unit of measurement.
     */
    maxSingleDose?: Quantity;
    /**
     * The maximum dose per day (maximum dose quantity to be administered in any one 24-h period) that can be administered as per the protocol referenced in the clinical trial authorisation
     * The maximum dose per day (maximum dose quantity to be administered in any one 24-h period) that can be administered as per the protocol referenced in the clinical trial authorisation.
     */
    maxDosePerDay?: Quantity;
    /**
     * The maximum dose per treatment period that can be administered as per the protocol referenced in the clinical trial authorisation
     * The maximum dose per treatment period that can be administered as per the protocol referenced in the clinical trial authorisation.
     */
    maxDosePerTreatmentPeriod?: Ratio;
    /**
     * The maximum treatment period during which an Investigational Medicinal Product can be administered as per the protocol referenced in the clinical trial authorisation
     * The maximum treatment period during which an Investigational Medicinal Product can be administered as per the protocol referenced in the clinical trial authorisation.
     */
    maxTreatmentPeriod?: Duration;
    /**
     * A species for which this route applies
     * A species for which this route applies.
     */
    targetSpecies?: MedicinalProductPharmaceuticalRouteOfAdministrationTargetSpecies[];
}
/**
 * A pharmaceutical product described in terms of its composition and dose form
 * A pharmaceutical product described in terms of its composition and dose form.
 */
export interface MedicinalProductPharmaceutical extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'MedicinalProductPharmaceutical';
    /**
     * An identifier for the pharmaceutical medicinal product
     * An identifier for the pharmaceutical medicinal product.
     */
    identifier?: Identifier[];
    /**
     * The administrable dose form, after necessary reconstitution
     * The administrable dose form, after necessary reconstitution.
     */
    administrableDoseForm: CodeableConcept;
    /**
     * Todo
     * Todo.
     */
    unitOfPresentation?: CodeableConcept;
    /**
     * Ingredient
     * Ingredient.
     */
    ingredient?: Reference[];
    /**
     * Accompanying device
     * Accompanying device.
     */
    device?: Reference[];
    /**
     * Characteristics e.g. a products onset of action
     * Characteristics e.g. a products onset of action.
     */
    characteristics?: MedicinalProductPharmaceuticalCharacteristics[];
    /**
     * The path by which the pharmaceutical product is taken into or makes contact with the body
     * The path by which the pharmaceutical product is taken into or makes contact with the body.
     */
    routeOfAdministration: MedicinalProductPharmaceuticalRouteOfAdministration[];
}
/**
 * MedicinalProductUndesirableEffect
 * Describe the undesirable effects of the medicinal product.
 */
export interface MedicinalProductUndesirableEffect extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'MedicinalProductUndesirableEffect';
    /**
     * The medication for which this is an indication
     * The medication for which this is an indication.
     */
    subject?: Reference[];
    /**
     * The symptom, condition or undesirable effect
     * The symptom, condition or undesirable effect.
     */
    symptomConditionEffect?: CodeableConcept;
    /**
     * Classification of the effect
     * Classification of the effect.
     */
    classification?: CodeableConcept;
    /**
     * The frequency of occurrence of the effect
     * The frequency of occurrence of the effect.
     */
    frequencyOfOccurrence?: CodeableConcept;
    /**
     * The population group to which this applies
     * The population group to which this applies.
     */
    population?: Population[];
}
/**
 * Resource(s) that are the subject of the event
 * 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.
 */
export interface MessageDefinitionFocus extends BackboneElement {
    /**
     * Type of resource
     * The kind of resource that must be the focus for this message.
     * Multiple focuses addressing different resources may occasionally occur.  E.g. to link or unlink a resource from a particular account or encounter, etc.
     */
    code: code;
    /**
     * Extension for code
     **/
    _code?: Element;
    /**
     * Profile that must be adhered to by focus
     * A profile that reflects constraints for the focal resource (and potentially for related resources).
     * This should be present for most message definitions.  However, if the message focus is only a single resource and there is no need to include referenced resources or otherwise enforce the presence of particular elements, it can be omitted.
     */
    profile?: canonical;
    /**
     * Extension for profile
     **/
    _profile?: Element;
    /**
     * Minimum number of focuses of this type
     * 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.
     */
    min: unsignedInt;
    /**
     * Extension for min
     **/
    _min?: Element;
    /**
     * Maximum number of focuses of this type
     * 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.
     */
    max?: string;
    /**
     * Extension for max
     **/
    _max?: Element;
}
/**
 * Responses to this message
 * Indicates what types of messages may be sent as an application-level response to this message.
 * This indicates an application level response to "close" a transaction implicit in a particular request message.  To define a complete workflow scenario, look to the [[PlanDefinition]] resource which allows the definition of complex orchestrations, conditionality, etc.
 */
export interface MessageDefinitionAllowedResponse extends BackboneElement {
    /**
     * Reference to allowed message definition response
     * A reference to the message definition that must be adhered to by this supported response.
     */
    message: canonical;
    /**
     * Extension for message
     **/
    _message?: Element;
    /**
     * When should this response be used
     * Provides a description of the circumstances in which this response should be used (as opposed to one of the alternative responses).
     */
    situation?: markdown;
    /**
     * Extension for situation
     **/
    _situation?: Element;
}
/**
 * A resource that defines a type of message that can be exchanged between systems
 * 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.
 * This would be a MIF-level artifact.
 */
export interface MessageDefinition extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'MessageDefinition';
    /**
     * Business Identifier for a given MessageDefinition
     * The business identifier that is used to reference the MessageDefinition and *is* expected to be consistent from server to server.
     * Can be a urn:uuid: or a urn:oid: but real http: addresses are preferred.  Multiple instances may share the same URL if they have a distinct version.

The determination of when to create a new version of a resource (same url, new version) vs. defining a new artifact is up to the author.  Considerations for making this decision are found in [Technical and Business Versions](resource.html#versions).

In some cases, the resource can no longer be found at the stated url, but the url itself cannot change. Implementations can use the [meta.source](resource.html#meta) element to indicate where the current master source of the resource can be found.
     */
    url?: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Primary key for the message definition on a given server
     * 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.
     * Typically, this is used for identifiers that can go in an HL7 V3 II (instance identifier) data type, and can then identify this message definition outside of FHIR, where it is not possible to use the logical URI.
     */
    identifier?: Identifier[];
    /**
     * Business version of the message definition
     * 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.
     * There may be different message definition instances that have the same identifier but different versions.  The version can be appended to the url in a reference to allow a reference to a particular business version of the message definition with the format [url]|[version].
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
    /**
     * Name for this message definition (computer friendly)
     * 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.
     * The name is not expected to be globally unique. The name should be a simple alphanumeric type name to ensure that it is machine-processing friendly.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Name for this message definition (human friendly)
     * A short, descriptive, user-friendly title for the message definition.
     * This name does not need to be machine-processing friendly and may contain punctuation, white-space, etc.
     */
    title?: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * Takes the place of
     * A MessageDefinition that is superseded by this definition.
     */
    replaces?: canonical[];
    /**
     * Extension for replaces
     **/
    _replaces?: Element[];
    /**
     * For testing purposes, not real usage
     * 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.
     * Allows filtering of message definitions that are appropriate for use versus not.
     */
    experimental?: boolean;
    /**
     * Extension for experimental
     **/
    _experimental?: Element;
    /**
     * Date last changed
     * The date  (and optionally time) when the message definition was published. The date must change 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.
     * Note that this is not the same as the resource last-modified-date, since the resource may be a secondary representation of the message definition. Additional specific dates may be added as extensions or be found by consulting Provenances associated with past versions of the resource.
     */
    date: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Name of the publisher (organization or individual)
     * The name of the organization or individual that published the message definition.
     * Usually an organization but may be an individual. The publisher (or steward) of the message definition is the organization or individual primarily responsible for the maintenance and upkeep of the message definition. This is not necessarily the same individual or organization that developed and initially authored the content. The publisher is the primary point of contact for questions or issues with the message definition. This item SHOULD be populated unless the information is available from context.
     */
    publisher?: string;
    /**
     * Extension for publisher
     **/
    _publisher?: Element;
    /**
     * Contact details for the publisher
     * Contact details to assist a user in finding and communicating with the publisher.
     * May be a web site, an email address, a telephone number, etc.
     */
    contact?: ContactDetail[];
    /**
     * Natural language description of the message definition
     * A free text natural language description of the message definition from a consumer's perspective.
     * This description can be used to capture details such as why the message definition was built, comments about misuse, instructions for clinical use and interpretation, literature references, examples from the paper world, etc. It is not a rendering of the message definition as conveyed in the 'text' field of the resource itself. This item SHOULD be populated unless the information is available from context (e.g. the language of the message definition is presumed to be the predominant language in the place the message definition was created).
     */
    description?: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * The context that the content is intended to support
     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate message definition instances.
     * When multiple useContexts are specified, there is no expectation that all or any of the contexts apply.
     */
    useContext?: UsageContext[];
    /**
     * Intended jurisdiction for message definition (if applicable)
     * A legal or geographic region in which the message definition is intended to be used.
     * It may be possible for the message definition to be used in jurisdictions other than those for which it was originally designed or intended.
     */
    jurisdiction?: CodeableConcept[];
    /**
     * Why this message definition is defined
     * Explanation of why this message definition is needed and why it has been designed as it has.
     * This element does not describe the usage of the message definition. Instead, it provides traceability of ''why'' the resource is either needed or ''why'' it is defined as it is.  This may be used to point to source materials or specifications that drove the structure of this message definition.
     */
    purpose?: markdown;
    /**
     * Extension for purpose
     **/
    _purpose?: Element;
    /**
     * Use and/or publishing restrictions
     * 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.
     */
    copyright?: markdown;
    /**
     * Extension for copyright
     **/
    _copyright?: Element;
    /**
     * Definition this one is based on
     * The MessageDefinition that is the basis for the contents of this resource.
     */
    base?: canonical;
    /**
     * Extension for base
     **/
    _base?: Element;
    /**
     * Protocol/workflow this is part of
     * Identifies a protocol or workflow that this MessageDefinition represents a step in.
     * It should be possible to use MessageDefinition to describe a message to be used by certain steps in a particular protocol as part of a PlanDefinition or ActivityDefinition.
     */
    parent?: canonical[];
    /**
     * Extension for parent
     **/
    _parent?: Element[];
    /**
     * Event code  or link to the EventDefinition
     * Event code or link to the EventDefinition.
     */
    eventCoding?: Coding;
    /**
     * Event code  or link to the EventDefinition
     * Event code or link to the EventDefinition.
     */
    eventUri?: uri;
    /**
     * Extension for eventUri
     **/
    _eventUri?: Element;
    /**
     * Resource(s) that are the subject of the event
     * 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.
     */
    focus?: MessageDefinitionFocus[];
    /**
     * Responses to this message
     * Indicates what types of messages may be sent as an application-level response to this message.
     * This indicates an application level response to "close" a transaction implicit in a particular request message.  To define a complete workflow scenario, look to the [[PlanDefinition]] resource which allows the definition of complex orchestrations, conditionality, etc.
     */
    allowedResponse?: MessageDefinitionAllowedResponse[];
    /**
     * Canonical reference to a GraphDefinition
     * Canonical reference to a GraphDefinition. If a URL is provided, it is the canonical reference to a [GraphDefinition](graphdefinition.html) that it controls what resources are to be added to the bundle when building the document. The GraphDefinition can also specify profiles that apply to the various resources.
     */
    graph?: canonical[];
    /**
     * Extension for graph
     **/
    _graph?: Element[];
    /**
     * draft | active | retired | unknown
     * The status of this message definition. Enables tracking the life-cycle of the content.
     * Allows filtering of message definitions that are appropriate for use versus not.
     */
    status: MessageDefinitionPublicationStatus;
    /**
     * consequence | currency | notification
     * The impact of the content of the message.
     */
    category?: MessageDefinitionMessageSignificanceCategory;
    /**
     * always | on-error | never | on-success
     * Declare at a message definition level whether a response is required or only upon error or success, or never.
     * This enables the capability currently available through MSH-16 (Application Level acknowledgement) in HL7 Version 2 to declare at a message instance level whether a response is required or only upon error or success, or never.
     */
    responseRequired?: MessageDefinitionmessageheader_response_request;
}
/**
 * Message destination application(s)
 * The destination application which the message is intended for.
 * There SHOULD be at least one destination, but in some circumstances, the source system is unaware of any particular destination system.
 */
export interface MessageHeaderDestination extends BackboneElement {
    /**
     * Name of system
     * Human-readable name for the target system.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Particular delivery destination within the destination
     * Identifies the target end system in situations where the initial message transmission is to an intermediary system.
     */
    target?: Reference;
    /**
     * Actual destination address or id
     * Indicates where the message should be routed to.
     * The id may be a non-resolvable URI for systems that do not use standard network-based addresses.
     */
    endpoint: url;
    /**
     * Extension for endpoint
     **/
    _endpoint?: Element;
    /**
     * Intended "real-world" recipient for the data
     * Allows data conveyed by a message to be addressed to a particular person or department when routing to a specific application isn't sufficient.
     */
    receiver?: Reference;
}
/**
 * Message source application
 * The source application from which this message originated.
 */
export interface MessageHeaderSource extends BackboneElement {
    /**
     * Name of system
     * Human-readable name for the source system.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Name of software running the system
     * May include configuration or other information useful in debugging.
     */
    software?: string;
    /**
     * Extension for software
     **/
    _software?: Element;
    /**
     * Version of software running
     * Can convey versions of multiple systems in situations where a message passes through multiple hands.
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
    /**
     * Human contact for problems
     * An e-mail, phone, website or other contact point to use to resolve issues with message communications.
     */
    contact?: ContactPoint;
    /**
     * Actual message source address or id
     * Identifies the routing target to send acknowledgements to.
     * The id may be a non-resolvable URI for systems that do not use standard network-based addresses.
     */
    endpoint: url;
    /**
     * Extension for endpoint
     **/
    _endpoint?: Element;
}
/**
 * If this is a reply to prior message
 * Information about the message that this message is a response to.  Only present if this message is a response.
 */
export interface MessageHeaderResponse extends BackboneElement {
    /**
     * Id of original message
     * The MessageHeader.id of the message to which this message is a response.
     */
    identifier: id;
    /**
     * Extension for identifier
     **/
    _identifier?: Element;
    /**
     * Specific list of hints/warnings/errors
     * Full details of any issues found in the message.
     * This SHALL be contained in the bundle. If any of the issues are errors, the response code SHALL be an error.
     */
    details?: Reference;
    /**
     * ok | transient-error | fatal-error
     * Code that identifies the type of response to the message - whether it was successful or not, and whether it should be resent or not.
     * This is a generic response to the request message. Specific data for the response will be found in MessageHeader.focus.
     */
    code: MessageHeaderResponseType;
}
/**
 * A resource that describes a message that is exchanged between systems
 * 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.
 */
export interface MessageHeader extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'MessageHeader';
    /**
     * Code for the event this message represents or link to event definition
     * 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://terminology.hl7.org/CodeSystem/message-events".  Alternatively uri to the EventDefinition.
     * The time of the event will be found in the focus resource. The time of the message will be found in [Bundle.timestamp](bundle-definitions.html#Bundle.timestamp).
     */
    eventCoding?: Coding;
    /**
     * Code for the event this message represents or link to event definition
     * 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://terminology.hl7.org/CodeSystem/message-events".  Alternatively uri to the EventDefinition.
     * The time of the event will be found in the focus resource. The time of the message will be found in [Bundle.timestamp](bundle-definitions.html#Bundle.timestamp).
     */
    eventUri?: uri;
    /**
     * Extension for eventUri
     **/
    _eventUri?: Element;
    /**
     * Message destination application(s)
     * The destination application which the message is intended for.
     * There SHOULD be at least one destination, but in some circumstances, the source system is unaware of any particular destination system.
     */
    destination?: MessageHeaderDestination[];
    /**
     * Real world sender of the message
     * Identifies the sending system to allow the use of a trust relationship.
     * Use case is for where a (trusted) sending system is responsible for multiple organizations, and therefore cannot differentiate based on source endpoint / authentication alone.
     */
    sender?: Reference;
    /**
     * The source of the data entry
     * 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.
     * Usually only for the request but can be used in a response.
     */
    enterer?: Reference;
    /**
     * The source of the decision
     * 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.
     * Usually only for the request but can be used in a response.
     */
    author?: Reference;
    /**
     * Message source application
     * The source application from which this message originated.
     */
    source: MessageHeaderSource;
    /**
     * Final responsibility for event
     * 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.
     * Usually only for the request but can be used in a response.
     */
    responsible?: Reference;
    /**
     * Cause of event
     * Coded indication of the cause for the event - indicates  a reason for the occurrence of the event that is a focus of this message.
     */
    reason?: CodeableConcept;
    /**
     * If this is a reply to prior message
     * Information about the message that this message is a response to.  Only present if this message is a response.
     */
    response?: MessageHeaderResponse;
    /**
     * The actual content of the message
     * The actual data of the message - a reference to the root/focus class of the event.
     * The data is defined where the transaction type is defined. The transaction data is always included in the bundle that is the full message.  Only the root resource is specified.  The resources it references should be contained in the bundle but are not also listed here.  Multiple repetitions are allowed to cater for merges and other situations with multiple focal targets.
     */
    focus?: Reference[];
    /**
     * Link to the definition for this message
     * Permanent link to the MessageDefinition for this message.
     */
    definition?: canonical;
    /**
     * Extension for definition
     **/
    _definition?: Element;
}
/**
 * A sequence used as reference
 * A sequence that is used as a reference to describe variants that are present in a sequence analyzed.
 */
export interface MolecularSequenceReferenceSeq extends BackboneElement {
    /**
     * Chromosome containing genetic finding
     * 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)).
     */
    chromosome?: CodeableConcept;
    /**
     * The Genome Build used for reference, following GRCh build versions e.g. 'GRCh 37'
     * 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.
     */
    genomeBuild?: string;
    /**
     * Extension for genomeBuild
     **/
    _genomeBuild?: Element;
    /**
     * Reference identifier
     * Reference identifier of reference sequence submitted to NCBI. It must match the type in the MolecularSequence.type field. For example, the prefix, “NG_” identifies reference sequence for genes, “NM_” for messenger RNA transcripts, and “NP_” for amino acid sequences.
     */
    referenceSeqId?: CodeableConcept;
    /**
     * A pointer to another MolecularSequence entity as reference sequence
     * A pointer to another MolecularSequence entity as reference sequence.
     */
    referenceSeqPointer?: Reference;
    /**
     * A string to represent reference sequence
     * A string like "ACGT".
     */
    referenceSeqString?: string;
    /**
     * Extension for referenceSeqString
     **/
    _referenceSeqString?: Element;
    /**
     * Start position of the window on the  reference sequence
     * 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.
     */
    windowStart?: integer;
    /**
     * Extension for windowStart
     **/
    _windowStart?: Element;
    /**
     * End position of the window on the reference sequence
     * End position of the window on the reference sequence. If the coordinate system is 0-based then end 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.
     */
    windowEnd?: integer;
    /**
     * Extension for windowEnd
     **/
    _windowEnd?: Element;
    /**
     * sense | antisense
     * A relative reference to a DNA strand based on gene orientation. The strand that contains the open reading frame of the gene is the "sense" strand, and the opposite complementary strand is the "antisense" strand.
     */
    orientation?: MolecularSequenceorientationType;
    /**
     * watson | crick
     * An absolute reference to a strand. The Watson strand is the strand whose 5'-end is on the short arm of the chromosome, and the Crick strand as the one whose 5'-end is on the long arm.
     */
    strand?: MolecularSequencestrandType;
}
/**
 * Variant in sequence
 * 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.
 */
export interface MolecularSequenceVariant extends BackboneElement {
    /**
     * Start position of the variant on the  reference sequence
     * 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.
     */
    start?: integer;
    /**
     * Extension for start
     **/
    _start?: Element;
    /**
     * End position of the variant on the reference sequence
     * End position of the variant on the reference sequence. If the coordinate system is 0-based then end 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.
     */
    end?: integer;
    /**
     * Extension for end
     **/
    _end?: Element;
    /**
     * Allele that was observed
     * 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.
     */
    observedAllele?: string;
    /**
     * Extension for observedAllele
     **/
    _observedAllele?: Element;
    /**
     * Allele in the reference sequence
     * 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.
     */
    referenceAllele?: string;
    /**
     * Extension for referenceAllele
     **/
    _referenceAllele?: Element;
    /**
     * Extended CIGAR string for aligning the sequence with reference bases
     * 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).
     */
    cigar?: string;
    /**
     * Extension for cigar
     **/
    _cigar?: Element;
    /**
     * Pointer to observed variant information
     * A pointer to an Observation containing variant information.
     */
    variantPointer?: Reference;
}
/**
 * Receiver Operator Characteristic (ROC) Curve
 * Receiver Operator Characteristic (ROC) Curve  to give sensitivity/specificity tradeoff.
 */
export interface MolecularSequenceQualityRoc extends BackboneElement {
    /**
     * Genotype quality score
     * Invidual data point representing the GQ (genotype quality) score threshold.
     */
    score?: integer[];
    /**
     * Extension for score
     **/
    _score?: Element[];
    /**
     * Roc score true positive numbers
     * The number of true positives if the GQ score threshold was set to "score" field value.
     */
    numTP?: integer[];
    /**
     * Extension for numTP
     **/
    _numTP?: Element[];
    /**
     * Roc score false positive numbers
     * The number of false positives if the GQ score threshold was set to "score" field value.
     */
    numFP?: integer[];
    /**
     * Extension for numFP
     **/
    _numFP?: Element[];
    /**
     * Roc score false negative numbers
     * The number of false negatives if the GQ score threshold was set to "score" field value.
     */
    numFN?: integer[];
    /**
     * Extension for numFN
     **/
    _numFN?: Element[];
    /**
     * Precision of the GQ score
     * Calculated precision if the GQ score threshold was set to "score" field value.
     */
    precision?: decimal[];
    /**
     * Extension for precision
     **/
    _precision?: Element[];
    /**
     * Sensitivity of the GQ score
     * Calculated sensitivity if the GQ score threshold was set to "score" field value.
     */
    sensitivity?: decimal[];
    /**
     * Extension for sensitivity
     **/
    _sensitivity?: Element[];
    /**
     * FScore of the GQ score
     * Calculated fScore if the GQ score threshold was set to "score" field value.
     */
    fMeasure?: decimal[];
    /**
     * Extension for fMeasure
     **/
    _fMeasure?: Element[];
}
/**
 * An set of value as quality of sequence
 * 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)).
 */
export interface MolecularSequenceQuality extends BackboneElement {
    /**
     * Standard sequence for comparison
     * Gold standard sequence used for comparing against.
     */
    standardSequence?: CodeableConcept;
    /**
     * Start position of the sequence
     * Start position of the sequence. If the coordinate system is either 0-based or 1-based, then start position is inclusive.
     */
    start?: integer;
    /**
     * Extension for start
     **/
    _start?: Element;
    /**
     * End position of the sequence
     * End position of the sequence. If the coordinate system is 0-based then end 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.
     */
    end?: integer;
    /**
     * Extension for end
     **/
    _end?: Element;
    /**
     * Quality score for the comparison
     * The score of an experimentally derived feature such as a p-value ([SO:0001685](http://www.sequenceontology.org/browser/current_svn/term/SO:0001685)).
     */
    score?: Quantity;
    /**
     * Method to get quality
     * Which method is used to get sequence quality.
     */
    method?: CodeableConcept;
    /**
     * True positives from the perspective of the truth data
     * 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.
     */
    truthTP?: decimal;
    /**
     * Extension for truthTP
     **/
    _truthTP?: Element;
    /**
     * True positives from the perspective of the query data
     * 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.
     */
    queryTP?: decimal;
    /**
     * Extension for queryTP
     **/
    _queryTP?: Element;
    /**
     * False negatives
     * 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.
     */
    truthFN?: decimal;
    /**
     * Extension for truthFN
     **/
    _truthFN?: Element;
    /**
     * False positives
     * 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.
     */
    queryFP?: decimal;
    /**
     * Extension for queryFP
     **/
    _queryFP?: Element;
    /**
     * False positives where the non-REF alleles in the Truth and Query Call Sets match
     * 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).
     */
    gtFP?: decimal;
    /**
     * Extension for gtFP
     **/
    _gtFP?: Element;
    /**
     * Precision of comparison
     * QUERY.TP / (QUERY.TP + QUERY.FP).
     */
    precision?: decimal;
    /**
     * Extension for precision
     **/
    _precision?: Element;
    /**
     * Recall of comparison
     * TRUTH.TP / (TRUTH.TP + TRUTH.FN).
     */
    recall?: decimal;
    /**
     * Extension for recall
     **/
    _recall?: Element;
    /**
     * F-score
     * Harmonic mean of Recall and Precision, computed as: 2 * precision * recall / (precision + recall).
     */
    fScore?: decimal;
    /**
     * Extension for fScore
     **/
    _fScore?: Element;
    /**
     * Receiver Operator Characteristic (ROC) Curve
     * Receiver Operator Characteristic (ROC) Curve  to give sensitivity/specificity tradeoff.
     */
    roc?: MolecularSequenceQualityRoc;
    /**
     * indel | snp | unknown
     * INDEL / SNP / Undefined variant.
     */
    type: MolecularSequencequalityType;
}
/**
 * External repository which contains detailed report related with observedSeq in this resource
 * Configurations of the external repository. The repository shall store target's observedSeq or records related with target's observedSeq.
 */
export interface MolecularSequenceRepository extends BackboneElement {
    /**
     * URI of the repository
     * URI of an external repository which contains further details about the genetics data.
     */
    url?: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Repository's name
     * URI of an external repository which contains further details about the genetics data.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Id of the dataset that used to call for dataset in repository
     * 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.
     */
    datasetId?: string;
    /**
     * Extension for datasetId
     **/
    _datasetId?: Element;
    /**
     * Id of the variantset that used to call for variantset in repository
     * 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.
     */
    variantsetId?: string;
    /**
     * Extension for variantsetId
     **/
    _variantsetId?: Element;
    /**
     * Id of the read
     * Id of the read in this external repository.
     */
    readsetId?: string;
    /**
     * Extension for readsetId
     **/
    _readsetId?: Element;
    /**
     * directlink | openapi | login | oauth | other
     * Click and see / RESTful API / Need login to see / RESTful API with authentication / Other ways to see resource.
     */
    type: MolecularSequencerepositoryType;
}
/**
 * Structural variant outer
 * Structural variant outer.
 */
export interface MolecularSequenceStructureVariantOuter extends BackboneElement {
    /**
     * Structural variant outer start
     * Structural variant outer start. If the coordinate system is either 0-based or 1-based, then start position is inclusive.
     */
    start?: integer;
    /**
     * Extension for start
     **/
    _start?: Element;
    /**
     * Structural variant outer end
     * Structural variant outer end. If the coordinate system is 0-based then end 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.
     */
    end?: integer;
    /**
     * Extension for end
     **/
    _end?: Element;
}
/**
 * Structural variant inner
 * Structural variant inner.
 */
export interface MolecularSequenceStructureVariantInner extends BackboneElement {
    /**
     * Structural variant inner start
     * Structural variant inner start. If the coordinate system is either 0-based or 1-based, then start position is inclusive.
     */
    start?: integer;
    /**
     * Extension for start
     **/
    _start?: Element;
    /**
     * Structural variant inner end
     * Structural variant inner end. If the coordinate system is 0-based then end 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.
     */
    end?: integer;
    /**
     * Extension for end
     **/
    _end?: Element;
}
/**
 * Structural variant
 * Information about chromosome structure variation.
 */
export interface MolecularSequenceStructureVariant extends BackboneElement {
    /**
     * Structural variant change type
     * Information about chromosome structure variation DNA change type.
     */
    variantType?: CodeableConcept;
    /**
     * Does the structural variant have base pair resolution breakpoints?
     * Used to indicate if the outer and inner start-end values have the same meaning.
     */
    exact?: boolean;
    /**
     * Extension for exact
     **/
    _exact?: Element;
    /**
     * Structural variant length
     * Length of the variant chromosome.
     */
    length?: integer;
    /**
     * Extension for length
     **/
    _length?: Element;
    /**
     * Structural variant outer
     * Structural variant outer.
     */
    outer?: MolecularSequenceStructureVariantOuter;
    /**
     * Structural variant inner
     * Structural variant inner.
     */
    inner?: MolecularSequenceStructureVariantInner;
}
/**
 * Information about a biological sequence
 * Raw data describing a biological sequence.
 */
export interface MolecularSequence extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'MolecularSequence';
    /**
     * Unique ID for this particular sequence. This is a FHIR-defined id
     * A unique identifier for this particular sequence instance. This is a FHIR-defined id.
     */
    identifier?: Identifier[];
    /**
     * Base number of coordinate system (0 for 0-based numbering or coordinates, inclusive start, exclusive end, 1 for 1-based numbering, inclusive start, inclusive end)
     * 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).
     */
    coordinateSystem: integer;
    /**
     * Extension for coordinateSystem
     **/
    _coordinateSystem?: Element;
    /**
     * Who and/or what this is about
     * The patient whose sequencing results are described by this resource.
     */
    patient?: Reference;
    /**
     * Specimen used for sequencing
     * Specimen used for sequencing.
     */
    specimen?: Reference;
    /**
     * The method for sequencing
     * The method for sequencing, for example, chip information.
     */
    device?: Reference;
    /**
     * Who should be responsible for test result
     * The organization or lab that should be responsible for this result.
     */
    performer?: Reference;
    /**
     * The number of copies of the sequence of interest.  (RNASeq)
     * The number of copies of the sequence of interest. (RNASeq).
     */
    quantity?: Quantity;
    /**
     * A sequence used as reference
     * A sequence that is used as a reference to describe variants that are present in a sequence analyzed.
     */
    referenceSeq?: MolecularSequenceReferenceSeq;
    /**
     * Variant in sequence
     * 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.
     */
    variant?: MolecularSequenceVariant[];
    /**
     * Sequence that was observed
     * Sequence that was observed. It is the result marked by referenceSeq along with variant records on referenceSeq. This shall start from referenceSeq.windowStart and end by referenceSeq.windowEnd.
     */
    observedSeq?: string;
    /**
     * Extension for observedSeq
     **/
    _observedSeq?: Element;
    /**
     * An set of value as quality of sequence
     * 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)).
     */
    quality?: MolecularSequenceQuality[];
    /**
     * Average number of reads representing a given nucleotide in the reconstructed sequence
     * Coverage (read depth or depth) is the average number of reads representing a given nucleotide in the reconstructed sequence.
     */
    readCoverage?: integer;
    /**
     * Extension for readCoverage
     **/
    _readCoverage?: Element;
    /**
     * External repository which contains detailed report related with observedSeq in this resource
     * Configurations of the external repository. The repository shall store target's observedSeq or records related with target's observedSeq.
     */
    repository?: MolecularSequenceRepository[];
    /**
     * Pointer to next atomic sequence
     * Pointer to next atomic sequence which at most contains one variant.
     */
    pointer?: Reference[];
    /**
     * Structural variant
     * Information about chromosome structure variation.
     */
    structureVariant?: MolecularSequenceStructureVariant[];
    /**
     * aa | dna | rna
     * Amino Acid Sequence/ DNA Sequence / RNA Sequence.
     */
    type?: MolecularSequencesequenceType;
}
/**
 * Unique identifiers used for system
 * Indicates how the system may be identified when referenced in electronic exchange.
 * Multiple identifiers may exist, either due to duplicate registration, regional rules, needs of different communication technologies, etc.
 */
export interface NamingSystemUniqueId extends BackboneElement {
    /**
     * The unique identifier
     * The string that should be sent over the wire to identify the code system or identifier system.
     * If the value is a URI intended for use as FHIR system identifier, the URI should not contain "\" or "?" or "," since this makes escaping very difficult.
     */
    value: string;
    /**
     * Extension for value
     **/
    _value?: Element;
    /**
     * Is this the id that should be used for this type
     * Indicates whether this identifier is the "preferred" identifier of this type.
     */
    preferred?: boolean;
    /**
     * Extension for preferred
     **/
    _preferred?: Element;
    /**
     * Notes about identifier usage
     * Notes about the past or intended usage of this identifier.
     * e.g. "must be used in Germany" or "was initially published in error with this value".
     */
    comment?: string;
    /**
     * Extension for comment
     **/
    _comment?: Element;
    /**
     * When is identifier valid?
     * 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.
     * Within a registry, a given identifier should only be "active" for a single namespace at a time.  (Ideally, an identifier should only ever be associated with a single namespace across all time).
     */
    period?: Period;
    /**
     * oid | uuid | uri | other
     * Identifies the unique identifier scheme used for this particular identifier.
     * Different identifier types may be used in different types of communications (OIDs for v3, URIs for FHIR, etc.).  Other includes RUIDs from v3, standard v2 code name strings, etc.
     */
    type: NamingSystemIdentifierType;
}
/**
 * System of unique identification
 * 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.
 */
export interface NamingSystem extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'NamingSystem';
    /**
     * Name for this naming system (computer friendly)
     * 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.
     * The name is not expected to be globally unique. The name should be a simple alphanumeric type name to ensure that it is machine-processing friendly.The"symbolic name" for an OID would be captured as an extension.
     */
    name: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Date last changed
     * The date  (and optionally time) when the naming system was published. The date must change 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.
     * Note that this is not the same as the resource last-modified-date, since the resource may be a secondary representation of the naming system. Additional specific dates may be added as extensions or be found by consulting Provenances associated with past versions of the resource.
     */
    date: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Name of the publisher (organization or individual)
     * The name of the organization or individual that published the naming system.
     * Usually an organization but may be an individual. The publisher (or steward) of the naming system is the organization or individual primarily responsible for the maintenance and upkeep of the naming system. This is not necessarily the same individual or organization that developed and initially authored the content. The publisher is the primary point of contact for questions or issues with the naming system. This item SHOULD be populated unless the information is available from context.
     */
    publisher?: string;
    /**
     * Extension for publisher
     **/
    _publisher?: Element;
    /**
     * Contact details for the publisher
     * Contact details to assist a user in finding and communicating with the publisher.
     * May be a web site, an email address, a telephone number, etc.
     */
    contact?: ContactDetail[];
    /**
     * Who maintains system namespace?
     * The name of the organization that is responsible for issuing identifiers or codes for this namespace and ensuring their non-collision.
     * This is the primary organization.  Responsibility for some aspects of a namespace may be delegated.
     */
    responsible?: string;
    /**
     * Extension for responsible
     **/
    _responsible?: Element;
    /**
     * e.g. driver,  provider,  patient, bank etc.
     * Categorizes a naming system for easier search by grouping related naming systems.
     * This will most commonly be used for identifier namespaces, but categories could potentially be useful for code systems and authorities as well.
     */
    type?: CodeableConcept;
    /**
     * Natural language description of the naming system
     * 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.
     * This description can be used to capture details such as why the naming system was built, comments about misuse, instructions for clinical use and interpretation, literature references, examples from the paper world, etc. It is not a rendering of the naming system as conveyed in the 'text' field of the resource itself. This item SHOULD be populated unless the information is available from context (e.g. the language of the naming system is presumed to be the predominant language in the place the naming system was created).
     */
    description?: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * The context that the content is intended to support
     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate naming system instances.
     * When multiple useContexts are specified, there is no expectation that all or any of the contexts apply.
     */
    useContext?: UsageContext[];
    /**
     * Intended jurisdiction for naming system (if applicable)
     * A legal or geographic region in which the naming system is intended to be used.
     * It may be possible for the naming system to be used in jurisdictions other than those for which it was originally designed or intended.
     */
    jurisdiction?: CodeableConcept[];
    /**
     * How/where is it used
     * Provides guidance on the use of the namespace, including the handling of formatting characters, use of upper vs. lower case, etc.
     */
    usage?: string;
    /**
     * Extension for usage
     **/
    _usage?: Element;
    /**
     * Unique identifiers used for system
     * Indicates how the system may be identified when referenced in electronic exchange.
     * Multiple identifiers may exist, either due to duplicate registration, regional rules, needs of different communication technologies, etc.
     */
    uniqueId: NamingSystemUniqueId[];
    /**
     * draft | active | retired | unknown
     * The status of this naming system. Enables tracking the life-cycle of the content.
     * Allows filtering of naming systems that are appropriate for use versus not.
     */
    status: NamingSystemPublicationStatus;
    /**
     * codesystem | identifier | root
     * Indicates the purpose for the naming system - what kinds of things does it make unique?
     */
    kind: NamingSystemType;
}
/**
 * Required  nutrient modifications
 * Class that defines the quantity and type of nutrient modifications (for example carbohydrate, fiber or sodium) required for the oral diet.
 */
export interface NutritionOrderOralDietNutrient extends BackboneElement {
    /**
     * Type of nutrient that is being modified
     * The nutrient that is being modified such as carbohydrate or sodium.
     */
    modifier?: CodeableConcept;
    /**
     * Quantity of the specified nutrient
     * The quantity of the specified nutrient to include in diet.
     */
    amount?: Quantity;
}
/**
 * Required  texture modifications
 * Class that describes any texture modifications required for the patient to safely consume various types of solid foods.
 */
export interface NutritionOrderOralDietTexture extends BackboneElement {
    /**
     * Code to indicate how to alter the texture of the foods, e.g. pureed
     * Any texture modifications (for solid foods) that should be made, e.g. easy to chew, chopped, ground, and pureed.
     * Coupled with the foodType (Meat).
     */
    modifier?: CodeableConcept;
    /**
     * Concepts that are used to identify an entity that is ingested for nutritional purposes
     * The food type(s) (e.g. meats, all foods)  that the texture modification applies to.  This could be all foods types.
     * Coupled with the `texture.modifier`; could be (All Foods).
     */
    foodType?: CodeableConcept;
}
/**
 * Oral diet components
 * Diet given orally in contrast to enteral (tube) feeding.
 */
export interface NutritionOrderOralDiet extends BackboneElement {
    /**
     * Type of oral diet or diet restrictions that describe what can be consumed orally
     * The kind of diet or dietary restriction such as fiber restricted diet or diabetic diet.
     */
    type?: CodeableConcept[];
    /**
     * Scheduled frequency of diet
     * 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.
     */
    schedule?: Timing[];
    /**
     * Required  nutrient modifications
     * Class that defines the quantity and type of nutrient modifications (for example carbohydrate, fiber or sodium) required for the oral diet.
     */
    nutrient?: NutritionOrderOralDietNutrient[];
    /**
     * Required  texture modifications
     * Class that describes any texture modifications required for the patient to safely consume various types of solid foods.
     */
    texture?: NutritionOrderOralDietTexture[];
    /**
     * The required consistency of fluids and liquids provided to the patient
     * The required consistency (e.g. honey-thick, nectar-thick, thin, thickened.) of liquids or fluids served to the patient.
     */
    fluidConsistencyType?: CodeableConcept[];
    /**
     * Instructions or additional information about the oral diet
     * Free text or additional instructions or information pertaining to the oral diet.
     * Free text dosage instructions can be used for cases where the instructions are too complex to code.
     */
    instruction?: string;
    /**
     * Extension for instruction
     **/
    _instruction?: Element;
}
/**
 * Supplement components
 * Oral nutritional products given in order to add further nutritional value to the patient's diet.
 */
export interface NutritionOrderSupplement extends BackboneElement {
    /**
     * Type of supplement product requested
     * The kind of nutritional supplement product required such as a high protein or pediatric clear liquid supplement.
     */
    type?: CodeableConcept;
    /**
     * Product or brand name of the nutritional supplement
     * The product or brand name of the nutritional supplement such as "Acme Protein Shake".
     */
    productName?: string;
    /**
     * Extension for productName
     **/
    _productName?: Element;
    /**
     * Scheduled frequency of supplement
     * 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.
     */
    schedule?: Timing[];
    /**
     * Amount of the nutritional supplement
     * The amount of the nutritional supplement to be given.
     */
    quantity?: Quantity;
    /**
     * Instructions or additional information about the oral supplement
     * Free text or additional instructions or information pertaining to the oral supplement.
     * Free text dosage instructions can be used for cases where the instructions are too complex to code.
     */
    instruction?: string;
    /**
     * Extension for instruction
     **/
    _instruction?: Element;
}
/**
 * Formula feeding instruction as structured data
 * 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.
 * See implementation notes below for further discussion on how to order continuous vs bolus enteral feeding using this resource.
 */
export interface NutritionOrderEnteralFormulaAdministration extends BackboneElement {
    /**
     * Scheduled frequency of enteral feeding
     * The time period and frequency at which the enteral formula should be delivered to the patient.
     */
    schedule?: Timing;
    /**
     * The volume of formula to provide
     * The volume of formula to provide to the patient per the specified administration schedule.
     */
    quantity?: Quantity;
    /**
     * Speed with which the formula is provided per period of time
     * The rate of administration of formula via a feeding pump, e.g. 60 mL per hour, according to the specified schedule.
     * Ratio is used when the quantity value in the denominator is not "1", otherwise use Quantity. For example, the Ratio datatype is used for "200 mL/4 hrs" versus the Quantity datatype for "50 mL/hr".
     */
    rateQuantity?: Quantity;
    /**
     * Speed with which the formula is provided per period of time
     * The rate of administration of formula via a feeding pump, e.g. 60 mL per hour, according to the specified schedule.
     * Ratio is used when the quantity value in the denominator is not "1", otherwise use Quantity. For example, the Ratio datatype is used for "200 mL/4 hrs" versus the Quantity datatype for "50 mL/hr".
     */
    rateRatio?: Ratio;
}
/**
 * Enteral formula components
 * Feeding provided through the gastrointestinal tract via a tube, catheter, or stoma that delivers nutrition distal to the oral cavity.
 */
export interface NutritionOrderEnteralFormula extends BackboneElement {
    /**
     * Type of enteral or infant formula
     * The type of enteral or infant formula such as an adult standard formula with fiber or a soy-based infant formula.
     */
    baseFormulaType?: CodeableConcept;
    /**
     * Product or brand name of the enteral or infant formula
     * The product or brand name of the enteral or infant formula product such as "ACME Adult Standard Formula".
     */
    baseFormulaProductName?: string;
    /**
     * Extension for baseFormulaProductName
     **/
    _baseFormulaProductName?: Element;
    /**
     * Type of modular component to add to the feeding
     * 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.
     */
    additiveType?: CodeableConcept;
    /**
     * Product or brand name of the modular additive
     * The product or brand name of the type of modular component to be added to the formula.
     */
    additiveProductName?: string;
    /**
     * Extension for additiveProductName
     **/
    _additiveProductName?: Element;
    /**
     * Amount of energy per specified volume that is required
     * 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.
     */
    caloricDensity?: Quantity;
    /**
     * How the formula should enter the patient's gastrointestinal tract
     * The route or physiological path of administration into the patient's gastrointestinal  tract for purposes of providing the formula feeding, e.g. nasogastric tube.
     */
    routeofAdministration?: CodeableConcept;
    /**
     * Formula feeding instruction as structured data
     * 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.
     * See implementation notes below for further discussion on how to order continuous vs bolus enteral feeding using this resource.
     */
    administration?: NutritionOrderEnteralFormulaAdministration[];
    /**
     * Upper limit on formula volume per unit of time
     * 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.
     */
    maxVolumeToDeliver?: Quantity;
    /**
     * Formula feeding instructions expressed as text
     * Free text formula administration, feeding instructions or additional instructions or information.
     * Free text dosage instructions can be used for cases where the instructions are too complex to code.
     */
    administrationInstruction?: string;
    /**
     * Extension for administrationInstruction
     **/
    _administrationInstruction?: Element;
}
/**
 * Diet, formula or nutritional supplement request
 * A request to supply a diet, formula feeding (enteral) or oral nutritional supplement to a patient/resident.
 * Referenced by an Order Request (workflow).
 */
export interface NutritionOrder extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'NutritionOrder';
    /**
     * Identifiers assigned to this order
     * Identifiers assigned to this order by the order sender or by the order receiver.
     * The Identifier.type element can be to indicate filler vs. placer if needed.  This is explained in further detail [here](servicerequest.html#notes).
     */
    identifier?: Identifier[];
    /**
     * Instantiates FHIR protocol or definition
     * The URL pointing to a FHIR-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this NutritionOrder.
     * Note: This is a business identifier, not a resource identifier (see [discussion](resource.html#identifiers)).  It is best practice for the identifier to only appear on a single resource instance, however business practices may occasionally dictate that multiple resource instances with the same identifier can exist - possibly even with different resource types.  For example, multiple Patient and a Person resource instance might share the same social insurance number.
     */
    instantiatesCanonical?: canonical[];
    /**
     * Extension for instantiatesCanonical
     **/
    _instantiatesCanonical?: Element[];
    /**
     * Instantiates external protocol or definition
     * The URL pointing to an externally maintained protocol, guideline, orderset or other definition that is adhered to in whole or in part by this NutritionOrder.
     * This might be an HTML page, PDF, etc. or could just be a non-resolvable URI identifier.
     */
    instantiatesUri?: uri[];
    /**
     * Extension for instantiatesUri
     **/
    _instantiatesUri?: Element[];
    /**
     * Instantiates protocol or definition
     * The URL pointing to a protocol, guideline, orderset or other definition that is adhered to in whole or in part by this NutritionOrder.
     */
    instantiates?: uri[];
    /**
     * Extension for instantiates
     **/
    _instantiates?: Element[];
    /**
     * The person who requires the diet, formula or nutritional supplement
     * The person (patient) who needs the nutrition order for an oral diet, nutritional supplement and/or enteral or formula feeding.
     */
    patient: Reference;
    /**
     * The encounter associated with this nutrition order
     * An encounter that provides additional information about the healthcare context in which this request is made.
     */
    encounter?: Reference;
    /**
     * Date and time the nutrition order was requested
     * The date and time that this nutrition order was requested.
     */
    dateTime: dateTime;
    /**
     * Extension for dateTime
     **/
    _dateTime?: Element;
    /**
     * Who ordered the diet, formula or nutritional supplement
     * The practitioner that holds legal responsibility for ordering the diet, nutritional supplement, or formula feedings.
     */
    orderer?: Reference;
    /**
     * List of the patient's food and nutrition-related allergies and intolerances
     * A link to a record of allergies or intolerances  which should be included in the nutrition order.
     * Information on a patient's food allergies and intolerances to inform healthcare personnel about the type of foods that the patient shouldn't receive or consume.
     */
    allergyIntolerance?: Reference[];
    /**
     * Order-specific modifier about the type of food that should be given
     * 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.
     * Information on a patient's food preferences that inform healthcare personnel about the food that the patient should receive or consume.
     */
    foodPreferenceModifier?: CodeableConcept[];
    /**
     * Order-specific modifier about the type of food that should not be given
     * This modifier is used to convey Order-specific modifier about the type of oral food or oral fluids 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.
     * Information on a patient's food allergies, intolerances and preferences to inform healthcare personnel about the type  of foods that the patient shouldn't receive or consume.
     */
    excludeFoodModifier?: CodeableConcept[];
    /**
     * Oral diet components
     * Diet given orally in contrast to enteral (tube) feeding.
     */
    oralDiet?: NutritionOrderOralDiet;
    /**
     * Supplement components
     * Oral nutritional products given in order to add further nutritional value to the patient's diet.
     */
    supplement?: NutritionOrderSupplement[];
    /**
     * Enteral formula components
     * Feeding provided through the gastrointestinal tract via a tube, catheter, or stoma that delivers nutrition distal to the oral cavity.
     */
    enteralFormula?: NutritionOrderEnteralFormula;
    /**
     * Comments
     * Comments made about the {{title}} by the requester, performer, subject or other participants.
     * This element SHALL NOT be used to supply free text instructions for the diet which are represented in the `.oralDiet.instruction`, `supplement.instruction`, or `enteralFormula.administrationInstruction` elements.
     */
    note?: Annotation[];
    /**
     * draft | active | on-hold | revoked | completed | entered-in-error | unknown
     * The workflow status of the nutrition order/request.
     * Typically the system placing the order sets the status to "requested". Thereafter, the order is maintained by the receiver that updates the status as the request is handled.  This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
     */
    status: NutritionOrderStatus;
    /**
     * proposal | plan | directive | order | original-order | reflex-order | filler-order | instance-order | option
     * Indicates the level of authority/intentionality associated with the NutrionOrder and where the request fits into the workflow chain.
     * When resources map to this element, they are free to define as many codes as necessary to cover their space and will map to "proposal, plan or order".  Can have multiple codes that map to one of these.  E.g. "original order", "encoded order", "reflex order" would all map to "order".  Expectation is that the set of codes is mutually exclusive or a strict all-encompassing hierarchy.
     */
    intent: NutritionOrderNutritiionOrderIntent;
}
/**
 * Provides guide for interpretation
 * Guidance on how to interpret the value by comparison to a normal or recommended range.  Multiple reference ranges are interpreted as an "OR".   In other words, to represent two distinct target populations, two `referenceRange` elements would be used.
 * Most observations only have one generic reference range. Systems MAY choose to restrict to only supplying the relevant reference range based on knowledge about the patient (e.g., specific to the patient's age, gender, weight and other factors), but this might not be possible or appropriate. Whenever more than one reference range is supplied, the differences between them SHOULD be provided in the reference range and/or age properties.
 */
export interface ObservationReferenceRange extends BackboneElement {
    /**
     * Low Range, if relevant
     * 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).
     */
    low?: Quantity;
    /**
     * High Range, if relevant
     * 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).
     */
    high?: Quantity;
    /**
     * Reference range qualifier
     * Codes to indicate the what part of the targeted reference population it applies to. For example, the normal or therapeutic range.
     * This SHOULD be populated if there is more than one range.  If this element is not present then the normal range is assumed.
     */
    type?: CodeableConcept;
    /**
     * Reference range population
     * 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.  Multiple `appliesTo`  are interpreted as an "AND" of the target populations.  For example, to represent a target population of African American females, both a code of female and a code for African American would be used.
     * This SHOULD be populated if there is more than one range.  If this element is not present then the normal population is assumed.
     */
    appliesTo?: CodeableConcept[];
    /**
     * Applicable age range, if relevant
     * 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.
     */
    age?: Range;
    /**
     * Text based reference range in an observation
     * 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".
     */
    text?: string;
    /**
     * Extension for text
     **/
    _text?: Element;
}
/**
 * Component results
 * 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.
 * For a discussion on the ways Observations can be assembled in groups together see [Notes](observation.html#notes) below.
 */
export interface ObservationComponent extends BackboneElement {
    /**
     * Type of component observation (code / type)
     * Describes what was observed. Sometimes this is called the observation "code".
     * *All* code-value and  component.code-component.value pairs need to be taken into account to correctly understand the meaning of the observation.
     */
    code: CodeableConcept;
    /**
     * Actual component result
     * The information determined as a result of making the observation, if the information has a simple value.
     * Used when observation has a set of component observations. An observation may have both a value (e.g. an  Apgar score)  and component observations (the observations from which the Apgar score was derived). If a value is present, the datatype for this element should be determined by Observation.code. A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Observation.code defines a coded value.  For additional guidance, see the [Notes section](observation.html#notes) below.
     */
    valueQuantity?: Quantity;
    /**
     * Actual component result
     * The information determined as a result of making the observation, if the information has a simple value.
     * Used when observation has a set of component observations. An observation may have both a value (e.g. an  Apgar score)  and component observations (the observations from which the Apgar score was derived). If a value is present, the datatype for this element should be determined by Observation.code. A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Observation.code defines a coded value.  For additional guidance, see the [Notes section](observation.html#notes) below.
     */
    valueCodeableConcept?: CodeableConcept;
    /**
     * Actual component result
     * The information determined as a result of making the observation, if the information has a simple value.
     * Used when observation has a set of component observations. An observation may have both a value (e.g. an  Apgar score)  and component observations (the observations from which the Apgar score was derived). If a value is present, the datatype for this element should be determined by Observation.code. A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Observation.code defines a coded value.  For additional guidance, see the [Notes section](observation.html#notes) below.
     */
    valueString?: string;
    /**
     * Extension for valueString
     **/
    _valueString?: Element;
    /**
     * Actual component result
     * The information determined as a result of making the observation, if the information has a simple value.
     * Used when observation has a set of component observations. An observation may have both a value (e.g. an  Apgar score)  and component observations (the observations from which the Apgar score was derived). If a value is present, the datatype for this element should be determined by Observation.code. A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Observation.code defines a coded value.  For additional guidance, see the [Notes section](observation.html#notes) below.
     */
    valueBoolean?: boolean;
    /**
     * Extension for valueBoolean
     **/
    _valueBoolean?: Element;
    /**
     * Actual component result
     * The information determined as a result of making the observation, if the information has a simple value.
     * Used when observation has a set of component observations. An observation may have both a value (e.g. an  Apgar score)  and component observations (the observations from which the Apgar score was derived). If a value is present, the datatype for this element should be determined by Observation.code. A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Observation.code defines a coded value.  For additional guidance, see the [Notes section](observation.html#notes) below.
     */
    valueInteger?: integer;
    /**
     * Extension for valueInteger
     **/
    _valueInteger?: Element;
    /**
     * Actual component result
     * The information determined as a result of making the observation, if the information has a simple value.
     * Used when observation has a set of component observations. An observation may have both a value (e.g. an  Apgar score)  and component observations (the observations from which the Apgar score was derived). If a value is present, the datatype for this element should be determined by Observation.code. A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Observation.code defines a coded value.  For additional guidance, see the [Notes section](observation.html#notes) below.
     */
    valueRange?: Range;
    /**
     * Actual component result
     * The information determined as a result of making the observation, if the information has a simple value.
     * Used when observation has a set of component observations. An observation may have both a value (e.g. an  Apgar score)  and component observations (the observations from which the Apgar score was derived). If a value is present, the datatype for this element should be determined by Observation.code. A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Observation.code defines a coded value.  For additional guidance, see the [Notes section](observation.html#notes) below.
     */
    valueRatio?: Ratio;
    /**
     * Actual component result
     * The information determined as a result of making the observation, if the information has a simple value.
     * Used when observation has a set of component observations. An observation may have both a value (e.g. an  Apgar score)  and component observations (the observations from which the Apgar score was derived). If a value is present, the datatype for this element should be determined by Observation.code. A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Observation.code defines a coded value.  For additional guidance, see the [Notes section](observation.html#notes) below.
     */
    valueSampledData?: SampledData;
    /**
     * Actual component result
     * The information determined as a result of making the observation, if the information has a simple value.
     * Used when observation has a set of component observations. An observation may have both a value (e.g. an  Apgar score)  and component observations (the observations from which the Apgar score was derived). If a value is present, the datatype for this element should be determined by Observation.code. A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Observation.code defines a coded value.  For additional guidance, see the [Notes section](observation.html#notes) below.
     */
    valueTime?: time;
    /**
     * Extension for valueTime
     **/
    _valueTime?: Element;
    /**
     * Actual component result
     * The information determined as a result of making the observation, if the information has a simple value.
     * Used when observation has a set of component observations. An observation may have both a value (e.g. an  Apgar score)  and component observations (the observations from which the Apgar score was derived). If a value is present, the datatype for this element should be determined by Observation.code. A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Observation.code defines a coded value.  For additional guidance, see the [Notes section](observation.html#notes) below.
     */
    valueDateTime?: dateTime;
    /**
     * Extension for valueDateTime
     **/
    _valueDateTime?: Element;
    /**
     * Actual component result
     * The information determined as a result of making the observation, if the information has a simple value.
     * Used when observation has a set of component observations. An observation may have both a value (e.g. an  Apgar score)  and component observations (the observations from which the Apgar score was derived). If a value is present, the datatype for this element should be determined by Observation.code. A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Observation.code defines a coded value.  For additional guidance, see the [Notes section](observation.html#notes) below.
     */
    valuePeriod?: Period;
    /**
     * Why the component result is missing
     * Provides a reason why the expected value in the element Observation.component.value[x] is missing.
     * "Null" or exceptional values can be represented two ways in FHIR Observations.  One way is to simply include them in the value set and represent the exceptions in the value.  For example, measurement values for a serology test could be  "detected", "not detected", "inconclusive", or  "test not done".

The alternate way is to use the value element for actual observations and use the explicit dataAbsentReason element to record exceptional values.  For example, the dataAbsentReason code "error" could be used when the measurement was not completed.  Because of these options, use-case agreements are required to interpret general observations for exceptional values.
     */
    dataAbsentReason?: CodeableConcept;
    /**
     * High, low, normal, etc.
     * A categorical assessment of an observation value.  For example, high, low, normal.
     * Historically used for laboratory results (known as 'abnormal flag' ),  its use extends to other use cases where coded interpretations  are relevant.  Often reported as one or more simple compact codes this element is often placed adjacent to the result value in reports and flow sheets to signal the meaning/normalcy status of the result.
     */
    interpretation?: CodeableConcept[];
    /**
     * Provides guide for interpretation of component result
     * Guidance on how to interpret the value by comparison to a normal or recommended range.
     * Most observations only have one generic reference range. Systems MAY choose to restrict to only supplying the relevant reference range based on knowledge about the patient (e.g., specific to the patient's age, gender, weight and other factors), but this might not be possible or appropriate. Whenever more than one reference range is supplied, the differences between them SHOULD be provided in the reference range and/or age properties.
     */
    referenceRange?: ObservationReferenceRange[];
}
/**
 * Measurements and simple assertions
 * Measurements and simple assertions made about a patient, device or other subject.
 * Used for simple observations such as device measurements, laboratory atomic results, vital signs, height, weight, smoking status, comments, etc.  Other resources are used to provide context for observations such as laboratory reports, etc.
 */
export interface Observation extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Observation';
    /**
     * Business Identifier for observation
     * A unique identifier assigned to this observation.
     */
    identifier?: Identifier[];
    /**
     * Fulfills plan, proposal or order
     * A plan, proposal or order that is fulfilled in whole or in part by this event.  For example, a MedicationRequest may require a patient to have laboratory test performed before  it is dispensed.
     */
    basedOn?: Reference[];
    /**
     * Part of referenced event
     * A larger event of which this particular Observation is a component or step.  For example,  an observation as part of a procedure.
     * To link an Observation to an Encounter use `encounter`.  See the  [Notes](observation.html#obsgrouping) below for guidance on referencing another Observation.
     */
    partOf?: Reference[];
    /**
     * Classification of  type of observation
     * A code that classifies the general type of observation being made.
     * In addition to the required category valueset, this element allows various categorization schemes based on the owner’s definition of the category and effectively multiple categories can be used at once.  The level of granularity is defined by the category concepts in the value set.
     */
    category?: CodeableConcept[];
    /**
     * Type of observation (code / type)
     * Describes what was observed. Sometimes this is called the observation "name".
     * *All* code-value and, if present, component.code-component.value pairs need to be taken into account to correctly understand the meaning of the observation.
     */
    code: CodeableConcept;
    /**
     * Who and/or what the observation is about
     * The patient, or group of patients, location, or device this observation is about and into whose record the observation is placed. If the actual focus of the observation is different from the subject (or a sample of, part, or region of the subject), the `focus` element or the `code` itself specifies the actual focus of the observation.
     * One would expect this element to be a cardinality of 1..1. The only circumstance in which the subject can be missing is when the observation is made by a device that does not know the patient. In this case, the observation SHALL be matched to a patient through some context/channel matching technique, and at this point, the observation should be updated.
     */
    subject?: Reference;
    /**
     * What the observation is about, when it is not about the subject of record
     * The actual focus of an observation when it is not the patient of record representing something or someone associated with the patient such as a spouse, parent, fetus, or donor. For example, fetus observations in a mother's record.  The focus of an observation could also be an existing condition,  an intervention, the subject's diet,  another observation of the subject,  or a body structure such as tumor or implanted device.   An example use case would be using the Observation resource to capture whether the mother is trained to change her child's tracheostomy tube. In this example, the child is the patient of record and the mother is the focus.
     * Typically, an observation is made about the subject - a patient, or group of patients, location, or device - and the distinction between the subject and what is directly measured for an observation is specified in the observation code itself ( e.g., "Blood Glucose") and does not need to be represented separately using this element.  Use `specimen` if a reference to a specimen is required.  If a code is required instead of a resource use either  `bodysite` for bodysites or the standard extension [focusCode](extension-observation-focuscode.html).
     */
    focus?: Reference[];
    /**
     * Healthcare event during which this observation is made
     * The healthcare event  (e.g. a patient and healthcare provider interaction) during which this observation is made.
     * This will typically be the encounter the event occurred within, but some events may be initiated prior to or after the official completion of an encounter but still be tied to the context of the encounter (e.g. pre-admission laboratory tests).
     */
    encounter?: Reference;
    /**
     * Clinically relevant time/time-period for observation
     * 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.
     * At least a date should be present unless this observation is a historical report.  For recording imprecise or "fuzzy" times (For example, a blood glucose measurement taken "after breakfast") use the [Timing](datatypes.html#timing) datatype which allow the measurement to be tied to regular life events.
     */
    effectiveDateTime?: dateTime;
    /**
     * Extension for effectiveDateTime
     **/
    _effectiveDateTime?: Element;
    /**
     * Clinically relevant time/time-period for observation
     * 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.
     * At least a date should be present unless this observation is a historical report.  For recording imprecise or "fuzzy" times (For example, a blood glucose measurement taken "after breakfast") use the [Timing](datatypes.html#timing) datatype which allow the measurement to be tied to regular life events.
     */
    effectivePeriod?: Period;
    /**
     * Clinically relevant time/time-period for observation
     * 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.
     * At least a date should be present unless this observation is a historical report.  For recording imprecise or "fuzzy" times (For example, a blood glucose measurement taken "after breakfast") use the [Timing](datatypes.html#timing) datatype which allow the measurement to be tied to regular life events.
     */
    effectiveTiming?: Timing;
    /**
     * Clinically relevant time/time-period for observation
     * 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.
     * At least a date should be present unless this observation is a historical report.  For recording imprecise or "fuzzy" times (For example, a blood glucose measurement taken "after breakfast") use the [Timing](datatypes.html#timing) datatype which allow the measurement to be tied to regular life events.
     */
    effectiveInstant?: instant;
    /**
     * Extension for effectiveInstant
     **/
    _effectiveInstant?: Element;
    /**
     * Date/Time this version was made available
     * The date and time this version of the observation was made available to providers, typically after the results have been reviewed and verified.
     * For Observations that don’t require review and verification, it may be the same as the [`lastUpdated` ](resource-definitions.html#Meta.lastUpdated) time of the resource itself.  For Observations that do require review and verification for certain updates, it might not be the same as the `lastUpdated` time of the resource itself due to a non-clinically significant update that doesn’t require the new version to be reviewed and verified again.
     */
    issued?: instant;
    /**
     * Extension for issued
     **/
    _issued?: Element;
    /**
     * Who is responsible for the observation
     * Who was responsible for asserting the observed value as "true".
     */
    performer?: Reference[];
    /**
     * Actual result
     * The information determined as a result of making the observation, if the information has a simple value.
     * An observation may have; 1)  a single value here, 2)  both a value and a set of related or component values,  or 3)  only a set of related or component values. If a value is present, the datatype for this element should be determined by Observation.code.  A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Observation.code defines a coded value.  For additional guidance, see the [Notes section](observation.html#notes) below.
     */
    valueQuantity?: Quantity;
    /**
     * Actual result
     * The information determined as a result of making the observation, if the information has a simple value.
     * An observation may have; 1)  a single value here, 2)  both a value and a set of related or component values,  or 3)  only a set of related or component values. If a value is present, the datatype for this element should be determined by Observation.code.  A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Observation.code defines a coded value.  For additional guidance, see the [Notes section](observation.html#notes) below.
     */
    valueCodeableConcept?: CodeableConcept;
    /**
     * Actual result
     * The information determined as a result of making the observation, if the information has a simple value.
     * An observation may have; 1)  a single value here, 2)  both a value and a set of related or component values,  or 3)  only a set of related or component values. If a value is present, the datatype for this element should be determined by Observation.code.  A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Observation.code defines a coded value.  For additional guidance, see the [Notes section](observation.html#notes) below.
     */
    valueString?: string;
    /**
     * Extension for valueString
     **/
    _valueString?: Element;
    /**
     * Actual result
     * The information determined as a result of making the observation, if the information has a simple value.
     * An observation may have; 1)  a single value here, 2)  both a value and a set of related or component values,  or 3)  only a set of related or component values. If a value is present, the datatype for this element should be determined by Observation.code.  A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Observation.code defines a coded value.  For additional guidance, see the [Notes section](observation.html#notes) below.
     */
    valueBoolean?: boolean;
    /**
     * Extension for valueBoolean
     **/
    _valueBoolean?: Element;
    /**
     * Actual result
     * The information determined as a result of making the observation, if the information has a simple value.
     * An observation may have; 1)  a single value here, 2)  both a value and a set of related or component values,  or 3)  only a set of related or component values. If a value is present, the datatype for this element should be determined by Observation.code.  A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Observation.code defines a coded value.  For additional guidance, see the [Notes section](observation.html#notes) below.
     */
    valueInteger?: integer;
    /**
     * Extension for valueInteger
     **/
    _valueInteger?: Element;
    /**
     * Actual result
     * The information determined as a result of making the observation, if the information has a simple value.
     * An observation may have; 1)  a single value here, 2)  both a value and a set of related or component values,  or 3)  only a set of related or component values. If a value is present, the datatype for this element should be determined by Observation.code.  A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Observation.code defines a coded value.  For additional guidance, see the [Notes section](observation.html#notes) below.
     */
    valueRange?: Range;
    /**
     * Actual result
     * The information determined as a result of making the observation, if the information has a simple value.
     * An observation may have; 1)  a single value here, 2)  both a value and a set of related or component values,  or 3)  only a set of related or component values. If a value is present, the datatype for this element should be determined by Observation.code.  A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Observation.code defines a coded value.  For additional guidance, see the [Notes section](observation.html#notes) below.
     */
    valueRatio?: Ratio;
    /**
     * Actual result
     * The information determined as a result of making the observation, if the information has a simple value.
     * An observation may have; 1)  a single value here, 2)  both a value and a set of related or component values,  or 3)  only a set of related or component values. If a value is present, the datatype for this element should be determined by Observation.code.  A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Observation.code defines a coded value.  For additional guidance, see the [Notes section](observation.html#notes) below.
     */
    valueSampledData?: SampledData;
    /**
     * Actual result
     * The information determined as a result of making the observation, if the information has a simple value.
     * An observation may have; 1)  a single value here, 2)  both a value and a set of related or component values,  or 3)  only a set of related or component values. If a value is present, the datatype for this element should be determined by Observation.code.  A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Observation.code defines a coded value.  For additional guidance, see the [Notes section](observation.html#notes) below.
     */
    valueTime?: time;
    /**
     * Extension for valueTime
     **/
    _valueTime?: Element;
    /**
     * Actual result
     * The information determined as a result of making the observation, if the information has a simple value.
     * An observation may have; 1)  a single value here, 2)  both a value and a set of related or component values,  or 3)  only a set of related or component values. If a value is present, the datatype for this element should be determined by Observation.code.  A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Observation.code defines a coded value.  For additional guidance, see the [Notes section](observation.html#notes) below.
     */
    valueDateTime?: dateTime;
    /**
     * Extension for valueDateTime
     **/
    _valueDateTime?: Element;
    /**
     * Actual result
     * The information determined as a result of making the observation, if the information has a simple value.
     * An observation may have; 1)  a single value here, 2)  both a value and a set of related or component values,  or 3)  only a set of related or component values. If a value is present, the datatype for this element should be determined by Observation.code.  A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Observation.code defines a coded value.  For additional guidance, see the [Notes section](observation.html#notes) below.
     */
    valuePeriod?: Period;
    /**
     * Why the result is missing
     * Provides a reason why the expected value in the element Observation.value[x] is missing.
     * Null or exceptional values can be represented two ways in FHIR Observations.  One way is to simply include them in the value set and represent the exceptions in the value.  For example, measurement values for a serology test could be  "detected", "not detected", "inconclusive", or  "specimen unsatisfactory".

The alternate way is to use the value element for actual observations and use the explicit dataAbsentReason element to record exceptional values.  For example, the dataAbsentReason code "error" could be used when the measurement was not completed. Note that an observation may only be reported if there are values to report. For example differential cell counts values may be reported only when > 0.  Because of these options, use-case agreements are required to interpret general observations for null or exceptional values.
     */
    dataAbsentReason?: CodeableConcept;
    /**
     * High, low, normal, etc.
     * A categorical assessment of an observation value.  For example, high, low, normal.
     * Historically used for laboratory results (known as 'abnormal flag' ),  its use extends to other use cases where coded interpretations  are relevant.  Often reported as one or more simple compact codes this element is often placed adjacent to the result value in reports and flow sheets to signal the meaning/normalcy status of the result.
     */
    interpretation?: CodeableConcept[];
    /**
     * Comments about the observation
     * Comments about the observation or the results.
     * May include general statements about the observation, or statements about significant, unexpected or unreliable results values, or information about its source when relevant to its interpretation.
     */
    note?: Annotation[];
    /**
     * Observed body part
     * Indicates the site on the subject's body where the observation was made (i.e. the target site).
     * Only used if not implicit in code found in Observation.code.  In many systems, this may be represented as a related observation instead of an inline component.

If the use case requires BodySite to be handled as a separate resource (e.g. to identify and track separately) then use the standard extension[ bodySite](extension-bodysite.html).
     */
    bodySite?: CodeableConcept;
    /**
     * How it was done
     * Indicates the mechanism used to perform the observation.
     * Only used if not implicit in code for Observation.code.
     */
    method?: CodeableConcept;
    /**
     * Specimen used for this observation
     * The specimen that was used when this observation was made.
     * Should only be used if not implicit in code found in `Observation.code`.  Observations are not made on specimens themselves; they are made on a subject, but in many cases by the means of a specimen. Note that although specimens are often involved, they are not always tracked and reported explicitly. Also note that observation resources may be used in contexts that track the specimen explicitly (e.g. Diagnostic Report).
     */
    specimen?: Reference;
    /**
     * (Measurement) Device
     * The device used to generate the observation data.
     * Note that this is not meant to represent a device involved in the transmission of the result, e.g., a gateway.  Such devices may be documented using the Provenance resource where relevant.
     */
    device?: Reference;
    /**
     * Provides guide for interpretation
     * Guidance on how to interpret the value by comparison to a normal or recommended range.  Multiple reference ranges are interpreted as an "OR".   In other words, to represent two distinct target populations, two `referenceRange` elements would be used.
     * Most observations only have one generic reference range. Systems MAY choose to restrict to only supplying the relevant reference range based on knowledge about the patient (e.g., specific to the patient's age, gender, weight and other factors), but this might not be possible or appropriate. Whenever more than one reference range is supplied, the differences between them SHOULD be provided in the reference range and/or age properties.
     */
    referenceRange?: ObservationReferenceRange[];
    /**
     * Related resource that belongs to the Observation group
     * This observation is a group observation (e.g. a battery, a panel of tests, a set of vital sign measurements) that includes the target as a member of the group.
     * When using this element, an observation will typically have either a value or a set of related resources, although both may be present in some cases.  For a discussion on the ways Observations can assembled in groups together, see [Notes](observation.html#obsgrouping) below.  Note that a system may calculate results from [QuestionnaireResponse](questionnaireresponse.html)  into a final score and represent the score as an Observation.
     */
    hasMember?: Reference[];
    /**
     * Related measurements the observation is made from
     * The target resource that represents a measurement from which this observation value is derived. For example, a calculated anion gap or a fetal measurement based on an ultrasound image.
     * All the reference choices that are listed in this element can represent clinical observations and other measurements that may be the source for a derived value.  The most common reference will be another Observation.  For a discussion on the ways Observations can assembled in groups together, see [Notes](observation.html#obsgrouping) below.
     */
    derivedFrom?: Reference[];
    /**
     * Component results
     * 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.
     * For a discussion on the ways Observations can be assembled in groups together see [Notes](observation.html#notes) below.
     */
    component?: ObservationComponent[];
    /**
     * registered | preliminary | final | amended +
     * The status of the result value.
     * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
     */
    status: ObservationStatus;
}
/**
 * Characteristics of quantitative results
 * Characteristics for quantitative results of this observation.
 */
export interface ObservationDefinitionQuantitativeDetails extends BackboneElement {
    /**
     * Customary unit for quantitative results
     * Customary unit used to report quantitative results of observations conforming to this ObservationDefinition.
     */
    customaryUnit?: CodeableConcept;
    /**
     * SI unit for quantitative results
     * SI unit used to report quantitative results of observations conforming to this ObservationDefinition.
     */
    unit?: CodeableConcept;
    /**
     * SI to Customary unit conversion factor
     * Factor for converting value expressed with SI unit to value expressed with customary unit.
     */
    conversionFactor?: decimal;
    /**
     * Extension for conversionFactor
     **/
    _conversionFactor?: Element;
    /**
     * Decimal precision of observation quantitative results
     * Number of digits after decimal separator when the results of such observations are of type Quantity.
     */
    decimalPrecision?: integer;
    /**
     * Extension for decimalPrecision
     **/
    _decimalPrecision?: Element;
}
/**
 * Qualified range for continuous and ordinal observation results
 * Multiple  ranges of results qualified by different contexts for ordinal or continuous observations conforming to this ObservationDefinition.
 */
export interface ObservationDefinitionQualifiedInterval extends BackboneElement {
    /**
     * The interval itself, for continuous or ordinal observations
     * The low and high values determining the interval. There may be only one of the two.
     */
    range?: Range;
    /**
     * Range context qualifier
     * Codes to indicate the health context the range applies to. For example, the normal or therapeutic range.
     */
    context?: CodeableConcept;
    /**
     * Targetted population of the range
     * Codes to indicate the target population this reference range applies to.
     * If this element is not present then the global population is assumed.
     */
    appliesTo?: CodeableConcept[];
    /**
     * Applicable age range, if relevant
     * 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.
     * Some analytes vary greatly over age.
     */
    age?: Range;
    /**
     * Applicable gestational age range, if relevant
     * The gestational age to which this reference range is applicable, in the context of pregnancy.
     */
    gestationalAge?: Range;
    /**
     * Condition associated with the reference range
     * Text based condition for which the reference range is valid.
     */
    condition?: string;
    /**
     * Extension for condition
     **/
    _condition?: Element;
    /**
     * reference | critical | absolute
     * The category of interval of values for continuous or ordinal observations conforming to this ObservationDefinition.
     */
    category?: ObservationDefinitionObservationRangeCategory;
    /**
     * male | female | other | unknown
     * Sex of the population the range applies to.
     */
    gender?: ObservationDefinitionAdministrativeGender;
}
/**
 * Definition of an observation
 * Set of definitional characteristics for a kind of observation or measurement produced or consumed by an orderable health care service.
 * An instance of this resource informs the consumer of a health-related service (such as a lab diagnostic test or panel) about how the observations used or produced by this service will look like.
 */
export interface ObservationDefinition extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'ObservationDefinition';
    /**
     * Category of observation
     * A code that classifies the general type of observation.
     * This element allows various categorization schemes based on the owner’s definition of the category and effectively multiple categories can be used for one instance of ObservationDefinition. The level of granularity is defined by the category concepts in the value set.
     */
    category?: CodeableConcept[];
    /**
     * Type of observation (code / type)
     * Describes what will be observed. Sometimes this is called the observation "name".
     */
    code: CodeableConcept;
    /**
     * Business identifier for this ObservationDefinition instance
     * A unique identifier assigned to this ObservationDefinition artifact.
     */
    identifier?: Identifier[];
    /**
     * Multiple results allowed
     * Multiple results allowed for observations conforming to this ObservationDefinition.
     * An example of observation allowing multiple results is "bacteria identified by culture". Conversely, the measurement of a potassium level allows a single result.
     */
    multipleResultsAllowed?: boolean;
    /**
     * Extension for multipleResultsAllowed
     **/
    _multipleResultsAllowed?: Element;
    /**
     * Method used to produce the observation
     * The method or technique used to perform the observation.
     * Only used if not implicit in observation code.
     */
    method?: CodeableConcept;
    /**
     * Preferred report name
     * The preferred name to be used when reporting the results of observations conforming to this ObservationDefinition.
     */
    preferredReportName?: string;
    /**
     * Extension for preferredReportName
     **/
    _preferredReportName?: Element;
    /**
     * Characteristics of quantitative results
     * Characteristics for quantitative results of this observation.
     */
    quantitativeDetails?: ObservationDefinitionQuantitativeDetails;
    /**
     * Qualified range for continuous and ordinal observation results
     * Multiple  ranges of results qualified by different contexts for ordinal or continuous observations conforming to this ObservationDefinition.
     */
    qualifiedInterval?: ObservationDefinitionQualifiedInterval[];
    /**
     * Value set of valid coded values for the observations conforming to this ObservationDefinition
     * The set of valid coded results for the observations  conforming to this ObservationDefinition.
     */
    validCodedValueSet?: Reference;
    /**
     * Value set of normal coded values for the observations conforming to this ObservationDefinition
     * The set of normal coded results for the observations conforming to this ObservationDefinition.
     */
    normalCodedValueSet?: Reference;
    /**
     * Value set of abnormal coded values for the observations conforming to this ObservationDefinition
     * The set of abnormal coded results for the observation conforming to this ObservationDefinition.
     */
    abnormalCodedValueSet?: Reference;
    /**
     * Value set of critical coded values for the observations conforming to this ObservationDefinition
     * The set of critical coded results for the observation conforming to this ObservationDefinition.
     */
    criticalCodedValueSet?: Reference;
    /**
     * Quantity | CodeableConcept | string | boolean | integer | Range | Ratio | SampledData | time | dateTime | Period
     * The data types allowed for the value element of the instance observations conforming to this ObservationDefinition.
     */
    permittedDataType?: ObservationDefinitionObservationDataType[];
}
/**
 * ValueSet details if this is coded
 * Binds to a value set if this parameter is coded (code, Coding, CodeableConcept).
 */
export interface OperationDefinitionParameterBinding extends BackboneElement {
    /**
     * Source of value set
     * Points to the value set or external definition (e.g. implicit value set) that identifies the set of codes to be used.
     * For value sets with a referenceResource, the display can contain the value set description.  The reference may be version-specific or not.
     */
    valueSet: canonical;
    /**
     * Extension for valueSet
     **/
    _valueSet?: Element;
    /**
     * required | extensible | preferred | example
     * 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.
     * For further discussion, see [Using Terminologies](terminologies.html).
     */
    strength: OperationDefinitionBindingStrength;
}
/**
 * References to this parameter
 * Identifies other resource parameters within the operation invocation that are expected to resolve to this resource.
 * Resolution applies if the referenced parameter exists.
 */
export interface OperationDefinitionParameterReferencedFrom extends BackboneElement {
    /**
     * Referencing parameter
     * The name of the parameter or dot-separated path of parameter names pointing to the resource parameter that is expected to contain a reference to this resource.
     */
    source: string;
    /**
     * Extension for source
     **/
    _source?: Element;
    /**
     * Element id of reference
     * The id of the element in the referencing resource that is expected to resolve to this resource.
     */
    sourceId?: string;
    /**
     * Extension for sourceId
     **/
    _sourceId?: Element;
}
/**
 * Parameters for the operation/query
 * The parameters for the operation/query.
 * Query Definitions only have one output parameter, named "result". This might not be described, but can be to allow a profile to be defined.
 */
export interface OperationDefinitionParameter extends BackboneElement {
    /**
     * Name in Parameters.parameter.name or in URL
     * The name of used to identify the parameter.
     * This name must be a token (start with a letter in a..z, and only contain letters, numerals, and underscore. Note that for search parameters (type = string, with a search type), the name may be altered by the search modifiers.
     */
    name: code;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Minimum Cardinality
     * The minimum number of times this parameter SHALL appear in the request or response.
     */
    min: integer;
    /**
     * Extension for min
     **/
    _min?: Element;
    /**
     * Maximum Cardinality (a number or *)
     * The maximum number of times this element is permitted to appear in the request or response.
     */
    max: string;
    /**
     * Extension for max
     **/
    _max?: Element;
    /**
     * Description of meaning/use
     * Describes the meaning or use of this parameter.
     */
    documentation?: string;
    /**
     * Extension for documentation
     **/
    _documentation?: Element;
    /**
     * What type this parameter has
     * The type for this parameter.
     * if there is no stated parameter, then the parameter is a multi-part parameter; type and must have at least one part defined.
     */
    type?: code;
    /**
     * Extension for type
     **/
    _type?: Element;
    /**
     * If type is Reference | canonical, allowed targets
     * Used when the type is "Reference" or "canonical", and identifies a profile structure or implementation Guide that applies to the target of the reference this parameter refers to. If any profiles are specified, then the content must conform to at least one of them. The URL 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 target resource SHALL conform to at least one profile defined in the implementation guide.
     * Often, these profiles are the base definitions from the spec (e.g. http://hl7.org/fhir/StructureDefinition/Patient).
     */
    targetProfile?: canonical[];
    /**
     * Extension for targetProfile
     **/
    _targetProfile?: Element[];
    /**
     * ValueSet details if this is coded
     * Binds to a value set if this parameter is coded (code, Coding, CodeableConcept).
     */
    binding?: OperationDefinitionParameterBinding;
    /**
     * References to this parameter
     * Identifies other resource parameters within the operation invocation that are expected to resolve to this resource.
     * Resolution applies if the referenced parameter exists.
     */
    referencedFrom?: OperationDefinitionParameterReferencedFrom[];
    /**
     * Parts of a nested Parameter
     * The parts of a nested Parameter.
     * Query Definitions only have one output parameter, named "result". This might not be described, but can be to allow a profile to be defined.
     */
    part?: OperationDefinitionParameter[];
    /**
     * in | out
     * Whether this is an input or an output parameter.
     * If a parameter name is used for both an input and an output parameter, the parameter should be defined twice.
     */
    use: OperationDefinitionOperationParameterUse;
    /**
     * number | date | string | token | reference | composite | quantity | uri | special
     * How the parameter is understood as a search parameter. This is only used if the parameter type is 'string'.
     */
    searchType?: OperationDefinitionSearchParamType;
}
/**
 * Define overloaded variants for when  generating code
 * Defines an appropriate combination of parameters to use when invoking this operation, to help code generators when generating overloaded parameter sets for this operation.
 * The combinations are suggestions as to which sets of parameters to use together, but the combinations are not intended to be authoritative.
 */
export interface OperationDefinitionOverload extends BackboneElement {
    /**
     * Name of parameter to include in overload
     * Name of parameter to include in overload.
     */
    parameterName?: string[];
    /**
     * Extension for parameterName
     **/
    _parameterName?: Element[];
    /**
     * Comments to go on overload
     * Comments to go on overload.
     */
    comment?: string;
    /**
     * Extension for comment
     **/
    _comment?: Element;
}
/**
 * Definition of an operation or a named query
 * A formal computable definition of an operation (on the RESTful interface) or a named query (using the search interaction).
 */
export interface OperationDefinition extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'OperationDefinition';
    /**
     * Canonical identifier for this operation definition, represented as a URI (globally unique)
     * An absolute URI that is used to identify this operation definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this operation definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the operation definition is stored on different servers.
     * Can be a urn:uuid: or a urn:oid: but real http: addresses are preferred.  Multiple instances may share the same URL if they have a distinct version.

The determination of when to create a new version of a resource (same url, new version) vs. defining a new artifact is up to the author.  Considerations for making this decision are found in [Technical and Business Versions](resource.html#versions).

In some cases, the resource can no longer be found at the stated url, but the url itself cannot change. Implementations can use the [meta.source](resource.html#meta) element to indicate where the current master source of the resource can be found.
     */
    url?: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Business version of the operation definition
     * 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.
     * There may be different operation definition instances that have the same identifier but different versions.  The version can be appended to the url in a reference to allow a reference to a particular business version of the operation definition with the format [url]|[version].
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
    /**
     * Name for this operation definition (computer friendly)
     * 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.
     * The name is not expected to be globally unique. The name should be a simple alphanumeric type name to ensure that it is machine-processing friendly.
     */
    name: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Name for this operation definition (human friendly)
     * A short, descriptive, user-friendly title for the operation definition.
     * This name does not need to be machine-processing friendly and may contain punctuation, white-space, etc.
     */
    title?: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * For testing purposes, not real usage
     * 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.
     * Allows filtering of operation definitions that are appropriate for use versus not.
     */
    experimental?: boolean;
    /**
     * Extension for experimental
     **/
    _experimental?: Element;
    /**
     * Date last changed
     * The date  (and optionally time) when the operation definition was published. The date must change 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.
     * Note that this is not the same as the resource last-modified-date, since the resource may be a secondary representation of the operation definition. Additional specific dates may be added as extensions or be found by consulting Provenances associated with past versions of the resource.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Name of the publisher (organization or individual)
     * The name of the organization or individual that published the operation definition.
     * Usually an organization but may be an individual. The publisher (or steward) of the operation definition is the organization or individual primarily responsible for the maintenance and upkeep of the operation definition. This is not necessarily the same individual or organization that developed and initially authored the content. The publisher is the primary point of contact for questions or issues with the operation definition. This item SHOULD be populated unless the information is available from context.
     */
    publisher?: string;
    /**
     * Extension for publisher
     **/
    _publisher?: Element;
    /**
     * Contact details for the publisher
     * Contact details to assist a user in finding and communicating with the publisher.
     * May be a web site, an email address, a telephone number, etc.
     */
    contact?: ContactDetail[];
    /**
     * Natural language description of the operation definition
     * A free text natural language description of the operation definition from a consumer's perspective.
     * This description can be used to capture details such as why the operation definition was built, comments about misuse, instructions for clinical use and interpretation, literature references, examples from the paper world, etc. It is not a rendering of the operation definition as conveyed in the 'text' field of the resource itself. This item SHOULD be populated unless the information is available from context (e.g. the language of the operation definition is presumed to be the predominant language in the place the operation definition was created).
     */
    description?: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * The context that the content is intended to support
     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate operation definition instances.
     * When multiple useContexts are specified, there is no expectation that all or any of the contexts apply.
     */
    useContext?: UsageContext[];
    /**
     * Intended jurisdiction for operation definition (if applicable)
     * A legal or geographic region in which the operation definition is intended to be used.
     * It may be possible for the operation definition to be used in jurisdictions other than those for which it was originally designed or intended.
     */
    jurisdiction?: CodeableConcept[];
    /**
     * Why this operation definition is defined
     * Explanation of why this operation definition is needed and why it has been designed as it has.
     * This element does not describe the usage of the operation definition. Instead, it provides traceability of ''why'' the resource is either needed or ''why'' it is defined as it is.  This may be used to point to source materials or specifications that drove the structure of this operation definition.
     */
    purpose?: markdown;
    /**
     * Extension for purpose
     **/
    _purpose?: Element;
    /**
     * Whether content is changed by the operation
     * Whether the operation affects state. Side effects such as producing audit trail entries do not count as 'affecting  state'.
     * What http methods can be used for the operation depends on the .affectsState value and whether the input parameters are primitive or complex:

1. Servers SHALL support POST method for all operations.

2. Servers SHALL support GET method if all the parameters for the operation are primitive or there are no parameters and the operation has affectsState = false.
     */
    affectsState?: boolean;
    /**
     * Extension for affectsState
     **/
    _affectsState?: Element;
    /**
     * Name used to invoke the operation
     * The name used to invoke the operation.
     */
    code: code;
    /**
     * Extension for code
     **/
    _code?: Element;
    /**
     * Additional information about use
     * Additional information about how to use this operation or named query.
     */
    comment?: markdown;
    /**
     * Extension for comment
     **/
    _comment?: Element;
    /**
     * Marks this as a profile of the base
     * Indicates that this operation definition is a constraining profile on the base.
     * A constrained profile can make optional parameters required or not used and clarify documentation.
     */
    base?: canonical;
    /**
     * Extension for base
     **/
    _base?: Element;
    /**
     * Types this operation applies to
     * The types on which this operation can be executed.
     * If the type is an abstract resource ("Resource" or "DomainResource") then the operation can be invoked on any concrete specialization.
     */
    resource?: code[];
    /**
     * Extension for resource
     **/
    _resource?: Element[];
    /**
     * Invoke at the system level?
     * 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).
     */
    system: boolean;
    /**
     * Extension for system
     **/
    _system?: Element;
    /**
     * Invoke at the type level?
     * 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).
     */
    type: boolean;
    /**
     * Extension for type
     **/
    _type?: Element;
    /**
     * Invoke on an instance?
     * Indicates whether this operation can be invoked on a particular instance of one of the given types.
     */
    instance: boolean;
    /**
     * Extension for instance
     **/
    _instance?: Element;
    /**
     * Validation information for in parameters
     * Additional validation information for the in parameters - a single profile that covers all the parameters. The profile is a constraint on the parameters resource as a whole.
     * If present the profile shall not conflict with what is specified in the parameters in the operation definition (max/min etc.), though it may provide additional constraints. The constraints expressed in the profile apply whether the operation is invoked by a POST wih parameters or not.
     */
    inputProfile?: canonical;
    /**
     * Extension for inputProfile
     **/
    _inputProfile?: Element;
    /**
     * Validation information for out parameters
     * Additional validation information for the out parameters - a single profile that covers all the parameters. The profile is a constraint on the parameters resource.
     * If present the profile shall not conflict with what is specified in the parameters in the operation definition (max/min etc.), though it may provide additional constraints. The constraints expressed in the profile apply whether the operation is invoked by a POST wih parameters or not.
     */
    outputProfile?: canonical;
    /**
     * Extension for outputProfile
     **/
    _outputProfile?: Element;
    /**
     * Parameters for the operation/query
     * The parameters for the operation/query.
     * Query Definitions only have one output parameter, named "result". This might not be described, but can be to allow a profile to be defined.
     */
    parameter?: OperationDefinitionParameter[];
    /**
     * Define overloaded variants for when  generating code
     * Defines an appropriate combination of parameters to use when invoking this operation, to help code generators when generating overloaded parameter sets for this operation.
     * The combinations are suggestions as to which sets of parameters to use together, but the combinations are not intended to be authoritative.
     */
    overload?: OperationDefinitionOverload[];
    /**
     * draft | active | retired | unknown
     * The status of this operation definition. Enables tracking the life-cycle of the content.
     * Allows filtering of operation definitions that are appropriate for use versus not.
     */
    status: OperationDefinitionPublicationStatus;
    /**
     * operation | query
     * Whether this is an operation or a named query.
     * Named queries are invoked differently, and have different capabilities.
     */
    kind: OperationDefinitionOperationKind;
}
/**
 * A single issue associated with the action
 * An error, warning, or information message that results from a system action.
 */
export interface OperationOutcomeIssue extends BackboneElement {
    /**
     * Error or warning code
     * 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.
     */
    code: code;
    /**
     * Extension for code
     **/
    _code?: Element;
    /**
     * Additional details about the error
     * Additional details about the error. This may be a text description of the error or a system code that identifies the error.
     * A human readable description of the error issue SHOULD be placed in details.text.
     */
    details?: CodeableConcept;
    /**
     * Additional diagnostic information about the issue
     * Additional diagnostic information about the issue.
     * This may be a description of how a value is erroneous, a stack dump to help trace the issue or other troubleshooting information.
     */
    diagnostics?: string;
    /**
     * Extension for diagnostics
     **/
    _diagnostics?: Element;
    /**
     * Deprecated: Path of element(s) related to issue
     * This element is deprecated because it is XML specific. It is replaced by issue.expression, which is format independent, and simpler to parse.

For resource issues, this will be a simple XPath limited to element names, repetition indicators and the default child accessor 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.
     * The root of the XPath is the resource or bundle that generated OperationOutcome.  Each XPath SHALL resolve to a single node.  This element is deprecated, and is being replaced by expression.
     */
    location?: string[];
    /**
     * Extension for location
     **/
    _location?: Element[];
    /**
     * FHIRPath of element(s) related to issue
     * A [simple subset of FHIRPath](fhirpath.html#simple) limited to element names, repetition indicators and the default child accessor that identifies one of the elements in the resource that caused this issue to be raised.
     * The root of the FHIRPath is the resource or bundle that generated OperationOutcome.  Each FHIRPath SHALL resolve to a single node.
     */
    expression?: string[];
    /**
     * Extension for expression
     **/
    _expression?: Element[];
    /**
     * fatal | error | warning | information
     * Indicates whether the issue indicates a variation from successful processing.
     * This is labeled as "Is Modifier" because applications should not confuse hints and warnings with errors.
     */
    severity: OperationOutcomeIssueSeverity;
}
/**
 * Information about the success/failure of an action
 * A collection of error, warning, or information messages that result from a system action.
 * Can result from the failure of a REST call or be part of the response message returned from a request message.
 */
export interface OperationOutcome extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'OperationOutcome';
    /**
     * A single issue associated with the action
     * An error, warning, or information message that results from a system action.
     */
    issue: OperationOutcomeIssue[];
}
/**
 * Contact for the organization for a certain purpose
 * Contact for the organization for a certain purpose.
 * Where multiple contacts for the same purpose are provided there is a standard extension that can be used to determine which one is the preferred contact to use.
 */
export interface OrganizationContact extends BackboneElement {
    /**
     * The type of contact
     * Indicates a purpose for which the contact can be reached.
     */
    purpose?: CodeableConcept;
    /**
     * A name associated with the contact
     * A name associated with the contact.
     */
    name?: HumanName;
    /**
     * Contact details (telephone, email, etc.)  for a contact
     * A contact detail (e.g. a telephone number or an email address) by which the party may be contacted.
     */
    telecom?: ContactPoint[];
    /**
     * Visiting or postal addresses for the contact
     * Visiting or postal addresses for the contact.
     */
    address?: Address;
}
/**
 * A grouping of people or organizations with a common purpose
 * 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, payer/insurer, etc.
 */
export interface Organization extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Organization';
    /**
     * Identifies this organization  across multiple systems
     * Identifier for the organization that is used to identify the organization across multiple disparate systems.
     */
    identifier?: Identifier[];
    /**
     * Whether the organization's record is still in active use
     * Whether the organization's record is still in active use.
     * This active flag is not intended to be used to mark an organization as temporarily closed or under construction. Instead the Location(s) within the Organization should have the suspended status. If further details of the reason for the suspension are required, then an extension on this element should be used.

This element is labeled as a modifier because it may be used to mark that the resource was created in error.
     */
    active?: boolean;
    /**
     * Extension for active
     **/
    _active?: Element;
    /**
     * Kind of organization
     * The kind(s) of organization that this is.
     * Organizations can be corporations, wards, sections, clinical teams, government departments, etc. Note that code is generally a classifier of the type of organization; in many applications, codes are used to identity a particular organization (say, ward) as opposed to another of the same type - these are identifiers, not codes

When considering if multiple types are appropriate, you should evaluate if child organizations would be a more appropriate use of the concept, as different types likely are in different sub-areas of the organization. This is most likely to be used where type values have orthogonal values, such as a religious, academic and medical center.

We expect that some jurisdictions will profile this optionality to be a single cardinality.
     */
    type?: CodeableConcept[];
    /**
     * Name used for the organization
     * A name associated with the organization.
     * If the name of an organization changes, consider putting the old name in the alias column so that it can still be located through searches.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * A list of alternate names that the organization is known as, or was known as in the past
     * A list of alternate names that the organization is known as, or was known as in the past.
     * There are no dates associated with the alias/historic names, as this is not intended to track when names were used, but to assist in searching so that older names can still result in identifying the organization.
     */
    alias?: string[];
    /**
     * Extension for alias
     **/
    _alias?: Element[];
    /**
     * A contact detail for the organization
     * A contact detail for the organization.
     * The use code 'home' is not to be used. Note that these contacts are not the contact details of people who are employed by or represent the organization, but official contacts for the organization itself.
     */
    telecom?: ContactPoint[];
    /**
     * An address for the organization
     * An address for the organization.
     * Organization may have multiple addresses with different uses or applicable periods. The use code 'home' is not to be used.
     */
    address?: Address[];
    /**
     * The organization of which this organization forms a part
     * The organization of which this organization forms a part.
     */
    partOf?: Reference;
    /**
     * Contact for the organization for a certain purpose
     * Contact for the organization for a certain purpose.
     * Where multiple contacts for the same purpose are provided there is a standard extension that can be used to determine which one is the preferred contact to use.
     */
    contact?: OrganizationContact[];
    /**
     * Technical endpoints providing access to services operated for the organization
     * Technical endpoints providing access to services operated for the organization.
     */
    endpoint?: Reference[];
}
/**
 * Defines an affiliation/assotiation/relationship between 2 distinct oganizations, that is not a part-of relationship/sub-division relationship
 * Defines an affiliation/assotiation/relationship between 2 distinct oganizations, that is not a part-of relationship/sub-division relationship.
 */
export interface OrganizationAffiliation extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'OrganizationAffiliation';
    /**
     * Business identifiers that are specific to this role
     * Business identifiers that are specific to this role.
     */
    identifier?: Identifier[];
    /**
     * Whether this organization affiliation record is in active use
     * Whether this organization affiliation record is in active use.
     * If this value is false, you may refer to the period to see when the role was in active use. If there is no period specified, no inference can be made about when it was active.
     */
    active?: boolean;
    /**
     * Extension for active
     **/
    _active?: Element;
    /**
     * The period during which the participatingOrganization is affiliated with the primary organization
     * The period during which the participatingOrganization is affiliated with the primary organization.
     */
    period?: Period;
    /**
     * Organization where the role is available
     * Organization where the role is available (primary organization/has members).
     */
    organization?: Reference;
    /**
     * Organization that provides/performs the role (e.g. providing services or is a member of)
     * The Participating Organization provides/performs the role(s) defined by the code to the Primary Organization (e.g. providing services or is a member of).
     */
    participatingOrganization?: Reference;
    /**
     * Health insurance provider network in which the participatingOrganization provides the role's services (if defined) at the indicated locations (if defined)
     * Health insurance provider network in which the participatingOrganization provides the role's services (if defined) at the indicated locations (if defined).
     */
    network?: Reference[];
    /**
     * Definition of the role the participatingOrganization plays
     * Definition of the role the participatingOrganization plays in the association.
     */
    code?: CodeableConcept[];
    /**
     * Specific specialty of the participatingOrganization in the context of the role
     * Specific specialty of the participatingOrganization in the context of the role.
     */
    specialty?: CodeableConcept[];
    /**
     * The location(s) at which the role occurs
     * The location(s) at which the role occurs.
     */
    location?: Reference[];
    /**
     * Healthcare services provided through the role
     * Healthcare services provided through the role.
     */
    healthcareService?: Reference[];
    /**
     * Contact details at the participatingOrganization relevant to this Affiliation
     * Contact details at the participatingOrganization relevant to this Affiliation.
     */
    telecom?: ContactPoint[];
    /**
     * Technical endpoints providing access to services operated for this role
     * Technical endpoints providing access to services operated for this role.
     */
    endpoint?: Reference[];
}
/**
 * Operation Parameter
 * A parameter passed to or received from the operation.
 */
export interface ParametersParameter extends BackboneElement {
    /**
     * Name from the definition
     * The name of the parameter (reference to the operation definition).
     */
    name: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueBase64Binary?: base64Binary;
    /**
     * Extension for valueBase64Binary
     **/
    _valueBase64Binary?: Element;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueBoolean?: boolean;
    /**
     * Extension for valueBoolean
     **/
    _valueBoolean?: Element;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueCanonical?: canonical;
    /**
     * Extension for valueCanonical
     **/
    _valueCanonical?: Element;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueCode?: code;
    /**
     * Extension for valueCode
     **/
    _valueCode?: Element;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueDate?: date;
    /**
     * Extension for valueDate
     **/
    _valueDate?: Element;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueDateTime?: dateTime;
    /**
     * Extension for valueDateTime
     **/
    _valueDateTime?: Element;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueDecimal?: decimal;
    /**
     * Extension for valueDecimal
     **/
    _valueDecimal?: Element;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueId?: id;
    /**
     * Extension for valueId
     **/
    _valueId?: Element;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueInstant?: instant;
    /**
     * Extension for valueInstant
     **/
    _valueInstant?: Element;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueInteger?: integer;
    /**
     * Extension for valueInteger
     **/
    _valueInteger?: Element;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueMarkdown?: markdown;
    /**
     * Extension for valueMarkdown
     **/
    _valueMarkdown?: Element;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueOid?: oid;
    /**
     * Extension for valueOid
     **/
    _valueOid?: Element;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valuePositiveInt?: positiveInt;
    /**
     * Extension for valuePositiveInt
     **/
    _valuePositiveInt?: Element;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueString?: string;
    /**
     * Extension for valueString
     **/
    _valueString?: Element;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueTime?: time;
    /**
     * Extension for valueTime
     **/
    _valueTime?: Element;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueUnsignedInt?: unsignedInt;
    /**
     * Extension for valueUnsignedInt
     **/
    _valueUnsignedInt?: Element;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueUri?: uri;
    /**
     * Extension for valueUri
     **/
    _valueUri?: Element;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueUrl?: url;
    /**
     * Extension for valueUrl
     **/
    _valueUrl?: Element;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueUuid?: uuid;
    /**
     * Extension for valueUuid
     **/
    _valueUuid?: Element;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueAddress?: Address;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueAge?: Age;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueAnnotation?: Annotation;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueAttachment?: Attachment;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueCodeableConcept?: CodeableConcept;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueCoding?: Coding;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueContactPoint?: ContactPoint;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueCount?: Count;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueDistance?: Distance;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueDuration?: Duration;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueHumanName?: HumanName;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueIdentifier?: Identifier;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueMoney?: Money;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valuePeriod?: Period;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueQuantity?: Quantity;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueRange?: Range;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueRatio?: Ratio;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueReference?: Reference;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueSampledData?: SampledData;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueSignature?: Signature;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueTiming?: Timing;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueContactDetail?: ContactDetail;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueContributor?: Contributor;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueDataRequirement?: DataRequirement;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueExpression?: Expression;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueParameterDefinition?: ParameterDefinition;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueRelatedArtifact?: RelatedArtifact;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueTriggerDefinition?: TriggerDefinition;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueUsageContext?: UsageContext;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueDosage?: Dosage;
    /**
     * If parameter is a data type
     * If the parameter is a data type.
     */
    valueMeta?: Meta;
    /**
     * If parameter is a whole resource
     * If the parameter is a whole resource.
     * When resolving references in resources, the operation definition may specify how references may be resolved between parameters. If a reference cannot be resolved between the parameters, the application should fall back to it's general resource resolution methods.
     */
    resource?: Resource;
    /**
     * Named part of a multi-part parameter
     * A named part of a multi-part parameter.
     * Only one level of nested parameters is allowed.
     */
    part?: ParametersParameter[];
}
/**
 * Operation Request or Response
 * This resource is a non-persisted resource used to pass information into and back from an [operation](operations.html). It has no other use, and there is no RESTful endpoint associated with it.
 * The parameters that may be used are defined by the OperationDefinition resource.
 */
export interface Parameters extends Resource {
    /**
     * Operation Parameter
     * A parameter passed to or received from the operation.
     */
    parameter?: ParametersParameter[];
}
/**
 * A contact party (e.g. guardian, partner, friend) for the patient
 * A contact party (e.g. guardian, partner, friend) for the patient.
 * Contact covers all kinds of contact parties: family members, business contacts, guardians, caregivers. Not applicable to register pedigree and family ties beyond use of having contact.
 */
export interface PatientContact extends BackboneElement {
    /**
     * The kind of relationship
     * The nature of the relationship between the patient and the contact person.
     */
    relationship?: CodeableConcept[];
    /**
     * A name associated with the contact person
     * A name associated with the contact person.
     */
    name?: HumanName;
    /**
     * A contact detail for the person
     * A contact detail for the person, e.g. a telephone number or an email address.
     * Contact may have multiple ways to be contacted with different uses or applicable periods.  May need to have options for contacting the person urgently, and also to help with identification.
     */
    telecom?: ContactPoint[];
    /**
     * Address for the contact person
     * Address for the contact person.
     */
    address?: Address;
    /**
     * Organization that is associated with the contact
     * Organization on behalf of which the contact is acting or for which the contact is working.
     */
    organization?: Reference;
    /**
     * The period during which this contact person or organization is valid to be contacted relating to this patient
     * The period during which this contact person or organization is valid to be contacted relating to this patient.
     */
    period?: Period;
    /**
     * male | female | other | unknown
     * Administrative Gender - the gender that the contact person is considered to have for administration and record keeping purposes.
     */
    gender?: PatientAdministrativeGender;
}
/**
 * A language which may be used to communicate with the patient about his or her health
 * A language which may be used to communicate with the patient about his or her health.
 * If no language is specified, this *implies* that the default local language is spoken.  If you need to convey proficiency for multiple modes, then you need multiple Patient.Communication associations.   For animals, language is not a relevant field, and should be absent from the instance. If the Patient does not speak the default local language, then the Interpreter Required Standard can be used to explicitly declare that an interpreter is required.
 */
export interface PatientCommunication extends BackboneElement {
    /**
     * The language which can be used to communicate with the patient about his or her health
     * 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.
     * The structure aa-BB with this exact casing is one the most widely used notations for locale. However not all systems actually code this but instead have it as free text. Hence CodeableConcept instead of code as the data type.
     */
    language: CodeableConcept;
    /**
     * Language preference indicator
     * Indicates whether or not the patient prefers this language (over other languages he masters up a certain level).
     * This language is specifically identified for communicating healthcare information.
     */
    preferred?: boolean;
    /**
     * Extension for preferred
     **/
    _preferred?: Element;
}
/**
 * Link to another patient resource that concerns the same actual person
 * Link to another patient resource that concerns the same actual patient.
 * There is no assumption that linked patient records have mutual links.
 */
export interface PatientLink extends BackboneElement {
    /**
     * The other patient or related person resource that the link refers to
     * The other patient resource that the link refers to.
     * Referencing a RelatedPerson here removes the need to use a Person record to associate a Patient and RelatedPerson as the same individual.
     */
    other: Reference;
    /**
     * replaced-by | replaces | refer | seealso
     * The type of link between this patient resource and another patient resource.
     */
    type: PatientLinkType;
}
/**
 * Information about an individual or animal receiving health care services
 * Demographics and other administrative information about an individual or animal receiving care or other health-related services.
 */
export interface Patient extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Patient';
    /**
     * An identifier for this patient
     * An identifier for this patient.
     */
    identifier?: Identifier[];
    /**
     * Whether this patient's record is in active use
     * Whether this patient record is in active use.
Many systems use this property to mark as non-current patients, such as those that have not been seen for a period of time based on an organization's business rules.

It is often used to filter patient lists to exclude inactive patients

Deceased patients may also be marked as inactive for the same reasons, but may be active for some time after death.
     * If a record is inactive, and linked to an active record, then future patient/record updates should occur on the other patient.
     */
    active?: boolean;
    /**
     * Extension for active
     **/
    _active?: Element;
    /**
     * A name associated with the patient
     * A name associated with the individual.
     * A patient may have multiple names with different uses or applicable periods. For animals, the name is a "HumanName" in the sense that is assigned and used by humans and has the same patterns.
     */
    name?: HumanName[];
    /**
     * A contact detail for the individual
     * A contact detail (e.g. a telephone number or an email address) by which the individual may be contacted.
     * A Patient may have multiple ways to be contacted with different uses or applicable periods.  May need to have options for contacting the person urgently and also to help with identification. The address might not go directly to the individual, but may reach another party that is able to proxy for the patient (i.e. home phone, or pet owner's phone).
     */
    telecom?: ContactPoint[];
    /**
     * The date of birth for the individual
     * The date of birth for the individual.
     * At least an estimated year should be provided as a guess if the real DOB is unknown  There is a standard extension "patient-birthTime" available that should be used where Time is required (such as in maternity/infant care systems).
     */
    birthDate?: date;
    /**
     * Extension for birthDate
     **/
    _birthDate?: Element;
    /**
     * Indicates if the individual is deceased or not
     * Indicates if the individual is deceased or not.
     * If there's no value in the instance, it means there is no statement on whether or not the individual is deceased. Most systems will interpret the absence of a value as a sign of the person being alive.
     */
    deceasedBoolean?: boolean;
    /**
     * Extension for deceasedBoolean
     **/
    _deceasedBoolean?: Element;
    /**
     * Indicates if the individual is deceased or not
     * Indicates if the individual is deceased or not.
     * If there's no value in the instance, it means there is no statement on whether or not the individual is deceased. Most systems will interpret the absence of a value as a sign of the person being alive.
     */
    deceasedDateTime?: dateTime;
    /**
     * Extension for deceasedDateTime
     **/
    _deceasedDateTime?: Element;
    /**
     * An address for the individual
     * An address for the individual.
     * Patient may have multiple addresses with different uses or applicable periods.
     */
    address?: Address[];
    /**
     * Marital (civil) status of a patient
     * This field contains a patient's most recent marital (civil) status.
     */
    maritalStatus?: CodeableConcept;
    /**
     * Whether patient is part of a multiple birth
     * Indicates whether the patient is part of a multiple (boolean) or indicates the actual birth order (integer).
     * Where the valueInteger is provided, the number is the birth number in the sequence. E.g. The middle birth in triplets would be valueInteger=2 and the third born would have valueInteger=3 If a boolean value was provided for this triplets example, then all 3 patient records would have valueBoolean=true (the ordering is not indicated).
     */
    multipleBirthBoolean?: boolean;
    /**
     * Extension for multipleBirthBoolean
     **/
    _multipleBirthBoolean?: Element;
    /**
     * Whether patient is part of a multiple birth
     * Indicates whether the patient is part of a multiple (boolean) or indicates the actual birth order (integer).
     * Where the valueInteger is provided, the number is the birth number in the sequence. E.g. The middle birth in triplets would be valueInteger=2 and the third born would have valueInteger=3 If a boolean value was provided for this triplets example, then all 3 patient records would have valueBoolean=true (the ordering is not indicated).
     */
    multipleBirthInteger?: integer;
    /**
     * Extension for multipleBirthInteger
     **/
    _multipleBirthInteger?: Element;
    /**
     * Image of the patient
     * Image of the patient.
     * Guidelines:
* Use id photos, not clinical photos.
* Limit dimensions to thumbnail.
* Keep byte count low to ease resource updates.
     */
    photo?: Attachment[];
    /**
     * A contact party (e.g. guardian, partner, friend) for the patient
     * A contact party (e.g. guardian, partner, friend) for the patient.
     * Contact covers all kinds of contact parties: family members, business contacts, guardians, caregivers. Not applicable to register pedigree and family ties beyond use of having contact.
     */
    contact?: PatientContact[];
    /**
     * A language which may be used to communicate with the patient about his or her health
     * A language which may be used to communicate with the patient about his or her health.
     * If no language is specified, this *implies* that the default local language is spoken.  If you need to convey proficiency for multiple modes, then you need multiple Patient.Communication associations.   For animals, language is not a relevant field, and should be absent from the instance. If the Patient does not speak the default local language, then the Interpreter Required Standard can be used to explicitly declare that an interpreter is required.
     */
    communication?: PatientCommunication[];
    /**
     * Patient's nominated primary care provider
     * Patient's nominated care provider.
     * This may be the primary care provider (in a GP context), or it may be a patient nominated care manager in a community/disability setting, or even organization that will provide people to perform the care provider roles.  It is not to be used to record Care Teams, these should be in a CareTeam resource that may be linked to the CarePlan or EpisodeOfCare resources.
Multiple GPs may be recorded against the patient for various reasons, such as a student that has his home GP listed along with the GP at university during the school semesters, or a "fly-in/fly-out" worker that has the onsite GP also included with his home GP to remain aware of medical issues.

Jurisdictions may decide that they can profile this down to 1 if desired, or 1 per type.
     */
    generalPractitioner?: Reference[];
    /**
     * Organization that is the custodian of the patient record
     * Organization that is the custodian of the patient record.
     * There is only one managing organization for a specific patient record. Other organizations will have their own Patient record, and may use the Link property to join the records together (or a Person resource which can include confidence ratings for the association).
     */
    managingOrganization?: Reference;
    /**
     * Link to another patient resource that concerns the same actual person
     * Link to another patient resource that concerns the same actual patient.
     * There is no assumption that linked patient records have mutual links.
     */
    link?: PatientLink[];
    /**
     * male | female | other | unknown
     * Administrative Gender - the gender that the patient is considered to have for administration and record keeping purposes.
     * The gender might not match the biological sex as determined by genetics or the individual's preferred identification. Note that for both humans and particularly animals, there are other legitimate possibilities than male and female, though the vast majority of systems and contexts only support male and female.  Systems providing decision support or enforcing business rules should ideally do this on the basis of Observations dealing with the specific sex or gender aspect of interest (anatomical, chromosomal, social, etc.)  However, because these observations are infrequently recorded, defaulting to the administrative gender is common practice.  Where such defaulting occurs, rule enforcement should allow for the variation between administrative and biological, chromosomal and other gender aspects.  For example, an alert about a hysterectomy on a male should be handled as a warning or overridable error, not a "hard" error.  See the Patient Gender and Sex section for additional information about communicating patient gender and sex.
     */
    gender?: PatientAdministrativeGender;
}
/**
 * PaymentNotice request
 * This resource provides the status of the payment for goods and services rendered, and the request and response resource references.
 */
export interface PaymentNotice extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'PaymentNotice';
    /**
     * Business Identifier for the payment noctice
     * A unique identifier assigned to this payment notice.
     */
    identifier?: Identifier[];
    /**
     * Request reference
     * Reference of resource for which payment is being made.
     */
    request?: Reference;
    /**
     * Response reference
     * Reference of response to resource for which payment is being made.
     */
    response?: Reference;
    /**
     * Creation date
     * The date when this resource was created.
     */
    created: dateTime;
    /**
     * Extension for created
     **/
    _created?: Element;
    /**
     * Responsible practitioner
     * The practitioner who is responsible for the services rendered to the patient.
     */
    provider?: Reference;
    /**
     * Payment reference
     * A reference to the payment which is the subject of this notice.
     */
    payment: Reference;
    /**
     * Payment or clearing date
     * The date when the above payment action occurred.
     */
    paymentDate?: date;
    /**
     * Extension for paymentDate
     **/
    _paymentDate?: Element;
    /**
     * Party being paid
     * The party who will receive or has received payment that is the subject of this notification.
     */
    payee?: Reference;
    /**
     * Party being notified
     * The party who is notified of the payment status.
     */
    recipient: Reference;
    /**
     * Monetary amount of the payment
     * The amount sent to the payee.
     */
    amount: Money;
    /**
     * Issued or cleared Status of the payment
     * A code indicating whether payment has been sent or cleared.
     * Typically paid: payment sent, cleared: payment received.
     */
    paymentStatus?: CodeableConcept;
    /**
     * active | cancelled | draft | entered-in-error
     * The status of the resource instance.
     * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
     */
    status: PaymentNoticeStatus;
}
/**
 * Settlement particulars
 * Distribution of the payment amount for a previously acknowledged payable.
 */
export interface PaymentReconciliationDetail extends BackboneElement {
    /**
     * Business identifier of the payment detail
     * Unique identifier for the current payment item for the referenced payable.
     */
    identifier?: Identifier;
    /**
     * Business identifier of the prior payment detail
     * Unique identifier for the prior payment item for the referenced payable.
     */
    predecessor?: Identifier;
    /**
     * Category of payment
     * Code to indicate the nature of the payment.
     * For example: payment, adjustment, funds advance, etc.
     */
    type: CodeableConcept;
    /**
     * Request giving rise to the payment
     * A resource, such as a Claim, the evaluation of which could lead to payment.
     */
    request?: Reference;
    /**
     * Submitter of the request
     * The party which submitted the claim or financial transaction.
     */
    submitter?: Reference;
    /**
     * Response committing to a payment
     * A resource, such as a ClaimResponse, which contains a commitment to payment.
     */
    response?: Reference;
    /**
     * Date of commitment to pay
     * The date from the response resource containing a commitment to pay.
     */
    date?: date;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Contact for the response
     * A reference to the individual who is responsible for inquiries regarding the response and its payment.
     */
    responsible?: Reference;
    /**
     * Recipient of the payment
     * The party which is receiving the payment.
     */
    payee?: Reference;
    /**
     * Amount allocated to this payable
     * The monetary amount allocated from the total payment to the payable.
     */
    amount?: Money;
}
/**
 * Note concerning processing
 * A note that describes or explains the processing in a human readable form.
 */
export interface PaymentReconciliationProcessNote extends BackboneElement {
    /**
     * Note explanatory text
     * The explanation or description associated with the processing.
     */
    text?: string;
    /**
     * Extension for text
     **/
    _text?: Element;
    /**
     * display | print | printoper
     * The business purpose of the note text.
     */
    type?: PaymentReconciliationNoteType;
}
/**
 * PaymentReconciliation resource
 * This resource provides the details including amount of a payment and allocates the payment items being paid.
 */
export interface PaymentReconciliation extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'PaymentReconciliation';
    /**
     * Business Identifier for a payment reconciliation
     * A unique identifier assigned to this payment reconciliation.
     */
    identifier?: Identifier[];
    /**
     * Period covered
     * The period of time for which payments have been gathered into this bulk payment for settlement.
     */
    period?: Period;
    /**
     * Creation date
     * The date when the resource was created.
     */
    created: dateTime;
    /**
     * Extension for created
     **/
    _created?: Element;
    /**
     * Party generating payment
     * The party who generated the payment.
     * This party is also responsible for the reconciliation.
     */
    paymentIssuer?: Reference;
    /**
     * Reference to requesting resource
     * Original request resource reference.
     */
    request?: Reference;
    /**
     * Responsible practitioner
     * The practitioner who is responsible for the services rendered to the patient.
     */
    requestor?: Reference;
    /**
     * Disposition message
     * A human readable description of the status of the request for the reconciliation.
     */
    disposition?: string;
    /**
     * Extension for disposition
     **/
    _disposition?: Element;
    /**
     * When payment issued
     * The date of payment as indicated on the financial instrument.
     */
    paymentDate: date;
    /**
     * Extension for paymentDate
     **/
    _paymentDate?: Element;
    /**
     * Total amount of Payment
     * Total payment amount as indicated on the financial instrument.
     */
    paymentAmount: Money;
    /**
     * Business identifier for the payment
     * Issuer's unique identifier for the payment instrument.
     * For example: EFT number or check number.
     */
    paymentIdentifier?: Identifier;
    /**
     * Settlement particulars
     * Distribution of the payment amount for a previously acknowledged payable.
     */
    detail?: PaymentReconciliationDetail[];
    /**
     * Printed form identifier
     * A code for the form to be used for printing the content.
     * May be needed to identify specific jurisdictional forms.
     */
    formCode?: CodeableConcept;
    /**
     * Note concerning processing
     * A note that describes or explains the processing in a human readable form.
     */
    processNote?: PaymentReconciliationProcessNote[];
    /**
     * active | cancelled | draft | entered-in-error
     * The status of the resource instance.
     * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
     */
    status: PaymentReconciliationStatus;
    /**
     * queued | complete | error | partial
     * The outcome of a request for a reconciliation.
     * The resource may be used to indicate that: the request has been held (queued) for processing; that it has been processed and errors found (error); that no errors were found and that some of the adjudication has been undertaken (partial) or that all of the adjudication has been undertaken (complete).
     */
    outcome?: PaymentReconciliationRemittanceOutcome;
}
/**
 * Link to a resource that concerns the same actual person
 * Link to a resource that concerns the same actual person.
 */
export interface PersonLink extends BackboneElement {
    /**
     * The resource to which this actual person is associated
     * The resource to which this actual person is associated.
     */
    target: Reference;
    /**
     * level1 | level2 | level3 | level4
     * Level of assurance that this link is associated with the target resource.
     */
    assurance?: PersonIdentityAssuranceLevel;
}
/**
 * A generic person record
 * Demographics and administrative information about a person independent of a specific health-related context.
 * The Person resource does justice to person registries that keep track of persons regardless of their role. The Person resource is also a primary resource to point to for people acting in a particular role such as SubjectofCare, Practitioner, and Agent. Very few attributes are specific to any role and so Person is kept lean. Most attributes are expected to be tied to the role the Person plays rather than the Person himself. Examples of that are Guardian (SubjectofCare), ContactParty (SubjectOfCare, Practitioner), and multipleBirthInd (SubjectofCare).
 */
export interface Person extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Person';
    /**
     * A human identifier for this person
     * Identifier for a person within a particular scope.
     */
    identifier?: Identifier[];
    /**
     * A name associated with the person
     * A name associated with the person.
     * Person may have multiple names with different uses or applicable periods.
     */
    name?: HumanName[];
    /**
     * A contact detail for the person
     * A contact detail for the person, e.g. a telephone number or an email address.
     * Person may have multiple ways to be contacted with different uses or applicable periods.  May need to have options for contacting the person urgently and also to help with identification.
     */
    telecom?: ContactPoint[];
    /**
     * The date on which the person was born
     * The birth date for the person.
     * At least an estimated year should be provided as a guess if the real DOB is unknown.
     */
    birthDate?: date;
    /**
     * Extension for birthDate
     **/
    _birthDate?: Element;
    /**
     * One or more addresses for the person
     * One or more addresses for the person.
     * Person may have multiple addresses with different uses or applicable periods.
     */
    address?: Address[];
    /**
     * Image of the person
     * An image that can be displayed as a thumbnail of the person to enhance the identification of the individual.
     */
    photo?: Attachment;
    /**
     * The organization that is the custodian of the person record
     * The organization that is the custodian of the person record.
     */
    managingOrganization?: Reference;
    /**
     * This person's record is in active use
     * Whether this person's record is in active use.
     */
    active?: boolean;
    /**
     * Extension for active
     **/
    _active?: Element;
    /**
     * Link to a resource that concerns the same actual person
     * Link to a resource that concerns the same actual person.
     */
    link?: PersonLink[];
    /**
     * male | female | other | unknown
     * Administrative Gender.
     * The gender might not match the biological sex as determined by genetics, or the individual's preferred identification. Note that for both humans and particularly animals, there are other legitimate possibilities than M and F, though a clear majority of systems and contexts only support M and F.
     */
    gender?: PersonAdministrativeGender;
}
/**
 * Target outcome for the goal
 * Indicates what should be done and within what timeframe.
 */
export interface PlanDefinitionGoalTarget extends BackboneElement {
    /**
     * The parameter whose value is to be tracked
     * The parameter whose value is to be tracked, e.g. body weight, blood pressure, or hemoglobin A1c level.
     */
    measure?: CodeableConcept;
    /**
     * The target value to be achieved
     * 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. When 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.
     */
    detailQuantity?: Quantity;
    /**
     * The target value to be achieved
     * 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. When 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.
     */
    detailRange?: Range;
    /**
     * The target value to be achieved
     * 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. When 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.
     */
    detailCodeableConcept?: CodeableConcept;
    /**
     * Reach goal within
     * Indicates the timeframe after the start of the goal in which the goal should be met.
     */
    due?: Duration;
}
/**
 * What the plan is trying to accomplish
 * 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.
 */
export interface PlanDefinitionGoal extends BackboneElement {
    /**
     * E.g. Treatment, dietary, behavioral
     * Indicates a category the goal falls within.
     */
    category?: CodeableConcept;
    /**
     * Code or text describing the goal
     * 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".
     * If no code is available, use CodeableConcept.text.
     */
    description: CodeableConcept;
    /**
     * high-priority | medium-priority | low-priority
     * Identifies the expected level of importance associated with reaching/sustaining the defined goal.
     */
    priority?: CodeableConcept;
    /**
     * When goal pursuit begins
     * The event after which the goal should begin being pursued.
     */
    start?: CodeableConcept;
    /**
     * What does the goal address
     * Identifies problems, conditions, issues, or concerns the goal is intended to address.
     */
    addresses?: CodeableConcept[];
    /**
     * Supporting documentation for the goal
     * 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.
     */
    documentation?: RelatedArtifact[];
    /**
     * Target outcome for the goal
     * Indicates what should be done and within what timeframe.
     */
    target?: PlanDefinitionGoalTarget[];
}
/**
 * Whether or not the action is applicable
 * An expression that describes applicability criteria or start/stop conditions for the action.
 * When multiple conditions of the same kind are present, the effects are combined using AND semantics, so the overall condition is true only if all the conditions are true.
 */
export interface PlanDefinitionActionCondition extends BackboneElement {
    /**
     * Boolean-valued expression
     * An expression that returns true or false, indicating whether the condition is satisfied.
     * The expression may be inlined or may be a reference to a named expression within a logic library referenced by the library element.
     */
    expression?: Expression;
    /**
     * applicability | start | stop
     * The kind of condition.
     * Applicability criteria are used to determine immediate applicability when a plan definition is applied to a given context. Start and stop criteria are carried through application and used to describe enter/exit criteria for an action.
     */
    kind: PlanDefinitionActionConditionKind;
}
/**
 * Relationship to another action
 * A relationship to another action such as "before" or "30-60 minutes after start of".
 * When an action depends on multiple actions, the meaning is that all actions are dependencies, rather than that any of the actions are a dependency.
 */
export interface PlanDefinitionActionRelatedAction extends BackboneElement {
    /**
     * What action is this related to
     * The element id of the related action.
     */
    actionId: id;
    /**
     * Extension for actionId
     **/
    _actionId?: Element;
    /**
     * Time offset for the relationship
     * A duration or range of durations to apply to the relationship. For example, 30-60 minutes before.
     */
    offsetDuration?: Duration;
    /**
     * Time offset for the relationship
     * A duration or range of durations to apply to the relationship. For example, 30-60 minutes before.
     */
    offsetRange?: Range;
    /**
     * before-start | before | before-end | concurrent-with-start | concurrent | concurrent-with-end | after-start | after | after-end
     * The relationship of this action to the related action.
     */
    relationship: PlanDefinitionActionRelationshipType;
}
/**
 * Who should participate in the action
 * Indicates who should participate in performing the action described.
 */
export interface PlanDefinitionActionParticipant extends BackboneElement {
    /**
     * E.g. Nurse, Surgeon, Parent
     * The role the participant should play in performing the described action.
     */
    role?: CodeableConcept;
    /**
     * patient | practitioner | related-person | device
     * The type of participant in the action.
     */
    type: PlanDefinitionActionParticipantType;
}
/**
 * Dynamic aspects of the definition
 * 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.
 * Dynamic values are applied in the order in which they are defined in the PlanDefinition resource. Note that when dynamic values are also specified by a referenced ActivityDefinition, the dynamicValues from the ActivityDefinition are applied first, followed by the dynamicValues specified here. In addition, if both a transform and dynamic values are specific, the dynamic values are applied to the result of the transform.
 */
export interface PlanDefinitionActionDynamicValue extends BackboneElement {
    /**
     * The path to the element to be set dynamically
     * 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. The specified path SHALL be a FHIRPath resolveable on the specified target type of the ActivityDefinition, and SHALL consist only of identifiers, constant indexers, and a restricted subset of functions. The path is allowed to contain qualifiers (.) to traverse sub-elements, as well as indexers ([x]) to traverse multiple-cardinality sub-elements (see the [Simple FHIRPath Profile](fhirpath.html#simple) for full details).
     * To specify the path to the current action being realized, the %action environment variable is available in this path. For example, to specify the description element of the target action, the path would be %action.description. The path attribute contains a [Simple FHIRPath Subset](fhirpath.html#simple) that allows path traversal, but not calculation.
     */
    path?: string;
    /**
     * Extension for path
     **/
    _path?: Element;
    /**
     * An expression that provides the dynamic value for the customization
     * An expression specifying the value of the customized element.
     * The expression may be inlined or may be a reference to a named expression within a logic library referenced by the library element.
     */
    expression?: Expression;
}
/**
 * Action defined by the plan
 * An action or group of actions to be taken as part of the plan.
 * Note that there is overlap between many of the elements defined here and the ActivityDefinition resource. When an ActivityDefinition is referenced (using the definition element), the overlapping elements in the plan override the content of the referenced ActivityDefinition unless otherwise documented in the specific elements. See the PlanDefinition resource for more detailed information.
 */
export interface PlanDefinitionAction extends BackboneElement {
    /**
     * User-visible prefix for the action (e.g. 1. or A.)
     * A user-visible prefix for the action.
     */
    prefix?: string;
    /**
     * Extension for prefix
     **/
    _prefix?: Element;
    /**
     * User-visible title
     * The title of the action displayed to a user.
     */
    title?: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * Brief description of the action
     * A brief description of the action used to provide a summary to display to the user.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Static text equivalent of the action, used if the dynamic aspects cannot be interpreted by the receiving system
     * 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 might not be capable of interpreting it dynamically.
     */
    textEquivalent?: string;
    /**
     * Extension for textEquivalent
     **/
    _textEquivalent?: Element;
    /**
     * Code representing the meaning of the action or sub-actions
     * A code that provides meaning for the action or action group. For example, a section may have a LOINC code for the section of a documentation template.
     */
    code?: CodeableConcept[];
    /**
     * Why the action should be performed
     * A description of why this action is necessary or appropriate.
     * This is different than the clinical evidence documentation, it's an actual business description of the reason for performing the action.
     */
    reason?: CodeableConcept[];
    /**
     * Supporting documentation for the intended performer of the action
     * 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.
     */
    documentation?: RelatedArtifact[];
    /**
     * What goals this action supports
     * Identifies goals that this action supports. The reference must be to a goal element defined within this plan definition.
     */
    goalId?: id[];
    /**
     * Extension for goalId
     **/
    _goalId?: Element[];
    /**
     * Type of individual the action is focused on
     * A code or group definition that describes the intended subject of the action and its children, if any.
     * The subject of an action overrides the subject at a parent action or on the root of the PlanDefinition if specified.

In addition, because the subject needs to be resolved during realization, use of subjects in actions (or in the ActivityDefinition referenced by the action) resolves based on the set of subjects supplied in context and by type (i.e. the patient subject would resolve to a resource of type Patient).
     */
    subjectCodeableConcept?: CodeableConcept;
    /**
     * Type of individual the action is focused on
     * A code or group definition that describes the intended subject of the action and its children, if any.
     * The subject of an action overrides the subject at a parent action or on the root of the PlanDefinition if specified.

In addition, because the subject needs to be resolved during realization, use of subjects in actions (or in the ActivityDefinition referenced by the action) resolves based on the set of subjects supplied in context and by type (i.e. the patient subject would resolve to a resource of type Patient).
     */
    subjectReference?: Reference;
    /**
     * When the action should be triggered
     * A description of when the action should be triggered.
     */
    trigger?: TriggerDefinition[];
    /**
     * Whether or not the action is applicable
     * An expression that describes applicability criteria or start/stop conditions for the action.
     * When multiple conditions of the same kind are present, the effects are combined using AND semantics, so the overall condition is true only if all the conditions are true.
     */
    condition?: PlanDefinitionActionCondition[];
    /**
     * Input data requirements
     * Defines input data requirements for the action.
     */
    input?: DataRequirement[];
    /**
     * Output data definition
     * Defines the outputs of the action, if any.
     */
    output?: DataRequirement[];
    /**
     * Relationship to another action
     * A relationship to another action such as "before" or "30-60 minutes after start of".
     * When an action depends on multiple actions, the meaning is that all actions are dependencies, rather than that any of the actions are a dependency.
     */
    relatedAction?: PlanDefinitionActionRelatedAction[];
    /**
     * When the action should take place
     * An optional value describing when the action should be performed.
     */
    timingDateTime?: dateTime;
    /**
     * Extension for timingDateTime
     **/
    _timingDateTime?: Element;
    /**
     * When the action should take place
     * An optional value describing when the action should be performed.
     */
    timingAge?: Age;
    /**
     * When the action should take place
     * An optional value describing when the action should be performed.
     */
    timingPeriod?: Period;
    /**
     * When the action should take place
     * An optional value describing when the action should be performed.
     */
    timingDuration?: Duration;
    /**
     * When the action should take place
     * An optional value describing when the action should be performed.
     */
    timingRange?: Range;
    /**
     * When the action should take place
     * An optional value describing when the action should be performed.
     */
    timingTiming?: Timing;
    /**
     * Who should participate in the action
     * Indicates who should participate in performing the action described.
     */
    participant?: PlanDefinitionActionParticipant[];
    /**
     * create | update | remove | fire-event
     * The type of action to perform (create, update, remove).
     */
    type?: CodeableConcept;
    /**
     * Description of the activity to be performed
     * 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.
     * Note that the definition is optional, and if no definition is specified, a dynamicValue with a root ($this) path can be used to define the entire resource dynamically.
     */
    definitionCanonical?: canonical;
    /**
     * Extension for definitionCanonical
     **/
    _definitionCanonical?: Element;
    /**
     * Description of the activity to be performed
     * 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.
     * Note that the definition is optional, and if no definition is specified, a dynamicValue with a root ($this) path can be used to define the entire resource dynamically.
     */
    definitionUri?: uri;
    /**
     * Extension for definitionUri
     **/
    _definitionUri?: Element;
    /**
     * Transform to apply the template
     * 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.
     * Note that when a referenced ActivityDefinition also defines a transform, the transform specified here generally takes precedence. In addition, if both a transform and dynamic values are specific, the dynamic values are applied to the result of the transform.
     */
    transform?: canonical;
    /**
     * Extension for transform
     **/
    _transform?: Element;
    /**
     * Dynamic aspects of the definition
     * 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.
     * Dynamic values are applied in the order in which they are defined in the PlanDefinition resource. Note that when dynamic values are also specified by a referenced ActivityDefinition, the dynamicValues from the ActivityDefinition are applied first, followed by the dynamicValues specified here. In addition, if both a transform and dynamic values are specific, the dynamic values are applied to the result of the transform.
     */
    dynamicValue?: PlanDefinitionActionDynamicValue[];
    /**
     * A sub-action
     * 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.
     */
    action?: PlanDefinitionAction[];
    /**
     * routine | urgent | asap | stat
     * Indicates how quickly the action should be addressed with respect to other actions.
     */
    priority?: PlanDefinitionRequestPriority;
    /**
     * visual-group | logical-group | sentence-group
     * Defines the grouping behavior for the action and its children.
     */
    groupingBehavior?: PlanDefinitionActionGroupingBehavior;
    /**
     * any | all | all-or-none | exactly-one | at-most-one | one-or-more
     * Defines the selection behavior for the action and its children.
     */
    selectionBehavior?: PlanDefinitionActionSelectionBehavior;
    /**
     * must | could | must-unless-documented
     * Defines the required behavior for the action.
     */
    requiredBehavior?: PlanDefinitionActionRequiredBehavior;
    /**
     * yes | no
     * Defines whether the action should usually be preselected.
     */
    precheckBehavior?: PlanDefinitionActionPrecheckBehavior;
    /**
     * single | multiple
     * Defines whether the action can be selected multiple times.
     */
    cardinalityBehavior?: PlanDefinitionActionCardinalityBehavior;
}
/**
 * The definition of a plan for a series of actions, independent of any specific patient or context
 * 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.
 */
export interface PlanDefinition extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'PlanDefinition';
    /**
     * Canonical identifier for this plan definition, represented as a URI (globally unique)
     * An absolute URI that is used to identify this plan definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this plan definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the plan definition is stored on different servers.
     * Can be a urn:uuid: or a urn:oid: but real http: addresses are preferred.  Multiple instances may share the same URL if they have a distinct version.

The determination of when to create a new version of a resource (same url, new version) vs. defining a new artifact is up to the author.  Considerations for making this decision are found in [Technical and Business Versions](resource.html#versions).

In some cases, the resource can no longer be found at the stated url, but the url itself cannot change. Implementations can use the [meta.source](resource.html#meta) element to indicate where the current master source of the resource can be found.
     */
    url?: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Additional identifier for the plan definition
     * 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.
     * Typically, this is used for identifiers that can go in an HL7 V3 II (instance identifier) data type, and can then identify this plan definition outside of FHIR, where it is not possible to use the logical URI.
     */
    identifier?: Identifier[];
    /**
     * Business version of the plan definition
     * 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.
     * There may be different plan definition instances that have the same identifier but different versions.  The version can be appended to the url in a reference to allow a reference to a particular business version of the plan definition with the format [url]|[version].
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
    /**
     * Name for this plan definition (computer friendly)
     * 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.
     * The name is not expected to be globally unique. The name should be a simple alphanumeric type name to ensure that it is machine-processing friendly.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Name for this plan definition (human friendly)
     * A short, descriptive, user-friendly title for the plan definition.
     * This name does not need to be machine-processing friendly and may contain punctuation, white-space, etc.
     */
    title?: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * Subordinate title of the plan definition
     * An explanatory or alternate title for the plan definition giving additional information about its content.
     */
    subtitle?: string;
    /**
     * Extension for subtitle
     **/
    _subtitle?: Element;
    /**
     * order-set | clinical-protocol | eca-rule | workflow-definition
     * A high-level category for the plan definition that distinguishes the kinds of systems that would be interested in the plan definition.
     */
    type?: CodeableConcept;
    /**
     * For testing purposes, not real usage
     * 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.
     * Allows filtering of plan definitions that are appropriate for use versus not.
     */
    experimental?: boolean;
    /**
     * Extension for experimental
     **/
    _experimental?: Element;
    /**
     * Type of individual the plan definition is focused on
     * A code or group definition that describes the intended subject of the plan definition.
     */
    subjectCodeableConcept?: CodeableConcept;
    /**
     * Type of individual the plan definition is focused on
     * A code or group definition that describes the intended subject of the plan definition.
     */
    subjectReference?: Reference;
    /**
     * Date last changed
     * The date  (and optionally time) when the plan definition was published. The date must change 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.
     * Note that this is not the same as the resource last-modified-date, since the resource may be a secondary representation of the plan definition. Additional specific dates may be added as extensions or be found by consulting Provenances associated with past versions of the resource.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Name of the publisher (organization or individual)
     * The name of the organization or individual that published the plan definition.
     * Usually an organization but may be an individual. The publisher (or steward) of the plan definition is the organization or individual primarily responsible for the maintenance and upkeep of the plan definition. This is not necessarily the same individual or organization that developed and initially authored the content. The publisher is the primary point of contact for questions or issues with the plan definition. This item SHOULD be populated unless the information is available from context.
     */
    publisher?: string;
    /**
     * Extension for publisher
     **/
    _publisher?: Element;
    /**
     * Contact details for the publisher
     * Contact details to assist a user in finding and communicating with the publisher.
     * May be a web site, an email address, a telephone number, etc.
     */
    contact?: ContactDetail[];
    /**
     * Natural language description of the plan definition
     * A free text natural language description of the plan definition from a consumer's perspective.
     * This description can be used to capture details such as why the plan definition was built, comments about misuse, instructions for clinical use and interpretation, literature references, examples from the paper world, etc. It is not a rendering of the plan definition as conveyed in the 'text' field of the resource itself. This item SHOULD be populated unless the information is available from context (e.g. the language of the plan definition is presumed to be the predominant language in the place the plan definition was created).
     */
    description?: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * The context that the content is intended to support
     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate plan definition instances.
     * When multiple useContexts are specified, there is no expectation that all or any of the contexts apply.
     */
    useContext?: UsageContext[];
    /**
     * Intended jurisdiction for plan definition (if applicable)
     * A legal or geographic region in which the plan definition is intended to be used.
     * It may be possible for the plan definition to be used in jurisdictions other than those for which it was originally designed or intended.
     */
    jurisdiction?: CodeableConcept[];
    /**
     * Why this plan definition is defined
     * Explanation of why this plan definition is needed and why it has been designed as it has.
     * This element does not describe the usage of the plan definition. Instead, it provides traceability of ''why'' the resource is either needed or ''why'' it is defined as it is.  This may be used to point to source materials or specifications that drove the structure of this plan definition.
     */
    purpose?: markdown;
    /**
     * Extension for purpose
     **/
    _purpose?: Element;
    /**
     * Describes the clinical usage of the plan
     * A detailed description of how the plan definition is used from a clinical perspective.
     */
    usage?: string;
    /**
     * Extension for usage
     **/
    _usage?: Element;
    /**
     * Use and/or publishing restrictions
     * 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.
     */
    copyright?: markdown;
    /**
     * Extension for copyright
     **/
    _copyright?: Element;
    /**
     * When the plan definition was approved by publisher
     * The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
     * The 'date' element may be more recent than the approval date because of minor changes or editorial corrections.
     */
    approvalDate?: date;
    /**
     * Extension for approvalDate
     **/
    _approvalDate?: Element;
    /**
     * When the plan definition was last reviewed
     * The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.
     * If specified, this date follows the original approval date.
     */
    lastReviewDate?: date;
    /**
     * Extension for lastReviewDate
     **/
    _lastReviewDate?: Element;
    /**
     * When the plan definition is expected to be used
     * The period during which the plan definition content was or is planned to be in active use.
     * The effective period for a plan definition  determines when the content is applicable for usage and is independent of publication and review dates. For example, a measure intended to be used for the year 2016 might be published in 2015.
     */
    effectivePeriod?: Period;
    /**
     * E.g. Education, Treatment, Assessment
     * 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.
     */
    topic?: CodeableConcept[];
    /**
     * Who authored the content
     * An individiual or organization primarily involved in the creation and maintenance of the content.
     */
    author?: ContactDetail[];
    /**
     * Who edited the content
     * An individual or organization primarily responsible for internal coherence of the content.
     */
    editor?: ContactDetail[];
    /**
     * Who reviewed the content
     * An individual or organization primarily responsible for review of some aspect of the content.
     */
    reviewer?: ContactDetail[];
    /**
     * Who endorsed the content
     * An individual or organization responsible for officially endorsing the content for use in some setting.
     */
    endorser?: ContactDetail[];
    /**
     * Additional documentation, citations
     * Related artifacts such as additional documentation, justification, or bibliographic references.
     * Each related artifact is either an attachment, or a reference to another resource, but not both.
     */
    relatedArtifact?: RelatedArtifact[];
    /**
     * Logic used by the plan definition
     * A reference to a Library resource containing any formal logic used by the plan definition.
     */
    library?: canonical[];
    /**
     * Extension for library
     **/
    _library?: Element[];
    /**
     * What the plan is trying to accomplish
     * 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.
     */
    goal?: PlanDefinitionGoal[];
    /**
     * Action defined by the plan
     * An action or group of actions to be taken as part of the plan.
     * Note that there is overlap between many of the elements defined here and the ActivityDefinition resource. When an ActivityDefinition is referenced (using the definition element), the overlapping elements in the plan override the content of the referenced ActivityDefinition unless otherwise documented in the specific elements. See the PlanDefinition resource for more detailed information.
     */
    action?: PlanDefinitionAction[];
    /**
     * draft | active | retired | unknown
     * The status of this plan definition. Enables tracking the life-cycle of the content.
     * Allows filtering of plan definitions that are appropriate for use versus not.
     */
    status: PlanDefinitionPublicationStatus;
}
/**
 * Certification, licenses, or training pertaining to the provision of care
 * The official certifications, training, and licenses that authorize or otherwise pertain to the provision of care by the practitioner.  For example, a medical license issued by a medical board authorizing the practitioner to practice medicine within a certian locality.
 */
export interface PractitionerQualification extends BackboneElement {
    /**
     * An identifier for this qualification for the practitioner
     * An identifier that applies to this person's qualification in this role.
     */
    identifier?: Identifier[];
    /**
     * Coded representation of the qualification
     * Coded representation of the qualification.
     */
    code: CodeableConcept;
    /**
     * Period during which the qualification is valid
     * Period during which the qualification is valid.
     */
    period?: Period;
    /**
     * Organization that regulates and issues the qualification
     * Organization that regulates and issues the qualification.
     */
    issuer?: Reference;
}
/**
 * A person with a  formal responsibility in the provisioning of healthcare or related services
 * A person who is directly or indirectly involved in the provisioning of healthcare.
 */
export interface Practitioner extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Practitioner';
    /**
     * An identifier for the person as this agent
     * An identifier that applies to this person in this role.
     */
    identifier?: Identifier[];
    /**
     * Whether this practitioner's record is in active use
     * Whether this practitioner's record is in active use.
     * If the practitioner is not in use by one organization, then it should mark the period on the PractitonerRole with an end date (even if they are active) as they may be active in another role.
     */
    active?: boolean;
    /**
     * Extension for active
     **/
    _active?: Element;
    /**
     * The name(s) associated with the practitioner
     * The name(s) associated with the practitioner.
     * The selection of the use property should ensure that there is a single usual name specified, and others use the nickname (alias), old, or other values as appropriate.

In general, select the value to be used in the ResourceReference.display based on this:

1. There is more than 1 name
2. Use = usual
3. Period is current to the date of the usage
4. Use = official
5. Other order as decided by internal business rules.
     */
    name?: HumanName[];
    /**
     * A contact detail for the practitioner (that apply to all roles)
     * A contact detail for the practitioner, e.g. a telephone number or an email address.
     * Person may have multiple ways to be contacted with different uses or applicable periods.  May need to have options for contacting the person urgently and to help with identification.  These typically will have home numbers, or mobile numbers that are not role specific.
     */
    telecom?: ContactPoint[];
    /**
     * Address(es) of the practitioner that are not role specific (typically home address)
     * 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.
     * The PractitionerRole does not have an address value on it, as it is expected that the location property be used for this purpose (which has an address).
     */
    address?: Address[];
    /**
     * The date  on which the practitioner was born
     * The date of birth for the practitioner.
     */
    birthDate?: date;
    /**
     * Extension for birthDate
     **/
    _birthDate?: Element;
    /**
     * Image of the person
     * Image of the person.
     */
    photo?: Attachment[];
    /**
     * Certification, licenses, or training pertaining to the provision of care
     * The official certifications, training, and licenses that authorize or otherwise pertain to the provision of care by the practitioner.  For example, a medical license issued by a medical board authorizing the practitioner to practice medicine within a certian locality.
     */
    qualification?: PractitionerQualification[];
    /**
     * A language the practitioner can use in patient communication
     * A language the practitioner can use in patient communication.
     * The structure aa-BB with this exact casing is one the most widely used notations for locale. However not all systems code this but instead have it as free text. Hence CodeableConcept instead of code as the data type.
     */
    communication?: CodeableConcept[];
    /**
     * male | female | other | unknown
     * Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes.
     */
    gender?: PractitionerAdministrativeGender;
}
/**
 * Times the Service Site is available
 * A collection of times the practitioner is available or performing this role at the location and/or healthcareservice.
 * More detailed availability information may be provided in associated Schedule/Slot resources.
 */
export interface PractitionerRoleAvailableTime extends BackboneElement {
    /**
     * Always available? e.g. 24 hour service
     * Is this always available? (hence times are irrelevant) e.g. 24 hour service.
     */
    allDay?: boolean;
    /**
     * Extension for allDay
     **/
    _allDay?: Element;
    /**
     * Opening time of day (ignored if allDay = true)
     * The opening time of day. Note: If the AllDay flag is set, then this time is ignored.
     * The timezone is expected to be for where this HealthcareService is provided at.
     */
    availableStartTime?: time;
    /**
     * Extension for availableStartTime
     **/
    _availableStartTime?: Element;
    /**
     * Closing time of day (ignored if allDay = true)
     * The closing time of day. Note: If the AllDay flag is set, then this time is ignored.
     * The timezone is expected to be for where this HealthcareService is provided at.
     */
    availableEndTime?: time;
    /**
     * Extension for availableEndTime
     **/
    _availableEndTime?: Element;
    /**
     * mon | tue | wed | thu | fri | sat | sun
     * Indicates which days of the week are available between the start and end Times.
     */
    daysOfWeek?: PractitionerRoleDaysOfWeek[];
}
/**
 * Not available during this time due to provided reason
 * The practitioner is not available or performing this role during this period of time due to the provided reason.
 */
export interface PractitionerRoleNotAvailable extends BackboneElement {
    /**
     * Reason presented to the user explaining why time not available
     * The reason that can be presented to the user as to why this time is not available.
     */
    description: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Service not available from this date
     * Service is not available (seasonally or for a public holiday) from this date.
     */
    during?: Period;
}
/**
 * Roles/organizations the practitioner is associated with
 * A specific set of Roles/Locations/specialties/services that a practitioner may perform at an organization for a period of time.
 */
export interface PractitionerRole extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'PractitionerRole';
    /**
     * Business Identifiers that are specific to a role/location
     * Business Identifiers that are specific to a role/location.
     */
    identifier?: Identifier[];
    /**
     * Whether this practitioner role record is in active use
     * Whether this practitioner role record is in active use.
     * If this value is false, you may refer to the period to see when the role was in active use. If there is no period specified, no inference can be made about when it was active.
     */
    active?: boolean;
    /**
     * Extension for active
     **/
    _active?: Element;
    /**
     * The period during which the practitioner is authorized to perform in these role(s)
     * The period during which the person is authorized to act as a practitioner in these role(s) for the organization.
     */
    period?: Period;
    /**
     * Practitioner that is able to provide the defined services for the organization
     * Practitioner that is able to provide the defined services for the organization.
     */
    practitioner?: Reference;
    /**
     * Organization where the roles are available
     * The organization where the Practitioner performs the roles associated.
     */
    organization?: Reference;
    /**
     * Roles which this practitioner may perform
     * Roles which this practitioner is authorized to perform for the organization.
     * A person may have more than one role.
     */
    code?: CodeableConcept[];
    /**
     * Specific specialty of the practitioner
     * Specific specialty of the practitioner.
     */
    specialty?: CodeableConcept[];
    /**
     * The location(s) at which this practitioner provides care
     * The location(s) at which this practitioner provides care.
     */
    location?: Reference[];
    /**
     * The list of healthcare services that this worker provides for this role's Organization/Location(s)
     * The list of healthcare services that this worker provides for this role's Organization/Location(s).
     */
    healthcareService?: Reference[];
    /**
     * Contact details that are specific to the role/location/service
     * Contact details that are specific to the role/location/service.
     */
    telecom?: ContactPoint[];
    /**
     * Times the Service Site is available
     * A collection of times the practitioner is available or performing this role at the location and/or healthcareservice.
     * More detailed availability information may be provided in associated Schedule/Slot resources.
     */
    availableTime?: PractitionerRoleAvailableTime[];
    /**
     * Not available during this time due to provided reason
     * The practitioner is not available or performing this role during this period of time due to the provided reason.
     */
    notAvailable?: PractitionerRoleNotAvailable[];
    /**
     * Description of availability exceptions
     * 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.
     */
    availabilityExceptions?: string;
    /**
     * Extension for availabilityExceptions
     **/
    _availabilityExceptions?: Element;
    /**
     * Technical endpoints providing access to services operated for the practitioner with this role
     * Technical endpoints providing access to services operated for the practitioner with this role.
     */
    endpoint?: Reference[];
}
/**
 * The people who performed the procedure
 * Limited to "real" people rather than equipment.
 */
export interface ProcedurePerformer extends BackboneElement {
    /**
     * Type of performance
     * Distinguishes the type of involvement of the performer in the procedure. For example, surgeon, anaesthetist, endoscopist.
     */
    function?: CodeableConcept;
    /**
     * The reference to the practitioner
     * The practitioner who was involved in the procedure.
     */
    actor: Reference;
    /**
     * Organization the device or practitioner was acting for
     * The organization the device or practitioner was acting on behalf of.
     */
    onBehalfOf?: Reference;
}
/**
 * Manipulated, implanted, or removed device
 * 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.
 */
export interface ProcedureFocalDevice extends BackboneElement {
    /**
     * Kind of change to device
     * The kind of change that happened to the device during the procedure.
     */
    action?: CodeableConcept;
    /**
     * Device that was changed
     * The device that was manipulated (changed) during the procedure.
     */
    manipulated: Reference;
}
/**
 * An action that is being or was performed on a patient
 * An action that is or was performed on or for a patient. This can be a physical intervention like an operation, or less invasive like long term services, counseling, or hypnotherapy.
 */
export interface Procedure extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Procedure';
    /**
     * External Identifiers for this procedure
     * Business identifiers assigned to this procedure by the performer or other systems which remain constant as the resource is updated and is propagated from server to server.
     * This is a business identifier, not a resource identifier (see [discussion](resource.html#identifiers)).  It is best practice for the identifier to only appear on a single resource instance, however business practices may occasionally dictate that multiple resource instances with the same identifier can exist - possibly even with different resource types.  For example, multiple Patient and Person resource instances might share the same social insurance number.
     */
    identifier?: Identifier[];
    /**
     * Instantiates FHIR protocol or definition
     * The URL pointing to a FHIR-defined protocol, guideline, order set or other definition that is adhered to in whole or in part by this Procedure.
     */
    instantiatesCanonical?: canonical[];
    /**
     * Extension for instantiatesCanonical
     **/
    _instantiatesCanonical?: Element[];
    /**
     * Instantiates external protocol or definition
     * The URL pointing to an externally maintained protocol, guideline, order set or other definition that is adhered to in whole or in part by this Procedure.
     * This might be an HTML page, PDF, etc. or could just be a non-resolvable URI identifier.
     */
    instantiatesUri?: uri[];
    /**
     * Extension for instantiatesUri
     **/
    _instantiatesUri?: Element[];
    /**
     * A request for this procedure
     * A reference to a resource that contains details of the request for this procedure.
     */
    basedOn?: Reference[];
    /**
     * Part of referenced event
     * A larger event of which this particular procedure is a component or step.
     * The MedicationAdministration resource has a partOf reference to Procedure, but this is not a circular reference.   For example, the anesthesia MedicationAdministration is part of the surgical Procedure (MedicationAdministration.partOf = Procedure).  For example, the procedure to insert the IV port for an IV medication administration is part of the medication administration (Procedure.partOf = MedicationAdministration).
     */
    partOf?: Reference[];
    /**
     * Reason for current status
     * Captures the reason for the current state of the procedure.
     * This is generally only used for "exception" statuses such as "not-done", "suspended" or "aborted". The reason for performing the event at all is captured in reasonCode, not here.
     */
    statusReason?: CodeableConcept;
    /**
     * Classification of the procedure
     * A code that classifies the procedure for searching, sorting and display purposes (e.g. "Surgical Procedure").
     */
    category?: CodeableConcept;
    /**
     * Identification of the procedure
     * The specific procedure that is performed. Use text if the exact nature of the procedure cannot be coded (e.g. "Laparoscopic Appendectomy").
     */
    code?: CodeableConcept;
    /**
     * Who the procedure was performed on
     * The person, animal or group on which the procedure was performed.
     */
    subject: Reference;
    /**
     * Encounter created as part of
     * The Encounter during which this Procedure was created or performed or to which the creation of this record is tightly associated.
     * This will typically be the encounter the event occurred within, but some activities may be initiated prior to or after the official completion of an encounter but still be tied to the context of the encounter.
     */
    encounter?: Reference;
    /**
     * When the procedure was performed
     * Estimated or actual date, date-time, period, or age when 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.
     * Age is generally used when the patient reports an age at which the procedure was performed. Range is generally used when the patient reports an age range when the procedure was performed, such as sometime between 20-25 years old.  dateTime supports a range of precision due to some procedures being reported as past procedures that might not have millisecond precision while other procedures performed and documented during the encounter might have more precise UTC timestamps with timezone.
     */
    performedDateTime?: dateTime;
    /**
     * Extension for performedDateTime
     **/
    _performedDateTime?: Element;
    /**
     * When the procedure was performed
     * Estimated or actual date, date-time, period, or age when 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.
     * Age is generally used when the patient reports an age at which the procedure was performed. Range is generally used when the patient reports an age range when the procedure was performed, such as sometime between 20-25 years old.  dateTime supports a range of precision due to some procedures being reported as past procedures that might not have millisecond precision while other procedures performed and documented during the encounter might have more precise UTC timestamps with timezone.
     */
    performedPeriod?: Period;
    /**
     * When the procedure was performed
     * Estimated or actual date, date-time, period, or age when 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.
     * Age is generally used when the patient reports an age at which the procedure was performed. Range is generally used when the patient reports an age range when the procedure was performed, such as sometime between 20-25 years old.  dateTime supports a range of precision due to some procedures being reported as past procedures that might not have millisecond precision while other procedures performed and documented during the encounter might have more precise UTC timestamps with timezone.
     */
    performedString?: string;
    /**
     * Extension for performedString
     **/
    _performedString?: Element;
    /**
     * When the procedure was performed
     * Estimated or actual date, date-time, period, or age when 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.
     * Age is generally used when the patient reports an age at which the procedure was performed. Range is generally used when the patient reports an age range when the procedure was performed, such as sometime between 20-25 years old.  dateTime supports a range of precision due to some procedures being reported as past procedures that might not have millisecond precision while other procedures performed and documented during the encounter might have more precise UTC timestamps with timezone.
     */
    performedAge?: Age;
    /**
     * When the procedure was performed
     * Estimated or actual date, date-time, period, or age when 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.
     * Age is generally used when the patient reports an age at which the procedure was performed. Range is generally used when the patient reports an age range when the procedure was performed, such as sometime between 20-25 years old.  dateTime supports a range of precision due to some procedures being reported as past procedures that might not have millisecond precision while other procedures performed and documented during the encounter might have more precise UTC timestamps with timezone.
     */
    performedRange?: Range;
    /**
     * Who recorded the procedure
     * Individual who recorded the record and takes responsibility for its content.
     */
    recorder?: Reference;
    /**
     * Person who asserts this procedure
     * Individual who is making the procedure statement.
     */
    asserter?: Reference;
    /**
     * The people who performed the procedure
     * Limited to "real" people rather than equipment.
     */
    performer?: ProcedurePerformer[];
    /**
     * Where the procedure happened
     * The location where the procedure actually happened.  E.g. a newborn at home, a tracheostomy at a restaurant.
     */
    location?: Reference;
    /**
     * Coded reason procedure performed
     * The coded reason why the procedure was performed. This may be a coded entity of some type, or may simply be present as text.
     * Use Procedure.reasonCode when a code sufficiently describes the reason.  Use Procedure.reasonReference when referencing a resource, which allows more information to be conveyed, such as onset date. Procedure.reasonCode and Procedure.reasonReference are not meant to be duplicative.  For a single reason, either Procedure.reasonCode or Procedure.reasonReference can be used.  Procedure.reasonCode may be a summary code, or Procedure.reasonReference may be used to reference a very precise definition of the reason using Condition | Observation | Procedure | DiagnosticReport | DocumentReference.  Both Procedure.reasonCode and Procedure.reasonReference can be used if they are describing different reasons for the procedure.
     */
    reasonCode?: CodeableConcept[];
    /**
     * The justification that the procedure was performed
     * The justification of why the procedure was performed.
     * It is possible for a procedure to be a reason (such as C-Section) for another procedure (such as an epidural). Other examples include endoscopy for dilatation and biopsy (a combination of diagnostic and therapeutic use).
Use Procedure.reasonCode when a code sufficiently describes the reason.  Use Procedure.reasonReference when referencing a resource, which allows more information to be conveyed, such as onset date. Procedure.reasonCode and Procedure.reasonReference are not meant to be duplicative.  For a single reason, either Procedure.reasonCode or Procedure.reasonReference can be used.  Procedure.reasonCode may be a summary code, or Procedure.reasonReference may be used to reference a very precise definition of the reason using Condition | Observation | Procedure | DiagnosticReport | DocumentReference.  Both Procedure.reasonCode and Procedure.reasonReference can be used if they are describing different reasons for the procedure.
     */
    reasonReference?: Reference[];
    /**
     * Target body sites
     * Detailed and structured anatomical location information. Multiple locations are allowed - e.g. multiple punch biopsies of a lesion.
     * If the use case requires attributes from the BodySite resource (e.g. to identify and track separately) then use the standard extension [procedure-targetbodystructure](extension-procedure-targetbodystructure.html).
     */
    bodySite?: CodeableConcept[];
    /**
     * The result of procedure
     * The outcome of the procedure - did it resolve the reasons for the procedure being performed?
     * If outcome contains narrative text only, it can be captured using the CodeableConcept.text.
     */
    outcome?: CodeableConcept;
    /**
     * Any report resulting from the procedure
     * This could be a histology result, pathology report, surgical report, etc.
     * There could potentially be multiple reports - e.g. if this was a procedure which took multiple biopsies resulting in a number of anatomical pathology reports.
     */
    report?: Reference[];
    /**
     * Complication following the procedure
     * 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.
     * If complications are only expressed by the narrative text, they can be captured using the CodeableConcept.text.
     */
    complication?: CodeableConcept[];
    /**
     * A condition that is a result of the procedure
     * Any complications that occurred during the procedure, or in the immediate post-performance period.
     */
    complicationDetail?: Reference[];
    /**
     * Instructions for follow up
     * If the procedure required specific follow up - e.g. removal of sutures. The follow up may be represented as a simple note or could potentially be more complex, in which case the CarePlan resource can be used.
     */
    followUp?: CodeableConcept[];
    /**
     * Additional information about the procedure
     * Any other notes and comments about the procedure.
     */
    note?: Annotation[];
    /**
     * Manipulated, implanted, or removed device
     * 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.
     */
    focalDevice?: ProcedureFocalDevice[];
    /**
     * Items used during procedure
     * Identifies medications, devices and any other substance used as part of the procedure.
     * For devices actually implanted or removed, use Procedure.device.
     */
    usedReference?: Reference[];
    /**
     * Coded items used during the procedure
     * Identifies coded items that were used as part of the procedure.
     * For devices actually implanted or removed, use Procedure.device.
     */
    usedCode?: CodeableConcept[];
    /**
     * preparation | in-progress | not-done | on-hold | stopped | completed | entered-in-error | unknown
     * A code specifying the state of the procedure. Generally, this will be the in-progress or completed state.
     * The "unknown" code is not to be used to convey other statuses.  The "unknown" code should be used when one of the statuses applies, but the authoring system doesn't know the current state of the procedure.

This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
     */
    status: ProcedureStatus;
}
/**
 * Actor involved
 * An actor taking a role in an activity  for which it can be assigned some degree of responsibility for the activity taking place.
 * Several agents may be associated (i.e. has some responsibility for an activity) with an activity and vice-versa.
 */
export interface ProvenanceAgent extends BackboneElement {
    /**
     * How the agent participated
     * The participation the agent had with respect to the activity.
     * For example: author, performer, enterer, attester, etc.
     */
    type?: CodeableConcept;
    /**
     * What the agents role was
     * The function of the agent with respect to the activity. The security role enabling the agent with respect to the activity.
     * For example: doctor, nurse, clerk, etc.
     */
    role?: CodeableConcept[];
    /**
     * Who participated
     * The individual, device or organization that participated in the event.
     * whoIdentity should be used when the agent is not a Resource type.
     */
    who: Reference;
    /**
     * Who the agent is representing
     * The individual, device, or organization for whom the change was made.
     * onBehalfOfIdentity should be used when the agent is not a Resource type.
     */
    onBehalfOf?: Reference;
}
/**
 * An entity used in this activity
 * An entity used in this activity.
 */
export interface ProvenanceEntity extends BackboneElement {
    /**
     * Identity of entity
     * Identity of the  Entity used. May be a logical or physical uri and maybe absolute or relative.
     * whatIdentity should be used for entities that are not a Resource type.
     */
    what: Reference;
    /**
     * Entity is attributed to this agent
     * 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.
     * A usecase where one Provenance.entity.agent is used where the Entity that was used in the creation/updating of the Target, is not in the context of the same custodianship as the Target, and thus the meaning of Provenance.entity.agent is to say that the entity referenced is managed elsewhere and that this Agent provided access to it.  This would be similar to where the Entity being referenced is managed outside FHIR, such as through HL7 v2, v3, or XDS. This might be where the Entity being referenced is managed in another FHIR resource server. Thus it explains the Provenance of that Entity's use in the context of this Provenance activity.
     */
    agent?: ProvenanceAgent[];
    /**
     * derivation | revision | quotation | source | removal
     * How the entity was used during the activity.
     */
    role: ProvenanceEntityRole;
}
/**
 * Who, What, When for a set of resources
 * 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.
 * Some parties may be duplicated between the target resource and its provenance.  For instance, the prescriber is usually (but not always) the author of the prescription resource. This resource is defined with close consideration for W3C Provenance.
 */
export interface Provenance extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Provenance';
    /**
     * Target Reference(s) (usually version specific)
     * 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.
     * Target references are usually version specific, but might not be, if a version has not been assigned or if the provenance information is part of the set of resources being maintained (i.e. a document). When using the RESTful API, the identity of the resource might not be known (especially not the version specific one); the client may either submit the resource first, and then the provenance, or it may submit both using a single transaction. See the notes on transaction for further discussion.
     */
    target: Reference[];
    /**
     * When the activity occurred
     * The period during which the activity occurred.
     * The period can be a little arbitrary; where possible, the time should correspond to human assessment of the activity time.
     */
    occurredPeriod?: Period;
    /**
     * When the activity occurred
     * The period during which the activity occurred.
     * The period can be a little arbitrary; where possible, the time should correspond to human assessment of the activity time.
     */
    occurredDateTime?: dateTime;
    /**
     * Extension for occurredDateTime
     **/
    _occurredDateTime?: Element;
    /**
     * When the activity was recorded / updated
     * The instant of time at which the activity was recorded.
     * This can be a little different from the time stamp on the resource if there is a delay between recording the event and updating the provenance and target resource.
     */
    recorded: instant;
    /**
     * Extension for recorded
     **/
    _recorded?: Element;
    /**
     * Policy or plan the activity was defined by
     * 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.
     * For example: Where an OAuth token authorizes, the unique identifier from the OAuth token is placed into the policy element Where a policy engine (e.g. XACML) holds policy logic, the unique policy identifier is placed into the policy element.
     */
    policy?: uri[];
    /**
     * Extension for policy
     **/
    _policy?: Element[];
    /**
     * Where the activity occurred, if relevant
     * Where the activity occurred, if relevant.
     */
    location?: Reference;
    /**
     * Reason the activity is occurring
     * The reason that the activity was taking place.
     */
    reason?: CodeableConcept[];
    /**
     * Activity that occurred
     * 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.
     */
    activity?: CodeableConcept;
    /**
     * Actor involved
     * An actor taking a role in an activity  for which it can be assigned some degree of responsibility for the activity taking place.
     * Several agents may be associated (i.e. has some responsibility for an activity) with an activity and vice-versa.
     */
    agent: ProvenanceAgent[];
    /**
     * An entity used in this activity
     * An entity used in this activity.
     */
    entity?: ProvenanceEntity[];
    /**
     * Signature on target
     * A digital signature on the target Reference(s). The signer should match a Provenance.agent. The purpose of the signature is indicated.
     */
    signature?: Signature[];
}
/**
 * Only allow data when
 * A constraint indicating that this item should only be enabled (displayed/allow answers to be captured) when the specified condition is true.
 * If multiple repetitions of this extension are present, the item should be enabled when the condition for *any* of the repetitions is true.  I.e. treat "enableWhen"s as being joined by an "or" clause.  This element is a modifier because if enableWhen is present for an item, "required" is ignored unless one of the enableWhen conditions is met. When an item is disabled, all of its descendants are disabled, regardless of what their own enableWhen logic might evaluate to.
 */
export interface QuestionnaireItemEnableWhen extends BackboneElement {
    /**
     * Question that determines whether item is enabled
     * The linkId for the question whose answer (or lack of answer) governs whether this item is enabled.
     * If multiple question occurrences are present for the same question (same linkId), then this refers to the nearest question occurrence reachable by tracing first the "ancestor" axis and then the "preceding" axis and then the "following" axis.
     */
    question: string;
    /**
     * Extension for question
     **/
    _question?: Element;
    /**
     * Value for question comparison based on operator
     * A value that the referenced question is tested using the specified operator in order for the item to be enabled.
     */
    answerBoolean?: boolean;
    /**
     * Extension for answerBoolean
     **/
    _answerBoolean?: Element;
    /**
     * Value for question comparison based on operator
     * A value that the referenced question is tested using the specified operator in order for the item to be enabled.
     */
    answerDecimal?: decimal;
    /**
     * Extension for answerDecimal
     **/
    _answerDecimal?: Element;
    /**
     * Value for question comparison based on operator
     * A value that the referenced question is tested using the specified operator in order for the item to be enabled.
     */
    answerInteger?: integer;
    /**
     * Extension for answerInteger
     **/
    _answerInteger?: Element;
    /**
     * Value for question comparison based on operator
     * A value that the referenced question is tested using the specified operator in order for the item to be enabled.
     */
    answerDate?: date;
    /**
     * Extension for answerDate
     **/
    _answerDate?: Element;
    /**
     * Value for question comparison based on operator
     * A value that the referenced question is tested using the specified operator in order for the item to be enabled.
     */
    answerDateTime?: dateTime;
    /**
     * Extension for answerDateTime
     **/
    _answerDateTime?: Element;
    /**
     * Value for question comparison based on operator
     * A value that the referenced question is tested using the specified operator in order for the item to be enabled.
     */
    answerTime?: time;
    /**
     * Extension for answerTime
     **/
    _answerTime?: Element;
    /**
     * Value for question comparison based on operator
     * A value that the referenced question is tested using the specified operator in order for the item to be enabled.
     */
    answerString?: string;
    /**
     * Extension for answerString
     **/
    _answerString?: Element;
    /**
     * Value for question comparison based on operator
     * A value that the referenced question is tested using the specified operator in order for the item to be enabled.
     */
    answerCoding?: Coding;
    /**
     * Value for question comparison based on operator
     * A value that the referenced question is tested using the specified operator in order for the item to be enabled.
     */
    answerQuantity?: Quantity;
    /**
     * Value for question comparison based on operator
     * A value that the referenced question is tested using the specified operator in order for the item to be enabled.
     */
    answerReference?: Reference;
    /**
     * exists | = | != | > | < | >= | <=
     * Specifies the criteria by which the question is enabled.
     */
    operator: QuestionnaireItemOperator;
}
/**
 * Permitted answer
 * One of the permitted answers for a "choice" or "open-choice" question.
 * This element can be used when the value set machinery of answerValueSet is deemed too cumbersome or when there's a need to capture possible answers that are not codes.
 */
export interface QuestionnaireItemAnswerOption extends BackboneElement {
    /**
     * Answer value
     * A potential answer that's allowed as the answer to this question.
     * The data type of the value must agree with the item.type.
     */
    valueInteger?: integer;
    /**
     * Extension for valueInteger
     **/
    _valueInteger?: Element;
    /**
     * Answer value
     * A potential answer that's allowed as the answer to this question.
     * The data type of the value must agree with the item.type.
     */
    valueDate?: date;
    /**
     * Extension for valueDate
     **/
    _valueDate?: Element;
    /**
     * Answer value
     * A potential answer that's allowed as the answer to this question.
     * The data type of the value must agree with the item.type.
     */
    valueTime?: time;
    /**
     * Extension for valueTime
     **/
    _valueTime?: Element;
    /**
     * Answer value
     * A potential answer that's allowed as the answer to this question.
     * The data type of the value must agree with the item.type.
     */
    valueString?: string;
    /**
     * Extension for valueString
     **/
    _valueString?: Element;
    /**
     * Answer value
     * A potential answer that's allowed as the answer to this question.
     * The data type of the value must agree with the item.type.
     */
    valueCoding?: Coding;
    /**
     * Answer value
     * A potential answer that's allowed as the answer to this question.
     * The data type of the value must agree with the item.type.
     */
    valueReference?: Reference;
    /**
     * Whether option is selected by default
     * Indicates whether the answer value is selected when the list of possible answers is initially shown.
     * Use this instead of initial[v] if answerValueSet is present.
     */
    initialSelected?: boolean;
    /**
     * Extension for initialSelected
     **/
    _initialSelected?: Element;
}
/**
 * Initial value(s) when item is first rendered
 * One or more values that should be pre-populated in the answer when initially rendering the questionnaire for user input.
 * The user is allowed to change the value and override the default (unless marked as read-only). If the user doesn't change the value, then this initial value will be persisted when the QuestionnaireResponse is initially created.  Note that initial values can influence results.  The data type of initial[x] must agree with the item.type, and only repeating items can have more then one initial value.
 */
export interface QuestionnaireItemInitial extends BackboneElement {
    /**
     * Actual value for initializing the question
     * The actual value to for an initial answer.
     * The type of the initial value must be consistent with the type of the item.
     */
    valueBoolean?: boolean;
    /**
     * Extension for valueBoolean
     **/
    _valueBoolean?: Element;
    /**
     * Actual value for initializing the question
     * The actual value to for an initial answer.
     * The type of the initial value must be consistent with the type of the item.
     */
    valueDecimal?: decimal;
    /**
     * Extension for valueDecimal
     **/
    _valueDecimal?: Element;
    /**
     * Actual value for initializing the question
     * The actual value to for an initial answer.
     * The type of the initial value must be consistent with the type of the item.
     */
    valueInteger?: integer;
    /**
     * Extension for valueInteger
     **/
    _valueInteger?: Element;
    /**
     * Actual value for initializing the question
     * The actual value to for an initial answer.
     * The type of the initial value must be consistent with the type of the item.
     */
    valueDate?: date;
    /**
     * Extension for valueDate
     **/
    _valueDate?: Element;
    /**
     * Actual value for initializing the question
     * The actual value to for an initial answer.
     * The type of the initial value must be consistent with the type of the item.
     */
    valueDateTime?: dateTime;
    /**
     * Extension for valueDateTime
     **/
    _valueDateTime?: Element;
    /**
     * Actual value for initializing the question
     * The actual value to for an initial answer.
     * The type of the initial value must be consistent with the type of the item.
     */
    valueTime?: time;
    /**
     * Extension for valueTime
     **/
    _valueTime?: Element;
    /**
     * Actual value for initializing the question
     * The actual value to for an initial answer.
     * The type of the initial value must be consistent with the type of the item.
     */
    valueString?: string;
    /**
     * Extension for valueString
     **/
    _valueString?: Element;
    /**
     * Actual value for initializing the question
     * The actual value to for an initial answer.
     * The type of the initial value must be consistent with the type of the item.
     */
    valueUri?: uri;
    /**
     * Extension for valueUri
     **/
    _valueUri?: Element;
    /**
     * Actual value for initializing the question
     * The actual value to for an initial answer.
     * The type of the initial value must be consistent with the type of the item.
     */
    valueAttachment?: Attachment;
    /**
     * Actual value for initializing the question
     * The actual value to for an initial answer.
     * The type of the initial value must be consistent with the type of the item.
     */
    valueCoding?: Coding;
    /**
     * Actual value for initializing the question
     * The actual value to for an initial answer.
     * The type of the initial value must be consistent with the type of the item.
     */
    valueQuantity?: Quantity;
    /**
     * Actual value for initializing the question
     * The actual value to for an initial answer.
     * The type of the initial value must be consistent with the type of the item.
     */
    valueReference?: Reference;
}
/**
 * Questions and sections within the Questionnaire
 * A particular question, question grouping or display text that is part of the questionnaire.
 * The content of the questionnaire is constructed from an ordered, hierarchical collection of items.
 */
export interface QuestionnaireItem extends BackboneElement {
    /**
     * Unique id for item in questionnaire
     * An identifier that is unique within the Questionnaire allowing linkage to the equivalent item in a QuestionnaireResponse resource.
     * This ''can'' be a meaningful identifier (e.g. a LOINC code) but is not intended to have any meaning.  GUIDs or sequential numbers are appropriate here.
     */
    linkId: string;
    /**
     * Extension for linkId
     **/
    _linkId?: Element;
    /**
     * ElementDefinition - details for the item
     * This element is a URI that refers to an [ElementDefinition](elementdefinition.html) that provides information about this item, including information that might otherwise be included in the instance of the Questionnaire resource. A detailed description of the construction of the URI is shown in Comments, below. If this element is present then the following element values MAY be derived from the Element Definition if the corresponding elements of this Questionnaire resource instance have no value:

* code (ElementDefinition.code)
* type (ElementDefinition.type)
* required (ElementDefinition.min)
* repeats (ElementDefinition.max)
* maxLength (ElementDefinition.maxLength)
* answerValueSet (ElementDefinition.binding)
* options (ElementDefinition.binding).
     * The uri refers to an ElementDefinition in a [StructureDefinition](structuredefinition.html#) and always starts with the [canonical URL](references.html#canonical) for the target resource. When referring to a StructureDefinition, a fragment identifier is used to specify the element definition by its id [Element.id](element-definitions.html#Element.id). E.g. http://hl7.org/fhir/StructureDefinition/Observation#Observation.value[x]. In the absence of a fragment identifier, the first/root element definition in the target is the matching element definition.
     */
    definition?: uri;
    /**
     * Extension for definition
     **/
    _definition?: Element;
    /**
     * Corresponding concept for this item in a terminology
     * A terminology code that corresponds to this group or question (e.g. a code from LOINC, which defines many questions and answers).
     * The value may come from the ElementDefinition referred to by .definition.
     */
    code?: Coding[];
    /**
     * E.g. "1(a)", "2.5.3"
     * 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.
     * These are generally unique within a questionnaire, though this is not guaranteed. Some questionnaires may have multiple questions with the same label with logic to control which gets exposed.  Typically, these won't be used for "display" items, though such use is not prohibited.  Systems SHOULD NOT generate their own prefixes if prefixes are defined for any items within a Questionnaire.
     */
    prefix?: string;
    /**
     * Extension for prefix
     **/
    _prefix?: Element;
    /**
     * Primary text for the item
     * The name of a section, the text of a question or text content for a display item.
     * When using this element to represent the name of a section, use group type item and also make sure to limit the text element to a short string suitable for display as a section heading.  Group item instructions should be included as a display type item within the group.
     */
    text?: string;
    /**
     * Extension for text
     **/
    _text?: Element;
    /**
     * Only allow data when
     * A constraint indicating that this item should only be enabled (displayed/allow answers to be captured) when the specified condition is true.
     * If multiple repetitions of this extension are present, the item should be enabled when the condition for *any* of the repetitions is true.  I.e. treat "enableWhen"s as being joined by an "or" clause.  This element is a modifier because if enableWhen is present for an item, "required" is ignored unless one of the enableWhen conditions is met. When an item is disabled, all of its descendants are disabled, regardless of what their own enableWhen logic might evaluate to.
     */
    enableWhen?: QuestionnaireItemEnableWhen[];
    /**
     * Whether the item must be included in data results
     * 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.
     * Questionnaire.item.required only has meaning for elements that are conditionally enabled with enableWhen if the condition evaluates to true.  If an item that contains other items is marked as required, that does not automatically make the contained elements required (though required groups must contain at least one child element). The value may come from the ElementDefinition referred to by .definition.
     */
    required?: boolean;
    /**
     * Extension for required
     **/
    _required?: Element;
    /**
     * Whether the item may repeat
     * An indication, if true, that the item may occur multiple times in the response, collecting multiple answers for questions or multiple sets of answers for groups.
     * If a question is marked as repeats=true, then multiple answers can be provided for the question in the corresponding QuestionnaireResponse.  When rendering the questionnaire, it is up to the rendering software whether to render the question text for each answer repetition (i.e. "repeat the question") or to simply allow entry/selection of multiple answers for the question (repeat the answers).  Which is most appropriate visually may depend on the type of answer as well as whether there are nested items.

The resulting QuestionnaireResponse will be populated the same way regardless of rendering - one 'question' item with multiple answer values.

 The value may come from the ElementDefinition referred to by .definition.
     */
    repeats?: boolean;
    /**
     * Extension for repeats
     **/
    _repeats?: Element;
    /**
     * Don't allow human editing
     * An indication, when true, that the value cannot be changed by a human respondent to the Questionnaire.
     * The value of readOnly elements can be established by asserting  extensions for defaultValues, linkages that support pre-population and/or extensions that support calculation based on other answers.
     */
    readOnly?: boolean;
    /**
     * Extension for readOnly
     **/
    _readOnly?: Element;
    /**
     * No more than this many characters
     * The maximum number of characters that are permitted in the answer to be considered a "valid" QuestionnaireResponse.
     * For base64binary, reflects the number of characters representing the encoded data, not the number of bytes of the binary data. The value may come from the ElementDefinition referred to by .definition.
     */
    maxLength?: integer;
    /**
     * Extension for maxLength
     **/
    _maxLength?: Element;
    /**
     * Valueset containing permitted answers
     * A reference to a value set containing a list of codes representing permitted answers for a "choice" or "open-choice" question.
     * LOINC defines many useful value sets for questionnaire responses. See [LOINC Answer Lists](loinc.html#alist). The value may come from the ElementDefinition referred to by .definition.
     */
    answerValueSet?: canonical;
    /**
     * Extension for answerValueSet
     **/
    _answerValueSet?: Element;
    /**
     * Permitted answer
     * One of the permitted answers for a "choice" or "open-choice" question.
     * This element can be used when the value set machinery of answerValueSet is deemed too cumbersome or when there's a need to capture possible answers that are not codes.
     */
    answerOption?: QuestionnaireItemAnswerOption[];
    /**
     * Initial value(s) when item is first rendered
     * One or more values that should be pre-populated in the answer when initially rendering the questionnaire for user input.
     * The user is allowed to change the value and override the default (unless marked as read-only). If the user doesn't change the value, then this initial value will be persisted when the QuestionnaireResponse is initially created.  Note that initial values can influence results.  The data type of initial[x] must agree with the item.type, and only repeating items can have more then one initial value.
     */
    initial?: QuestionnaireItemInitial[];
    /**
     * Nested questionnaire items
     * Text, questions and other groups to be nested beneath a question or group.
     * There is no specified limit to the depth of nesting.  However, Questionnaire authors are encouraged to consider the impact on the user and user interface of overly deep nesting.
     */
    item?: QuestionnaireItem[];
    /**
     * all | any
     * Controls how multiple enableWhen values are interpreted -  whether all or any must be true.
     * This element must be specified if more than one enableWhen value is provided.
     */
    enableBehavior?: QuestionnaireEnableWhenBehavior;
    /**
     * group | display | boolean | decimal | integer | date | dateTime +
     * 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.).
     * Additional constraints on the type of answer can be conveyed by extensions. The value may come from the ElementDefinition referred to by .definition.
     */
    type: QuestionnaireItemType;
}
/**
 * A structured set of questions
 * 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.
 */
export interface Questionnaire extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Questionnaire';
    /**
     * Canonical identifier for this questionnaire, represented as a URI (globally unique)
     * An absolute URI that is used to identify this questionnaire when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this questionnaire is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the questionnaire is stored on different servers.
     * The name of the referenced questionnaire can be conveyed using the http://hl7.org/fhir/StructureDefinition/display extension.
     */
    url?: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Additional identifier for the questionnaire
     * 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.
     * Typically, this is used for identifiers that can go in an HL7 V3 II (instance identifier) data type, and can then identify this questionnaire outside of FHIR, where it is not possible to use the logical URI.
     */
    identifier?: Identifier[];
    /**
     * Business version of the questionnaire
     * 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.
     * There may be different questionnaire instances that have the same identifier but different versions.  The version can be appended to the url in a reference to allow a reference to a particular business version of the questionnaire with the format [url]|[version].
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
    /**
     * Name for this questionnaire (computer friendly)
     * 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.
     * The name is not expected to be globally unique. The name should be a simple alphanumeric type name to ensure that it is machine-processing friendly.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Name for this questionnaire (human friendly)
     * A short, descriptive, user-friendly title for the questionnaire.
     * This name does not need to be machine-processing friendly and may contain punctuation, white-space, etc.
     */
    title?: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * Instantiates protocol or definition
     * The URL of a Questionnaire that this Questionnaire is based on.
     */
    derivedFrom?: canonical[];
    /**
     * Extension for derivedFrom
     **/
    _derivedFrom?: Element[];
    /**
     * For testing purposes, not real usage
     * 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.
     * Allows filtering of questionnaires that are appropriate for use versus not.
     */
    experimental?: boolean;
    /**
     * Extension for experimental
     **/
    _experimental?: Element;
    /**
     * Resource that can be subject of QuestionnaireResponse
     * The types of subjects that can be the subject of responses created for the questionnaire.
     * If none are specified, then the subject is unlimited.
     */
    subjectType?: code[];
    /**
     * Extension for subjectType
     **/
    _subjectType?: Element[];
    /**
     * Date last changed
     * The date  (and optionally time) when the questionnaire was published. The date must change 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.
     * Note that this is not the same as the resource last-modified-date, since the resource may be a secondary representation of the questionnaire. Additional specific dates may be added as extensions or be found by consulting Provenances associated with past versions of the resource.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Name of the publisher (organization or individual)
     * The name of the organization or individual that published the questionnaire.
     * Usually an organization but may be an individual. The publisher (or steward) of the questionnaire is the organization or individual primarily responsible for the maintenance and upkeep of the questionnaire. This is not necessarily the same individual or organization that developed and initially authored the content. The publisher is the primary point of contact for questions or issues with the questionnaire. This item SHOULD be populated unless the information is available from context.
     */
    publisher?: string;
    /**
     * Extension for publisher
     **/
    _publisher?: Element;
    /**
     * Contact details for the publisher
     * Contact details to assist a user in finding and communicating with the publisher.
     * May be a web site, an email address, a telephone number, etc.
     */
    contact?: ContactDetail[];
    /**
     * Natural language description of the questionnaire
     * A free text natural language description of the questionnaire from a consumer's perspective.
     * This description can be used to capture details such as why the questionnaire was built, comments about misuse, instructions for clinical use and interpretation, literature references, examples from the paper world, etc. It is not a rendering of the questionnaire as conveyed in the 'text' field of the resource itself. This item SHOULD be populated unless the information is available from context (e.g. the language of the questionnaire is presumed to be the predominant language in the place the questionnaire was created).
     */
    description?: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * The context that the content is intended to support
     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate questionnaire instances.
     * When multiple useContexts are specified, there is no expectation that all or any of the contexts apply.
     */
    useContext?: UsageContext[];
    /**
     * Intended jurisdiction for questionnaire (if applicable)
     * A legal or geographic region in which the questionnaire is intended to be used.
     * It may be possible for the questionnaire to be used in jurisdictions other than those for which it was originally designed or intended.
     */
    jurisdiction?: CodeableConcept[];
    /**
     * Why this questionnaire is defined
     * Explanation of why this questionnaire is needed and why it has been designed as it has.
     * This element does not describe the usage of the questionnaire. Instead, it provides traceability of ''why'' the resource is either needed or ''why'' it is defined as it is.  This may be used to point to source materials or specifications that drove the structure of this questionnaire.
     */
    purpose?: markdown;
    /**
     * Extension for purpose
     **/
    _purpose?: Element;
    /**
     * Use and/or publishing restrictions
     * 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.
     */
    copyright?: markdown;
    /**
     * Extension for copyright
     **/
    _copyright?: Element;
    /**
     * When the questionnaire was approved by publisher
     * The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
     * The 'date' element may be more recent than the approval date because of minor changes or editorial corrections.
     */
    approvalDate?: date;
    /**
     * Extension for approvalDate
     **/
    _approvalDate?: Element;
    /**
     * When the questionnaire was last reviewed
     * The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.
     * If specified, this date follows the original approval date.
     */
    lastReviewDate?: date;
    /**
     * Extension for lastReviewDate
     **/
    _lastReviewDate?: Element;
    /**
     * When the questionnaire is expected to be used
     * The period during which the questionnaire content was or is planned to be in active use.
     * The effective period for a questionnaire  determines when the content is applicable for usage and is independent of publication and review dates. For example, a measure intended to be used for the year 2016 might be published in 2015.
     */
    effectivePeriod?: Period;
    /**
     * Concept that represents the overall questionnaire
     * An identifier for this question or group of questions in a particular terminology such as LOINC.
     */
    code?: Coding[];
    /**
     * Questions and sections within the Questionnaire
     * A particular question, question grouping or display text that is part of the questionnaire.
     * The content of the questionnaire is constructed from an ordered, hierarchical collection of items.
     */
    item?: QuestionnaireItem[];
    /**
     * draft | active | retired | unknown
     * The status of this questionnaire. Enables tracking the life-cycle of the content.
     * Allows filtering of questionnaires that are appropriate for use versus not.
     */
    status: QuestionnairePublicationStatus;
}
/**
 * The response(s) to the question
 * The respondent's answer(s) to the question.
 * The value is nested because we cannot have a repeating structure that has variable type.
 */
export interface QuestionnaireResponseItemAnswer extends BackboneElement {
    /**
     * Single-valued answer to the question
     * The answer (or one of the answers) provided by the respondent to the question.
     * More complex structures (Attachment, Resource and Quantity) will typically be limited to electronic forms that can expose an appropriate user interface to capture the components and enforce the constraints of a complex data type.  Additional complex types can be introduced through extensions. Must match the datatype specified by Questionnaire.item.type in the corresponding Questionnaire.
     */
    valueBoolean?: boolean;
    /**
     * Extension for valueBoolean
     **/
    _valueBoolean?: Element;
    /**
     * Single-valued answer to the question
     * The answer (or one of the answers) provided by the respondent to the question.
     * More complex structures (Attachment, Resource and Quantity) will typically be limited to electronic forms that can expose an appropriate user interface to capture the components and enforce the constraints of a complex data type.  Additional complex types can be introduced through extensions. Must match the datatype specified by Questionnaire.item.type in the corresponding Questionnaire.
     */
    valueDecimal?: decimal;
    /**
     * Extension for valueDecimal
     **/
    _valueDecimal?: Element;
    /**
     * Single-valued answer to the question
     * The answer (or one of the answers) provided by the respondent to the question.
     * More complex structures (Attachment, Resource and Quantity) will typically be limited to electronic forms that can expose an appropriate user interface to capture the components and enforce the constraints of a complex data type.  Additional complex types can be introduced through extensions. Must match the datatype specified by Questionnaire.item.type in the corresponding Questionnaire.
     */
    valueInteger?: integer;
    /**
     * Extension for valueInteger
     **/
    _valueInteger?: Element;
    /**
     * Single-valued answer to the question
     * The answer (or one of the answers) provided by the respondent to the question.
     * More complex structures (Attachment, Resource and Quantity) will typically be limited to electronic forms that can expose an appropriate user interface to capture the components and enforce the constraints of a complex data type.  Additional complex types can be introduced through extensions. Must match the datatype specified by Questionnaire.item.type in the corresponding Questionnaire.
     */
    valueDate?: date;
    /**
     * Extension for valueDate
     **/
    _valueDate?: Element;
    /**
     * Single-valued answer to the question
     * The answer (or one of the answers) provided by the respondent to the question.
     * More complex structures (Attachment, Resource and Quantity) will typically be limited to electronic forms that can expose an appropriate user interface to capture the components and enforce the constraints of a complex data type.  Additional complex types can be introduced through extensions. Must match the datatype specified by Questionnaire.item.type in the corresponding Questionnaire.
     */
    valueDateTime?: dateTime;
    /**
     * Extension for valueDateTime
     **/
    _valueDateTime?: Element;
    /**
     * Single-valued answer to the question
     * The answer (or one of the answers) provided by the respondent to the question.
     * More complex structures (Attachment, Resource and Quantity) will typically be limited to electronic forms that can expose an appropriate user interface to capture the components and enforce the constraints of a complex data type.  Additional complex types can be introduced through extensions. Must match the datatype specified by Questionnaire.item.type in the corresponding Questionnaire.
     */
    valueTime?: time;
    /**
     * Extension for valueTime
     **/
    _valueTime?: Element;
    /**
     * Single-valued answer to the question
     * The answer (or one of the answers) provided by the respondent to the question.
     * More complex structures (Attachment, Resource and Quantity) will typically be limited to electronic forms that can expose an appropriate user interface to capture the components and enforce the constraints of a complex data type.  Additional complex types can be introduced through extensions. Must match the datatype specified by Questionnaire.item.type in the corresponding Questionnaire.
     */
    valueString?: string;
    /**
     * Extension for valueString
     **/
    _valueString?: Element;
    /**
     * Single-valued answer to the question
     * The answer (or one of the answers) provided by the respondent to the question.
     * More complex structures (Attachment, Resource and Quantity) will typically be limited to electronic forms that can expose an appropriate user interface to capture the components and enforce the constraints of a complex data type.  Additional complex types can be introduced through extensions. Must match the datatype specified by Questionnaire.item.type in the corresponding Questionnaire.
     */
    valueUri?: uri;
    /**
     * Extension for valueUri
     **/
    _valueUri?: Element;
    /**
     * Single-valued answer to the question
     * The answer (or one of the answers) provided by the respondent to the question.
     * More complex structures (Attachment, Resource and Quantity) will typically be limited to electronic forms that can expose an appropriate user interface to capture the components and enforce the constraints of a complex data type.  Additional complex types can be introduced through extensions. Must match the datatype specified by Questionnaire.item.type in the corresponding Questionnaire.
     */
    valueAttachment?: Attachment;
    /**
     * Single-valued answer to the question
     * The answer (or one of the answers) provided by the respondent to the question.
     * More complex structures (Attachment, Resource and Quantity) will typically be limited to electronic forms that can expose an appropriate user interface to capture the components and enforce the constraints of a complex data type.  Additional complex types can be introduced through extensions. Must match the datatype specified by Questionnaire.item.type in the corresponding Questionnaire.
     */
    valueCoding?: Coding;
    /**
     * Single-valued answer to the question
     * The answer (or one of the answers) provided by the respondent to the question.
     * More complex structures (Attachment, Resource and Quantity) will typically be limited to electronic forms that can expose an appropriate user interface to capture the components and enforce the constraints of a complex data type.  Additional complex types can be introduced through extensions. Must match the datatype specified by Questionnaire.item.type in the corresponding Questionnaire.
     */
    valueQuantity?: Quantity;
    /**
     * Single-valued answer to the question
     * The answer (or one of the answers) provided by the respondent to the question.
     * More complex structures (Attachment, Resource and Quantity) will typically be limited to electronic forms that can expose an appropriate user interface to capture the components and enforce the constraints of a complex data type.  Additional complex types can be introduced through extensions. Must match the datatype specified by Questionnaire.item.type in the corresponding Questionnaire.
     */
    valueReference?: Reference;
    /**
     * Nested groups and questions
     * Nested groups and/or questions found within this particular answer.
     */
    item?: QuestionnaireResponseItem[];
}
/**
 * Groups and questions
 * A group or question item from the original questionnaire for which answers are provided.
 * Groups cannot have answers and therefore must nest directly within item. When dealing with questions, nesting must occur within each answer because some questions may have multiple answers (and the nesting occurs for each answer).
 */
export interface QuestionnaireResponseItem extends BackboneElement {
    /**
     * Pointer to specific item from Questionnaire
     * The item from the Questionnaire that corresponds to this item in the QuestionnaireResponse resource.
     */
    linkId: string;
    /**
     * Extension for linkId
     **/
    _linkId?: Element;
    /**
     * ElementDefinition - details for the item
     * A reference to an [ElementDefinition](elementdefinition.html) that provides the details for the item.
     * The ElementDefinition must be in a [StructureDefinition](structuredefinition.html#), and must have a fragment identifier that identifies the specific data element by its id (Element.id). E.g. http://hl7.org/fhir/StructureDefinition/Observation#Observation.value[x].

There is no need for this element if the item pointed to by the linkId has a definition listed.
     */
    definition?: uri;
    /**
     * Extension for definition
     **/
    _definition?: Element;
    /**
     * Name for group or question text
     * Text that is displayed above the contents of the group or as the text of the question being answered.
     */
    text?: string;
    /**
     * Extension for text
     **/
    _text?: Element;
    /**
     * The response(s) to the question
     * The respondent's answer(s) to the question.
     * The value is nested because we cannot have a repeating structure that has variable type.
     */
    answer?: QuestionnaireResponseItemAnswer[];
    /**
     * Nested questionnaire response items
     * Questions or sub-groups nested beneath a question or group.
     */
    item?: QuestionnaireResponseItem[];
}
/**
 * A structured set of questions and their answers
 * 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.
 * The QuestionnaireResponse contains enough information about the questions asked and their organization that it can be interpreted somewhat independently from the Questionnaire it is based on.  I.e. You don't need access to the Questionnaire in order to extract basic information from a QuestionnaireResponse.
 */
export interface QuestionnaireResponse extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'QuestionnaireResponse';
    /**
     * Unique id for this set of answers
     * A business identifier assigned to a particular completed (or partially completed) questionnaire.
     */
    identifier?: Identifier;
    /**
     * Request fulfilled by this QuestionnaireResponse
     * The order, proposal or plan that is fulfilled in whole or in part by this QuestionnaireResponse.  For example, a ServiceRequest seeking an intake assessment or a decision support recommendation to assess for post-partum depression.
     */
    basedOn?: Reference[];
    /**
     * Part of this action
     * 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.
     * Composition of questionnaire responses will be handled by the parent questionnaire having answers that reference the child questionnaire.  For relationships to referrals, and other types of requests, use basedOn.
     */
    partOf?: Reference[];
    /**
     * Form being answered
     * The Questionnaire that defines and organizes the questions for which answers are being provided.
     * If a QuestionnaireResponse references a Questionnaire, then the QuestionnaireResponse structure must be consistent with the Questionnaire (i.e. questions must be organized into the same groups, nested questions must still be nested, etc.).
     */
    questionnaire?: canonical;
    /**
     * Extension for questionnaire
     **/
    _questionnaire?: Element;
    /**
     * The subject of the questions
     * 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.
     * If the Questionnaire declared a subjectType, the resource pointed to by this element must be an instance of one of the listed types.
     */
    subject?: Reference;
    /**
     * Encounter created as part of
     * The Encounter during which this questionnaire response was created or to which the creation of this record is tightly associated.
     * This will typically be the encounter the event occurred within, but some activities may be initiated prior to or after the official completion of an encounter but still be tied to the context of the encounter. A questionnaire that was initiated during an encounter but not fully completed during the encounter would still generally be associated with the encounter.
     */
    encounter?: Reference;
    /**
     * Date the answers were gathered
     * The date and/or time that this set of answers were last changed.
     * May be different from the lastUpdateTime of the resource itself, because that reflects when the data was known to the server, not when the data was captured.

This element is optional to allow for systems that might not know the value, however it SHOULD be populated if possible.
     */
    authored?: dateTime;
    /**
     * Extension for authored
     **/
    _authored?: Element;
    /**
     * Person who received and recorded the answers
     * Person who received the answers to the questions in the QuestionnaireResponse and recorded them in the system.
     * Mapping a subject's answers to multiple choice options and determining what to put in the textual answer is a matter of interpretation.  Authoring by device would indicate that some portion of the questionnaire had been auto-populated.
     */
    author?: Reference;
    /**
     * The person who answered the questions
     * The person who answered the questions about the subject.
     * If not specified, no inference can be made about who provided the data.
     */
    source?: Reference;
    /**
     * Groups and questions
     * A group or question item from the original questionnaire for which answers are provided.
     * Groups cannot have answers and therefore must nest directly within item. When dealing with questions, nesting must occur within each answer because some questions may have multiple answers (and the nesting occurs for each answer).
     */
    item?: QuestionnaireResponseItem[];
    /**
     * in-progress | completed | amended | entered-in-error | stopped
     * The position of the questionnaire response within its overall lifecycle.
     * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
     */
    status: QuestionnaireResponseStatus;
}
/**
 * A language which may be used to communicate with about the patient's health
 * A language which may be used to communicate with about the patient's health.
 * If no language is specified, this *implies* that the default local language is spoken.  If you need to convey proficiency for multiple modes, then you need multiple RelatedPerson.Communication associations.   If the RelatedPerson does not speak the default local language, then the Interpreter Required Standard can be used to explicitly declare that an interpreter is required.
 */
export interface RelatedPersonCommunication extends BackboneElement {
    /**
     * The language which can be used to communicate with the patient about his or her health
     * 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.
     * The structure aa-BB with this exact casing is one the most widely used notations for locale. However not all systems actually code this but instead have it as free text. Hence CodeableConcept instead of code as the data type.
     */
    language: CodeableConcept;
    /**
     * Language preference indicator
     * Indicates whether or not the patient prefers this language (over other languages he masters up a certain level).
     * This language is specifically identified for communicating healthcare information.
     */
    preferred?: boolean;
    /**
     * Extension for preferred
     **/
    _preferred?: Element;
}
/**
 * A person that is related to a patient, but who is not a direct target of care
 * 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.
 */
export interface RelatedPerson extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'RelatedPerson';
    /**
     * A human identifier for this person
     * Identifier for a person within a particular scope.
     */
    identifier?: Identifier[];
    /**
     * Whether this related person's record is in active use
     * Whether this related person record is in active use.
     * This element is labeled as a modifier because it may be used to mark that the resource was created in error.
     */
    active?: boolean;
    /**
     * Extension for active
     **/
    _active?: Element;
    /**
     * The patient this person is related to
     * The patient this person is related to.
     */
    patient: Reference;
    /**
     * The nature of the relationship
     * The nature of the relationship between a patient and the related person.
     */
    relationship?: CodeableConcept[];
    /**
     * A name associated with the person
     * A name associated with the person.
     */
    name?: HumanName[];
    /**
     * A contact detail for the person
     * A contact detail for the person, e.g. a telephone number or an email address.
     * Person may have multiple ways to be contacted with different uses or applicable periods.  May need to have options for contacting the person urgently, and also to help with identification.
     */
    telecom?: ContactPoint[];
    /**
     * The date on which the related person was born
     * The date on which the related person was born.
     */
    birthDate?: date;
    /**
     * Extension for birthDate
     **/
    _birthDate?: Element;
    /**
     * Address where the related person can be contacted or visited
     * Address where the related person can be contacted or visited.
     */
    address?: Address[];
    /**
     * Image of the person
     * Image of the person.
     */
    photo?: Attachment[];
    /**
     * Period of time that this relationship is considered valid
     * The period of time during which this relationship is or was active. If there are no dates defined, then the interval is unknown.
     */
    period?: Period;
    /**
     * A language which may be used to communicate with about the patient's health
     * A language which may be used to communicate with about the patient's health.
     * If no language is specified, this *implies* that the default local language is spoken.  If you need to convey proficiency for multiple modes, then you need multiple RelatedPerson.Communication associations.   If the RelatedPerson does not speak the default local language, then the Interpreter Required Standard can be used to explicitly declare that an interpreter is required.
     */
    communication?: RelatedPersonCommunication[];
    /**
     * male | female | other | unknown
     * Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes.
     */
    gender?: RelatedPersonAdministrativeGender;
}
/**
 * Whether or not the action is applicable
 * An expression that describes applicability criteria, or start/stop conditions for the action.
 * When multiple conditions of the same kind are present, the effects are combined using AND semantics, so the overall condition is true only if all of the conditions are true.
 */
export interface RequestGroupActionCondition extends BackboneElement {
    /**
     * Boolean-valued expression
     * An expression that returns true or false, indicating whether or not the condition is satisfied.
     * The expression may be inlined, or may be a reference to a named expression within a logic library referenced by the library element.
     */
    expression?: Expression;
    /**
     * applicability | start | stop
     * The kind of condition.
     * Applicability criteria are used to determine immediate applicability when a plan definition is applied to a given context. Start and stop criteria are carried through application and used to describe enter/exit criteria for an action.
     */
    kind: RequestGroupActionConditionKind;
}
/**
 * Relationship to another action
 * A relationship to another action such as "before" or "30-60 minutes after start of".
 */
export interface RequestGroupActionRelatedAction extends BackboneElement {
    /**
     * What action this is related to
     * The element id of the action this is related to.
     */
    actionId: id;
    /**
     * Extension for actionId
     **/
    _actionId?: Element;
    /**
     * Time offset for the relationship
     * A duration or range of durations to apply to the relationship. For example, 30-60 minutes before.
     */
    offsetDuration?: Duration;
    /**
     * Time offset for the relationship
     * A duration or range of durations to apply to the relationship. For example, 30-60 minutes before.
     */
    offsetRange?: Range;
    /**
     * before-start | before | before-end | concurrent-with-start | concurrent | concurrent-with-end | after-start | after | after-end
     * The relationship of this action to the related action.
     */
    relationship: RequestGroupActionRelationshipType;
}
/**
 * Proposed actions, if any
 * The actions, if any, produced by the evaluation of the artifact.
 */
export interface RequestGroupAction extends BackboneElement {
    /**
     * User-visible prefix for the action (e.g. 1. or A.)
     * A user-visible prefix for the action.
     */
    prefix?: string;
    /**
     * Extension for prefix
     **/
    _prefix?: Element;
    /**
     * User-visible title
     * The title of the action displayed to a user.
     */
    title?: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * Short description of the action
     * A short description of the action used to provide a summary to display to the user.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Static text equivalent of the action, used if the dynamic aspects cannot be interpreted by the receiving system
     * 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 might not be capable of interpreting it dynamically.
     */
    textEquivalent?: string;
    /**
     * Extension for textEquivalent
     **/
    _textEquivalent?: Element;
    /**
     * Code representing the meaning of the action or sub-actions
     * A code that provides meaning for the action or action group. For example, a section may have a LOINC code for a section of a documentation template.
     */
    code?: CodeableConcept[];
    /**
     * Supporting documentation for the intended performer of the action
     * 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.
     */
    documentation?: RelatedArtifact[];
    /**
     * Whether or not the action is applicable
     * An expression that describes applicability criteria, or start/stop conditions for the action.
     * When multiple conditions of the same kind are present, the effects are combined using AND semantics, so the overall condition is true only if all of the conditions are true.
     */
    condition?: RequestGroupActionCondition[];
    /**
     * Relationship to another action
     * A relationship to another action such as "before" or "30-60 minutes after start of".
     */
    relatedAction?: RequestGroupActionRelatedAction[];
    /**
     * When the action should take place
     * An optional value describing when the action should be performed.
     */
    timingDateTime?: dateTime;
    /**
     * Extension for timingDateTime
     **/
    _timingDateTime?: Element;
    /**
     * When the action should take place
     * An optional value describing when the action should be performed.
     */
    timingAge?: Age;
    /**
     * When the action should take place
     * An optional value describing when the action should be performed.
     */
    timingPeriod?: Period;
    /**
     * When the action should take place
     * An optional value describing when the action should be performed.
     */
    timingDuration?: Duration;
    /**
     * When the action should take place
     * An optional value describing when the action should be performed.
     */
    timingRange?: Range;
    /**
     * When the action should take place
     * An optional value describing when the action should be performed.
     */
    timingTiming?: Timing;
    /**
     * Who should perform the action
     * The participant that should perform or be responsible for this action.
     */
    participant?: Reference[];
    /**
     * create | update | remove | fire-event
     * The type of action to perform (create, update, remove).
     */
    type?: CodeableConcept;
    /**
     * The target of the action
     * The resource that is the target of the action (e.g. CommunicationRequest).
     * The target resource SHALL be a [Request](request.html) resource with a Request.intent set to "option".
     */
    resource?: Reference;
    /**
     * Sub action
     * Sub actions.
     */
    action?: RequestGroupAction[];
    /**
     * routine | urgent | asap | stat
     * Indicates how quickly the action should be addressed with respect to other actions.
     */
    priority?: RequestGroupRequestPriority;
    /**
     * visual-group | logical-group | sentence-group
     * Defines the grouping behavior for the action and its children.
     */
    groupingBehavior?: RequestGroupActionGroupingBehavior;
    /**
     * any | all | all-or-none | exactly-one | at-most-one | one-or-more
     * Defines the selection behavior for the action and its children.
     */
    selectionBehavior?: RequestGroupActionSelectionBehavior;
    /**
     * must | could | must-unless-documented
     * Defines expectations around whether an action is required.
     */
    requiredBehavior?: RequestGroupActionRequiredBehavior;
    /**
     * yes | no
     * Defines whether the action should usually be preselected.
     */
    precheckBehavior?: RequestGroupActionPrecheckBehavior;
    /**
     * single | multiple
     * Defines whether the action can be selected multiple times.
     */
    cardinalityBehavior?: RequestGroupActionCardinalityBehavior;
}
/**
 * A group of related requests
 * 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".
 */
export interface RequestGroup extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'RequestGroup';
    /**
     * Business identifier
     * Allows a service to provide a unique, business identifier for the request.
     */
    identifier?: Identifier[];
    /**
     * Instantiates FHIR protocol or definition
     * A canonical URL referencing a FHIR-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this request.
     */
    instantiatesCanonical?: canonical[];
    /**
     * Extension for instantiatesCanonical
     **/
    _instantiatesCanonical?: Element[];
    /**
     * Instantiates external protocol or definition
     * A URL referencing an externally defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this request.
     */
    instantiatesUri?: uri[];
    /**
     * Extension for instantiatesUri
     **/
    _instantiatesUri?: Element[];
    /**
     * Fulfills plan, proposal, or order
     * A plan, proposal or order that is fulfilled in whole or in part by this request.
     */
    basedOn?: Reference[];
    /**
     * Request(s) replaced by this request
     * Completed or terminated request(s) whose function is taken by this new request.
     * The replacement could be because the initial request was immediately rejected (due to an issue) or because the previous request was completed, but the need for the action described by the request remains ongoing.
     */
    replaces?: Reference[];
    /**
     * Composite request this is part of
     * 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.
     * Requests are linked either by a "basedOn" relationship (i.e. one request is fulfilling another) or by having a common requisition.  Requests that are part of the same requisition are generally treated independently from the perspective of changing their state or maintaining them after initial creation.
     */
    groupIdentifier?: Identifier;
    /**
     * What's being requested/ordered
     * A code that identifies what the overall request group is.
     * This element can be used to provide a code that captures the meaning of the request group as a whole, as opposed to the code of the action element, which captures the meaning of the individual actions within the request group.
     */
    code?: CodeableConcept;
    /**
     * Who the request group is about
     * The subject for which the request group was created.
     */
    subject?: Reference;
    /**
     * Created as part of
     * Describes the context of the request group, if any.
     */
    encounter?: Reference;
    /**
     * When the request group was authored
     * Indicates when the request group was created.
     */
    authoredOn?: dateTime;
    /**
     * Extension for authoredOn
     **/
    _authoredOn?: Element;
    /**
     * Device or practitioner that authored the request group
     * Provides a reference to the author of the request group.
     */
    author?: Reference;
    /**
     * Why the request group is needed
     * Describes the reason for the request group in coded or textual form.
     */
    reasonCode?: CodeableConcept[];
    /**
     * Why the request group is needed
     * Indicates another resource whose existence justifies this request group.
     */
    reasonReference?: Reference[];
    /**
     * Additional notes about the response
     * Provides a mechanism to communicate additional information about the response.
     */
    note?: Annotation[];
    /**
     * Proposed actions, if any
     * The actions, if any, produced by the evaluation of the artifact.
     */
    action?: RequestGroupAction[];
    /**
     * draft | active | on-hold | revoked | completed | entered-in-error | unknown
     * The current state of the request. For request groups, the status reflects the status of all the requests in the group.
     */
    status: RequestGroupRequestStatus;
    /**
     * proposal | plan | directive | order | original-order | reflex-order | filler-order | instance-order | option
     * Indicates the level of authority/intentionality associated with the request and where the request fits into the workflow chain.
     */
    intent: RequestGroupRequestIntent;
    /**
     * routine | urgent | asap | stat
     * Indicates how quickly the request should be addressed with respect to other requests.
     */
    priority?: RequestGroupRequestPriority;
}
/**
 * A research context or question
 * The ResearchDefinition resource describes the conditional state (population and any exposures being compared within the population) and outcome (if specified) that the knowledge (evidence, assertion, recommendation) is about.
 */
export interface ResearchDefinition extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'ResearchDefinition';
    /**
     * Canonical identifier for this research definition, represented as a URI (globally unique)
     * An absolute URI that is used to identify this research definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this research definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the research definition is stored on different servers.
     * Can be a urn:uuid: or a urn:oid: but real http: addresses are preferred.  Multiple instances may share the same URL if they have a distinct version.

The determination of when to create a new version of a resource (same url, new version) vs. defining a new artifact is up to the author.  Considerations for making this decision are found in [Technical and Business Versions](resource.html#versions).

In some cases, the resource can no longer be found at the stated url, but the url itself cannot change. Implementations can use the [meta.source](resource.html#meta) element to indicate where the current master source of the resource can be found.
     */
    url?: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Additional identifier for the research definition
     * A formal identifier that is used to identify this research definition when it is represented in other formats, or referenced in a specification, model, design or an instance.
     * Typically, this is used for identifiers that can go in an HL7 V3 II (instance identifier) data type, and can then identify this research definition outside of FHIR, where it is not possible to use the logical URI.
     */
    identifier?: Identifier[];
    /**
     * Business version of the research definition
     * The identifier that is used to identify this version of the research definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the research 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.
     * There may be different research definition instances that have the same identifier but different versions.  The version can be appended to the url in a reference to allow a reference to a particular business version of the research definition with the format [url]|[version].
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
    /**
     * Name for this research definition (computer friendly)
     * A natural language name identifying the research definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.
     * The name is not expected to be globally unique. The name should be a simple alphanumeric type name to ensure that it is machine-processing friendly.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Name for this research definition (human friendly)
     * A short, descriptive, user-friendly title for the research definition.
     * This name does not need to be machine-processing friendly and may contain punctuation, white-space, etc.
     */
    title?: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * Title for use in informal contexts
     * The short title provides an alternate title for use in informal descriptive contexts where the full, formal title is not necessary.
     */
    shortTitle?: string;
    /**
     * Extension for shortTitle
     **/
    _shortTitle?: Element;
    /**
     * Subordinate title of the ResearchDefinition
     * An explanatory or alternate title for the ResearchDefinition giving additional information about its content.
     */
    subtitle?: string;
    /**
     * Extension for subtitle
     **/
    _subtitle?: Element;
    /**
     * For testing purposes, not real usage
     * A Boolean value to indicate that this research definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.
     * Allows filtering of research definitions that are appropriate for use versus not.
     */
    experimental?: boolean;
    /**
     * Extension for experimental
     **/
    _experimental?: Element;
    /**
     * E.g. Patient, Practitioner, RelatedPerson, Organization, Location, Device
     * The intended subjects for the ResearchDefinition. If this element is not provided, a Patient subject is assumed, but the subject of the ResearchDefinition can be anything.
     * The subject of the ResearchDefinition is critical in interpreting the criteria definitions, as the logic in the ResearchDefinitions is evaluated with respect to a particular subject. This corresponds roughly to the notion of a Compartment in that it limits what content is available based on its relationship to the subject. In CQL, this corresponds to the context declaration.
     */
    subjectCodeableConcept?: CodeableConcept;
    /**
     * E.g. Patient, Practitioner, RelatedPerson, Organization, Location, Device
     * The intended subjects for the ResearchDefinition. If this element is not provided, a Patient subject is assumed, but the subject of the ResearchDefinition can be anything.
     * The subject of the ResearchDefinition is critical in interpreting the criteria definitions, as the logic in the ResearchDefinitions is evaluated with respect to a particular subject. This corresponds roughly to the notion of a Compartment in that it limits what content is available based on its relationship to the subject. In CQL, this corresponds to the context declaration.
     */
    subjectReference?: Reference;
    /**
     * Date last changed
     * The date  (and optionally time) when the research definition was published. The date must change 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 research definition changes.
     * Note that this is not the same as the resource last-modified-date, since the resource may be a secondary representation of the research definition. Additional specific dates may be added as extensions or be found by consulting Provenances associated with past versions of the resource.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Name of the publisher (organization or individual)
     * The name of the organization or individual that published the research definition.
     * Usually an organization but may be an individual. The publisher (or steward) of the research definition is the organization or individual primarily responsible for the maintenance and upkeep of the research definition. This is not necessarily the same individual or organization that developed and initially authored the content. The publisher is the primary point of contact for questions or issues with the research definition. This item SHOULD be populated unless the information is available from context.
     */
    publisher?: string;
    /**
     * Extension for publisher
     **/
    _publisher?: Element;
    /**
     * Contact details for the publisher
     * Contact details to assist a user in finding and communicating with the publisher.
     * May be a web site, an email address, a telephone number, etc.
     */
    contact?: ContactDetail[];
    /**
     * Natural language description of the research definition
     * A free text natural language description of the research definition from a consumer's perspective.
     * This description can be used to capture details such as why the research definition was built, comments about misuse, instructions for clinical use and interpretation, literature references, examples from the paper world, etc. It is not a rendering of the research definition as conveyed in the 'text' field of the resource itself. This item SHOULD be populated unless the information is available from context (e.g. the language of the research definition is presumed to be the predominant language in the place the research definition was created).
     */
    description?: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Used for footnotes or explanatory notes
     * A human-readable string to clarify or explain concepts about the resource.
     */
    comment?: string[];
    /**
     * Extension for comment
     **/
    _comment?: Element[];
    /**
     * The context that the content is intended to support
     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate research definition instances.
     * When multiple useContexts are specified, there is no expectation that all or any of the contexts apply.
     */
    useContext?: UsageContext[];
    /**
     * Intended jurisdiction for research definition (if applicable)
     * A legal or geographic region in which the research definition is intended to be used.
     * It may be possible for the research definition to be used in jurisdictions other than those for which it was originally designed or intended.
     */
    jurisdiction?: CodeableConcept[];
    /**
     * Why this research definition is defined
     * Explanation of why this research definition is needed and why it has been designed as it has.
     * This element does not describe the usage of the research definition. Instead, it provides traceability of ''why'' the resource is either needed or ''why'' it is defined as it is.  This may be used to point to source materials or specifications that drove the structure of this research definition.
     */
    purpose?: markdown;
    /**
     * Extension for purpose
     **/
    _purpose?: Element;
    /**
     * Describes the clinical usage of the ResearchDefinition
     * A detailed description, from a clinical perspective, of how the ResearchDefinition is used.
     */
    usage?: string;
    /**
     * Extension for usage
     **/
    _usage?: Element;
    /**
     * Use and/or publishing restrictions
     * A copyright statement relating to the research definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the research definition.
     */
    copyright?: markdown;
    /**
     * Extension for copyright
     **/
    _copyright?: Element;
    /**
     * When the research definition was approved by publisher
     * The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
     * The 'date' element may be more recent than the approval date because of minor changes or editorial corrections.
     */
    approvalDate?: date;
    /**
     * Extension for approvalDate
     **/
    _approvalDate?: Element;
    /**
     * When the research definition was last reviewed
     * The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.
     * If specified, this date follows the original approval date.
     */
    lastReviewDate?: date;
    /**
     * Extension for lastReviewDate
     **/
    _lastReviewDate?: Element;
    /**
     * When the research definition is expected to be used
     * The period during which the research definition content was or is planned to be in active use.
     * The effective period for a research definition  determines when the content is applicable for usage and is independent of publication and review dates. For example, a measure intended to be used for the year 2016 might be published in 2015.
     */
    effectivePeriod?: Period;
    /**
     * The category of the ResearchDefinition, such as Education, Treatment, Assessment, etc.
     * Descriptive topics related to the content of the ResearchDefinition. Topics provide a high-level categorization grouping types of ResearchDefinitions that can be useful for filtering and searching.
     */
    topic?: CodeableConcept[];
    /**
     * Who authored the content
     * An individiual or organization primarily involved in the creation and maintenance of the content.
     */
    author?: ContactDetail[];
    /**
     * Who edited the content
     * An individual or organization primarily responsible for internal coherence of the content.
     */
    editor?: ContactDetail[];
    /**
     * Who reviewed the content
     * An individual or organization primarily responsible for review of some aspect of the content.
     */
    reviewer?: ContactDetail[];
    /**
     * Who endorsed the content
     * An individual or organization responsible for officially endorsing the content for use in some setting.
     */
    endorser?: ContactDetail[];
    /**
     * Additional documentation, citations, etc.
     * Related artifacts such as additional documentation, justification, or bibliographic references.
     * Each related artifact is either an attachment, or a reference to another resource, but not both.
     */
    relatedArtifact?: RelatedArtifact[];
    /**
     * Logic used by the ResearchDefinition
     * A reference to a Library resource containing the formal logic used by the ResearchDefinition.
     */
    library?: canonical[];
    /**
     * Extension for library
     **/
    _library?: Element[];
    /**
     * What population?
     * A reference to a ResearchElementDefinition resource that defines the population for the research.
     */
    population: Reference;
    /**
     * What exposure?
     * A reference to a ResearchElementDefinition resource that defines the exposure for the research.
     */
    exposure?: Reference;
    /**
     * What alternative exposure state?
     * A reference to a ResearchElementDefinition resource that defines the exposureAlternative for the research.
     */
    exposureAlternative?: Reference;
    /**
     * What outcome?
     * A reference to a ResearchElementDefinition resomece that defines the outcome for the research.
     */
    outcome?: Reference;
    /**
     * draft | active | retired | unknown
     * The status of this research definition. Enables tracking the life-cycle of the content.
     * Allows filtering of research definitions that are appropriate for use versus not.
     */
    status: ResearchDefinitionPublicationStatus;
}
/**
 * What defines the members of the research element
 * A characteristic that defines the members of the research element. Multiple characteristics are applied with "and" semantics.
 * Characteristics can be defined flexibly to accommodate different use cases for membership criteria, ranging from simple codes, all the way to using an expression language to express the criteria.
 */
export interface ResearchElementDefinitionCharacteristic extends BackboneElement {
    /**
     * What code or expression defines members?
     * Define members of the research element using Codes (such as condition, medication, or observation), Expressions ( using an expression language such as FHIRPath or CQL) or DataRequirements (such as Diabetes diagnosis onset in the last year).
     */
    definitionCodeableConcept?: CodeableConcept;
    /**
     * What code or expression defines members?
     * Define members of the research element using Codes (such as condition, medication, or observation), Expressions ( using an expression language such as FHIRPath or CQL) or DataRequirements (such as Diabetes diagnosis onset in the last year).
     */
    definitionCanonical?: canonical;
    /**
     * Extension for definitionCanonical
     **/
    _definitionCanonical?: Element;
    /**
     * What code or expression defines members?
     * Define members of the research element using Codes (such as condition, medication, or observation), Expressions ( using an expression language such as FHIRPath or CQL) or DataRequirements (such as Diabetes diagnosis onset in the last year).
     */
    definitionExpression?: Expression;
    /**
     * What code or expression defines members?
     * Define members of the research element using Codes (such as condition, medication, or observation), Expressions ( using an expression language such as FHIRPath or CQL) or DataRequirements (such as Diabetes diagnosis onset in the last year).
     */
    definitionDataRequirement?: DataRequirement;
    /**
     * What code/value pairs define members?
     * Use UsageContext to define the members of the population, such as Age Ranges, Genders, Settings.
     */
    usageContext?: UsageContext[];
    /**
     * Whether the characteristic includes or excludes members
     * When true, members with this characteristic are excluded from the element.
     */
    exclude?: boolean;
    /**
     * Extension for exclude
     **/
    _exclude?: Element;
    /**
     * What unit is the outcome described in?
     * Specifies the UCUM unit for the outcome.
     */
    unitOfMeasure?: CodeableConcept;
    /**
     * What time period does the study cover
     * A narrative description of the time period the study covers.
     */
    studyEffectiveDescription?: string;
    /**
     * Extension for studyEffectiveDescription
     **/
    _studyEffectiveDescription?: Element;
    /**
     * What time period does the study cover
     * Indicates what effective period the study covers.
     */
    studyEffectiveDateTime?: dateTime;
    /**
     * Extension for studyEffectiveDateTime
     **/
    _studyEffectiveDateTime?: Element;
    /**
     * What time period does the study cover
     * Indicates what effective period the study covers.
     */
    studyEffectivePeriod?: Period;
    /**
     * What time period does the study cover
     * Indicates what effective period the study covers.
     */
    studyEffectiveDuration?: Duration;
    /**
     * What time period does the study cover
     * Indicates what effective period the study covers.
     */
    studyEffectiveTiming?: Timing;
    /**
     * Observation time from study start
     * Indicates duration from the study initiation.
     */
    studyEffectiveTimeFromStart?: Duration;
    /**
     * What time period do participants cover
     * A narrative description of the time period the study covers.
     */
    participantEffectiveDescription?: string;
    /**
     * Extension for participantEffectiveDescription
     **/
    _participantEffectiveDescription?: Element;
    /**
     * What time period do participants cover
     * Indicates what effective period the study covers.
     */
    participantEffectiveDateTime?: dateTime;
    /**
     * Extension for participantEffectiveDateTime
     **/
    _participantEffectiveDateTime?: Element;
    /**
     * What time period do participants cover
     * Indicates what effective period the study covers.
     */
    participantEffectivePeriod?: Period;
    /**
     * What time period do participants cover
     * Indicates what effective period the study covers.
     */
    participantEffectiveDuration?: Duration;
    /**
     * What time period do participants cover
     * Indicates what effective period the study covers.
     */
    participantEffectiveTiming?: Timing;
    /**
     * Observation time from study start
     * Indicates duration from the participant's study entry.
     */
    participantEffectiveTimeFromStart?: Duration;
    /**
     * mean | median | mean-of-mean | mean-of-median | median-of-mean | median-of-median
     * Indicates how elements are aggregated within the study effective period.
     */
    studyEffectiveGroupMeasure?: ResearchElementDefinitionGroupMeasure;
    /**
     * mean | median | mean-of-mean | mean-of-median | median-of-mean | median-of-median
     * Indicates how elements are aggregated within the study effective period.
     */
    participantEffectiveGroupMeasure?: ResearchElementDefinitionGroupMeasure;
}
/**
 * A population, intervention, or exposure definition
 * The ResearchElementDefinition resource describes a "PICO" element that knowledge (evidence, assertion, recommendation) is about.
 * PICO stands for Population (the population within which exposures are being compared), Intervention (the conditional state or exposure state being described for its effect on outcomes), Comparison (the alternative conditional state or alternative exposure state being compared against), and Outcome (the result or effect of the intervention in the population).
 */
export interface ResearchElementDefinition extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'ResearchElementDefinition';
    /**
     * Canonical identifier for this research element definition, represented as a URI (globally unique)
     * An absolute URI that is used to identify this research element definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this research element definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the research element definition is stored on different servers.
     * Can be a urn:uuid: or a urn:oid: but real http: addresses are preferred.  Multiple instances may share the same URL if they have a distinct version.

The determination of when to create a new version of a resource (same url, new version) vs. defining a new artifact is up to the author.  Considerations for making this decision are found in [Technical and Business Versions](resource.html#versions).

In some cases, the resource can no longer be found at the stated url, but the url itself cannot change. Implementations can use the [meta.source](resource.html#meta) element to indicate where the current master source of the resource can be found.
     */
    url?: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Additional identifier for the research element definition
     * A formal identifier that is used to identify this research element definition when it is represented in other formats, or referenced in a specification, model, design or an instance.
     * Typically, this is used for identifiers that can go in an HL7 V3 II (instance identifier) data type, and can then identify this research element definition outside of FHIR, where it is not possible to use the logical URI.
     */
    identifier?: Identifier[];
    /**
     * Business version of the research element definition
     * The identifier that is used to identify this version of the research element definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the research element 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.
     * There may be different research element definition instances that have the same identifier but different versions.  The version can be appended to the url in a reference to allow a reference to a particular business version of the research element definition with the format [url]|[version].
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
    /**
     * Name for this research element definition (computer friendly)
     * A natural language name identifying the research element definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.
     * The name is not expected to be globally unique. The name should be a simple alphanumeric type name to ensure that it is machine-processing friendly.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Name for this research element definition (human friendly)
     * A short, descriptive, user-friendly title for the research element definition.
     * This name does not need to be machine-processing friendly and may contain punctuation, white-space, etc.
     */
    title?: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * Title for use in informal contexts
     * The short title provides an alternate title for use in informal descriptive contexts where the full, formal title is not necessary.
     */
    shortTitle?: string;
    /**
     * Extension for shortTitle
     **/
    _shortTitle?: Element;
    /**
     * Subordinate title of the ResearchElementDefinition
     * An explanatory or alternate title for the ResearchElementDefinition giving additional information about its content.
     */
    subtitle?: string;
    /**
     * Extension for subtitle
     **/
    _subtitle?: Element;
    /**
     * For testing purposes, not real usage
     * A Boolean value to indicate that this research element definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.
     * Allows filtering of research element definitions that are appropriate for use versus not.
     */
    experimental?: boolean;
    /**
     * Extension for experimental
     **/
    _experimental?: Element;
    /**
     * E.g. Patient, Practitioner, RelatedPerson, Organization, Location, Device
     * The intended subjects for the ResearchElementDefinition. If this element is not provided, a Patient subject is assumed, but the subject of the ResearchElementDefinition can be anything.
     * The subject of the ResearchElementDefinition is critical in interpreting the criteria definitions, as the logic in the ResearchElementDefinitions is evaluated with respect to a particular subject. This corresponds roughly to the notion of a Compartment in that it limits what content is available based on its relationship to the subject. In CQL, this corresponds to the context declaration.
     */
    subjectCodeableConcept?: CodeableConcept;
    /**
     * E.g. Patient, Practitioner, RelatedPerson, Organization, Location, Device
     * The intended subjects for the ResearchElementDefinition. If this element is not provided, a Patient subject is assumed, but the subject of the ResearchElementDefinition can be anything.
     * The subject of the ResearchElementDefinition is critical in interpreting the criteria definitions, as the logic in the ResearchElementDefinitions is evaluated with respect to a particular subject. This corresponds roughly to the notion of a Compartment in that it limits what content is available based on its relationship to the subject. In CQL, this corresponds to the context declaration.
     */
    subjectReference?: Reference;
    /**
     * Date last changed
     * The date  (and optionally time) when the research element definition was published. The date must change 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 research element definition changes.
     * Note that this is not the same as the resource last-modified-date, since the resource may be a secondary representation of the research element definition. Additional specific dates may be added as extensions or be found by consulting Provenances associated with past versions of the resource.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Name of the publisher (organization or individual)
     * The name of the organization or individual that published the research element definition.
     * Usually an organization but may be an individual. The publisher (or steward) of the research element definition is the organization or individual primarily responsible for the maintenance and upkeep of the research element definition. This is not necessarily the same individual or organization that developed and initially authored the content. The publisher is the primary point of contact for questions or issues with the research element definition. This item SHOULD be populated unless the information is available from context.
     */
    publisher?: string;
    /**
     * Extension for publisher
     **/
    _publisher?: Element;
    /**
     * Contact details for the publisher
     * Contact details to assist a user in finding and communicating with the publisher.
     * May be a web site, an email address, a telephone number, etc.
     */
    contact?: ContactDetail[];
    /**
     * Natural language description of the research element definition
     * A free text natural language description of the research element definition from a consumer's perspective.
     * This description can be used to capture details such as why the research element definition was built, comments about misuse, instructions for clinical use and interpretation, literature references, examples from the paper world, etc. It is not a rendering of the research element definition as conveyed in the 'text' field of the resource itself. This item SHOULD be populated unless the information is available from context (e.g. the language of the research element definition is presumed to be the predominant language in the place the research element definition was created).
     */
    description?: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Used for footnotes or explanatory notes
     * A human-readable string to clarify or explain concepts about the resource.
     */
    comment?: string[];
    /**
     * Extension for comment
     **/
    _comment?: Element[];
    /**
     * The context that the content is intended to support
     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate research element definition instances.
     * When multiple useContexts are specified, there is no expectation that all or any of the contexts apply.
     */
    useContext?: UsageContext[];
    /**
     * Intended jurisdiction for research element definition (if applicable)
     * A legal or geographic region in which the research element definition is intended to be used.
     * It may be possible for the research element definition to be used in jurisdictions other than those for which it was originally designed or intended.
     */
    jurisdiction?: CodeableConcept[];
    /**
     * Why this research element definition is defined
     * Explanation of why this research element definition is needed and why it has been designed as it has.
     * This element does not describe the usage of the research element definition. Instead, it provides traceability of ''why'' the resource is either needed or ''why'' it is defined as it is.  This may be used to point to source materials or specifications that drove the structure of this research element definition.
     */
    purpose?: markdown;
    /**
     * Extension for purpose
     **/
    _purpose?: Element;
    /**
     * Describes the clinical usage of the ResearchElementDefinition
     * A detailed description, from a clinical perspective, of how the ResearchElementDefinition is used.
     */
    usage?: string;
    /**
     * Extension for usage
     **/
    _usage?: Element;
    /**
     * Use and/or publishing restrictions
     * A copyright statement relating to the research element definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the research element definition.
     */
    copyright?: markdown;
    /**
     * Extension for copyright
     **/
    _copyright?: Element;
    /**
     * When the research element definition was approved by publisher
     * The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
     * The 'date' element may be more recent than the approval date because of minor changes or editorial corrections.
     */
    approvalDate?: date;
    /**
     * Extension for approvalDate
     **/
    _approvalDate?: Element;
    /**
     * When the research element definition was last reviewed
     * The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.
     * If specified, this date follows the original approval date.
     */
    lastReviewDate?: date;
    /**
     * Extension for lastReviewDate
     **/
    _lastReviewDate?: Element;
    /**
     * When the research element definition is expected to be used
     * The period during which the research element definition content was or is planned to be in active use.
     * The effective period for a research element definition  determines when the content is applicable for usage and is independent of publication and review dates. For example, a measure intended to be used for the year 2016 might be published in 2015.
     */
    effectivePeriod?: Period;
    /**
     * The category of the ResearchElementDefinition, such as Education, Treatment, Assessment, etc.
     * Descriptive topics related to the content of the ResearchElementDefinition. Topics provide a high-level categorization grouping types of ResearchElementDefinitions that can be useful for filtering and searching.
     */
    topic?: CodeableConcept[];
    /**
     * Who authored the content
     * An individiual or organization primarily involved in the creation and maintenance of the content.
     */
    author?: ContactDetail[];
    /**
     * Who edited the content
     * An individual or organization primarily responsible for internal coherence of the content.
     */
    editor?: ContactDetail[];
    /**
     * Who reviewed the content
     * An individual or organization primarily responsible for review of some aspect of the content.
     */
    reviewer?: ContactDetail[];
    /**
     * Who endorsed the content
     * An individual or organization responsible for officially endorsing the content for use in some setting.
     */
    endorser?: ContactDetail[];
    /**
     * Additional documentation, citations, etc.
     * Related artifacts such as additional documentation, justification, or bibliographic references.
     * Each related artifact is either an attachment, or a reference to another resource, but not both.
     */
    relatedArtifact?: RelatedArtifact[];
    /**
     * Logic used by the ResearchElementDefinition
     * A reference to a Library resource containing the formal logic used by the ResearchElementDefinition.
     */
    library?: canonical[];
    /**
     * Extension for library
     **/
    _library?: Element[];
    /**
     * What defines the members of the research element
     * A characteristic that defines the members of the research element. Multiple characteristics are applied with "and" semantics.
     * Characteristics can be defined flexibly to accommodate different use cases for membership criteria, ranging from simple codes, all the way to using an expression language to express the criteria.
     */
    characteristic: ResearchElementDefinitionCharacteristic[];
    /**
     * draft | active | retired | unknown
     * The status of this research element definition. Enables tracking the life-cycle of the content.
     * Allows filtering of research element definitions that are appropriate for use versus not.
     */
    status: ResearchElementDefinitionPublicationStatus;
    /**
     * population | exposure | outcome
     * The type of research element, a population, an exposure, or an outcome.
     */
    type: ResearchElementDefinitionResearchElementType;
    /**
     * dichotomous | continuous | descriptive
     * The type of the outcome (e.g. Dichotomous, Continuous, or Descriptive).
     */
    variableType?: ResearchElementDefinitionVariableType;
}
/**
 * Defined path through the study for a subject
 * 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.
 */
export interface ResearchStudyArm extends BackboneElement {
    /**
     * Label for study arm
     * Unique, human-readable label for this arm of the study.
     */
    name: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Categorization of study arm
     * Categorization of study arm, e.g. experimental, active comparator, placebo comparater.
     */
    type?: CodeableConcept;
    /**
     * Short explanation of study path
     * A succinct description of the path through the study that would be followed by a subject adhering to this arm.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
}
/**
 * A goal for the study
 * A goal that the study is aiming to achieve in terms of a scientific question to be answered by the analysis of data collected during the study.
 */
export interface ResearchStudyObjective extends BackboneElement {
    /**
     * Label for the objective
     * Unique, human-readable label for this objective of the study.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * primary | secondary | exploratory
     * The kind of study objective.
     */
    type?: CodeableConcept;
}
/**
 * Investigation to increase healthcare-related patient-independent knowledge
 * 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.
 * Need to make sure we encompass public health studies.
 */
export interface ResearchStudy extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'ResearchStudy';
    /**
     * Business Identifier for study
     * Identifiers assigned to this research study by the sponsor or other systems.
     */
    identifier?: Identifier[];
    /**
     * Name for this study
     * A short, descriptive user-friendly label for the study.
     */
    title?: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * Steps followed in executing study
     * The set of steps expected to be performed as part of the execution of the study.
     */
    protocol?: Reference[];
    /**
     * Part of larger study
     * A larger research study of which this particular study is a component or step.
     */
    partOf?: Reference[];
    /**
     * treatment | prevention | diagnostic | supportive-care | screening | health-services-research | basic-science | device-feasibility
     * The type of study based upon the intent of the study's activities. A classification of the intent of the study.
     */
    primaryPurposeType?: CodeableConcept;
    /**
     * n-a | early-phase-1 | phase-1 | phase-1-phase-2 | phase-2 | phase-2-phase-3 | phase-3 | phase-4
     * The stage in the progression of a therapy from initial experimental use in humans in clinical trials to post-market evaluation.
     */
    phase?: CodeableConcept;
    /**
     * Classifications for the study
     * Codes categorizing the type of study such as investigational vs. observational, type of blinding, type of randomization, safety vs. efficacy, etc.
     */
    category?: CodeableConcept[];
    /**
     * Drugs, devices, etc. under study
     * The medication(s), food(s), therapy(ies), device(s) or other concerns or interventions that the study is seeking to gain more information about.
     */
    focus?: CodeableConcept[];
    /**
     * Condition being studied
     * The condition that is the focus of the study.  For example, In a study to examine risk factors for Lupus, might have as an inclusion criterion "healthy volunteer", but the target condition code would be a Lupus SNOMED code.
     */
    condition?: CodeableConcept[];
    /**
     * Contact details for the study
     * Contact details to assist a user in learning more about or engaging with the study.
     */
    contact?: ContactDetail[];
    /**
     * References and dependencies
     * Citations, references and other related documents.
     */
    relatedArtifact?: RelatedArtifact[];
    /**
     * Used to search for the study
     * Key terms to aid in searching for or filtering the study.
     */
    keyword?: CodeableConcept[];
    /**
     * Geographic region(s) for study
     * Indicates a country, state or other region where the study is taking place.
     */
    location?: CodeableConcept[];
    /**
     * What this is study doing
     * A full description of how the study is being conducted.
     */
    description?: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Inclusion & exclusion criteria
     * 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".
     * The Group referenced should not generally enumerate specific subjects.  Subjects will be linked to the study using the ResearchSubject resource.
     */
    enrollment?: Reference[];
    /**
     * When the study began and ended
     * Identifies the start date and the expected (or actual, depending on status) end date for the study.
     */
    period?: Period;
    /**
     * Organization that initiates and is legally responsible for the study
     * An organization that initiates the investigation and is legally responsible for the study.
     */
    sponsor?: Reference;
    /**
     * Researcher who oversees multiple aspects of the study
     * A researcher in a study who oversees multiple aspects of the study, such as concept development, protocol writing, protocol submission for IRB approval, participant recruitment, informed consent, data collection, analysis, interpretation and presentation.
     */
    principalInvestigator?: Reference;
    /**
     * Facility where study activities are conducted
     * A facility in which study activities are conducted.
     */
    site?: Reference[];
    /**
     * accrual-goal-met | closed-due-to-toxicity | closed-due-to-lack-of-study-progress | temporarily-closed-per-study-design
     * A description and/or code explaining the premature termination of the study.
     */
    reasonStopped?: CodeableConcept;
    /**
     * Comments made about the study
     * Comments made about the study by the performer, subject or other participants.
     */
    note?: Annotation[];
    /**
     * Defined path through the study for a subject
     * 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.
     */
    arm?: ResearchStudyArm[];
    /**
     * A goal for the study
     * A goal that the study is aiming to achieve in terms of a scientific question to be answered by the analysis of data collected during the study.
     */
    objective?: ResearchStudyObjective[];
    /**
     * active | administratively-completed | approved | closed-to-accrual | closed-to-accrual-and-intervention | completed | disapproved | in-review | temporarily-closed-to-accrual | temporarily-closed-to-accrual-and-intervention | withdrawn
     * The current state of the study.
     */
    status: ResearchStudyStatus;
}
/**
 * Physical entity which is the primary unit of interest in the study
 * A physical entity which is the primary unit of operational and/or administrative interest in a study.
 * Need to make sure we encompass public health studies.
 */
export interface ResearchSubject extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'ResearchSubject';
    /**
     * Business Identifier for research subject in a study
     * Identifiers assigned to this research subject for a study.
     */
    identifier?: Identifier[];
    /**
     * Start and end of participation
     * The dates the subject began and ended their participation in the study.
     */
    period?: Period;
    /**
     * Study subject is part of
     * Reference to the study the subject is participating in.
     */
    study: Reference;
    /**
     * Who is part of study
     * The record of the person or animal who is involved in the study.
     */
    individual: Reference;
    /**
     * What path should be followed
     * The name of the arm in the study the subject is expected to follow as part of this study.
     */
    assignedArm?: string;
    /**
     * Extension for assignedArm
     **/
    _assignedArm?: Element;
    /**
     * What path was followed
     * The name of the arm in the study the subject actually followed as part of this study.
     */
    actualArm?: string;
    /**
     * Extension for actualArm
     **/
    _actualArm?: Element;
    /**
     * Agreement to participate in study
     * A record of the patient's informed agreement to participate in the study.
     */
    consent?: Reference;
    /**
     * candidate | eligible | follow-up | ineligible | not-registered | off-study | on-study | on-study-intervention | on-study-observation | pending-on-study | potential-candidate | screening | withdrawn
     * The current state of the subject.
     */
    status: ResearchSubjectStatus;
}
/**
 * Base Resource
 * This is the base resource type for everything.
 */
export interface Resource {
    /**
     * The type of the resource.
     */
    resourceType: string;
    /**
     * Extension for 'resourceType'.
     */
    _resourceType?: Element;
    /**
     * Logical id of this artifact
     * The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.
     * The only time that a resource does not have an id is when it is being submitted to the server using a create operation.
     */
    id?: string;
    /**
     * Extension for id
     **/
    _id?: Element;
    /**
     * Metadata about the resource
     * The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.
     */
    meta?: Meta;
    /**
     * A set of rules under which this content was created
     * A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.
     * Asserting this rule set restricts the content to be only understood by a limited set of trading partners. This inherently limits the usefulness of the data in the long term. However, the existing health eco-system is highly fractured, and not yet ready to define, collect, and exchange data in a generally computable sense. Wherever possible, implementers and/or specification writers should avoid using this element. Often, when used, the URL is a reference to an implementation guide that defines these special rules as part of it's narrative along with other profiles, value sets, etc.
     */
    implicitRules?: uri;
    /**
     * Extension for implicitRules
     **/
    _implicitRules?: Element;
    /**
     * Language of the resource content
     * The base language in which the resource is written.
     * Language is provided to support indexing and accessibility (typically, services such as text to speech use the language tag). The html language tag in the narrative applies  to the narrative. The language tag on the resource may be used to specify the language of other presentations generated from the data in the resource. Not all the content has to be in the base language. The Resource.language should not be assumed to apply to the narrative automatically. If a language is specified, it should it also be specified on the div element in the html (see rules in HTML5 for information about the relationship between xml:lang and the html lang attribute).
     */
    language?: code;
    /**
     * Extension for language
     **/
    _language?: Element;
}
/**
 * Outcome predicted
 * Describes the expected outcome for the subject.
 * Multiple repetitions can be used to identify the same type of outcome in different timeframes as well as different types of outcomes.
 */
export interface RiskAssessmentPrediction extends BackboneElement {
    /**
     * Possible outcome for the subject
     * One of the potential outcomes for the patient (e.g. remission, death,  a particular condition).
     */
    outcome?: CodeableConcept;
    /**
     * Likelihood of specified outcome
     * Indicates how likely the outcome is (in the specified timeframe).
     * If range is used, it represents the lower and upper bounds of certainty; e.g. 40-60%  Decimal values are expressed as percentages as well (max = 100).
     */
    probabilityDecimal?: decimal;
    /**
     * Extension for probabilityDecimal
     **/
    _probabilityDecimal?: Element;
    /**
     * Likelihood of specified outcome
     * Indicates how likely the outcome is (in the specified timeframe).
     * If range is used, it represents the lower and upper bounds of certainty; e.g. 40-60%  Decimal values are expressed as percentages as well (max = 100).
     */
    probabilityRange?: Range;
    /**
     * Likelihood of specified outcome as a qualitative value
     * Indicates how likely the outcome is (in the specified timeframe), expressed as a qualitative value (e.g. low, medium, or high).
     */
    qualitativeRisk?: CodeableConcept;
    /**
     * Relative likelihood
     * 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.).
     */
    relativeRisk?: decimal;
    /**
     * Extension for relativeRisk
     **/
    _relativeRisk?: Element;
    /**
     * Timeframe or age range
     * Indicates the period of time or age range of the subject to which the specified probability applies.
     * If not specified, the risk applies "over the subject's lifespan".
     */
    whenPeriod?: Period;
    /**
     * Timeframe or age range
     * Indicates the period of time or age range of the subject to which the specified probability applies.
     * If not specified, the risk applies "over the subject's lifespan".
     */
    whenRange?: Range;
    /**
     * Explanation of prediction
     * Additional information explaining the basis for the prediction.
     */
    rationale?: string;
    /**
     * Extension for rationale
     **/
    _rationale?: Element;
}
/**
 * Potential outcomes for a subject with likelihood
 * An assessment of the likely outcome(s) for a patient or other subject as well as the likelihood of each outcome.
 */
export interface RiskAssessment extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'RiskAssessment';
    /**
     * Unique identifier for the assessment
     * Business identifier assigned to the risk assessment.
     */
    identifier?: Identifier[];
    /**
     * Request fulfilled by this assessment
     * A reference to the request that is fulfilled by this risk assessment.
     */
    basedOn?: Reference;
    /**
     * Part of this occurrence
     * A reference to a resource that this risk assessment is part of, such as a Procedure.
     */
    parent?: Reference;
    /**
     * Evaluation mechanism
     * The algorithm, process or mechanism used to evaluate the risk.
     */
    method?: CodeableConcept;
    /**
     * Type of assessment
     * The type of the risk assessment performed.
     */
    code?: CodeableConcept;
    /**
     * Who/what does assessment apply to?
     * The patient or group the risk assessment applies to.
     */
    subject: Reference;
    /**
     * Where was assessment performed?
     * The encounter where the assessment was performed.
     */
    encounter?: Reference;
    /**
     * When was assessment made?
     * The date (and possibly time) the risk assessment was performed.
     */
    occurrenceDateTime?: dateTime;
    /**
     * Extension for occurrenceDateTime
     **/
    _occurrenceDateTime?: Element;
    /**
     * When was assessment made?
     * The date (and possibly time) the risk assessment was performed.
     */
    occurrencePeriod?: Period;
    /**
     * Condition assessed
     * For assessments or prognosis specific to a particular condition, indicates the condition being assessed.
     */
    condition?: Reference;
    /**
     * Who did assessment?
     * The provider or software application that performed the assessment.
     */
    performer?: Reference;
    /**
     * Why the assessment was necessary?
     * The reason the risk assessment was performed.
     */
    reasonCode?: CodeableConcept[];
    /**
     * Why the assessment was necessary?
     * Resources supporting the reason the risk assessment was performed.
     */
    reasonReference?: Reference[];
    /**
     * Information used in assessment
     * Indicates the source data considered as part of the assessment (for example, FamilyHistory, Observations, Procedures, Conditions, etc.).
     */
    basis?: Reference[];
    /**
     * Outcome predicted
     * Describes the expected outcome for the subject.
     * Multiple repetitions can be used to identify the same type of outcome in different timeframes as well as different types of outcomes.
     */
    prediction?: RiskAssessmentPrediction[];
    /**
     * How to reduce risk
     * A description of the steps that might be taken to reduce the identified risk(s).
     */
    mitigation?: string;
    /**
     * Extension for mitigation
     **/
    _mitigation?: Element;
    /**
     * Comments on the risk assessment
     * Additional comments about the risk assessment.
     */
    note?: Annotation[];
    /**
     * registered | preliminary | final | amended +
     * The status of the RiskAssessment, using the same statuses as an Observation.
     */
    status: RiskAssessmentStatus;
}
/**
 * What sample size was involved?
 * A description of the size of the sample involved in the synthesis.
 */
export interface RiskEvidenceSynthesisSampleSize extends BackboneElement {
    /**
     * Description of sample size
     * Human-readable summary of sample size.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * How many studies?
     * Number of studies included in this evidence synthesis.
     */
    numberOfStudies?: integer;
    /**
     * Extension for numberOfStudies
     **/
    _numberOfStudies?: Element;
    /**
     * How many participants?
     * Number of participants included in this evidence synthesis.
     */
    numberOfParticipants?: integer;
    /**
     * Extension for numberOfParticipants
     **/
    _numberOfParticipants?: Element;
}
/**
 * How precise the estimate is
 * A description of the precision of the estimate for the effect.
 */
export interface RiskEvidenceSynthesisRiskEstimatePrecisionEstimate extends BackboneElement {
    /**
     * Type of precision estimate
     * Examples include confidence interval and interquartile range.
     */
    type?: CodeableConcept;
    /**
     * Level of confidence interval
     * Use 95 for a 95% confidence interval.
     */
    level?: decimal;
    /**
     * Extension for level
     **/
    _level?: Element;
    /**
     * Lower bound
     * Lower bound of confidence interval.
     */
    from?: decimal;
    /**
     * Extension for from
     **/
    _from?: Element;
    /**
     * Upper bound
     * Upper bound of confidence interval.
     */
    to?: decimal;
    /**
     * Extension for to
     **/
    _to?: Element;
}
/**
 * What was the estimated risk
 * The estimated risk of the outcome.
 */
export interface RiskEvidenceSynthesisRiskEstimate extends BackboneElement {
    /**
     * Description of risk estimate
     * Human-readable summary of risk estimate.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Type of risk estimate
     * Examples include proportion and mean.
     */
    type?: CodeableConcept;
    /**
     * Point estimate
     * The point estimate of the risk estimate.
     */
    value?: decimal;
    /**
     * Extension for value
     **/
    _value?: Element;
    /**
     * What unit is the outcome described in?
     * Specifies the UCUM unit for the outcome.
     */
    unitOfMeasure?: CodeableConcept;
    /**
     * Sample size for group measured
     * The sample size for the group that was measured for this risk estimate.
     */
    denominatorCount?: integer;
    /**
     * Extension for denominatorCount
     **/
    _denominatorCount?: Element;
    /**
     * Number with the outcome
     * The number of group members with the outcome of interest.
     */
    numeratorCount?: integer;
    /**
     * Extension for numeratorCount
     **/
    _numeratorCount?: Element;
    /**
     * How precise the estimate is
     * A description of the precision of the estimate for the effect.
     */
    precisionEstimate?: RiskEvidenceSynthesisRiskEstimatePrecisionEstimate[];
}
/**
 * A component that contributes to the overall certainty
 * A description of a component of the overall certainty.
 */
export interface RiskEvidenceSynthesisCertaintyCertaintySubcomponent extends BackboneElement {
    /**
     * Type of subcomponent of certainty rating
     * Type of subcomponent of certainty rating.
     */
    type?: CodeableConcept;
    /**
     * Subcomponent certainty rating
     * A rating of a subcomponent of rating certainty.
     */
    rating?: CodeableConcept[];
    /**
     * Used for footnotes or explanatory notes
     * A human-readable string to clarify or explain concepts about the resource.
     */
    note?: Annotation[];
}
/**
 * How certain is the risk
 * A description of the certainty of the risk estimate.
 */
export interface RiskEvidenceSynthesisCertainty extends BackboneElement {
    /**
     * Certainty rating
     * A rating of the certainty of the effect estimate.
     */
    rating?: CodeableConcept[];
    /**
     * Used for footnotes or explanatory notes
     * A human-readable string to clarify or explain concepts about the resource.
     */
    note?: Annotation[];
    /**
     * A component that contributes to the overall certainty
     * A description of a component of the overall certainty.
     */
    certaintySubcomponent?: RiskEvidenceSynthesisCertaintyCertaintySubcomponent[];
}
/**
 * A quantified estimate of risk based on a body of evidence
 * The RiskEvidenceSynthesis resource describes the likelihood of an outcome in a population plus exposure state where the risk estimate is derived from a combination of research studies.
 */
export interface RiskEvidenceSynthesis extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'RiskEvidenceSynthesis';
    /**
     * Canonical identifier for this risk evidence synthesis, represented as a URI (globally unique)
     * An absolute URI that is used to identify this risk evidence synthesis when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this risk evidence synthesis is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the risk evidence synthesis is stored on different servers.
     * Can be a urn:uuid: or a urn:oid: but real http: addresses are preferred.  Multiple instances may share the same URL if they have a distinct version.

The determination of when to create a new version of a resource (same url, new version) vs. defining a new artifact is up to the author.  Considerations for making this decision are found in [Technical and Business Versions](resource.html#versions).

In some cases, the resource can no longer be found at the stated url, but the url itself cannot change. Implementations can use the [meta.source](resource.html#meta) element to indicate where the current master source of the resource can be found.
     */
    url?: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Additional identifier for the risk evidence synthesis
     * A formal identifier that is used to identify this risk evidence synthesis when it is represented in other formats, or referenced in a specification, model, design or an instance.
     * Typically, this is used for identifiers that can go in an HL7 V3 II (instance identifier) data type, and can then identify this risk evidence synthesis outside of FHIR, where it is not possible to use the logical URI.
     */
    identifier?: Identifier[];
    /**
     * Business version of the risk evidence synthesis
     * The identifier that is used to identify this version of the risk evidence synthesis when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the risk evidence synthesis 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.
     * There may be different risk evidence synthesis instances that have the same identifier but different versions.  The version can be appended to the url in a reference to allow a reference to a particular business version of the risk evidence synthesis with the format [url]|[version].
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
    /**
     * Name for this risk evidence synthesis (computer friendly)
     * A natural language name identifying the risk evidence synthesis. This name should be usable as an identifier for the module by machine processing applications such as code generation.
     * The name is not expected to be globally unique. The name should be a simple alphanumeric type name to ensure that it is machine-processing friendly.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Name for this risk evidence synthesis (human friendly)
     * A short, descriptive, user-friendly title for the risk evidence synthesis.
     * This name does not need to be machine-processing friendly and may contain punctuation, white-space, etc.
     */
    title?: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * Date last changed
     * The date  (and optionally time) when the risk evidence synthesis was published. The date must change 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 risk evidence synthesis changes.
     * Note that this is not the same as the resource last-modified-date, since the resource may be a secondary representation of the risk evidence synthesis. Additional specific dates may be added as extensions or be found by consulting Provenances associated with past versions of the resource.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Name of the publisher (organization or individual)
     * The name of the organization or individual that published the risk evidence synthesis.
     * Usually an organization but may be an individual. The publisher (or steward) of the risk evidence synthesis is the organization or individual primarily responsible for the maintenance and upkeep of the risk evidence synthesis. This is not necessarily the same individual or organization that developed and initially authored the content. The publisher is the primary point of contact for questions or issues with the risk evidence synthesis. This item SHOULD be populated unless the information is available from context.
     */
    publisher?: string;
    /**
     * Extension for publisher
     **/
    _publisher?: Element;
    /**
     * Contact details for the publisher
     * Contact details to assist a user in finding and communicating with the publisher.
     * May be a web site, an email address, a telephone number, etc.
     */
    contact?: ContactDetail[];
    /**
     * Natural language description of the risk evidence synthesis
     * A free text natural language description of the risk evidence synthesis from a consumer's perspective.
     * This description can be used to capture details such as why the risk evidence synthesis was built, comments about misuse, instructions for clinical use and interpretation, literature references, examples from the paper world, etc. It is not a rendering of the risk evidence synthesis as conveyed in the 'text' field of the resource itself. This item SHOULD be populated unless the information is available from context (e.g. the language of the risk evidence synthesis is presumed to be the predominant language in the place the risk evidence synthesis was created).
     */
    description?: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Used for footnotes or explanatory notes
     * A human-readable string to clarify or explain concepts about the resource.
     */
    note?: Annotation[];
    /**
     * The context that the content is intended to support
     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate risk evidence synthesis instances.
     * When multiple useContexts are specified, there is no expectation that all or any of the contexts apply.
     */
    useContext?: UsageContext[];
    /**
     * Intended jurisdiction for risk evidence synthesis (if applicable)
     * A legal or geographic region in which the risk evidence synthesis is intended to be used.
     * It may be possible for the risk evidence synthesis to be used in jurisdictions other than those for which it was originally designed or intended.
     */
    jurisdiction?: CodeableConcept[];
    /**
     * Use and/or publishing restrictions
     * A copyright statement relating to the risk evidence synthesis and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the risk evidence synthesis.
     */
    copyright?: markdown;
    /**
     * Extension for copyright
     **/
    _copyright?: Element;
    /**
     * When the risk evidence synthesis was approved by publisher
     * The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
     * The 'date' element may be more recent than the approval date because of minor changes or editorial corrections.
     */
    approvalDate?: date;
    /**
     * Extension for approvalDate
     **/
    _approvalDate?: Element;
    /**
     * When the risk evidence synthesis was last reviewed
     * The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.
     * If specified, this date follows the original approval date.
     */
    lastReviewDate?: date;
    /**
     * Extension for lastReviewDate
     **/
    _lastReviewDate?: Element;
    /**
     * When the risk evidence synthesis is expected to be used
     * The period during which the risk evidence synthesis content was or is planned to be in active use.
     * The effective period for a risk evidence synthesis  determines when the content is applicable for usage and is independent of publication and review dates. For example, a measure intended to be used for the year 2016 might be published in 2015.
     */
    effectivePeriod?: Period;
    /**
     * The category of the EffectEvidenceSynthesis, such as Education, Treatment, Assessment, etc.
     * Descriptive topics related to the content of the RiskEvidenceSynthesis. Topics provide a high-level categorization grouping types of EffectEvidenceSynthesiss that can be useful for filtering and searching.
     */
    topic?: CodeableConcept[];
    /**
     * Who authored the content
     * An individiual or organization primarily involved in the creation and maintenance of the content.
     */
    author?: ContactDetail[];
    /**
     * Who edited the content
     * An individual or organization primarily responsible for internal coherence of the content.
     */
    editor?: ContactDetail[];
    /**
     * Who reviewed the content
     * An individual or organization primarily responsible for review of some aspect of the content.
     */
    reviewer?: ContactDetail[];
    /**
     * Who endorsed the content
     * An individual or organization responsible for officially endorsing the content for use in some setting.
     */
    endorser?: ContactDetail[];
    /**
     * Additional documentation, citations, etc.
     * Related artifacts such as additional documentation, justification, or bibliographic references.
     * Each related artifact is either an attachment, or a reference to another resource, but not both.
     */
    relatedArtifact?: RelatedArtifact[];
    /**
     * Type of synthesis
     * Type of synthesis eg meta-analysis.
     */
    synthesisType?: CodeableConcept;
    /**
     * Type of study
     * Type of study eg randomized trial.
     */
    studyType?: CodeableConcept;
    /**
     * What population?
     * A reference to a EvidenceVariable resource that defines the population for the research.
     */
    population: Reference;
    /**
     * What exposure?
     * A reference to a EvidenceVariable resource that defines the exposure for the research.
     */
    exposure?: Reference;
    /**
     * What outcome?
     * A reference to a EvidenceVariable resomece that defines the outcome for the research.
     */
    outcome: Reference;
    /**
     * What sample size was involved?
     * A description of the size of the sample involved in the synthesis.
     */
    sampleSize?: RiskEvidenceSynthesisSampleSize;
    /**
     * What was the estimated risk
     * The estimated risk of the outcome.
     */
    riskEstimate?: RiskEvidenceSynthesisRiskEstimate;
    /**
     * How certain is the risk
     * A description of the certainty of the risk estimate.
     */
    certainty?: RiskEvidenceSynthesisCertainty[];
    /**
     * draft | active | retired | unknown
     * The status of this risk evidence synthesis. Enables tracking the life-cycle of the content.
     * Allows filtering of risk evidence synthesiss that are appropriate for use versus not.
     */
    status: RiskEvidenceSynthesisPublicationStatus;
}
/**
 * A container for slots of time that may be available for booking appointments
 * A container for slots of time that may be available for booking appointments.
 */
export interface Schedule extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Schedule';
    /**
     * External Ids for this item
     * External Ids for this item.
     */
    identifier?: Identifier[];
    /**
     * Whether this schedule is in active use
     * Whether this schedule record is in active use or should not be used (such as was entered in error).
     * This element is labeled as a modifier because it may be used to mark that the resource was created in error.
     */
    active?: boolean;
    /**
     * Extension for active
     **/
    _active?: Element;
    /**
     * High-level category
     * A broad categorization of the service that is to be performed during this appointment.
     */
    serviceCategory?: CodeableConcept[];
    /**
     * Specific service
     * The specific service that is to be performed during this appointment.
     */
    serviceType?: CodeableConcept[];
    /**
     * Type of specialty needed
     * The specialty of a practitioner that would be required to perform the service requested in this appointment.
     */
    specialty?: CodeableConcept[];
    /**
     * Resource(s) that availability information is being provided for
     * Slots that reference this schedule resource provide the availability details to these referenced resource(s).
     * The capacity to support multiple referenced resource types should be used in cases where the specific resources themselves cannot be scheduled without the other, and thus only make sense to the system exposing them as a group. Common examples of this are where the combination of a practitioner and a room (Location) are always required by a system.
     */
    actor: Reference[];
    /**
     * Period of time covered by schedule
     * The period of time that the slots that reference 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.
     */
    planningHorizon?: Period;
    /**
     * Comments on availability
     * Comments on the availability to describe any extended information. Such as custom constraints on the slots that may be associated.
     */
    comment?: string;
    /**
     * Extension for comment
     **/
    _comment?: Element;
}
/**
 * For Composite resources to define the parts
 * Used to define the parts of a composite search parameter.
 */
export interface SearchParameterComponent extends BackboneElement {
    /**
     * Defines how the part works
     * The definition of the search parameter that describes this part.
     */
    definition: canonical;
    /**
     * Extension for definition
     **/
    _definition?: Element;
    /**
     * Subexpression relative to main expression
     * A sub-expression that defines how to extract values for this component from the output of the main SearchParameter.expression.
     * This expression overrides the expression in the definition and extracts the index values from the outcome of the composite expression.
     */
    expression: string;
    /**
     * Extension for expression
     **/
    _expression?: Element;
}
/**
 * Search parameter for a resource
 * A search parameter that defines a named search item that can be used to search/filter on a resource.
 * In FHIR, search is not performed directly on a resource (by XML or JSON path), but on a named parameter that maps into the resource content.
 */
export interface SearchParameter extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'SearchParameter';
    /**
     * Canonical identifier for this search parameter, represented as a URI (globally unique)
     * An absolute URI that is used to identify this search parameter when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this search parameter is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the search parameter is stored on different servers.
     * Can be a urn:uuid: or a urn:oid: but real http: addresses are preferred.  Multiple instances may share the same URL if they have a distinct version.

The determination of when to create a new version of a resource (same url, new version) vs. defining a new artifact is up to the author.  Considerations for making this decision are found in [Technical and Business Versions](resource.html#versions).

In some cases, the resource can no longer be found at the stated url, but the url itself cannot change. Implementations can use the [meta.source](resource.html#meta) element to indicate where the current master source of the resource can be found.
     */
    url: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Business version of the search parameter
     * 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.
     * There may be different search parameter instances that have the same identifier but different versions.  The version can be appended to the url in a reference to allow a reference to a particular business version of the search parameter with the format [url]|[version].
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
    /**
     * Name for this search parameter (computer friendly)
     * 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.
     * The name is not expected to be globally unique. The name should be a simple alphanumeric type name to ensure that it is machine-processing friendly.
     */
    name: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Original definition for the search parameter
     * 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.
     * The intent of this is that a server can designate that it provides support for a search parameter defined in the specification itself (e.g.  [`value-quantity`](http://hl7.org/fhir/SearchParameter/Observation-value-quantity), but detail how it is supported by the server.
     */
    derivedFrom?: canonical;
    /**
     * Extension for derivedFrom
     **/
    _derivedFrom?: Element;
    /**
     * For testing purposes, not real usage
     * 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.
     * Allows filtering of search parameters that are appropriate for use versus not.
     */
    experimental?: boolean;
    /**
     * Extension for experimental
     **/
    _experimental?: Element;
    /**
     * Date last changed
     * The date  (and optionally time) when the search parameter was published. The date must change 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.
     * Note that this is not the same as the resource last-modified-date, since the resource may be a secondary representation of the search parameter. Additional specific dates may be added as extensions or be found by consulting Provenances associated with past versions of the resource.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Name of the publisher (organization or individual)
     * The name of the organization or individual that published the search parameter.
     * Usually an organization but may be an individual. The publisher (or steward) of the search parameter is the organization or individual primarily responsible for the maintenance and upkeep of the search parameter. This is not necessarily the same individual or organization that developed and initially authored the content. The publisher is the primary point of contact for questions or issues with the search parameter. This item SHOULD be populated unless the information is available from context.
     */
    publisher?: string;
    /**
     * Extension for publisher
     **/
    _publisher?: Element;
    /**
     * Contact details for the publisher
     * Contact details to assist a user in finding and communicating with the publisher.
     * May be a web site, an email address, a telephone number, etc.
     */
    contact?: ContactDetail[];
    /**
     * Natural language description of the search parameter
     * And how it used.
     * This description can be used to capture details such as why the search parameter was built, comments about misuse, instructions for clinical use and interpretation, literature references, examples from the paper world, etc. It is not a rendering of the search parameter as conveyed in the 'text' field of the resource itself. This item SHOULD be populated unless the information is available from context (e.g. the language of the search parameter is presumed to be the predominant language in the place the search parameter was created).
     */
    description: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * The context that the content is intended to support
     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate search parameter instances.
     * When multiple useContexts are specified, there is no expectation that all or any of the contexts apply.
     */
    useContext?: UsageContext[];
    /**
     * Intended jurisdiction for search parameter (if applicable)
     * A legal or geographic region in which the search parameter is intended to be used.
     * It may be possible for the search parameter to be used in jurisdictions other than those for which it was originally designed or intended.
     */
    jurisdiction?: CodeableConcept[];
    /**
     * Why this search parameter is defined
     * Explanation of why this search parameter is needed and why it has been designed as it has.
     * This element does not describe the usage of the search parameter. Instead, it provides traceability of ''why'' the resource is either needed or ''why'' it is defined as it is.  This may be used to point to source materials or specifications that drove the structure of this search parameter.
     */
    purpose?: markdown;
    /**
     * Extension for purpose
     **/
    _purpose?: Element;
    /**
     * Code used in URL
     * The code used in the URL or the parameter name in a parameters resource for this search parameter.
     * For maximum compatibility, use only lowercase ASCII characters.
     */
    code: code;
    /**
     * Extension for code
     **/
    _code?: Element;
    /**
     * The resource type(s) this search parameter applies to
     * The base resource type(s) that this search parameter can be used against.
     * A search parameter must always apply to at least one resource type. When search parameters apply to more than one resource type, they can be used against any of the listed resource types, or in a cross-type search (see [Cross Resource Search](http.html#xres-search)).
     */
    base: code[];
    /**
     * Extension for base
     **/
    _base?: Element[];
    /**
     * FHIRPath expression that extracts the values
     * A FHIRPath expression that returns a set of elements for the search parameter.
     * Note that the elements returned by the expression are sometimes complex elements where logic is required to determine quite how to handle them; e.g. CodeableConcepts may contain text and/or multiple codings, where the codings themselves contain a code and a system. For composite search parameters, the outcome of the expression must a collection of base elements from which the composites are derived.
     */
    expression?: string;
    /**
     * Extension for expression
     **/
    _expression?: Element;
    /**
     * XPath that extracts the values
     * An XPath expression that returns a set of elements for the search parameter.
     * Note that the elements returned by the XPath are sometimes complex elements where logic is required to determine quite how to handle them; e.g. CodeableConcepts may contain text and/or multiple codings, where the codings themselves contain a code and a system.
     */
    xpath?: string;
    /**
     * Extension for xpath
     **/
    _xpath?: Element;
    /**
     * Types of resource (if a resource reference)
     * Types of resource (if a resource is referenced).
     */
    target?: code[];
    /**
     * Extension for target
     **/
    _target?: Element[];
    /**
     * Allow multiple values per parameter (or)
     * Whether multiple values are allowed for each time the parameter exists. Values are separated by commas, and the parameter matches if any of the values match.
     */
    multipleOr?: boolean;
    /**
     * Extension for multipleOr
     **/
    _multipleOr?: Element;
    /**
     * Allow multiple parameters (and)
     * Whether multiple parameters are allowed - e.g. more than one parameter with the same name. The search matches if all the parameters match.
     */
    multipleAnd?: boolean;
    /**
     * Extension for multipleAnd
     **/
    _multipleAnd?: Element;
    /**
     * Chained names supported
     * 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.
     * Systems are not required to list all the chain names they support, but if they don't list them, clients might not know to use them.
     */
    chain?: string[];
    /**
     * Extension for chain
     **/
    _chain?: Element[];
    /**
     * For Composite resources to define the parts
     * Used to define the parts of a composite search parameter.
     */
    component?: SearchParameterComponent[];
    /**
     * draft | active | retired | unknown
     * The status of this search parameter. Enables tracking the life-cycle of the content.
     * Allows filtering of search parameters that are appropriate for use versus not.
     */
    status: SearchParameterPublicationStatus;
    /**
     * number | date | string | token | reference | composite | quantity | uri | special
     * The type of value that a search parameter may contain, and how the content is interpreted.
     */
    type: SearchParameterSearchParamType;
    /**
     * normal | phonetic | nearby | distance | other
     * How the search parameter relates to the set of elements returned by evaluating the xpath query.
     */
    xpathUsage?: SearchParameterXPathUsageType;
    /**
     * eq | ne | gt | lt | ge | le | sa | eb | ap
     * Comparators supported for the search parameter.
     * If no comparators are listed, clients should not expect servers to support any comparators.
     */
    comparator?: SearchParameterSearchComparator[];
    /**
     * missing | exact | contains | not | text | in | not-in | below | above | type | identifier | ofType
     * A modifier supported for the search parameter.
     */
    modifier?: SearchParameterSearchModifierCode[];
}
/**
 * A request for a service to be performed
 * A record of a request for service such as diagnostic investigations, treatments, or operations to be performed.
 */
export interface ServiceRequest extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'ServiceRequest';
    /**
     * Identifiers assigned to this order
     * Identifiers assigned to this order instance by the orderer and/or the receiver and/or order fulfiller.
     * The identifier.type element is used to distinguish between the identifiers assigned by the orderer (known as the 'Placer' in HL7 v2) and the producer of the observations in response to the order (known as the 'Filler' in HL7 v2).  For further discussion and examples see the resource notes section below.
     */
    identifier?: Identifier[];
    /**
     * Instantiates FHIR protocol or definition
     * The URL pointing to a FHIR-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this ServiceRequest.
     * Note: This is a business identifier, not a resource identifier (see [discussion](resource.html#identifiers)).  It is best practice for the identifier to only appear on a single resource instance, however business practices may occasionally dictate that multiple resource instances with the same identifier can exist - possibly even with different resource types.  For example, multiple Patient and a Person resource instance might share the same social insurance number.
     */
    instantiatesCanonical?: canonical[];
    /**
     * Extension for instantiatesCanonical
     **/
    _instantiatesCanonical?: Element[];
    /**
     * Instantiates external protocol or definition
     * The URL pointing to an externally maintained protocol, guideline, orderset or other definition that is adhered to in whole or in part by this ServiceRequest.
     * This might be an HTML page, PDF, etc. or could just be a non-resolvable URI identifier.
     */
    instantiatesUri?: uri[];
    /**
     * Extension for instantiatesUri
     **/
    _instantiatesUri?: Element[];
    /**
     * What request fulfills
     * Plan/proposal/order fulfilled by this request.
     */
    basedOn?: Reference[];
    /**
     * What request replaces
     * The request takes the place of the referenced completed or terminated request(s).
     */
    replaces?: Reference[];
    /**
     * Composite Request ID
     * A shared identifier common to all service requests that were authorized more or less simultaneously by a single author, representing the composite or group identifier.
     * Requests are linked either by a "basedOn" relationship (i.e. one request is fulfilling another) or by having a common requisition. Requests that are part of the same requisition are generally treated independently from the perspective of changing their state or maintaining them after initial creation.
     */
    requisition?: Identifier;
    /**
     * Classification of service
     * A code that classifies the service for searching, sorting and display purposes (e.g. "Surgical Procedure").
     * There may be multiple axis of categorization depending on the context or use case for retrieving or displaying the resource.  The level of granularity is defined by the category concepts in the value set.
     */
    category?: CodeableConcept[];
    /**
     * True if service/procedure should not be performed
     * Set this to true if the record is saying that the service/procedure should NOT be performed.
     * In general, only the code and timeframe will be present, though occasional additional qualifiers such as body site or even performer could be included to narrow the scope of the prohibition.  If the ServiceRequest.code and ServiceRequest.doNotPerform both contain negation, that will reinforce prohibition and should not have a double negative interpretation.
     */
    doNotPerform?: boolean;
    /**
     * Extension for doNotPerform
     **/
    _doNotPerform?: Element;
    /**
     * What is being requested/ordered
     * A code that identifies a particular service (i.e., procedure, diagnostic investigation, or panel of investigations) that have been requested.
     * Many laboratory and radiology procedure codes embed the specimen/organ system in the test order name, for example,  serum or serum/plasma glucose, or a chest x-ray. The specimen might not be recorded separately from the test code.
     */
    code?: CodeableConcept;
    /**
     * Additional order information
     * Additional details and instructions about the how the services are to be delivered.   For example, and order for a urinary catheter may have an order detail for an external or indwelling catheter, or an order for a bandage may require additional instructions specifying how the bandage should be applied.
     * For information from the medical record intended to support the delivery of the requested services, use the `supportingInformation` element.
     */
    orderDetail?: CodeableConcept[];
    /**
     * Service amount
     * An amount of service being requested which can be a quantity ( for example $1,500 home modification), a ratio ( for example, 20 half day visits per month), or a range (2.0 to 1.8 Gy per fraction).
     */
    quantityQuantity?: Quantity;
    /**
     * Service amount
     * An amount of service being requested which can be a quantity ( for example $1,500 home modification), a ratio ( for example, 20 half day visits per month), or a range (2.0 to 1.8 Gy per fraction).
     */
    quantityRatio?: Ratio;
    /**
     * Service amount
     * An amount of service being requested which can be a quantity ( for example $1,500 home modification), a ratio ( for example, 20 half day visits per month), or a range (2.0 to 1.8 Gy per fraction).
     */
    quantityRange?: Range;
    /**
     * Individual or Entity the service is ordered for
     * On whom or what the service 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).
     */
    subject: Reference;
    /**
     * Encounter in which the request was created
     * An encounter that provides additional information about the healthcare context in which this request is made.
     */
    encounter?: Reference;
    /**
     * When service should occur
     * The date/time at which the requested service should occur.
     */
    occurrenceDateTime?: dateTime;
    /**
     * Extension for occurrenceDateTime
     **/
    _occurrenceDateTime?: Element;
    /**
     * When service should occur
     * The date/time at which the requested service should occur.
     */
    occurrencePeriod?: Period;
    /**
     * When service should occur
     * The date/time at which the requested service should occur.
     */
    occurrenceTiming?: Timing;
    /**
     * Preconditions for service
     * If a CodeableConcept is present, it indicates the pre-condition for performing the service.  For example "pain", "on flare-up", etc.
     */
    asNeededBoolean?: boolean;
    /**
     * Extension for asNeededBoolean
     **/
    _asNeededBoolean?: Element;
    /**
     * Preconditions for service
     * If a CodeableConcept is present, it indicates the pre-condition for performing the service.  For example "pain", "on flare-up", etc.
     */
    asNeededCodeableConcept?: CodeableConcept;
    /**
     * Date request signed
     * When the request transitioned to being actionable.
     */
    authoredOn?: dateTime;
    /**
     * Extension for authoredOn
     **/
    _authoredOn?: Element;
    /**
     * Who/what is requesting service
     * The individual who initiated the request and has responsibility for its activation.
     * This not the dispatcher, but rather who is the authorizer.  This element is not intended to handle delegation which would generally be managed through the Provenance resource.
     */
    requester?: Reference;
    /**
     * Performer role
     * Desired type of performer for doing the requested service.
     * This is a  role, not  a participation type.  In other words, does not describe the task but describes the capacity.  For example, “compounding pharmacy”, “psychiatrist” or “internal referral”.
     */
    performerType?: CodeableConcept;
    /**
     * Requested performer
     * The desired performer for doing the requested service.  For example, the surgeon, dermatopathologist, endoscopist, etc.
     * If multiple performers are present, it is interpreted as a list of *alternative* performers without any preference regardless of order.  If order of preference is needed use the [request-performerOrder extension](extension-request-performerorder.html).  Use CareTeam to represent a group of performers (for example, Practitioner A *and* Practitioner B).
     */
    performer?: Reference[];
    /**
     * Requested location
     * The preferred location(s) where the procedure should actually happen in coded or free text form. E.g. at home or nursing day care center.
     */
    locationCode?: CodeableConcept[];
    /**
     * Requested location
     * A reference to the the preferred location(s) where the procedure should actually happen. E.g. at home or nursing day care center.
     */
    locationReference?: Reference[];
    /**
     * Explanation/Justification for procedure or service
     * An explanation or justification for why this service is being requested in coded or textual form.   This is often for billing purposes.  May relate to the resources referred to in `supportingInfo`.
     * This element represents why the referral is being made and may be used to decide how the service will be performed, or even if it will be performed at all.   Use `CodeableConcept.text` element if the data is free (uncoded) text as shown in the [CT Scan example](servicerequest-example-di.html).
     */
    reasonCode?: CodeableConcept[];
    /**
     * Explanation/Justification for service or service
     * Indicates another resource that provides a justification for why this service is being requested.   May relate to the resources referred to in `supportingInfo`.
     * This element represents why the referral is being made and may be used to decide how the service will be performed, or even if it will be performed at all.    To be as specific as possible,  a reference to  *Observation* or *Condition* should be used if available.  Otherwise when referencing  *DiagnosticReport*  it should contain a finding  in `DiagnosticReport.conclusion` and/or `DiagnosticReport.conclusionCode`.   When using a reference to *DocumentReference*, the target document should contain clear findings language providing the relevant reason for this service request.  Use  the CodeableConcept text element in `ServiceRequest.reasonCode` if the data is free (uncoded) text as shown in the [CT Scan example](servicerequest-example-di.html).
     */
    reasonReference?: Reference[];
    /**
     * Associated insurance coverage
     * Insurance plans, coverage extensions, pre-authorizations and/or pre-determinations that may be needed for delivering the requested service.
     */
    insurance?: Reference[];
    /**
     * Additional clinical information
     * Additional clinical information about the patient or specimen that may influence the services 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.
     * To represent information about how the services are to be delivered use the `instructions` element.
     */
    supportingInfo?: Reference[];
    /**
     * Procedure Samples
     * One or more specimens that the laboratory procedure will use.
     * Many diagnostic procedures need a specimen, but the request itself is not actually about the specimen. This element is for when the diagnostic is requested on already existing specimens and the request points to the specimen it applies to.    Conversely, if the request is entered first with an unknown specimen, then the [Specimen](specimen.html) resource points to the ServiceRequest.
     */
    specimen?: Reference[];
    /**
     * Location on Body
     * Anatomic location where the procedure should be performed. This is the target site.
     * Only used if not implicit in the code found in ServiceRequest.code.  If the use case requires BodySite to be handled as a separate resource instead of an inline coded element (e.g. to identify and track separately)  then use the standard extension [procedure-targetBodyStructure](extension-procedure-targetbodystructure.html).
     */
    bodySite?: CodeableConcept[];
    /**
     * Comments
     * Any other notes and comments made about the service request. For example, internal billing notes.
     */
    note?: Annotation[];
    /**
     * Patient or consumer-oriented instructions
     * Instructions in terms that are understood by the patient or consumer.
     */
    patientInstruction?: string;
    /**
     * Extension for patientInstruction
     **/
    _patientInstruction?: Element;
    /**
     * Request provenance
     * Key events in the history of the request.
     * This might not include provenances for all versions of the request – only those deemed “relevant” or important.
This SHALL NOT include the Provenance associated with this current version of the resource.  (If that provenance is deemed to be a “relevant” change, it will need to be added as part of a later update.  Until then, it can be queried directly as the Provenance that points to this version using _revinclude
All Provenances should have some historical version of this Request as their subject.
     */
    relevantHistory?: Reference[];
    /**
     * draft | active | on-hold | revoked | completed | entered-in-error | unknown
     * The status of the order.
     * The status is generally fully in the control of the requester - they determine whether the order is draft or active and, after it has been activated, competed, cancelled or suspended. States relating to the activities of the performer are reflected on either the corresponding event (see [Event Pattern](event.html) for general discussion) or using the [Task](task.html) resource.
     */
    status: ServiceRequestStatus;
    /**
     * proposal | plan | directive | order | original-order | reflex-order | filler-order | instance-order | option
     * Whether the request is a proposal, plan, an original order or a reflex order.
     * This element is labeled as a modifier because the intent alters when and how the resource is actually applicable.
     */
    intent: ServiceRequestIntent;
    /**
     * routine | urgent | asap | stat
     * Indicates how quickly the ServiceRequest should be addressed with respect to other requests.
     */
    priority?: ServiceRequestPriority;
}
/**
 * A slot of time on a schedule that may be available for booking appointments
 * A slot of time on a schedule that may be available for booking appointments.
 */
export interface Slot extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Slot';
    /**
     * External Ids for this item
     * External Ids for this item.
     */
    identifier?: Identifier[];
    /**
     * A broad categorization of the service that is to be performed during this appointment
     * A broad categorization of the service that is to be performed during this appointment.
     */
    serviceCategory?: CodeableConcept[];
    /**
     * 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
     * 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.
     */
    serviceType?: CodeableConcept[];
    /**
     * The specialty of a practitioner that would be required to perform the service requested in this appointment
     * The specialty of a practitioner that would be required to perform the service requested in this appointment.
     */
    specialty?: CodeableConcept[];
    /**
     * The style of appointment or patient that may be booked in the slot (not service type)
     * The style of appointment or patient that may be booked in the slot (not service type).
     */
    appointmentType?: CodeableConcept;
    /**
     * The schedule resource that this slot defines an interval of status information
     * The schedule resource that this slot defines an interval of status information.
     */
    schedule: Reference;
    /**
     * Date/Time that the slot is to begin
     * Date/Time that the slot is to begin.
     */
    start: instant;
    /**
     * Extension for start
     **/
    _start?: Element;
    /**
     * Date/Time that the slot is to conclude
     * Date/Time that the slot is to conclude.
     */
    end: instant;
    /**
     * Extension for end
     **/
    _end?: Element;
    /**
     * This slot has already been overbooked, appointments are unlikely to be accepted for this time
     * This slot has already been overbooked, appointments are unlikely to be accepted for this time.
     */
    overbooked?: boolean;
    /**
     * Extension for overbooked
     **/
    _overbooked?: Element;
    /**
     * Comments on the slot to describe any extended information. Such as custom constraints on the slot
     * Comments on the slot to describe any extended information. Such as custom constraints on the slot.
     */
    comment?: string;
    /**
     * Extension for comment
     **/
    _comment?: Element;
    /**
     * busy | free | busy-unavailable | busy-tentative | entered-in-error
     * busy | free | busy-unavailable | busy-tentative | entered-in-error.
     */
    status: SlotStatus;
}
/**
 * Collection details
 * Details concerning the specimen collection.
 */
export interface SpecimenCollection extends BackboneElement {
    /**
     * Who collected the specimen
     * Person who collected the specimen.
     */
    collector?: Reference;
    /**
     * Collection time
     * Time when specimen was collected from subject - the physiologically relevant time.
     */
    collectedDateTime?: dateTime;
    /**
     * Extension for collectedDateTime
     **/
    _collectedDateTime?: Element;
    /**
     * Collection time
     * Time when specimen was collected from subject - the physiologically relevant time.
     */
    collectedPeriod?: Period;
    /**
     * How long it took to collect specimen
     * The span of time over which the collection of a specimen occurred.
     */
    duration?: Duration;
    /**
     * The quantity of specimen collected
     * The quantity of specimen collected; for instance the volume of a blood sample, or the physical measurement of an anatomic pathology sample.
     */
    quantity?: Quantity;
    /**
     * Technique used to perform collection
     * A coded value specifying the technique that is used to perform the procedure.
     */
    method?: CodeableConcept;
    /**
     * Anatomical collection site
     * 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.
     * If the use case requires  BodySite to be handled as a separate resource instead of an inline coded element (e.g. to identify and track separately)  then use the standard extension [bodySite](extension-bodysite.html).
     */
    bodySite?: CodeableConcept;
    /**
     * Whether or how long patient abstained from food and/or drink
     * Abstinence or reduction from some or all food, drink, or both, for a period of time prior to sample collection.
     * Representing fasting status using this element is preferred to representing it with an observation using a 'pre-coordinated code'  such as  LOINC 2005-7 (Calcium [Moles/​time] in 2 hour Urine --12 hours fasting), or  using  a component observation ` such as `Observation.component code`  = LOINC 49541-6 (Fasting status - Reported).
     */
    fastingStatusCodeableConcept?: CodeableConcept;
    /**
     * Whether or how long patient abstained from food and/or drink
     * Abstinence or reduction from some or all food, drink, or both, for a period of time prior to sample collection.
     * Representing fasting status using this element is preferred to representing it with an observation using a 'pre-coordinated code'  such as  LOINC 2005-7 (Calcium [Moles/​time] in 2 hour Urine --12 hours fasting), or  using  a component observation ` such as `Observation.component code`  = LOINC 49541-6 (Fasting status - Reported).
     */
    fastingStatusDuration?: Duration;
}
/**
 * Processing and processing step details
 * Details concerning processing and processing steps for the specimen.
 */
export interface SpecimenProcessing extends BackboneElement {
    /**
     * Textual description of procedure
     * Textual description of procedure.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Indicates the treatment step  applied to the specimen
     * A coded value specifying the procedure used to process the specimen.
     */
    procedure?: CodeableConcept;
    /**
     * Material used in the processing step
     * Material used in the processing step.
     */
    additive?: Reference[];
    /**
     * Date and time of specimen processing
     * 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.
     */
    timeDateTime?: dateTime;
    /**
     * Extension for timeDateTime
     **/
    _timeDateTime?: Element;
    /**
     * Date and time of specimen processing
     * 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.
     */
    timePeriod?: Period;
}
/**
 * Direct container of specimen (tube/slide, etc.)
 * The container holding the specimen.  The recursive nature of containers; i.e. blood in tube in tray in rack is not addressed here.
 */
export interface SpecimenContainer extends BackboneElement {
    /**
     * Id for the container
     * 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.
     */
    identifier?: Identifier[];
    /**
     * Textual description of the container
     * Textual description of the container.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Kind of container directly associated with specimen
     * The type of container associated with the specimen (e.g. slide, aliquot, etc.).
     */
    type?: CodeableConcept;
    /**
     * Container volume or size
     * The capacity (volume or other measure) the container may contain.
     */
    capacity?: Quantity;
    /**
     * Quantity of specimen within container
     * The quantity of specimen in the container; may be volume, dimensions, or other appropriate measurements, depending on the specimen type.
     */
    specimenQuantity?: Quantity;
    /**
     * Additive associated with container
     * Introduced substance to preserve, maintain or enhance the specimen. Examples: Formalin, Citrate, EDTA.
     */
    additiveCodeableConcept?: CodeableConcept;
    /**
     * Additive associated with container
     * Introduced substance to preserve, maintain or enhance the specimen. Examples: Formalin, Citrate, EDTA.
     */
    additiveReference?: Reference;
}
/**
 * Sample for analysis
 * A sample to be used for analysis.
 */
export interface Specimen extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Specimen';
    /**
     * External Identifier
     * Id for specimen.
     */
    identifier?: Identifier[];
    /**
     * Identifier assigned by the lab
     * 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.
     */
    accessionIdentifier?: Identifier;
    /**
     * Kind of material that forms the specimen
     * The kind of material that forms the specimen.
     * The type can change the way that a specimen is handled and drives what kind of analyses can properly be performed on the specimen. It is frequently used in diagnostic work flow decision making systems.
     */
    type?: CodeableConcept;
    /**
     * Where the specimen came from. This may be from patient(s), from a location (e.g., the source of an environmental sample), or a sampling of a substance or a device
     * Where the specimen came from. This may be from patient(s), from a location (e.g., the source of an environmental sample), or a sampling of a substance or a device.
     */
    subject?: Reference;
    /**
     * The time when specimen was received for processing
     * Time when specimen was received for processing or testing.
     */
    receivedTime?: dateTime;
    /**
     * Extension for receivedTime
     **/
    _receivedTime?: Element;
    /**
     * Specimen from which this specimen originated
     * Reference to the parent (source) specimen which is used when the specimen was either derived from or a component of another specimen.
     * The parent specimen could be the source from which the current specimen is derived by some processing step (e.g. an aliquot or isolate or extracted nucleic acids from clinical samples) or one of many specimens that were combined to create a pooled sample.
     */
    parent?: Reference[];
    /**
     * Why the specimen was collected
     * Details concerning a service request that required a specimen to be collected.
     * The request may be explicit or implied such with a ServiceRequest that requires a blood draw.
     */
    request?: Reference[];
    /**
     * Collection details
     * Details concerning the specimen collection.
     */
    collection?: SpecimenCollection;
    /**
     * Processing and processing step details
     * Details concerning processing and processing steps for the specimen.
     */
    processing?: SpecimenProcessing[];
    /**
     * Direct container of specimen (tube/slide, etc.)
     * The container holding the specimen.  The recursive nature of containers; i.e. blood in tube in tray in rack is not addressed here.
     */
    container?: SpecimenContainer[];
    /**
     * State of the specimen
     * A mode or state of being that describes the nature of the specimen.
     * Specimen condition is an observation made about the specimen.  It's a point-in-time assessment.  It can be used to assess its quality or appropriateness for a specific test.
     */
    condition?: CodeableConcept[];
    /**
     * Comments
     * To communicate any details or issues about the specimen or during the specimen collection. (for example: broken vial, sent with patient, frozen).
     */
    note?: Annotation[];
    /**
     * available | unavailable | unsatisfactory | entered-in-error
     * The availability of the specimen.
     * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
     */
    status?: SpecimenStatus;
}
/**
 * Additive associated with container
 * Substance introduced in the kind of container to preserve, maintain or enhance the specimen. Examples: Formalin, Citrate, EDTA.
 */
export interface SpecimenDefinitionTypeTestedContainerAdditive extends BackboneElement {
    /**
     * Additive associated with container
     * Substance introduced in the kind of container to preserve, maintain or enhance the specimen. Examples: Formalin, Citrate, EDTA.
     */
    additiveCodeableConcept?: CodeableConcept;
    /**
     * Additive associated with container
     * Substance introduced in the kind of container to preserve, maintain or enhance the specimen. Examples: Formalin, Citrate, EDTA.
     */
    additiveReference?: Reference;
}
/**
 * The specimen's container
 * The specimen's container.
 */
export interface SpecimenDefinitionTypeTestedContainer extends BackboneElement {
    /**
     * Container material
     * The type of material of the container.
     */
    material?: CodeableConcept;
    /**
     * Kind of container associated with the kind of specimen
     * The type of container used to contain this kind of specimen.
     */
    type?: CodeableConcept;
    /**
     * Color of container cap
     * Color of container cap.
     */
    cap?: CodeableConcept;
    /**
     * Container description
     * The textual description of the kind of container.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Container capacity
     * The capacity (volume or other measure) of this kind of container.
     */
    capacity?: Quantity;
    /**
     * Minimum volume
     * The minimum volume to be conditioned in the container.
     */
    minimumVolumeQuantity?: Quantity;
    /**
     * Minimum volume
     * The minimum volume to be conditioned in the container.
     */
    minimumVolumeString?: string;
    /**
     * Extension for minimumVolumeString
     **/
    _minimumVolumeString?: Element;
    /**
     * Additive associated with container
     * Substance introduced in the kind of container to preserve, maintain or enhance the specimen. Examples: Formalin, Citrate, EDTA.
     */
    additive?: SpecimenDefinitionTypeTestedContainerAdditive[];
    /**
     * Specimen container preparation
     * Special processing that should be applied to the container for this kind of specimen.
     */
    preparation?: string;
    /**
     * Extension for preparation
     **/
    _preparation?: Element;
}
/**
 * Specimen handling before testing
 * Set of instructions for preservation/transport of the specimen at a defined temperature interval, prior the testing process.
 */
export interface SpecimenDefinitionTypeTestedHandling extends BackboneElement {
    /**
     * Temperature qualifier
     * It qualifies the interval of temperature, which characterizes an occurrence of handling. Conditions that are not related to temperature may be handled in the instruction element.
     */
    temperatureQualifier?: CodeableConcept;
    /**
     * Temperature range
     * The temperature interval for this set of handling instructions.
     */
    temperatureRange?: Range;
    /**
     * Maximum preservation time
     * The maximum time interval of preservation of the specimen with these conditions.
     */
    maxDuration?: Duration;
    /**
     * Preservation instruction
     * Additional textual instructions for the preservation or transport of the specimen. For instance, 'Protect from light exposure'.
     */
    instruction?: string;
    /**
     * Extension for instruction
     **/
    _instruction?: Element;
}
/**
 * Specimen in container intended for testing by lab
 * Specimen conditioned in a container as expected by the testing laboratory.
 */
export interface SpecimenDefinitionTypeTested extends BackboneElement {
    /**
     * Primary or secondary specimen
     * Primary of secondary specimen.
     */
    isDerived?: boolean;
    /**
     * Extension for isDerived
     **/
    _isDerived?: Element;
    /**
     * Type of intended specimen
     * The kind of specimen conditioned for testing expected by lab.
     */
    type?: CodeableConcept;
    /**
     * The specimen's container
     * The specimen's container.
     */
    container?: SpecimenDefinitionTypeTestedContainer;
    /**
     * Specimen requirements
     * Requirements for delivery and special handling of this kind of conditioned specimen.
     */
    requirement?: string;
    /**
     * Extension for requirement
     **/
    _requirement?: Element;
    /**
     * Specimen retention time
     * The usual time that a specimen of this kind is retained after the ordered tests are completed, for the purpose of additional testing.
     */
    retentionTime?: Duration;
    /**
     * Rejection criterion
     * Criterion for rejection of the specimen in its container by the laboratory.
     */
    rejectionCriterion?: CodeableConcept[];
    /**
     * Specimen handling before testing
     * Set of instructions for preservation/transport of the specimen at a defined temperature interval, prior the testing process.
     */
    handling?: SpecimenDefinitionTypeTestedHandling[];
    /**
     * preferred | alternate
     * The preference for this type of conditioned specimen.
     */
    preference: SpecimenDefinitionSpecimenContainedPreference;
}
/**
 * Kind of specimen
 * A kind of specimen with associated set of requirements.
 */
export interface SpecimenDefinition extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'SpecimenDefinition';
    /**
     * Business identifier of a kind of specimen
     * A business identifier associated with the kind of specimen.
     */
    identifier?: Identifier;
    /**
     * Kind of material to collect
     * The kind of material to be collected.
     */
    typeCollected?: CodeableConcept;
    /**
     * Patient preparation for collection
     * Preparation of the patient for specimen collection.
     */
    patientPreparation?: CodeableConcept[];
    /**
     * Time aspect for collection
     * Time aspect of specimen collection (duration or offset).
     */
    timeAspect?: string;
    /**
     * Extension for timeAspect
     **/
    _timeAspect?: Element;
    /**
     * Specimen collection procedure
     * The action to be performed for collecting the specimen.
     */
    collection?: CodeableConcept[];
    /**
     * Specimen in container intended for testing by lab
     * Specimen conditioned in a container as expected by the testing laboratory.
     */
    typeTested?: SpecimenDefinitionTypeTested[];
}
/**
 * External specification that the content is mapped to
 * An external specification that the content is mapped to.
 */
export interface StructureDefinitionMapping extends BackboneElement {
    /**
     * Internal id when this mapping is used
     * An Internal id that is used to identify this mapping set when specific mappings are made.
     * The specification is described once, with general comments, and then specific mappings are made that reference this declaration.
     */
    identity: id;
    /**
     * Extension for identity
     **/
    _identity?: Element;
    /**
     * Identifies what this mapping refers to
     * An absolute URI that identifies the specification that this mapping is expressed to.
     * A formal identity for the specification being mapped to helps with identifying maps consistently.
     */
    uri?: uri;
    /**
     * Extension for uri
     **/
    _uri?: Element;
    /**
     * Names what this mapping refers to
     * A name for the specification that is being mapped to.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Versions, Issues, Scope limitations etc.
     * Comments about this mapping, including version notes, issues, scope limitations, and other important notes for usage.
     */
    comment?: string;
    /**
     * Extension for comment
     **/
    _comment?: Element;
}
/**
 * If an extension, where it can be used in instances
 * Identifies the types of resource or data type elements to which the extension can be applied.
 */
export interface StructureDefinitionContext extends BackboneElement {
    /**
     * Where the extension can be used in instances
     * An expression that defines where an extension can be used in resources.
     */
    expression: string;
    /**
     * Extension for expression
     **/
    _expression?: Element;
    /**
     * fhirpath | element | extension
     * Defines how to interpret the expression that defines what the context of the extension is.
     */
    type: StructureDefinitionExtensionContextType;
}
/**
 * Snapshot view of the structure
 * A snapshot view is expressed in a standalone form that can be used and interpreted without considering the base StructureDefinition.
 */
export interface StructureDefinitionSnapshot extends BackboneElement {
    /**
     * Definition of elements in the resource (if no StructureDefinition)
     * Captures constraints on each element within the resource.
     */
    element: ElementDefinition[];
}
/**
 * Differential view of the structure
 * A differential view is expressed relative to the base StructureDefinition - a statement of differences that it applies.
 */
export interface StructureDefinitionDifferential extends BackboneElement {
    /**
     * Definition of elements in the resource (if no StructureDefinition)
     * Captures constraints on each element within the resource.
     */
    element: ElementDefinition[];
}
/**
 * Structural Definition
 * 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.
 */
export interface StructureDefinition extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'StructureDefinition';
    /**
     * Canonical identifier for this structure definition, represented as a URI (globally unique)
     * An absolute URI that is used to identify this structure definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this structure definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the structure definition is stored on different servers.
     * Can be a urn:uuid: or a urn:oid: but real http: addresses are preferred.  Multiple instances may share the same URL if they have a distinct version.

The determination of when to create a new version of a resource (same url, new version) vs. defining a new artifact is up to the author.  Considerations for making this decision are found in [Technical and Business Versions](resource.html#versions).

In some cases, the resource can no longer be found at the stated url, but the url itself cannot change. Implementations can use the [meta.source](resource.html#meta) element to indicate where the current master source of the resource can be found.
     */
    url: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Additional identifier for the structure definition
     * 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.
     * Typically, this is used for identifiers that can go in an HL7 V3 II (instance identifier) data type, and can then identify this structure definition outside of FHIR, where it is not possible to use the logical URI.
     */
    identifier?: Identifier[];
    /**
     * Business version of the structure definition
     * 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.
     * There may be different structure definition instances that have the same identifier but different versions.  The version can be appended to the url in a reference to allow a reference to a particular business version of the structure definition with the format [url]|[version].
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
    /**
     * Name for this structure definition (computer friendly)
     * 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.
     * The name is not expected to be globally unique. The name should be a simple alphanumeric type name to ensure that it is machine-processing friendly.Some Examples:

* O2SatObservation
* PresentationReport
* Immunization2
* AcmeAdmissionRecordOld.
     */
    name: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Name for this structure definition (human friendly)
     * A short, descriptive, user-friendly title for the structure definition.
     * This name does not need to be machine-processing friendly and may contain punctuation, white-space, etc.Applications don't have to use this name but can always fall back to it. The title also corresponds to the label for the root element.
     */
    title?: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * For testing purposes, not real usage
     * 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.
     * Allows filtering of structure definitions that are appropriate for use versus not.
     */
    experimental?: boolean;
    /**
     * Extension for experimental
     **/
    _experimental?: Element;
    /**
     * Date last changed
     * The date  (and optionally time) when the structure definition was published. The date must change 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.
     * Note that this is not the same as the resource last-modified-date, since the resource may be a secondary representation of the structure definition. Additional specific dates may be added as extensions or be found by consulting Provenances associated with past versions of the resource.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Name of the publisher (organization or individual)
     * The name of the organization or individual that published the structure definition.
     * Usually an organization but may be an individual. The publisher (or steward) of the structure definition is the organization or individual primarily responsible for the maintenance and upkeep of the structure definition. This is not necessarily the same individual or organization that developed and initially authored the content. The publisher is the primary point of contact for questions or issues with the structure definition. This item SHOULD be populated unless the information is available from context.
     */
    publisher?: string;
    /**
     * Extension for publisher
     **/
    _publisher?: Element;
    /**
     * Contact details for the publisher
     * Contact details to assist a user in finding and communicating with the publisher.
     * May be a web site, an email address, a telephone number, etc.
     */
    contact?: ContactDetail[];
    /**
     * Natural language description of the structure definition
     * A free text natural language description of the structure definition from a consumer's perspective.
     * This description can be used to capture details such as why the structure definition was built, comments about misuse, instructions for clinical use and interpretation, literature references, examples from the paper world, etc. It is not a rendering of the structure definition as conveyed in the 'text' field of the resource itself. This item SHOULD be populated unless the information is available from context (e.g. the language of the structure definition is presumed to be the predominant language in the place the structure definition was created).
     */
    description?: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * The context that the content is intended to support
     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate structure definition instances.
     * When multiple useContexts are specified, there is no expectation that all or any of the contexts apply.
     */
    useContext?: UsageContext[];
    /**
     * Intended jurisdiction for structure definition (if applicable)
     * A legal or geographic region in which the structure definition is intended to be used.
     * It may be possible for the structure definition to be used in jurisdictions other than those for which it was originally designed or intended.
     */
    jurisdiction?: CodeableConcept[];
    /**
     * Why this structure definition is defined
     * Explanation of why this structure definition is needed and why it has been designed as it has.
     * This element does not describe the usage of the structure definition. Instead, it provides traceability of ''why'' the resource is either needed or ''why'' it is defined as it is.  This may be used to point to source materials or specifications that drove the structure of this structure definition.
     */
    purpose?: markdown;
    /**
     * Extension for purpose
     **/
    _purpose?: Element;
    /**
     * Use and/or publishing restrictions
     * 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.
     */
    copyright?: markdown;
    /**
     * Extension for copyright
     **/
    _copyright?: Element;
    /**
     * Assist with indexing and finding
     * A set of key words or terms from external terminologies that may be used to assist with indexing and searching of templates nby describing the use of this structure definition, or the content it describes.
     */
    keyword?: Coding[];
    /**
     * FHIR Version this StructureDefinition targets
     * 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 4.0.1. for this version.
     * A StructureDefinition does not need to specify the target it applies to as StructureDefinitions will often be valid across multiple versions of FHIR. FHIR tooling can determine whether a StructureDefinition is consistent with a particular StructureDefinition if desired.
     */
    fhirVersion?: code;
    /**
     * Extension for fhirVersion
     **/
    _fhirVersion?: Element;
    /**
     * External specification that the content is mapped to
     * An external specification that the content is mapped to.
     */
    mapping?: StructureDefinitionMapping[];
    /**
     * Whether the structure is abstract
     * 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.
     * Abstract Resources cannot be instantiated - a concrete sub-type must be used. Abstract datatypes and extensions cannot be used in an instance. For logical models, the exact implication of "abstract" will rest with the author, depending how the logical model is used. Flagging a constraint structure as abstract conveys design intent but makes no difference to how the structure definition is handled. Note that inline declared elements that are given the type "Element" in the StructureDefinition, but have children described, are anonymous concrete types that specialize Element.
     */
    abstract: boolean;
    /**
     * Extension for abstract
     **/
    _abstract?: Element;
    /**
     * If an extension, where it can be used in instances
     * Identifies the types of resource or data type elements to which the extension can be applied.
     */
    context?: StructureDefinitionContext[];
    /**
     * FHIRPath invariants - when the extension can be used
     * A set of rules as FHIRPath Invariants about when the extension can be used (e.g. co-occurrence variants for the extension). All the rules must be true.
     * The rules are only evaluated when the extension is present. When evaluating the invariant, the FHIRPath focus is the element that holds the extension, and %extension refers to the extension itself.
     */
    contextInvariant?: string[];
    /**
     * Extension for contextInvariant
     **/
    _contextInvariant?: Element[];
    /**
     * Type defined or constrained by this structure
     * 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).  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.
     * Note that in the case of constraints, the type could be determined by chasing through the baseDefinition references until a concrete structure (derivation = specialization) is reached, or by looking at the path of the first element in the snapshot - if present - but providing the type directly makes for simpler tooling and indexing.

The type must match the elements defined in the differential and the snapshot. For all FHIR defined types, the path name of the element will start with the type name. For logical models, where the type is a URL, the type name SHOULD start with the tail of the type URL where required.
     */
    type: uri;
    /**
     * Extension for type
     **/
    _type?: Element;
    /**
     * Definition that this type is constrained/specialized from
     * An absolute URI that is the base structure from which this type is derived, either by specialization or constraint.
     * If differential constraints are specified in this structure, they are applied to the base in a "differential" fashion. If there is no base, then the differential constraints cannot be provided (snapshot only). Differential structures are useful for the editing perspective, and snapshot structures are suitable for operational use. The FHIR Project provides a number of tools/services to populate snapshots from differential constraints. Logical Models have a base of "Element" or another logical model.
     */
    baseDefinition?: canonical;
    /**
     * Extension for baseDefinition
     **/
    _baseDefinition?: Element;
    /**
     * Snapshot view of the structure
     * A snapshot view is expressed in a standalone form that can be used and interpreted without considering the base StructureDefinition.
     */
    snapshot?: StructureDefinitionSnapshot;
    /**
     * Differential view of the structure
     * A differential view is expressed relative to the base StructureDefinition - a statement of differences that it applies.
     */
    differential?: StructureDefinitionDifferential;
    /**
     * draft | active | retired | unknown
     * The status of this structure definition. Enables tracking the life-cycle of the content.
     * Allows filtering of structure definitions that are appropriate for use versus not.
     */
    status: StructureDefinitionPublicationStatus;
    /**
     * primitive-type | complex-type | resource | logical
     * Defines the kind of structure that this definition is describing.
     */
    kind: StructureDefinitionKind;
    /**
     * specialization | constraint - How relates to base definition
     * How the type relates to the baseDefinition.
     * If the definition is a specialization, then it adds new elements in the differential, and the snapshot includes the inherited elements.  If the definition is a constraint, then it cannot define new elements, it can only make new rules about existing content (see [Profiling Resources](profiling.html#resources)).
     */
    derivation?: StructureDefinitionTypeDerivationRule;
}
/**
 * Structure Definition used by this map
 * A structure definition used by this map. The structure definition may describe instances that are converted, or the instances that are produced.
 * It is not necessary for a structure map to identify any dependent structures, though not listing them may restrict its usefulness.
 */
export interface StructureMapStructure extends BackboneElement {
    /**
     * Canonical reference to structure definition
     * The canonical reference to the structure.
     */
    url: canonical;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Name for type in this map
     * The name used for this type in the map.
     * This is needed if both types have the same name (e.g. version conversion).
     */
    alias?: string;
    /**
     * Extension for alias
     **/
    _alias?: Element;
    /**
     * Documentation on use of structure
     * Documentation that describes how the structure is used in the mapping.
     */
    documentation?: string;
    /**
     * Extension for documentation
     **/
    _documentation?: Element;
    /**
     * source | queried | target | produced
     * How the referenced structure is used in this mapping.
     */
    mode: StructureMapModelMode;
}
/**
 * Named instance provided when invoking the map
 * A name assigned to an instance of data. The instance must be provided when the mapping is invoked.
 * If no inputs are named, then the entry mappings are type based.
 */
export interface StructureMapGroupInput extends BackboneElement {
    /**
     * Name for this instance of data
     * Name for this instance of data.
     */
    name: id;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Type for this instance of data
     * Type for this instance of data.
     */
    type?: string;
    /**
     * Extension for type
     **/
    _type?: Element;
    /**
     * Documentation for this instance of data
     * Documentation for this instance of data.
     */
    documentation?: string;
    /**
     * Extension for documentation
     **/
    _documentation?: Element;
    /**
     * source | target
     * Mode for this instance of data.
     */
    mode: StructureMapInputMode;
}
/**
 * Source inputs to the mapping
 * Source inputs to the mapping.
 */
export interface StructureMapGroupRuleSource extends BackboneElement {
    /**
     * Type or variable this rule applies to
     * Type or variable this rule applies to.
     */
    context: id;
    /**
     * Extension for context
     **/
    _context?: Element;
    /**
     * Specified minimum cardinality
     * Specified minimum cardinality for the element. This is optional; if present, it acts an implicit check on the input content.
     */
    min?: integer;
    /**
     * Extension for min
     **/
    _min?: Element;
    /**
     * Specified maximum cardinality (number or *)
     * 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).
     */
    max?: string;
    /**
     * Extension for max
     **/
    _max?: Element;
    /**
     * Rule only applies if source has this type
     * Specified type for the element. This works as a condition on the mapping - use for polymorphic elements.
     */
    type?: string;
    /**
     * Extension for type
     **/
    _type?: Element;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueBase64Binary?: base64Binary;
    /**
     * Extension for defaultValueBase64Binary
     **/
    _defaultValueBase64Binary?: Element;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueBoolean?: boolean;
    /**
     * Extension for defaultValueBoolean
     **/
    _defaultValueBoolean?: Element;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueCanonical?: canonical;
    /**
     * Extension for defaultValueCanonical
     **/
    _defaultValueCanonical?: Element;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueCode?: code;
    /**
     * Extension for defaultValueCode
     **/
    _defaultValueCode?: Element;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueDate?: date;
    /**
     * Extension for defaultValueDate
     **/
    _defaultValueDate?: Element;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueDateTime?: dateTime;
    /**
     * Extension for defaultValueDateTime
     **/
    _defaultValueDateTime?: Element;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueDecimal?: decimal;
    /**
     * Extension for defaultValueDecimal
     **/
    _defaultValueDecimal?: Element;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueId?: id;
    /**
     * Extension for defaultValueId
     **/
    _defaultValueId?: Element;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueInstant?: instant;
    /**
     * Extension for defaultValueInstant
     **/
    _defaultValueInstant?: Element;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueInteger?: integer;
    /**
     * Extension for defaultValueInteger
     **/
    _defaultValueInteger?: Element;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueMarkdown?: markdown;
    /**
     * Extension for defaultValueMarkdown
     **/
    _defaultValueMarkdown?: Element;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueOid?: oid;
    /**
     * Extension for defaultValueOid
     **/
    _defaultValueOid?: Element;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValuePositiveInt?: positiveInt;
    /**
     * Extension for defaultValuePositiveInt
     **/
    _defaultValuePositiveInt?: Element;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueString?: string;
    /**
     * Extension for defaultValueString
     **/
    _defaultValueString?: Element;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueTime?: time;
    /**
     * Extension for defaultValueTime
     **/
    _defaultValueTime?: Element;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueUnsignedInt?: unsignedInt;
    /**
     * Extension for defaultValueUnsignedInt
     **/
    _defaultValueUnsignedInt?: Element;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueUri?: uri;
    /**
     * Extension for defaultValueUri
     **/
    _defaultValueUri?: Element;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueUrl?: url;
    /**
     * Extension for defaultValueUrl
     **/
    _defaultValueUrl?: Element;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueUuid?: uuid;
    /**
     * Extension for defaultValueUuid
     **/
    _defaultValueUuid?: Element;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueAddress?: Address;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueAge?: Age;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueAnnotation?: Annotation;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueAttachment?: Attachment;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueCodeableConcept?: CodeableConcept;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueCoding?: Coding;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueContactPoint?: ContactPoint;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueCount?: Count;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueDistance?: Distance;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueDuration?: Duration;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueHumanName?: HumanName;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueIdentifier?: Identifier;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueMoney?: Money;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValuePeriod?: Period;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueQuantity?: Quantity;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueRange?: Range;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueRatio?: Ratio;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueReference?: Reference;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueSampledData?: SampledData;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueSignature?: Signature;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueTiming?: Timing;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueContactDetail?: ContactDetail;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueContributor?: Contributor;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueDataRequirement?: DataRequirement;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueExpression?: Expression;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueParameterDefinition?: ParameterDefinition;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueRelatedArtifact?: RelatedArtifact;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueTriggerDefinition?: TriggerDefinition;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueUsageContext?: UsageContext;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueDosage?: Dosage;
    /**
     * Default value if no value exists
     * A value to use if there is no existing value in the source object.
     * If there's a default value on an item that can repeat, it will only be used once.
     */
    defaultValueMeta?: Meta;
    /**
     * Optional field for this source
     * Optional field for this source.
     */
    element?: string;
    /**
     * Extension for element
     **/
    _element?: Element;
    /**
     * Named context for field, if a field is specified
     * Named context for field, if a field is specified.
     */
    variable?: id;
    /**
     * Extension for variable
     **/
    _variable?: Element;
    /**
     * FHIRPath expression  - must be true or the rule does not apply
     * FHIRPath expression  - must be true or the rule does not apply.
     */
    condition?: string;
    /**
     * Extension for condition
     **/
    _condition?: Element;
    /**
     * FHIRPath expression  - must be true or the mapping engine throws an error instead of completing
     * FHIRPath expression  - must be true or the mapping engine throws an error instead of completing.
     */
    check?: string;
    /**
     * Extension for check
     **/
    _check?: Element;
    /**
     * Message to put in log if source exists (FHIRPath)
     * A FHIRPath expression which specifies a message to put in the transform log when content matching the source rule is found.
     * This is typically used for recording that something Is not transformed to the target for some reason.
     */
    logMessage?: string;
    /**
     * Extension for logMessage
     **/
    _logMessage?: Element;
    /**
     * first | not_first | last | not_last | only_one
     * How to handle the list mode for this element.
     */
    listMode?: StructureMapSourceListMode;
}
/**
 * Parameters to the transform
 * Parameters to the transform.
 */
export interface StructureMapGroupRuleTargetParameter extends BackboneElement {
    /**
     * Parameter value - variable or literal
     * Parameter value - variable or literal.
     */
    valueId?: id;
    /**
     * Extension for valueId
     **/
    _valueId?: Element;
    /**
     * Parameter value - variable or literal
     * Parameter value - variable or literal.
     */
    valueString?: string;
    /**
     * Extension for valueString
     **/
    _valueString?: Element;
    /**
     * Parameter value - variable or literal
     * Parameter value - variable or literal.
     */
    valueBoolean?: boolean;
    /**
     * Extension for valueBoolean
     **/
    _valueBoolean?: Element;
    /**
     * Parameter value - variable or literal
     * Parameter value - variable or literal.
     */
    valueInteger?: integer;
    /**
     * Extension for valueInteger
     **/
    _valueInteger?: Element;
    /**
     * Parameter value - variable or literal
     * Parameter value - variable or literal.
     */
    valueDecimal?: decimal;
    /**
     * Extension for valueDecimal
     **/
    _valueDecimal?: Element;
}
/**
 * Content to create because of this mapping rule
 * Content to create because of this mapping rule.
 */
export interface StructureMapGroupRuleTarget extends BackboneElement {
    /**
     * Type or variable this rule applies to
     * Type or variable this rule applies to.
     */
    context?: id;
    /**
     * Extension for context
     **/
    _context?: Element;
    /**
     * Field to create in the context
     * Field to create in the context.
     */
    element?: string;
    /**
     * Extension for element
     **/
    _element?: Element;
    /**
     * Named context for field, if desired, and a field is specified
     * Named context for field, if desired, and a field is specified.
     */
    variable?: id;
    /**
     * Extension for variable
     **/
    _variable?: Element;
    /**
     * Internal rule reference for shared list items
     * Internal rule reference for shared list items.
     */
    listRuleId?: id;
    /**
     * Extension for listRuleId
     **/
    _listRuleId?: Element;
    /**
     * Parameters to the transform
     * Parameters to the transform.
     */
    parameter?: StructureMapGroupRuleTargetParameter[];
    /**
     * type | variable
     * How to interpret the context.
     */
    contextType?: StructureMapContextType;
    /**
     * first | share | last | collate
     * If field is a list, how to manage the list.
     */
    listMode?: StructureMapTargetListMode[];
    /**
     * create | copy +
     * How the data is copied / created.
     */
    transform?: StructureMapTransform;
}
/**
 * Which other rules to apply in the context of this rule
 * Which other rules to apply in the context of this rule.
 */
export interface StructureMapGroupRuleDependent extends BackboneElement {
    /**
     * Name of a rule or group to apply
     * Name of a rule or group to apply.
     */
    name: id;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Variable to pass to the rule or group
     * Variable to pass to the rule or group.
     */
    variable: string[];
    /**
     * Extension for variable
     **/
    _variable?: Element[];
}
/**
 * Transform Rule from source to target
 * Transform Rule from source to target.
 */
export interface StructureMapGroupRule extends BackboneElement {
    /**
     * Name of the rule for internal references
     * Name of the rule for internal references.
     */
    name: id;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Source inputs to the mapping
     * Source inputs to the mapping.
     */
    source: StructureMapGroupRuleSource[];
    /**
     * Content to create because of this mapping rule
     * Content to create because of this mapping rule.
     */
    target?: StructureMapGroupRuleTarget[];
    /**
     * Rules contained in this rule
     * Rules contained in this rule.
     */
    rule?: StructureMapGroupRule[];
    /**
     * Which other rules to apply in the context of this rule
     * Which other rules to apply in the context of this rule.
     */
    dependent?: StructureMapGroupRuleDependent[];
    /**
     * Documentation for this instance of data
     * Documentation for this instance of data.
     */
    documentation?: string;
    /**
     * Extension for documentation
     **/
    _documentation?: Element;
}
/**
 * Named sections for reader convenience
 * Organizes the mapping into manageable chunks for human review/ease of maintenance.
 */
export interface StructureMapGroup extends BackboneElement {
    /**
     * Human-readable label
     * A unique name for the group for the convenience of human readers.
     */
    name: id;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Another group that this group adds rules to
     * Another group that this group adds rules to.
     */
    extends?: id;
    /**
     * Extension for extends
     **/
    _extends?: Element;
    /**
     * Additional description/explanation for group
     * Additional supporting documentation that explains the purpose of the group and the types of mappings within it.
     */
    documentation?: string;
    /**
     * Extension for documentation
     **/
    _documentation?: Element;
    /**
     * Named instance provided when invoking the map
     * A name assigned to an instance of data. The instance must be provided when the mapping is invoked.
     * If no inputs are named, then the entry mappings are type based.
     */
    input: StructureMapGroupInput[];
    /**
     * Transform Rule from source to target
     * Transform Rule from source to target.
     */
    rule: StructureMapGroupRule[];
    /**
     * none | types | type-and-types
     * If this is the default rule set to apply for the source type or this combination of types.
     * Not applicable if the underlying model is untyped. There can only be one default mapping for any particular type combination.
     */
    typeMode: StructureMapGroupTypeMode;
}
/**
 * A Map of relationships between 2 structures that can be used to transform data
 * A Map of relationships between 2 structures that can be used to transform data.
 */
export interface StructureMap extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'StructureMap';
    /**
     * Canonical identifier for this structure map, represented as a URI (globally unique)
     * An absolute URI that is used to identify this structure map when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this structure map is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the structure map is stored on different servers.
     * Can be a urn:uuid: or a urn:oid: but real http: addresses are preferred.  Multiple instances may share the same URL if they have a distinct version.

The determination of when to create a new version of a resource (same url, new version) vs. defining a new artifact is up to the author.  Considerations for making this decision are found in [Technical and Business Versions](resource.html#versions).

In some cases, the resource can no longer be found at the stated url, but the url itself cannot change. Implementations can use the [meta.source](resource.html#meta) element to indicate where the current master source of the resource can be found.
     */
    url: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Additional identifier for the structure map
     * 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.
     * Typically, this is used for identifiers that can go in an HL7 V3 II (instance identifier) data type, and can then identify this structure map outside of FHIR, where it is not possible to use the logical URI.
     */
    identifier?: Identifier[];
    /**
     * Business version of the structure map
     * 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.
     * There may be different structure map instances that have the same identifier but different versions.  The version can be appended to the url in a reference to allow a reference to a particular business version of the structure map with the format [url]|[version].
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
    /**
     * Name for this structure map (computer friendly)
     * 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.
     * The name is not expected to be globally unique. The name should be a simple alphanumeric type name to ensure that it is machine-processing friendly.
     */
    name: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Name for this structure map (human friendly)
     * A short, descriptive, user-friendly title for the structure map.
     * This name does not need to be machine-processing friendly and may contain punctuation, white-space, etc.
     */
    title?: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * For testing purposes, not real usage
     * 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.
     * Allows filtering of structure maps that are appropriate for use versus not.
     */
    experimental?: boolean;
    /**
     * Extension for experimental
     **/
    _experimental?: Element;
    /**
     * Date last changed
     * The date  (and optionally time) when the structure map was published. The date must change 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.
     * Note that this is not the same as the resource last-modified-date, since the resource may be a secondary representation of the structure map. Additional specific dates may be added as extensions or be found by consulting Provenances associated with past versions of the resource.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Name of the publisher (organization or individual)
     * The name of the organization or individual that published the structure map.
     * Usually an organization but may be an individual. The publisher (or steward) of the structure map is the organization or individual primarily responsible for the maintenance and upkeep of the structure map. This is not necessarily the same individual or organization that developed and initially authored the content. The publisher is the primary point of contact for questions or issues with the structure map. This item SHOULD be populated unless the information is available from context.
     */
    publisher?: string;
    /**
     * Extension for publisher
     **/
    _publisher?: Element;
    /**
     * Contact details for the publisher
     * Contact details to assist a user in finding and communicating with the publisher.
     * May be a web site, an email address, a telephone number, etc.
     */
    contact?: ContactDetail[];
    /**
     * Natural language description of the structure map
     * A free text natural language description of the structure map from a consumer's perspective.
     * This description can be used to capture details such as why the structure map was built, comments about misuse, instructions for clinical use and interpretation, literature references, examples from the paper world, etc. It is not a rendering of the structure map as conveyed in the 'text' field of the resource itself. This item SHOULD be populated unless the information is available from context (e.g. the language of the structure map is presumed to be the predominant language in the place the structure map was created).
     */
    description?: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * The context that the content is intended to support
     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate structure map instances.
     * When multiple useContexts are specified, there is no expectation that all or any of the contexts apply.
     */
    useContext?: UsageContext[];
    /**
     * Intended jurisdiction for structure map (if applicable)
     * A legal or geographic region in which the structure map is intended to be used.
     * It may be possible for the structure map to be used in jurisdictions other than those for which it was originally designed or intended.
     */
    jurisdiction?: CodeableConcept[];
    /**
     * Why this structure map is defined
     * Explanation of why this structure map is needed and why it has been designed as it has.
     * This element does not describe the usage of the structure map. Instead, it provides traceability of ''why'' the resource is either needed or ''why'' it is defined as it is.  This may be used to point to source materials or specifications that drove the structure of this structure map.
     */
    purpose?: markdown;
    /**
     * Extension for purpose
     **/
    _purpose?: Element;
    /**
     * Use and/or publishing restrictions
     * 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.
     */
    copyright?: markdown;
    /**
     * Extension for copyright
     **/
    _copyright?: Element;
    /**
     * Structure Definition used by this map
     * A structure definition used by this map. The structure definition may describe instances that are converted, or the instances that are produced.
     * It is not necessary for a structure map to identify any dependent structures, though not listing them may restrict its usefulness.
     */
    structure?: StructureMapStructure[];
    /**
     * Other maps used by this map (canonical URLs)
     * Other maps used by this map (canonical URLs).
     */
    import?: canonical[];
    /**
     * Extension for import
     **/
    _import?: Element[];
    /**
     * Named sections for reader convenience
     * Organizes the mapping into manageable chunks for human review/ease of maintenance.
     */
    group: StructureMapGroup[];
    /**
     * draft | active | retired | unknown
     * The status of this structure map. Enables tracking the life-cycle of the content.
     * Allows filtering of structure maps that are appropriate for use versus not.
     */
    status: StructureMapPublicationStatus;
}
/**
 * The channel on which to report matches to the criteria
 * Details where to send notifications when resources are received that meet the criteria.
 */
export interface SubscriptionChannel extends BackboneElement {
    /**
     * Where the channel points to
     * The url that describes the actual end-point to send messages to.
     * For rest-hook, and websocket, the end-point must be an http: or https: URL; for email, a mailto: url, for sms, a tel: url, and for message the endpoint can be in any form of url the server understands (usually, http: or mllp:). The URI is allowed to be relative; in which case, it is relative to the server end-point (since there may be more than one, clients should avoid using relative URIs).
     */
    endpoint?: url;
    /**
     * Extension for endpoint
     **/
    _endpoint?: Element;
    /**
     * MIME type to send, or omit for no payload
     * 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. The mime type "text/plain" may also be used for Email and SMS subscriptions.
     * Sending the payload has obvious security implications. The server is responsible for ensuring that the content is appropriately secured.
     */
    payload?: code;
    /**
     * Extension for payload
     **/
    _payload?: Element;
    /**
     * Usage depends on the channel type
     * Additional headers / information to send as part of the notification.
     * Exactly what these mean depend on the channel type. They can convey additional information to the recipient and/or meet security requirements; for example, support of multiple headers in the outgoing notifications for rest-hook type subscriptions.
     */
    header?: string[];
    /**
     * Extension for header
     **/
    _header?: Element[];
    /**
     * rest-hook | websocket | email | sms | message
     * The type of channel to send notifications on.
     */
    type: SubscriptionChannelType;
}
/**
 * Server push subscription criteria
 * 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 can take an appropriate action.
 */
export interface Subscription extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Subscription';
    /**
     * Contact details for source (e.g. troubleshooting)
     * Contact details for a human to contact about the subscription. The primary use of this for system administrator troubleshooting.
     */
    contact?: ContactPoint[];
    /**
     * When to automatically delete the subscription
     * The time for the server to turn the subscription off.
     * The server is permitted to deviate from this time but should observe it.
     */
    end?: instant;
    /**
     * Extension for end
     **/
    _end?: Element;
    /**
     * Description of why this subscription was created
     * A description of why this subscription is defined.
     */
    reason: string;
    /**
     * Extension for reason
     **/
    _reason?: Element;
    /**
     * Rule for server push
     * The rules that the server should use to determine when to generate notifications for this subscription.
     * The rules are search criteria (without the [base] part). Like Bundle.entry.request.url, it has no leading "/".
     */
    criteria: string;
    /**
     * Extension for criteria
     **/
    _criteria?: Element;
    /**
     * Latest error note
     * A record of the last error that occurred when the server processed a notification.
     */
    error?: string;
    /**
     * Extension for error
     **/
    _error?: Element;
    /**
     * The channel on which to report matches to the criteria
     * Details where to send notifications when resources are received that meet the criteria.
     */
    channel: SubscriptionChannel;
    /**
     * requested | active | error | off
     * The status of the subscription, which marks the server state for managing the subscription.
     * A client can only submit subscription resources in the requested or off state. Only the server can  move a subscription from requested to active, and then to error. Either the server or the client can turn a subscription off.

This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
     */
    status: SubscriptionStatus;
}
/**
 * If this describes a specific package/container of the substance
 * Substance may be used to describe a kind of substance, or a specific package/container of the substance: an instance.
 */
export interface SubstanceInstance extends BackboneElement {
    /**
     * Identifier of the package/container
     * Identifier associated with the package/container (usually a label affixed directly).
     */
    identifier?: Identifier;
    /**
     * When no longer valid to use
     * When the substance is no longer valid to use. For some substances, a single arbitrary date is used for expiry.
     */
    expiry?: dateTime;
    /**
     * Extension for expiry
     **/
    _expiry?: Element;
    /**
     * Amount of substance in the package
     * The amount of the substance.
     */
    quantity?: Quantity;
}
/**
 * Composition information about the substance
 * A substance can be composed of other substances.
 */
export interface SubstanceIngredient extends BackboneElement {
    /**
     * Optional amount (concentration)
     * The amount of the ingredient in the substance - a concentration ratio.
     */
    quantity?: Ratio;
    /**
     * A component of the substance
     * Another substance that is a component of this substance.
     */
    substanceCodeableConcept?: CodeableConcept;
    /**
     * A component of the substance
     * Another substance that is a component of this substance.
     */
    substanceReference?: Reference;
}
/**
 * A homogeneous material with a definite composition
 * A homogeneous material with a definite composition.
 */
export interface Substance extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Substance';
    /**
     * Unique identifier
     * Unique identifier for the substance.
     * This identifier is associated with the kind of substance in contrast to the  Substance.instance.identifier which is associated with the package/container.
     */
    identifier?: Identifier[];
    /**
     * What class/type of substance this is
     * A code that classifies the general type of substance.  This is used  for searching, sorting and display purposes.
     * The level of granularity is defined by the category concepts in the value set.   More fine-grained filtering can be performed using the metadata and/or terminology hierarchy in Substance.code.
     */
    category?: CodeableConcept[];
    /**
     * What substance this is
     * A code (or set of codes) that identify this substance.
     * This could be a reference to an externally defined code.  It could also be a locally assigned code (e.g. a formulary),  optionally with translations to the standard drug codes.
     */
    code: CodeableConcept;
    /**
     * Textual description of the substance, comments
     * A description of the substance - its appearance, handling requirements, and other usage notes.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * If this describes a specific package/container of the substance
     * Substance may be used to describe a kind of substance, or a specific package/container of the substance: an instance.
     */
    instance?: SubstanceInstance[];
    /**
     * Composition information about the substance
     * A substance can be composed of other substances.
     */
    ingredient?: SubstanceIngredient[];
    /**
     * active | inactive | entered-in-error
     * A code to indicate if the substance is actively used.
     */
    status?: SubstanceFHIRSubstanceStatus;
}
/**
 * The linkages between sugar residues will also be captured
 * The linkages between sugar residues will also be captured.
 */
export interface SubstanceNucleicAcidSubunitLinkage extends BackboneElement {
    /**
     * The entity that links the sugar residues together should also be captured for nearly all naturally occurring nucleic acid the linkage is a phosphate group. For many synthetic oligonucleotides phosphorothioate linkages are often seen. Linkage connectivity is assumed to be 3’-5’. If the linkage is either 3’-3’ or 5’-5’ this should be specified
     * The entity that links the sugar residues together should also be captured for nearly all naturally occurring nucleic acid the linkage is a phosphate group. For many synthetic oligonucleotides phosphorothioate linkages are often seen. Linkage connectivity is assumed to be 3’-5’. If the linkage is either 3’-3’ or 5’-5’ this should be specified.
     */
    connectivity?: string;
    /**
     * Extension for connectivity
     **/
    _connectivity?: Element;
    /**
     * Each linkage will be registered as a fragment and have an ID
     * Each linkage will be registered as a fragment and have an ID.
     */
    identifier?: Identifier;
    /**
     * Each linkage will be registered as a fragment and have at least one name. A single name shall be assigned to each linkage
     * Each linkage will be registered as a fragment and have at least one name. A single name shall be assigned to each linkage.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Residues shall be captured as described in 5.3.6.8.3
     * Residues shall be captured as described in 5.3.6.8.3.
     */
    residueSite?: string;
    /**
     * Extension for residueSite
     **/
    _residueSite?: Element;
}
/**
 * 5.3.6.8.1 Sugar ID (Mandatory)
 * 5.3.6.8.1 Sugar ID (Mandatory).
 */
export interface SubstanceNucleicAcidSubunitSugar extends BackboneElement {
    /**
     * The Substance ID of the sugar or sugar-like component that make up the nucleotide
     * The Substance ID of the sugar or sugar-like component that make up the nucleotide.
     */
    identifier?: Identifier;
    /**
     * The name of the sugar or sugar-like component that make up the nucleotide
     * The name of the sugar or sugar-like component that make up the nucleotide.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * The residues that contain a given sugar will be captured. The order of given residues will be captured in the 5‘-3‘direction consistent with the base sequences listed above
     * The residues that contain a given sugar will be captured. The order of given residues will be captured in the 5‘-3‘direction consistent with the base sequences listed above.
     */
    residueSite?: string;
    /**
     * Extension for residueSite
     **/
    _residueSite?: Element;
}
/**
 * Subunits are listed in order of decreasing length; sequences of the same length will be ordered by molecular weight; subunits that have identical sequences will be repeated multiple times
 * Subunits are listed in order of decreasing length; sequences of the same length will be ordered by molecular weight; subunits that have identical sequences will be repeated multiple times.
 */
export interface SubstanceNucleicAcidSubunit extends BackboneElement {
    /**
     * Index of linear sequences of nucleic acids in order of decreasing length. Sequences of the same length will be ordered by molecular weight. Subunits that have identical sequences will be repeated and have sequential subscripts
     * Index of linear sequences of nucleic acids in order of decreasing length. Sequences of the same length will be ordered by molecular weight. Subunits that have identical sequences will be repeated and have sequential subscripts.
     */
    subunit?: integer;
    /**
     * Extension for subunit
     **/
    _subunit?: Element;
    /**
     * Actual nucleotide sequence notation from 5' to 3' end using standard single letter codes. In addition to the base sequence, sugar and type of phosphate or non-phosphate linkage should also be captured
     * Actual nucleotide sequence notation from 5' to 3' end using standard single letter codes. In addition to the base sequence, sugar and type of phosphate or non-phosphate linkage should also be captured.
     */
    sequence?: string;
    /**
     * Extension for sequence
     **/
    _sequence?: Element;
    /**
     * The length of the sequence shall be captured
     * The length of the sequence shall be captured.
     */
    length?: integer;
    /**
     * Extension for length
     **/
    _length?: Element;
    /**
     * (TBC)
     * (TBC).
     */
    sequenceAttachment?: Attachment;
    /**
     * The nucleotide present at the 5’ terminal shall be specified based on a controlled vocabulary. Since the sequence is represented from the 5' to the 3' end, the 5’ prime nucleotide is the letter at the first position in the sequence. A separate representation would be redundant
     * The nucleotide present at the 5’ terminal shall be specified based on a controlled vocabulary. Since the sequence is represented from the 5' to the 3' end, the 5’ prime nucleotide is the letter at the first position in the sequence. A separate representation would be redundant.
     */
    fivePrime?: CodeableConcept;
    /**
     * The nucleotide present at the 3’ terminal shall be specified based on a controlled vocabulary. Since the sequence is represented from the 5' to the 3' end, the 5’ prime nucleotide is the letter at the last position in the sequence. A separate representation would be redundant
     * The nucleotide present at the 3’ terminal shall be specified based on a controlled vocabulary. Since the sequence is represented from the 5' to the 3' end, the 5’ prime nucleotide is the letter at the last position in the sequence. A separate representation would be redundant.
     */
    threePrime?: CodeableConcept;
    /**
     * The linkages between sugar residues will also be captured
     * The linkages between sugar residues will also be captured.
     */
    linkage?: SubstanceNucleicAcidSubunitLinkage[];
    /**
     * 5.3.6.8.1 Sugar ID (Mandatory)
     * 5.3.6.8.1 Sugar ID (Mandatory).
     */
    sugar?: SubstanceNucleicAcidSubunitSugar[];
}
/**
 * Nucleic acids are defined by three distinct elements: the base, sugar and linkage. Individual substance/moiety IDs will be created for each of these elements. The nucleotide sequence will be always entered in the 5’-3’ direction
 * Nucleic acids are defined by three distinct elements: the base, sugar and linkage. Individual substance/moiety IDs will be created for each of these elements. The nucleotide sequence will be always entered in the 5’-3’ direction.
 */
export interface SubstanceNucleicAcid extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'SubstanceNucleicAcid';
    /**
     * The type of the sequence shall be specified based on a controlled vocabulary
     * The type of the sequence shall be specified based on a controlled vocabulary.
     */
    sequenceType?: CodeableConcept;
    /**
     * The number of linear sequences of nucleotides linked through phosphodiester bonds shall be described. Subunits would be strands of nucleic acids that are tightly associated typically through Watson-Crick base pairing. NOTE: If not specified in the reference source, the assumption is that there is 1 subunit
     * The number of linear sequences of nucleotides linked through phosphodiester bonds shall be described. Subunits would be strands of nucleic acids that are tightly associated typically through Watson-Crick base pairing. NOTE: If not specified in the reference source, the assumption is that there is 1 subunit.
     */
    numberOfSubunits?: integer;
    /**
     * Extension for numberOfSubunits
     **/
    _numberOfSubunits?: Element;
    /**
     * The area of hybridisation shall be described if applicable for double stranded RNA or DNA. The number associated with the subunit followed by the number associated to the residue shall be specified in increasing order. The underscore “” shall be used as separator as follows: “Subunitnumber Residue”
     * The area of hybridisation shall be described if applicable for double stranded RNA or DNA. The number associated with the subunit followed by the number associated to the residue shall be specified in increasing order. The underscore “” shall be used as separator as follows: “Subunitnumber Residue”.
     */
    areaOfHybridisation?: string;
    /**
     * Extension for areaOfHybridisation
     **/
    _areaOfHybridisation?: Element;
    /**
     * (TBC)
     * (TBC).
     */
    oligoNucleotideType?: CodeableConcept;
    /**
     * Subunits are listed in order of decreasing length; sequences of the same length will be ordered by molecular weight; subunits that have identical sequences will be repeated multiple times
     * Subunits are listed in order of decreasing length; sequences of the same length will be ordered by molecular weight; subunits that have identical sequences will be repeated multiple times.
     */
    subunit?: SubstanceNucleicAcidSubunit[];
}
/**
 * Todo
 * Todo.
 */
export interface SubstancePolymerMonomerSetStartingMaterial extends BackboneElement {
    /**
     * Todo
     * Todo.
     */
    material?: CodeableConcept;
    /**
     * Todo
     * Todo.
     */
    type?: CodeableConcept;
    /**
     * Todo
     * Todo.
     */
    isDefining?: boolean;
    /**
     * Extension for isDefining
     **/
    _isDefining?: Element;
    /**
     * Todo
     * Todo.
     */
    amount?: SubstanceAmount;
}
/**
 * Todo
 * Todo.
 */
export interface SubstancePolymerMonomerSet extends BackboneElement {
    /**
     * Todo
     * Todo.
     */
    ratioType?: CodeableConcept;
    /**
     * Todo
     * Todo.
     */
    startingMaterial?: SubstancePolymerMonomerSetStartingMaterial[];
}
/**
 * Todo
 * Todo.
 */
export interface SubstancePolymerRepeatRepeatUnitDegreeOfPolymerisation extends BackboneElement {
    /**
     * Todo
     * Todo.
     */
    degree?: CodeableConcept;
    /**
     * Todo
     * Todo.
     */
    amount?: SubstanceAmount;
}
/**
 * Todo
 * Todo.
 */
export interface SubstancePolymerRepeatRepeatUnitStructuralRepresentation extends BackboneElement {
    /**
     * Todo
     * Todo.
     */
    type?: CodeableConcept;
    /**
     * Todo
     * Todo.
     */
    representation?: string;
    /**
     * Extension for representation
     **/
    _representation?: Element;
    /**
     * Todo
     * Todo.
     */
    attachment?: Attachment;
}
/**
 * Todo
 * Todo.
 */
export interface SubstancePolymerRepeatRepeatUnit extends BackboneElement {
    /**
     * Todo
     * Todo.
     */
    orientationOfPolymerisation?: CodeableConcept;
    /**
     * Todo
     * Todo.
     */
    repeatUnit?: string;
    /**
     * Extension for repeatUnit
     **/
    _repeatUnit?: Element;
    /**
     * Todo
     * Todo.
     */
    amount?: SubstanceAmount;
    /**
     * Todo
     * Todo.
     */
    degreeOfPolymerisation?: SubstancePolymerRepeatRepeatUnitDegreeOfPolymerisation[];
    /**
     * Todo
     * Todo.
     */
    structuralRepresentation?: SubstancePolymerRepeatRepeatUnitStructuralRepresentation[];
}
/**
 * Todo
 * Todo.
 */
export interface SubstancePolymerRepeat extends BackboneElement {
    /**
     * Todo
     * Todo.
     */
    numberOfUnits?: integer;
    /**
     * Extension for numberOfUnits
     **/
    _numberOfUnits?: Element;
    /**
     * Todo
     * Todo.
     */
    averageMolecularFormula?: string;
    /**
     * Extension for averageMolecularFormula
     **/
    _averageMolecularFormula?: Element;
    /**
     * Todo
     * Todo.
     */
    repeatUnitAmountType?: CodeableConcept;
    /**
     * Todo
     * Todo.
     */
    repeatUnit?: SubstancePolymerRepeatRepeatUnit[];
}
/**
 * Todo
 * Todo.
 */
export interface SubstancePolymer extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'SubstancePolymer';
    /**
     * Todo
     * Todo.
     */
    class?: CodeableConcept;
    /**
     * Todo
     * Todo.
     */
    geometry?: CodeableConcept;
    /**
     * Todo
     * Todo.
     */
    copolymerConnectivity?: CodeableConcept[];
    /**
     * Todo
     * Todo.
     */
    modification?: string[];
    /**
     * Extension for modification
     **/
    _modification?: Element[];
    /**
     * Todo
     * Todo.
     */
    monomerSet?: SubstancePolymerMonomerSet[];
    /**
     * Todo
     * Todo.
     */
    repeat?: SubstancePolymerRepeat[];
}
/**
 * This subclause refers to the description of each subunit constituting the SubstanceProtein. A subunit is a linear sequence of amino acids linked through peptide bonds. The Subunit information shall be provided when the finished SubstanceProtein is a complex of multiple sequences; subunits are not used to delineate domains within a single sequence. Subunits are listed in order of decreasing length; sequences of the same length will be ordered by decreasing molecular weight; subunits that have identical sequences will be repeated multiple times
 * This subclause refers to the description of each subunit constituting the SubstanceProtein. A subunit is a linear sequence of amino acids linked through peptide bonds. The Subunit information shall be provided when the finished SubstanceProtein is a complex of multiple sequences; subunits are not used to delineate domains within a single sequence. Subunits are listed in order of decreasing length; sequences of the same length will be ordered by decreasing molecular weight; subunits that have identical sequences will be repeated multiple times.
 */
export interface SubstanceProteinSubunit extends BackboneElement {
    /**
     * Index of primary sequences of amino acids linked through peptide bonds in order of decreasing length. Sequences of the same length will be ordered by molecular weight. Subunits that have identical sequences will be repeated and have sequential subscripts
     * Index of primary sequences of amino acids linked through peptide bonds in order of decreasing length. Sequences of the same length will be ordered by molecular weight. Subunits that have identical sequences will be repeated and have sequential subscripts.
     */
    subunit?: integer;
    /**
     * Extension for subunit
     **/
    _subunit?: Element;
    /**
     * The sequence information shall be provided enumerating the amino acids from N- to C-terminal end using standard single-letter amino acid codes. Uppercase shall be used for L-amino acids and lowercase for D-amino acids. Transcribed SubstanceProteins will always be described using the translated sequence; for synthetic peptide containing amino acids that are not represented with a single letter code an X should be used within the sequence. The modified amino acids will be distinguished by their position in the sequence
     * The sequence information shall be provided enumerating the amino acids from N- to C-terminal end using standard single-letter amino acid codes. Uppercase shall be used for L-amino acids and lowercase for D-amino acids. Transcribed SubstanceProteins will always be described using the translated sequence; for synthetic peptide containing amino acids that are not represented with a single letter code an X should be used within the sequence. The modified amino acids will be distinguished by their position in the sequence.
     */
    sequence?: string;
    /**
     * Extension for sequence
     **/
    _sequence?: Element;
    /**
     * Length of linear sequences of amino acids contained in the subunit
     * Length of linear sequences of amino acids contained in the subunit.
     */
    length?: integer;
    /**
     * Extension for length
     **/
    _length?: Element;
    /**
     * The sequence information shall be provided enumerating the amino acids from N- to C-terminal end using standard single-letter amino acid codes. Uppercase shall be used for L-amino acids and lowercase for D-amino acids. Transcribed SubstanceProteins will always be described using the translated sequence; for synthetic peptide containing amino acids that are not represented with a single letter code an X should be used within the sequence. The modified amino acids will be distinguished by their position in the sequence
     * The sequence information shall be provided enumerating the amino acids from N- to C-terminal end using standard single-letter amino acid codes. Uppercase shall be used for L-amino acids and lowercase for D-amino acids. Transcribed SubstanceProteins will always be described using the translated sequence; for synthetic peptide containing amino acids that are not represented with a single letter code an X should be used within the sequence. The modified amino acids will be distinguished by their position in the sequence.
     */
    sequenceAttachment?: Attachment;
    /**
     * Unique identifier for molecular fragment modification based on the ISO 11238 Substance ID
     * Unique identifier for molecular fragment modification based on the ISO 11238 Substance ID.
     */
    nTerminalModificationId?: Identifier;
    /**
     * The name of the fragment modified at the N-terminal of the SubstanceProtein shall be specified
     * The name of the fragment modified at the N-terminal of the SubstanceProtein shall be specified.
     */
    nTerminalModification?: string;
    /**
     * Extension for nTerminalModification
     **/
    _nTerminalModification?: Element;
    /**
     * Unique identifier for molecular fragment modification based on the ISO 11238 Substance ID
     * Unique identifier for molecular fragment modification based on the ISO 11238 Substance ID.
     */
    cTerminalModificationId?: Identifier;
    /**
     * The modification at the C-terminal shall be specified
     * The modification at the C-terminal shall be specified.
     */
    cTerminalModification?: string;
    /**
     * Extension for cTerminalModification
     **/
    _cTerminalModification?: Element;
}
/**
 * A SubstanceProtein is defined as a single unit of a linear amino acid sequence, or a combination of subunits that are either covalently linked or have a defined invariant stoichiometric relationship. This includes all synthetic, recombinant and purified SubstanceProteins of defined sequence, whether the use is therapeutic or prophylactic. This set of elements will be used to describe albumins, coagulation factors, cytokines, growth factors, peptide/SubstanceProtein hormones, enzymes, toxins, toxoids, recombinant vaccines, and immunomodulators
 * A SubstanceProtein is defined as a single unit of a linear amino acid sequence, or a combination of subunits that are either covalently linked or have a defined invariant stoichiometric relationship. This includes all synthetic, recombinant and purified SubstanceProteins of defined sequence, whether the use is therapeutic or prophylactic. This set of elements will be used to describe albumins, coagulation factors, cytokines, growth factors, peptide/SubstanceProtein hormones, enzymes, toxins, toxoids, recombinant vaccines, and immunomodulators.
 */
export interface SubstanceProtein extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'SubstanceProtein';
    /**
     * The SubstanceProtein descriptive elements will only be used when a complete or partial amino acid sequence is available or derivable from a nucleic acid sequence
     * The SubstanceProtein descriptive elements will only be used when a complete or partial amino acid sequence is available or derivable from a nucleic acid sequence.
     */
    sequenceType?: CodeableConcept;
    /**
     * Number of linear sequences of amino acids linked through peptide bonds. The number of subunits constituting the SubstanceProtein shall be described. It is possible that the number of subunits can be variable
     * Number of linear sequences of amino acids linked through peptide bonds. The number of subunits constituting the SubstanceProtein shall be described. It is possible that the number of subunits can be variable.
     */
    numberOfSubunits?: integer;
    /**
     * Extension for numberOfSubunits
     **/
    _numberOfSubunits?: Element;
    /**
     * The disulphide bond between two cysteine residues either on the same subunit or on two different subunits shall be described. The position of the disulfide bonds in the SubstanceProtein shall be listed in increasing order of subunit number and position within subunit followed by the abbreviation of the amino acids involved. The disulfide linkage positions shall actually contain the amino acid Cysteine at the respective positions
     * The disulphide bond between two cysteine residues either on the same subunit or on two different subunits shall be described. The position of the disulfide bonds in the SubstanceProtein shall be listed in increasing order of subunit number and position within subunit followed by the abbreviation of the amino acids involved. The disulfide linkage positions shall actually contain the amino acid Cysteine at the respective positions.
     */
    disulfideLinkage?: string[];
    /**
     * Extension for disulfideLinkage
     **/
    _disulfideLinkage?: Element[];
    /**
     * This subclause refers to the description of each subunit constituting the SubstanceProtein. A subunit is a linear sequence of amino acids linked through peptide bonds. The Subunit information shall be provided when the finished SubstanceProtein is a complex of multiple sequences; subunits are not used to delineate domains within a single sequence. Subunits are listed in order of decreasing length; sequences of the same length will be ordered by decreasing molecular weight; subunits that have identical sequences will be repeated multiple times
     * This subclause refers to the description of each subunit constituting the SubstanceProtein. A subunit is a linear sequence of amino acids linked through peptide bonds. The Subunit information shall be provided when the finished SubstanceProtein is a complex of multiple sequences; subunits are not used to delineate domains within a single sequence. Subunits are listed in order of decreasing length; sequences of the same length will be ordered by decreasing molecular weight; subunits that have identical sequences will be repeated multiple times.
     */
    subunit?: SubstanceProteinSubunit[];
}
/**
 * Todo
 * Todo.
 */
export interface SubstanceReferenceInformationGene extends BackboneElement {
    /**
     * Todo
     * Todo.
     */
    geneSequenceOrigin?: CodeableConcept;
    /**
     * Todo
     * Todo.
     */
    gene?: CodeableConcept;
    /**
     * Todo
     * Todo.
     */
    source?: Reference[];
}
/**
 * Todo
 * Todo.
 */
export interface SubstanceReferenceInformationGeneElement extends BackboneElement {
    /**
     * Todo
     * Todo.
     */
    type?: CodeableConcept;
    /**
     * Todo
     * Todo.
     */
    element?: Identifier;
    /**
     * Todo
     * Todo.
     */
    source?: Reference[];
}
/**
 * Todo
 * Todo.
 */
export interface SubstanceReferenceInformationClassification extends BackboneElement {
    /**
     * Todo
     * Todo.
     */
    domain?: CodeableConcept;
    /**
     * Todo
     * Todo.
     */
    classification?: CodeableConcept;
    /**
     * Todo
     * Todo.
     */
    subtype?: CodeableConcept[];
    /**
     * Todo
     * Todo.
     */
    source?: Reference[];
}
/**
 * Todo
 * Todo.
 */
export interface SubstanceReferenceInformationTarget extends BackboneElement {
    /**
     * Todo
     * Todo.
     */
    target?: Identifier;
    /**
     * Todo
     * Todo.
     */
    type?: CodeableConcept;
    /**
     * Todo
     * Todo.
     */
    interaction?: CodeableConcept;
    /**
     * Todo
     * Todo.
     */
    organism?: CodeableConcept;
    /**
     * Todo
     * Todo.
     */
    organismType?: CodeableConcept;
    /**
     * Todo
     * Todo.
     */
    amountQuantity?: Quantity;
    /**
     * Todo
     * Todo.
     */
    amountRange?: Range;
    /**
     * Todo
     * Todo.
     */
    amountString?: string;
    /**
     * Extension for amountString
     **/
    _amountString?: Element;
    /**
     * Todo
     * Todo.
     */
    amountType?: CodeableConcept;
    /**
     * Todo
     * Todo.
     */
    source?: Reference[];
}
/**
 * Todo
 * Todo.
 */
export interface SubstanceReferenceInformation extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'SubstanceReferenceInformation';
    /**
     * Todo
     * Todo.
     */
    comment?: string;
    /**
     * Extension for comment
     **/
    _comment?: Element;
    /**
     * Todo
     * Todo.
     */
    gene?: SubstanceReferenceInformationGene[];
    /**
     * Todo
     * Todo.
     */
    geneElement?: SubstanceReferenceInformationGeneElement[];
    /**
     * Todo
     * Todo.
     */
    classification?: SubstanceReferenceInformationClassification[];
    /**
     * Todo
     * Todo.
     */
    target?: SubstanceReferenceInformationTarget[];
}
/**
 * Many complex materials are fractions of parts of plants, animals, or minerals. Fraction elements are often necessary to define both Substances and Specified Group 1 Substances. For substances derived from Plants, fraction information will be captured at the Substance information level ( . Oils, Juices and Exudates). Additional information for Extracts, such as extraction solvent composition, will be captured at the Specified Substance Group 1 information level. For plasma-derived products fraction information will be captured at the Substance and the Specified Substance Group 1 levels
 * Many complex materials are fractions of parts of plants, animals, or minerals. Fraction elements are often necessary to define both Substances and Specified Group 1 Substances. For substances derived from Plants, fraction information will be captured at the Substance information level ( . Oils, Juices and Exudates). Additional information for Extracts, such as extraction solvent composition, will be captured at the Specified Substance Group 1 information level. For plasma-derived products fraction information will be captured at the Substance and the Specified Substance Group 1 levels.
 */
export interface SubstanceSourceMaterialFractionDescription extends BackboneElement {
    /**
     * This element is capturing information about the fraction of a plant part, or human plasma for fractionation
     * This element is capturing information about the fraction of a plant part, or human plasma for fractionation.
     */
    fraction?: string;
    /**
     * Extension for fraction
     **/
    _fraction?: Element;
    /**
     * The specific type of the material constituting the component. For Herbal preparations the particulars of the extracts (liquid/dry) is described in Specified Substance Group 1
     * The specific type of the material constituting the component. For Herbal preparations the particulars of the extracts (liquid/dry) is described in Specified Substance Group 1.
     */
    materialType?: CodeableConcept;
}
/**
 * 4.9.13.6.1 Author type (Conditional)
 * 4.9.13.6.1 Author type (Conditional).
 */
export interface SubstanceSourceMaterialOrganismAuthor extends BackboneElement {
    /**
     * The type of author of an organism species shall be specified. The parenthetical author of an organism species refers to the first author who published the plant/animal name (of any rank). The primary author of an organism species refers to the first author(s), who validly published the plant/animal name
     * The type of author of an organism species shall be specified. The parenthetical author of an organism species refers to the first author who published the plant/animal name (of any rank). The primary author of an organism species refers to the first author(s), who validly published the plant/animal name.
     */
    authorType?: CodeableConcept;
    /**
     * The author of an organism species shall be specified. The author year of an organism shall also be specified when applicable; refers to the year in which the first author(s) published the infraspecific plant/animal name (of any rank)
     * The author of an organism species shall be specified. The author year of an organism shall also be specified when applicable; refers to the year in which the first author(s) published the infraspecific plant/animal name (of any rank).
     */
    authorDescription?: string;
    /**
     * Extension for authorDescription
     **/
    _authorDescription?: Element;
}
/**
 * 4.9.13.8.1 Hybrid species maternal organism ID (Optional)
 * 4.9.13.8.1 Hybrid species maternal organism ID (Optional).
 */
export interface SubstanceSourceMaterialOrganismHybrid extends BackboneElement {
    /**
     * The identifier of the maternal species constituting the hybrid organism shall be specified based on a controlled vocabulary. For plants, the parents aren’t always known, and it is unlikely that it will be known which is maternal and which is paternal
     * The identifier of the maternal species constituting the hybrid organism shall be specified based on a controlled vocabulary. For plants, the parents aren’t always known, and it is unlikely that it will be known which is maternal and which is paternal.
     */
    maternalOrganismId?: string;
    /**
     * Extension for maternalOrganismId
     **/
    _maternalOrganismId?: Element;
    /**
     * The name of the maternal species constituting the hybrid organism shall be specified. For plants, the parents aren’t always known, and it is unlikely that it will be known which is maternal and which is paternal
     * The name of the maternal species constituting the hybrid organism shall be specified. For plants, the parents aren’t always known, and it is unlikely that it will be known which is maternal and which is paternal.
     */
    maternalOrganismName?: string;
    /**
     * Extension for maternalOrganismName
     **/
    _maternalOrganismName?: Element;
    /**
     * The identifier of the paternal species constituting the hybrid organism shall be specified based on a controlled vocabulary
     * The identifier of the paternal species constituting the hybrid organism shall be specified based on a controlled vocabulary.
     */
    paternalOrganismId?: string;
    /**
     * Extension for paternalOrganismId
     **/
    _paternalOrganismId?: Element;
    /**
     * The name of the paternal species constituting the hybrid organism shall be specified
     * The name of the paternal species constituting the hybrid organism shall be specified.
     */
    paternalOrganismName?: string;
    /**
     * Extension for paternalOrganismName
     **/
    _paternalOrganismName?: Element;
    /**
     * The hybrid type of an organism shall be specified
     * The hybrid type of an organism shall be specified.
     */
    hybridType?: CodeableConcept;
}
/**
 * 4.9.13.7.1 Kingdom (Conditional)
 * 4.9.13.7.1 Kingdom (Conditional).
 */
export interface SubstanceSourceMaterialOrganismOrganismGeneral extends BackboneElement {
    /**
     * The kingdom of an organism shall be specified
     * The kingdom of an organism shall be specified.
     */
    kingdom?: CodeableConcept;
    /**
     * The phylum of an organism shall be specified
     * The phylum of an organism shall be specified.
     */
    phylum?: CodeableConcept;
    /**
     * The class of an organism shall be specified
     * The class of an organism shall be specified.
     */
    class?: CodeableConcept;
    /**
     * The order of an organism shall be specified,
     * The order of an organism shall be specified,.
     */
    order?: CodeableConcept;
}
/**
 * This subclause describes the organism which the substance is derived from. For vaccines, the parent organism shall be specified based on these subclause elements. As an example, full taxonomy will be described for the Substance Name: ., Leaf
 * This subclause describes the organism which the substance is derived from. For vaccines, the parent organism shall be specified based on these subclause elements. As an example, full taxonomy will be described for the Substance Name: ., Leaf.
 */
export interface SubstanceSourceMaterialOrganism extends BackboneElement {
    /**
     * The family of an organism shall be specified
     * The family of an organism shall be specified.
     */
    family?: CodeableConcept;
    /**
     * The genus of an organism shall be specified; refers to the Latin epithet of the genus element of the plant/animal scientific name; it is present in names for genera, species and infraspecies
     * The genus of an organism shall be specified; refers to the Latin epithet of the genus element of the plant/animal scientific name; it is present in names for genera, species and infraspecies.
     */
    genus?: CodeableConcept;
    /**
     * The species of an organism shall be specified; refers to the Latin epithet of the species of the plant/animal; it is present in names for species and infraspecies
     * The species of an organism shall be specified; refers to the Latin epithet of the species of the plant/animal; it is present in names for species and infraspecies.
     */
    species?: CodeableConcept;
    /**
     * The Intraspecific type of an organism shall be specified
     * The Intraspecific type of an organism shall be specified.
     */
    intraspecificType?: CodeableConcept;
    /**
     * The intraspecific description of an organism shall be specified based on a controlled vocabulary. For Influenza Vaccine, the intraspecific description shall contain the syntax of the antigen in line with the WHO convention
     * The intraspecific description of an organism shall be specified based on a controlled vocabulary. For Influenza Vaccine, the intraspecific description shall contain the syntax of the antigen in line with the WHO convention.
     */
    intraspecificDescription?: string;
    /**
     * Extension for intraspecificDescription
     **/
    _intraspecificDescription?: Element;
    /**
     * 4.9.13.6.1 Author type (Conditional)
     * 4.9.13.6.1 Author type (Conditional).
     */
    author?: SubstanceSourceMaterialOrganismAuthor[];
    /**
     * 4.9.13.8.1 Hybrid species maternal organism ID (Optional)
     * 4.9.13.8.1 Hybrid species maternal organism ID (Optional).
     */
    hybrid?: SubstanceSourceMaterialOrganismHybrid;
    /**
     * 4.9.13.7.1 Kingdom (Conditional)
     * 4.9.13.7.1 Kingdom (Conditional).
     */
    organismGeneral?: SubstanceSourceMaterialOrganismOrganismGeneral;
}
/**
 * To do
 * To do.
 */
export interface SubstanceSourceMaterialPartDescription extends BackboneElement {
    /**
     * Entity of anatomical origin of source material within an organism
     * Entity of anatomical origin of source material within an organism.
     */
    part?: CodeableConcept;
    /**
     * The detailed anatomic location when the part can be extracted from different anatomical locations of the organism. Multiple alternative locations may apply
     * The detailed anatomic location when the part can be extracted from different anatomical locations of the organism. Multiple alternative locations may apply.
     */
    partLocation?: CodeableConcept;
}
/**
 * Source material shall capture information on the taxonomic and anatomical origins as well as the fraction of a material that can result in or can be modified to form a substance. This set of data elements shall be used to define polymer substances isolated from biological matrices. Taxonomic and anatomical origins shall be described using a controlled vocabulary as required. This information is captured for naturally derived polymers ( . starch) and structurally diverse substances. For Organisms belonging to the Kingdom Plantae the Substance level defines the fresh material of a single species or infraspecies, the Herbal Drug and the Herbal preparation. For Herbal preparations, the fraction information will be captured at the Substance information level and additional information for herbal extracts will be captured at the Specified Substance Group 1 information level. See for further explanation the Substance Class: Structurally Diverse and the herbal annex
 * Source material shall capture information on the taxonomic and anatomical origins as well as the fraction of a material that can result in or can be modified to form a substance. This set of data elements shall be used to define polymer substances isolated from biological matrices. Taxonomic and anatomical origins shall be described using a controlled vocabulary as required. This information is captured for naturally derived polymers ( . starch) and structurally diverse substances. For Organisms belonging to the Kingdom Plantae the Substance level defines the fresh material of a single species or infraspecies, the Herbal Drug and the Herbal preparation. For Herbal preparations, the fraction information will be captured at the Substance information level and additional information for herbal extracts will be captured at the Specified Substance Group 1 information level. See for further explanation the Substance Class: Structurally Diverse and the herbal annex.
 */
export interface SubstanceSourceMaterial extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'SubstanceSourceMaterial';
    /**
     * General high level classification of the source material specific to the origin of the material
     * General high level classification of the source material specific to the origin of the material.
     */
    sourceMaterialClass?: CodeableConcept;
    /**
     * The type of the source material shall be specified based on a controlled vocabulary. For vaccines, this subclause refers to the class of infectious agent
     * The type of the source material shall be specified based on a controlled vocabulary. For vaccines, this subclause refers to the class of infectious agent.
     */
    sourceMaterialType?: CodeableConcept;
    /**
     * The state of the source material when extracted
     * The state of the source material when extracted.
     */
    sourceMaterialState?: CodeableConcept;
    /**
     * The unique identifier associated with the source material parent organism shall be specified
     * The unique identifier associated with the source material parent organism shall be specified.
     */
    organismId?: Identifier;
    /**
     * The organism accepted Scientific name shall be provided based on the organism taxonomy
     * The organism accepted Scientific name shall be provided based on the organism taxonomy.
     */
    organismName?: string;
    /**
     * Extension for organismName
     **/
    _organismName?: Element;
    /**
     * The parent of the herbal drug Ginkgo biloba, Leaf is the substance ID of the substance (fresh) of Ginkgo biloba L. or Ginkgo biloba L. (Whole plant)
     * The parent of the herbal drug Ginkgo biloba, Leaf is the substance ID of the substance (fresh) of Ginkgo biloba L. or Ginkgo biloba L. (Whole plant).
     */
    parentSubstanceId?: Identifier[];
    /**
     * The parent substance of the Herbal Drug, or Herbal preparation
     * The parent substance of the Herbal Drug, or Herbal preparation.
     */
    parentSubstanceName?: string[];
    /**
     * Extension for parentSubstanceName
     **/
    _parentSubstanceName?: Element[];
    /**
     * The country where the plant material is harvested or the countries where the plasma is sourced from as laid down in accordance with the Plasma Master File. For “Plasma-derived substances” the attribute country of origin provides information about the countries used for the manufacturing of the Cryopoor plama or Crioprecipitate
     * The country where the plant material is harvested or the countries where the plasma is sourced from as laid down in accordance with the Plasma Master File. For “Plasma-derived substances” the attribute country of origin provides information about the countries used for the manufacturing of the Cryopoor plama or Crioprecipitate.
     */
    countryOfOrigin?: CodeableConcept[];
    /**
     * The place/region where the plant is harvested or the places/regions where the animal source material has its habitat
     * The place/region where the plant is harvested or the places/regions where the animal source material has its habitat.
     */
    geographicalLocation?: string[];
    /**
     * Extension for geographicalLocation
     **/
    _geographicalLocation?: Element[];
    /**
     * Stage of life for animals, plants, insects and microorganisms. This information shall be provided only when the substance is significantly different in these stages (e.g. foetal bovine serum)
     * Stage of life for animals, plants, insects and microorganisms. This information shall be provided only when the substance is significantly different in these stages (e.g. foetal bovine serum).
     */
    developmentStage?: CodeableConcept;
    /**
     * Many complex materials are fractions of parts of plants, animals, or minerals. Fraction elements are often necessary to define both Substances and Specified Group 1 Substances. For substances derived from Plants, fraction information will be captured at the Substance information level ( . Oils, Juices and Exudates). Additional information for Extracts, such as extraction solvent composition, will be captured at the Specified Substance Group 1 information level. For plasma-derived products fraction information will be captured at the Substance and the Specified Substance Group 1 levels
     * Many complex materials are fractions of parts of plants, animals, or minerals. Fraction elements are often necessary to define both Substances and Specified Group 1 Substances. For substances derived from Plants, fraction information will be captured at the Substance information level ( . Oils, Juices and Exudates). Additional information for Extracts, such as extraction solvent composition, will be captured at the Specified Substance Group 1 information level. For plasma-derived products fraction information will be captured at the Substance and the Specified Substance Group 1 levels.
     */
    fractionDescription?: SubstanceSourceMaterialFractionDescription[];
    /**
     * This subclause describes the organism which the substance is derived from. For vaccines, the parent organism shall be specified based on these subclause elements. As an example, full taxonomy will be described for the Substance Name: ., Leaf
     * This subclause describes the organism which the substance is derived from. For vaccines, the parent organism shall be specified based on these subclause elements. As an example, full taxonomy will be described for the Substance Name: ., Leaf.
     */
    organism?: SubstanceSourceMaterialOrganism;
    /**
     * To do
     * To do.
     */
    partDescription?: SubstanceSourceMaterialPartDescription[];
}
/**
 * Moiety, for structural modifications
 * Moiety, for structural modifications.
 */
export interface SubstanceSpecificationMoiety extends BackboneElement {
    /**
     * Role that the moiety is playing
     * Role that the moiety is playing.
     */
    role?: CodeableConcept;
    /**
     * Identifier by which this moiety substance is known
     * Identifier by which this moiety substance is known.
     */
    identifier?: Identifier;
    /**
     * Textual name for this moiety substance
     * Textual name for this moiety substance.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Stereochemistry type
     * Stereochemistry type.
     */
    stereochemistry?: CodeableConcept;
    /**
     * Optical activity type
     * Optical activity type.
     */
    opticalActivity?: CodeableConcept;
    /**
     * Molecular formula
     * Molecular formula.
     */
    molecularFormula?: string;
    /**
     * Extension for molecularFormula
     **/
    _molecularFormula?: Element;
    /**
     * Quantitative value for this moiety
     * Quantitative value for this moiety.
     */
    amountQuantity?: Quantity;
    /**
     * Quantitative value for this moiety
     * Quantitative value for this moiety.
     */
    amountString?: string;
    /**
     * Extension for amountString
     **/
    _amountString?: Element;
}
/**
 * General specifications for this substance, including how it is related to other substances
 * General specifications for this substance, including how it is related to other substances.
 */
export interface SubstanceSpecificationProperty extends BackboneElement {
    /**
     * A category for this property, e.g. Physical, Chemical, Enzymatic
     * A category for this property, e.g. Physical, Chemical, Enzymatic.
     */
    category?: CodeableConcept;
    /**
     * Property type e.g. viscosity, pH, isoelectric point
     * Property type e.g. viscosity, pH, isoelectric point.
     */
    code?: CodeableConcept;
    /**
     * Parameters that were used in the measurement of a property (e.g. for viscosity: measured at 20C with a pH of 7.1)
     * Parameters that were used in the measurement of a property (e.g. for viscosity: measured at 20C with a pH of 7.1).
     */
    parameters?: string;
    /**
     * Extension for parameters
     **/
    _parameters?: Element;
    /**
     * A substance upon which a defining property depends (e.g. for solubility: in water, in alcohol)
     * A substance upon which a defining property depends (e.g. for solubility: in water, in alcohol).
     */
    definingSubstanceReference?: Reference;
    /**
     * A substance upon which a defining property depends (e.g. for solubility: in water, in alcohol)
     * A substance upon which a defining property depends (e.g. for solubility: in water, in alcohol).
     */
    definingSubstanceCodeableConcept?: CodeableConcept;
    /**
     * Quantitative value for this property
     * Quantitative value for this property.
     */
    amountQuantity?: Quantity;
    /**
     * Quantitative value for this property
     * Quantitative value for this property.
     */
    amountString?: string;
    /**
     * Extension for amountString
     **/
    _amountString?: Element;
}
/**
 * The molecular weight or weight range (for proteins, polymers or nucleic acids)
 * The molecular weight or weight range (for proteins, polymers or nucleic acids).
 */
export interface SubstanceSpecificationStructureIsotopeMolecularWeight extends BackboneElement {
    /**
     * The method by which the molecular weight was determined
     * The method by which the molecular weight was determined.
     */
    method?: CodeableConcept;
    /**
     * Type of molecular weight such as exact, average (also known as. number average), weight average
     * Type of molecular weight such as exact, average (also known as. number average), weight average.
     */
    type?: CodeableConcept;
    /**
     * Used to capture quantitative values for a variety of elements. If only limits are given, the arithmetic mean would be the average. If only a single definite value for a given element is given, it would be captured in this field
     * Used to capture quantitative values for a variety of elements. If only limits are given, the arithmetic mean would be the average. If only a single definite value for a given element is given, it would be captured in this field.
     */
    amount?: Quantity;
}
/**
 * Applicable for single substances that contain a radionuclide or a non-natural isotopic ratio
 * Applicable for single substances that contain a radionuclide or a non-natural isotopic ratio.
 */
export interface SubstanceSpecificationStructureIsotope extends BackboneElement {
    /**
     * Substance identifier for each non-natural or radioisotope
     * Substance identifier for each non-natural or radioisotope.
     */
    identifier?: Identifier;
    /**
     * Substance name for each non-natural or radioisotope
     * Substance name for each non-natural or radioisotope.
     */
    name?: CodeableConcept;
    /**
     * The type of isotopic substitution present in a single substance
     * The type of isotopic substitution present in a single substance.
     */
    substitution?: CodeableConcept;
    /**
     * Half life - for a non-natural nuclide
     * Half life - for a non-natural nuclide.
     */
    halfLife?: Quantity;
    /**
     * The molecular weight or weight range (for proteins, polymers or nucleic acids)
     * The molecular weight or weight range (for proteins, polymers or nucleic acids).
     */
    molecularWeight?: SubstanceSpecificationStructureIsotopeMolecularWeight;
}
/**
 * Molecular structural representation
 * Molecular structural representation.
 */
export interface SubstanceSpecificationStructureRepresentation extends BackboneElement {
    /**
     * The type of structure (e.g. Full, Partial, Representative)
     * The type of structure (e.g. Full, Partial, Representative).
     */
    type?: CodeableConcept;
    /**
     * The structural representation as text string in a format e.g. InChI, SMILES, MOLFILE, CDX
     * The structural representation as text string in a format e.g. InChI, SMILES, MOLFILE, CDX.
     */
    representation?: string;
    /**
     * Extension for representation
     **/
    _representation?: Element;
    /**
     * An attached file with the structural representation
     * An attached file with the structural representation.
     */
    attachment?: Attachment;
}
/**
 * Structural information
 * Structural information.
 */
export interface SubstanceSpecificationStructure extends BackboneElement {
    /**
     * Stereochemistry type
     * Stereochemistry type.
     */
    stereochemistry?: CodeableConcept;
    /**
     * Optical activity type
     * Optical activity type.
     */
    opticalActivity?: CodeableConcept;
    /**
     * Molecular formula
     * Molecular formula.
     */
    molecularFormula?: string;
    /**
     * Extension for molecularFormula
     **/
    _molecularFormula?: Element;
    /**
     * Specified per moiety according to the Hill system, i.e. first C, then H, then alphabetical, each moiety separated by a dot
     * Specified per moiety according to the Hill system, i.e. first C, then H, then alphabetical, each moiety separated by a dot.
     */
    molecularFormulaByMoiety?: string;
    /**
     * Extension for molecularFormulaByMoiety
     **/
    _molecularFormulaByMoiety?: Element;
    /**
     * Applicable for single substances that contain a radionuclide or a non-natural isotopic ratio
     * Applicable for single substances that contain a radionuclide or a non-natural isotopic ratio.
     */
    isotope?: SubstanceSpecificationStructureIsotope[];
    /**
     * The molecular weight or weight range (for proteins, polymers or nucleic acids)
     * The molecular weight or weight range (for proteins, polymers or nucleic acids).
     */
    molecularWeight?: SubstanceSpecificationStructureIsotopeMolecularWeight;
    /**
     * Supporting literature
     * Supporting literature.
     */
    source?: Reference[];
    /**
     * Molecular structural representation
     * Molecular structural representation.
     */
    representation?: SubstanceSpecificationStructureRepresentation[];
}
/**
 * Codes associated with the substance
 * Codes associated with the substance.
 */
export interface SubstanceSpecificationCode extends BackboneElement {
    /**
     * The specific code
     * The specific code.
     */
    code?: CodeableConcept;
    /**
     * Status of the code assignment
     * Status of the code assignment.
     */
    status?: CodeableConcept;
    /**
     * The date at which the code status is changed as part of the terminology maintenance
     * The date at which the code status is changed as part of the terminology maintenance.
     */
    statusDate?: dateTime;
    /**
     * Extension for statusDate
     **/
    _statusDate?: Element;
    /**
     * Any comment can be provided in this field, if necessary
     * Any comment can be provided in this field, if necessary.
     */
    comment?: string;
    /**
     * Extension for comment
     **/
    _comment?: Element;
    /**
     * Supporting literature
     * Supporting literature.
     */
    source?: Reference[];
}
/**
 * Details of the official nature of this name
 * Details of the official nature of this name.
 */
export interface SubstanceSpecificationNameOfficial extends BackboneElement {
    /**
     * Which authority uses this official name
     * Which authority uses this official name.
     */
    authority?: CodeableConcept;
    /**
     * The status of the official name
     * The status of the official name.
     */
    status?: CodeableConcept;
    /**
     * Date of official name change
     * Date of official name change.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
}
/**
 * Names applicable to this substance
 * Names applicable to this substance.
 */
export interface SubstanceSpecificationName extends BackboneElement {
    /**
     * The actual name
     * The actual name.
     */
    name: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Name type
     * Name type.
     */
    type?: CodeableConcept;
    /**
     * The status of the name
     * The status of the name.
     */
    status?: CodeableConcept;
    /**
     * If this is the preferred name for this substance
     * If this is the preferred name for this substance.
     */
    preferred?: boolean;
    /**
     * Extension for preferred
     **/
    _preferred?: Element;
    /**
     * Language of the name
     * Language of the name.
     */
    language?: CodeableConcept[];
    /**
     * The use context of this name for example if there is a different name a drug active ingredient as opposed to a food colour additive
     * The use context of this name for example if there is a different name a drug active ingredient as opposed to a food colour additive.
     */
    domain?: CodeableConcept[];
    /**
     * The jurisdiction where this name applies
     * The jurisdiction where this name applies.
     */
    jurisdiction?: CodeableConcept[];
    /**
     * A synonym of this name
     * A synonym of this name.
     */
    synonym?: SubstanceSpecificationName[];
    /**
     * A translation for this name
     * A translation for this name.
     */
    translation?: SubstanceSpecificationName[];
    /**
     * Details of the official nature of this name
     * Details of the official nature of this name.
     */
    official?: SubstanceSpecificationNameOfficial[];
    /**
     * Supporting literature
     * Supporting literature.
     */
    source?: Reference[];
}
/**
 * A link between this substance and another, with details of the relationship
 * A link between this substance and another, with details of the relationship.
 */
export interface SubstanceSpecificationRelationship extends BackboneElement {
    /**
     * A pointer to another substance, as a resource or just a representational code
     * A pointer to another substance, as a resource or just a representational code.
     */
    substanceReference?: Reference;
    /**
     * A pointer to another substance, as a resource or just a representational code
     * A pointer to another substance, as a resource or just a representational code.
     */
    substanceCodeableConcept?: CodeableConcept;
    /**
     * For example "salt to parent", "active moiety", "starting material"
     * For example "salt to parent", "active moiety", "starting material".
     */
    relationship?: CodeableConcept;
    /**
     * For example where an enzyme strongly bonds with a particular substance, this is a defining relationship for that enzyme, out of several possible substance relationships
     * For example where an enzyme strongly bonds with a particular substance, this is a defining relationship for that enzyme, out of several possible substance relationships.
     */
    isDefining?: boolean;
    /**
     * Extension for isDefining
     **/
    _isDefining?: Element;
    /**
     * A numeric factor for the relationship, for instance to express that the salt of a substance has some percentage of the active substance in relation to some other
     * A numeric factor for the relationship, for instance to express that the salt of a substance has some percentage of the active substance in relation to some other.
     */
    amountQuantity?: Quantity;
    /**
     * A numeric factor for the relationship, for instance to express that the salt of a substance has some percentage of the active substance in relation to some other
     * A numeric factor for the relationship, for instance to express that the salt of a substance has some percentage of the active substance in relation to some other.
     */
    amountRange?: Range;
    /**
     * A numeric factor for the relationship, for instance to express that the salt of a substance has some percentage of the active substance in relation to some other
     * A numeric factor for the relationship, for instance to express that the salt of a substance has some percentage of the active substance in relation to some other.
     */
    amountRatio?: Ratio;
    /**
     * A numeric factor for the relationship, for instance to express that the salt of a substance has some percentage of the active substance in relation to some other
     * A numeric factor for the relationship, for instance to express that the salt of a substance has some percentage of the active substance in relation to some other.
     */
    amountString?: string;
    /**
     * Extension for amountString
     **/
    _amountString?: Element;
    /**
     * For use when the numeric
     * For use when the numeric.
     */
    amountRatioLowLimit?: Ratio;
    /**
     * An operator for the amount, for example "average", "approximately", "less than"
     * An operator for the amount, for example "average", "approximately", "less than".
     */
    amountType?: CodeableConcept;
    /**
     * Supporting literature
     * Supporting literature.
     */
    source?: Reference[];
}
/**
 * The detailed description of a substance, typically at a level beyond what is used for prescribing
 * The detailed description of a substance, typically at a level beyond what is used for prescribing.
 */
export interface SubstanceSpecification extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'SubstanceSpecification';
    /**
     * Identifier by which this substance is known
     * Identifier by which this substance is known.
     */
    identifier?: Identifier;
    /**
     * High level categorization, e.g. polymer or nucleic acid
     * High level categorization, e.g. polymer or nucleic acid.
     */
    type?: CodeableConcept;
    /**
     * Status of substance within the catalogue e.g. approved
     * Status of substance within the catalogue e.g. approved.
     */
    status?: CodeableConcept;
    /**
     * If the substance applies to only human or veterinary use
     * If the substance applies to only human or veterinary use.
     */
    domain?: CodeableConcept;
    /**
     * Textual description of the substance
     * Textual description of the substance.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Supporting literature
     * Supporting literature.
     */
    source?: Reference[];
    /**
     * Textual comment about this record of a substance
     * Textual comment about this record of a substance.
     */
    comment?: string;
    /**
     * Extension for comment
     **/
    _comment?: Element;
    /**
     * Moiety, for structural modifications
     * Moiety, for structural modifications.
     */
    moiety?: SubstanceSpecificationMoiety[];
    /**
     * General specifications for this substance, including how it is related to other substances
     * General specifications for this substance, including how it is related to other substances.
     */
    property?: SubstanceSpecificationProperty[];
    /**
     * General information detailing this substance
     * General information detailing this substance.
     */
    referenceInformation?: Reference;
    /**
     * Structural information
     * Structural information.
     */
    structure?: SubstanceSpecificationStructure;
    /**
     * Codes associated with the substance
     * Codes associated with the substance.
     */
    code?: SubstanceSpecificationCode[];
    /**
     * Names applicable to this substance
     * Names applicable to this substance.
     */
    name?: SubstanceSpecificationName[];
    /**
     * The molecular weight or weight range (for proteins, polymers or nucleic acids)
     * The molecular weight or weight range (for proteins, polymers or nucleic acids).
     */
    molecularWeight?: SubstanceSpecificationStructureIsotopeMolecularWeight[];
    /**
     * A link between this substance and another, with details of the relationship
     * A link between this substance and another, with details of the relationship.
     */
    relationship?: SubstanceSpecificationRelationship[];
    /**
     * Data items specific to nucleic acids
     * Data items specific to nucleic acids.
     */
    nucleicAcid?: Reference;
    /**
     * Data items specific to polymers
     * Data items specific to polymers.
     */
    polymer?: Reference;
    /**
     * Data items specific to proteins
     * Data items specific to proteins.
     */
    protein?: Reference;
    /**
     * Material or taxonomic/anatomical source for the substance
     * Material or taxonomic/anatomical source for the substance.
     */
    sourceMaterial?: Reference;
}
/**
 * The item that is delivered or supplied
 * The item that is being delivered or has been supplied.
 */
export interface SupplyDeliverySuppliedItem extends BackboneElement {
    /**
     * Amount dispensed
     * The amount of supply that has been dispensed. Includes unit of measure.
     */
    quantity?: Quantity;
    /**
     * Medication, Substance, or Device supplied
     * 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.
     */
    itemCodeableConcept?: CodeableConcept;
    /**
     * Medication, Substance, or Device supplied
     * 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.
     */
    itemReference?: Reference;
}
/**
 * Delivery of bulk Supplies
 * Record of delivery of what is supplied.
 */
export interface SupplyDelivery extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'SupplyDelivery';
    /**
     * External identifier
     * Identifier for the supply delivery event that is used to identify it across multiple disparate systems.
     * This identifier is typically assigned by the dispenser, and may be used to reference the delivery when exchanging information about it with other systems.
     */
    identifier?: Identifier[];
    /**
     * Fulfills plan, proposal or order
     * A plan, proposal or order that is fulfilled in whole or in part by this event.
     */
    basedOn?: Reference[];
    /**
     * Part of referenced event
     * A larger event of which this particular event is a component or step.
     * Not to be used to link an event to an Encounter - use Event.context for that.

[The allowed reference resources may be adjusted as appropriate for the event resource].
     */
    partOf?: Reference[];
    /**
     * Patient for whom the item is supplied
     * A link to a resource representing the person whom the delivered item is for.
     */
    patient?: Reference;
    /**
     * Category of dispense event
     * Indicates the type of dispensing event that is performed. Examples include: Trial Fill, Completion of Trial, Partial Fill, Emergency Fill, Samples, etc.
     */
    type?: CodeableConcept;
    /**
     * The item that is delivered or supplied
     * The item that is being delivered or has been supplied.
     */
    suppliedItem?: SupplyDeliverySuppliedItem;
    /**
     * When event occurred
     * The date or time(s) the activity occurred.
     * [The list of types may be constrained as appropriate for the type of event].
     */
    occurrenceDateTime?: dateTime;
    /**
     * Extension for occurrenceDateTime
     **/
    _occurrenceDateTime?: Element;
    /**
     * When event occurred
     * The date or time(s) the activity occurred.
     * [The list of types may be constrained as appropriate for the type of event].
     */
    occurrencePeriod?: Period;
    /**
     * When event occurred
     * The date or time(s) the activity occurred.
     * [The list of types may be constrained as appropriate for the type of event].
     */
    occurrenceTiming?: Timing;
    /**
     * Dispenser
     * The individual responsible for dispensing the medication, supplier or device.
     */
    supplier?: Reference;
    /**
     * Where the Supply was sent
     * Identification of the facility/location where the Supply was shipped to, as part of the dispense event.
     */
    destination?: Reference;
    /**
     * Who collected the Supply
     * Identifies the person who picked up the Supply.
     */
    receiver?: Reference[];
    /**
     * in-progress | completed | abandoned | entered-in-error
     * A code specifying the state of the dispense event.
     * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
     */
    status?: SupplyDeliveryStatus;
}
/**
 * Ordered item details
 * Specific parameters for the ordered item.  For example, the size of the indicated item.
 */
export interface SupplyRequestParameter extends BackboneElement {
    /**
     * Item detail
     * A code or string that identifies the device detail being asserted.
     */
    code?: CodeableConcept;
    /**
     * Value of detail
     * The value of the device detail.
     * Range means device should have a value that falls somewhere within the specified range.
     */
    valueCodeableConcept?: CodeableConcept;
    /**
     * Value of detail
     * The value of the device detail.
     * Range means device should have a value that falls somewhere within the specified range.
     */
    valueQuantity?: Quantity;
    /**
     * Value of detail
     * The value of the device detail.
     * Range means device should have a value that falls somewhere within the specified range.
     */
    valueRange?: Range;
    /**
     * Value of detail
     * The value of the device detail.
     * Range means device should have a value that falls somewhere within the specified range.
     */
    valueBoolean?: boolean;
    /**
     * Extension for valueBoolean
     **/
    _valueBoolean?: Element;
}
/**
 * Request for a medication, substance or device
 * A record of a request for a medication, substance or device used in the healthcare setting.
 */
export interface SupplyRequest extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'SupplyRequest';
    /**
     * Business Identifier for SupplyRequest
     * Business identifiers assigned to this SupplyRequest by the author and/or other systems. These identifiers remain constant as the resource is updated and propagates from server to server.
     * The identifier.type element is used to distinguish between the identifiers assigned by the requester/placer and the performer/filler.
     */
    identifier?: Identifier[];
    /**
     * The kind of supply (central, non-stock, etc.)
     * Category of supply, e.g.  central, non-stock, etc. This is used to support work flows associated with the supply process.
     */
    category?: CodeableConcept;
    /**
     * Medication, Substance, or Device requested to be supplied
     * 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.
     * Note that there's a difference between a prescription - an instruction to take a medication, along with a (sometimes) implicit supply, and an explicit request to supply, with no explicit instructions.
     */
    itemCodeableConcept?: CodeableConcept;
    /**
     * Medication, Substance, or Device requested to be supplied
     * 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.
     * Note that there's a difference between a prescription - an instruction to take a medication, along with a (sometimes) implicit supply, and an explicit request to supply, with no explicit instructions.
     */
    itemReference?: Reference;
    /**
     * The requested amount of the item indicated
     * The amount that is being ordered of the indicated item.
     */
    quantity: Quantity;
    /**
     * Ordered item details
     * Specific parameters for the ordered item.  For example, the size of the indicated item.
     */
    parameter?: SupplyRequestParameter[];
    /**
     * When the request should be fulfilled
     * When the request should be fulfilled.
     */
    occurrenceDateTime?: dateTime;
    /**
     * Extension for occurrenceDateTime
     **/
    _occurrenceDateTime?: Element;
    /**
     * When the request should be fulfilled
     * When the request should be fulfilled.
     */
    occurrencePeriod?: Period;
    /**
     * When the request should be fulfilled
     * When the request should be fulfilled.
     */
    occurrenceTiming?: Timing;
    /**
     * When the request was made
     * When the request was made.
     */
    authoredOn?: dateTime;
    /**
     * Extension for authoredOn
     **/
    _authoredOn?: Element;
    /**
     * Individual making the request
     * The device, practitioner, etc. who initiated the request.
     */
    requester?: Reference;
    /**
     * Who is intended to fulfill the request
     * Who is intended to fulfill the request.
     */
    supplier?: Reference[];
    /**
     * The reason why the supply item was requested
     * The reason why the supply item was requested.
     */
    reasonCode?: CodeableConcept[];
    /**
     * The reason why the supply item was requested
     * The reason why the supply item was requested.
     */
    reasonReference?: Reference[];
    /**
     * The origin of the supply
     * Where the supply is expected to come from.
     */
    deliverFrom?: Reference;
    /**
     * The destination of the supply
     * Where the supply is destined to go.
     */
    deliverTo?: Reference;
    /**
     * routine | urgent | asap | stat
     * Indicates how quickly this SupplyRequest should be addressed with respect to other requests.
     */
    priority?: SupplyRequestRequestPriority;
    /**
     * draft | active | suspended +
     * Status of the supply request.
     */
    status?: SupplyRequestStatus;
}
/**
 * Constraints on fulfillment tasks
 * 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.
 */
export interface TaskRestriction extends BackboneElement {
    /**
     * How many times to repeat
     * Indicates the number of times the requested action should occur.
     */
    repetitions?: positiveInt;
    /**
     * Extension for repetitions
     **/
    _repetitions?: Element;
    /**
     * When fulfillment sought
     * Over what time-period is fulfillment sought.
     * Note that period.high is the due date representing the time by which the task should be completed.
     */
    period?: Period;
    /**
     * For whom is fulfillment sought?
     * For requests that are targeted to more than on potential recipient/target, for whom is fulfillment sought?
     */
    recipient?: Reference[];
}
/**
 * Information used to perform task
 * Additional information that may be needed in the execution of the task.
 */
export interface TaskInput extends BackboneElement {
    /**
     * Label for the input
     * A code or description indicating how the input is intended to be used as part of the task execution.
     * If referencing a BPMN workflow or Protocol, the "system" is the URL for the workflow definition and the code is the "name" of the required input.
     */
    type: CodeableConcept;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueBase64Binary?: base64Binary;
    /**
     * Extension for valueBase64Binary
     **/
    _valueBase64Binary?: Element;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueBoolean?: boolean;
    /**
     * Extension for valueBoolean
     **/
    _valueBoolean?: Element;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueCanonical?: canonical;
    /**
     * Extension for valueCanonical
     **/
    _valueCanonical?: Element;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueCode?: code;
    /**
     * Extension for valueCode
     **/
    _valueCode?: Element;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueDate?: date;
    /**
     * Extension for valueDate
     **/
    _valueDate?: Element;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueDateTime?: dateTime;
    /**
     * Extension for valueDateTime
     **/
    _valueDateTime?: Element;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueDecimal?: decimal;
    /**
     * Extension for valueDecimal
     **/
    _valueDecimal?: Element;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueId?: id;
    /**
     * Extension for valueId
     **/
    _valueId?: Element;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueInstant?: instant;
    /**
     * Extension for valueInstant
     **/
    _valueInstant?: Element;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueInteger?: integer;
    /**
     * Extension for valueInteger
     **/
    _valueInteger?: Element;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueMarkdown?: markdown;
    /**
     * Extension for valueMarkdown
     **/
    _valueMarkdown?: Element;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueOid?: oid;
    /**
     * Extension for valueOid
     **/
    _valueOid?: Element;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valuePositiveInt?: positiveInt;
    /**
     * Extension for valuePositiveInt
     **/
    _valuePositiveInt?: Element;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueString?: string;
    /**
     * Extension for valueString
     **/
    _valueString?: Element;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueTime?: time;
    /**
     * Extension for valueTime
     **/
    _valueTime?: Element;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueUnsignedInt?: unsignedInt;
    /**
     * Extension for valueUnsignedInt
     **/
    _valueUnsignedInt?: Element;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueUri?: uri;
    /**
     * Extension for valueUri
     **/
    _valueUri?: Element;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueUrl?: url;
    /**
     * Extension for valueUrl
     **/
    _valueUrl?: Element;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueUuid?: uuid;
    /**
     * Extension for valueUuid
     **/
    _valueUuid?: Element;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueAddress?: Address;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueAge?: Age;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueAnnotation?: Annotation;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueAttachment?: Attachment;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueCodeableConcept?: CodeableConcept;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueCoding?: Coding;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueContactPoint?: ContactPoint;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueCount?: Count;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueDistance?: Distance;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueDuration?: Duration;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueHumanName?: HumanName;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueIdentifier?: Identifier;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueMoney?: Money;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valuePeriod?: Period;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueQuantity?: Quantity;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueRange?: Range;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueRatio?: Ratio;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueReference?: Reference;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueSampledData?: SampledData;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueSignature?: Signature;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueTiming?: Timing;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueContactDetail?: ContactDetail;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueContributor?: Contributor;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueDataRequirement?: DataRequirement;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueExpression?: Expression;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueParameterDefinition?: ParameterDefinition;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueRelatedArtifact?: RelatedArtifact;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueTriggerDefinition?: TriggerDefinition;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueUsageContext?: UsageContext;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueDosage?: Dosage;
    /**
     * Content to use in performing the task
     * The value of the input parameter as a basic type.
     */
    valueMeta?: Meta;
}
/**
 * Information produced as part of task
 * Outputs produced by the Task.
 */
export interface TaskOutput extends BackboneElement {
    /**
     * Label for output
     * The name of the Output parameter.
     */
    type: CodeableConcept;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueBase64Binary?: base64Binary;
    /**
     * Extension for valueBase64Binary
     **/
    _valueBase64Binary?: Element;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueBoolean?: boolean;
    /**
     * Extension for valueBoolean
     **/
    _valueBoolean?: Element;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueCanonical?: canonical;
    /**
     * Extension for valueCanonical
     **/
    _valueCanonical?: Element;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueCode?: code;
    /**
     * Extension for valueCode
     **/
    _valueCode?: Element;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueDate?: date;
    /**
     * Extension for valueDate
     **/
    _valueDate?: Element;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueDateTime?: dateTime;
    /**
     * Extension for valueDateTime
     **/
    _valueDateTime?: Element;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueDecimal?: decimal;
    /**
     * Extension for valueDecimal
     **/
    _valueDecimal?: Element;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueId?: id;
    /**
     * Extension for valueId
     **/
    _valueId?: Element;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueInstant?: instant;
    /**
     * Extension for valueInstant
     **/
    _valueInstant?: Element;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueInteger?: integer;
    /**
     * Extension for valueInteger
     **/
    _valueInteger?: Element;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueMarkdown?: markdown;
    /**
     * Extension for valueMarkdown
     **/
    _valueMarkdown?: Element;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueOid?: oid;
    /**
     * Extension for valueOid
     **/
    _valueOid?: Element;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valuePositiveInt?: positiveInt;
    /**
     * Extension for valuePositiveInt
     **/
    _valuePositiveInt?: Element;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueString?: string;
    /**
     * Extension for valueString
     **/
    _valueString?: Element;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueTime?: time;
    /**
     * Extension for valueTime
     **/
    _valueTime?: Element;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueUnsignedInt?: unsignedInt;
    /**
     * Extension for valueUnsignedInt
     **/
    _valueUnsignedInt?: Element;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueUri?: uri;
    /**
     * Extension for valueUri
     **/
    _valueUri?: Element;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueUrl?: url;
    /**
     * Extension for valueUrl
     **/
    _valueUrl?: Element;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueUuid?: uuid;
    /**
     * Extension for valueUuid
     **/
    _valueUuid?: Element;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueAddress?: Address;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueAge?: Age;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueAnnotation?: Annotation;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueAttachment?: Attachment;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueCodeableConcept?: CodeableConcept;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueCoding?: Coding;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueContactPoint?: ContactPoint;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueCount?: Count;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueDistance?: Distance;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueDuration?: Duration;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueHumanName?: HumanName;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueIdentifier?: Identifier;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueMoney?: Money;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valuePeriod?: Period;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueQuantity?: Quantity;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueRange?: Range;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueRatio?: Ratio;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueReference?: Reference;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueSampledData?: SampledData;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueSignature?: Signature;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueTiming?: Timing;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueContactDetail?: ContactDetail;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueContributor?: Contributor;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueDataRequirement?: DataRequirement;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueExpression?: Expression;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueParameterDefinition?: ParameterDefinition;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueRelatedArtifact?: RelatedArtifact;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueTriggerDefinition?: TriggerDefinition;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueUsageContext?: UsageContext;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueDosage?: Dosage;
    /**
     * Result of output
     * The value of the Output parameter as a basic type.
     */
    valueMeta?: Meta;
}
/**
 * A task to be performed
 * A task to be performed.
 */
export interface Task extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'Task';
    /**
     * Task Instance Identifier
     * The business identifier for this task.
     */
    identifier?: Identifier[];
    /**
     * Formal definition of task
     * The URL pointing to a *FHIR*-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this Task.
     */
    instantiatesCanonical?: canonical;
    /**
     * Extension for instantiatesCanonical
     **/
    _instantiatesCanonical?: Element;
    /**
     * Formal definition of task
     * The URL pointing to an *externally* maintained  protocol, guideline, orderset or other definition that is adhered to in whole or in part by this Task.
     */
    instantiatesUri?: uri;
    /**
     * Extension for instantiatesUri
     **/
    _instantiatesUri?: Element;
    /**
     * Request fulfilled by this task
     * BasedOn refers to a higher-level authorization that triggered the creation of the task.  It references a "request" resource such as a ServiceRequest, MedicationRequest, ServiceRequest, CarePlan, etc. which is distinct from the "request" resource the task is seeking to fulfill.  This latter resource is referenced by FocusOn.  For example, based on a ServiceRequest (= BasedOn), a task is created to fulfill a procedureRequest ( = FocusOn ) to collect a specimen from a patient.
     */
    basedOn?: Reference[];
    /**
     * Requisition or grouper id
     * An identifier that links together multiple tasks and other requests that were created in the same context.
     */
    groupIdentifier?: Identifier;
    /**
     * Composite task
     * Task that this particular task is part of.
     * This should usually be 0..1.
     */
    partOf?: Reference[];
    /**
     * Reason for current status
     * An explanation as to why this task is held, failed, was refused, etc.
     * This applies to the current status.  Look at the history of the task to see reasons for past statuses.
     */
    statusReason?: CodeableConcept;
    /**
     * E.g. "Specimen collected", "IV prepped"
     * Contains business-specific nuances of the business state.
     */
    businessStatus?: CodeableConcept;
    /**
     * Task Type
     * A name or code (or both) briefly describing what the task involves.
     * The title (eg "My Tasks", "Outstanding Tasks for Patient X") should go into the code.
     */
    code?: CodeableConcept;
    /**
     * Human-readable explanation of task
     * A free-text description of what is to be performed.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * What task is acting on
     * The request being actioned or the resource being manipulated by this task.
     * If multiple resources need to be manipulated, use sub-tasks.  (This ensures that status can be tracked independently for each referenced resource.).
     */
    focus?: Reference;
    /**
     * Beneficiary of the Task
     * The entity who benefits from the performance of the service specified in the task (e.g., the patient).
     */
    for?: Reference;
    /**
     * Healthcare event during which this task originated
     * The healthcare event  (e.g. a patient and healthcare provider interaction) during which this task was created.
     */
    encounter?: Reference;
    /**
     * Start and end time of execution
     * 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).
     */
    executionPeriod?: Period;
    /**
     * Task Creation Date
     * The date and time this task was created.
     */
    authoredOn?: dateTime;
    /**
     * Extension for authoredOn
     **/
    _authoredOn?: Element;
    /**
     * Task Last Modified Date
     * The date and time of last modification to this task.
     */
    lastModified?: dateTime;
    /**
     * Extension for lastModified
     **/
    _lastModified?: Element;
    /**
     * Who is asking for task to be done
     * The creator of the task.
     */
    requester?: Reference;
    /**
     * Requested performer
     * The kind of participant that should perform the task.
     */
    performerType?: CodeableConcept[];
    /**
     * Responsible individual
     * Individual organization or Device currently responsible for task execution.
     * Tasks may be created with an owner not yet identified.
     */
    owner?: Reference;
    /**
     * Where task occurs
     * Principal physical location where the this task is performed.
     */
    location?: Reference;
    /**
     * Why task is needed
     * A description or code indicating why this task needs to be performed.
     * This should only be included if there is no focus or if it differs from the reason indicated on the focus.
     */
    reasonCode?: CodeableConcept;
    /**
     * Why task is needed
     * A resource reference indicating why this task needs to be performed.
     * Tasks might be justified based on an Observation, a Condition, a past or planned procedure, etc.   This should only be included if there is no focus or if it differs from the reason indicated on the focus.    Use the CodeableConcept text element in `Task.reasonCode` if the data is free (uncoded) text.
     */
    reasonReference?: Reference;
    /**
     * Associated insurance coverage
     * Insurance plans, coverage extensions, pre-authorizations and/or pre-determinations that may be relevant to the Task.
     */
    insurance?: Reference[];
    /**
     * Comments made about the task
     * Free-text information captured about the task as it progresses.
     */
    note?: Annotation[];
    /**
     * Key events in history of the Task
     * 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.
     * This element does not point to the Provenance associated with the *current* version of the resource - as it would be created after this version existed.  The Provenance for the current version can be retrieved with a _revinclude.
     */
    relevantHistory?: Reference[];
    /**
     * Constraints on fulfillment tasks
     * 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.
     */
    restriction?: TaskRestriction;
    /**
     * Information used to perform task
     * Additional information that may be needed in the execution of the task.
     */
    input?: TaskInput[];
    /**
     * Information produced as part of task
     * Outputs produced by the Task.
     */
    output?: TaskOutput[];
    /**
     * unknown | proposal | plan | order | original-order | reflex-order | filler-order | instance-order | option
     * Indicates the "level" of actionability associated with the Task, i.e. i+R[9]Cs this a proposed task, a planned task, an actionable task, etc.
     * This element is immutable.  Proposed tasks, planned tasks, etc. must be distinct instances.

In most cases, Tasks will have an intent of "order".
     */
    intent: TaskIntent;
    /**
     * routine | urgent | asap | stat
     * Indicates how quickly the Task should be addressed with respect to other requests.
     */
    priority?: TaskPriority;
    /**
     * draft | requested | received | accepted | +
     * The current status of the task.
     */
    status: TaskStatus;
}
/**
 * Software that is covered by this terminology capability statement
 * Software that is covered by this terminology capability statement.  It is used when the statement describes the capabilities of a particular software version, independent of an installation.
 */
export interface TerminologyCapabilitiesSoftware extends BackboneElement {
    /**
     * A name the software is known by
     * Name the software is known by.
     */
    name: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Version covered by this statement
     * The version identifier for the software covered by this statement.
     * If possible, a version should be specified, as statements are likely to be different for different versions of software.
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
}
/**
 * If this describes a specific instance
 * Identifies a specific implementation instance that is described by the terminology capability statement - i.e. a particular installation, rather than the capabilities of a software program.
 */
export interface TerminologyCapabilitiesImplementation extends BackboneElement {
    /**
     * Describes this specific instance
     * Information about the specific installation that this terminology capability statement relates to.
     */
    description: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Base URL for the implementation
     * An absolute base URL for the implementation.
     */
    url?: url;
    /**
     * Extension for url
     **/
    _url?: Element;
}
/**
 * Filter Properties supported
 * Filter Properties supported.
 */
export interface TerminologyCapabilitiesCodeSystemVersionFilter extends BackboneElement {
    /**
     * Code of the property supported
     * Code of the property supported.
     */
    code: code;
    /**
     * Extension for code
     **/
    _code?: Element;
    /**
     * Operations supported for the property
     * Operations supported for the property.
     */
    op: code[];
    /**
     * Extension for op
     **/
    _op?: Element[];
}
/**
 * Version of Code System supported
 * For the code system, a list of versions that are supported by the server.
 * Language translations might not be available for all codes.
 */
export interface TerminologyCapabilitiesCodeSystemVersion extends BackboneElement {
    /**
     * Version identifier for this version
     * For version-less code systems, there should be a single version with no identifier.
     */
    code?: string;
    /**
     * Extension for code
     **/
    _code?: Element;
    /**
     * If this is the default version for this code system
     * If this is the default version for this code system.
     */
    isDefault?: boolean;
    /**
     * Extension for isDefault
     **/
    _isDefault?: Element;
    /**
     * If compositional grammar is supported
     * If the compositional grammar defined by the code system is supported.
     */
    compositional?: boolean;
    /**
     * Extension for compositional
     **/
    _compositional?: Element;
    /**
     * Language Displays supported
     * Language Displays supported.
     */
    language?: code[];
    /**
     * Extension for language
     **/
    _language?: Element[];
    /**
     * Filter Properties supported
     * Filter Properties supported.
     */
    filter?: TerminologyCapabilitiesCodeSystemVersionFilter[];
    /**
     * Properties supported for $lookup
     * Properties supported for $lookup.
     */
    property?: code[];
    /**
     * Extension for property
     **/
    _property?: Element[];
}
/**
 * A code system supported by the server
 * Identifies a code system that is supported by the server. If there is a no code system URL, then this declares the general assumptions a client can make about support for any CodeSystem resource.
 * The code system - identified by its system URL - may also be declared explicitly as a Code System Resource at /CodeSystem, but it might not be.
 */
export interface TerminologyCapabilitiesCodeSystem extends BackboneElement {
    /**
     * URI for the Code System
     * URI for the Code System.
     */
    uri?: canonical;
    /**
     * Extension for uri
     **/
    _uri?: Element;
    /**
     * Version of Code System supported
     * For the code system, a list of versions that are supported by the server.
     * Language translations might not be available for all codes.
     */
    version?: TerminologyCapabilitiesCodeSystemVersion[];
    /**
     * Whether subsumption is supported
     * True if subsumption is supported for this version of the code system.
     */
    subsumption?: boolean;
    /**
     * Extension for subsumption
     **/
    _subsumption?: Element;
}
/**
 * Supported expansion parameter
 * Supported expansion parameter.
 */
export interface TerminologyCapabilitiesExpansionParameter extends BackboneElement {
    /**
     * Expansion Parameter name
     * Expansion Parameter name.
     */
    name: code;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Description of support for parameter
     * Description of support for parameter.
     */
    documentation?: string;
    /**
     * Extension for documentation
     **/
    _documentation?: Element;
}
/**
 * Information about the [ValueSet/$expand](valueset-operation-expand.html) operation
 * Information about the [ValueSet/$expand](valueset-operation-expand.html) operation.
 */
export interface TerminologyCapabilitiesExpansion extends BackboneElement {
    /**
     * Whether the server can return nested value sets
     * Whether the server can return nested value sets.
     */
    hierarchical?: boolean;
    /**
     * Extension for hierarchical
     **/
    _hierarchical?: Element;
    /**
     * Whether the server supports paging on expansion
     * Whether the server supports paging on expansion.
     */
    paging?: boolean;
    /**
     * Extension for paging
     **/
    _paging?: Element;
    /**
     * Allow request for incomplete expansions?
     * Allow request for incomplete expansions?
     */
    incomplete?: boolean;
    /**
     * Extension for incomplete
     **/
    _incomplete?: Element;
    /**
     * Supported expansion parameter
     * Supported expansion parameter.
     */
    parameter?: TerminologyCapabilitiesExpansionParameter[];
    /**
     * Documentation about text searching works
     * Documentation about text searching works.
     * This documentation should cover things like case sensitivity,  use of punctuation if not ignored, what wild cards are supported (if any), whether text is starts with or contains, and whether word order matters.
     */
    textFilter?: markdown;
    /**
     * Extension for textFilter
     **/
    _textFilter?: Element;
}
/**
 * Information about the [ValueSet/$validate-code](valueset-operation-validate-code.html) operation
 * Information about the [ValueSet/$validate-code](valueset-operation-validate-code.html) operation.
 */
export interface TerminologyCapabilitiesValidateCode extends BackboneElement {
    /**
     * Whether translations are validated
     * Whether translations are validated.
     */
    translations: boolean;
    /**
     * Extension for translations
     **/
    _translations?: Element;
}
/**
 * Information about the [ConceptMap/$translate](conceptmap-operation-translate.html) operation
 * Information about the [ConceptMap/$translate](conceptmap-operation-translate.html) operation.
 */
export interface TerminologyCapabilitiesTranslation extends BackboneElement {
    /**
     * Whether the client must identify the map
     * Whether the client must identify the map.
     */
    needsMap: boolean;
    /**
     * Extension for needsMap
     **/
    _needsMap?: Element;
}
/**
 * Information about the [ConceptMap/$closure](conceptmap-operation-closure.html) operation
 * Whether the $closure operation is supported.
 */
export interface TerminologyCapabilitiesClosure extends BackboneElement {
    /**
     * If cross-system closure is supported
     * If cross-system closure is supported.
     */
    translation?: boolean;
    /**
     * Extension for translation
     **/
    _translation?: Element;
}
/**
 * A statement of system capabilities
 * A TerminologyCapabilities resource documents a set of capabilities (behaviors) of a FHIR Terminology Server that may be used as a statement of actual server functionality or a statement of required or desired server implementation.
 */
export interface TerminologyCapabilities extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'TerminologyCapabilities';
    /**
     * Canonical identifier for this terminology capabilities, represented as a URI (globally unique)
     * An absolute URI that is used to identify this terminology capabilities when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this terminology capabilities is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the terminology capabilities is stored on different servers.
     * Can be a urn:uuid: or a urn:oid: but real http: addresses are preferred.  Multiple instances may share the same URL if they have a distinct version.

The determination of when to create a new version of a resource (same url, new version) vs. defining a new artifact is up to the author.  Considerations for making this decision are found in [Technical and Business Versions](resource.html#versions).

In some cases, the resource can no longer be found at the stated url, but the url itself cannot change. Implementations can use the [meta.source](resource.html#meta) element to indicate where the current master source of the resource can be found.
     */
    url?: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Business version of the terminology capabilities
     * The identifier that is used to identify this version of the terminology capabilities when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the terminology capabilities 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.
     * There may be different terminology capabilities instances that have the same identifier but different versions.  The version can be appended to the url in a reference to allow a reference to a particular business version of the terminology capabilities with the format [url]|[version].
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
    /**
     * Name for this terminology capabilities (computer friendly)
     * A natural language name identifying the terminology capabilities. This name should be usable as an identifier for the module by machine processing applications such as code generation.
     * The name is not expected to be globally unique. The name should be a simple alphanumeric type name to ensure that it is machine-processing friendly.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Name for this terminology capabilities (human friendly)
     * A short, descriptive, user-friendly title for the terminology capabilities.
     * This name does not need to be machine-processing friendly and may contain punctuation, white-space, etc.
     */
    title?: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * For testing purposes, not real usage
     * A Boolean value to indicate that this terminology capabilities is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.
     * Allows filtering of terminology capabilitiess that are appropriate for use versus not.
     */
    experimental?: boolean;
    /**
     * Extension for experimental
     **/
    _experimental?: Element;
    /**
     * Date last changed
     * The date  (and optionally time) when the terminology capabilities was published. The date must change 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 terminology capabilities changes.
     * Note that this is not the same as the resource last-modified-date, since the resource may be a secondary representation of the terminology capabilities. Additional specific dates may be added as extensions or be found by consulting Provenances associated with past versions of the resource.
     */
    date: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Name of the publisher (organization or individual)
     * The name of the organization or individual that published the terminology capabilities.
     * Usually an organization but may be an individual. The publisher (or steward) of the terminology capabilities is the organization or individual primarily responsible for the maintenance and upkeep of the terminology capabilities. This is not necessarily the same individual or organization that developed and initially authored the content. The publisher is the primary point of contact for questions or issues with the terminology capabilities. This item SHOULD be populated unless the information is available from context.
     */
    publisher?: string;
    /**
     * Extension for publisher
     **/
    _publisher?: Element;
    /**
     * Contact details for the publisher
     * Contact details to assist a user in finding and communicating with the publisher.
     * May be a web site, an email address, a telephone number, etc.
     */
    contact?: ContactDetail[];
    /**
     * Natural language description of the terminology capabilities
     * A free text natural language description of the terminology capabilities 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.
     * This description can be used to capture details such as why the terminology capabilities was built, comments about misuse, instructions for clinical use and interpretation, literature references, examples from the paper world, etc. It is not a rendering of the terminology capabilities as conveyed in the 'text' field of the resource itself. This item SHOULD be populated unless the information is available from context (e.g. the language of the terminology capabilities is presumed to be the predominant language in the place the terminology capabilities was created).This does not need to be populated if the description is adequately implied by the software or implementation details.
     */
    description?: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * The context that the content is intended to support
     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate terminology capabilities instances.
     * When multiple useContexts are specified, there is no expectation that all or any of the contexts apply.
     */
    useContext?: UsageContext[];
    /**
     * Intended jurisdiction for terminology capabilities (if applicable)
     * A legal or geographic region in which the terminology capabilities is intended to be used.
     * It may be possible for the terminology capabilities to be used in jurisdictions other than those for which it was originally designed or intended.
     */
    jurisdiction?: CodeableConcept[];
    /**
     * Why this terminology capabilities is defined
     * Explanation of why this terminology capabilities is needed and why it has been designed as it has.
     * This element does not describe the usage of the terminology capabilities. Instead, it provides traceability of ''why'' the resource is either needed or ''why'' it is defined as it is.  This may be used to point to source materials or specifications that drove the structure of this terminology capabilities.
     */
    purpose?: markdown;
    /**
     * Extension for purpose
     **/
    _purpose?: Element;
    /**
     * Use and/or publishing restrictions
     * A copyright statement relating to the terminology capabilities and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the terminology capabilities.
     */
    copyright?: markdown;
    /**
     * Extension for copyright
     **/
    _copyright?: Element;
    /**
     * Software that is covered by this terminology capability statement
     * Software that is covered by this terminology capability statement.  It is used when the statement describes the capabilities of a particular software version, independent of an installation.
     */
    software?: TerminologyCapabilitiesSoftware;
    /**
     * If this describes a specific instance
     * Identifies a specific implementation instance that is described by the terminology capability statement - i.e. a particular installation, rather than the capabilities of a software program.
     */
    implementation?: TerminologyCapabilitiesImplementation;
    /**
     * Whether lockedDate is supported
     * Whether the server supports lockedDate.
     */
    lockedDate?: boolean;
    /**
     * Extension for lockedDate
     **/
    _lockedDate?: Element;
    /**
     * A code system supported by the server
     * Identifies a code system that is supported by the server. If there is a no code system URL, then this declares the general assumptions a client can make about support for any CodeSystem resource.
     * The code system - identified by its system URL - may also be declared explicitly as a Code System Resource at /CodeSystem, but it might not be.
     */
    codeSystem?: TerminologyCapabilitiesCodeSystem[];
    /**
     * Information about the [ValueSet/$expand](valueset-operation-expand.html) operation
     * Information about the [ValueSet/$expand](valueset-operation-expand.html) operation.
     */
    expansion?: TerminologyCapabilitiesExpansion;
    /**
     * Information about the [ValueSet/$validate-code](valueset-operation-validate-code.html) operation
     * Information about the [ValueSet/$validate-code](valueset-operation-validate-code.html) operation.
     */
    validateCode?: TerminologyCapabilitiesValidateCode;
    /**
     * Information about the [ConceptMap/$translate](conceptmap-operation-translate.html) operation
     * Information about the [ConceptMap/$translate](conceptmap-operation-translate.html) operation.
     */
    translation?: TerminologyCapabilitiesTranslation;
    /**
     * Information about the [ConceptMap/$closure](conceptmap-operation-closure.html) operation
     * Whether the $closure operation is supported.
     */
    closure?: TerminologyCapabilitiesClosure;
    /**
     * draft | active | retired | unknown
     * The status of this terminology capabilities. Enables tracking the life-cycle of the content.
     * Allows filtering of terminology capabilitiess that are appropriate for use versus not.This is not intended for use with actual capability statements, but where capability statements are used to describe possible or desired systems.
     */
    status: TerminologyCapabilitiesPublicationStatus;
    /**
     * instance | capability | requirements
     * 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).
     */
    kind: TerminologyCapabilitiesCapabilityStatementKind;
    /**
     * explicit | all
     * The degree to which the server supports the code search parameter on ValueSet, if it is supported.
     * See notes on the [ValueSet](valueset.html#) resource.
     */
    codeSearch?: TerminologyCapabilitiesCodeSearchSupport;
}
/**
 * A participant in the test execution, either the execution engine, a client, or a server
 * A participant in the test execution, either the execution engine, a client, or a server.
 */
export interface TestReportParticipant extends BackboneElement {
    /**
     * The uri of the participant. An absolute URL is preferred
     * The uri of the participant. An absolute URL is preferred.
     */
    uri: uri;
    /**
     * Extension for uri
     **/
    _uri?: Element;
    /**
     * The display name of the participant
     * The display name of the participant.
     */
    display?: string;
    /**
     * Extension for display
     **/
    _display?: Element;
    /**
     * test-engine | client | server
     * The type of participant.
     */
    type: TestReportParticipantType;
}
/**
 * The operation to perform
 * The operation performed.
 */
export interface TestReportSetupActionOperation extends BackboneElement {
    /**
     * A message associated with the result
     * An explanatory message associated with the result.
     */
    message?: markdown;
    /**
     * Extension for message
     **/
    _message?: Element;
    /**
     * A link to further details on the result
     * A link to further details on the result.
     */
    detail?: uri;
    /**
     * Extension for detail
     **/
    _detail?: Element;
    /**
     * pass | skip | fail | warning | error
     * The result of this operation.
     */
    result: TestReportActionResult;
}
/**
 * The assertion to perform
 * The results of the assertion performed on the previous operations.
 */
export interface TestReportSetupActionAssert extends BackboneElement {
    /**
     * A message associated with the result
     * An explanatory message associated with the result.
     */
    message?: markdown;
    /**
     * Extension for message
     **/
    _message?: Element;
    /**
     * A link to further details on the result
     * A link to further details on the result.
     */
    detail?: string;
    /**
     * Extension for detail
     **/
    _detail?: Element;
    /**
     * pass | skip | fail | warning | error
     * The result of this assertion.
     */
    result: TestReportActionResult;
}
/**
 * A setup operation or assert that was executed
 * Action would contain either an operation or an assertion.
 * An action should contain either an operation or an assertion but not both.  It can contain any number of variables.
 */
export interface TestReportSetupAction extends BackboneElement {
    /**
     * The operation to perform
     * The operation performed.
     */
    operation?: TestReportSetupActionOperation;
    /**
     * The assertion to perform
     * The results of the assertion performed on the previous operations.
     */
    assert?: TestReportSetupActionAssert;
}
/**
 * The results of the series of required setup operations before the tests were executed
 * The results of the series of required setup operations before the tests were executed.
 */
export interface TestReportSetup extends BackboneElement {
    /**
     * A setup operation or assert that was executed
     * Action would contain either an operation or an assertion.
     * An action should contain either an operation or an assertion but not both.  It can contain any number of variables.
     */
    action: TestReportSetupAction[];
}
/**
 * A test operation or assert that was performed
 * Action would contain either an operation or an assertion.
 * An action should contain either an operation or an assertion but not both.  It can contain any number of variables.
 */
export interface TestReportTestAction extends BackboneElement {
    /**
     * The operation performed
     * An operation would involve a REST request to a server.
     */
    operation?: TestReportSetupActionOperation;
    /**
     * The assertion performed
     * The results of the assertion performed on the previous operations.
     */
    assert?: TestReportSetupActionAssert;
}
/**
 * A test executed from the test script
 * A test executed from the test script.
 */
export interface TestReportTest extends BackboneElement {
    /**
     * Tracking/logging name of this test
     * The name of this test used for tracking/logging purposes by test engines.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Tracking/reporting short description of the test
     * A short description of the test used by test engines for tracking and reporting purposes.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * A test operation or assert that was performed
     * Action would contain either an operation or an assertion.
     * An action should contain either an operation or an assertion but not both.  It can contain any number of variables.
     */
    action: TestReportTestAction[];
}
/**
 * One or more teardown operations performed
 * The teardown action will only contain an operation.
 * An action should contain either an operation or an assertion but not both.  It can contain any number of variables.
 */
export interface TestReportTeardownAction extends BackboneElement {
    /**
     * The teardown operation performed
     * An operation would involve a REST request to a server.
     */
    operation: TestReportSetupActionOperation;
}
/**
 * The results of running the series of required clean up steps
 * The results of the series of operations required to clean up after all the tests were executed (successfully or otherwise).
 */
export interface TestReportTeardown extends BackboneElement {
    /**
     * One or more teardown operations performed
     * The teardown action will only contain an operation.
     * An action should contain either an operation or an assertion but not both.  It can contain any number of variables.
     */
    action: TestReportTeardownAction[];
}
/**
 * Describes the results of a TestScript execution
 * A summary of information based on the results of executing a TestScript.
 */
export interface TestReport extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'TestReport';
    /**
     * External identifier
     * Identifier for the TestScript assigned for external purposes outside the context of FHIR.
     */
    identifier?: Identifier;
    /**
     * Informal name of the executed TestScript
     * A free text natural language name identifying the executed TestScript.
     * Not expected to be globally unique.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Reference to the  version-specific TestScript that was executed to produce this TestReport
     * Ideally this is an absolute URL that is used to identify the version-specific TestScript that was executed, matching the `TestScript.url`.
     */
    testScript: Reference;
    /**
     * The final score (percentage of tests passed) resulting from the execution of the TestScript
     * The final score (percentage of tests passed) resulting from the execution of the TestScript.
     */
    score?: decimal;
    /**
     * Extension for score
     **/
    _score?: Element;
    /**
     * Name of the tester producing this report (Organization or individual)
     * Name of the tester producing this report (Organization or individual).
     * Usually an organization, but may be an individual. This item SHOULD be populated unless the information is available from context.
     */
    tester?: string;
    /**
     * Extension for tester
     **/
    _tester?: Element;
    /**
     * When the TestScript was executed and this TestReport was generated
     * When the TestScript was executed and this TestReport was generated.
     * Additional specific dates may be added as extensions.
     */
    issued?: dateTime;
    /**
     * Extension for issued
     **/
    _issued?: Element;
    /**
     * A participant in the test execution, either the execution engine, a client, or a server
     * A participant in the test execution, either the execution engine, a client, or a server.
     */
    participant?: TestReportParticipant[];
    /**
     * The results of the series of required setup operations before the tests were executed
     * The results of the series of required setup operations before the tests were executed.
     */
    setup?: TestReportSetup;
    /**
     * A test executed from the test script
     * A test executed from the test script.
     */
    test?: TestReportTest[];
    /**
     * The results of running the series of required clean up steps
     * The results of the series of operations required to clean up after all the tests were executed (successfully or otherwise).
     */
    teardown?: TestReportTeardown;
    /**
     * completed | in-progress | waiting | stopped | entered-in-error
     * The current state of this test report.
     * The status represents where the execution is currently within the test script execution life cycle.

This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
     */
    status: TestReportStatus;
    /**
     * pass | fail | pending
     * The overall result from the execution of the TestScript.
     * The pass and fail result represents a completed test script execution. The pending result represents a test script execution that has not yet started or is currently in progress.
     */
    result: TestReportResult;
}
/**
 * An abstract server representing a client or sender in a message exchange
 * An abstract server used in operations within this test script in the origin element.
 * The purpose of this element is to define the profile of an origin element used elsewhere in the script.  Test engines could then use the origin-profile mapping to offer a filtered list of test systems that can serve as the sender for the interaction.
 */
export interface TestScriptOrigin extends BackboneElement {
    /**
     * The index of the abstract origin server starting at 1
     * Abstract name given to an origin server in this test script.  The name is provided as a number starting at 1.
     * A given origin index (e.g. 1) can appear only once in the list (e.g. Origin 1 cannot be specified twice ... once as FormFiller and again as FormProcessor within the same script as that could get confusing during test configuration).

Different origin indices could play the same actor in the same test script (e.g. You could have two different test systems acting as Form-Filler).

The origin indices provided elsewhere in the test script must be one of these origin indices.
     */
    index: integer;
    /**
     * Extension for index
     **/
    _index?: Element;
    /**
     * FHIR-Client | FHIR-SDC-FormFiller
     * The type of origin profile the test system supports.
     * Must be a "sender"/"client" profile.
     */
    profile: Coding;
}
/**
 * An abstract server representing a destination or receiver in a message exchange
 * An abstract server used in operations within this test script in the destination element.
 * The purpose of this element is to define the profile of a destination element used elsewhere in the script.  Test engines could then use the destination-profile mapping to offer a filtered list of test systems that can serve as the receiver for the interaction.
 */
export interface TestScriptDestination extends BackboneElement {
    /**
     * The index of the abstract destination server starting at 1
     * Abstract name given to a destination server in this test script.  The name is provided as a number starting at 1.
     * A given destination index (e.g. 1) can appear only once in the list (e.g. Destination 1 cannot be specified twice ... once as Form-Manager and again as Form-Processor within the same script as that could get confusing during test configuration).

Different destination indices could play the same actor in the same test script (e.g. You could have two different test systems acting as Form-Manager).

The destination indices provided elsewhere in the test script must be one of these destination indices.
     */
    index: integer;
    /**
     * Extension for index
     **/
    _index?: Element;
    /**
     * FHIR-Server | FHIR-SDC-FormManager | FHIR-SDC-FormReceiver | FHIR-SDC-FormProcessor
     * The type of destination profile the test system supports.
     * Must be a "receiver"/"server" profile.
     */
    profile: Coding;
}
/**
 * Links to the FHIR specification
 * A link to the FHIR specification that this test is covering.
 */
export interface TestScriptMetadataLink extends BackboneElement {
    /**
     * URL to the specification
     * URL to a particular requirement or feature within the FHIR specification.
     */
    url: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Short description
     * Short description of the link.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
}
/**
 * Capabilities  that are assumed to function correctly on the FHIR server being tested
 * Capabilities that must exist and are assumed to function correctly on the FHIR server being tested.
 * When the metadata capabilities section is defined at TestScript.metadata or at TestScript.setup.metadata, and the server's conformance statement does not contain the elements defined in the minimal conformance statement, then all the tests in the TestScript are skipped.  When the metadata capabilities section is defined at TestScript.test.metadata and the server's conformance statement does not contain the elements defined in the minimal conformance statement, then only that test is skipped.  The "metadata.capabilities.required" and "metadata.capabilities.validated" elements only indicate whether the capabilities are the primary focus of the test script or not.  They do not impact the skipping logic.  Capabilities whose "metadata.capabilities.validated" flag is true are the primary focus of the test script.
 */
export interface TestScriptMetadataCapability extends BackboneElement {
    /**
     * Are the capabilities required?
     * Whether or not the test execution will require the given capabilities of the server in order for this test script to execute.
     */
    required: boolean;
    /**
     * Extension for required
     **/
    _required?: Element;
    /**
     * Are the capabilities validated?
     * Whether or not the test execution will validate the given capabilities of the server in order for this test script to execute.
     */
    validated: boolean;
    /**
     * Extension for validated
     **/
    _validated?: Element;
    /**
     * The expected capabilities of the server
     * Description of the capabilities that this test script is requiring the server to support.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Which origin server these requirements apply to
     * Which origin server these requirements apply to.
     */
    origin?: integer[];
    /**
     * Extension for origin
     **/
    _origin?: Element[];
    /**
     * Which server these requirements apply to
     * Which server these requirements apply to.
     */
    destination?: integer;
    /**
     * Extension for destination
     **/
    _destination?: Element;
    /**
     * Links to the FHIR specification
     * Links to the FHIR specification that describes this interaction and the resources involved in more detail.
     */
    link?: uri[];
    /**
     * Extension for link
     **/
    _link?: Element[];
    /**
     * Required Capability Statement
     * 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.
     * The conformance statement of the server has to contain at a minimum the contents of the reference pointed to by this element.
     */
    capabilities: canonical;
    /**
     * Extension for capabilities
     **/
    _capabilities?: Element;
}
/**
 * Required capability that is assumed to function correctly on the FHIR server being tested
 * The required capability must exist and are assumed to function correctly on the FHIR server being tested.
 */
export interface TestScriptMetadata extends BackboneElement {
    /**
     * Links to the FHIR specification
     * A link to the FHIR specification that this test is covering.
     */
    link?: TestScriptMetadataLink[];
    /**
     * Capabilities  that are assumed to function correctly on the FHIR server being tested
     * Capabilities that must exist and are assumed to function correctly on the FHIR server being tested.
     * When the metadata capabilities section is defined at TestScript.metadata or at TestScript.setup.metadata, and the server's conformance statement does not contain the elements defined in the minimal conformance statement, then all the tests in the TestScript are skipped.  When the metadata capabilities section is defined at TestScript.test.metadata and the server's conformance statement does not contain the elements defined in the minimal conformance statement, then only that test is skipped.  The "metadata.capabilities.required" and "metadata.capabilities.validated" elements only indicate whether the capabilities are the primary focus of the test script or not.  They do not impact the skipping logic.  Capabilities whose "metadata.capabilities.validated" flag is true are the primary focus of the test script.
     */
    capability: TestScriptMetadataCapability[];
}
/**
 * Fixture in the test script - by reference (uri)
 * Fixture in the test script - by reference (uri). All fixtures are required for the test script to execute.
 */
export interface TestScriptFixture extends BackboneElement {
    /**
     * Whether or not to implicitly create the fixture during setup
     * 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.
     */
    autocreate: boolean;
    /**
     * Extension for autocreate
     **/
    _autocreate?: Element;
    /**
     * Whether or not to implicitly delete the fixture during teardown
     * 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.
     */
    autodelete: boolean;
    /**
     * Extension for autodelete
     **/
    _autodelete?: Element;
    /**
     * Reference of the resource
     * Reference to the resource (containing the contents of the resource needed for operations).
     * See http://build.fhir.org/resourcelist.html for complete list of resource types.
     */
    resource?: Reference;
}
/**
 * Placeholder for evaluated elements
 * Variable is set based either on element value in response body or on header field value in the response headers.
 * Variables would be set based either on XPath/JSONPath expressions against fixtures (static and response), or headerField evaluations against response headers. If variable evaluates to nodelist or anything other than a primitive value, then test engine would report an error.  Variables would be used to perform clean replacements in "operation.params", "operation.requestHeader.value", and "operation.url" element values during operation calls and in "assert.value" during assertion evaluations. This limits the places that test engines would need to look for placeholders "${}".  Variables are scoped to the whole script. They are NOT evaluated at declaration. They are evaluated by test engine when used for substitutions in "operation.params", "operation.requestHeader.value", and "operation.url" element values during operation calls and in "assert.value" during assertion evaluations.  See example testscript-search.xml.
 */
export interface TestScriptVariable extends BackboneElement {
    /**
     * Descriptive name for this variable
     * Descriptive name for this variable.
     * Placeholders would contain the variable name wrapped in ${} in "operation.params", "operation.requestHeader.value", and "operation.url" elements.  These placeholders would need to be replaced by the variable value before the operation is executed.
     */
    name: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Default, hard-coded, or user-defined value for this variable
     * A default, hard-coded, or user-defined value for this variable.
     * The purpose of this element is to allow for a pre-defined value that can be used as a default or as an override value. Test engines can optionally use this as a placeholder for user-defined execution time values.
     */
    defaultValue?: string;
    /**
     * Extension for defaultValue
     **/
    _defaultValue?: Element;
    /**
     * Natural language description of the variable
     * A free text natural language description of the variable and its purpose.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * The FHIRPath expression against the fixture body
     * The FHIRPath expression to evaluate against the fixture body. When variables are defined, only one of either expression, headerField or path must be specified.
     * If headerField is defined, then the variable will be evaluated against the headers that sourceId is pointing to.  If expression or path is defined, then the variable will be evaluated against the fixture body that sourceId is pointing to.  It is an error to define any combination of expression, headerField and path.
     */
    expression?: string;
    /**
     * Extension for expression
     **/
    _expression?: Element;
    /**
     * HTTP header field name for source
     * Will be used to grab the HTTP header field value from the headers that sourceId is pointing to.
     * If headerField is defined, then the variable will be evaluated against the headers that sourceId is pointing to.  If path is defined, then the variable will be evaluated against the fixture body that sourceId is pointing to.  It is an error to define both headerField and path.
     */
    headerField?: string;
    /**
     * Extension for headerField
     **/
    _headerField?: Element;
    /**
     * Hint help text for default value to enter
     * Displayable text string with hint help information to the user when entering a default value.
     */
    hint?: string;
    /**
     * Extension for hint
     **/
    _hint?: Element;
    /**
     * XPath or JSONPath against the fixture body
     * XPath or JSONPath to evaluate against the fixture body.  When variables are defined, only one of either expression, headerField or path must be specified.
     * If headerField is defined, then the variable will be evaluated against the headers that sourceId is pointing to.  If expression or path is defined, then the variable will be evaluated against the fixture body that sourceId is pointing to.  It is an error to define any combination of expression, headerField and path.
     */
    path?: string;
    /**
     * Extension for path
     **/
    _path?: Element;
    /**
     * Fixture Id of source expression or headerField within this variable
     * Fixture to evaluate the XPath/JSONPath expression or the headerField  against within this variable.
     * This can be a statically defined fixture (at the top of the TestScript) or a dynamically set fixture created by responseId of the `action.operation` element.
     */
    sourceId?: id;
    /**
     * Extension for sourceId
     **/
    _sourceId?: Element;
}
/**
 * Each operation can have one or more header elements
 * Header elements would be used to set HTTP headers.
 * This gives control to test-script writers to set headers explicitly based on test requirements.  It will allow for testing using:  - "If-Modified-Since" and "If-None-Match" headers.  See http://build.fhir.org/http.html#2.1.0.5.1 - "If-Match" header.  See http://build.fhir.org/http.html#2.1.0.11 - Conditional Create using "If-None-Exist".  See http://build.fhir.org/http.html#2.1.0.13.1 - Invalid "Content-Type" header for negative testing. - etc.
 */
export interface TestScriptSetupActionOperationRequestHeader extends BackboneElement {
    /**
     * HTTP header field name
     * The HTTP header field e.g. "Accept".
     * If header element is specified, then field is required.
     */
    field: string;
    /**
     * Extension for field
     **/
    _field?: Element;
    /**
     * HTTP headerfield value
     * The value of the header e.g. "application/fhir+xml".
     * If header element is specified, then value is required.  No conversions will be done by the test engine e.g. "xml" to "application/fhir+xml".  The values will be set in HTTP headers "as-is".  Test engines do have to look for placeholders (${}) and replace the variable placeholders with the variable values at runtime before sending the request.
     */
    value: string;
    /**
     * Extension for value
     **/
    _value?: Element;
}
/**
 * The setup operation to perform
 * The operation to perform.
 */
export interface TestScriptSetupActionOperation extends BackboneElement {
    /**
     * The operation code type that will be executed
     * Server interaction or operation type.
     * See http://build.fhir.org/http.html for list of server interactions.
     */
    type?: Coding;
    /**
     * Resource type
     * The type of the resource.  See http://build.fhir.org/resourcelist.html.
     * If "url" element is specified, then "targetId", "params", and "resource" elements will be ignored as "url" element will have everything needed for constructing the request url.  If "params" element is specified, then "targetId" element is ignored. For FHIR operations that require a resource (e.g. "read" and "vread" operations), the "resource" element must be specified when "params" element is specified.  If "url" and "params" elements are absent, then the request url will be constructed from "targetId" fixture if present. For "read" operation, the resource and id values will be extracted from "targetId" fixture and used to construct the url. For "vread" and "history" operations, the versionId value will also be used.
     */
    resource?: code;
    /**
     * Extension for resource
     **/
    _resource?: Element;
    /**
     * Tracking/logging operation label
     * The label would be used for tracking/logging purposes by test engines.
     * This has no impact on the verification itself.
     */
    label?: string;
    /**
     * Extension for label
     **/
    _label?: Element;
    /**
     * Tracking/reporting operation description
     * The description would be used by test engines for tracking and reporting purposes.
     * This has no impact on the verification itself.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Mime type to accept in the payload of the response, with charset etc.
     * The mime-type to use for RESTful operation in the 'Accept' header.
     * If this is specified, then test engine shall set the 'Accept' header to the corresponding value.  If you'd like to explicitly set the 'Accept' to some other value then use the 'requestHeader' element.
     */
    accept?: code;
    /**
     * Extension for accept
     **/
    _accept?: Element;
    /**
     * Mime type of the request payload contents, with charset etc.
     * The mime-type to use for RESTful operation in the 'Content-Type' header.
     * If this is specified, then test engine shall set the 'Content-Type' header to the corresponding value.  If you'd like to explicitly set the 'Content-Type' to some other value then use the 'requestHeader' element.
     */
    contentType?: code;
    /**
     * Extension for contentType
     **/
    _contentType?: Element;
    /**
     * Server responding to the request
     * The server where the request message is destined for.  Must be one of the server numbers listed in TestScript.destination section.
     * If multiple TestScript.destination elements are defined and operation.destination is undefined, test engine will report an error as it cannot determine what destination to use for the exchange.
     */
    destination?: integer;
    /**
     * Extension for destination
     **/
    _destination?: Element;
    /**
     * Whether or not to send the request url in encoded format
     * 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.
     */
    encodeRequestUrl: boolean;
    /**
     * Extension for encodeRequestUrl
     **/
    _encodeRequestUrl?: Element;
    /**
     * Server initiating the request
     * The server where the request message originates from.  Must be one of the server numbers listed in TestScript.origin section.
     * If absent, test engine will send the message.  When present, test engine will not send the request message but will wait for the request message to be sent from this origin server.
     */
    origin?: integer;
    /**
     * Extension for origin
     **/
    _origin?: Element;
    /**
     * Explicitly defined path parameters
     * Path plus parameters after [type].  Used to set parts of the request URL explicitly.
     * If "url" element is specified, then "targetId", "params", and "resource" elements will be ignored as "url" element will have everything needed for constructing the request url.  If "params" element is specified, then "targetId" element is ignored.  For FHIR operations that require a resource (e.g. "read" and "vread" operations), the "resource" element must be specified when "params" element is specified.  If "url" and "params" elements are absent, then the request url will be constructed from "targetId" fixture if present.  For "read" operation, the resource and id values will be extracted from "targetId" fixture and used to construct the url.  For "vread" and "history" operations, the versionId value will also be used.   Test engines would append whatever is specified for "params" to the URL after the resource type without tampering with the string (beyond encoding the URL for HTTP).  The "params" element does not correspond exactly to "search parameters".  Nor is it the "path".  It corresponds to the part of the URL that comes after the [type] (when "resource" element is specified); e.g. It corresponds to "/[id]/_history/[vid] {?_format=[mime-type]}" in the following operation: GET [base]/[type]/[id]/_history/[vid] {?_format=[mime-type]}  Test engines do have to look for placeholders (${}) and replace the variable placeholders with the variable values at runtime before sending the request.
     */
    params?: string;
    /**
     * Extension for params
     **/
    _params?: Element;
    /**
     * Each operation can have one or more header elements
     * Header elements would be used to set HTTP headers.
     * This gives control to test-script writers to set headers explicitly based on test requirements.  It will allow for testing using:  - "If-Modified-Since" and "If-None-Match" headers.  See http://build.fhir.org/http.html#2.1.0.5.1 - "If-Match" header.  See http://build.fhir.org/http.html#2.1.0.11 - Conditional Create using "If-None-Exist".  See http://build.fhir.org/http.html#2.1.0.13.1 - Invalid "Content-Type" header for negative testing. - etc.
     */
    requestHeader?: TestScriptSetupActionOperationRequestHeader[];
    /**
     * Fixture Id of mapped request
     * The fixture id (maybe new) to map to the request.
     * If a requestId is supplied, then the resulting request (both headers and body) is mapped to the fixture ID (which may be entirely new and previously undeclared) designated by "requestId".  If requestId is not specified, it is the test engine's responsibility to store the request and use it as the requestId in subsequent assertions when assertion path and/or headerField is specified, direction is equal to request, and the requestId in not specified.
     */
    requestId?: id;
    /**
     * Extension for requestId
     **/
    _requestId?: Element;
    /**
     * Fixture Id of mapped response
     * The fixture id (maybe new) to map to the response.
     * If a responseId is supplied, and the server responds, then the resulting response (both headers and body) is mapped to the fixture ID (which may be entirely new and previously undeclared) designated by "responseId".  If responseId is not specified, it is the test engine's responsibility to store the response and use it as the responseId in subsequent assertions when assertion path and/or headerField is specified and the responseId is not specified.
     */
    responseId?: id;
    /**
     * Extension for responseId
     **/
    _responseId?: Element;
    /**
     * Fixture Id of body for PUT and POST requests
     * The id of the fixture used as the body of a PUT or POST request.
     */
    sourceId?: id;
    /**
     * Extension for sourceId
     **/
    _sourceId?: Element;
    /**
     * Id of fixture used for extracting the [id],  [type], and [vid] for GET requests
     * Id of fixture used for extracting the [id],  [type], and [vid] for GET requests.
     * If "url" element is specified, then "targetId", "params", and "resource" elements will be ignored as "url" element will have everything needed for constructing the request url.  If "params" element is specified, then "targetId" element is ignored.  For FHIR operations that require a resource (e.g. "read" and "vread" operations), the "resource" element must be specified when "params" element is specified.  If "url" and "params" elements are absent, then the request url will be constructed from "targetId" fixture if present.  For "read" operation, the resource and id values will be extracted from "targetId" fixture and used to construct the url.  For "vread" and "history" operations, the versionId value will also be used.
     */
    targetId?: id;
    /**
     * Extension for targetId
     **/
    _targetId?: Element;
    /**
     * Request URL
     * Complete request URL.
     * Used to set the request URL explicitly.  If "url" element is defined, then "targetId", "resource", and "params" elements will be ignored.  Test engines would use whatever is specified in "url" without tampering with the string (beyond encoding the URL for HTTP).  Test engines do have to look for placeholders (${}) and replace the variable placeholders with the variable values at runtime before sending the request.
     */
    url?: string;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * delete | get | options | patch | post | put | head
     * The HTTP method the test engine MUST use for this operation regardless of any other operation details.
     * The primary purpose of the explicit HTTP method is support of  HTTP POST method invocation of the FHIR search. Other uses will include support of negative testing.
     */
    method?: TestScriptRequestMethodCode;
}
/**
 * The assertion to perform
 * Evaluates the results of previous operations to determine if the server under test behaves appropriately.
 * In order to evaluate an assertion, the request, response, and results of the most recently executed operation must always be maintained by the test engine.
 */
export interface TestScriptSetupActionAssert extends BackboneElement {
    /**
     * Tracking/logging assertion label
     * The label would be used for tracking/logging purposes by test engines.
     * This has no impact on the verification itself.
     */
    label?: string;
    /**
     * Extension for label
     **/
    _label?: Element;
    /**
     * Tracking/reporting assertion description
     * The description would be used by test engines for tracking and reporting purposes.
     * This has no impact on the verification itself.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * Id of the source fixture to be evaluated
     * Id of the source fixture used as the contents to be evaluated by either the "source/expression" or "sourceId/path" definition.
     */
    compareToSourceId?: string;
    /**
     * Extension for compareToSourceId
     **/
    _compareToSourceId?: Element;
    /**
     * The FHIRPath expression to evaluate against the source fixture
     * The FHIRPath expression to evaluate against the source fixture. When compareToSourceId is defined, either compareToSourceExpression or compareToSourcePath must be defined, but not both.
     * Thefhirpath expression to be evaluated against the expected fixture to compare to. Ignored if "assert.value" is used. The evaluation will be done before the assertion is evaluated.
     */
    compareToSourceExpression?: string;
    /**
     * Extension for compareToSourceExpression
     **/
    _compareToSourceExpression?: Element;
    /**
     * XPath or JSONPath expression to evaluate against the source fixture
     * XPath or JSONPath expression to evaluate against the source fixture. When compareToSourceId is defined, either compareToSourceExpression or compareToSourcePath must be defined, but not both.
     * The XPath or JSONPath expression to be evaluated against the expected fixture to compare to. Ignored if "assert.value" is used. The evaluation will be done before the assertion is evaluated.
     */
    compareToSourcePath?: string;
    /**
     * Extension for compareToSourcePath
     **/
    _compareToSourcePath?: Element;
    /**
     * Mime type to compare against the 'Content-Type' header
     * The mime-type contents to compare against the request or response message 'Content-Type' header.
     * If this is specified, then test engine shall confirm that the content-type of the last operation's headers is set to this value.  If "assert.sourceId" element is specified, then the evaluation will be done against the headers mapped to that sourceId (and not the last operation's headers).  If you'd like to have more control over the string, then use 'assert.headerField' instead.
     */
    contentType?: code;
    /**
     * Extension for contentType
     **/
    _contentType?: Element;
    /**
     * The FHIRPath expression to be evaluated
     * The FHIRPath expression to be evaluated against the request or response message contents - HTTP headers and payload.
     * If both "expression" and a "fixtureId" are specified, then the expression will be evaluated against the request or response body mapped to the fixtureId.  If "expression" is specified and a "fixtureId" is not, then the expression will be evaluated against the response body of the last operation.  Test engines are to store the request and response body and headers of the last operation at all times for subsequent assertions.
     */
    expression?: string;
    /**
     * Extension for expression
     **/
    _expression?: Element;
    /**
     * HTTP header field name
     * The HTTP header field name e.g. 'Location'.
     * If "headerField" is specified then "value" must be specified.  If "sourceId" is not specified, then "headerField" will be evaluated against the last operation's response headers.  Test engines are to keep track of the last operation's response body and response headers.
     */
    headerField?: string;
    /**
     * Extension for headerField
     **/
    _headerField?: Element;
    /**
     * Fixture Id of minimum content resource
     * The ID of a fixture.  Asserts that the response contains at a minimum the fixture specified by minimumId.
     * Asserts that the response contains all the element/content in another fixture pointed to by minimumId.  This can be a statically defined fixture or one that is dynamically set via responseId.
     */
    minimumId?: string;
    /**
     * Extension for minimumId
     **/
    _minimumId?: Element;
    /**
     * Perform validation on navigation links?
     * Whether or not the test execution performs validation on the bundle navigation links.
     * Asserts that the Bundle contains first, last, and next links.
     */
    navigationLinks?: boolean;
    /**
     * Extension for navigationLinks
     **/
    _navigationLinks?: Element;
    /**
     * XPath or JSONPath expression
     * The XPath or JSONPath expression to be evaluated against the fixture representing the response received from server.
     * If both "path" and a "fixtureId" are specified, then the path will be evaluated against the request or response body mapped to the fixtureId.  If "path" is specified and a "fixtureId" is not, then the path will be evaluated against the response body of the last operation.  Test engines are to store the request and response body and headers of the last operation at all times for subsequent assertions.
     */
    path?: string;
    /**
     * Extension for path
     **/
    _path?: Element;
    /**
     * Request URL comparison value
     * The value to use in a comparison against the request URL path string.
     * If "requestURL" is specified then it will be used in place of "value". The "requestURL" will evaluate against the last operation's full request URL path string.
     */
    requestURL?: string;
    /**
     * Extension for requestURL
     **/
    _requestURL?: Element;
    /**
     * Resource type
     * The type of the resource.  See http://build.fhir.org/resourcelist.html.
     * This will be expected resource type in response body e.g. in read, vread, search, etc.  See http://build.fhir.org/resourcelist.html for complete list of resource types; e.g. <assert > <resourceType value="Patient" </assert>.
     */
    resource?: code;
    /**
     * Extension for resource
     **/
    _resource?: Element;
    /**
     * HTTP response code to test
     * The value of the HTTP response code to be tested.
     * To be used with "operator" attribute value. Asserts that the response code equals this value if "operator" is not specified.   If the operator is "in" or "notIn" then the responseCode would be a comma-separated list of values e.g. "200,201". Otherwise, it's expected to be a numeric value.   If "fixture" is not specified, then the "responseBodyId" value of the last operation is assumed.
     */
    responseCode?: string;
    /**
     * Extension for responseCode
     **/
    _responseCode?: Element;
    /**
     * Fixture Id of source expression or headerField
     * Fixture to evaluate the XPath/JSONPath expression or the headerField  against.
     * This can be a statically defined fixture (at the top of the testscript) or a dynamically set fixture created by responseId of the action.operation element.
     */
    sourceId?: id;
    /**
     * Extension for sourceId
     **/
    _sourceId?: Element;
    /**
     * Profile Id of validation profile reference
     * The ID of the Profile to validate against.
     * The ID of a Profile fixture. Asserts that the response is valid according to the Profile specified by validateProfileId.
     */
    validateProfileId?: id;
    /**
     * Extension for validateProfileId
     **/
    _validateProfileId?: Element;
    /**
     * The value to compare to
     * The value to compare to.
     * The string-representation of a number, string, or boolean that is expected.  Test engines do have to look for placeholders (${}) and replace the variable placeholders with the variable values at runtime before comparing this value to the actual value.
     */
    value?: string;
    /**
     * Extension for value
     **/
    _value?: Element;
    /**
     * Will this assert produce a warning only on error?
     * Whether or not the test execution will produce a warning only on error for this assert.
     * If this element is specified and it is true, then assertion failures can be logged by test engine but should not stop the test script execution from proceeding.  There are likely cases where the spec is not clear on what should happen. If the spec says something is optional (maybe a response header for example), but a server doesn’t do it, we could choose to issue a warning.
     */
    warningOnly: boolean;
    /**
     * Extension for warningOnly
     **/
    _warningOnly?: Element;
    /**
     * response | request
     * The direction to use for the assertion.
     * If the direction is specified as "response" (the default), then the processing of this assert is against the received response message. If the direction is specified as "request", then the processing of this assert is against the sent request message.
     */
    direction?: TestScriptAssertionDirectionType;
    /**
     * equals | notEquals | in | notIn | greaterThan | lessThan | empty | notEmpty | contains | notContains | eval
     * The operator type defines the conditional behavior of the assert. If not defined, the default is equals.
     * Operators are useful especially for negative testing.  If operator is not specified, then the "equals" operator is assumed; e.g. ```<code>   <assert>  <operator value="in" />  <responseCode value="200,201,204" />    </assert>    <assert>  <operator value="notEquals" />  <response value="okay"/>   </assert>    <assert>  <operator value="greaterThan" />    <responseHeader>     <field value="Content-Length" />     <value value="0" />    </responseHeader/>   </assert> </code> ```.
     */
    operator?: TestScriptAssertionOperatorType;
    /**
     * delete | get | options | patch | post | put | head
     * The request method or HTTP operation code to compare against that used by the client system under test.
     * If "requestMethod" is specified then it will be used in place of "value". The "requestMethod" will evaluate against the last operation's request HTTP operation.
     */
    requestMethod?: TestScriptRequestMethodCode;
    /**
     * okay | created | noContent | notModified | bad | forbidden | notFound | methodNotAllowed | conflict | gone | preconditionFailed | unprocessable
     * okay | created | noContent | notModified | bad | forbidden | notFound | methodNotAllowed | conflict | gone | preconditionFailed | unprocessable.
     * This is a shorter way of achieving similar verifications via "assert.responseCode".  If you need more control, then use "assert.responseCode"  e.g. <assert>  <contentType value="json" />  <response value="okay"/> </assert>.
     */
    response?: TestScriptAssertionResponseTypes;
}
/**
 * A setup operation or assert to perform
 * Action would contain either an operation or an assertion.
 * An action should contain either an operation or an assertion but not both.  It can contain any number of variables.
 */
export interface TestScriptSetupAction extends BackboneElement {
    /**
     * The setup operation to perform
     * The operation to perform.
     */
    operation?: TestScriptSetupActionOperation;
    /**
     * The assertion to perform
     * Evaluates the results of previous operations to determine if the server under test behaves appropriately.
     * In order to evaluate an assertion, the request, response, and results of the most recently executed operation must always be maintained by the test engine.
     */
    assert?: TestScriptSetupActionAssert;
}
/**
 * A series of required setup operations before tests are executed
 * A series of required setup operations before tests are executed.
 */
export interface TestScriptSetup extends BackboneElement {
    /**
     * A setup operation or assert to perform
     * Action would contain either an operation or an assertion.
     * An action should contain either an operation or an assertion but not both.  It can contain any number of variables.
     */
    action: TestScriptSetupAction[];
}
/**
 * A test operation or assert to perform
 * Action would contain either an operation or an assertion.
 * An action should contain either an operation or an assertion but not both.  It can contain any number of variables.
 */
export interface TestScriptTestAction extends BackboneElement {
    /**
     * The setup operation to perform
     * An operation would involve a REST request to a server.
     */
    operation?: TestScriptSetupActionOperation;
    /**
     * The setup assertion to perform
     * Evaluates the results of previous operations to determine if the server under test behaves appropriately.
     * In order to evaluate an assertion, the request, response, and results of the most recently executed operation must always be maintained by the test engine.
     */
    assert?: TestScriptSetupActionAssert;
}
/**
 * A test in this script
 * A test in this script.
 */
export interface TestScriptTest extends BackboneElement {
    /**
     * Tracking/logging name of this test
     * The name of this test used for tracking/logging purposes by test engines.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Tracking/reporting short description of the test
     * A short description of the test used by test engines for tracking and reporting purposes.
     */
    description?: string;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * A test operation or assert to perform
     * Action would contain either an operation or an assertion.
     * An action should contain either an operation or an assertion but not both.  It can contain any number of variables.
     */
    action: TestScriptTestAction[];
}
/**
 * One or more teardown operations to perform
 * The teardown action will only contain an operation.
 * An action should contain either an operation or an assertion but not both.  It can contain any number of variables.
 */
export interface TestScriptTeardownAction extends BackboneElement {
    /**
     * The teardown operation to perform
     * An operation would involve a REST request to a server.
     */
    operation: TestScriptSetupActionOperation;
}
/**
 * A series of required clean up steps
 * A series of operations required to clean up after all the tests are executed (successfully or otherwise).
 */
export interface TestScriptTeardown extends BackboneElement {
    /**
     * One or more teardown operations to perform
     * The teardown action will only contain an operation.
     * An action should contain either an operation or an assertion but not both.  It can contain any number of variables.
     */
    action: TestScriptTeardownAction[];
}
/**
 * Describes a set of tests
 * A structured set of tests against a FHIR server or client implementation to determine compliance against the FHIR specification.
 */
export interface TestScript extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'TestScript';
    /**
     * Canonical identifier for this test script, represented as a URI (globally unique)
     * An absolute URI that is used to identify this test script when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this test script is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the test script is stored on different servers.
     * Can be a urn:uuid: or a urn:oid: but real http: addresses are preferred.  Multiple instances may share the same URL if they have a distinct version.

The determination of when to create a new version of a resource (same url, new version) vs. defining a new artifact is up to the author.  Considerations for making this decision are found in [Technical and Business Versions](resource.html#versions).

In some cases, the resource can no longer be found at the stated url, but the url itself cannot change. Implementations can use the [meta.source](resource.html#meta) element to indicate where the current master source of the resource can be found.
     */
    url: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Additional identifier for the test script
     * 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.
     * Typically, this is used for identifiers that can go in an HL7 V3 II (instance identifier) data type, and can then identify this test script outside of FHIR, where it is not possible to use the logical URI.
     */
    identifier?: Identifier;
    /**
     * Business version of the test script
     * 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.
     * There may be different test script instances that have the same identifier but different versions.  The version can be appended to the url in a reference to allow a reference to a particular business version of the test script with the format [url]|[version].
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
    /**
     * Name for this test script (computer friendly)
     * 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.
     * The name is not expected to be globally unique. The name should be a simple alphanumeric type name to ensure that it is machine-processing friendly.
     */
    name: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Name for this test script (human friendly)
     * A short, descriptive, user-friendly title for the test script.
     * This name does not need to be machine-processing friendly and may contain punctuation, white-space, etc.
     */
    title?: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * For testing purposes, not real usage
     * 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.
     * Allows filtering of test scripts that are appropriate for use versus not.
     */
    experimental?: boolean;
    /**
     * Extension for experimental
     **/
    _experimental?: Element;
    /**
     * Date last changed
     * The date  (and optionally time) when the test script was published. The date must change 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.
     * Note that this is not the same as the resource last-modified-date, since the resource may be a secondary representation of the test script. Additional specific dates may be added as extensions or be found by consulting Provenances associated with past versions of the resource.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Name of the publisher (organization or individual)
     * The name of the organization or individual that published the test script.
     * Usually an organization but may be an individual. The publisher (or steward) of the test script is the organization or individual primarily responsible for the maintenance and upkeep of the test script. This is not necessarily the same individual or organization that developed and initially authored the content. The publisher is the primary point of contact for questions or issues with the test script. This item SHOULD be populated unless the information is available from context.
     */
    publisher?: string;
    /**
     * Extension for publisher
     **/
    _publisher?: Element;
    /**
     * Contact details for the publisher
     * Contact details to assist a user in finding and communicating with the publisher.
     * May be a web site, an email address, a telephone number, etc.
     */
    contact?: ContactDetail[];
    /**
     * Natural language description of the test script
     * A free text natural language description of the test script from a consumer's perspective.
     * This description can be used to capture details such as why the test script was built, comments about misuse, instructions for clinical use and interpretation, literature references, examples from the paper world, etc. It is not a rendering of the test script as conveyed in the 'text' field of the resource itself. This item SHOULD be populated unless the information is available from context (e.g. the language of the test script is presumed to be the predominant language in the place the test script was created).
     */
    description?: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * The context that the content is intended to support
     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate test script instances.
     * When multiple useContexts are specified, there is no expectation that all or any of the contexts apply.
     */
    useContext?: UsageContext[];
    /**
     * Intended jurisdiction for test script (if applicable)
     * A legal or geographic region in which the test script is intended to be used.
     * It may be possible for the test script to be used in jurisdictions other than those for which it was originally designed or intended.
     */
    jurisdiction?: CodeableConcept[];
    /**
     * Why this test script is defined
     * Explanation of why this test script is needed and why it has been designed as it has.
     * This element does not describe the usage of the test script. Instead, it provides traceability of ''why'' the resource is either needed or ''why'' it is defined as it is.  This may be used to point to source materials or specifications that drove the structure of this test script.
     */
    purpose?: markdown;
    /**
     * Extension for purpose
     **/
    _purpose?: Element;
    /**
     * Use and/or publishing restrictions
     * 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.
     */
    copyright?: markdown;
    /**
     * Extension for copyright
     **/
    _copyright?: Element;
    /**
     * An abstract server representing a client or sender in a message exchange
     * An abstract server used in operations within this test script in the origin element.
     * The purpose of this element is to define the profile of an origin element used elsewhere in the script.  Test engines could then use the origin-profile mapping to offer a filtered list of test systems that can serve as the sender for the interaction.
     */
    origin?: TestScriptOrigin[];
    /**
     * An abstract server representing a destination or receiver in a message exchange
     * An abstract server used in operations within this test script in the destination element.
     * The purpose of this element is to define the profile of a destination element used elsewhere in the script.  Test engines could then use the destination-profile mapping to offer a filtered list of test systems that can serve as the receiver for the interaction.
     */
    destination?: TestScriptDestination[];
    /**
     * Required capability that is assumed to function correctly on the FHIR server being tested
     * The required capability must exist and are assumed to function correctly on the FHIR server being tested.
     */
    metadata?: TestScriptMetadata;
    /**
     * Fixture in the test script - by reference (uri)
     * Fixture in the test script - by reference (uri). All fixtures are required for the test script to execute.
     */
    fixture?: TestScriptFixture[];
    /**
     * Reference of the validation profile
     * Reference to the profile to be used for validation.
     * See http://build.fhir.org/resourcelist.html for complete list of resource types.
     */
    profile?: Reference[];
    /**
     * Placeholder for evaluated elements
     * Variable is set based either on element value in response body or on header field value in the response headers.
     * Variables would be set based either on XPath/JSONPath expressions against fixtures (static and response), or headerField evaluations against response headers. If variable evaluates to nodelist or anything other than a primitive value, then test engine would report an error.  Variables would be used to perform clean replacements in "operation.params", "operation.requestHeader.value", and "operation.url" element values during operation calls and in "assert.value" during assertion evaluations. This limits the places that test engines would need to look for placeholders "${}".  Variables are scoped to the whole script. They are NOT evaluated at declaration. They are evaluated by test engine when used for substitutions in "operation.params", "operation.requestHeader.value", and "operation.url" element values during operation calls and in "assert.value" during assertion evaluations.  See example testscript-search.xml.
     */
    variable?: TestScriptVariable[];
    /**
     * A series of required setup operations before tests are executed
     * A series of required setup operations before tests are executed.
     */
    setup?: TestScriptSetup;
    /**
     * A test in this script
     * A test in this script.
     */
    test?: TestScriptTest[];
    /**
     * A series of required clean up steps
     * A series of operations required to clean up after all the tests are executed (successfully or otherwise).
     */
    teardown?: TestScriptTeardown;
    /**
     * draft | active | retired | unknown
     * The status of this test script. Enables tracking the life-cycle of the content.
     * Allows filtering of test scripts that are appropriate for use versus not.
     */
    status: TestScriptPublicationStatus;
}
/**
 * Additional representations for this concept
 * Additional representations for this concept when used in this value set - other languages, aliases, specialized purposes, used for particular purposes, etc.
 * Concepts have both a ```display``` and an array of ```designation```. The display is equivalent to a special designation with an implied ```designation.use``` of "primary code" and a language equal to the [Resource Language](resource.html#language).
 */
export interface ValueSetComposeIncludeConceptDesignation extends BackboneElement {
    /**
     * Human language of the designation
     * The language this designation is defined for.
     * In the absence of a language, the resource language applies.
     */
    language?: code;
    /**
     * Extension for language
     **/
    _language?: Element;
    /**
     * Types of uses of designations
     * A code that represents types of uses of designations.
     * If no use is provided, the designation can be assumed to be suitable for general display to a human user.
     */
    use?: Coding;
    /**
     * The text value for this designation
     * The text value for this designation.
     */
    value: string;
    /**
     * Extension for value
     **/
    _value?: Element;
}
/**
 * A concept defined in the system
 * Specifies a concept to be included or excluded.
 * The list of concepts is considered ordered, though the order might not have any particular significance. Typically, the order of an expansion follows that defined in the compose element.
 */
export interface ValueSetComposeIncludeConcept extends BackboneElement {
    /**
     * Code or expression from system
     * Specifies a code for the concept to be included or excluded.
     * Expressions are allowed if defined by the underlying code system.
     */
    code: code;
    /**
     * Extension for code
     **/
    _code?: Element;
    /**
     * Text to display for this code for this value set in this valueset
     * 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.
     * The value set resource allows for an alternative display to be specified for when this concept is used in this particular value set. See notes in the value set narrative about the correct use of this element.
     */
    display?: string;
    /**
     * Extension for display
     **/
    _display?: Element;
    /**
     * Additional representations for this concept
     * Additional representations for this concept when used in this value set - other languages, aliases, specialized purposes, used for particular purposes, etc.
     * Concepts have both a ```display``` and an array of ```designation```. The display is equivalent to a special designation with an implied ```designation.use``` of "primary code" and a language equal to the [Resource Language](resource.html#language).
     */
    designation?: ValueSetComposeIncludeConceptDesignation[];
}
/**
 * Select codes/concepts by their properties (including relationships)
 * Select concepts by specify a matching criterion based on the properties (including relationships) defined by the system, or on filters defined by the system. If multiple filters are specified, they SHALL all be true.
 * Selecting codes by specifying filters based on properties is only possible where the underlying code system defines appropriate properties. Note that in some cases, the underlying code system defines the logical concepts but not the literal codes for the concepts. In such cases, the literal definitions may be provided by a third party.
 */
export interface ValueSetComposeIncludeFilter extends BackboneElement {
    /**
     * A property/filter defined by the code system
     * A code that identifies a property or a filter defined in the code system.
     */
    property: code;
    /**
     * Extension for property
     **/
    _property?: Element;
    /**
     * Code from the system, or regex criteria, or boolean value for exists
     * 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  (if the filter represents a property defined in CodeSystem) or of the system filter value (if the filter represents a filter defined in CodeSystem) when the operation is 'regex', or one of the values (true and false), when the operation is 'exists'.
     * Use regex matching with care - full regex matching on every SNOMED CT term is prohibitive, for example.
     */
    value: string;
    /**
     * Extension for value
     **/
    _value?: Element;
    /**
     * = | is-a | descendent-of | is-not-a | regex | in | not-in | generalizes | exists
     * The kind of operation to perform as a part of the filter criteria.
     * In case filter.property represents a property of the system, the operation applies to the selected property. In case filter.property represents a filter of the system, the operation SHALL match one of the CodeSystem.filter.operator values.
     */
    op: ValueSetFilterOperator;
}
/**
 * Include one or more codes from a code system or other value set(s)
 * Include one or more codes from a code system or other value set(s).
 * All the conditions in an include must be true. If a system is listed, all the codes from the system are listed. If one or more filters are listed, all of the filters must apply. If one or more value sets are listed, the codes must be in all the value sets. E.g. each include is 'include all the codes that meet all these conditions'.
 */
export interface ValueSetComposeInclude extends BackboneElement {
    /**
     * The system the codes come from
     * An absolute URI which is the code system from which the selected codes come from.
     * If there are no codes or filters, the entire code system is included. Note that the set of codes that are included may contain abstract codes. See ''Coding.system'' for further documentation about the correct value for the system element.
     */
    system?: uri;
    /**
     * Extension for system
     **/
    _system?: Element;
    /**
     * Specific version of the code system referred to
     * The version of the code system that the codes are selected from, or the special version '*' for all versions.
     * This is used when selecting the descendants of a concept - they may change between versions. If no version is specified, then the exact contents of the value set might not be known until a context of use binds it to a particular version. The special value '*' means all versions; It is at server discretion regarding expansions and which versions must be supported.
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
    /**
     * A concept defined in the system
     * Specifies a concept to be included or excluded.
     * The list of concepts is considered ordered, though the order might not have any particular significance. Typically, the order of an expansion follows that defined in the compose element.
     */
    concept?: ValueSetComposeIncludeConcept[];
    /**
     * Select codes/concepts by their properties (including relationships)
     * Select concepts by specify a matching criterion based on the properties (including relationships) defined by the system, or on filters defined by the system. If multiple filters are specified, they SHALL all be true.
     * Selecting codes by specifying filters based on properties is only possible where the underlying code system defines appropriate properties. Note that in some cases, the underlying code system defines the logical concepts but not the literal codes for the concepts. In such cases, the literal definitions may be provided by a third party.
     */
    filter?: ValueSetComposeIncludeFilter[];
    /**
     * Select the contents included in this value set
     * Selects the concepts found in this value set (based on its value set definition). This is an absolute URI that is a reference to ValueSet.url.  If multiple value sets are specified this includes the union of the contents of all of the referenced value sets.
     * The value set URI is either a logical reference to a defined value set such as a [SNOMED CT reference set](snomedct.html#implicit), or a direct reference to a value set definition using ValueSet.url. The reference might not refer to an actual FHIR ValueSet resource; in this case, whatever is referred to is an implicit definition of a value set that needs to be clear about how versions are resolved.
     */
    valueSet?: canonical[];
    /**
     * Extension for valueSet
     **/
    _valueSet?: Element[];
}
/**
 * Content logical definition of the value set (CLD)
 * A set of criteria that define the contents of the value set by including or excluding codes selected from the specified code system(s) that the value set draws from. This is also known as the Content Logical Definition (CLD).
 */
export interface ValueSetCompose extends BackboneElement {
    /**
     * Fixed date for references with no specified version (transitive)
     * The Locked Date is  the effective date that is used to determine the version of all referenced Code Systems and Value Set Definitions included in the compose that are not already tied to a specific version.
     * With a defined lockedDate the value set is considered "Locked". Otherwise, the value set may have different expansions as underlying code systems and/or value sets evolve.  The interpretation of lockedDate is often dependent on the context - e.g. a SNOMED CT derived value set with a lockedDate will have a different expansion in USA than in UK.  If a value set specifies a version for include and exclude statements, and also specifies a locked date, the specified versions need to be available that date, or the value set will not be usable.
     */
    lockedDate?: date;
    /**
     * Extension for lockedDate
     **/
    _lockedDate?: Element;
    /**
     * Whether inactive codes are in the value set
     * 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 $expand parameters (but generally, inactive codes would be expected to be included).
     * Note that in the FHIR terminology framework, "deprecated" does not mean inactive, but in some code systems, e.g. LOINC, "deprecated" does mean inactive. Code systems should define what codes are considered to be inactive. If this is not clearly defined (including in the FHIR code system resource), then all codes are assumed to be active.

The Value Set Definition specification defines an ActiveOnly element, which is the reverse of this element e.g. (ValueSet.compose.inactive=FALSE) is the same as (VSD.ActiveOnly=TRUE).
     */
    inactive?: boolean;
    /**
     * Extension for inactive
     **/
    _inactive?: Element;
    /**
     * Include one or more codes from a code system or other value set(s)
     * Include one or more codes from a code system or other value set(s).
     * All the conditions in an include must be true. If a system is listed, all the codes from the system are listed. If one or more filters are listed, all of the filters must apply. If one or more value sets are listed, the codes must be in all the value sets. E.g. each include is 'include all the codes that meet all these conditions'.
     */
    include: ValueSetComposeInclude[];
    /**
     * Explicitly exclude codes from a code system or other value sets
     * Exclude one or more codes from the value set based on code system filters and/or other value sets.
     * Usually this is used to selectively exclude codes that were included by subsumption in the inclusions. Any display names specified for the codes are ignored.
     */
    exclude?: ValueSetComposeInclude[];
}
/**
 * Parameter that controlled the expansion process
 * 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.
 * The server decides which parameters to include here, but at a minimum, the list SHOULD include all of the parameters that affect the $expand operation. If the expansion will be persisted all of these parameters SHALL be included. If the codeSystem on the server has a specified version then this version SHALL be provided as a parameter in the expansion (note that not all code systems have a version).
 */
export interface ValueSetExpansionParameter extends BackboneElement {
    /**
     * Name as assigned by the client or server
     * Name of the input parameter to the $expand operation; may be a server-assigned name for additional default or other server-supplied parameters used to control the expansion process.
     * The names are assigned at the discretion of the server.
     */
    name: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Value of the named parameter
     * The value of the parameter.
     */
    valueString?: string;
    /**
     * Extension for valueString
     **/
    _valueString?: Element;
    /**
     * Value of the named parameter
     * The value of the parameter.
     */
    valueBoolean?: boolean;
    /**
     * Extension for valueBoolean
     **/
    _valueBoolean?: Element;
    /**
     * Value of the named parameter
     * The value of the parameter.
     */
    valueInteger?: integer;
    /**
     * Extension for valueInteger
     **/
    _valueInteger?: Element;
    /**
     * Value of the named parameter
     * The value of the parameter.
     */
    valueDecimal?: decimal;
    /**
     * Extension for valueDecimal
     **/
    _valueDecimal?: Element;
    /**
     * Value of the named parameter
     * The value of the parameter.
     */
    valueUri?: uri;
    /**
     * Extension for valueUri
     **/
    _valueUri?: Element;
    /**
     * Value of the named parameter
     * The value of the parameter.
     */
    valueCode?: code;
    /**
     * Extension for valueCode
     **/
    _valueCode?: Element;
    /**
     * Value of the named parameter
     * The value of the parameter.
     */
    valueDateTime?: dateTime;
    /**
     * Extension for valueDateTime
     **/
    _valueDateTime?: Element;
}
/**
 * Codes in the value set
 * The codes that are contained in the value set expansion.
 */
export interface ValueSetExpansionContains extends BackboneElement {
    /**
     * System value for the code
     * An absolute URI which is the code system in which the code for this item in the expansion is defined.
     */
    system?: uri;
    /**
     * Extension for system
     **/
    _system?: Element;
    /**
     * If user cannot select this entry
     * If true, this entry is included in the expansion for navigational purposes, and the user cannot select the code directly as a proper value.
     * This should not be understood to exclude its use for searching (e.g. by subsumption testing). The client should know whether it is appropriate for the user to select an abstract code or not.
     */
    abstract?: boolean;
    /**
     * Extension for abstract
     **/
    _abstract?: Element;
    /**
     * If concept is inactive in the code system
     * 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. It might not be known or specified whether an concept is inactive (and it may depend on the context of use).
     * This should only have a value if the concept is inactive.
     */
    inactive?: boolean;
    /**
     * Extension for inactive
     **/
    _inactive?: Element;
    /**
     * Version in which this code/display is defined
     * The version of the code system from this code was taken. 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.
     * The exact value of the version string is specified by the system from which the code is derived.
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
    /**
     * Code - if blank, this is not a selectable code
     * 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.
     */
    code?: code;
    /**
     * Extension for code
     **/
    _code?: Element;
    /**
     * User display for the concept
     * The recommended display for this item in the expansion.
     */
    display?: string;
    /**
     * Extension for display
     **/
    _display?: Element;
    /**
     * Additional representations for this item
     * 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.
     * The designations provided must be based on the value set and code system definitions.
     */
    designation?: ValueSetComposeIncludeConceptDesignation[];
    /**
     * Codes contained under this entry
     * Other codes and entries contained under this entry in the hierarchy.
     * If the expansion uses this element, there is  no implication about the logical relationship between them, and the  structure cannot be used for logical inferencing. The structure  exists to provide navigational assistance for helping human users to  locate codes in the expansion.
     */
    contains?: ValueSetExpansionContains[];
}
/**
 * Used when the value set is "expanded"
 * 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.
 * Expansion is performed to produce a collection of codes that are ready to use for data entry or validation. Value set expansions are always considered to be stateless - they are a record of the set of codes in the value set at a point in time under a given set of conditions, and are not subject to ongoing maintenance.

Expansion.parameter is  a simplified list of parameters - a subset of the features of the [Parameters](parameters.html) resource.
 */
export interface ValueSetExpansion extends BackboneElement {
    /**
     * Identifies the value set expansion (business identifier)
     * An identifier that uniquely identifies this expansion of the valueset, based on a unique combination of the provided parameters, the system default parameters, and the underlying system code system versions etc. Systems may re-use the same identifier as long as those factors remain the same, and the expansion is the same, but are not required to do so. This is a business identifier.
     * Typically, this uri is a UUID (e.g. urn:uuid:8230ff20-c97a-4167-a59d-dc2cb9df16dd).
     */
    identifier?: uri;
    /**
     * Extension for identifier
     **/
    _identifier?: Element;
    /**
     * Time ValueSet expansion happened
     * The time at which the expansion was produced by the expanding system.
     * This SHOULD be a fully populated instant, but in some circumstances, value sets are expanded by hand, and the expansion is published without that precision.
     */
    timestamp: dateTime;
    /**
     * Extension for timestamp
     **/
    _timestamp?: Element;
    /**
     * Total number of codes in the expansion
     * 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.
     * Paging only applies to flat expansions.
     */
    total?: integer;
    /**
     * Extension for total
     **/
    _total?: Element;
    /**
     * Offset at which this resource starts
     * 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.
     * Paging only applies to flat expansions. If a filter is applied, the count is the number of concepts that matched the filter, not the number of concepts in an unfiltered view of the expansion.
     */
    offset?: integer;
    /**
     * Extension for offset
     **/
    _offset?: Element;
    /**
     * Parameter that controlled the expansion process
     * 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.
     * The server decides which parameters to include here, but at a minimum, the list SHOULD include all of the parameters that affect the $expand operation. If the expansion will be persisted all of these parameters SHALL be included. If the codeSystem on the server has a specified version then this version SHALL be provided as a parameter in the expansion (note that not all code systems have a version).
     */
    parameter?: ValueSetExpansionParameter[];
    /**
     * Codes in the value set
     * The codes that are contained in the value set expansion.
     */
    contains?: ValueSetExpansionContains[];
}
/**
 * A set of codes drawn from one or more code systems
 * A ValueSet resource instance specifies a set of codes drawn from one or more code systems, intended for use in a particular context. Value sets link between [CodeSystem](codesystem.html) definitions and their use in [coded elements](terminologies.html).
 */
export interface ValueSet extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'ValueSet';
    /**
     * Canonical identifier for this value set, represented as a URI (globally unique)
     * An absolute URI that is used to identify this value set when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this value set is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the value set is stored on different servers.
     * Can be a urn:uuid: or a urn:oid: but real http: addresses are preferred.  Multiple instances may share the same URL if they have a distinct version.

The determination of when to create a new version of a resource (same url, new version) vs. defining a new artifact is up to the author.  Considerations for making this decision are found in [Technical and Business Versions](resource.html#versions).

In some cases, the resource can no longer be found at the stated url, but the url itself cannot change. Implementations can use the [meta.source](resource.html#meta) element to indicate where the current master source of the resource can be found.
     */
    url?: uri;
    /**
     * Extension for url
     **/
    _url?: Element;
    /**
     * Additional identifier for the value set (business identifier)
     * 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.
     * Typically, this is used for identifiers that can go in an HL7 V3 II (instance identifier) data type, and can then identify this value set outside of FHIR, where it is not possible to use the logical URI.
     */
    identifier?: Identifier[];
    /**
     * Business version of the value set
     * 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.
     * There may be different value set instances that have the same identifier but different versions.  The version can be appended to the url in a reference to allow a reference to a particular business version of the value set with the format [url]|[version].
     */
    version?: string;
    /**
     * Extension for version
     **/
    _version?: Element;
    /**
     * Name for this value set (computer friendly)
     * 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.
     * The name is not expected to be globally unique. The name should be a simple alphanumeric type name to ensure that it is machine-processing friendly.A name should be provided unless the value set is a contained resource (e.g. an anonymous value set in a profile). Most registries will require a name.
     */
    name?: string;
    /**
     * Extension for name
     **/
    _name?: Element;
    /**
     * Name for this value set (human friendly)
     * A short, descriptive, user-friendly title for the value set.
     * This name does not need to be machine-processing friendly and may contain punctuation, white-space, etc.
     */
    title?: string;
    /**
     * Extension for title
     **/
    _title?: Element;
    /**
     * For testing purposes, not real usage
     * 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.
     * Allows filtering of value sets that are appropriate for use versus not.
     */
    experimental?: boolean;
    /**
     * Extension for experimental
     **/
    _experimental?: Element;
    /**
     * Date last changed
     * The date (and optionally time) when the value set was created or revised (e.g. the 'content logical definition').
     * Note that this is not the same as the resource last-modified-date, since the resource may be a secondary representation of the value set. Additional specific dates may be added as extensions or be found by consulting Provenances associated with past versions of the resource.
     */
    date?: dateTime;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * Name of the publisher (organization or individual)
     * The name of the organization or individual that published the value set.
     * Usually an organization but may be an individual. The publisher (or steward) of the value set is the organization or individual primarily responsible for the maintenance and upkeep of the value set. This is not necessarily the same individual or organization that developed and initially authored the content. The publisher is the primary point of contact for questions or issues with the value set. This item SHOULD be populated unless the information is available from context.
     */
    publisher?: string;
    /**
     * Extension for publisher
     **/
    _publisher?: Element;
    /**
     * Contact details for the publisher
     * Contact details to assist a user in finding and communicating with the publisher.
     * May be a web site, an email address, a telephone number, etc.
     */
    contact?: ContactDetail[];
    /**
     * Natural language description of the value set
     * A free text natural language description of the value set from a consumer's perspective. The textual description specifies the span of meanings for concepts to be included within the Value Set Expansion, and also may specify the intended use and limitations of the Value Set.
     * This description can be used to capture details such as why the value set was built, comments about misuse, instructions for clinical use and interpretation, literature references, examples from the paper world, etc. It is not a rendering of the value set as conveyed in the 'text' field of the resource itself. This item SHOULD be populated unless the information is available from context (e.g. the language of the value set is presumed to be the predominant language in the place the value set was created).The description is not intended to describe the semantics of the Value Set - there are no intrinsic semantics separate from the codes contained in its expansion. The description should capture its intended use, which is needed for ensuring integrity for its use in models across future changes. A description should be provided unless the value set is a contained resource (e.g. an anonymous value set in a profile). Most registries will require a description.
     */
    description?: markdown;
    /**
     * Extension for description
     **/
    _description?: Element;
    /**
     * The context that the content is intended to support
     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate value set instances.
     * When multiple useContexts are specified, there is no expectation that all or any of the contexts apply.
     */
    useContext?: UsageContext[];
    /**
     * Intended jurisdiction for value set (if applicable)
     * A legal or geographic region in which the value set is intended to be used.
     * It may be possible for the value set to be used in jurisdictions other than those for which it was originally designed or intended.
     */
    jurisdiction?: CodeableConcept[];
    /**
     * Indicates whether or not any change to the content logical definition may occur
     * If this is set to 'true', then no new versions of the content logical definition can be created.  Note: Other metadata might still change.
     * Normally immutability is set to 'false', which is the default assumption if it is not populated.  Note that the implication is that if this is set to 'true', there may be only one ValueSet version for this definition. Immutability tends to be set to 'true' in one of two cases: - Where the value set, by the nature of its usage, cannot change.  For example "All specializations of ACT in ActClassCode" - Where there's no safe way to express the "Purpose" such that someone else could safely make changes to the value set definition. Source workflow control must guarantee that the same URI always yields the same definition.
     */
    immutable?: boolean;
    /**
     * Extension for immutable
     **/
    _immutable?: Element;
    /**
     * Why this value set is defined
     * Explanation of why this value set is needed and why it has been designed as it has.
     * This element does not describe the usage of the value set. Instead, it provides traceability of ''why'' the resource is either needed or ''why'' it is defined as it is.  This may be used to point to source materials or specifications that drove the structure of this value set.
     */
    purpose?: markdown;
    /**
     * Extension for purpose
     **/
    _purpose?: Element;
    /**
     * Use and/or publishing restrictions
     * 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.
     * nullFrequently, the copyright differs between the value set and the codes that are included. The copyright statement should clearly differentiate between these when required.
     */
    copyright?: markdown;
    /**
     * Extension for copyright
     **/
    _copyright?: Element;
    /**
     * Content logical definition of the value set (CLD)
     * A set of criteria that define the contents of the value set by including or excluding codes selected from the specified code system(s) that the value set draws from. This is also known as the Content Logical Definition (CLD).
     */
    compose?: ValueSetCompose;
    /**
     * Used when the value set is "expanded"
     * 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.
     * Expansion is performed to produce a collection of codes that are ready to use for data entry or validation. Value set expansions are always considered to be stateless - they are a record of the set of codes in the value set at a point in time under a given set of conditions, and are not subject to ongoing maintenance.

Expansion.parameter is  a simplified list of parameters - a subset of the features of the [Parameters](parameters.html) resource.
     */
    expansion?: ValueSetExpansion;
    /**
     * draft | active | retired | unknown
     * The status of this value set. Enables tracking the life-cycle of the content. The status of the value set applies to the value set definition (ValueSet.compose) and the associated ValueSet metadata. Expansions do not have a state.
     * Allows filtering of value sets that are appropriate for use versus not.See also the [valueset-workflowStatus](extension-valueset-workflowstatus.html) extension for additional status information related to the editorial process.
     */
    status: ValueSetPublicationStatus;
}
/**
 * Information about the primary source(s) involved in validation
 * Information about the primary source(s) involved in validation.
 */
export interface VerificationResultPrimarySource extends BackboneElement {
    /**
     * Reference to the primary source
     * Reference to the primary source.
     */
    who?: Reference;
    /**
     * Type of primary source (License Board; Primary Education; Continuing Education; Postal Service; Relationship owner; Registration Authority; legal source; issuing source; authoritative source)
     * Type of primary source (License Board; Primary Education; Continuing Education; Postal Service; Relationship owner; Registration Authority; legal source; issuing source; authoritative source).
     */
    type?: CodeableConcept[];
    /**
     * Method for exchanging information with the primary source
     * Method for communicating with the primary source (manual; API; Push).
     */
    communicationMethod?: CodeableConcept[];
    /**
     * successful | failed | unknown
     * Status of the validation of the target against the primary source (successful; failed; unknown).
     */
    validationStatus?: CodeableConcept;
    /**
     * When the target was validated against the primary source
     * When the target was validated against the primary source.
     */
    validationDate?: dateTime;
    /**
     * Extension for validationDate
     **/
    _validationDate?: Element;
    /**
     * yes | no | undetermined
     * Ability of the primary source to push updates/alerts (yes; no; undetermined).
     */
    canPushUpdates?: CodeableConcept;
    /**
     * specific | any | source
     * Type of alerts/updates the primary source can send (specific requested changes; any changes; as defined by source).
     */
    pushTypeAvailable?: CodeableConcept[];
}
/**
 * Information about the entity attesting to information
 * Information about the entity attesting to information.
 */
export interface VerificationResultAttestation extends BackboneElement {
    /**
     * The individual or organization attesting to information
     * The individual or organization attesting to information.
     */
    who?: Reference;
    /**
     * When the who is asserting on behalf of another (organization or individual)
     * When the who is asserting on behalf of another (organization or individual).
     */
    onBehalfOf?: Reference;
    /**
     * The method by which attested information was submitted/retrieved
     * The method by which attested information was submitted/retrieved (manual; API; Push).
     */
    communicationMethod?: CodeableConcept;
    /**
     * The date the information was attested to
     * The date the information was attested to.
     */
    date?: date;
    /**
     * Extension for date
     **/
    _date?: Element;
    /**
     * A digital identity certificate associated with the attestation source
     * A digital identity certificate associated with the attestation source.
     */
    sourceIdentityCertificate?: string;
    /**
     * Extension for sourceIdentityCertificate
     **/
    _sourceIdentityCertificate?: Element;
    /**
     * A digital identity certificate associated with the proxy entity submitting attested information on behalf of the attestation source
     * A digital identity certificate associated with the proxy entity submitting attested information on behalf of the attestation source.
     */
    proxyIdentityCertificate?: string;
    /**
     * Extension for proxyIdentityCertificate
     **/
    _proxyIdentityCertificate?: Element;
    /**
     * Proxy signature
     * Signed assertion by the proxy entity indicating that they have the right to submit attested information on behalf of the attestation source.
     */
    proxySignature?: Signature;
    /**
     * Attester signature
     * Signed assertion by the attestation source that they have attested to the information.
     */
    sourceSignature?: Signature;
}
/**
 * Information about the entity validating information
 * Information about the entity validating information.
 */
export interface VerificationResultValidator extends BackboneElement {
    /**
     * Reference to the organization validating information
     * Reference to the organization validating information.
     */
    organization: Reference;
    /**
     * A digital identity certificate associated with the validator
     * A digital identity certificate associated with the validator.
     */
    identityCertificate?: string;
    /**
     * Extension for identityCertificate
     **/
    _identityCertificate?: Element;
    /**
     * Validator signature
     * Signed assertion by the validator that they have validated the information.
     */
    attestationSignature?: Signature;
}
/**
 * Describes validation requirements, source(s), status and dates for one or more elements
 * Describes validation requirements, source(s), status and dates for one or more elements.
 */
export interface VerificationResult extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'VerificationResult';
    /**
     * A resource that was validated
     * A resource that was validated.
     */
    target?: Reference[];
    /**
     * The fhirpath location(s) within the resource that was validated
     * The fhirpath location(s) within the resource that was validated.
     */
    targetLocation?: string[];
    /**
     * Extension for targetLocation
     **/
    _targetLocation?: Element[];
    /**
     * none | initial | periodic
     * The frequency with which the target must be validated (none; initial; periodic).
     */
    need?: CodeableConcept;
    /**
     * When the validation status was updated
     * When the validation status was updated.
     */
    statusDate?: dateTime;
    /**
     * Extension for statusDate
     **/
    _statusDate?: Element;
    /**
     * nothing | primary | multiple
     * What the target is validated against (nothing; primary source; multiple sources).
     */
    validationType?: CodeableConcept;
    /**
     * The primary process by which the target is validated (edit check; value set; primary source; multiple sources; standalone; in context)
     * The primary process by which the target is validated (edit check; value set; primary source; multiple sources; standalone; in context).
     */
    validationProcess?: CodeableConcept[];
    /**
     * Frequency of revalidation
     * Frequency of revalidation.
     */
    frequency?: Timing;
    /**
     * The date/time validation was last completed (including failed validations)
     * The date/time validation was last completed (including failed validations).
     */
    lastPerformed?: dateTime;
    /**
     * Extension for lastPerformed
     **/
    _lastPerformed?: Element;
    /**
     * The date when target is next validated, if appropriate
     * The date when target is next validated, if appropriate.
     */
    nextScheduled?: date;
    /**
     * Extension for nextScheduled
     **/
    _nextScheduled?: Element;
    /**
     * fatal | warn | rec-only | none
     * The result if validation fails (fatal; warning; record only; none).
     */
    failureAction?: CodeableConcept;
    /**
     * Information about the primary source(s) involved in validation
     * Information about the primary source(s) involved in validation.
     */
    primarySource?: VerificationResultPrimarySource[];
    /**
     * Information about the entity attesting to information
     * Information about the entity attesting to information.
     */
    attestation?: VerificationResultAttestation;
    /**
     * Information about the entity validating information
     * Information about the entity validating information.
     */
    validator?: VerificationResultValidator[];
    /**
     * attested | validated | in-process | req-revalid | val-fail | reval-fail
     * The validation status of the target (attested; validated; in process; requires revalidation; validation failed; revalidation failed).
     */
    status: VerificationResultstatus;
}
/**
 * Eye alignment compensation
 * Allows for adjustment on two axis.
 */
export interface VisionPrescriptionLensSpecificationPrism extends BackboneElement {
    /**
     * Amount of adjustment
     * Amount of prism to compensate for eye alignment in fractional units.
     */
    amount: decimal;
    /**
     * Extension for amount
     **/
    _amount?: Element;
    /**
     * up | down | in | out
     * The relative base, or reference lens edge, for the prism.
     */
    base: VisionPrescriptionVisionBase;
}
/**
 * Vision lens authorization
 * Contain the details of  the individual lens specifications and serves as the authorization for the fullfillment by certified professionals.
 */
export interface VisionPrescriptionLensSpecification extends BackboneElement {
    /**
     * Product to be supplied
     * Identifies the type of vision correction product which is required for the patient.
     */
    product: CodeableConcept;
    /**
     * Power of the lens
     * Lens power measured in dioptres (0.25 units).
     * The value is negative for near-sighted and positive for far sighted.
Often insurance will not cover a lens with power between +75 and -75.
     */
    sphere?: decimal;
    /**
     * Extension for sphere
     **/
    _sphere?: Element;
    /**
     * Lens power for astigmatism
     * Power adjustment for astigmatism measured in dioptres (0.25 units).
     */
    cylinder?: decimal;
    /**
     * Extension for cylinder
     **/
    _cylinder?: Element;
    /**
     * Lens meridian which contain no power for astigmatism
     * Adjustment for astigmatism measured in integer degrees.
     * The limits are +180 and -180 degrees.
     */
    axis?: integer;
    /**
     * Extension for axis
     **/
    _axis?: Element;
    /**
     * Eye alignment compensation
     * Allows for adjustment on two axis.
     */
    prism?: VisionPrescriptionLensSpecificationPrism[];
    /**
     * Added power for multifocal levels
     * Power adjustment for multifocal lenses measured in dioptres (0.25 units).
     */
    add?: decimal;
    /**
     * Extension for add
     **/
    _add?: Element;
    /**
     * Contact lens power
     * Contact lens power measured in dioptres (0.25 units).
     */
    power?: decimal;
    /**
     * Extension for power
     **/
    _power?: Element;
    /**
     * Contact lens back curvature
     * Back curvature measured in millimetres.
     */
    backCurve?: decimal;
    /**
     * Extension for backCurve
     **/
    _backCurve?: Element;
    /**
     * Contact lens diameter
     * Contact lens diameter measured in millimetres.
     */
    diameter?: decimal;
    /**
     * Extension for diameter
     **/
    _diameter?: Element;
    /**
     * Lens wear duration
     * The recommended maximum wear period for the lens.
     */
    duration?: Quantity;
    /**
     * Color required
     * Special color or pattern.
     */
    color?: string;
    /**
     * Extension for color
     **/
    _color?: Element;
    /**
     * Brand required
     * Brand recommendations or restrictions.
     */
    brand?: string;
    /**
     * Extension for brand
     **/
    _brand?: Element;
    /**
     * Notes for coatings
     * Notes for special requirements such as coatings and lens materials.
     */
    note?: Annotation[];
    /**
     * right | left
     * The eye for which the lens specification applies.
     * May also appear as OD (oculus dexter) for the right eye and OS (oculus siniter) for the left eye.
     */
    eye: VisionPrescriptionVisionEyes;
}
/**
 * Prescription for vision correction products for a patient
 * An authorization for the provision of glasses and/or contact lenses to a patient.
 */
export interface VisionPrescription extends DomainResource {
    /**
     * The type of the resource.
     */
    resourceType: 'VisionPrescription';
    /**
     * Business Identifier for vision prescription
     * A unique identifier assigned to this vision prescription.
     */
    identifier?: Identifier[];
    /**
     * Response creation date
     * The date this resource was created.
     */
    created: dateTime;
    /**
     * Extension for created
     **/
    _created?: Element;
    /**
     * Who prescription is for
     * A resource reference to the person to whom the vision prescription applies.
     */
    patient: Reference;
    /**
     * Created during encounter / admission / stay
     * A reference to a resource that identifies the particular occurrence of contact between patient and health care provider during which the prescription was issued.
     */
    encounter?: Reference;
    /**
     * When prescription was authorized
     * The date (and perhaps time) when the prescription was written.
     * Jurisdictions determine the valid lifetime of a prescription. Typically vision prescriptions are valid for two years from the date written.
     */
    dateWritten: dateTime;
    /**
     * Extension for dateWritten
     **/
    _dateWritten?: Element;
    /**
     * Who authorized the vision prescription
     * The healthcare professional responsible for authorizing the prescription.
     */
    prescriber: Reference;
    /**
     * Vision lens authorization
     * Contain the details of  the individual lens specifications and serves as the authorization for the fullfillment by certified professionals.
     */
    lensSpecification: VisionPrescriptionLensSpecification[];
    /**
     * active | cancelled | draft | entered-in-error
     * The status of the resource instance.
     * This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid.
     */
    status: VisionPrescriptionVisionStatus;
}
