from __future__ import annotations
from dataclasses import dataclass, field
from .administrative_zone_ref_structure import AdministrativeZoneRefStructure
from .contract_ref_rel_structure import ContractRefRelStructure
from .data_role_type_enumeration import DataRoleTypeEnumeration
from .entity_in_version_structure import VersionedChildStructure
from .multilingual_string import MultilingualString
from .organisation_part_ref_structure import OrganisationPartRefStructure
from .organisation_ref_structure import OrganisationRefStructure
from .responsibility_role_ref import ResponsibilityRoleRef
from .responsibility_set_ref import ResponsibilitySetRef
from .stakeholder_role_type_enumeration import StakeholderRoleTypeEnumeration
from .type_of_responsibility_role_ref import TypeOfResponsibilityRoleRef

__NAMESPACE__ = "http://www.netex.org.uk/netex"


@dataclass(slots=True, kw_only=True)
class ResponsibilityRoleAssignmentVersionedChildStructure(VersionedChildStructure):
    class Meta:
        name = "ResponsibilityRoleAssignment_VersionedChildStructure"

    responsibility_set_ref: None | ResponsibilitySetRef = field(
        default=None,
        metadata={
            "name": "ResponsibilitySetRef",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    description: None | MultilingualString = field(
        default=None,
        metadata={
            "name": "Description",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    data_role_type: list[DataRoleTypeEnumeration] = field(
        default_factory=list,
        metadata={
            "name": "DataRoleType",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
            "tokens": True,
        }
    )
    stakeholder_role_type: list[StakeholderRoleTypeEnumeration] = field(
        default_factory=list,
        metadata={
            "name": "StakeholderRoleType",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
            "tokens": True,
        }
    )
    type_of_responsibility_role_ref_or_responsibility_role_ref: None | TypeOfResponsibilityRoleRef | ResponsibilityRoleRef = field(
        default=None,
        metadata={
            "type": "Elements",
            "choices": (
                {
                    "name": "TypeOfResponsibilityRoleRef",
                    "type": TypeOfResponsibilityRoleRef,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "ResponsibilityRoleRef",
                    "type": ResponsibilityRoleRef,
                    "namespace": "http://www.netex.org.uk/netex",
                },
            ),
        }
    )
    responsible_organisation_ref: None | OrganisationRefStructure = field(
        default=None,
        metadata={
            "name": "ResponsibleOrganisationRef",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    responsible_part_ref: None | OrganisationPartRefStructure = field(
        default=None,
        metadata={
            "name": "ResponsiblePartRef",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    responsible_area_ref: None | AdministrativeZoneRefStructure = field(
        default=None,
        metadata={
            "name": "ResponsibleAreaRef",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    associated_contract: None | ContractRefRelStructure = field(
        default=None,
        metadata={
            "name": "AssociatedContract",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )