> ## Documentation Index
> Fetch the complete documentation index at: https://docs.valar.space/llms.txt
> Use this file to discover all available pages before exploring further.

# OCM (Orbit Comprehensive Message)

> Working with CCSDS Orbit Comprehensive Message format in VALAR

> For the complete documentation index, see [llms.txt](/llms.txt).

The Orbit Comprehensive Message (OCM) is the most feature-rich standardized format for exchanging spacecraft orbital information. Unlike OPM (single-epoch state) and OEM (ephemeris time series), OCM combines multiple data types into a single comprehensive message, supporting trajectory state history, spacecraft physical properties, covariance time history, multiple maneuvers, perturbation parameters, and user-defined data.

## Why OCM is "Comprehensive"

OCM aggregates and extends the capabilities of OPM, OMM, and OEM into one unified format:

* **Multiple Trajectory States**: Time series of state vectors or Keplerian elements (like OEM)
* **Single-Epoch States**: State snapshots at specific times (like OPM)
* **Multiple Maneuvers**: Comprehensive maneuver planning with impulsive and continuous thrust
* **Physical Properties**: Spacecraft mass, area, drag/SRP coefficients, attitude information
* **Covariance Time History**: Uncertainty evolution over time
* **Perturbation Parameters**: Force model configuration for propagation
* **User-Defined Data**: Custom parameters for mission-specific needs
* **Parent-Child Scenarios**: Support for deployment and separation events

<Info>
  OCM is the recommended format when you need to exchange comprehensive mission planning data, including orbital states, maneuver plans, spacecraft properties, and uncertainties in a single file.
</Info>

## Key Components

An OCM file contains several distinct sections (all optional except Header and Metadata):

* **Header**: File-level metadata (format version, creation date, originator)
* **Metadata**: Mission context (object identification, time system, reference frame)
* **Trajectory State Time History**: Cartesian state vectors or Keplerian elements over time
* **Physical Descriptor**: Spacecraft physical properties (mass, area, drag coefficient, etc.)
* **Covariance Time History**: Position/velocity uncertainty matrices over time
* **Maneuver Parameters**: Multiple maneuver definitions (impulsive or continuous thrust)
* **Perturbation Parameters**: Force model specification for propagation
* **Orbit Determination Parameters**: OD configuration and results
* **User-Defined Parameters**: Custom mission-specific data

## Structure Overview

### OCM Hierarchy

```
OCM File
├── Header (CCSDS_OCM_VERS, CREATION_DATE, ORIGINATOR)
├── Metadata Section (META_START to META_STOP)
│   ├── Time system, reference frame
│   ├── Object identification
│   ├── Epoch reference (EPOCH_TZERO)
│   └── Trajectory interpolation settings
├── Trajectory State Blocks (TRAJ_START to TRAJ_STOP) [Optional]
│   └── Multiple state vector or Keplerian element time series
├── Physical Descriptor Block (PHYS_START to PHYS_STOP) [Optional]
│   └── Mass, area, attitude, drag/SRP coefficients
├── Covariance Blocks (COV_START to COV_STOP) [Optional]
│   └── Time series of covariance matrices
├── Maneuver Blocks (MAN_START to MAN_STOP) [Optional]
│   └── Multiple maneuver definitions with unique IDs
├── Perturbation Block (PERT_START to PERT_STOP) [Optional]
│   └── Force model configuration
├── Orbit Determination Block (OD_START to OD_STOP) [Optional]
│   └── OD settings and results
└── User-Defined Block (USER_START to USER_STOP) [Optional]
    └── Custom parameters
```

## Metadata Fields

### Required Metadata

| Field            | Description                        | Example Values      |
| ---------------- | ---------------------------------- | ------------------- |
| **TIME\_SYSTEM** | Time system for all epochs         | UTC, TAI, GPS       |
| **EPOCH\_TZERO** | Reference epoch for relative times | 2024-01-01T00:00:00 |

### Object Identification

| Field                         | Description               | Example          |
| ----------------------------- | ------------------------- | ---------------- |
| **OBJECT\_NAME**              | Spacecraft common name    | SPACECRAFT-ALPHA |
| **INTERNATIONAL\_DESIGNATOR** | COSPAR ID                 | 2023-001A        |
| **CATALOG\_NAME**             | Catalog identifier source | SATCAT           |
| **OBJECT\_DESIGNATOR**        | Object ID in catalog      | 12345            |

