"""This file was generated by xsdata, v26.1, on 2026-02-18 00:40:07

Generator: DataclassGenerator
See: https://xsdata.readthedocs.io/
"""

from __future__ import annotations

from dataclasses import dataclass, field
from enum import Enum

from ccsds_ndm.models.ndmxml2.ndmxml_2_0_0_common_2_0 import (
    AngleType,
    TimeSystemType,
    YesNoType,
)

__NAMESPACE__ = "urn:ccsds:schema:ndmxml"


class AngleTypeType(Enum):
    AZEL = "AZEL"
    AZEL_1 = "azel"
    RADEC = "RADEC"
    RADEC_1 = "radec"
    XEYN = "XEYN"
    XEYN_1 = "xeyn"
    XSYE = "XSYE"
    XSYE_1 = "xsye"


class DataQualityType(Enum):
    RAW = "raw"
    RAW_1 = "RAW"
    VALIDATED = "validated"
    VALIDATED_1 = "VALIDATED"
    DEGRADED = "degraded"
    DEGRADED_1 = "DEGRADED"


class IntegrationRefType(Enum):
    START = "START"
    START_1 = "start"
    MIDDLE = "MIDDLE"
    MIDDLE_1 = "middle"
    END = "END"
    END_1 = "end"


class ModeType(Enum):
    SEQUENTIAL = "SEQUENTIAL"
    SEQUENTIAL_1 = "sequential"
    SINGLE_DIFF = "SINGLE_DIFF"
    SINGLE_DIFF_1 = "single_diff"


class RangeUnitsType(Enum):
    KM = "km"
    KM_1 = "KM"
    RU = "ru"
    RU_1 = "RU"
    S = "s"
    S_1 = "S"


class RangemodeType(Enum):
    COHERENT = "coherent"
    COHERENT_1 = "COHERENT"
    CONSTANT = "constant"
    CONSTANT_1 = "CONSTANT"
    ONE_WAY = "one_way"
    ONE_WAY_1 = "ONE_WAY"


class RefFrameType(Enum):
    EME2000 = "EME2000"
    EME2000_1 = "eme2000"
    ICRF = "ICRF"
    ICRF_1 = "icrf"
    ITRF2000 = "ITRF2000"
    ITRF2000_1 = "itrf2000"
    ITRF_93 = "ITRF-93"
    ITRF_93_1 = "itrf-93"
    ITRF_97 = "ITRF-97"
    ITRF_97_1 = "itrf-97"
    TOD = "TOD"
    TOD_1 = "tod"


