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

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

from __future__ import annotations

from dataclasses import dataclass, field
from enum import Enum

from ccsds_ndm.models.ndmxml1.ndmxml_1_0_navwg_common import (
    AreaType,
    LengthType,
    MassType,
    Ms2Type,
    ObjectDescriptionType,
    OdParametersType,
    PositionType,
    PositionUnits,
    VelocityType,
    VelocityUnits,
    YesNoType,
)

__NAMESPACE__ = "urn:ccsds:recommendation:navigation:schema:ndmxml"


@dataclass(kw_only=True)
class CdmHeader:
    class Meta:
        name = "cdmHeader"

    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_for: None | str = field(
        default=None,
        metadata={
            "name": "MESSAGE_FOR",
            "type": "Element",
            "namespace": "",
        },
    )
    message_id: str = field(
        metadata={
            "name": "MESSAGE_ID",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )


class CovarianceMethodType(Enum):
    CALCULATED = "CALCULATED"
    CALCULATED_1 = "calculated"
    DEFAULT = "DEFAULT"
    DEFAULT_1 = "default"


class DvUnits(Enum):
    M_S = "m/s"


class M2Units(Enum):
    M_2 = "m**2"


class M2KgUnits(Enum):
    M_2_KG = "m**2/kg"


class M2S2Units(Enum):
    M_2_S_2 = "m**2/s**2"


class M2S3Units(Enum):
    M_2_S_3 = "m**2/s**3"


class M2S4Units(Enum):
    M_2_S_4 = "m**2/s**4"


class M2SUnits(Enum):
    M_2_S = "m**2/s"


class M3KgUnits(Enum):
    M_3_KG = "m**3/kg"


class M3Kgs2Units(Enum):
    M_3_KG_S_2 = "m**3/(kg*s**2)"


class M3KgsUnits(Enum):
    M_3_KG_S = "m**3/(kg*s)"


class M4Kg2Units(Enum):
    M_4_KG_2 = "m**4/kg**2"


class ManeuverableType(Enum):
    YES = "YES"
    YES_1 = "yes"
    NO = "NO"
    NO_1 = "no"
    N_A = "N/A"
    N_A_1 = "n/a"


class ObjectType(Enum):
    OBJECT1 = "OBJECT1"
    OBJECT1_1 = "object1"
    OBJECT2 = "OBJECT2"
    OBJECT2_1 = "object2"


class ReferenceFrameType(Enum):
    EME2000 = "EME2000"
    EME2000_1 = "eme2000"
    GCRF = "GCRF"
    GCRF_1 = "gcrf"
    ITRF = "ITRF"
    ITRF_1 = "itrf"


class ScreenVolumeFrameType(Enum):
    RTN = "RTN"
    RTN_1 = "rtn"
    TVN = "TVN"
    TVN_1 = "tvn"


class ScreenVolumeShapeType(Enum):
    ELLIPSOID = "ELLIPSOID"
    ELLIPSOID_1 = "ellipsoid"
    BOX = "BOX"
    BOX_1 = "box"


class WkgUnits(Enum):
    W_KG = "W/kg"


@dataclass(kw_only=True)
class CdmMetadata:
    class Meta:
        name = "cdmMetadata"

    comment: list[str] = field(
        default_factory=list,
        metadata={
            "name": "COMMENT",
            "type": "Element",
            "namespace": "",
        },
    )
    object_value: ObjectType = field(
        metadata={
            "name": "OBJECT",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    object_designator: str = field(
        metadata={
            "name": "OBJECT_DESIGNATOR",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    catalog_name: str = field(
        metadata={
            "name": "CATALOG_NAME",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    object_name: str = field(
        metadata={
            "name": "OBJECT_NAME",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    international_designator: str = field(
        metadata={
            "name": "INTERNATIONAL_DESIGNATOR",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    object_type: None | ObjectDescriptionType = field(
        default=None,
        metadata={
            "name": "OBJECT_TYPE",
            "type": "Element",
            "namespace": "",
        },
    )
    operator_contact_position: None | str = field(
        default=None,
        metadata={
            "name": "OPERATOR_CONTACT_POSITION",
            "type": "Element",
            "namespace": "",
        },
    )
    operator_organization: None | str = field(
        default=None,
        metadata={
            "name": "OPERATOR_ORGANIZATION",
            "type": "Element",
            "namespace": "",
        },
    )
    operator_phone: None | str = field(
        default=None,
        metadata={
            "name": "OPERATOR_PHONE",
            "type": "Element",
            "namespace": "",
        },
    )
    operator_email: None | str = field(
        default=None,
        metadata={
            "name": "OPERATOR_EMAIL",
            "type": "Element",
            "namespace": "",
        },
    )
    ephemeris_name: str = field(
        metadata={
            "name": "EPHEMERIS_NAME",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    covariance_method: CovarianceMethodType = field(
        metadata={
            "name": "COVARIANCE_METHOD",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    maneuverable: ManeuverableType = field(
        metadata={
            "name": "MANEUVERABLE",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    orbit_center: None | str = field(
        default=None,
        metadata={
            "name": "ORBIT_CENTER",
            "type": "Element",
            "namespace": "",
        },
    )
    ref_frame: ReferenceFrameType = field(
        metadata={
            "name": "REF_FRAME",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    gravity_model: None | str = field(
        default=None,
        metadata={
            "name": "GRAVITY_MODEL",
            "type": "Element",
            "namespace": "",
        },
    )
    atmospheric_model: None | str = field(
        default=None,
        metadata={
            "name": "ATMOSPHERIC_MODEL",
            "type": "Element",
            "namespace": "",
        },
    )
    n_body_perturbations: None | str = field(
        default=None,
        metadata={
            "name": "N_BODY_PERTURBATIONS",
            "type": "Element",
            "namespace": "",
        },
    )
    solar_rad_pressure: None | YesNoType = field(
        default=None,
        metadata={
            "name": "SOLAR_RAD_PRESSURE",
            "type": "Element",
            "namespace": "",
        },
    )
    earth_tides: None | YesNoType = field(
        default=None,
        metadata={
            "name": "EARTH_TIDES",
            "type": "Element",
            "namespace": "",
        },
    )
    intrack_thrust: None | YesNoType = field(
        default=None,
        metadata={
            "name": "INTRACK_THRUST",
            "type": "Element",
            "namespace": "",
        },
    )


@dataclass(kw_only=True)
class CdmPositionType(PositionType):
    class Meta:
        name = "cdmPositionType"

    units: PositionUnits = field(
        metadata={
            "type": "Attribute",
            "required": True,
        }
    )


@dataclass(kw_only=True)
class CdmVelocityType(VelocityType):
    class Meta:
        name = "cdmVelocityType"

    units: VelocityUnits = field(
        metadata={
            "type": "Attribute",
            "required": True,
        }
    )


@dataclass(kw_only=True)
class DvType:
    class Meta:
        name = "dvType"

    value: float = field(
        metadata={
            "required": True,
        }
    )
    units: DvUnits = field(
        metadata={
            "type": "Attribute",
            "required": True,
        }
    )


@dataclass(kw_only=True)
class M2Type:
    class Meta:
        name = "m2Type"

    value: float = field(
        metadata={
            "required": True,
        }
    )
    units: M2Units = field(
        metadata={
            "type": "Attribute",
            "required": True,
        }
    )


@dataclass(kw_only=True)
class M2KgType:
    class Meta:
        name = "m2kgType"

    value: float = field(
        metadata={
            "required": True,
            "min_inclusive": 0.0,
        }
    )
    units: M2KgUnits = field(
        metadata={
            "type": "Attribute",
            "required": True,
        }
    )


@dataclass(kw_only=True)
class M2S2Type:
    class Meta:
        name = "m2s2Type"

    value: float = field(
        metadata={
            "required": True,
        }
    )
    units: M2S2Units = field(
        metadata={
            "type": "Attribute",
            "required": True,
        }
    )


@dataclass(kw_only=True)
class M2S3Type:
    class Meta:
        name = "m2s3Type"

    value: float = field(
        metadata={
            "required": True,
        }
    )
    units: M2S3Units = field(
        metadata={
            "type": "Attribute",
            "required": True,
        }
    )


@dataclass(kw_only=True)
class M2S4Type:
    class Meta:
        name = "m2s4Type"

    value: float = field(
        metadata={
            "required": True,
        }
    )
    units: M2S4Units = field(
        metadata={
            "type": "Attribute",
            "required": True,
        }
    )


@dataclass(kw_only=True)
class M2SType:
    class Meta:
        name = "m2sType"

    value: float = field(
        metadata={
            "required": True,
        }
    )
    units: M2SUnits = field(
        metadata={
            "type": "Attribute",
            "required": True,
        }
    )


@dataclass(kw_only=True)
class M3KgType:
    class Meta:
        name = "m3kgType"

    value: float = field(
        metadata={
            "required": True,
        }
    )
    units: M3KgUnits = field(
        metadata={
            "type": "Attribute",
            "required": True,
        }
    )


@dataclass(kw_only=True)
class M3Kgs2Type:
    class Meta:
        name = "m3kgs2Type"

    value: float = field(
        metadata={
            "required": True,
        }
    )
    units: M3Kgs2Units = field(
        metadata={
            "type": "Attribute",
            "required": True,
        }
    )


@dataclass(kw_only=True)
class M3KgsType:
    class Meta:
        name = "m3kgsType"

    value: float = field(
        metadata={
            "required": True,
        }
    )
    units: M3KgsUnits = field(
        metadata={
            "type": "Attribute",
            "required": True,
        }
    )


@dataclass(kw_only=True)
class M4Kg2Type:
    class Meta:
        name = "m4kg2Type"

    value: float = field(
        metadata={
            "required": True,
        }
    )
    units: M4Kg2Units = field(
        metadata={
            "type": "Attribute",
            "required": True,
        }
    )


@dataclass(kw_only=True)
class WkgType:
    class Meta:
        name = "wkgType"

    value: float = field(
        metadata={
            "required": True,
            "min_inclusive": 0.0,
        }
    )
    units: WkgUnits = field(
        metadata={
            "type": "Attribute",
            "required": True,
        }
    )


@dataclass(kw_only=True)
class AdditionalParametersType:
    class Meta:
        name = "additionalParametersType"

    comment: list[str] = field(
        default_factory=list,
        metadata={
            "name": "COMMENT",
            "type": "Element",
            "namespace": "",
        },
    )
    area_pc: None | AreaType = field(
        default=None,
        metadata={
            "name": "AREA_PC",
            "type": "Element",
            "namespace": "",
        },
    )
    area_drg: None | AreaType = field(
        default=None,
        metadata={
            "name": "AREA_DRG",
            "type": "Element",
            "namespace": "",
        },
    )
    area_srp: None | AreaType = field(
        default=None,
        metadata={
            "name": "AREA_SRP",
            "type": "Element",
            "namespace": "",
        },
    )
    mass: None | MassType = field(
        default=None,
        metadata={
            "name": "MASS",
            "type": "Element",
            "namespace": "",
        },
    )
    cd_area_over_mass: None | M2KgType = field(
        default=None,
        metadata={
            "name": "CD_AREA_OVER_MASS",
            "type": "Element",
            "namespace": "",
        },
    )
    cr_area_over_mass: None | M2KgType = field(
        default=None,
        metadata={
            "name": "CR_AREA_OVER_MASS",
            "type": "Element",
            "namespace": "",
        },
    )
    thrust_acceleration: None | Ms2Type = field(
        default=None,
        metadata={
            "name": "THRUST_ACCELERATION",
            "type": "Element",
            "namespace": "",
        },
    )
    sedr: None | WkgType = field(
        default=None,
        metadata={
            "name": "SEDR",
            "type": "Element",
            "namespace": "",
        },
    )


@dataclass(kw_only=True)
class CdmCovarianceType:
    class Meta:
        name = "cdmCovarianceType"

    comment: list[str] = field(
        default_factory=list,
        metadata={
            "name": "COMMENT",
            "type": "Element",
            "namespace": "",
        },
    )
    cr_r: M2Type = field(
        metadata={
            "name": "CR_R",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    ct_r: M2Type = field(
        metadata={
            "name": "CT_R",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    ct_t: M2Type = field(
        metadata={
            "name": "CT_T",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    cn_r: M2Type = field(
        metadata={
            "name": "CN_R",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    cn_t: M2Type = field(
        metadata={
            "name": "CN_T",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    cn_n: M2Type = field(
        metadata={
            "name": "CN_N",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    crdot_r: M2SType = field(
        metadata={
            "name": "CRDOT_R",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    crdot_t: M2SType = field(
        metadata={
            "name": "CRDOT_T",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    crdot_n: M2SType = field(
        metadata={
            "name": "CRDOT_N",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    crdot_rdot: M2S2Type = field(
        metadata={
            "name": "CRDOT_RDOT",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    ctdot_r: M2SType = field(
        metadata={
            "name": "CTDOT_R",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    ctdot_t: M2SType = field(
        metadata={
            "name": "CTDOT_T",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    ctdot_n: M2SType = field(
        metadata={
            "name": "CTDOT_N",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    ctdot_rdot: M2S2Type = field(
        metadata={
            "name": "CTDOT_RDOT",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    ctdot_tdot: M2S2Type = field(
        metadata={
            "name": "CTDOT_TDOT",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    cndot_r: M2SType = field(
        metadata={
            "name": "CNDOT_R",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    cndot_t: M2SType = field(
        metadata={
            "name": "CNDOT_T",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    cndot_n: M2SType = field(
        metadata={
            "name": "CNDOT_N",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    cndot_rdot: M2S2Type = field(
        metadata={
            "name": "CNDOT_RDOT",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    cndot_tdot: M2S2Type = field(
        metadata={
            "name": "CNDOT_TDOT",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    cndot_ndot: M2S2Type = field(
        metadata={
            "name": "CNDOT_NDOT",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    cdrg_r: None | M3KgType = field(
        default=None,
        metadata={
            "name": "CDRG_R",
            "type": "Element",
            "namespace": "",
        },
    )
    cdrg_t: None | M3KgType = field(
        default=None,
        metadata={
            "name": "CDRG_T",
            "type": "Element",
            "namespace": "",
        },
    )
    cdrg_n: None | M3KgType = field(
        default=None,
        metadata={
            "name": "CDRG_N",
            "type": "Element",
            "namespace": "",
        },
    )
    cdrg_rdot: None | M3KgsType = field(
        default=None,
        metadata={
            "name": "CDRG_RDOT",
            "type": "Element",
            "namespace": "",
        },
    )
    cdrg_tdot: None | M3KgsType = field(
        default=None,
        metadata={
            "name": "CDRG_TDOT",
            "type": "Element",
            "namespace": "",
        },
    )
    cdrg_ndot: None | M3KgsType = field(
        default=None,
        metadata={
            "name": "CDRG_NDOT",
            "type": "Element",
            "namespace": "",
        },
    )
    cdrg_drg: None | M4Kg2Type = field(
        default=None,
        metadata={
            "name": "CDRG_DRG",
            "type": "Element",
            "namespace": "",
        },
    )
    csrp_r: None | M3KgType = field(
        default=None,
        metadata={
            "name": "CSRP_R",
            "type": "Element",
            "namespace": "",
        },
    )
    csrp_t: None | M3KgType = field(
        default=None,
        metadata={
            "name": "CSRP_T",
            "type": "Element",
            "namespace": "",
        },
    )
    csrp_n: None | M3KgType = field(
        default=None,
        metadata={
            "name": "CSRP_N",
            "type": "Element",
            "namespace": "",
        },
    )
    csrp_rdot: None | M3KgsType = field(
        default=None,
        metadata={
            "name": "CSRP_RDOT",
            "type": "Element",
            "namespace": "",
        },
    )
    csrp_tdot: None | M3KgsType = field(
        default=None,
        metadata={
            "name": "CSRP_TDOT",
            "type": "Element",
            "namespace": "",
        },
    )
    csrp_ndot: None | M3KgsType = field(
        default=None,
        metadata={
            "name": "CSRP_NDOT",
            "type": "Element",
            "namespace": "",
        },
    )
    csrp_drg: None | M4Kg2Type = field(
        default=None,
        metadata={
            "name": "CSRP_DRG",
            "type": "Element",
            "namespace": "",
        },
    )
    csrp_srp: None | M4Kg2Type = field(
        default=None,
        metadata={
            "name": "CSRP_SRP",
            "type": "Element",
            "namespace": "",
        },
    )
    cthr_r: None | M2S2Type = field(
        default=None,
        metadata={
            "name": "CTHR_R",
            "type": "Element",
            "namespace": "",
        },
    )
    cthr_t: None | M2S2Type = field(
        default=None,
        metadata={
            "name": "CTHR_T",
            "type": "Element",
            "namespace": "",
        },
    )
    cthr_n: None | M2S2Type = field(
        default=None,
        metadata={
            "name": "CTHR_N",
            "type": "Element",
            "namespace": "",
        },
    )
    cthr_rdot: None | M2S3Type = field(
        default=None,
        metadata={
            "name": "CTHR_RDOT",
            "type": "Element",
            "namespace": "",
        },
    )
    cthr_tdot: None | M2S3Type = field(
        default=None,
        metadata={
            "name": "CTHR_TDOT",
            "type": "Element",
            "namespace": "",
        },
    )
    cthr_ndot: None | M2S3Type = field(
        default=None,
        metadata={
            "name": "CTHR_NDOT",
            "type": "Element",
            "namespace": "",
        },
    )
    cthr_drg: None | M3Kgs2Type = field(
        default=None,
        metadata={
            "name": "CTHR_DRG",
            "type": "Element",
            "namespace": "",
        },
    )
    cthr_srp: None | M3Kgs2Type = field(
        default=None,
        metadata={
            "name": "CTHR_SRP",
            "type": "Element",
            "namespace": "",
        },
    )
    cthr_thr: None | M2S4Type = field(
        default=None,
        metadata={
            "name": "CTHR_THR",
            "type": "Element",
            "namespace": "",
        },
    )


@dataclass(kw_only=True)
class CdmStateVectorType:
    class Meta:
        name = "cdmStateVectorType"

    comment: list[str] = field(
        default_factory=list,
        metadata={
            "name": "COMMENT",
            "type": "Element",
            "namespace": "",
        },
    )
    x: CdmPositionType = field(
        metadata={
            "name": "X",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    y: CdmPositionType = field(
        metadata={
            "name": "Y",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    z: CdmPositionType = field(
        metadata={
            "name": "Z",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    x_dot: CdmVelocityType = field(
        metadata={
            "name": "X_DOT",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    y_dot: CdmVelocityType = field(
        metadata={
            "name": "Y_DOT",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    z_dot: CdmVelocityType = field(
        metadata={
            "name": "Z_DOT",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )


@dataclass(kw_only=True)
class RelativeStateVectorType:
    class Meta:
        name = "relativeStateVectorType"

    relative_position_r: LengthType = field(
        metadata={
            "name": "RELATIVE_POSITION_R",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    relative_position_t: LengthType = field(
        metadata={
            "name": "RELATIVE_POSITION_T",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    relative_position_n: LengthType = field(
        metadata={
            "name": "RELATIVE_POSITION_N",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    relative_velocity_r: DvType = field(
        metadata={
            "name": "RELATIVE_VELOCITY_R",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    relative_velocity_t: DvType = field(
        metadata={
            "name": "RELATIVE_VELOCITY_T",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    relative_velocity_n: DvType = field(
        metadata={
            "name": "RELATIVE_VELOCITY_N",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )


@dataclass(kw_only=True)
class CdmData:
    class Meta:
        name = "cdmData"

    comment: list[str] = field(
        default_factory=list,
        metadata={
            "name": "COMMENT",
            "type": "Element",
            "namespace": "",
        },
    )
    od_parameters: None | OdParametersType = field(
        default=None,
        metadata={
            "name": "odParameters",
            "type": "Element",
            "namespace": "",
        },
    )
    additional_parameters: None | AdditionalParametersType = field(
        default=None,
        metadata={
            "name": "additionalParameters",
            "type": "Element",
            "namespace": "",
        },
    )
    state_vector: CdmStateVectorType = field(
        metadata={
            "name": "stateVector",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    covariance_matrix: CdmCovarianceType = field(
        metadata={
            "name": "covarianceMatrix",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )


@dataclass(kw_only=True)
class RelativeMetadataData:
    class Meta:
        name = "relativeMetadataData"

    comment: list[str] = field(
        default_factory=list,
        metadata={
            "name": "COMMENT",
            "type": "Element",
            "namespace": "",
        },
    )
    tca: str = field(
        metadata={
            "name": "TCA",
            "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*)?",
        }
    )
    miss_distance: LengthType = field(
        metadata={
            "name": "MISS_DISTANCE",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    relative_speed: None | DvType = field(
        default=None,
        metadata={
            "name": "RELATIVE_SPEED",
            "type": "Element",
            "namespace": "",
        },
    )
    relative_state_vector: None | RelativeStateVectorType = field(
        default=None,
        metadata={
            "name": "relativeStateVector",
            "type": "Element",
            "namespace": "",
        },
    )
    start_screen_period: None | str = field(
        default=None,
        metadata={
            "name": "START_SCREEN_PERIOD",
            "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_screen_period: None | str = field(
        default=None,
        metadata={
            "name": "STOP_SCREEN_PERIOD",
            "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*)?",
        },
    )
    screen_volume_frame: None | ScreenVolumeFrameType = field(
        default=None,
        metadata={
            "name": "SCREEN_VOLUME_FRAME",
            "type": "Element",
            "namespace": "",
        },
    )
    screen_volume_shape: None | ScreenVolumeShapeType = field(
        default=None,
        metadata={
            "name": "SCREEN_VOLUME_SHAPE",
            "type": "Element",
            "namespace": "",
        },
    )
    screen_volume_x: None | LengthType = field(
        default=None,
        metadata={
            "name": "SCREEN_VOLUME_X",
            "type": "Element",
            "namespace": "",
        },
    )
    screen_volume_y: None | LengthType = field(
        default=None,
        metadata={
            "name": "SCREEN_VOLUME_Y",
            "type": "Element",
            "namespace": "",
        },
    )
    screen_volume_z: None | LengthType = field(
        default=None,
        metadata={
            "name": "SCREEN_VOLUME_Z",
            "type": "Element",
            "namespace": "",
        },
    )
    screen_entry_time: None | str = field(
        default=None,
        metadata={
            "name": "SCREEN_ENTRY_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*)?",
        },
    )
    screen_exit_time: None | str = field(
        default=None,
        metadata={
            "name": "SCREEN_EXIT_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*)?",
        },
    )
    collision_probability: None | float = field(
        default=None,
        metadata={
            "name": "COLLISION_PROBABILITY",
            "type": "Element",
            "namespace": "",
            "min_inclusive": 0.0,
            "max_inclusive": 1.0,
        },
    )
    collision_probability_method: None | str = field(
        default=None,
        metadata={
            "name": "COLLISION_PROBABILITY_METHOD",
            "type": "Element",
            "namespace": "",
        },
    )


@dataclass(kw_only=True)
class CdmSegment:
    class Meta:
        name = "cdmSegment"

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


@dataclass(kw_only=True)
class CdmBody:
    class Meta:
        name = "cdmBody"

    relative_metadata_data: RelativeMetadataData = field(
        metadata={
            "name": "relativeMetadataData",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    segment: list[CdmSegment] = field(
        default_factory=list,
        metadata={
            "type": "Element",
            "namespace": "",
            "min_occurs": 2,
            "max_occurs": 2,
        },
    )


@dataclass(kw_only=True)
class CdmType:
    class Meta:
        name = "cdmType"

    header: CdmHeader = field(
        metadata={
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    body: CdmBody = field(
        metadata={
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    id: str = field(
        init=False,
        default="CCSDS_CDM_VERS",
        metadata={
            "type": "Attribute",
            "required": True,
        },
    )
    version: str = field(
        init=False,
        default="1.0",
        metadata={
            "type": "Attribute",
            "required": True,
        },
    )
