<reponame>icanbwell/SparkAutoMapper.FHIR
from __future__ import annotations
from typing import Optional, TYPE_CHECKING, Union

# noinspection PyPackageRequirements
from pyspark.sql.types import StructType, DataType
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.complex_types.meta import Meta
from spark_auto_mapper_fhir.extensions.extension_base import ExtensionBase
from spark_auto_mapper_fhir.fhir_types.id import FhirId
from spark_auto_mapper_fhir.fhir_types.uri import FhirUri

from spark_auto_mapper_fhir.base_types.fhir_resource_base import FhirResourceBase
from spark_fhir_schemas.r4.resources.location import LocationSchema

if TYPE_CHECKING:
    pass
    # id_ (id)
    # meta (Meta)
    # implicitRules (uri)
    # language (CommonLanguages)
    from spark_auto_mapper_fhir.value_sets.common_languages import CommonLanguagesCode

    # text (Narrative)
    from spark_auto_mapper_fhir.complex_types.narrative import Narrative

    # contained (ResourceContainer)
    from spark_auto_mapper_fhir.complex_types.resource_container import (
        ResourceContainer,
    )

    # extension (Extension)
    # modifierExtension (Extension)
    # identifier (Identifier)
    from spark_auto_mapper_fhir.complex_types.identifier import Identifier

    # status (LocationStatus)
    from spark_auto_mapper_fhir.value_sets.location_status import LocationStatusCode

    # operationalStatus (Coding)
    from spark_auto_mapper_fhir.complex_types.coding import Coding

    # Import for CodeableConcept for operationalStatus
    from spark_auto_mapper_fhir.value_sets.v2_0116 import V2_0116

    # End Import for CodeableConcept for operationalStatus
    # name (string)
    # alias (string)
    # description (string)
    # mode (LocationMode)
    from spark_auto_mapper_fhir.value_sets.location_mode import LocationModeCode

    # type_ (CodeableConcept)
    from spark_auto_mapper_fhir.complex_types.codeable_concept import CodeableConcept

    # Import for CodeableConcept for type_
    from spark_auto_mapper_fhir.value_sets.service_delivery_location_role_type import (
        ServiceDeliveryLocationRoleType,
    )

    # End Import for CodeableConcept for type_
    # telecom (ContactPoint)
    from spark_auto_mapper_fhir.complex_types.contact_point import ContactPoint

    # address (Address)
    from spark_auto_mapper_fhir.complex_types.address import Address

    # physicalType (CodeableConcept)
    # Import for CodeableConcept for physicalType
    from spark_auto_mapper_fhir.value_sets.location_type import LocationTypeCode

    # End Import for CodeableConcept for physicalType
    # position (Location.Position)
    from spark_auto_mapper_fhir.backbone_elements.location_position import (
        LocationPosition,
    )

    # managingOrganization (Reference)
    from spark_auto_mapper_fhir.complex_types.reference import Reference

    # Imports for References for managingOrganization
    from spark_auto_mapper_fhir.resources.organization import Organization

    # partOf (Reference)
    # Imports for References for partOf
    # hoursOfOperation (Location.HoursOfOperation)
    from spark_auto_mapper_fhir.backbone_elements.location_hours_of_operation import (
        LocationHoursOfOperation,
    )

    # availabilityExceptions (string)
    # endpoint (Reference)
    # Imports for References for endpoint
    from spark_auto_mapper_fhir.resources.endpoint import Endpoint


