# Rome – Update Body Shop Management Repair Order (v1.6, Jan 2016) — Full Synapse

**Purpose**
This interface allows a Body Shop Management (BSM) system to update an existing *Repair Order (RO)* in the Reynolds & Reynolds DMS. It covers updates to general RO details, labor operations, parts, GOG (gas, oil, grease) items, and miscellaneous charges .

---

## 🧩 Core Workflow

1. **BSM System → RCI Gateway → Reynolds DMS**

   * BSM sends a SOAP/XML request (`rey_RomeUpdateBSMRepairOrderReq`) to RCI.
   * DMS validates and processes the update.
   * DMS replies with `rey_RomeUpdateBSMRepairOrderResp`.

2. **Supported updates**

   * Comments, tax codes, and estimate type.
   * Labor operation details (e.g., billing rates, opcodes).
   * Parts (add, delete, modify).
   * GOG and Misc items with financial attributes.

---

## 🧱 Request Structure — `rey_RomeUpdateBSMRepairOrderReq`

| Section             | Description                                                                  |                                                                |
| ------------------- | ---------------------------------------------------------------------------- | -------------------------------------------------------------- |
| **ApplicationArea** | Identifies sender (`Rome/RCI`), creation time, and destination dealer/store. |                                                                |
| **RoRecord**        | Main data payload, with attribute `FinalUpdate="Y                            | N"`. Includes general, labor, part, GOG, and misc subsections. |

### RoRecord subsections

* **Rogen:** Header data — `RoNo`, `CustNo`, `TagNo`, mileage, and optional `RoCommentInfo`, `EstimateInfo`, and `TaxCodeInfo`.
* **Rolabor:** One or more `OpCodeLaborInfo` nodes containing:

  * `OpCode`, `JobNo`, and pay type flags (`Cust`, `Intr`, `Warr`).
  * Nested `BillTimeRateHrs`, `CCCStmts` (Cause/Complaint/Correction), and `RoAmts` (billing amounts).
* **Ropart:** Job-linked `PartInfoByJob` with `OSDPartDetail` items.
* **Rogog:** “Gas/Oil/Grease” lines (`AllGogOpCodeInfo` → `AllGogLineItmInfo`).
* **Romisc:** Miscellaneous charge sections (`MiscOpCodeInfo` → `MiscLineItmInfo`).

---

## 📤 Response Structure — `rey_RomeUpdateBSMRepairOrderResp`

| Element             | Description                                                                              |                                   |
| ------------------- | ---------------------------------------------------------------------------------------- | --------------------------------- |
| **ApplicationArea** | Mirrors the request metadata (sender now `ERA/RR`).                                      |                                   |
| **GenTransStatus**  | `Status="Success                                                                         | Failure"`and numeric`StatusCode`. |
| **RoRecordStatus**  | Attributes include `Status`, `Date`, `Time`, `OutsdRoNo`, `DMSRoNo`, and `ErrorMessage`. |                                   |

---

## ⚙️ Key Return Codes

| Code   | Meaning                |
| ------ | ---------------------- |
| `0`    | Success                |
| `300`  | RO not found           |
| `301`  | Invalid RO number      |
| `501`  | Invalid tax code       |
| `503`  | Invalid opcode         |
| `9999` | Undefined system error |

---

## 🧩 Implementation Notes

* **FinalUpdate="Y"** signals the RO is finalized in the DMS.
* The DMS uses **RO#, Dealer#, and Store#** to locate the target record.
* **JobNo** groups labor and parts within the same operation.
* Monetary and tax fields are sent as strings (DMS expects implicit decimal).
* Every RO update must be uniquely identified by a **BODId** (GUID).
* Validation failures trigger a response with `Status="Failure"` and `ErrorMessage` populated.