### Trajectory Configuration

| Field                 | Description                | Values                          |
| --------------------- | -------------------------- | ------------------------------- |
| **REF\_FRAME**        | Reference frame for states | GCRF, EME2000, ITRF             |
| **REF\_FRAME\_EPOCH** | Epoch for reference frame  | J2000 epoch                     |
| **TRAJ\_TYPE**        | Trajectory representation  | CARTESIAN, KEPLERIAN, GEODETIC  |
| **TRAJ\_UNITS**       | Units for trajectory data  | \[km, km, km, km/s, km/s, km/s] |

<Info>
  EPOCH\_TZERO serves as the time origin for all relative time references in the OCM. Absolute times can also be used where appropriate.
</Info>

## Trajectory State Time History

OCM supports time series of orbital states in multiple representations:

### Cartesian State Vectors

```
TRAJ_START
TRAJ_TYPE   = CARTESIAN
TRAJ_UNITS  = [km, km, km, km/s, km/s, km/s]

EPOCH       X           Y           Z           X_DOT       Y_DOT       Z_DOT
+0.000      6655.994    -40218.575  -82.918     3.115482    0.470426    -0.001015
+3600.000   6892.441    -39845.123  -76.234     3.087234    0.501287    -0.000923
+7200.000   7112.873    -39458.892  -69.445     3.058012    0.531456    -0.000831
TRAJ_STOP
```

### Keplerian Elements

```
TRAJ_START
TRAJ_TYPE   = KEPLERIAN
TRAJ_UNITS  = [km, n/a, deg, deg, deg, deg]

EPOCH       SEMI_MAJOR_AXIS  ECCENTRICITY  INCLINATION  RA_ASC_NODE  ARG_PERICENTER  TRUE_ANOMALY
+0.000      42164.140        0.0001234     0.05         75.123       180.456         90.789
+3600.000   42164.245        0.0001245     0.05         75.234       180.567         95.123
TRAJ_STOP
```

Time values can be:

* **Absolute**: Full ISO 8601 timestamp
* **Relative**: Offset in seconds from EPOCH\_TZERO (indicated by `+` or `-` prefix)

## Physical Descriptor Block

Spacecraft physical properties for accurate propagation:

```
PHYS_START
WET_MASS            = 2000.000 [kg]
DRY_MASS            = 1850.000 [kg]
SRP_CONST_AREA      = 10.000 [m**2]
SOLAR_RAD_COEFF     = 1.300
DRAG_CONST_AREA     = 10.000 [m**2]
DRAG_COEFF_NOM      = 2.300
OEB_PARENT_FRAME    = SPACECRAFT_BODY
OEB_Q1              = 0.707
OEB_Q2              = 0.000
OEB_Q3              = 0.000
OEB_QC              = 0.707
PHYS_STOP
```

### Key Physical Parameters

| Parameter               | Description                                       | Units         |
| ----------------------- | ------------------------------------------------- | ------------- |
| **WET\_MASS**           | Fully fueled mass                                 | kg            |
| **DRY\_MASS**           | Mass without propellant                           | kg            |
| **SRP\_CONST\_AREA**    | Cross-sectional area for solar radiation pressure | m²            |
| **SOLAR\_RAD\_COEFF**   | SRP coefficient (typically 1.0-1.5)               | dimensionless |
| **DRAG\_CONST\_AREA**   | Cross-sectional area for atmospheric drag         | m²            |
| **DRAG\_COEFF\_NOM**    | Nominal drag coefficient (typically 2.0-2.5)      | dimensionless |
| **OEB\_Q1, Q2, Q3, QC** | Attitude quaternion                               | dimensionless |

## Covariance Time History

OCM supports time-varying covariance matrices to represent uncertainty evolution:

