#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#  Generated from FHIR 4.0.0-a53ec6ee1b (http://hl7.org/fhir/StructureDefinition/ExampleScenario) on 2019-05-13.
#  2019, SMART Health IT.


from . import domainresource

class ExampleScenario(domainresource.DomainResource):
    """ Example of workflow instance.
    """

    resource_type = "ExampleScenario"

    def __init__(self, jsondict=None, strict=True):
        """ Initialize all valid properties.

        :raises: FHIRValidationError on validation errors, unless strict is False
        :param dict jsondict: A JSON dictionary to use for initialization
        :param bool strict: If True (the default), invalid variables will raise a TypeError
        """

        self.actor = None
        """ Actor participating in the resource.
        List of `ExampleScenarioActor` items (represented as `dict` in JSON). """

        self.contact = None
        """ Contact details for the publisher.
        List of `ContactDetail` items (represented as `dict` in JSON). """

        self.copyright = None
        """ Use and/or publishing restrictions.
        Type `str`. """

        self.date = None
        """ Date last changed.
        Type `FHIRDate` (represented as `str` in JSON). """

        self.experimental = None
        """ For testing purposes, not real usage.
        Type `bool`. """

        self.identifier = None
        """ Additional identifier for the example scenario.
        List of `Identifier` items (represented as `dict` in JSON). """

        self.instance = None
        """ Each resource and each version that is present in the workflow.
        List of `ExampleScenarioInstance` items (represented as `dict` in JSON). """

        self.jurisdiction = None
        """ Intended jurisdiction for example scenario (if applicable).
        List of `CodeableConcept` items (represented as `dict` in JSON). """

        self.name = None
        """ Name for this example scenario (computer friendly).
        Type `str`. """

        self.process = None
        """ Each major process - a group of operations.
        List of `ExampleScenarioProcess` items (represented as `dict` in JSON). """

        self.publisher = None
        """ Name of the publisher (organization or individual).
        Type `str`. """

        self.purpose = None
        """ The purpose of the example, e.g. to illustrate a scenario.
        Type `str`. """

        self.status = None
        """ draft | active | retired | unknown.
        Type `str`. """

        self.url = None
        """ Canonical identifier for this example scenario, represented as a
        URI (globally unique).
        Type `str`. """

        self.useContext = None
        """ The context that the content is intended to support.
        List of `UsageContext` items (represented as `dict` in JSON). """

        self.version = None
        """ Business version of the example scenario.
        Type `str`. """

        self.workflow = None
        """ Another nested workflow.
        List of `str` items. """

        super(ExampleScenario, self).__init__(jsondict=jsondict, strict=strict)

    def elementProperties(self):
        js = super(ExampleScenario, self).elementProperties()
        js.extend([
            ("actor", "actor", ExampleScenarioActor, "ExampleScenarioActor", True, None, False),
            ("contact", "contact", contactdetail.ContactDetail, "ContactDetail", True, None, False),
            ("copyright", "copyright", str, "markdown", False, None, False),
            ("date", "date", fhirdate.FHIRDate, "dateTime", False, None, False),
            ("experimental", "experimental", bool, "boolean", False, None, False),
            ("identifier", "identifier", identifier.Identifier, "Identifier", True, None, False),
            ("instance", "instance", ExampleScenarioInstance, "ExampleScenarioInstance", True, None, False),
            ("jurisdiction", "jurisdiction", codeableconcept.CodeableConcept, "CodeableConcept", True, None, False),
            ("name", "name", str, "string", False, None, False),
            ("process", "process", ExampleScenarioProcess, "ExampleScenarioProcess", True, None, False),
            ("publisher", "publisher", str, "string", False, None, False),
            ("purpose", "purpose", str, "markdown", False, None, False),
            ("status", "status", str, "code", False, None, True),
            ("url", "url", str, "uri", False, None, False),
            ("useContext", "useContext", usagecontext.UsageContext, "UsageContext", True, None, False),
            ("version", "version", str, "string", False, None, False),
            ("workflow", "workflow", str, "canonical", True, None, False),
        ])
        return js


from . import backboneelement