# This file is auto-generated by generate_classes so do not edit manually
# noinspection PyPep8Naming
class Location(FhirResourceBase):
    """
    Location
    location.xsd
        Details and position information for a physical place where services are
    provided and resources and participants may be stored, found, contained, or
    accommodated.
        If the element is present, it must have either a @value, an @id, or extensions
    """

    # noinspection PyPep8Naming
    def __init__(
        self,
        *,
        id_: Optional[FhirId] = None,
        meta: Optional[Meta] = None,
        implicitRules: Optional[FhirUri] = None,
        language: Optional[CommonLanguagesCode] = None,
        text: Optional[Narrative] = None,
        contained: Optional[FhirList[ResourceContainer]] = None,
        extension: Optional[FhirList[ExtensionBase]] = None,
        modifierExtension: Optional[FhirList[ExtensionBase]] = None,
        identifier: Optional[FhirList[Identifier]] = None,
        status: Optional[LocationStatusCode] = None,
        operationalStatus: Optional[Coding[V2_0116]] = None,
        name: Optional[FhirString] = None,
        alias: Optional[FhirList[FhirString]] = None,
        description: Optional[FhirString] = None,
        mode: Optional[LocationModeCode] = None,
        type_: Optional[
            FhirList[CodeableConcept[ServiceDeliveryLocationRoleType]]
        ] = None,
        telecom: Optional[FhirList[ContactPoint]] = None,
        address: Optional[Address] = None,
        physicalType: Optional[CodeableConcept[LocationTypeCode]] = None,
        position: Optional[LocationPosition] = None,
        managingOrganization: Optional[Reference[Organization]] = None,
        partOf: Optional[Reference[Location]] = None,
        hoursOfOperation: Optional[FhirList[LocationHoursOfOperation]] = None,
        availabilityExceptions: Optional[FhirString] = None,
        endpoint: Optional[FhirList[Reference[Endpoint]]] = None,
    ) -> None:
        """
            Details and position information for a physical place where services are
        provided and resources and participants may be stored, found, contained, or
        accommodated.
            If the element is present, it must have either a @value, an @id, or extensions

            :param id_: The logical id of the resource, as used in the URL for the resource. Once
        assigned, this value never changes.
            :param meta: 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.
            :param implicitRules: 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.
            :param language: The base language in which the resource is written.
            :param text: 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.
            :param contained: 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.
            :param extension: 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.
            :param modifierExtension: 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).
            :param identifier: Unique code or number identifying the location to its users.
            :param status: 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.
            :param operationalStatus: 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.
            :param name: Name of the location as used by humans. Does not need to be unique.
            :param alias: A list of alternate names that the location is known as, or was known as, in
        the past.
            :param description: Description of the Location, which helps in finding or referencing the place.
            :param mode: Indicates whether a resource instance represents a specific location or a
        class of locations.
            :param type_: Indicates the type of function performed at the location.
            :param telecom: The contact details of communication devices available at the location. This
        can include phone numbers, fax numbers, mobile numbers, email addresses and
        web sites.
            :param address: Physical location.
            :param physicalType: Physical form of the location, e.g. building, room, vehicle, road.
            :param position: The absolute geographic location of the Location, expressed using the WGS84
        datum (This is the same co-ordinate system used in KML).
            :param managingOrganization: The organization responsible for the provisioning and upkeep of the location.
            :param partOf: Another Location of which this Location is physically a part of.
            :param hoursOfOperation: What days/times during a week is this location usually open.
            :param availabilityExceptions: 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.
            :param endpoint: Technical endpoints providing access to services operated for the location.
        """
        super().__init__(
            resourceType="Location",
            id_=id_,
            meta=meta,
            implicitRules=implicitRules,
            language=language,
            text=text,
            contained=contained,
            extension=extension,
            modifierExtension=modifierExtension,
            identifier=identifier,
            status=status,
            operationalStatus=operationalStatus,
            name=name,
            alias=alias,
            description=description,
            mode=mode,
            type_=type_,
            telecom=telecom,
            address=address,
            physicalType=physicalType,
            position=position,
            managingOrganization=managingOrganization,
            partOf=partOf,
            hoursOfOperation=hoursOfOperation,
            availabilityExceptions=availabilityExceptions,
            endpoint=endpoint,
        )

    def get_schema(
        self, include_extension: bool
    ) -> Optional[Union[StructType, DataType]]:
        return LocationSchema.get_schema(include_extension=include_extension)

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

# noinspection PyPackageRequirements
from pyspark.sql.types import StructType, DataType
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.complex_types.meta import Meta
from spark_auto_mapper_fhir.extensions.extension_base import ExtensionBase
from spark_auto_mapper_fhir.fhir_types.id import FhirId
from spark_auto_mapper_fhir.fhir_types.uri import FhirUri

from spark_auto_mapper_fhir.base_types.fhir_resource_base import FhirResourceBase
from spark_fhir_schemas.r4.resources.location import LocationSchema