```
COV_START
COV_TYPE        = CARTESIAN
COV_ORDERING    = LTRI
COV_UNITS       = [km**2, km**2, km**2, km**2/s**2, km**2/s**2, km**2/s**2]

EPOCH           CX_X    CY_X    CY_Y    CZ_X    CZ_Y    CZ_Z
+0.000          4.142e+01  -8.579e+00  5.189e+01  -4.788e+01  -4.472e+01  5.960e+01

EPOCH           CX_DOT_X    CX_DOT_Y    CX_DOT_Z    CX_DOT_X_DOT
+0.000          3.523e-03   1.045e-03   -1.234e-03  8.945e-07

EPOCH           CY_DOT_X    CY_DOT_Y    CY_DOT_Z    CY_DOT_X_DOT    CY_DOT_Y_DOT
+0.000          -2.678e-03  -5.234e-04  1.876e-03   -3.456e-07      7.234e-07

EPOCH           CZ_DOT_X    CZ_DOT_Y    CZ_DOT_Z    CZ_DOT_X_DOT    CZ_DOT_Y_DOT    CZ_DOT_Z_DOT
+0.000          -1.234e-03  2.345e-03   -8.765e-04  2.134e-07       -4.567e-07      6.789e-07
COV_STOP
```

The covariance matrix is stored in lower-triangular form, representing the 6×6 position-velocity uncertainty.

## Maneuver Parameters

OCM's most powerful feature is comprehensive maneuver specification supporting both impulsive and continuous thrust maneuvers.

### Impulsive Maneuver

A single instantaneous velocity change:

```
MAN_START
MAN_ID              = MAN-001
MAN_BASIS           = PLANNED
MAN_DEVICE_ID       = THRUSTER-PRIMARY
MAN_PREV_ID         = N/A
MAN_NEXT_ID         = MAN-002
MAN_REF_FRAME       = RTN
MAN_FRAME_EPOCH     = 2024-06-03T09:00:00.000

DC_TYPE             = IMPULSIVE
MAN_COMPOSITION     = TIME_ABSOLUTE, MAN_DV_1, MAN_DV_2, MAN_DV_3
MAN_UNITS           = [s, km/s, km/s, km/s]

2024-06-03T09:00:34.100  -0.02325700  0.01683160  -0.00893444
MAN_STOP
```

### Continuous Thrust Maneuver

Extended burn with time-varying thrust profile:

```
MAN_START
MAN_ID              = MAN-002
MAN_BASIS           = PLANNED
MAN_DEVICE_ID       = THRUSTER-ION
MAN_REF_FRAME       = RTN
DC_TYPE             = CONTINUOUS
MAN_COMPOSITION     = TIME_ABSOLUTE, MAN_DURA, THR_X, THR_Y, THR_Z, THR_ISP, DELTA_MASS
MAN_UNITS           = [s, s, N, N, N, s, kg]

2024-06-04T01:10:00.000  500.0  0.0000  0.0650  0.0000  3000.0  -0.78
2024-06-04T01:20:00.000  500.0  0.0000  0.0000  0.0650  3000.0  -0.78
2024-06-04T01:30:00.000  500.0  0.0650  0.0000  0.0000  3000.0  -0.78
MAN_STOP
```

### Maneuver Metadata Fields

| Field               | Description                   | Values                    |
| ------------------- | ----------------------------- | ------------------------- |
| **MAN\_ID**         | Unique maneuver identifier    | MAN-001, BURN-A, etc.     |
| **MAN\_BASIS**      | Maneuver status               | PLANNED, ACCEPTED, ACTUAL |
| **MAN\_DEVICE\_ID** | Thruster or device ID         | Thruster name or ALL      |
| **MAN\_PREV\_ID**   | Previous maneuver in sequence | MAN\_ID or N/A            |
| **MAN\_NEXT\_ID**   | Next maneuver in sequence     | MAN\_ID or N/A            |
| **MAN\_REF\_FRAME** | Reference frame for delta-V   | RTN, LVLH, TNW, inertial  |
| **DC\_TYPE**        | Maneuver type                 | IMPULSIVE, CONTINUOUS     |

### MAN\_COMPOSITION — Customizable Data Columns

The `MAN_COMPOSITION` field defines which data columns appear in the maneuver data rows. This allows flexible maneuver specification tailored to the mission needs.

**Common composition fields:**