class ExampleScenarioActor(backboneelement.BackboneElement):
    """ Actor participating in the resource.
    """

    resource_type = "ExampleScenarioActor"

    def __init__(self, jsondict=None, strict=True):
        """ Initialize all valid properties.

        :raises: FHIRValidationError on validation errors, unless strict is False
        :param dict jsondict: A JSON dictionary to use for initialization
        :param bool strict: If True (the default), invalid variables will raise a TypeError
        """

        self.actorId = None
        """ ID or acronym of the actor.
        Type `str`. """

        self.description = None
        """ The description of the actor.
        Type `str`. """

        self.name = None
        """ The name of the actor as shown in the page.
        Type `str`. """

        self.type = None
        """ person | entity.
        Type `str`. """

        super(ExampleScenarioActor, self).__init__(jsondict=jsondict, strict=strict)

    def elementProperties(self):
        js = super(ExampleScenarioActor, self).elementProperties()
        js.extend([
            ("actorId", "actorId", str, "string", False, None, True),
            ("description", "description", str, "markdown", False, None, False),
            ("name", "name", str, "string", False, None, False),
            ("type", "type", str, "code", False, None, True),
        ])
        return js


class ExampleScenarioInstance(backboneelement.BackboneElement):
    """ Each resource and each version that is present in the workflow.
    """

    resource_type = "ExampleScenarioInstance"

    def __init__(self, jsondict=None, strict=True):
        """ Initialize all valid properties.

        :raises: FHIRValidationError on validation errors, unless strict is False
        :param dict jsondict: A JSON dictionary to use for initialization
        :param bool strict: If True (the default), invalid variables will raise a TypeError
        """

        self.containedInstance = None
        """ Resources contained in the instance.
        List of `ExampleScenarioInstanceContainedInstance` items (represented as `dict` in JSON). """

        self.description = None
        """ Human-friendly description of the resource instance.
        Type `str`. """

        self.name = None
        """ A short name for the resource instance.
        Type `str`. """

        self.resourceId = None
        """ The id of the resource for referencing.
        Type `str`. """

        self.resourceType = None
        """ The type of the resource.
        Type `str`. """

        self.version = None
        """ A specific version of the resource.
        List of `ExampleScenarioInstanceVersion` items (represented as `dict` in JSON). """

        super(ExampleScenarioInstance, self).__init__(jsondict=jsondict, strict=strict)

    def elementProperties(self):
        js = super(ExampleScenarioInstance, self).elementProperties()
        js.extend([
            ("containedInstance", "containedInstance", ExampleScenarioInstanceContainedInstance, "ExampleScenarioInstanceContainedInstance", True, None, False),
            ("description", "description", str, "markdown", False, None, False),
            ("name", "name", str, "string", False, None, False),
            ("resourceId", "resourceId", str, "string", False, None, True),
            ("resourceType", "resourceType", str, "code", False, None, True),
            ("version", "version", ExampleScenarioInstanceVersion, "ExampleScenarioInstanceVersion", True, None, False),
        ])
        return js


class ExampleScenarioInstanceContainedInstance(backboneelement.BackboneElement):
    """ Resources contained in the instance.

    Resources contained in the instance (e.g. the observations contained in a
    bundle).
    """

    resource_type = "ExampleScenarioInstanceContainedInstance"

    def __init__(self, jsondict=None, strict=True):
        """ Initialize all valid properties.

        :raises: FHIRValidationError on validation errors, unless strict is False
        :param dict jsondict: A JSON dictionary to use for initialization
        :param bool strict: If True (the default), invalid variables will raise a TypeError
        """

        self.resourceId = None
        """ Each resource contained in the instance.
        Type `str`. """

        self.versionId = None
        """ A specific version of a resource contained in the instance.
        Type `str`. """

        super(ExampleScenarioInstanceContainedInstance, self).__init__(jsondict=jsondict, strict=strict)

    def elementProperties(self):
        js = super(ExampleScenarioInstanceContainedInstance, self).elementProperties()
        js.extend([
            ("resourceId", "resourceId", str, "string", False, None, True),
            ("versionId", "versionId", str, "string", False, None, False),
        ])
        return js


