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

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

from __future__ import annotations

from dataclasses import dataclass, field

from ccsds_ndm.models.ndmxml4.ndmxml_4_0_0_common_4_0 import (
    AngleRateType,
    AngleType,
    AreaType,
    CovBasisType,
    CovOrderType,
    DayIntervalTypeUo,
    DurationType,
    GeomagType,
    GmType,
    LengthTypeUo,
    ManBasisType,
    ManDctype,
    ManeuverFreqType,
    MassType,
    MomentType,
    ObjectDescriptionType,
    OdmHeader,
    PercentageTypeUo,
    PositionTypeUo,
    RevNumBasisType,
    SolarFluxType,
    ThrustType,
    TimeOffsetType,
    TrajBasisType,
    UserDefinedType,
    VelocityTypeUo,
    WkgType,
)

__NAMESPACE__ = "urn:ccsds:schema:ndmxml"


@dataclass(kw_only=True)
class OcmCovarianceMatrixType:
    class Meta:
        name = "ocmCovarianceMatrixType"

    comment: list[str] = field(
        default_factory=list,
        metadata={
            "name": "COMMENT",
            "type": "Element",
            "namespace": "",
        },
    )
    cov_id: None | str = field(
        default=None,
        metadata={
            "name": "COV_ID",
            "type": "Element",
            "namespace": "",
        },
    )
    cov_prev_id: None | str = field(
        default=None,
        metadata={
            "name": "COV_PREV_ID",
            "type": "Element",
            "namespace": "",
        },
    )
    cov_next_id: None | str = field(
        default=None,
        metadata={
            "name": "COV_NEXT_ID",
            "type": "Element",
            "namespace": "",
        },
    )
    cov_basis: None | CovBasisType = field(
        default=None,
        metadata={
            "name": "COV_BASIS",
            "type": "Element",
            "namespace": "",
        },
    )
    cov_basis_id: None | str = field(
        default=None,
        metadata={
            "name": "COV_BASIS_ID",
            "type": "Element",
            "namespace": "",
        },
    )
    cov_ref_frame: str = field(
        metadata={
            "name": "COV_REF_FRAME",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    cov_frame_epoch: None | str = field(
        default=None,
        metadata={
            "name": "COV_FRAME_EPOCH",
            "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*)?",
        },
    )
    cov_scale_min: None | float = field(
        default=None,
        metadata={
            "name": "COV_SCALE_MIN",
            "type": "Element",
            "namespace": "",
        },
    )
    cov_scale_max: None | float = field(
        default=None,
        metadata={
            "name": "COV_SCALE_MAX",
            "type": "Element",
            "namespace": "",
        },
    )
    cov_confidence: None | PercentageTypeUo = field(
        default=None,
        metadata={
            "name": "COV_CONFIDENCE",
            "type": "Element",
            "namespace": "",
        },
    )
    cov_type: str = field(
        metadata={
            "name": "COV_TYPE",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    cov_ordering: CovOrderType = field(
        metadata={
            "name": "COV_ORDERING",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    cov_units: None | str = field(
        default=None,
        metadata={
            "name": "COV_UNITS",
            "type": "Element",
            "namespace": "",
        },
    )
    cov_line: list[str] = field(
        default_factory=list,
        metadata={
            "name": "covLine",
            "type": "Element",
            "namespace": "",
            "min_occurs": 1,
        },
    )


@dataclass(kw_only=True)
class OcmManeuverParametersType:
    class Meta:
        name = "ocmManeuverParametersType"

    comment: list[str] = field(
        default_factory=list,
        metadata={
            "name": "COMMENT",
            "type": "Element",
            "namespace": "",
        },
    )
    man_id: str = field(
        metadata={
            "name": "MAN_ID",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    man_prev_id: None | str = field(
        default=None,
        metadata={
            "name": "MAN_PREV_ID",
            "type": "Element",
            "namespace": "",
        },
    )
    man_next_id: None | str = field(
        default=None,
        metadata={
            "name": "MAN_NEXT_ID",
            "type": "Element",
            "namespace": "",
        },
    )
    man_basis: None | ManBasisType = field(
        default=None,
        metadata={
            "name": "MAN_BASIS",
            "type": "Element",
            "namespace": "",
        },
    )
    man_basis_id: None | str = field(
        default=None,
        metadata={
            "name": "MAN_BASIS_ID",
            "type": "Element",
            "namespace": "",
        },
    )
    man_device_id: str = field(
        metadata={
            "name": "MAN_DEVICE_ID",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    man_prev_epoch: None | str = field(
        default=None,
        metadata={
            "name": "MAN_PREV_EPOCH",
            "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*)?",
        },
    )
    man_next_epoch: None | str = field(
        default=None,
        metadata={
            "name": "MAN_NEXT_EPOCH",
            "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*)?",
        },
    )
    man_purpose: None | str = field(
        default=None,
        metadata={
            "name": "MAN_PURPOSE",
            "type": "Element",
            "namespace": "",
        },
    )
    man_pred_source: None | str = field(
        default=None,
        metadata={
            "name": "MAN_PRED_SOURCE",
            "type": "Element",
            "namespace": "",
        },
    )
    man_ref_frame: str = field(
        metadata={
            "name": "MAN_REF_FRAME",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    man_frame_epoch: None | str = field(
        default=None,
        metadata={
            "name": "MAN_FRAME_EPOCH",
            "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*)?",
        },
    )
    grav_assist_name: None | str = field(
        default=None,
        metadata={
            "name": "GRAV_ASSIST_NAME",
            "type": "Element",
            "namespace": "",
        },
    )
    dc_type: ManDctype = field(
        metadata={
            "name": "DC_TYPE",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    dc_win_open: None | str = field(
        default=None,
        metadata={
            "name": "DC_WIN_OPEN",
            "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*)?",
        },
    )
    dc_win_close: None | str = field(
        default=None,
        metadata={
            "name": "DC_WIN_CLOSE",
            "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*)?",
        },
    )
    dc_min_cycles: None | int = field(
        default=None,
        metadata={
            "name": "DC_MIN_CYCLES",
            "type": "Element",
            "namespace": "",
        },
    )
    dc_max_cycles: None | int = field(
        default=None,
        metadata={
            "name": "DC_MAX_CYCLES",
            "type": "Element",
            "namespace": "",
        },
    )
    dc_exec_start: None | str = field(
        default=None,
        metadata={
            "name": "DC_EXEC_START",
            "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*)?",
        },
    )
    dc_exec_stop: None | str = field(
        default=None,
        metadata={
            "name": "DC_EXEC_STOP",
            "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*)?",
        },
    )
    dc_ref_time: None | str = field(
        default=None,
        metadata={
            "name": "DC_REF_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*)?",
        },
    )
    dc_time_pulse_duration: None | DurationType = field(
        default=None,
        metadata={
            "name": "DC_TIME_PULSE_DURATION",
            "type": "Element",
            "namespace": "",
        },
    )
    dc_time_pulse_period: None | DurationType = field(
        default=None,
        metadata={
            "name": "DC_TIME_PULSE_PERIOD",
            "type": "Element",
            "namespace": "",
        },
    )
    dc_ref_dir: list[float] = field(
        default_factory=list,
        metadata={
            "name": "DC_REF_DIR",
            "type": "Element",
            "namespace": "",
            "length": 3,
            "tokens": True,
        },
    )
    dc_body_frame: None | str = field(
        default=None,
        metadata={
            "name": "DC_BODY_FRAME",
            "type": "Element",
            "namespace": "",
        },
    )
    dc_body_trigger: list[float] = field(
        default_factory=list,
        metadata={
            "name": "DC_BODY_TRIGGER",
            "type": "Element",
            "namespace": "",
            "length": 3,
            "tokens": True,
        },
    )
    dc_pa_start_angle: None | AngleType = field(
        default=None,
        metadata={
            "name": "DC_PA_START_ANGLE",
            "type": "Element",
            "namespace": "",
        },
    )
    dc_pa_stop_angle: None | AngleType = field(
        default=None,
        metadata={
            "name": "DC_PA_STOP_ANGLE",
            "type": "Element",
            "namespace": "",
        },
    )
    man_composition: str = field(
        metadata={
            "name": "MAN_COMPOSITION",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    man_units: None | str = field(
        default=None,
        metadata={
            "name": "MAN_UNITS",
            "type": "Element",
            "namespace": "",
        },
    )
    man_line: list[str] = field(
        default_factory=list,
        metadata={
            "name": "manLine",
            "type": "Element",
            "namespace": "",
            "min_occurs": 1,
        },
    )


@dataclass(kw_only=True)
class OcmMetadata:
    class Meta:
        name = "ocmMetadata"

    comment: list[str] = field(
        default_factory=list,
        metadata={
            "name": "COMMENT",
            "type": "Element",
            "namespace": "",
        },
    )
    object_name: None | str = field(
        default=None,
        metadata={
            "name": "OBJECT_NAME",
            "type": "Element",
            "namespace": "",
        },
    )
    international_designator: None | str = field(
        default=None,
        metadata={
            "name": "INTERNATIONAL_DESIGNATOR",
            "type": "Element",
            "namespace": "",
        },
    )
    catalog_name: None | str = field(
        default=None,
        metadata={
            "name": "CATALOG_NAME",
            "type": "Element",
            "namespace": "",
        },
    )
    object_designator: None | str = field(
        default=None,
        metadata={
            "name": "OBJECT_DESIGNATOR",
            "type": "Element",
            "namespace": "",
        },
    )
    alternate_names: None | str = field(
        default=None,
        metadata={
            "name": "ALTERNATE_NAMES",
            "type": "Element",
            "namespace": "",
        },
    )
    originator_poc: None | str = field(
        default=None,
        metadata={
            "name": "ORIGINATOR_POC",
            "type": "Element",
            "namespace": "",
        },
    )
    originator_position: None | str = field(
        default=None,
        metadata={
            "name": "ORIGINATOR_POSITION",
            "type": "Element",
            "namespace": "",
        },
    )
    originator_phone: None | str = field(
        default=None,
        metadata={
            "name": "ORIGINATOR_PHONE",
            "type": "Element",
            "namespace": "",
        },
    )
    originator_email: None | str = field(
        default=None,
        metadata={
            "name": "ORIGINATOR_EMAIL",
            "type": "Element",
            "namespace": "",
        },
    )
    originator_address: None | str = field(
        default=None,
        metadata={
            "name": "ORIGINATOR_ADDRESS",
            "type": "Element",
            "namespace": "",
        },
    )
    tech_org: None | str = field(
        default=None,
        metadata={
            "name": "TECH_ORG",
            "type": "Element",
            "namespace": "",
        },
    )
    tech_poc: None | str = field(
        default=None,
        metadata={
            "name": "TECH_POC",
            "type": "Element",
            "namespace": "",
        },
    )
    tech_position: None | str = field(
        default=None,
        metadata={
            "name": "TECH_POSITION",
            "type": "Element",
            "namespace": "",
        },
    )
    tech_phone: None | str = field(
        default=None,
        metadata={
            "name": "TECH_PHONE",
            "type": "Element",
            "namespace": "",
        },
    )
    tech_email: None | str = field(
        default=None,
        metadata={
            "name": "TECH_EMAIL",
            "type": "Element",
            "namespace": "",
        },
    )
    tech_address: None | str = field(
        default=None,
        metadata={
            "name": "TECH_ADDRESS",
            "type": "Element",
            "namespace": "",
        },
    )
    previous_message_id: None | str = field(
        default=None,
        metadata={
            "name": "PREVIOUS_MESSAGE_ID",
            "type": "Element",
            "namespace": "",
        },
    )
    next_message_id: None | str = field(
        default=None,
        metadata={
            "name": "NEXT_MESSAGE_ID",
            "type": "Element",
            "namespace": "",
        },
    )
    adm_msg_link: None | str = field(
        default=None,
        metadata={
            "name": "ADM_MSG_LINK",
            "type": "Element",
            "namespace": "",
        },
    )
    cdm_msg_link: None | str = field(
        default=None,
        metadata={
            "name": "CDM_MSG_LINK",
            "type": "Element",
            "namespace": "",
        },
    )
    prm_msg_link: None | str = field(
        default=None,
        metadata={
            "name": "PRM_MSG_LINK",
            "type": "Element",
            "namespace": "",
        },
    )
    rdm_msg_link: None | str = field(
        default=None,
        metadata={
            "name": "RDM_MSG_LINK",
            "type": "Element",
            "namespace": "",
        },
    )
    tdm_msg_link: None | str = field(
        default=None,
        metadata={
            "name": "TDM_MSG_LINK",
            "type": "Element",
            "namespace": "",
        },
    )
    operator: None | str = field(
        default=None,
        metadata={
            "name": "OPERATOR",
            "type": "Element",
            "namespace": "",
        },
    )
    owner: None | str = field(
        default=None,
        metadata={
            "name": "OWNER",
            "type": "Element",
            "namespace": "",
        },
    )
    country: None | str = field(
        default=None,
        metadata={
            "name": "COUNTRY",
            "type": "Element",
            "namespace": "",
        },
    )
    constellation: None | str = field(
        default=None,
        metadata={
            "name": "CONSTELLATION",
            "type": "Element",
            "namespace": "",
        },
    )
    object_type: None | ObjectDescriptionType = field(
        default=None,
        metadata={
            "name": "OBJECT_TYPE",
            "type": "Element",
            "namespace": "",
        },
    )
    time_system: str = field(
        metadata={
            "name": "TIME_SYSTEM",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    epoch_tzero: str = field(
        metadata={
            "name": "EPOCH_TZERO",
            "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*)?",
        }
    )
    ops_status: None | str = field(
        default=None,
        metadata={
            "name": "OPS_STATUS",
            "type": "Element",
            "namespace": "",
        },
    )
    orbit_category: None | str = field(
        default=None,
        metadata={
            "name": "ORBIT_CATEGORY",
            "type": "Element",
            "namespace": "",
        },
    )
    ocm_data_elements: None | str = field(
        default=None,
        metadata={
            "name": "OCM_DATA_ELEMENTS",
            "type": "Element",
            "namespace": "",
        },
    )
    sclk_offset_at_epoch: None | TimeOffsetType = field(
        default=None,
        metadata={
            "name": "SCLK_OFFSET_AT_EPOCH",
            "type": "Element",
            "namespace": "",
        },
    )
    sclk_sec_per_si_sec: None | DurationType = field(
        default=None,
        metadata={
            "name": "SCLK_SEC_PER_SI_SEC",
            "type": "Element",
            "namespace": "",
        },
    )
    previous_message_epoch: None | str = field(
        default=None,
        metadata={
            "name": "PREVIOUS_MESSAGE_EPOCH",
            "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*)?",
        },
    )
    next_message_epoch: None | str = field(
        default=None,
        metadata={
            "name": "NEXT_MESSAGE_EPOCH",
            "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*)?",
        },
    )
    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*)?",
        },
    )
    time_span: None | DayIntervalTypeUo = field(
        default=None,
        metadata={
            "name": "TIME_SPAN",
            "type": "Element",
            "namespace": "",
        },
    )
    taimutc_at_tzero: None | TimeOffsetType = field(
        default=None,
        metadata={
            "name": "TAIMUTC_AT_TZERO",
            "type": "Element",
            "namespace": "",
        },
    )
    next_leap_epoch: None | str = field(
        default=None,
        metadata={
            "name": "NEXT_LEAP_EPOCH",
            "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*)?",
        },
    )
    next_leap_taimutc: None | TimeOffsetType = field(
        default=None,
        metadata={
            "name": "NEXT_LEAP_TAIMUTC",
            "type": "Element",
            "namespace": "",
        },
    )
    ut1_mutc_at_tzero: None | TimeOffsetType = field(
        default=None,
        metadata={
            "name": "UT1MUTC_AT_TZERO",
            "type": "Element",
            "namespace": "",
        },
    )
    eop_source: None | str = field(
        default=None,
        metadata={
            "name": "EOP_SOURCE",
            "type": "Element",
            "namespace": "",
        },
    )
    interp_method_eop: None | str = field(
        default=None,
        metadata={
            "name": "INTERP_METHOD_EOP",
            "type": "Element",
            "namespace": "",
        },
    )
    celestial_source: None | str = field(
        default=None,
        metadata={
            "name": "CELESTIAL_SOURCE",
            "type": "Element",
            "namespace": "",
        },
    )


@dataclass(kw_only=True)
class OcmOdParametersType:
    class Meta:
        name = "ocmOdParametersType"

    comment: list[str] = field(
        default_factory=list,
        metadata={
            "name": "COMMENT",
            "type": "Element",
            "namespace": "",
        },
    )
    od_id: str = field(
        metadata={
            "name": "OD_ID",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    od_prev_id: None | str = field(
        default=None,
        metadata={
            "name": "OD_PREV_ID",
            "type": "Element",
            "namespace": "",
        },
    )
    od_method: str = field(
        metadata={
            "name": "OD_METHOD",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    od_epoch: str = field(
        metadata={
            "name": "OD_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*)?",
        }
    )
    days_since_first_obs: None | DayIntervalTypeUo = field(
        default=None,
        metadata={
            "name": "DAYS_SINCE_FIRST_OBS",
            "type": "Element",
            "namespace": "",
        },
    )
    days_since_last_obs: None | DayIntervalTypeUo = field(
        default=None,
        metadata={
            "name": "DAYS_SINCE_LAST_OBS",
            "type": "Element",
            "namespace": "",
        },
    )
    recommended_od_span: None | DayIntervalTypeUo = field(
        default=None,
        metadata={
            "name": "RECOMMENDED_OD_SPAN",
            "type": "Element",
            "namespace": "",
        },
    )
    actual_od_span: None | DayIntervalTypeUo = field(
        default=None,
        metadata={
            "name": "ACTUAL_OD_SPAN",
            "type": "Element",
            "namespace": "",
        },
    )
    obs_available: None | int = field(
        default=None,
        metadata={
            "name": "OBS_AVAILABLE",
            "type": "Element",
            "namespace": "",
        },
    )
    obs_used: None | int = field(
        default=None,
        metadata={
            "name": "OBS_USED",
            "type": "Element",
            "namespace": "",
        },
    )
    tracks_available: None | int = field(
        default=None,
        metadata={
            "name": "TRACKS_AVAILABLE",
            "type": "Element",
            "namespace": "",
        },
    )
    tracks_used: None | int = field(
        default=None,
        metadata={
            "name": "TRACKS_USED",
            "type": "Element",
            "namespace": "",
        },
    )
    maximum_obs_gap: None | DayIntervalTypeUo = field(
        default=None,
        metadata={
            "name": "MAXIMUM_OBS_GAP",
            "type": "Element",
            "namespace": "",
        },
    )
    od_epoch_eigmaj: None | LengthTypeUo = field(
        default=None,
        metadata={
            "name": "OD_EPOCH_EIGMAJ",
            "type": "Element",
            "namespace": "",
        },
    )
    od_epoch_eigint: None | LengthTypeUo = field(
        default=None,
        metadata={
            "name": "OD_EPOCH_EIGINT",
            "type": "Element",
            "namespace": "",
        },
    )
    od_epoch_eigmin: None | LengthTypeUo = field(
        default=None,
        metadata={
            "name": "OD_EPOCH_EIGMIN",
            "type": "Element",
            "namespace": "",
        },
    )
    od_max_pred_eigmaj: None | LengthTypeUo = field(
        default=None,
        metadata={
            "name": "OD_MAX_PRED_EIGMAJ",
            "type": "Element",
            "namespace": "",
        },
    )
    od_min_pred_eigmin: None | LengthTypeUo = field(
        default=None,
        metadata={
            "name": "OD_MIN_PRED_EIGMIN",
            "type": "Element",
            "namespace": "",
        },
    )
    od_confidence: None | PercentageTypeUo = field(
        default=None,
        metadata={
            "name": "OD_CONFIDENCE",
            "type": "Element",
            "namespace": "",
        },
    )
    gdop: None | float = field(
        default=None,
        metadata={
            "name": "GDOP",
            "type": "Element",
            "namespace": "",
            "min_inclusive": 0.0,
        },
    )
    solve_n: None | int = field(
        default=None,
        metadata={
            "name": "SOLVE_N",
            "type": "Element",
            "namespace": "",
        },
    )
    solve_states: None | str = field(
        default=None,
        metadata={
            "name": "SOLVE_STATES",
            "type": "Element",
            "namespace": "",
        },
    )
    consider_n: None | int = field(
        default=None,
        metadata={
            "name": "CONSIDER_N",
            "type": "Element",
            "namespace": "",
        },
    )
    consider_params: None | str = field(
        default=None,
        metadata={
            "name": "CONSIDER_PARAMS",
            "type": "Element",
            "namespace": "",
        },
    )
    sedr: None | WkgType = field(
        default=None,
        metadata={
            "name": "SEDR",
            "type": "Element",
            "namespace": "",
        },
    )
    sensors_n: None | int = field(
        default=None,
        metadata={
            "name": "SENSORS_N",
            "type": "Element",
            "namespace": "",
        },
    )
    sensors: None | str = field(
        default=None,
        metadata={
            "name": "SENSORS",
            "type": "Element",
            "namespace": "",
        },
    )
    weighted_rms: None | float = field(
        default=None,
        metadata={
            "name": "WEIGHTED_RMS",
            "type": "Element",
            "namespace": "",
            "min_inclusive": 0.0,
        },
    )
    data_types: None | str = field(
        default=None,
        metadata={
            "name": "DATA_TYPES",
            "type": "Element",
            "namespace": "",
        },
    )


@dataclass(kw_only=True)
class OcmPerturbationsType:
    class Meta:
        name = "ocmPerturbationsType"

    comment: list[str] = field(
        default_factory=list,
        metadata={
            "name": "COMMENT",
            "type": "Element",
            "namespace": "",
        },
    )
    atmospheric_model: None | str = field(
        default=None,
        metadata={
            "name": "ATMOSPHERIC_MODEL",
            "type": "Element",
            "namespace": "",
        },
    )
    gravity_model: None | str = field(
        default=None,
        metadata={
            "name": "GRAVITY_MODEL",
            "type": "Element",
            "namespace": "",
        },
    )
    equatorial_radius: None | PositionTypeUo = field(
        default=None,
        metadata={
            "name": "EQUATORIAL_RADIUS",
            "type": "Element",
            "namespace": "",
        },
    )
    gm: None | GmType = field(
        default=None,
        metadata={
            "name": "GM",
            "type": "Element",
            "namespace": "",
        },
    )
    n_body_perturbations: None | str = field(
        default=None,
        metadata={
            "name": "N_BODY_PERTURBATIONS",
            "type": "Element",
            "namespace": "",
        },
    )
    central_body_rotation: None | AngleRateType = field(
        default=None,
        metadata={
            "name": "CENTRAL_BODY_ROTATION",
            "type": "Element",
            "namespace": "",
        },
    )
    oblate_flattening: None | float = field(
        default=None,
        metadata={
            "name": "OBLATE_FLATTENING",
            "type": "Element",
            "namespace": "",
            "min_exclusive": 0.0,
        },
    )
    ocean_tides_model: None | str = field(
        default=None,
        metadata={
            "name": "OCEAN_TIDES_MODEL",
            "type": "Element",
            "namespace": "",
        },
    )
    solid_tides_model: None | str = field(
        default=None,
        metadata={
            "name": "SOLID_TIDES_MODEL",
            "type": "Element",
            "namespace": "",
        },
    )
    reduction_theory: None | str = field(
        default=None,
        metadata={
            "name": "REDUCTION_THEORY",
            "type": "Element",
            "namespace": "",
        },
    )
    albedo_model: None | str = field(
        default=None,
        metadata={
            "name": "ALBEDO_MODEL",
            "type": "Element",
            "namespace": "",
        },
    )
    albedo_grid_size: None | int = field(
        default=None,
        metadata={
            "name": "ALBEDO_GRID_SIZE",
            "type": "Element",
            "namespace": "",
        },
    )
    shadow_model: None | str = field(
        default=None,
        metadata={
            "name": "SHADOW_MODEL",
            "type": "Element",
            "namespace": "",
        },
    )
    shadow_bodies: None | str = field(
        default=None,
        metadata={
            "name": "SHADOW_BODIES",
            "type": "Element",
            "namespace": "",
        },
    )
    srp_model: None | str = field(
        default=None,
        metadata={
            "name": "SRP_MODEL",
            "type": "Element",
            "namespace": "",
        },
    )
    sw_data_source: None | str = field(
        default=None,
        metadata={
            "name": "SW_DATA_SOURCE",
            "type": "Element",
            "namespace": "",
        },
    )
    sw_data_epoch: None | str = field(
        default=None,
        metadata={
            "name": "SW_DATA_EPOCH",
            "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*)?",
        },
    )
    sw_interp_method: None | str = field(
        default=None,
        metadata={
            "name": "SW_INTERP_METHOD",
            "type": "Element",
            "namespace": "",
        },
    )
    fixed_geomag_kp: None | GeomagType = field(
        default=None,
        metadata={
            "name": "FIXED_GEOMAG_KP",
            "type": "Element",
            "namespace": "",
        },
    )
    fixed_geomag_ap: None | GeomagType = field(
        default=None,
        metadata={
            "name": "FIXED_GEOMAG_AP",
            "type": "Element",
            "namespace": "",
        },
    )
    fixed_geomag_dst: None | GeomagType = field(
        default=None,
        metadata={
            "name": "FIXED_GEOMAG_DST",
            "type": "Element",
            "namespace": "",
        },
    )
    fixed_f10_p7: None | SolarFluxType = field(
        default=None,
        metadata={
            "name": "FIXED_F10P7",
            "type": "Element",
            "namespace": "",
        },
    )
    fixed_f10_p7_mean: None | SolarFluxType = field(
        default=None,
        metadata={
            "name": "FIXED_F10P7_MEAN",
            "type": "Element",
            "namespace": "",
        },
    )
    fixed_m10_p7: None | SolarFluxType = field(
        default=None,
        metadata={
            "name": "FIXED_M10P7",
            "type": "Element",
            "namespace": "",
        },
    )
    fixed_m10_p7_mean: None | SolarFluxType = field(
        default=None,
        metadata={
            "name": "FIXED_M10P7_MEAN",
            "type": "Element",
            "namespace": "",
        },
    )
    fixed_s10_p7: None | SolarFluxType = field(
        default=None,
        metadata={
            "name": "FIXED_S10P7",
            "type": "Element",
            "namespace": "",
        },
    )
    fixed_s10_p7_mean: None | SolarFluxType = field(
        default=None,
        metadata={
            "name": "FIXED_S10P7_MEAN",
            "type": "Element",
            "namespace": "",
        },
    )
    fixed_y10_p7: None | SolarFluxType = field(
        default=None,
        metadata={
            "name": "FIXED_Y10P7",
            "type": "Element",
            "namespace": "",
        },
    )
    fixed_y10_p7_mean: None | SolarFluxType = field(
        default=None,
        metadata={
            "name": "FIXED_Y10P7_MEAN",
            "type": "Element",
            "namespace": "",
        },
    )


@dataclass(kw_only=True)
class OcmPhysicalDescriptionType:
    class Meta:
        name = "ocmPhysicalDescriptionType"

    comment: list[str] = field(
        default_factory=list,
        metadata={
            "name": "COMMENT",
            "type": "Element",
            "namespace": "",
        },
    )
    manufacturer: None | str = field(
        default=None,
        metadata={
            "name": "MANUFACTURER",
            "type": "Element",
            "namespace": "",
        },
    )
    bus_model: None | str = field(
        default=None,
        metadata={
            "name": "BUS_MODEL",
            "type": "Element",
            "namespace": "",
        },
    )
    docked_with: None | str = field(
        default=None,
        metadata={
            "name": "DOCKED_WITH",
            "type": "Element",
            "namespace": "",
        },
    )
    drag_const_area: None | AreaType = field(
        default=None,
        metadata={
            "name": "DRAG_CONST_AREA",
            "type": "Element",
            "namespace": "",
        },
    )
    drag_coeff_nom: None | float = field(
        default=None,
        metadata={
            "name": "DRAG_COEFF_NOM",
            "type": "Element",
            "namespace": "",
            "min_exclusive": 0.0,
        },
    )
    drag_uncertainty: None | PercentageTypeUo = field(
        default=None,
        metadata={
            "name": "DRAG_UNCERTAINTY",
            "type": "Element",
            "namespace": "",
        },
    )
    initial_wet_mass: None | MassType = field(
        default=None,
        metadata={
            "name": "INITIAL_WET_MASS",
            "type": "Element",
            "namespace": "",
        },
    )
    wet_mass: None | MassType = field(
        default=None,
        metadata={
            "name": "WET_MASS",
            "type": "Element",
            "namespace": "",
        },
    )
    dry_mass: None | MassType = field(
        default=None,
        metadata={
            "name": "DRY_MASS",
            "type": "Element",
            "namespace": "",
        },
    )
    oeb_parent_frame: None | str = field(
        default=None,
        metadata={
            "name": "OEB_PARENT_FRAME",
            "type": "Element",
            "namespace": "",
        },
    )
    oeb_parent_frame_epoch: None | str = field(
        default=None,
        metadata={
            "name": "OEB_PARENT_FRAME_EPOCH",
            "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*)?",
        },
    )
    oeb_q1: None | float = field(
        default=None,
        metadata={
            "name": "OEB_Q1",
            "type": "Element",
            "namespace": "",
        },
    )
    oeb_q2: None | float = field(
        default=None,
        metadata={
            "name": "OEB_Q2",
            "type": "Element",
            "namespace": "",
        },
    )
    oeb_q3: None | float = field(
        default=None,
        metadata={
            "name": "OEB_Q3",
            "type": "Element",
            "namespace": "",
        },
    )
    oeb_qc: None | float = field(
        default=None,
        metadata={
            "name": "OEB_QC",
            "type": "Element",
            "namespace": "",
        },
    )
    oeb_max: None | LengthTypeUo = field(
        default=None,
        metadata={
            "name": "OEB_MAX",
            "type": "Element",
            "namespace": "",
        },
    )
    oeb_int: None | LengthTypeUo = field(
        default=None,
        metadata={
            "name": "OEB_INT",
            "type": "Element",
            "namespace": "",
        },
    )
    oeb_min: None | LengthTypeUo = field(
        default=None,
        metadata={
            "name": "OEB_MIN",
            "type": "Element",
            "namespace": "",
        },
    )
    area_along_oeb_max: None | AreaType = field(
        default=None,
        metadata={
            "name": "AREA_ALONG_OEB_MAX",
            "type": "Element",
            "namespace": "",
        },
    )
    area_along_oeb_int: None | AreaType = field(
        default=None,
        metadata={
            "name": "AREA_ALONG_OEB_INT",
            "type": "Element",
            "namespace": "",
        },
    )
    area_along_oeb_min: None | AreaType = field(
        default=None,
        metadata={
            "name": "AREA_ALONG_OEB_MIN",
            "type": "Element",
            "namespace": "",
        },
    )
    area_min_for_pc: None | AreaType = field(
        default=None,
        metadata={
            "name": "AREA_MIN_FOR_PC",
            "type": "Element",
            "namespace": "",
        },
    )
    area_max_for_pc: None | AreaType = field(
        default=None,
        metadata={
            "name": "AREA_MAX_FOR_PC",
            "type": "Element",
            "namespace": "",
        },
    )
    area_typ_for_pc: None | AreaType = field(
        default=None,
        metadata={
            "name": "AREA_TYP_FOR_PC",
            "type": "Element",
            "namespace": "",
        },
    )
    rcs: None | AreaType = field(
        default=None,
        metadata={
            "name": "RCS",
            "type": "Element",
            "namespace": "",
        },
    )
    rcs_min: None | AreaType = field(
        default=None,
        metadata={
            "name": "RCS_MIN",
            "type": "Element",
            "namespace": "",
        },
    )
    rcs_max: None | AreaType = field(
        default=None,
        metadata={
            "name": "RCS_MAX",
            "type": "Element",
            "namespace": "",
        },
    )
    srp_const_area: None | AreaType = field(
        default=None,
        metadata={
            "name": "SRP_CONST_AREA",
            "type": "Element",
            "namespace": "",
        },
    )
    solar_rad_coeff: None | float = field(
        default=None,
        metadata={
            "name": "SOLAR_RAD_COEFF",
            "type": "Element",
            "namespace": "",
        },
    )
    solar_rad_uncertainty: None | PercentageTypeUo = field(
        default=None,
        metadata={
            "name": "SOLAR_RAD_UNCERTAINTY",
            "type": "Element",
            "namespace": "",
        },
    )
    vm_absolute: None | float = field(
        default=None,
        metadata={
            "name": "VM_ABSOLUTE",
            "type": "Element",
            "namespace": "",
        },
    )
    vm_apparent_min: None | float = field(
        default=None,
        metadata={
            "name": "VM_APPARENT_MIN",
            "type": "Element",
            "namespace": "",
        },
    )
    vm_apparent: None | float = field(
        default=None,
        metadata={
            "name": "VM_APPARENT",
            "type": "Element",
            "namespace": "",
        },
    )
    vm_apparent_max: None | float = field(
        default=None,
        metadata={
            "name": "VM_APPARENT_MAX",
            "type": "Element",
            "namespace": "",
        },
    )
    reflectance: None | float = field(
        default=None,
        metadata={
            "name": "REFLECTANCE",
            "type": "Element",
            "namespace": "",
            "min_inclusive": 0.0,
            "max_inclusive": 1.0,
        },
    )
    att_control_mode: None | str = field(
        default=None,
        metadata={
            "name": "ATT_CONTROL_MODE",
            "type": "Element",
            "namespace": "",
        },
    )
    att_actuator_type: None | str = field(
        default=None,
        metadata={
            "name": "ATT_ACTUATOR_TYPE",
            "type": "Element",
            "namespace": "",
        },
    )
    att_knowledge: None | AngleType = field(
        default=None,
        metadata={
            "name": "ATT_KNOWLEDGE",
            "type": "Element",
            "namespace": "",
        },
    )
    att_control: None | AngleType = field(
        default=None,
        metadata={
            "name": "ATT_CONTROL",
            "type": "Element",
            "namespace": "",
        },
    )
    att_pointing: None | AngleType = field(
        default=None,
        metadata={
            "name": "ATT_POINTING",
            "type": "Element",
            "namespace": "",
        },
    )
    avg_maneuver_freq: None | ManeuverFreqType = field(
        default=None,
        metadata={
            "name": "AVG_MANEUVER_FREQ",
            "type": "Element",
            "namespace": "",
        },
    )
    max_thrust: None | ThrustType = field(
        default=None,
        metadata={
            "name": "MAX_THRUST",
            "type": "Element",
            "namespace": "",
        },
    )
    dv_bol: None | VelocityTypeUo = field(
        default=None,
        metadata={
            "name": "DV_BOL",
            "type": "Element",
            "namespace": "",
        },
    )
    dv_remaining: None | VelocityTypeUo = field(
        default=None,
        metadata={
            "name": "DV_REMAINING",
            "type": "Element",
            "namespace": "",
        },
    )
    ixx: None | MomentType = field(
        default=None,
        metadata={
            "name": "IXX",
            "type": "Element",
            "namespace": "",
        },
    )
    iyy: None | MomentType = field(
        default=None,
        metadata={
            "name": "IYY",
            "type": "Element",
            "namespace": "",
        },
    )
    izz: None | MomentType = field(
        default=None,
        metadata={
            "name": "IZZ",
            "type": "Element",
            "namespace": "",
        },
    )
    ixy: None | MomentType = field(
        default=None,
        metadata={
            "name": "IXY",
            "type": "Element",
            "namespace": "",
        },
    )
    ixz: None | MomentType = field(
        default=None,
        metadata={
            "name": "IXZ",
            "type": "Element",
            "namespace": "",
        },
    )
    iyz: None | MomentType = field(
        default=None,
        metadata={
            "name": "IYZ",
            "type": "Element",
            "namespace": "",
        },
    )


@dataclass(kw_only=True)
class OcmTrajStateType:
    class Meta:
        name = "ocmTrajStateType"

    comment: list[str] = field(
        default_factory=list,
        metadata={
            "name": "COMMENT",
            "type": "Element",
            "namespace": "",
        },
    )
    traj_id: None | str = field(
        default=None,
        metadata={
            "name": "TRAJ_ID",
            "type": "Element",
            "namespace": "",
        },
    )
    traj_prev_id: None | str = field(
        default=None,
        metadata={
            "name": "TRAJ_PREV_ID",
            "type": "Element",
            "namespace": "",
        },
    )
    traj_next_id: None | str = field(
        default=None,
        metadata={
            "name": "TRAJ_NEXT_ID",
            "type": "Element",
            "namespace": "",
        },
    )
    traj_basis: None | TrajBasisType = field(
        default=None,
        metadata={
            "name": "TRAJ_BASIS",
            "type": "Element",
            "namespace": "",
        },
    )
    traj_basis_id: None | str = field(
        default=None,
        metadata={
            "name": "TRAJ_BASIS_ID",
            "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": "",
        },
    )
    propagator: None | str = field(
        default=None,
        metadata={
            "name": "PROPAGATOR",
            "type": "Element",
            "namespace": "",
        },
    )
    center_name: str = field(
        metadata={
            "name": "CENTER_NAME",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    traj_ref_frame: str = field(
        metadata={
            "name": "TRAJ_REF_FRAME",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    traj_frame_epoch: None | str = field(
        default=None,
        metadata={
            "name": "TRAJ_FRAME_EPOCH",
            "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*)?",
        },
    )
    useable_start_time: None | str = field(
        default=None,
        metadata={
            "name": "USEABLE_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*)?",
        },
    )
    useable_stop_time: None | str = field(
        default=None,
        metadata={
            "name": "USEABLE_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*)?",
        },
    )
    orb_revnum: None | float = field(
        default=None,
        metadata={
            "name": "ORB_REVNUM",
            "type": "Element",
            "namespace": "",
            "min_inclusive": 0.0,
        },
    )
    orb_revnum_basis: None | RevNumBasisType = field(
        default=None,
        metadata={
            "name": "ORB_REVNUM_BASIS",
            "type": "Element",
            "namespace": "",
        },
    )
    traj_type: str = field(
        metadata={
            "name": "TRAJ_TYPE",
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    orb_averaging: None | str = field(
        default=None,
        metadata={
            "name": "ORB_AVERAGING",
            "type": "Element",
            "namespace": "",
        },
    )
    traj_units: None | str = field(
        default=None,
        metadata={
            "name": "TRAJ_UNITS",
            "type": "Element",
            "namespace": "",
        },
    )
    traj_line: list[str] = field(
        default_factory=list,
        metadata={
            "name": "trajLine",
            "type": "Element",
            "namespace": "",
            "min_occurs": 1,
        },
    )


@dataclass(kw_only=True)
class OcmData:
    class Meta:
        name = "ocmData"

    traj: list[OcmTrajStateType] = field(
        default_factory=list,
        metadata={
            "type": "Element",
            "namespace": "",
        },
    )
    phys: None | OcmPhysicalDescriptionType = field(
        default=None,
        metadata={
            "type": "Element",
            "namespace": "",
        },
    )
    cov: list[OcmCovarianceMatrixType] = field(
        default_factory=list,
        metadata={
            "type": "Element",
            "namespace": "",
        },
    )
    man: list[OcmManeuverParametersType] = field(
        default_factory=list,
        metadata={
            "type": "Element",
            "namespace": "",
        },
    )
    pert: None | OcmPerturbationsType = field(
        default=None,
        metadata={
            "type": "Element",
            "namespace": "",
        },
    )
    od: None | OcmOdParametersType = field(
        default=None,
        metadata={
            "type": "Element",
            "namespace": "",
        },
    )
    user: None | UserDefinedType = field(
        default=None,
        metadata={
            "type": "Element",
            "namespace": "",
        },
    )


@dataclass(kw_only=True)
class OcmSegment:
    class Meta:
        name = "ocmSegment"

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


@dataclass(kw_only=True)
class OcmBody:
    class Meta:
        name = "ocmBody"

    segment: OcmSegment = field(
        metadata={
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )


@dataclass(kw_only=True)
class OcmType:
    class Meta:
        name = "ocmType"

    header: OdmHeader = field(
        metadata={
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    body: OcmBody = field(
        metadata={
            "type": "Element",
            "namespace": "",
            "required": True,
        }
    )
    id: str = field(
        init=False,
        default="CCSDS_OCM_VERS",
        metadata={
            "type": "Attribute",
            "required": True,
        },
    )
    version: str = field(
        init=False,
        default="3.0",
        metadata={
            "type": "Attribute",
            "required": True,
        },
    )
