<gh_stars>1-10
from __future__ import annotations
from typing import Optional, TYPE_CHECKING, Union

from spark_auto_mapper_fhir.fhir_types.list import FhirList
from spark_auto_mapper_fhir.fhir_types.string import FhirString
from spark_auto_mapper_fhir.extensions.extension_base import ExtensionBase

from spark_auto_mapper_fhir.base_types.fhir_backbone_element_base import (
    FhirBackboneElementBase,
)

if TYPE_CHECKING:
    pass
    # id_ (string)
    # extension (Extension)
    # modifierExtension (Extension)
    # role (CodeableConcept)
    from spark_auto_mapper_fhir.complex_types.codeable_concept import CodeableConcept

    # End Import for References for role
    # Import for CodeableConcept for role
    from spark_auto_mapper_fhir.value_sets.participant_roles import ParticipantRolesCode

    # End Import for CodeableConcept for role
    # member (Reference)
    from spark_auto_mapper_fhir.complex_types.reference import Reference

    # Imports for References for member
    from spark_auto_mapper_fhir.resources.practitioner import Practitioner
    from spark_auto_mapper_fhir.resources.practitioner_role import PractitionerRole
    from spark_auto_mapper_fhir.resources.related_person import RelatedPerson
    from spark_auto_mapper_fhir.resources.patient import Patient
    from spark_auto_mapper_fhir.resources.organization import Organization
    from spark_auto_mapper_fhir.resources.care_team import CareTeam

    # onBehalfOf (Reference)
    # Imports for References for onBehalfOf
    # period (Period)
    from spark_auto_mapper_fhir.complex_types.period import Period


# This file is auto-generated by generate_classes so do not edit manually
# noinspection PyPep8Naming
class CareTeamParticipant(FhirBackboneElementBase):
    """
    CareTeam.Participant
        The Care Team includes all the people and organizations who plan to participate in the coordination and delivery of care for a patient.
    """

    # noinspection PyPep8Naming
    def __init__(
        self,
        *,
        id_: Optional[FhirString] = None,
        extension: Optional[FhirList[ExtensionBase]] = None,
        modifierExtension: Optional[FhirList[ExtensionBase]] = None,
        role: Optional[FhirList[CodeableConcept[ParticipantRolesCode]]] = None,
        member: Optional[
            Reference[
                Union[
                    Practitioner,
                    PractitionerRole,
                    RelatedPerson,
                    Patient,
                    Organization,
                    CareTeam,
                ]
            ]
        ] = None,
        onBehalfOf: Optional[Reference[Organization]] = None,
        period: Optional[Period] = None,
    ) -> None:
        """
            The Care Team includes all the people and organizations who plan to
        participate in the coordination and delivery of care for a patient.

            :param id_: None
            :param extension: 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.
            :param modifierExtension: May be 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).
            :param role: Indicates specific responsibility of an individual within the care team, such
        as "Primary care physician", "Trained social worker counselor", "Caregiver",
        etc.
            :param member: The specific person or organization who is participating/expected to
        participate in the care team.
            :param onBehalfOf: The organization of the practitioner.
            :param period: Indicates when the specific member or organization did (or is intended to)
        come into effect and end.
        """
        super().__init__(
            id_=id_,
            extension=extension,
            modifierExtension=modifierExtension,
            role=role,
            member=member,
            onBehalfOf=onBehalfOf,
            period=period,
        )

from __future__ import annotations
from typing import Optional, TYPE_CHECKING, Union

from spark_auto_mapper_fhir.fhir_types.list import FhirList
from spark_auto_mapper_fhir.fhir_types.string import FhirString
from spark_auto_mapper_fhir.extensions.extension_base import ExtensionBase

from spark_auto_mapper_fhir.base_types.fhir_backbone_element_base import (
    FhirBackboneElementBase,
)