class ExampleScenarioInstanceVersion(backboneelement.BackboneElement):
    """ A specific version of the resource.
    """

    resource_type = "ExampleScenarioInstanceVersion"

    def __init__(self, jsondict=None, strict=True):
        """ Initialize all valid properties.

        :raises: FHIRValidationError on validation errors, unless strict is False
        :param dict jsondict: A JSON dictionary to use for initialization
        :param bool strict: If True (the default), invalid variables will raise a TypeError
        """

        self.description = None
        """ The description of the resource version.
        Type `str`. """

        self.versionId = None
        """ The identifier of a specific version of a resource.
        Type `str`. """

        super(ExampleScenarioInstanceVersion, self).__init__(jsondict=jsondict, strict=strict)

    def elementProperties(self):
        js = super(ExampleScenarioInstanceVersion, self).elementProperties()
        js.extend([
            ("description", "description", str, "markdown", False, None, True),
            ("versionId", "versionId", str, "string", False, None, True),
        ])
        return js


class ExampleScenarioProcess(backboneelement.BackboneElement):
    """ Each major process - a group of operations.
    """

    resource_type = "ExampleScenarioProcess"

    def __init__(self, jsondict=None, strict=True):
        """ Initialize all valid properties.

        :raises: FHIRValidationError on validation errors, unless strict is False
        :param dict jsondict: A JSON dictionary to use for initialization
        :param bool strict: If True (the default), invalid variables will raise a TypeError
        """

        self.description = None
        """ A longer description of the group of operations.
        Type `str`. """

        self.postConditions = None
        """ Description of final status after the process ends.
        Type `str`. """

        self.preConditions = None
        """ Description of initial status before the process starts.
        Type `str`. """

        self.step = None
        """ Each step of the process.
        List of `ExampleScenarioProcessStep` items (represented as `dict` in JSON). """

        self.title = None
        """ The diagram title of the group of operations.
        Type `str`. """

        super(ExampleScenarioProcess, self).__init__(jsondict=jsondict, strict=strict)

    def elementProperties(self):
        js = super(ExampleScenarioProcess, self).elementProperties()
        js.extend([
            ("description", "description", str, "markdown", False, None, False),
            ("postConditions", "postConditions", str, "markdown", False, None, False),
            ("preConditions", "preConditions", str, "markdown", False, None, False),
            ("step", "step", ExampleScenarioProcessStep, "ExampleScenarioProcessStep", True, None, False),
            ("title", "title", str, "string", False, None, True),
        ])
        return js


class ExampleScenarioProcessStep(backboneelement.BackboneElement):
    """ Each step of the process.
    """

    resource_type = "ExampleScenarioProcessStep"

    def __init__(self, jsondict=None, strict=True):
        """ Initialize all valid properties.

        :raises: FHIRValidationError on validation errors, unless strict is False
        :param dict jsondict: A JSON dictionary to use for initialization
        :param bool strict: If True (the default), invalid variables will raise a TypeError
        """

        self.alternative = None
        """ Alternate non-typical step action.
        List of `ExampleScenarioProcessStepAlternative` items (represented as `dict` in JSON). """

        self.operation = None
        """ Each interaction or action.
        Type `ExampleScenarioProcessStepOperation` (represented as `dict` in JSON). """

        self.pause = None
        """ If there is a pause in the flow.
        Type `bool`. """

        self.process = None
        """ Nested process.
        List of `ExampleScenarioProcess` items (represented as `dict` in JSON). """

        super(ExampleScenarioProcessStep, self).__init__(jsondict=jsondict, strict=strict)

    def elementProperties(self):
        js = super(ExampleScenarioProcessStep, self).elementProperties()
        js.extend([
            ("alternative", "alternative", ExampleScenarioProcessStepAlternative, "ExampleScenarioProcessStepAlternative", True, None, False),
            ("operation", "operation", ExampleScenarioProcessStepOperation, "ExampleScenarioProcessStepOperation", False, None, False),
            ("pause", "pause", bool, "boolean", False, None, False),
            ("process", "process", ExampleScenarioProcess, "ExampleScenarioProcess", True, None, False),
        ])
        return js