if TYPE_CHECKING:
    pass
    # id_ (id)
    # meta (Meta)
    # implicitRules (uri)
    # language (CommonLanguages)
    from spark_auto_mapper_fhir.value_sets.common_languages import CommonLanguagesCode

    # text (Narrative)
    from spark_auto_mapper_fhir.complex_types.narrative import Narrative

    # contained (ResourceContainer)
    from spark_auto_mapper_fhir.complex_types.resource_container import (
        ResourceContainer,
    )

    # extension (Extension)
    # modifierExtension (Extension)
    # identifier (Identifier)
    from spark_auto_mapper_fhir.complex_types.identifier import Identifier

    # status (LocationStatus)
    from spark_auto_mapper_fhir.value_sets.location_status import LocationStatusCode

    # operationalStatus (Coding)
    from spark_auto_mapper_fhir.complex_types.coding import Coding

    # Import for CodeableConcept for operationalStatus
    from spark_auto_mapper_fhir.value_sets.v2_0116 import V2_0116

    # End Import for CodeableConcept for operationalStatus
    # name (string)
    # alias (string)
    # description (string)
    # mode (LocationMode)
    from spark_auto_mapper_fhir.value_sets.location_mode import LocationModeCode

    # type_ (CodeableConcept)
    from spark_auto_mapper_fhir.complex_types.codeable_concept import CodeableConcept

    # Import for CodeableConcept for type_
    from spark_auto_mapper_fhir.value_sets.service_delivery_location_role_type import (
        ServiceDeliveryLocationRoleType,
    )

    # End Import for CodeableConcept for type_
    # telecom (ContactPoint)
    from spark_auto_mapper_fhir.complex_types.contact_point import ContactPoint

    # address (Address)
    from spark_auto_mapper_fhir.complex_types.address import Address

    # physicalType (CodeableConcept)
    # Import for CodeableConcept for physicalType
    from spark_auto_mapper_fhir.value_sets.location_type import LocationTypeCode

    # End Import for CodeableConcept for physicalType
    # position (Location.Position)
    from spark_auto_mapper_fhir.backbone_elements.location_position import (
        LocationPosition,
    )

    # managingOrganization (Reference)
    from spark_auto_mapper_fhir.complex_types.reference import Reference

    # Imports for References for managingOrganization
    from spark_auto_mapper_fhir.resources.organization import Organization

    # partOf (Reference)
    # Imports for References for partOf
    # hoursOfOperation (Location.HoursOfOperation)
    from spark_auto_mapper_fhir.backbone_elements.location_hours_of_operation import (
        LocationHoursOfOperation,
    )

    # availabilityExceptions (string)
    # endpoint (Reference)
    # Imports for References for endpoint
    from spark_auto_mapper_fhir.resources.endpoint import Endpoint


# This file is auto-generated by generate_classes so do not edit manually
# noinspection PyPep8Naming
class Location(FhirResourceBase):
    """
    Location
    location.xsd
        Details and position information for a physical place where services are
    provided and resources and participants may be stored, found, contained, or
    accommodated.
        If the element is present, it must have either a @value, an @id, or extensions
    """

    # noinspection PyPep8Naming
    def __init__(
        self,
        *,
        id_: Optional[FhirId] = None,
        meta: Optional[Meta] = None,
        implicitRules: Optional[FhirUri] = None,
        language: Optional[CommonLanguagesCode] = None,
        text: Optional[Narrative] = None,
        contained: Optional[FhirList[ResourceContainer]] = None,
        extension: Optional[FhirList[ExtensionBase]] = None,
        modifierExtension: Optional[FhirList[ExtensionBase]] = None,
        identifier: Optional[FhirList[Identifier]] = None,
        status: Optional[LocationStatusCode] = None,
        operationalStatus: Optional[Coding[V2_0116]] = None,
        name: Optional[FhirString] = None,
        alias: Optional[FhirList[FhirString]] = None,
        description: Optional[FhirString] = None,
        mode: Optional[LocationModeCode] = None,
        type_: Optional[
            FhirList[CodeableConcept[ServiceDeliveryLocationRoleType]]
        ] = None,
        telecom: Optional[FhirList[ContactPoint]] = None,
        address: Optional[Address] = None,
        physicalType: Optional[CodeableConcept[LocationTypeCode]] = None,
        position: Optional[LocationPosition] = None,
        managingOrganization: Optional[Reference[Organization]] = None,
        partOf: Optional[Reference[Location]] = None,
        hoursOfOperation: Optional[FhirList[LocationHoursOfOperation]] = None,
        availabilityExceptions: Optional[FhirString] = None,
        endpoint: Optional[FhirList[Reference[Endpoint]]] = None,
    ) -> None:
        """
            Details and position information for a physical place where services are
        provided and resources and participants may be stored, found, contained, or
        accommodated.
            If the element is present, it must have either a @value, an @id, or extensions

            :param id_: The logical id of the resource, as used in the URL for the resource. Once
        assigned, this value never changes.
            :param meta: 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.
            :param implicitRules: 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.
            :param language: The base language in which the resource is written.
            :param text: 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.
            :param contained: 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.
            :param extension: 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.
            :param modifierExtension: 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).
            :param identifier: Unique code or number identifying the location to its users.
            :param status: 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.
            :param operationalStatus: 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.
            :param name: Name of the location as used by humans. Does not need to be unique.
            :param alias: A list of alternate names that the location is known as, or was known as, in
        the past.
            :param description: Description of the Location, which helps in finding or referencing the place.
            :param mode: Indicates whether a resource instance represents a specific location or a
        class of locations.
            :param type_: Indicates the type of function performed at the location.
            :param telecom: The contact details of communication devices available at the location. This
        can include phone numbers, fax numbers, mobile numbers, email addresses and
        web sites.
            :param address: Physical location.
            :param physicalType: Physical form of the location, e.g. building, room, vehicle, road.
            :param position: The absolute geographic location of the Location, expressed using the WGS84
        datum (This is the same co-ordinate system used in KML).
            :param managingOrganization: The organization responsible for the provisioning and upkeep of the location.
            :param partOf: Another Location of which this Location is physically a part of.
            :param hoursOfOperation: What days/times during a week is this location usually open.
            :param availabilityExceptions: 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.
            :param endpoint: Technical endpoints providing access to services operated for the location.
        """
        super().__init__(
            resourceType="Location",
            id_=id_,
            meta=meta,
            implicitRules=implicitRules,
            language=language,
            text=text,
            contained=contained,
            extension=extension,
            modifierExtension=modifierExtension,
            identifier=identifier,
            status=status,
            operationalStatus=operationalStatus,
            name=name,
            alias=alias,
            description=description,
            mode=mode,
            type_=type_,
            telecom=telecom,
            address=address,
            physicalType=physicalType,
            position=position,
            managingOrganization=managingOrganization,
            partOf=partOf,
            hoursOfOperation=hoursOfOperation,
            availabilityExceptions=availabilityExceptions,
            endpoint=endpoint,
        )

    def get_schema(
        self, include_extension: bool
    ) -> Optional[Union[StructType, DataType]]:
        return LocationSchema.get_schema(include_extension=include_extension)
