Files
bodyshop/server/integrations/partsManagement/sampleData/schemaDataAdd.md

432 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Awesome — thanks for the dumps. I pulled the structures directly from the XSDs you uploaded and
focused on **`VehicleDamageEstimateAddRq`** and the graph of types it depends on. Below is a
developer-grade map you can hand to a coding agent.
---
# What it is & where it lives
* **Global element**: `VehicleDamageEstimateAddRq`
* **Namespace**: `http://www.cieca.com/BMS` (default ns in your files)
* **Defined in**: `BMSEstimateMessages_2024R1_V6.9.0.xsd`
* **Type**: `EstimateRqType` (from `BMSEstimateCommonTypes_2024R1_V6.9.0.xsd`)
* **Service group** (where this message is accepted): `EstimateService` in
`BMSEstimateService_2024R1_V6.9.0.xsd`
Includes: `PropertyDamageEstimateAddRq/Rs`, `VehicleDamageEstimateAddRq/Rs`,
`VehicleDamageEstimateChgRq/Rs`, `VehicleDamagePhotoEstimateAddRq/Rs`.
---
# Top-level schema (for `VehicleDamageEstimateAddRq` → `EstimateRqType`)
`EstimateRqType` **extends** `MessageHeaderType` (from `BMSCommonGlobalTypes_2024R1_V6.9.0.xsd`) and
then adds the following sequence. Ive marked **required** vs *optional* and multiplicity:
**Header (inherited from `MessageHeaderType`):**
* **`RqUID`** (UUID) — **required**
* `AsyncRqUID` (UUID) — *optional*
* `PartnerKey` (Identifier) — *optional*
**Body (from `EstimateRqType`):**
* `SvcProviderName` (Identifier) — *optional*
* `RefClaimNum` (Char\_50) — *optional*
* **`DocumentInfo`** (`DocumentInfoType`) — **required, 1**
* **`ApplicationInfo`** (`ApplicationInfoType`) — **required, 1..**\*
* `EventInfo` (`EventInfoType`) — *optional*
* **`AdminInfo`** (`AdminInfoType`) — **required**
* **`EstimatorIDs`** (`EstimatorIDsTypeType`) — **required**
* `ClaimInfo` (`ClaimInfoType`) — *optional*
* **`VehicleInfo`** (`VehicleInfoType`) **OR** `PropertyInfo` (`PropertyInfoType`) — **choice**
for vehicle, use **`VehicleInfo`**
* **`ProfileInfo`** (`ProfileInfoType`) — **required**
* **`DamageLineInfo`** (`DamageLineInfoType`) — **required, 1..**\* (line items)
* `CalibrationInfo` (`CalibrationInfoType`) — *optional, 0..*
* `ScanInfo` (`ScanInfoType`) — *optional, 0..*
* `FileAttachment` (`FileAttachmentType`) — *optional*
* `NonNewOEMPartInd` (Boolean) — *optional*
* `StorageDuration` (Integer\_Range\_0-999) — *optional*
* **`RepairTotalsInfo`** (`RepairTotalsInfoType`) — **required, 1..**\*
* `RepairTotalsHistory` (`RepairTotalsHistoryType`) — *optional, 0..*
* `PaymentInfo` (`PaymentInfoType`) — *optional*
* `EstimateMemo` (C) — *optional*
* `AdministrativeMemo` (C) — *optional*
* `Disclaimers` (C) — *optional*
* `CustomMemo` (C) — *optional*
* `CustomPrintImage` (C) — *optional*
* `OtherMemos` (`OtherMemosType`) — *optional, 0..*
**Files involved:**
`BMSEstimateMessages_2024R1_V6.9.0.xsd`, `BMSEstimateCommonTypes_2024R1_V6.9.0.xsd`,
`BMSCommonGlobalTypes_2024R1_V6.9.0.xsd`, `BMSSimpleTypes_2024R1_V6.9.0.xsd` + code lists XSDs for
enums.
---
# Key dependent types (immediate children youll actually populate)
Below are the **first-level** structures youll typically use. Ive trimmed to the practical fields;
each type has many optional parties and details you can ignore for a minimal AddRq.
## `DocumentInfoType` (BMSCommonGlobalTypes)
Typical header metadata:
* **`BMSVer`** (`BMSVersionClosedEnumType`) — e.g. **`6.9.0`**
* **`DocumentType`** (`DocumentTypeClosedEnumType`) — code for message family (e.g. `E` for
estimate; codelists provide the letter codes)
* `DocumentSubType` (`DocumentSubTypeClosedEnumType`) — e.g. “Original Estimate”, “Copy”, etc.
* `DocumentID` (Char\_50) — your ID
* `VendorCode` (VendorCodeOpenEnumType) — optional
* `DocumentVer` (`DocumentVerType`) — versioning container (0..\*)
* **`CreateDateTime`** (DateTime)
* `TransmitDateTime` (DateTime)
* `ReferenceInfo` (`RefInfoType`) — links to prior docs
* `CountryCode`, `CurrencyInfo`, `CultureCode` — optional locale bits
## `ApplicationInfoType` (BMSCommonGlobalTypes) **(1..\*)**
* **`ApplicationType`** (`ApplicationTypeClosedEnumType`) — e.g., Estimator, Shop Mgmt, etc.
* **`ApplicationName`** (Char\_30)
* **`ApplicationVer`** (Char\_12)
* `DatabaseVer` (Char\_12)
* `DatabaseDateTime` (DateTime)
## `AdminInfoType` (BMSCommonGlobalTypes)
Large party/role roster; **all child elements are optional**, but the container itself is required.
Common ones:
* `InsuranceCompany` (`InsuranceCompanyType`)
* `PolicyHolder` (`PolicyHolderType`)
* `Insured` / `Owner` / `Customer` (`GenericPartyType`)
* `Claimant` (`ClaimantType`)
* `Estimator` (0..\*) (`EstimatorType`)
* `RepairFacility` (`RepairFacilityType`)
* `RentalProvider`, `TowCompany`, `Lender`, `Lienholder` (0..\*), etc.
(You can send `<AdminInfo/>` if you dont need parties; it validates.)
## `EstimatorIDsTypeType` (BMSEstimateCommonTypes)
* `OriginalEstimatorID` (Char\_40) — optional
* `EstimatorHistory` (0..\*) → `EstimatorHistoryType` ⇒ (`DocumentVerCode`, `DocumentVerNum`)
## `ClaimInfoType` (BMSCommonGlobalTypes) *(optional)*
* `ClaimNum` (Char\_50)
* `PolicyInfo` (0..\*) (`PolicyInfoType`)
* `LossInfo` (`LossInfoType`) — details on loss/time/location/coverage
* `AdditionalIDInfo` (0..\*) (`IDInfoType`)
* `ClaimStatus`, `PreviousPaymentAmt`, `ClaimMemo`, etc.
## `VehicleInfoType` (BMSCommonGlobalTypes) *(choose this over PropertyInfo)*
* `VINInfo` (0..\*) (`VINInfoType`) → **choice** of `VINAvailabilityCode` or one or more `VIN` (
`VINType`)
* `License` (`LicenseType`)
* `VehicleDesc` (`VehicleDescType`) — **ModelYear**, **MakeDesc/MakeCode**, **ModelName/ModelNum**,
`VehicleType`, etc.
* `Paint`, `Body`, `Powertrain`, `Condition`, `Valuation`, `VehicleMemo`
* `PolicyVehicleNum`, `LossVehicleNum`
* `FileAttachment` (`FileAttachmentType`)
* `CustomElement` (0..\*)
* `UnitNum` (Char\_20)
> Note: `VINType` is referenced but its concrete restriction is provided elsewhere in BMS; you can
> treat it as a VIN string (17-char typical) and your validator will enforce the real facet.
## `ProfileInfoType` (BMSEstimateCommonTypes) **required**
Controls rates, tax, and rules used to compute totals:
* `ProfileName` (Char\_40)
* **`RateInfo`** (1..\*) (`RateInfoType`)
* `RateType` (`RateTypeClosedEnumType`) — e.g., BODY\_LABOR, PAINT\_LABOR, MECHANICAL\_LABOR,
MATERIAL, etc.
* `RateTierInfo` / `RateTierHistory` (0..\*)
* `TaxableInd`, `TaxRate`, `AdjustmentInfo` (0..*), `TaxInfo` (0..*)
* `MaterialCalcSettings` (optional)
* `AlternatePartInfo` (0..*), `PartCertification` (0..*), `RefinishCalcSettings`,
`PreTaxDiscountRate`, `TaxExemptInfo` (0..\*), `CanadianTax` (for CA specifics)
## `DamageLineInfoType` (BMSEstimateCommonTypes) **1..**\*
One per estimate line. Core children:
* `LineNum`, `UniqueSequenceNum`, `ParentLineNum` (hierarchy)
* `ManualLineInd`, `AutomatedEntry`, `LineStatusCode`
* `LineDesc`, `LineDescCode`
* `SubletInfo` (`SubletInfoType`)
* `PartInfo` (0..\*) (`PartInfoType`)
* `LaborInfo` (`LaborInfoType`)
* `RefinishLaborInfo` (`LaborInfoType`)
* `MaterialType`, `OtherChargesInfo`, `WhoPays`
* `LineAdjustment`, `AppliedAdjustment`
* `PDRInfo`, `LineType`, `LineMemo`, `VendorRefNum` (0..\*)
**`PartInfoType`** highlights:
* `PartMaterialCode`, `PartType`, `LineItemCategoryCode`
* `PartDesc`, `PartNum`, `OEMPartNum`
* `NonOEM` (0..\*) (`NonOEMType`) — alternate sources/quality
* `ListPrice`, `PartPrice`, `UnitPartPrice`, `TotalPartPrice`, `OEMPartPrice`
* `PriceAdjustment` (0..\*) (`PriceAdjustmentType`)
* `TaxableInd`, `AppliedTaxes`
* `CertificationType` (0..\*), `AlternatePartInd`, `GlassPartInd`
* `Quantity`, `PartStatus`, `Dimensions`, `Glass*`, `QuotedPartList`
**`LaborInfoType`** highlights:
* **`LaborType`** (`LaborTypeClosedEnumType`) — **required**
* `LaborOperation`, `LaborHours`, `LaborHourlyRate`, `LaborAmt`
* `DatabaseLaborType/Hours/Amt`
* `LaborAdjustment` (0..\*)
* Judgment/flags (e.g., `LaborAmtJudgmentInd`, `OverlapInd`)
* Paint-specific fields (`PaintStagesNum`, `PaintTonesNum`)
* `AssemblyLaborCode`
## `CalibrationInfoType` / `ScanInfoType` (BMSEstimateCommonTypes)
* **`ScanInfoType`**: `ScanDetailsList` (optional), `FileAttachment` (optional), `ScanTool`,
`ScanDateTime` (**required**), flags `CleanScanInd`, `FollowUpInd`, plus `Technician`.
* **`CalibrationInfoType`**: optional lists for details & technicians, plus process flags (
`PrerequisitesMetInd`, `ProceduresFollowedInd`, `ADASReviewedWithOwnerInd`).
## `FileAttachmentType` (BMSCommonGlobalTypes)
* `DocAttachment` (0..\*) (`DocAttachmentType`)
* `AttachmentType` (open enum)
* `AttachmentTitle` **or** `AttachmentMemo`
* `AttachmentFileType`, `AttachmentFileName`, `AttachmentLength`
* **One of:** `AttachmentURI` **or** `EmbeddedAttachmentType`
* `EmbeddedAttachmentType`**choice**: `EmbeddedAttachment` (Binary) **or**
`EmbeddedAttachmentText` (C)
* `AttachmentIntegrity` (0..\*) (optionally includes Binary integrity blobs)
* `AttachmentStatusCode` (open enum)
## `RepairTotalsInfoType` (BMSEstimateCommonTypes) **1..**\*
* `LaborTotalsInfo` (0..\*) (`TotalsInfoType`)
* `PartsTotalsInfo` (0..\*) (`TotalsInfoType`)
* `OtherChargesTotalsInfo` (0..\*) (`TotalsInfoType`)
* `NumOfDamageLines` (optional)
* **`SummaryTotalsInfo`** (1..\*) (`TotalsInfoType`) — your rolled-up totals
* `RepairTotalsType` (`LineTypeClosedEnumType`) — optional (e.g., gross vs. customer-pay segments)
**`TotalsInfoType`** (BMSCommonGlobalTypes) highlights:
* **`TotalType`** (`TotalTypeOpenEnumType`) — category (e.g., LABOR, PARTS, TAX, GRAND\_TOTAL,…)
* `TotalSubType` (open enum)
* **`TotalTypeDesc`** (Char\_30)
* Hours quantities & units, item quantity, unit price
* Detailed `TotalTaxInfo` / `TotalAdjustmentInfo` (0..\*)
* Amounts: `NonTaxableAmt`, `TaxableAmt`, `TaxTotalAmt`, `OtherCharges*`, **`TotalAmt`**,
`TotalPct`, `TotalCost`
* `AmtDueInfo` (0..\*)
## `RepairTotalsHistoryType` (BMSEstimateCommonTypes)
* Version stamp and one or more `HistoryTotalsInfo` entries.
## `PaymentInfoType` (BMSCommonGlobalTypes) *(optional)*
* `PayerType`, `PaymentType`
* `Payee`/`PayerInfo`/`PayeeInfo`
* `PaymentDateTime`, **`PaymentAmt`**
* `PaymentID`, `PaymentMemo`, `PaymentAmtType`
## `OtherMemosType` (BMSCommonGlobalTypes)
* `OtherMemoRef` (open enum), `OtherMemo` (C)
---
# Minimal, schema-valid XML skeleton (vehicle path)
> Uses only **required** containers/fields; values shown as **PLACEHOLDER**.
> You must add at least one **DamageLineInfo** and one **SummaryTotalsInfo** item, and at least one
**RateInfo** inside **ProfileInfo**.
> Enumerations are *code lists*; use valid codes from your system.
```xml
<VehicleDamageEstimateAddRq xmlns="http://www.cieca.com/BMS">
<!-- MessageHeaderType -->
<RqUID>00000000-0000-0000-0000-000000000000</RqUID>
<!-- EstimateRqType sequence -->
<DocumentInfo>
<BMSVer>6.9.0</BMSVer>
<DocumentType>E</DocumentType>
<CreateDateTime>2025-08-14T12:00:00Z</CreateDateTime>
</DocumentInfo>
<ApplicationInfo>
<ApplicationType>INSERT_APP_TYPE</ApplicationType>
<ApplicationName>INSERT_APP_NAME</ApplicationName>
<ApplicationVer>INSERT_APP_VER</ApplicationVer>
</ApplicationInfo>
<AdminInfo/> <!-- container required; children optional -->
<EstimatorIDs/> <!-- container required; children optional -->
<!-- choice: VehicleInfo OR PropertyInfo -->
<VehicleInfo>
<!-- minimally empty is allowed; typical payload would include VIN and Year/Make/Model -->
<!-- Example:
<VINInfo>
<VIN>1HGBH41JXMN109186</VIN>
</VINInfo>
<VehicleDesc>
<ModelYear>2020</ModelYear>
<MakeDesc>Honda</MakeDesc>
<ModelName>Civic</ModelName>
</VehicleDesc>
-->
</VehicleInfo>
<ProfileInfo>
<!-- at least one RateInfo required -->
<RateInfo>
<RateType>INSERT_RATE_TYPE</RateType>
<!-- optional: <RateDesc>Body Labor</RateDesc> <TaxRate>13.00</TaxRate> etc. -->
</RateInfo>
</ProfileInfo>
<!-- at least one DamageLineInfo -->
<DamageLineInfo>
<!-- minimal: include a LaborInfo with required LaborType -->
<LaborInfo>
<LaborType>INSERT_LABOR_TYPE</LaborType>
<!-- optional: <LaborHours>1.0</LaborHours> <LaborHourlyRate>85.00</LaborHourlyRate> -->
</LaborInfo>
</DamageLineInfo>
<!-- at least one RepairTotalsInfo with at least one SummaryTotalsInfo -->
<RepairTotalsInfo>
<SummaryTotalsInfo>
<TotalType>INSERT_TOTAL_TYPE</TotalType>
<TotalTypeDesc>Grand Total</TotalTypeDesc>
<TotalAmt>0.00</TotalAmt>
</SummaryTotalsInfo>
</RepairTotalsInfo>
</VehicleDamageEstimateAddRq>
```
---
# Implementation notes & gotchas (important)
1. **Required containers vs. required content**
* `AdminInfo` and `EstimatorIDs` are **required containers** but their **children are optional**.
Empty elements validate.
* `ProfileInfo` is required and must include **≥1 `RateInfo`** with a `RateType`.
* You must include the **choice** of **`VehicleInfo`** (for this message) instead of `PropertyInfo`.
* Include **≥1 `DamageLineInfo`** and **≥1 `RepairTotalsInfo`** each containing *
*≥1 `SummaryTotalsInfo`**.
2. **Header**
* `RqUID` is required; use a real UUID.
3. **Enumerations / code lists**
* Many fields are `ClosedEnumType`/`OpenEnumType` and validated against the BMS code list XSDs you
included (e.g., `BMSCodeLists_*.xsd`). Use the exact code values your trading partner expects (
e.g., `DocumentType` = `E` for estimates).
* `BMSVer` supports `6.9.0`.
4. **Line hierarchy**
* For nested kits/assemblies, use `ParentLineNum`; `UniqueSequenceNum` helps ordering. `LineType`
can label grouping (e.g., Sublet, Labor, Part, etc.).
5. **Attachments**
* You can embed binary (`EmbeddedAttachmentType/EmbeddedAttachment`) **or** provide a URI (
`AttachmentURI`). Provide `AttachmentFileType` and `AttachmentFileName` either way.
6. **Scans & calibrations**
* If you include `ScanInfo`, it **requires** `ScanTool` and `ScanDateTime`. Calibrations are
optional but provide strong ADAS traceability.
7. **Totals integrity**
* `RepairTotalsInfo/SummaryTotalsInfo` acts as your roll-up. Ensure it reconciles with the sum of
`DamageLineInfo` components and the profiles rates/taxes so consumers dont reject on mismatches.
8. **Currency / numeric facets**
* Monetary fields use `Currency`. Hours/rates/quantities have explicit facets (e.g.,
`Decimal_Range_-999.9-999.9`). Stay within ranges.
9. **Canada specifics**
* `DocumentInfo/CountryCode` = `CA`, and `ProfileInfo/CanadianTax` is available for PST/HST/GST
modeling if you need to encode tax policy explicitly.
---
# Quick field checklist for a typical *valid* “vehicle add” youll generate
* **Header**
* `RqUID`
* **Doc header**
* `DocumentInfo/BMSVer` = `6.9.0`
* `DocumentInfo/DocumentType` = `E`
* `DocumentInfo/CreateDateTime`
* **App**
* `ApplicationInfo[1..*]/(ApplicationType, ApplicationName, ApplicationVer)`
* **Admin**
* `<AdminInfo/>` (or populate parties) ✅
* **EstimatorIDs**
* `<EstimatorIDs/>` (or add contents) ✅
* **Vehicle**
* `VehicleInfo` (VIN + YMM recommended) ✅
* **Profile & rates**
* `ProfileInfo/RateInfo[1..*]/RateType`
* **Lines**
* `DamageLineInfo[1..*]` with at least one `LaborInfo/LaborType` or `PartInfo`
* **Totals**
* `RepairTotalsInfo[1..*]/SummaryTotalsInfo[1..*]/(TotalType, TotalTypeDesc, TotalAmt)`
---
# Pointers to definitions in your bundle (for traceability)
* `VehicleDamageEstimateAddRq` element → `BMSEstimateMessages_2024R1_V6.9.0.xsd`
* `EstimateRqType``BMSEstimateCommonTypes_2024R1_V6.9.0.xsd`
* `MessageHeaderType`, `DocumentInfoType`, `VehicleInfoType`, `FileAttachmentType`,
`PaymentInfoType`, etc. → `BMSCommonGlobalTypes_2024R1_V6.9.0.xsd`
* Rates/lines/totals/calibration/scan subtypes → mostly `BMSEstimateCommonTypes_2024R1_V6.9.0.xsd`
* Enums/code lists → `BMSCodeLists_ClassicCode_2024R1_V6.9.0.xsd`,
`BMSCodeLists_CodeExt_2024R1_V6.9.0.xsd`
* Service wrapper (which messages are valid to send/receive) →
`BMSEstimateService_2024R1_V6.9.0.xsd`
---