| Field                                  | Description                            | Typical Units   |
| -------------------------------------- | -------------------------------------- | --------------- |
| **TIME\_ABSOLUTE**                     | Absolute time stamp                    | ISO 8601 string |
| **TIME\_RELATIVE**                     | Time relative to EPOCH\_TZERO          | seconds         |
| **MAN\_DURA**                          | Burn duration                          | seconds         |
| **MAN\_DV\_1, MAN\_DV\_2, MAN\_DV\_3** | Delta-V components                     | km/s            |
| **THR\_X, THR\_Y, THR\_Z**             | Thrust components                      | Newtons         |
| **THR\_MAG**                           | Thrust magnitude                       | Newtons         |
| **THR\_ISP**                           | Specific impulse                       | seconds         |
| **DELTA\_MASS**                        | Mass change (negative for consumption) | kg              |
| **THR\_EFFICIENCY**                    | Thruster efficiency                    | 0.0 to 1.0      |

<Warning>
  The order of fields in MAN\_COMPOSITION must exactly match the order of data columns in subsequent maneuver data rows. Units must be specified in MAN\_UNITS in the same order.
</Warning>

### Maneuver Chaining

OCM supports maneuver sequences through **MAN\_PREV\_ID** and **MAN\_NEXT\_ID**, enabling:

* Maneuver dependency tracking
* Sequence validation
* Mission timeline reconstruction

## Perturbation Parameters

Define the force model configuration for orbit propagation:

```
PERT_START
ATMOSPHERIC_MODEL       = NRLMSISE00
GRAVITY_MODEL           = EGM-96: 70D 70O
EQUATORIAL_RADIUS       = 6378.137 [km]
GM                      = 398600.4415 [km**3/s**2]
N_BODY_PERTURBATIONS    = SUN, MOON
SOLAR_RAD_PRESSURE      = YES
SOLID_EARTH_TIDES       = YES
OCEAN_TIDES             = YES
THIRD_BODY_GRAVITY      = YES
PERT_STOP
```

### Perturbation Parameters

| Parameter                  | Description                          | Example Values                      |
| -------------------------- | ------------------------------------ | ----------------------------------- |
| **ATMOSPHERIC\_MODEL**     | Atmospheric density model            | NRLMSISE00, JB2008, Harris-Priester |
| **GRAVITY\_MODEL**         | Geopotential model with degree/order | EGM-96: 70D 70O, WGS84: 8D 8O       |
| **GM**                     | Gravitational parameter              | 398600.4415 km³/s²                  |
| **N\_BODY\_PERTURBATIONS** | Third-body perturbations             | SUN, MOON, JUPITER                  |
| **SOLAR\_RAD\_PRESSURE**   | Include SRP                          | YES, NO                             |
| **SOLID\_EARTH\_TIDES**    | Include solid Earth tides            | YES, NO                             |
| **OCEAN\_TIDES**           | Include ocean tides                  | YES, NO                             |

<Info>
  Perturbation parameters ensure the receiving system can accurately propagate the orbit using the same force model configuration as the originating system.
</Info>

## User-Defined Parameters

OCM allows custom parameters for mission-specific data:

```
USER_START
USER_PARAM_1 = MISSION_PHASE
USER_VALUE_1 = OPERATIONAL
USER_PARAM_2 = BATTERY_SOC
USER_VALUE_2 = 87.5 [%]
USER_PARAM_3 = CONTACT_FREQUENCY
USER_VALUE_3 = 2.2e9 [Hz]
USER_STOP
```

<Warning>
  User-defined parameters should be used sparingly and documented in Interface Control Documents (ICDs). Their meaning must be clearly communicated to all parties exchanging the OCM file.
</Warning>

## Common Use Cases

* **Comprehensive Mission Planning**: Complete mission state including trajectory, maneuvers, and spacecraft properties
* **Maneuver Sequencing**: Planning and tracking multiple burn sequences
* **Conjunction Data Submission**: Providing detailed orbital information to conjunction assessment services
* **Formation Flying**: Parent-child deployment scenarios and relative state information
* **Mission Handover**: Comprehensive state transfer between control centers
* **Long-Duration Missions**: Time-varying properties (mass, drag coefficient) over mission lifetime
* **High-Fidelity Propagation**: Providing complete force model and spacecraft parameters