# noinspection PyPackageRequirements # id_ (id) # meta (Meta) # implicitRules (uri) # language (CommonLanguages) # text (Narrative) # contained (ResourceContainer) # extension (Extension) # modifierExtension (Extension) # identifier (Identifier) # status (LocationStatus) # operationalStatus (Coding) # Import for CodeableConcept for operationalStatus # End Import for CodeableConcept for operationalStatus # name (string) # alias (string) # description (string) # mode (LocationMode) # type_ (CodeableConcept) # Import for CodeableConcept for type_ # End Import for CodeableConcept for type_ # telecom (ContactPoint) # address (Address) # physicalType (CodeableConcept) # Import for CodeableConcept for physicalType # End Import for CodeableConcept for physicalType # position (Location.Position) # managingOrganization (Reference) # Imports for References for managingOrganization # partOf (Reference) # Imports for References for partOf # hoursOfOperation (Location.HoursOfOperation) # availabilityExceptions (string) # endpoint (Reference) # Imports for References for endpoint # This file is auto-generated by generate_classes so do not edit manually # noinspection PyPep8Naming Location     location.xsd         Details and position information for a physical place where services are     provided and resources and participants may be stored, found, contained, or     accommodated.         If the element is present, it must have either a @value, an @id, or extensions # noinspection PyPep8Naming Details and position information for a physical place where services are         provided and resources and participants may be stored, found, contained, or         accommodated.             If the element is present, it must have either a @value, an @id, or extensions              :param id_: The logical id of the resource, as used in the URL for the resource. Once         assigned, this value never changes.             :param meta: 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.             :param implicitRules: 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.             :param language: The base language in which the resource is written.             :param text: 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.             :param contained: 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.             :param extension: 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.             :param modifierExtension: 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).             :param identifier: Unique code or number identifying the location to its users.             :param status: 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.             :param operationalStatus: 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.             :param name: Name of the location as used by humans. Does not need to be unique.             :param alias: A list of alternate names that the location is known as, or was known as, in         the past.             :param description: Description of the Location, which helps in finding or referencing the place.             :param mode: Indicates whether a resource instance represents a specific location or a         class of locations.             :param type_: Indicates the type of function performed at the location.             :param telecom: The contact details of communication devices available at the location. This         can include phone numbers, fax numbers, mobile numbers, email addresses and         web sites.             :param address: Physical location.             :param physicalType: Physical form of the location, e.g. building, room, vehicle, road.             :param position: The absolute geographic location of the Location, expressed using the WGS84         datum (This is the same co-ordinate system used in KML).             :param managingOrganization: The organization responsible for the provisioning and upkeep of the location.             :param partOf: Another Location of which this Location is physically a part of.             :param hoursOfOperation: What days/times during a week is this location usually open.             :param availabilityExceptions: 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.             :param endpoint: Technical endpoints providing access to services operated for the location.