class ExampleScenarioProcessStepAlternative(backboneelement.BackboneElement):
    """ 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.
    """

    resource_type = "ExampleScenarioProcessStepAlternative"

    def __init__(self, jsondict=None, strict=True):
        """ Initialize all valid properties.

        :raises: FHIRValidationError on validation errors, unless strict is False
        :param dict jsondict: A JSON dictionary to use for initialization
        :param bool strict: If True (the default), invalid variables will raise a TypeError
        """

        self.description = None
        """ A human-readable description of each option.
        Type `str`. """

        self.step = None
        """ What happens in each alternative option.
        List of `ExampleScenarioProcessStep` items (represented as `dict` in JSON). """

        self.title = None
        """ Label for alternative.
        Type `str`. """

        super(ExampleScenarioProcessStepAlternative, self).__init__(jsondict=jsondict, strict=strict)

    def elementProperties(self):
        js = super(ExampleScenarioProcessStepAlternative, self).elementProperties()
        js.extend([
            ("description", "description", str, "markdown", False, None, False),
            ("step", "step", ExampleScenarioProcessStep, "ExampleScenarioProcessStep", True, None, False),
            ("title", "title", str, "string", False, None, True),
        ])
        return js


class ExampleScenarioProcessStepOperation(backboneelement.BackboneElement):
    """ Each interaction or action.
    """

    resource_type = "ExampleScenarioProcessStepOperation"

    def __init__(self, jsondict=None, strict=True):
        """ Initialize all valid properties.

        :raises: FHIRValidationError on validation errors, unless strict is False
        :param dict jsondict: A JSON dictionary to use for initialization
        :param bool strict: If True (the default), invalid variables will raise a TypeError
        """

        self.description = None
        """ A comment to be inserted in the diagram.
        Type `str`. """

        self.initiator = None
        """ Who starts the transaction.
        Type `str`. """

        self.initiatorActive = None
        """ Whether the initiator is deactivated right after the transaction.
        Type `bool`. """

        self.name = None
        """ The human-friendly name of the interaction.
        Type `str`. """

        self.number = None
        """ The sequential number of the interaction.
        Type `str`. """

        self.receiver = None
        """ Who receives the transaction.
        Type `str`. """

        self.receiverActive = None
        """ Whether the receiver is deactivated right after the transaction.
        Type `bool`. """

        self.request = None
        """ Each resource instance used by the initiator.
        Type `ExampleScenarioInstanceContainedInstance` (represented as `dict` in JSON). """

        self.response = None
        """ Each resource instance used by the responder.
        Type `ExampleScenarioInstanceContainedInstance` (represented as `dict` in JSON). """

        self.type = None
        """ The type of operation - CRUD.
        Type `str`. """

        super(ExampleScenarioProcessStepOperation, self).__init__(jsondict=jsondict, strict=strict)

    def elementProperties(self):
        js = super(ExampleScenarioProcessStepOperation, self).elementProperties()
        js.extend([
            ("description", "description", str, "markdown", False, None, False),
            ("initiator", "initiator", str, "string", False, None, False),
            ("initiatorActive", "initiatorActive", bool, "boolean", False, None, False),
            ("name", "name", str, "string", False, None, False),
            ("number", "number", str, "string", False, None, True),
            ("receiver", "receiver", str, "string", False, None, False),
            ("receiverActive", "receiverActive", bool, "boolean", False, None, False),
            ("request", "request", ExampleScenarioInstanceContainedInstance, "ExampleScenarioInstanceContainedInstance", False, None, False),
            ("response", "response", ExampleScenarioInstanceContainedInstance, "ExampleScenarioInstanceContainedInstance", False, None, False),
            ("type", "type", str, "string", False, None, False),
        ])
        return js


import sys
try:
    from . import codeableconcept
except ImportError:
    codeableconcept = sys.modules[__package__ + '.codeableconcept']
try:
    from . import contactdetail
except ImportError:
    contactdetail = sys.modules[__package__ + '.contactdetail']
try:
    from . import fhirdate
except ImportError:
    fhirdate = sys.modules[__package__ + '.fhirdate']
try:
    from . import identifier
except ImportError:
    identifier = sys.modules[__package__ + '.identifier']
try:
    from . import usagecontext
except ImportError:
    usagecontext = sys.modules[__package__ + '.usagecontext']