<Info>
  Complete definition of the OCM standard in [CCSDS 502.0-B-3](https://ccsds.org/Pubs/502x0b3e1.pdf) specification.
</Info>

## Complete OCM Example

Here is a comprehensive OCM file demonstrating multiple features:

```
CCSDS_OCM_VERS     = 3.0
CREATION_DATE      = 2024-06-15T08:30:00.000
ORIGINATOR         = VALAR

COMMENT Comprehensive mission planning file
COMMENT Includes trajectory, maneuvers, and physical properties

META_START
TIME_SYSTEM        = UTC
EPOCH_TZERO        = 2024-06-15T00:00:00.000
OBJECT_NAME        = SPACECRAFT-GAMMA
INTERNATIONAL_DESIGNATOR = 2024-001A
CATALOG_NAME       = SATCAT
OBJECT_DESIGNATOR  = 59234
REF_FRAME          = EME2000
TRAJ_TYPE          = CARTESIAN
TRAJ_UNITS         = [km, km, km, km/s, km/s, km/s]
META_STOP

COMMENT Initial trajectory state history

TRAJ_START
EPOCH       X           Y           Z           X_DOT       Y_DOT       Z_DOT
+0.000      6655.994    -40218.575  -82.918     3.115482    0.470426    -0.001015
+3600.000   6892.441    -39845.123  -76.234     3.087234    0.501287    -0.000923
+7200.000   7112.873    -39458.892  -69.445     3.058012    0.531456    -0.000831
TRAJ_STOP

COMMENT Spacecraft physical properties

PHYS_START
WET_MASS            = 2000.000 [kg]
DRY_MASS            = 1850.000 [kg]
SRP_CONST_AREA      = 10.000 [m**2]
SOLAR_RAD_COEFF     = 1.300
DRAG_CONST_AREA     = 10.000 [m**2]
DRAG_COEFF_NOM      = 2.300
PHYS_STOP

COMMENT First orbit-raising maneuver

MAN_START
MAN_ID              = RAISE-PERIGEE-1
MAN_BASIS           = PLANNED
MAN_DEVICE_ID       = THRUSTER-MAIN
MAN_PREV_ID         = N/A
MAN_NEXT_ID         = RAISE-APOGEE-1
MAN_REF_FRAME       = RTN
DC_TYPE             = IMPULSIVE
MAN_COMPOSITION     = TIME_ABSOLUTE, MAN_DV_1, MAN_DV_2, MAN_DV_3
MAN_UNITS           = [s, km/s, km/s, km/s]

2024-06-15T09:00:34.100  0.05234000  0.00124500  -0.00012300
MAN_STOP

COMMENT Second orbit-raising maneuver

MAN_START
MAN_ID              = RAISE-APOGEE-1
MAN_BASIS           = PLANNED
MAN_DEVICE_ID       = THRUSTER-MAIN
MAN_PREV_ID         = RAISE-PERIGEE-1
MAN_NEXT_ID         = CIRCULARIZE-1
MAN_REF_FRAME       = RTN
DC_TYPE             = IMPULSIVE
MAN_COMPOSITION     = TIME_ABSOLUTE, MAN_DV_1, MAN_DV_2, MAN_DV_3
MAN_UNITS           = [s, km/s, km/s, km/s]

2024-06-15T21:45:12.300  0.04876000  -0.00087600  0.00023400
MAN_STOP

COMMENT Circularization burn using low-thrust ion propulsion

MAN_START
MAN_ID              = CIRCULARIZE-1
MAN_BASIS           = PLANNED
MAN_DEVICE_ID       = ION-THRUSTER-1
MAN_PREV_ID         = RAISE-APOGEE-1
MAN_NEXT_ID         = N/A
MAN_REF_FRAME       = RTN
DC_TYPE             = CONTINUOUS
MAN_COMPOSITION     = TIME_ABSOLUTE, MAN_DURA, THR_X, THR_Y, THR_Z, THR_ISP, DELTA_MASS
MAN_UNITS           = [s, s, N, N, N, s, kg]

2024-06-16T10:00:00.000  600.0  0.0000  0.0850  0.0000  3200.0  -0.92
2024-06-16T10:10:00.000  600.0  0.0000  0.0850  0.0000  3200.0  -0.92
2024-06-16T10:20:00.000  600.0  0.0000  0.0850  0.0000  3200.0  -0.92
MAN_STOP

COMMENT Perturbation parameters for propagation

PERT_START
ATMOSPHERIC_MODEL       = NRLMSISE00
GRAVITY_MODEL           = EGM-96: 70D 70O
EQUATORIAL_RADIUS       = 6378.137 [km]
GM                      = 398600.4415 [km**3/s**2]
N_BODY_PERTURBATIONS    = SUN, MOON
SOLAR_RAD_PRESSURE      = YES
SOLID_EARTH_TIDES       = YES
OCEAN_TIDES             = NO
PERT_STOP
```

## VALAR Import Requirements

VALAR uses OCM as its file format for importing and exporting maneuver data. When importing an OCM file, VALAR validates several requirements beyond the base CCSDS standard. This section is the canonical reference for all import validation rules.

<Note>
  VALAR uses OCM exclusively for maneuver data. Other OCM sections (trajectory state history, covariance, perturbation parameters, orbit determination, user-defined parameters) are parsed but not imported.
</Note>

### File Requirements

| Requirement           | Details                                                             |
| --------------------- | ------------------------------------------------------------------- |
| **Format**            | OCM (CCSDS 502.0-B-3), KVN notation                                 |
| **Maximum file size** | 10 MB                                                               |
| **Content**           | File must not be empty and must contain at least one maneuver block |

### Required Maneuver Fields

Every maneuver block (`MAN_START` to `MAN_STOP`) must include the following fields:

| Field                     | Requirement                                                                                                                           |
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| `MAN_BASIS`               | **Mandatory.** Accepted values: `PLANNED`, `DETERMINED_TLM`. The value `TELEMETRY` is also accepted as an alias for `DETERMINED_TLM`. |
| `MAN_ID`                  | Must not contain RFC 3986 reserved characters: `! * ' ( ) ; : @ & = + $ , / ? # [ ]`                                                  |
| `MAN_REF_FRAME`           | Required. Must be one of the supported reference frames listed below.                                                                 |
| `THR_X`, `THR_Y`, `THR_Z` | Required in the maneuver composition. At least one thrust component must be non-zero.                                                 |
| `THR_ISP`                 | Required. Specific impulse must be between **50** and **10,000 seconds**. A value of zero is not accepted.                            |

<Warning>
  Specific impulse values outside the 50–10,000 second range will be rejected. This range covers all common propulsion technologies, from cold-gas thrusters (\~50 s) to advanced ion engines (\~10,000 s).
</Warning>

### Physical Properties

Your OCM file must include a physical properties block (`PHYS_START` to `PHYS_STOP`) with the `WET_MASS` field:

```
PHYS_START
WET_MASS = 2000.000 [kg]
PHYS_STOP
```

### Supported Reference Frames

The `MAN_REF_FRAME` field must use one of the following frames.

**Inertial Frames:**

| Frame     | Alias                    |
| --------- | ------------------------ |
| `EME2000` | Also accepted as `J2000` |
| `GCRF`    |                          |
| `ICRF`    |                          |
| `ITRF`    |                          |
| `TOD`     |                          |
| `TEME`    |                          |
| `MOD`     |                          |

**Local Orbital Frames:**

| Frame | Alias                  |
| ----- | ---------------------- |
| `RTN` | Also accepted as `RIC` |
| `TNW` |                        |
| `QSW` | Also accepted as `VNC` |

<Tip>
  If your OCM file uses `J2000`, `VNC`, or `RIC` as the reference frame, VALAR automatically maps them to their canonical equivalents (`EME2000`, `QSW`, and `RTN` respectively).
</Tip>

### Spacecraft Matching

VALAR identifies the target spacecraft from the OCM metadata fields, checked in this order:

1. `OBJECT_NAME` — spacecraft name
2. `INTERNATIONAL_DESIGNATOR` — COSPAR ID (e.g., `2024-001A`)
3. `OBJECT_DESIGNATOR` — NORAD catalog number

The first matching identifier is used to resolve the spacecraft. If none of the identifiers match a spacecraft in your organization, the import will fail.

After resolving the spacecraft, each non-null identifier present in the file is cross-validated against your spacecraft record. The comparison is **case-insensitive**. If any provided identifier does not match, the import is rejected.

<Tip>
  Before importing, verify that the `OBJECT_NAME`, `INTERNATIONAL_DESIGNATOR`, or `OBJECT_DESIGNATOR` in your OCM file matches what is configured on the spacecraft details page in VALAR.
</Tip>

### Consistency Rules

* **Uniform basis:** All maneuvers in a single file must share the same `MAN_BASIS`. For planned maneuver imports, all must be `PLANNED`. For telemetry reports, all must be `TELEMETRY` (or `DETERMINED_TLM`).
* **No temporal overlaps:** Maneuver time ranges within the file must not overlap. Two maneuvers may share a boundary (one ends exactly when the next begins), but their active periods cannot overlap.

### Merge Behavior

When importing maneuvers, two merge strategies are available:

**Update mode:**

* Maneuvers with a `MAN_ID` that already exists in VALAR will replace the existing record. For planned imports, the existing maneuver must be in `PLANNED` status. For telemetry reports, the existing maneuver must be either `PLANNED` or `TELEMETRY`.
* Maneuvers with new IDs must not overlap in time with any existing maneuvers for the same spacecraft.

**Replace mode:**

* All existing maneuvers within the imported time range are removed and replaced by the file contents.

<Warning>
  Replace mode permanently removes existing maneuvers in the imported time range. This action cannot be undone.
</Warning>

### Exporting Maneuvers

* **OCM Export**: Export individual maneuvers or maneuver plans from VALAR as OCM files
* **Multi-Maneuver Support**: Multiple maneuvers are included in a single OCM file
* **Standard Compliance**: Exported OCM files follow CCSDS 502.0-B-3 specification
* **Interoperability**: OCM format enables maneuver plan exchange with external systems and agencies

## Best Practices

### Data Organization

1. **Use EPOCH\_TZERO effectively**: Set to mission start or a significant epoch for cleaner relative times
2. **Include physical properties**: Always provide mass, area, and coefficient data for accurate propagation
3. **Document maneuver sequences**: Use MAN\_PREV\_ID and MAN\_NEXT\_ID to chain related maneuvers

### Maneuver Specification

4. **Choose appropriate DC\_TYPE**: IMPULSIVE for chemical burns, CONTINUOUS for ion/low-thrust
5. **Specify reference frames clearly**: Document whether RTN, LVLH, or other LOF is used
6. **Include all composition fields**: Don't omit important fields like DELTA\_MASS or THR\_ISP

### File Quality

7. **Add comments liberally**: Explain mission phases, maneuver purposes, assumptions
8. **Validate before sharing**: Ensure all referenced IDs exist and data is self-consistent
9. **Use appropriate units**: Follow CCSDS conventions and specify units explicitly in MAN\_UNITS

### Interoperability

10. **Minimize user-defined parameters**: Use standard fields whenever possible
11. **Document extensions**: If using USER blocks, provide clear documentation in ICDs
12. **Test round-trip**: Verify OCM can be imported and re-exported without data loss

## Comparison with Other Formats

| Feature             | OCM                           | OPM             | OEM                | TDM                |
| ------------------- | ----------------------------- | --------------- | ------------------ | ------------------ |
| Data Type           | Comprehensive                 | Single state    | Ephemeris          | Observations       |
| Temporal Scope      | Time series + snapshots       | Single epoch    | Time series        | Observation period |
| Maneuvers           | Multiple (full specification) | One impulsive   | None               | None               |
| Physical Properties | Extensive                     | Basic           | None               | None               |
| Covariance          | Time-varying                  | Optional single | Optional per epoch | None               |
| Perturbations       | Force model specification     | None            | None               | None               |
| Use Case            | Mission planning              | State exchange  | Trajectory sharing | OD input           |
| Complexity          | High                          | Low             | Medium             | Medium             |

## When to Use OCM

**Use OCM when you need:**

* Multiple maneuvers in a single file
* Time-varying spacecraft properties (mass, drag coefficient)
* Complete force model specification for propagation
* Maneuver sequencing and dependencies
* Parent-child deployment scenarios
* Comprehensive mission state exchange

**Use OPM instead when:**

* Sharing a simple single-epoch state vector
* Only one maneuver needs to be specified
* Simplicity and minimal file size are priorities

**Use OEM instead when:**

* Providing pre-computed ephemeris for interpolation
* No maneuvers or physical properties needed
* Standard trajectory exchange format expected
