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


from . import (attachment, backboneelement, codeableconcept, domainresource,
               fhirdate, fhirreference, identifier)


class Communication(domainresource.DomainResource):
    """ 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 was notified about a
    reportable condition.
    """

    resource_name = "Communication"

    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.category = None
        """ Message category.
        Type `CodeableConcept` (represented as `dict` in JSON). """

        self.encounter = None
        """ Encounter leading to message.
        Type `FHIRReference` referencing `Encounter` (represented as `dict` in JSON). """

        self.identifier = None
        """ Unique identifier.
        List of `Identifier` items (represented as `dict` in JSON). """

        self.medium = None
        """ A channel of communication.
        List of `CodeableConcept` items (represented as `dict` in JSON). """

        self.payload = None
        """ Message payload.
        List of `CommunicationPayload` items (represented as `dict` in JSON). """

        self.reason = None
        """ Indication for message.
        List of `CodeableConcept` items (represented as `dict` in JSON). """

        self.received = None
        """ When received.
        Type `FHIRDate` (represented as `str` in JSON). """

        self.recipient = None
        """ Message recipient.
        List of `FHIRReference` items referencing `Device, Organization, Patient, Practitioner, RelatedPerson, Group` (represented as `dict` in JSON). """

        self.requestDetail = None
        """ CommunicationRequest producing this message.
        Type `FHIRReference` referencing `CommunicationRequest` (represented as `dict` in JSON). """

        self.sender = None
        """ Message sender.
        Type `FHIRReference` referencing `Device, Organization, Patient, Practitioner, RelatedPerson` (represented as `dict` in JSON). """

        self.sent = None
        """ When sent.
        Type `FHIRDate` (represented as `str` in JSON). """

        self.status = None
        """ in-progress | completed | suspended | rejected | failed.
        Type `str`. """

        self.subject = None
        """ Focus of message.
        Type `FHIRReference` referencing `Patient` (represented as `dict` in JSON). """

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

    def elementProperties(self):
        js = super(Communication, self).elementProperties()
        js.extend(
            [
                (
                    "category",
                    "category",
                    codeableconcept.CodeableConcept,
                    False,
                    None,
                    False,
                ),
                (
                    "encounter",
                    "encounter",
                    fhirreference.FHIRReference,
                    False,
                    None,
                    False,
                ),
                ("identifier", "identifier", identifier.Identifier, True, None, False),
                (
                    "medium",
                    "medium",
                    codeableconcept.CodeableConcept,
                    True,
                    None,
                    False,
                ),
                ("payload", "payload", CommunicationPayload, True, None, False),
                (
                    "reason",
                    "reason",
                    codeableconcept.CodeableConcept,
                    True,
                    None,
                    False,
                ),
                ("received", "received", fhirdate.FHIRDate, False, None, False),
                (
                    "recipient",
                    "recipient",
                    fhirreference.FHIRReference,
                    True,
                    None,
                    False,
                ),
                (
                    "requestDetail",
                    "requestDetail",
                    fhirreference.FHIRReference,
                    False,
                    None,
                    False,
                ),
                ("sender", "sender", fhirreference.FHIRReference, False, None, False),
                ("sent", "sent", fhirdate.FHIRDate, False, None, False),
                ("status", "status", str, False, None, False),
                ("subject", "subject", fhirreference.FHIRReference, False, None, False),
            ]
        )
        return js


class CommunicationPayload(backboneelement.BackboneElement):
    """ Message payload.
    
    Text, attachment(s), or resource(s) that was communicated to the recipient.
    """

    resource_name = "CommunicationPayload"

    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.contentAttachment = None
        """ Message part content.
        Type `Attachment` (represented as `dict` in JSON). """

        self.contentReference = None
        """ Message part content.
        Type `FHIRReference` referencing `Resource` (represented as `dict` in JSON). """

        self.contentString = None
        """ Message part content.
        Type `str`. """

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

    def elementProperties(self):
        js = super(CommunicationPayload, self).elementProperties()
        js.extend(
            [
                (
                    "contentAttachment",
                    "contentAttachment",
                    attachment.Attachment,
                    False,
                    "content",
                    True,
                ),
                (
                    "contentReference",
                    "contentReference",
                    fhirreference.FHIRReference,
                    False,
                    "content",
                    True,
                ),
                ("contentString", "contentString", str, False, "content", True),
            ]
        )
        return js