@dataclass(kw_only=True)
class TdmHeader:
    class Meta:
        name = "tdmHeader"

    comment: list[str] = field(
        default_factory=list,
        metadata={
            "name": "COMMENT",
            "type": "Element",
            "namespace": "",
        },
    )
    creation_date: str = field(
        metadata={
            "name": "CREATION_DATE",
            "type": "Element",
            "namespace": "",
            "required": True,
            "pattern": r"\-?\d{4}\d*-((\d{2}\-\d{2})|\d{3})T\d{2}:\d{2}:\d{2}(\.\d*)?(Z|[+|\-]\d{2}:\d{2})?|[+|\-]?\d*(\.\d*)?",
        }
    )
    originator: str = field(
        metadata={
            "name": "ORIGINATOR",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    message_id: None | str = field(
        default=None,
        metadata={
            "name": "MESSAGE_ID",
            "type": "Element",
            "namespace": "",
        },
    )


class TimetagRefType(Enum):
    TRANSMIT = "TRANSMIT"
    TRANSMIT_1 = "transmit"
    RECEIVE = "RECEIVE"
    RECEIVE_1 = "receive"


@dataclass(kw_only=True)
class TdmMetadata:
    class Meta:
        name = "tdmMetadata"

    comment: list[str] = field(
        default_factory=list,
        metadata={
            "name": "COMMENT",
            "type": "Element",
            "namespace": "",
        },
    )
    track_id: None | str = field(
        default=None,
        metadata={
            "name": "TRACK_ID",
            "type": "Element",
            "namespace": "",
        },
    )
    data_types: None | str = field(
        default=None,
        metadata={
            "name": "DATA_TYPES",
            "type": "Element",
            "namespace": "",
        },
    )
    time_system: TimeSystemType = field(
        metadata={
            "name": "TIME_SYSTEM",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    start_time: None | str = field(
        default=None,
        metadata={
            "name": "START_TIME",
            "type": "Element",
            "namespace": "",
            "pattern": r"\-?\d{4}\d*-((\d{2}\-\d{2})|\d{3})T\d{2}:\d{2}:\d{2}(\.\d*)?(Z|[+|\-]\d{2}:\d{2})?|[+|\-]?\d*(\.\d*)?",
        },
    )
    stop_time: None | str = field(
        default=None,
        metadata={
            "name": "STOP_TIME",
            "type": "Element",
            "namespace": "",
            "pattern": r"\-?\d{4}\d*-((\d{2}\-\d{2})|\d{3})T\d{2}:\d{2}:\d{2}(\.\d*)?(Z|[+|\-]\d{2}:\d{2})?|[+|\-]?\d*(\.\d*)?",
        },
    )
    participant_1: str = field(
        metadata={
            "name": "PARTICIPANT_1",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    participant_2: None | str = field(
        default=None,
        metadata={
            "name": "PARTICIPANT_2",
            "type": "Element",
            "namespace": "",
        },
    )
    participant_3: None | str = field(
        default=None,
        metadata={
            "name": "PARTICIPANT_3",
            "type": "Element",
            "namespace": "",
        },
    )
    participant_4: None | str = field(
        default=None,
        metadata={
            "name": "PARTICIPANT_4",
            "type": "Element",
            "namespace": "",
        },
    )
    participant_5: None | str = field(
        default=None,
        metadata={
            "name": "PARTICIPANT_5",
            "type": "Element",
            "namespace": "",
        },
    )
    mode: None | ModeType = field(
        default=None,
        metadata={
            "name": "MODE",
            "type": "Element",
            "namespace": "",
        },
    )
    path: None | str = field(
        default=None,
        metadata={
            "name": "PATH",
            "type": "Element",
            "namespace": "",
            "pattern": r"\d{1},\d{1}(,\d{1})*",
        },
    )
    path_1: None | str = field(
        default=None,
        metadata={
            "name": "PATH_1",
            "type": "Element",
            "namespace": "",
            "pattern": r"\d{1},\d{1}(,\d{1})*",
        },
    )
    path_2: None | str = field(
        default=None,
        metadata={
            "name": "PATH_2",
            "type": "Element",
            "namespace": "",
            "pattern": r"\d{1},\d{1}(,\d{1})*",
        },
    )
    ephemeris_name_1: None | str = field(
        default=None,
        metadata={
            "name": "EPHEMERIS_NAME_1",
            "type": "Element",
            "namespace": "",
        },
    )
    ephemeris_name_2: None | str = field(
        default=None,
        metadata={
            "name": "EPHEMERIS_NAME_2",
            "type": "Element",
            "namespace": "",
        },
    )
    ephemeris_name_3: None | str = field(
        default=None,
        metadata={
            "name": "EPHEMERIS_NAME_3",
            "type": "Element",
            "namespace": "",
        },
    )
    ephemeris_name_4: None | str = field(
        default=None,
        metadata={
            "name": "EPHEMERIS_NAME_4",
            "type": "Element",
            "namespace": "",
        },
    )
    ephemeris_name_5: None | str = field(
        default=None,
        metadata={
            "name": "EPHEMERIS_NAME_5",
            "type": "Element",
            "namespace": "",
        },
    )
    transmit_band: None | str = field(
        default=None,
        metadata={
            "name": "TRANSMIT_BAND",
            "type": "Element",
            "namespace": "",
        },
    )
    receive_band: None | str = field(
        default=None,
        metadata={
            "name": "RECEIVE_BAND",
            "type": "Element",
            "namespace": "",
        },
    )
    turnaround_numerator: None | int = field(
        default=None,
        metadata={
            "name": "TURNAROUND_NUMERATOR",
            "type": "Element",
            "namespace": "",
        },
    )
    turnaround_denominator: None | int = field(
        default=None,
        metadata={
            "name": "TURNAROUND_DENOMINATOR",
            "type": "Element",
            "namespace": "",
        },
    )
    timetag_ref: None | TimetagRefType = field(
        default=None,
        metadata={
            "name": "TIMETAG_REF",
            "type": "Element",
            "namespace": "",
        },
    )
    integration_interval: None | float = field(
        default=None,
        metadata={
            "name": "INTEGRATION_INTERVAL",
            "type": "Element",
            "namespace": "",
            "min_exclusive": 0.0,
        },
    )
    integration_ref: None | IntegrationRefType = field(
        default=None,
        metadata={
            "name": "INTEGRATION_REF",
            "type": "Element",
            "namespace": "",
        },
    )
    freq_offset: None | float = field(
        default=None,
        metadata={
            "name": "FREQ_OFFSET",
            "type": "Element",
            "namespace": "",
        },
    )
    range_mode: None | RangemodeType = field(
        default=None,
        metadata={
            "name": "RANGE_MODE",
            "type": "Element",
            "namespace": "",
        },
    )
    range_modulus: None | float = field(
        default=None,
        metadata={
            "name": "RANGE_MODULUS",
            "type": "Element",
            "namespace": "",
            "min_inclusive": 0.0,
        },
    )
    range_units: None | RangeUnitsType = field(
        default=None,
        metadata={
            "name": "RANGE_UNITS",
            "type": "Element",
            "namespace": "",
        },
    )
    angle_type: None | AngleTypeType = field(
        default=None,
        metadata={
            "name": "ANGLE_TYPE",
            "type": "Element",
            "namespace": "",
        },
    )
    reference_frame: None | RefFrameType = field(
        default=None,
        metadata={
            "name": "REFERENCE_FRAME",
            "type": "Element",
            "namespace": "",
        },
    )
    interpolation: None | str = field(
        default=None,
        metadata={
            "name": "INTERPOLATION",
            "type": "Element",
            "namespace": "",
        },
    )
    interpolation_degree: None | int = field(
        default=None,
        metadata={
            "name": "INTERPOLATION_DEGREE",
            "type": "Element",
            "namespace": "",
        },
    )
    doppler_count_bias: None | float = field(
        default=None,
        metadata={
            "name": "DOPPLER_COUNT_BIAS",
            "type": "Element",
            "namespace": "",
            "min_exclusive": 0.0,
        },
    )
    doppler_count_scale: None | int = field(
        default=None,
        metadata={
            "name": "DOPPLER_COUNT_SCALE",
            "type": "Element",
            "namespace": "",
        },
    )
    doppler_count_rollover: None | YesNoType = field(
        default=None,
        metadata={
            "name": "DOPPLER_COUNT_ROLLOVER",
            "type": "Element",
            "namespace": "",
        },
    )
    transmit_delay_1: None | float = field(
        default=None,
        metadata={
            "name": "TRANSMIT_DELAY_1",
            "type": "Element",
            "namespace": "",
            "min_inclusive": 0.0,
        },
    )
    transmit_delay_2: None | float = field(
        default=None,
        metadata={
            "name": "TRANSMIT_DELAY_2",
            "type": "Element",
            "namespace": "",
            "min_inclusive": 0.0,
        },
    )
    transmit_delay_3: None | float = field(
        default=None,
        metadata={
            "name": "TRANSMIT_DELAY_3",
            "type": "Element",
            "namespace": "",
            "min_inclusive": 0.0,
        },
    )
    transmit_delay_4: None | float = field(
        default=None,
        metadata={
            "name": "TRANSMIT_DELAY_4",
            "type": "Element",
            "namespace": "",
            "min_inclusive": 0.0,
        },
    )
    transmit_delay_5: None | float = field(
        default=None,
        metadata={
            "name": "TRANSMIT_DELAY_5",
            "type": "Element",
            "namespace": "",
            "min_inclusive": 0.0,
        },
    )
    receive_delay_1: None | float = field(
        default=None,
        metadata={
            "name": "RECEIVE_DELAY_1",
            "type": "Element",
            "namespace": "",
            "min_inclusive": 0.0,
        },
    )
    receive_delay_2: None | float = field(
        default=None,
        metadata={
            "name": "RECEIVE_DELAY_2",
            "type": "Element",
            "namespace": "",
            "min_inclusive": 0.0,
        },
    )
    receive_delay_3: None | float = field(
        default=None,
        metadata={
            "name": "RECEIVE_DELAY_3",
            "type": "Element",
            "namespace": "",
            "min_inclusive": 0.0,
        },
    )
    receive_delay_4: None | float = field(
        default=None,
        metadata={
            "name": "RECEIVE_DELAY_4",
            "type": "Element",
            "namespace": "",
            "min_inclusive": 0.0,
        },
    )
    receive_delay_5: None | float = field(
        default=None,
        metadata={
            "name": "RECEIVE_DELAY_5",
            "type": "Element",
            "namespace": "",
            "min_inclusive": 0.0,
        },
    )
    data_quality: None | DataQualityType = field(
        default=None,
        metadata={
            "name": "DATA_QUALITY",
            "type": "Element",
            "namespace": "",
        },
    )
    correction_angle_1: None | float = field(
        default=None,
        metadata={
            "name": "CORRECTION_ANGLE_1",
            "type": "Element",
            "namespace": "",
        },
    )
    correction_angle_2: None | float = field(
        default=None,
        metadata={
            "name": "CORRECTION_ANGLE_2",
            "type": "Element",
            "namespace": "",
        },
    )
    correction_doppler: None | float = field(
        default=None,
        metadata={
            "name": "CORRECTION_DOPPLER",
            "type": "Element",
            "namespace": "",
        },
    )
    correction_mag: None | float = field(
        default=None,
        metadata={
            "name": "CORRECTION_MAG",
            "type": "Element",
            "namespace": "",
        },
    )
    correction_range: None | float = field(
        default=None,
        metadata={
            "name": "CORRECTION_RANGE",
            "type": "Element",
            "namespace": "",
        },
    )
    correction_rcs: None | float = field(
        default=None,
        metadata={
            "name": "CORRECTION_RCS",
            "type": "Element",
            "namespace": "",
        },
    )
    correction_receive: None | float = field(
        default=None,
        metadata={
            "name": "CORRECTION_RECEIVE",
            "type": "Element",
            "namespace": "",
        },
    )
    correction_transmit: None | float = field(
        default=None,
        metadata={
            "name": "CORRECTION_TRANSMIT",
            "type": "Element",
            "namespace": "",
        },
    )
    correction_aberration_yearly: None | float = field(
        default=None,
        metadata={
            "name": "CORRECTION_ABERRATION_YEARLY",
            "type": "Element",
            "namespace": "",
        },
    )
    correction_aberration_diurnal: None | float = field(
        default=None,
        metadata={
            "name": "CORRECTION_ABERRATION_DIURNAL",
            "type": "Element",
            "namespace": "",
        },
    )
    corrections_applied: None | YesNoType = field(
        default=None,
        metadata={
            "name": "CORRECTIONS_APPLIED",
            "type": "Element",
            "namespace": "",
        },
    )


@dataclass(kw_only=True)
class TrackingDataObservationType:
    class Meta:
        name = "trackingDataObservationType"

    epoch: str = field(
        metadata={
            "name": "EPOCH",
            "type": "Element",
            "namespace": "",
            "required": True,
            "pattern": r"\-?\d{4}\d*-((\d{2}\-\d{2})|\d{3})T\d{2}:\d{2}:\d{2}(\.\d*)?(Z|[+|\-]\d{2}:\d{2})?|[+|\-]?\d*(\.\d*)?",
        }
    )
    angle_1: None | AngleType = field(
        default=None,
        metadata={
            "name": "ANGLE_1",
            "type": "Element",
            "namespace": "",
        },
    )
    angle_2: None | AngleType = field(
        default=None,
        metadata={
            "name": "ANGLE_2",
            "type": "Element",
            "namespace": "",
        },
    )
    carrier_power: None | float = field(
        default=None,
        metadata={
            "name": "CARRIER_POWER",
            "type": "Element",
            "namespace": "",
        },
    )
    clock_bias: None | float = field(
        default=None,
        metadata={
            "name": "CLOCK_BIAS",
            "type": "Element",
            "namespace": "",
        },
    )
    clock_drift: None | float = field(
        default=None,
        metadata={
            "name": "CLOCK_DRIFT",
            "type": "Element",
            "namespace": "",
        },
    )
    doppler_count: None | float = field(
        default=None,
        metadata={
            "name": "DOPPLER_COUNT",
            "type": "Element",
            "namespace": "",
        },
    )
    doppler_instantaneous: None | float = field(
        default=None,
        metadata={
            "name": "DOPPLER_INSTANTANEOUS",
            "type": "Element",
            "namespace": "",
        },
    )
    doppler_integrated: None | float = field(
        default=None,
        metadata={
            "name": "DOPPLER_INTEGRATED",
            "type": "Element",
            "namespace": "",
        },
    )
    dor: None | float = field(
        default=None,
        metadata={
            "name": "DOR",
            "type": "Element",
            "namespace": "",
        },
    )
    mag: None | float = field(
        default=None,
        metadata={
            "name": "MAG",
            "type": "Element",
            "namespace": "",
        },
    )
    pc_n0: None | float = field(
        default=None,
        metadata={
            "name": "PC_N0",
            "type": "Element",
            "namespace": "",
        },
    )
    pr_n0: None | float = field(
        default=None,
        metadata={
            "name": "PR_N0",
            "type": "Element",
            "namespace": "",
        },
    )
    pressure: None | float = field(
        default=None,
        metadata={
            "name": "PRESSURE",
            "type": "Element",
            "namespace": "",
        },
    )
    range: None | float = field(
        default=None,
        metadata={
            "name": "RANGE",
            "type": "Element",
            "namespace": "",
        },
    )
    rcs: None | float = field(
        default=None,
        metadata={
            "name": "RCS",
            "type": "Element",
            "namespace": "",
        },
    )
    receive_freq: None | float = field(
        default=None,
        metadata={
            "name": "RECEIVE_FREQ",
            "type": "Element",
            "namespace": "",
        },
    )
    receive_freq_1: None | float = field(
        default=None,
        metadata={
            "name": "RECEIVE_FREQ_1",
            "type": "Element",
            "namespace": "",
        },
    )
    receive_freq_2: None | float = field(
        default=None,
        metadata={
            "name": "RECEIVE_FREQ_2",
            "type": "Element",
            "namespace": "",
        },
    )
    receive_freq_3: None | float = field(
        default=None,
        metadata={
            "name": "RECEIVE_FREQ_3",
            "type": "Element",
            "namespace": "",
        },
    )
    receive_freq_4: None | float = field(
        default=None,
        metadata={
            "name": "RECEIVE_FREQ_4",
            "type": "Element",
            "namespace": "",
        },
    )
    receive_freq_5: None | float = field(
        default=None,
        metadata={
            "name": "RECEIVE_FREQ_5",
            "type": "Element",
            "namespace": "",
        },
    )
    receive_phase_ct_1: None | float = field(
        default=None,
        metadata={
            "name": "RECEIVE_PHASE_CT_1",
            "type": "Element",
            "namespace": "",
        },
    )
    receive_phase_ct_2: None | float = field(
        default=None,
        metadata={
            "name": "RECEIVE_PHASE_CT_2",
            "type": "Element",
            "namespace": "",
        },
    )
    receive_phase_ct_3: None | float = field(
        default=None,
        metadata={
            "name": "RECEIVE_PHASE_CT_3",
            "type": "Element",
            "namespace": "",
        },
    )
    receive_phase_ct_4: None | float = field(
        default=None,
        metadata={
            "name": "RECEIVE_PHASE_CT_4",
            "type": "Element",
            "namespace": "",
        },
    )
    receive_phase_ct_5: None | float = field(
        default=None,
        metadata={
            "name": "RECEIVE_PHASE_CT_5",
            "type": "Element",
            "namespace": "",
        },
    )
    rhumidity: None | float = field(
        default=None,
        metadata={
            "name": "RHUMIDITY",
            "type": "Element",
            "namespace": "",
            "min_inclusive": 0.0,
            "max_inclusive": 100.0,
        },
    )
    stec: None | float = field(
        default=None,
        metadata={
            "name": "STEC",
            "type": "Element",
            "namespace": "",
        },
    )
    temperature: None | float = field(
        default=None,
        metadata={
            "name": "TEMPERATURE",
            "type": "Element",
            "namespace": "",
            "min_inclusive": 0.0,
        },
    )
    transmit_freq_1: None | float = field(
        default=None,
        metadata={
            "name": "TRANSMIT_FREQ_1",
            "type": "Element",
            "namespace": "",
            "min_exclusive": 0.0,
        },
    )
    transmit_freq_2: None | float = field(
        default=None,
        metadata={
            "name": "TRANSMIT_FREQ_2",
            "type": "Element",
            "namespace": "",
            "min_exclusive": 0.0,
        },
    )
    transmit_freq_3: None | float = field(
        default=None,
        metadata={
            "name": "TRANSMIT_FREQ_3",
            "type": "Element",
            "namespace": "",
            "min_exclusive": 0.0,
        },
    )
    transmit_freq_4: None | float = field(
        default=None,
        metadata={
            "name": "TRANSMIT_FREQ_4",
            "type": "Element",
            "namespace": "",
            "min_exclusive": 0.0,
        },
    )
    transmit_freq_5: None | float = field(
        default=None,
        metadata={
            "name": "TRANSMIT_FREQ_5",
            "type": "Element",
            "namespace": "",
            "min_exclusive": 0.0,
        },
    )
    transmit_freq_rate_1: None | float = field(
        default=None,
        metadata={
            "name": "TRANSMIT_FREQ_RATE_1",
            "type": "Element",
            "namespace": "",
        },
    )
    transmit_freq_rate_2: None | float = field(
        default=None,
        metadata={
            "name": "TRANSMIT_FREQ_RATE_2",
            "type": "Element",
            "namespace": "",
        },
    )
    transmit_freq_rate_3: None | float = field(
        default=None,
        metadata={
            "name": "TRANSMIT_FREQ_RATE_3",
            "type": "Element",
            "namespace": "",
        },
    )
    transmit_freq_rate_4: None | float = field(
        default=None,
        metadata={
            "name": "TRANSMIT_FREQ_RATE_4",
            "type": "Element",
            "namespace": "",
        },
    )
    transmit_freq_rate_5: None | float = field(
        default=None,
        metadata={
            "name": "TRANSMIT_FREQ_RATE_5",
            "type": "Element",
            "namespace": "",
        },
    )
    transmit_phase_ct_1: None | float = field(
        default=None,
        metadata={
            "name": "TRANSMIT_PHASE_CT_1",
            "type": "Element",
            "namespace": "",
        },
    )
    transmit_phase_ct_2: None | float = field(
        default=None,
        metadata={
            "name": "TRANSMIT_PHASE_CT_2",
            "type": "Element",
            "namespace": "",
        },
    )
    transmit_phase_ct_3: None | float = field(
        default=None,
        metadata={
            "name": "TRANSMIT_PHASE_CT_3",
            "type": "Element",
            "namespace": "",
        },
    )
    transmit_phase_ct_4: None | float = field(
        default=None,
        metadata={
            "name": "TRANSMIT_PHASE_CT_4",
            "type": "Element",
            "namespace": "",
        },
    )
    transmit_phase_ct_5: None | float = field(
        default=None,
        metadata={
            "name": "TRANSMIT_PHASE_CT_5",
            "type": "Element",
            "namespace": "",
        },
    )
    tropo_dry: None | float = field(
        default=None,
        metadata={
            "name": "TROPO_DRY",
            "type": "Element",
            "namespace": "",
            "min_inclusive": 0.0,
        },
    )
    tropo_wet: None | float = field(
        default=None,
        metadata={
            "name": "TROPO_WET",
            "type": "Element",
            "namespace": "",
            "min_inclusive": 0.0,
        },
    )
    vlbi_delay: None | float = field(
        default=None,
        metadata={
            "name": "VLBI_DELAY",
            "type": "Element",
            "namespace": "",
        },
    )


@dataclass(kw_only=True)
class TdmData:
    class Meta:
        name = "tdmData"

    comment: list[str] = field(
        default_factory=list,
        metadata={
            "name": "COMMENT",
            "type": "Element",
            "namespace": "",
        },
    )
    observation: list[TrackingDataObservationType] = field(
        default_factory=list,
        metadata={
            "type": "Element",
            "namespace": "",
            "min_occurs": 1,
        },
    )


@dataclass(kw_only=True)
class TdmSegment:
    class Meta:
        name = "tdmSegment"

    metadata: TdmMetadata = field(
        metadata={
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    data: TdmData = field(
        metadata={
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )


@dataclass(kw_only=True)
class TdmBody:
    class Meta:
        name = "tdmBody"

    segment: list[TdmSegment] = field(
        default_factory=list,
        metadata={
            "type": "Element",
            "namespace": "",
            "min_occurs": 1,
        },
    )


@dataclass(kw_only=True)
class TdmType:
    class Meta:
        name = "tdmType"

    header: TdmHeader = field(
        metadata={
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    body: TdmBody = field(
        metadata={
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    id: str = field(
        init=False,
        default="CCSDS_TDM_VERS",
        metadata={
            "type": "Attribute",
            "required": True,
        },
    )
    version: str = field(
        init=False,
        default="2.0",
        metadata={
            "type": "Attribute",
            "required": True,
        },
    )
