Many enterprise systems rely on filebased data exchange to move large volumes of information between applications. Three of the most common proprietary formats you will encounter are MJO, LTO and RJO. Although they serve different business domainsmaintenance job orders, logistics transport orders, and resource job ordersthey share a similar structure and typical import workflow. This page explains what each file type is, how to recognise them, the steps required to import them safely, and some bestpractice tips to avoid common pitfalls.
An MJO file contains a list of scheduled maintenance tasks for equipment or facilities. It is generated by Computerised Maintenance Management Systems (CMMS) and usually includes:
LTO files are exchanged between Warehouse Management Systems (WMS) and Transportation Management Systems (TMS). The file holds data for a single or batch of shipments, such as:
RJO files are used in projectbased environments where resources (people, machines, licences) are allocated to tasks. Typical fields include:
Although the business purpose differs, MJO, LTO and RJO files usually share these technical traits:
| Characteristic | Typical Value |
|---|---|
| File extension | .mjo, .lto, .rjo |
| Encoding | UTF8 or ISO88591 |
| Delimiter | Comma (CSV) or pipe (|) rarely tabdelimited |
| Header row | Present column names in upper case |
| Record separator | CRLF (Windows) or LF (Unix) |
Key validation rules
Sample SQL staging table
CREATE TABLE dbo.Stg_MJO ( JobID varchar(20) NOT NULL, Description varchar(250), AssetTag varchar(30) NOT NULL, PlannedStart datetime NOT NULL, PlannedFinish datetime NOT NULL, LabourHours decimal(6,2) NOT NULL, PriorityCode char(1), SourceFile varchar(100) NOT NULL, ImportDateTime datetime DEFAULT GETDATE());
After loading the staging table, call a procedure such as sp_ProcessMJOImport that performs the business logic and moves validated rows to dbo.MaintenanceJobs.
Typical pitfalls
Sample transformation using Python (optional)
import pandas as pddf = pd.read_csv('incoming.lto', delimiter='|')df['WeightKg'] = df['Weight'].apply(lambda x: round(float(x) * 0.453592, 2))df['CarrierID'] = df['CarrierCode'].map(carrier_map)df.to_sql('Stg_LTO', con=engine, if_exists='append', index=False) RJO imports tend to be the most complex because they involve manytomany relationships (resources tasks). A common approach is to split the file into two staging tables:
Stg_RJO_Tasks one row per task.Stg_RJO_Allocations one row per resourcetask allocation.Business rule examples:
Implement a central ImportLog table that captures:
Example:
CREATE TABLE dbo.ImportLog ( LogID int IDENTITY PRIMARY KEY, FileName varchar(200), FileType char(3), -- MJO/LTO/RJO StartedAt datetime, CompletedAt datetime, TotalRows int, SuccessRows int, ErrorRows int, Remarks varchar(500));
Most organisations schedule imports during lowtraffic windows. Tools you might use:
#!/bin/bash# Simple import orchestrator for MJO/LTO/RJO filesIN_DIR="/data/incoming"ARCHIVE_DIR="/data/archive"LOG_DIR="/data/logs"for file in "$IN_DIR"/*.{mjo,lto,rjo}; do [ -e "$file" ] || continue TYPE=$(echo "${file##*.}" | tr '[:lower:]' '[:upper:]') echo "$(date +%F%T) Starting $TYPE import: $file" >> "$LOG_DIR/import.log" # Validate checksum (assumes .sha256 file exists) sha256sum -c "${file}.sha256" >/dev/null 2>&1 if [ $? -ne 0 ]; then echo "Checksum failed for $file" >> "$LOG_DIR/error.log" continue fi # Call the appropriate Python/SQL script case $TYPE in MJO) python3 import_mjo.py "$file" ;; LTO) python3 import_lto.py "$file" ;; RJO) python3 import_rjo.py "$file" ;; esac rc=$? if [ $rc -eq 0 ]; then mv "$file" "$ARCHIVE_DIR/$(basename "$file").$(date +%Y%m%d%H%M%S)" echo "$(date +%F%T) Completed $TYPE import successfully." >> "$LOG_DIR/import.log" else echo "$(date +%F%T) $TYPE import failed with code $rc." >> "$LOG_DIR/error.log" fidone Importing MJO, LTO, and RJO files follows a repeatable pattern: receive, validate, transform, stage, process, and archive. By standardising each stage, using staging tables, and maintaining detailed logs, organisations can minimise errors, keep audit trails, and ensure that critical maintenance, logistics and resource data flow smoothly into their enterprise systems.
For deeper technical references, consult the integration guides of your specific CMMS, WMS, or ERP platform, and always test new import logic in a sandbox before promoting to production.