if TYPE_CHECKING:
    pass
    # id_ (string)
    # extension (Extension)
    # modifierExtension (Extension)
    # role (CodeableConcept)
    from spark_auto_mapper_fhir.complex_types.codeable_concept import CodeableConcept

    # End Import for References for role
    # Import for CodeableConcept for role
    from spark_auto_mapper_fhir.value_sets.participant_roles import ParticipantRolesCode

    # End Import for CodeableConcept for role
    # member (Reference)
    from spark_auto_mapper_fhir.complex_types.reference import Reference

    # Imports for References for member
    from spark_auto_mapper_fhir.resources.practitioner import Practitioner
    from spark_auto_mapper_fhir.resources.practitioner_role import PractitionerRole
    from spark_auto_mapper_fhir.resources.related_person import RelatedPerson
    from spark_auto_mapper_fhir.resources.patient import Patient
    from spark_auto_mapper_fhir.resources.organization import Organization
    from spark_auto_mapper_fhir.resources.care_team import CareTeam

    # onBehalfOf (Reference)
    # Imports for References for onBehalfOf
    # period (Period)
    from spark_auto_mapper_fhir.complex_types.period import Period


# This file is auto-generated by generate_classes so do not edit manually
# noinspection PyPep8Naming
class CareTeamParticipant(FhirBackboneElementBase):
    """
    CareTeam.Participant
        The Care Team includes all the people and organizations who plan to participate in the coordination and delivery of care for a patient.
    """

    # noinspection PyPep8Naming
    def __init__(
        self,
        *,
        id_: Optional[FhirString] = None,
        extension: Optional[FhirList[ExtensionBase]] = None,
        modifierExtension: Optional[FhirList[ExtensionBase]] = None,
        role: Optional[FhirList[CodeableConcept[ParticipantRolesCode]]] = None,
        member: Optional[
            Reference[
                Union[
                    Practitioner,
                    PractitionerRole,
                    RelatedPerson,
                    Patient,
                    Organization,
                    CareTeam,
                ]
            ]
        ] = None,
        onBehalfOf: Optional[Reference[Organization]] = None,
        period: Optional[Period] = None,
    ) -> None:
        """
            The Care Team includes all the people and organizations who plan to
        participate in the coordination and delivery of care for a patient.

            :param id_: None
            :param extension: 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.
            :param modifierExtension: May be 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).
            :param role: Indicates specific responsibility of an individual within the care team, such
        as "Primary care physician", "Trained social worker counselor", "Caregiver",
        etc.
            :param member: The specific person or organization who is participating/expected to
        participate in the care team.
            :param onBehalfOf: The organization of the practitioner.
            :param period: Indicates when the specific member or organization did (or is intended to)
        come into effect and end.
        """
        super().__init__(
            id_=id_,
            extension=extension,
            modifierExtension=modifierExtension,
            role=role,
            member=member,
            onBehalfOf=onBehalfOf,
            period=period,
        )
# id_ (string) # extension (Extension) # modifierExtension (Extension) # role (CodeableConcept) # End Import for References for role # Import for CodeableConcept for role # End Import for CodeableConcept for role # member (Reference) # Imports for References for member # onBehalfOf (Reference) # Imports for References for onBehalfOf # period (Period) # This file is auto-generated by generate_classes so do not edit manually # noinspection PyPep8Naming CareTeam.Participant         The Care Team includes all the people and organizations who plan to participate in the coordination and delivery of care for a patient. # noinspection PyPep8Naming The Care Team includes all the people and organizations who plan to         participate in the coordination and delivery of care for a patient.              :param id_: None             :param extension: 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.             :param modifierExtension: May be 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).             :param role: Indicates specific responsibility of an individual within the care team, such         as "Primary care physician", "Trained social worker counselor", "Caregiver",         etc.             :param member: The specific person or organization who is participating/expected to         participate in the care team.             :param onBehalfOf: The organization of the practitioner.             :param period: Indicates when the specific member or organization did (or is intended to)         come into effect and end.