text: 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)
      # type_ (CodeableConcept)
      from spark_auto_mapper_fhir.complex_types.codeable_concept import CodeableConcept
  
      # End Import for References for type_
      # Import for CodeableConcept for type_
      from spark_auto_mapper_fhir.value_sets.participant_type import ParticipantTypeCode
  
      # End Import for CodeableConcept for type_
      # actor (Reference)
      from spark_auto_mapper_fhir.complex_types.reference import Reference
  
      # Imports for References for actor
      from spark_auto_mapper_fhir.resources.patient import Patient
      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.device import Device
      from spark_auto_mapper_fhir.resources.healthcare_service import HealthcareService
      from spark_auto_mapper_fhir.resources.location import Location
  
      # required (ParticipantRequired)
      from spark_auto_mapper_fhir.value_sets.participant_required import (
          ParticipantRequiredCode,
      )
  
      # status (ParticipationStatus)
      from spark_auto_mapper_fhir.value_sets.participation_status import (
          ParticipationStatusCode,
      )
  
      # 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 AppointmentParticipant(FhirBackboneElementBase):
      """
      Appointment.Participant
          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).
      """
  
      # noinspection PyPep8Naming
      def __init__(
          self,
          *,
          id_: Optional[FhirString] = None,
          extension: Optional[FhirList[ExtensionBase]] = None,
          modifierExtension: Optional[FhirList[ExtensionBase]] = None,
          type_: Optional[FhirList[CodeableConcept[ParticipantTypeCode]]] = None,
          actor: Optional[
              Reference[
                  Union[
                      Patient,
                      Practitioner,
                      PractitionerRole,
                      RelatedPerson,
                      Device,
                      HealthcareService,
                      Location,
                  ]
              ]
          ] = None,
          required: Optional[ParticipantRequiredCode] = None,
          status: ParticipationStatusCode,
          period: Optional[Period] = None,
      ) -> None:
          """
              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).
  
              :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 type_: Role of participant in the appointment.
              :param actor: A Person, Location/HealthcareService or Device that is participating in the
          appointment.
              :param required: 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.
              :param status: Participation status of the actor.
              :param period: Participation period of the actor.
          """
          super().__init__(
              id_=id_,
              extension=extension,
              modifierExtension=modifierExtension,
              type_=type_,
              actor=actor,
              required=required,
              status=status,
              period=period,
          )
  