diff --git a/server/rr/lib/index.cjs b/server/rr/lib/index.cjs
index 9f616745c..0ce01ade9 100644
--- a/server/rr/lib/index.cjs
+++ b/server/rr/lib/index.cjs
@@ -1 +1 @@
-"use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function t({routing:e={},sender:t={},creationDateTime:r,bodId:n}={}){const o={Sender:{Component:t.component??"Rome",Task:t.task??"CU",ReferenceId:t.referenceId??"Query",CreatorNameCode:t.creator??"RCI",SenderNameCode:t.senderName??"RCI"},CreationDateTime:r??(new Date).toISOString().replace(/\.\d{3}Z$/,"Z"),BODId:n??L.v4(),Destination:{DestinationNameCode:"RR",DealerNumber:e.dealerNumber||"",StoreNumber:e.storeNumber||"",AreaNumber:e.areaNumber||""}},a={bod:"{{#BODId}}{{BODId}}{{/BODId}}",creation:"{{CreationDateTime}}",sender:"\n \n {{Sender.Component}}\n {{Sender.Task}}\n {{#Sender.ReferenceId}}{{Sender.ReferenceId}}{{/Sender.ReferenceId}}\n {{#Sender.CreatorNameCode}}{{Sender.CreatorNameCode}}{{/Sender.CreatorNameCode}}\n {{#Sender.SenderNameCode}}{{Sender.SenderNameCode}}{{/Sender.SenderNameCode}}\n ".trim(),dest:"\n \n {{Destination.DestinationNameCode}}\n {{#Destination.DealerNumber}}{{Destination.DealerNumber}}{{/Destination.DealerNumber}}\n {{#Destination.StoreNumber}}{{Destination.StoreNumber}}{{/Destination.StoreNumber}}\n {{#Destination.AreaNumber}}{{Destination.AreaNumber}}{{/Destination.AreaNumber}}\n ".trim()},s=`\n${["bod","creation","sender","dest"].map(e=>a[e]).join("\n")}\n`;return B.default.render(s,o).trim()}function r(e,t=2){const r=" ".repeat(t);return String(e).split("\n").map(e=>e.length?r+e:e).join("\n")}function n(e){return String(e??"").replace(/&/g,"&").replace(//g,">")}function o(e,t){if(null==e)return null;if(Array.isArray(e)){for(const r of e){const e=o(r,t);if(null!=e)return e}return null}if("object"!=typeof e)return null;for(const[r,n]of Object.entries(e)){if(t(r,n))return n;const e=o(n,t);if(null!=e)return e}return null}function a(e,t,r=[]){if(null==e)return r;if(Array.isArray(e)){for(const n of e)a(n,t,r);return r}if("object"!=typeof e)return r;for(const[n,o]of Object.entries(e))t(n,o)&&r.push(o),a(o,t,r);return r}function s(e){return null==e?[]:Array.isArray(e)?e:[e]}function i(e,t){if(e&&"object"==typeof e)return function(e){if(null!=e)return"string"==typeof e||"number"==typeof e||"boolean"==typeof e?String(e):"object"==typeof e&&"#text"in e?String(e["#text"]):void 0}(e[t])}function l(e,t){const r=i(e,t);if(W(r))return r;const n=function(e,t){if(e&&"object"==typeof e)return e.$&&W(e.$[t])?e.$[t]:W(e[`@_${t}`])?e[`@_${t}`]:W(e[`@${t}`])?e[`@${t}`]:e._attributes&&W(e._attributes[t])?e._attributes[t]:e.attributes&&W(e.attributes[t])?e.attributes[t]:void 0}(e,t);return W(n)?n:void 0}function c(e,t){if(e&&"object"==typeof e)return null!=e[`@_${t}`]?e[`@_${t}`]:void 0}function m(e){if(null!=e){if("string"==typeof e)return e;if("number"==typeof e)return String(e);if("object"==typeof e){if(null!=e._)return String(e._);if(null!=e["#text"])return String(e["#text"]);if(null!=e.text)return String(e.text)}}}function u(e){return a(e,e=>/(GenTransStatus|TransStatus)$/i.test(e)).flatMap(s)[0]}function p(e){if(e)return{status:(c(e,"Status")||e.Status||m(e)||"").toString().trim()||void 0,statusCode:(c(e,"StatusCode")||e.StatusCode||"").toString().trim()||void 0,message:e.Message&&m(e.Message)||e.GenTransStatus&&m(e.GenTransStatus)||e.TransStatus&&m(e.TransStatus)||m(e)||void 0}}function d(e){if(e)return{status:(c(e,"Status")||e.Status||m(e)||"").toString().trim()||void 0,date:(c(e,"Date")||e.Date||"").toString().trim()||void 0,time:(c(e,"Time")||e.Time||"").toString().trim()||void 0,outsdRoNo:(c(e,"OutsdRoNo")||e.OutsdRoNo||"").toString().trim()||void 0,dmsRoNo:(c(e,"DMSRoNo")||e.DMSRoNo||"").toString().trim()||void 0,errorMessage:(c(e,"ErrorMessage")||e.ErrorMessage||"").toString().trim()||void 0}}function y(e){const t=e?.rey_RomeCustServVehCombRes??e?.rey_RomeCustServVehCombReq??e?.rey_RomeCustServVehComb??e??{};return s(t?.CustServVehComb??t?.CustServVehCombRes??t?.CustServVehCombReq??t).map(e=>{const t=e?.NameContactId??void 0,r=t?.NameId??void 0,n=r?.IndName?Y(r.IndName):void 0,o=r?.BusName?Y(r.BusName):void 0,a=t&&{NameId:r&&{...Y(r)||{},...n?{IndName:n}:{},...o?{BusName:o}:{}},Address:s(t?.Address).map(e=>Y(e)||{}),ContactOptions:s(t?.ContactOptions).map(e=>Y(e)||{}),Phone:s(t?.Phone).map(e=>Y(e)||{}),Email:s(t?.Email).map(e=>Y(e)||{})},i=s(e?.ServVehicle).map(e=>{const t=e?.Vehicle,r=t?.VehicleDetail,n=t&&{...Y(t)||{},...r?{VehicleDetail:Y(r)||{}}:{}},o=e?.VehicleServInfo,a=o?.VehExtWarranty,i=o?.Advisor,l=i?.ContactInfo;let c;i&&(c={...Y(i)||{},...l?{ContactInfo:Y(l)||{}}:{}});const m=o&&{...Y(o)||{},...a?{VehExtWarranty:Y(a)||{}}:{},...c?{Advisor:c}:{},...o?.VehServComments?{VehServComments:s(o.VehServComments).map(e=>X(e)).filter(e=>null!=e&&""!==String(e).trim())}:{}};return{...n?{Vehicle:n}:{},...m?{VehicleServInfo:m}:{}}}),l=s(e?.Message).map(e=>{const t=X(e);return{...Y(e)||{},...null!=t&&""!==String(t).trim()?{Text:t}:{}}}).filter(e=>Object.keys(e).length>0),c={};return a&&(c.NameContactId=a),i.length&&(c.ServVehicle=i),l.length&&(c.Message=l),c})}function g(e,t){if(null!=e)return String("string"==typeof e||"number"==typeof e?e:e[t]||"")}function N(e){return String(e??"").trim()||void 0}function T(e,...t){if(e)for(const r of t){if(e.$&&null!=e.$[r])return e.$[r];if(null!=e[`@_${r}`])return e[`@_${r}`];if(null!=e[r]&&"object"!=typeof e[r])return e[r]}}function b(e){const t=function(e){const t=o(e,e=>"rey_RomeCustomerResponse"===e||e.endsWith(":rey_RomeCustomerResponse"));return t?a(t,e=>"TransStatus"===e||e.endsWith(":TransStatus")).flatMap(s)[0]:void console.log("No rey_RomeCustomerResponse found in root")}(e);if(!t)return{dmsRecKey:void 0};const r=T(t,"DMSRecKey");return{dmsRecKey:null!=r?String(r):void 0,status:T(t,"Status"),statusCode:T(t,"StatusCode")}}function C(e){if(null==e)return;const t=String(e).toUpperCase().replace(/[^A-Z0-9 ]+/g,"");if(!t)throw new G(`Invalid string: ${e}. Must contain A-Z, 0-9, or space`);return t}function x(e){return e?String(e).toUpperCase():void 0}function f(e={}){const t=x(e.ibFlag)||(e.firstName?"I":"B");if("I"!==t&&"B"!==t)throw new G("ibFlag must be 'I' or 'B'");const r=e.lastName||e.customerName;if(!r)throw new G("lastName or customerName required");if("I"===t&&!e.firstName)throw new G("firstName required when ibFlag='I'");const n=x(e.customerType);if(n&&!["R","W","I"].includes(n))throw new G("customerType must be 'R', 'W', 'I', Retail, Wholesale, or Internal");const o=(e.addresses||[]).map(e=>{const t={Type:x(e.type)||"P",Addr1:e.line1?String(e.line1):void 0,Addr2:e.line2?String(e.line2):void 0,City:e.city?String(e.city):void 0,State:e.state?String(e.state):void 0,Zip:e.postalCode?String(e.postalCode):void 0,County:e.county?String(e.county):void 0,Country:e.country?String(e.country):void 0};if(!t.Addr1)throw new G("Address requires line1");return t}),a=(e.phones||[]).map(e=>{const t={Type:x(e.type)||"H",Num:e.number?String(e.number):void 0,Ext:e.extension?String(e.extension):void 0};if(!t.Num)throw new G("Phone requires number");return t}),s=e.emails?.[0]?.address?{MailTo:String(e.emails[0].address)}:void 0,i=e.personal,l=i?{Gender:x(i.gender),OtherName:C(i.otherName),AnniversaryDate:i.anniversaryDate?String(i.anniversaryDate):void 0,EmployerName:C(i.employerName),EmployerPhone:i.employerPhone?String(i.employerPhone):void 0,Occupation:C(i.occupation),OptOut:i.optOut?String(i.optOut):void 0,OptOutUse:i.optOutUse?String(i.optOutUse):void 0,BirthDates:(i.birthDates||[]).map(e=>({Type:x(e.type)||"P",date:e.date?String(e.date):void 0})).filter(e=>e.date),SSNs:(i.ssns||[]).map(e=>({Type:x(e.type)||"P",ssn:e.ssn?String(e.ssn):void 0})).filter(e=>e.ssn),DriverInfo:i.driver?[{Type:x(i.driver.type)||"P",LicNum:i.driver.licenseNumber?String(i.driver.licenseNumber):void 0,LicState:i.driver.licenseState?String(i.driver.licenseState):void 0,LicExpDate:i.driver.licenseExpDate?String(i.driver.licenseExpDate):void 0}].filter(e=>e.LicNum):void 0,CustChildren:(i.children||[]).map(e=>({ChildName:C(e.name)})).filter(e=>e.ChildName)}:void 0,c=e.dms,m=c?{TaxExemptNum:c.taxExemptNum?String(c.taxExemptNum):void 0,SalesTerritory:c.salesTerritory?String(c.salesTerritory):void 0,DeliveryRoute:c.deliveryRoute?String(c.deliveryRoute):void 0,SalesmanNum:c.salesmanNum?String(c.salesmanNum):void 0,LastContactMethod:c.lastContactMethod?String(c.lastContactMethod):void 0,Followups:(c.followups||[]).map(e=>({Type:x(e.type),Value:x(e.value)})).filter(e=>e.Type&&e.Value)}:void 0;return{custCateg:n||"R",createdBy:e.createdBy?String(e.createdBy):void 0,contactInfo:{IBFlag:t,LastName:C(r),FirstName:C(e.firstName),MidName:C(e.midName),Salut:C(e.salut),Suffix:C(e.suffix),Addresses:o,Phones:a,Email:s},custPersonal:l,dmsCustInfo:m}}function R(e){const t=o(e,e=>"rey_RomeServVehicleInsertResponse"===e||e.endsWith(":rey_RomeServVehicleInsertResponse"))||e,r=o(t,e=>"GenTransStatus"===e||e.endsWith(":GenTransStatus"));return{status:r?l(r,"Status"):void 0,statusCode:r?l(r,"StatusCode"):void 0}}function S(e,t){const r=Array.isArray(t)?t.map(e=>e.toLowerCase()):[String(t).toLowerCase()],n=[e];for(;n.length;){const e=n.pop();if(J(e))for(const t of Object.keys(e)){const o=e[t],a=Z(t).toLowerCase();if(r.includes(a))return o;if(J(o))n.push(o);else if(Array.isArray(o))for(const e of o)J(e)&&n.push(e)}}}function v(e,t){if(e&&J(e)){if(null!=e.$?.[t])return e.$[t];if(null!=e[`@${t}`])return e[`@${t}`];if(null!=e[`@_${t}`])return e[`@_${t}`]}}function O(e){if(null!=e){if("string"==typeof e)return e;if("number"==typeof e)return String(e);if(J(e)){if(null!=e._)return String(e._);if(null!=e["#text"])return String(e["#text"]);if(null!=e.text)return String(e.text)}}}function F(e){const t=S(e,["CreateBSMRepairOrderResp","UpdateBSMRepairOrderResp"])||e,r=S(t,"RoRecordStatus")||{};return{status:v(r,"Status")||O(S(r,"Status")),date:v(r,"Date")||O(S(r,"Date")),time:v(r,"Time")||O(S(r,"Time")),outsdRoNo:v(r,"OutsdRoNo")||O(S(r,"OutsdRoNo")),dmsRoNo:v(r,"DMSRoNo")||O(S(r,"DMSRoNo")),errorMessage:v(r,"ErrorMessage")||O(S(r,"ErrorMessage"))}}function I(e={},r={}){const n=function(e){if(!e)throw new Error("department is required (S, P, B, SERVICE, PARTS, BODY)");const t=String(e).trim().toUpperCase();if("S"===t||"P"===t||"B"===t)return t;if("SERVICE"===t)return"S";if("PART"===t||"PARTS"===t)return"P";if("BODY"===t||"BODYSHOP"===t||"BODY SHOP"===t)return"B";throw new Error(`Invalid department: ${e}. Must be S, P, B, SERVICE, PARTS, BODY, BODYSHOP, or BODY SHOP`)}(e.department),o=e.advisorNumber?String(e.advisorNumber).trim():void 0,a=t({routing:r.routing,sender:r?.envelope?.sender,creationDateTime:r?.envelope?.creationDateTime,bodId:r?.envelope?.bodId});return{starXml:B.default.render('\n\n {{{ApplicationArea}}}\n \n \n \n\n',{ApplicationArea:a,DepartmentType:n,AdvisorNumber:o}),routing:r.routing,envelope:r.envelope,xsdFilename:"rey_RomeGetAdvisorsReq.xsd",elementName:"rey_RomeGetAdvisorsReq",postParse:e=>function(e,t={}){const r=t?.department;var n;return(e=>{const t=e?.Advisor;return t?Array.isArray(t)?t:[t]:[]})((n=e,n?.rey_RomeGetAdvisorsResp??n??{})).map(e=>({advisorId:K(e,"AdvisorNumber"),firstName:K(e,"FirstName"),lastName:K(e,"LastName"),department:r}))}(e,{department:n})}}function h(e){return null==e?void 0:String(e)}function w(e,t){if(e)return null!=e[t]?"object"!=typeof e[t]?h(e[t]):h(e[t]["#text"]):null!=e[`@_${t}`]?h(e[`@_${t}`]):void 0}function P(e){const t=e?.meta?.statusBlocks?.transaction?.message;if(t)return String(t);return String((e?.meta?.status?.Message??e?.meta?.status?.message)||e?.message||"")}function D(e,t){return Math.min(1e4,e*Math.pow(2,t))}function A(e){return e+Math.floor(250*Math.random())}function M(e){return new Promise(t=>setTimeout(t,e))}function V(e){return/lock|in use|record.*busy/i.test(String(e||""))}Object.defineProperty(exports,"__esModule",{value:!0});const E=require("mustache"),L=require("uuid"),_=require("axios"),j=require("fast-xml-parser"),B=e(E),q=e(_);class U extends Error{constructor(e,t={}){super(e),this.name="RRTransportError",this.meta=t}}class k extends Error{constructor(e,t={}){super(e),this.name="RRVendorStatusError",this.meta=t,this.retryable=!!t.retryable}}class G extends Error{constructor(e,t={}){super(e),this.name="RRValidationError",this.meta=t}}const $=Object.freeze({__proto__:null,RRTransportError:U,RRVendorStatusError:k,RRValidationError:G}),Q={info:(...e)=>console.log("[rr-rome]",...e),warn:(...e)=>console.warn("[rr-rome]",...e),error:(...e)=>console.error("[rr-rome]",...e),debug:(...e)=>{process.env.RR_DEBUG&&console.log("[rr-rome][debug]",...e)}},W=e=>null!=e&&""!==String(e).trim(),H=new j.XMLParser({ignoreAttributes:!1,attributeNamePrefix:"@_",parseAttributeValue:!1,parseTagValue:!1,isArray:e=>["Advisor"].includes(e)}),Y=e=>{if(!e||"object"!=typeof e)return;const t={};for(const[r,n]of Object.entries(e))r.startsWith("@_")&&(t[r.slice(2)]=n);return Object.keys(t).length?t:void 0},X=e=>{if(null!=e)return"string"==typeof e?e:e["#text"]},Z=e=>{if("string"!=typeof e)return"";let t=e.includes("}")?e.split("}").pop():e;return t=t.includes(":")?t.split(":").pop():t,t.startsWith("rey_")&&(t=t.slice(4)),t},J=e=>e&&"object"==typeof e&&!Array.isArray(e),K=(e,t)=>((e,t)=>e?.[`@_${t}`])(e,t)??i(e,t);exports.RRClient=class{constructor(e){if(!e?.baseUrl)throw new Error("RRClient requires baseUrl");if(!e?.username)throw new Error("RRClient requires username");if(!e?.password)throw new Error("RRClient requires password");this.cfg={wssePasswordType:"Text",timeoutMs:3e4,logger:Q,retries:{max:3},...e},this.mask={password:!0}}async _send(e){const{starXml:t,routing:o,envelope:i,postParse:l}=e,y=this.cfg.logger||Q,{bodId:g,creationDateTime:N,sender:T}=function(e){return{bodId:e?.bodId||L.v4(),creationDateTime:e?.creationDateTime||new Date,sender:e?.sender||{}}}(i),b=function({username:e,password:t,wssePasswordType:o="Text",starContentXml:a}){const s=function(e){return`\n \n \n \n${r(e,10)}\n \n \n \n `.trim()}(a);return`\n \n \n${r(function(e,t,r){const o="Digest"===r?' Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest"':' Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"';return`\n \n \n ${n(e)}\n ${n(t)}\n \n \n `.trim()}(e,t,o),8)}\n \n \n${r(s,8)}\n \n \n `.trim()}({username:this.cfg.username,password:this.cfg.password,wssePasswordType:this.cfg.wssePasswordType||"Text",routing:o,sender:T,creationDateTime:(C=N,"string"==typeof C?C:(C instanceof Date?C:new Date).toISOString().replace(/\.\d{3}Z$/,"Z")),bodId:g,starContentXml:t});var C;"1"===process.env.RR_DUMP_ENVELOPE&&console.log(`[rr] Soap envelope about to send (${e?.elementName}): \n`+b+"\n");const x=async()=>{const t=await async function({baseUrl:e,envelopeXml:t,timeoutMs:r=3e4,logger:n}){try{const n=await q.default.post(e,t,{timeout:r,headers:{"Content-Type":"text/xml; charset=utf-8",SOAPAction:"http://www.starstandards.org/webservices/2005/10/transport/ProcessMessage"},responseType:"text",validateStatus:()=>!0});if(n.status>=200&&n.status<300)return String(n.data??"");throw new U(`HTTP ${n.status}: ${function(e){const t=String(e??"");return t.length>1024?t.slice(0,1024)+"…":t}(n.data)}`,{status:n.status,body:n.data})}catch(e){if(q.default.isAxiosError(e))throw new U(`Network error: ${e.message}`,{cause:e});throw e}}({baseUrl:this.cfg.baseUrl,envelopeXml:b,timeoutMs:this.cfg.timeoutMs,logger:y}),r=function(e){const t=H.parse(e),r=t?.Envelope||t?.["soapenv:Envelope"]||t,n=r?.Body||r?.["soapenv:Body"]||r?.["S:Body"]||r?.["soap:Body"],o=n?.ProcessMessageResponse||n?.["ns2:ProcessMessageResponse"]||n?.["trans:ProcessMessageResponse"]||n,a=o?.payload||o?.["ns2:payload"]||o;return a?.content||a?.["ns2:content"]||a}(t),n=function(e){const t=u(e),r=a(e,e=>/RoRecordStatus$/i.test(e)).flatMap(s)[0];return{transaction:p(t),roRecord:d(r)}}(r),o=function(e){const t=String("ApplicationArea").toLowerCase(),r=[e];for(;r.length;){const e=r.pop();if(e&&"object"==typeof e)for(const[n,o]of Object.entries(e)){if(n.toLowerCase().endsWith(t))return o;o&&"object"==typeof o&&r.push(o)}}}(r),{status:i,norm:g}=function(e){const t=u(e)||a(e,e=>/Status$/i.test(e)).flatMap(s)[0]||{},r=(c(t,"Status")||t.Status||"").toString().trim();let n=(c(t,"StatusCode")||t.StatusCode||"").toString().trim();const o=t.Message&&m(t.Message)||m(t)||"";!n&&/success/i.test(r)&&(n="0");const i=Number(n);let l="FAIL";return/success/i.test(r)||0===i?l="SUCCESS":2!==i&&213!==i||(l="NO_MATCH"),{status:{Status:r,StatusCode:n,Message:o},norm:{kind:l,code:Number.isFinite(i)?i:void 0,message:o}}}(r);if("1"===process.env.RR_DUMP_STATUS&&(console.log("[rr] Status blocks:"),console.dir(n,{depth:null,colors:!0})),"1"===process.env.RR_DUMP_APPLICATION&&(console.log("[rr] ApplicationArea:"),console.dir(o,{depth:null,colors:!0})),"FAIL"===g.kind){const e=i?.StatusCode;throw new k(`Vendor status failure: ${e??""} ${i?.Message||i?.["#text"]||""}`.trim(),{status:i,resXml:t})}const N={success:"SUCCESS"===g.kind||"NO_MATCH"===g.kind,statusBlocks:n,applicationArea:o,xml:{request:b,response:t},parsed:r};if("function"==typeof l)try{N.data=l(r)}catch(e){y?.warn?.(`postParse failed: ${e?.message||e}`)}return"1"===process.env.RR_DUMP_XML&&console.log(`[rr] Full response XML (${e?.elementName}):\n`+t+"\n"),N?.data&&"1"===process.env.RR_DUMP_DATA&&(console.log(`[rr] Parsed response data (${e?.elementName}):\n`),console.dir(N.data,{depth:null,colors:!0})),N};try{return await async function(e,{max:t=3,logger:r}){let n,o=0;for(;o=t)break;const s=A(D(400,o));r?.warn?.(`Retrying attempt ${o}/${t} in ${s}ms: ${e.message}`),await M(s)}throw n}(x,{max:this.cfg.retries?.max??3,logger:y})}catch(e){if(e instanceof U||e instanceof k)throw e;throw new U(`Unexpected error: ${e?.message||e}`,{cause:e})}}async combinedSearch(e,r){return this._send(function(e={},r={}){if(!e||"object"!=typeof e)throw new G("combinedSearch requires a query object");const n=function(e){if(!e)return"";const t=String(e).trim().toLowerCase();return"telephone"===t?"phone":"lic"===t||"plate"===t?"license":"vin"===t||"partvin"===t?"vin":"name"===t?"name":"namerecid"===t||"custid"===t?"nameRecId":"stkno"===t||"stock"===t?"stkNo":t}(e.kind),o={MaxRecs:Math.min(Number(e.maxResults||e.maxRecs||50),50)};if("phone"===n){const t=g(e.phone,"phone");if(!t)throw new G("combinedSearch phone value missing");o.Phone=t}else if("license"===n){const t=g(e.license,"license");if(!t)throw new G("combinedSearch license value missing");o.LicenseNum=t}else if("vin"===n){const t=g(e.vin,"vin");if(!t)throw new G("combinedSearch vin value missing");o.PartVIN=t}else if("name"===n){const t=e.name;if("string"==typeof t){const e=t.trim();if(!e)throw new G("combinedSearch name string is empty");o.LName=e}else{if(!t||"object"!=typeof t)throw new G("combinedSearch name requires { fname/lname/mname } object or a last-name string");{const e=N(t.fname),r=N(t.mname),n=N(t.lname),a=!e&&!r&&!n&&N(t.name);if(e||r||n)o.FullName={FName:e,MName:r,LName:n};else{if(!a)throw new G("combinedSearch name requires string last name, or object with any of { fname, lname, mname }");o.LName=a}}}}else if("nameRecId"===n){const t=g(e.nameRecId??e.custId,"custId");if(!t)throw new G("combinedSearch nameRecId value missing");o.NameRecId=t}else{if("stkNo"!==n)throw new G(`Unsupported CombinedSearch kind: ${e.kind}`);{const t=g(e.stkNo??e.stock,"stkNo");if(!t)throw new G("combinedSearch stkNo value missing");o.StkNo=t}}if(1!==[o.Phone,o.LicenseNum,o.PartVIN,o.LName,o.FullName,o.NameRecId,o.StkNo].filter(Boolean).length)throw new G("combinedSearch requires exactly one search criterion");const a=N(e.make),s=N(e.model),i=N(e.year);(a||s||i)&&(o.VehData={MakePfx:a,Model:s,Year:i});const l=t({routing:r.routing,sender:{component:"Rome",task:"CVC",referenceId:"Query",creator:"RCI",senderName:"RCI"},order:"creation-bod-sender-destination"});return{starXml:B.default.render('\n\n {{{ApplicationArea}}}\n \n \n {{#Phone}}{{/Phone}}\n {{#PartVIN}}{{/PartVIN}}\n {{#LicenseNum}}{{/LicenseNum}}\n {{#LName}}{{/LName}}\n {{#FullName}}\n \n {{/FullName}}\n {{#NameRecId}}{{/NameRecId}}\n {{#StkNo}}{{/StkNo}}\n \n {{#VehData}}\n \n {{/VehData}}\n \n\n',{ApplicationArea:l,...o}),routing:r.routing,envelope:r.envelope,elementName:"rey_RomeCustServVehCombReq",xsdFilename:"rey_RomeCustServVehCombReq.xsd",postParse:y}}(e,r))}async insertCustomer(e,r){return this._send(function(e,r){if(!r?.routing?.dealerNumber)throw new G("routing.dealerNumber required");const n=f(e),o=t({routing:r.routing,sender:{component:"Rome",task:"CU",referenceId:"Insert"},order:"sender-creation-bod-destination"});return{starXml:B.default.render('\n\n {{{ApplicationArea}}}\n \n \n {{#C.contactInfo.Addresses}}\n \n {{/C.contactInfo.Addresses}}\n {{#C.contactInfo.Phones}}\n \n {{/C.contactInfo.Phones}}\n {{#C.contactInfo.Email}}\n \n {{/C.contactInfo.Email}}\n \n {{#C.custPersonal}}\n \n {{#BirthDates}}\n \n {{/BirthDates}}\n {{#SSNs}}\n \n {{/SSNs}}\n {{#DriverInfo}}\n \n {{/DriverInfo}}\n {{#CustChildren}}\n \n {{/CustChildren}}\n \n {{/C.custPersonal}}\n {{#C.dmsCustInfo}}\n \n {{#Followups}}\n \n {{/Followups}}\n \n {{/C.dmsCustInfo}}\n \n\n',{ApplicationArea:o,C:n}),routing:r.routing,envelope:r.envelope,postParse:b,xsdFilename:"rey_RomeCustomerInsertReq.xsd",elementName:"rey_RomeCustomerInsertReq"}}(e,r))}async updateCustomer(e,r){return this._send(function(e,r){if(!r?.routing?.dealerNumber)throw new G("routing.dealerNumber required");if(!e.nameRecId)throw new G("nameRecId or customerId required");const n=x(e.ibFlag);if("I"!==n&&"B"!==n)throw new G("ibFlag required ('I' or 'B')");const o=f(e);o.contactInfo.NameRecId=String(e.nameRecId);const a=t({routing:r.routing,sender:{component:"Rome",task:"CU",referenceId:"Update"},order:"sender-creation-bod-destination"});return{starXml:B.default.render('\n\n {{{ApplicationArea}}}\n \n \n {{#C.contactInfo.Addresses}}\n \n {{/C.contactInfo.Addresses}}\n {{#C.contactInfo.Phones}}\n \n {{/C.contactInfo.Phones}}\n {{#C.contactInfo.Email}}\n \n {{/C.contactInfo.Email}}\n \n {{#C.custPersonal}}\n \n {{#BirthDates}}\n \n {{/BirthDates}}\n {{#SSNs}}\n \n {{/SSNs}}\n {{#DriverInfo}}\n \n {{/DriverInfo}}\n {{#CustChildren}}\n \n {{/CustChildren}}\n \n {{/C.custPersonal}}\n {{#C.dmsCustInfo}}\n \n {{#Followups}}\n \n {{/Followups}}\n \n {{/C.dmsCustInfo}}\n \n\n',{ApplicationArea:a,C:o}),routing:r.routing,envelope:r.envelope,postParse:b,xsdFilename:"rey_RomeCustomerUpdateReq.xsd",elementName:"rey_RomeCustomerUpdateReq"}}(e,r))}async insertServiceVehicle(e,r){return this._send(function(e={},r={}){if(!r?.routing?.dealerNumber)throw new G("routing.dealerNumber is required");const n=t({routing:r.routing,sender:r?.envelope?.sender??{component:"Rome",task:"SV",referenceId:"Insert"},creationDateTime:r?.envelope?.creationDateTime,bodId:r?.envelope?.bodId}),o=function(e={}){const t=e.vin;if(!t)throw new G("insertServiceVehicle: vin is required");const r=e.vehicleServInfo?.customerNo;if(!r)throw new G("insertServiceVehicle: vehicleServInfo.customerNo (or customerNo) is required");return{VIN:String(t),ModelDesc:e.modelDesc,Carline:e.carline,ExtClrDesc:e.extClrDesc,IntClrDesc:e.intClrDesc,TrimDesc:e.trimDesc,BodyStyle:e.bodyStyle,EngineDesc:e.engineDesc,TransDesc:e.transDesc,Year:e.year,Odometer:e.odometer,OdometerUnits:e.odometerUnits,LicNo:e.vehicleDetail?.licNo,CustomerNo:String(r),vehicleServInfo:{salesmanNo:e.vehicleServInfo?.salesmanNo,inServiceDate:e.vehicleServInfo?.inServiceDate,mileage:e.vehicleServInfo?.mileage,teamCode:e.vehicleServInfo?.teamCode,vehExtWarranty:(()=>{const t=e.vehicleServInfo?.vehExtWarranty;if(!t)return;const r={contractNumber:t.contractNumber,expirationDate:t.expirationDate,expirationMileage:t.expirationMileage};return Object.values(r).some(e=>null!=e&&""!==e)?r:void 0})(),advisor:(()=>{const t=e.vehicleServInfo?.advisor,r=t?.contactInfo?.nameRecId;return r?{contactInfo:{nameRecId:String(r)}}:void 0})()}}}(e);return{starXml:B.default.render('\n\n {{{ApplicationArea}}}\n\n \n {{#V.Year}}{{.}}{{/V.Year}}\n {{#V.Odometer}}{{.}}{{/V.Odometer}}\n {{#V.OdometerUnits}}{{.}}{{/V.OdometerUnits}}\n\n {{#V.LicNo}}{{/V.LicNo}}\n \n\n \n {{#V.vehicleServInfo.salesmanNo}}{{.}}{{/V.vehicleServInfo.salesmanNo}}\n {{#V.vehicleServInfo.inServiceDate}}{{.}}{{/V.vehicleServInfo.inServiceDate}}\n {{#V.vehicleServInfo.mileage}}{{.}}{{/V.vehicleServInfo.mileage}}\n {{#V.vehicleServInfo.teamCode}}{{.}}{{/V.vehicleServInfo.teamCode}}\n\n {{#V.vehicleServInfo.vehExtWarranty}}\n \n {{#contractNumber}}{{.}}{{/contractNumber}}\n {{#expirationDate}}{{.}}{{/expirationDate}}\n {{#expirationMileage}}{{.}}{{/expirationMileage}}\n \n {{/V.vehicleServInfo.vehExtWarranty}}\n\n {{#V.vehicleServInfo.advisor}}\n \n \n \n {{/V.vehicleServInfo.advisor}}\n \n\n',{ApplicationArea:n,V:o}),routing:r.routing,envelope:r.envelope,postParse:R,xsdFilename:"rey_RomeServVehicleInsertReq.xsd",elementName:"rey_RomeServVehicleInsertReq"}}(e,r))}async getAdvisors(e,t){return this._send(I(e,t))}async createRepairOrder(e,r){return this._send(function(e={},r={}){if(!r?.routing?.dealerNumber)throw new G("routing.dealerNumber required");if(!e?.customerNo)throw new G("customerNo (CustNo) required");if(!e?.departmentType)throw new G("departmentType (DeptType) required");if(!e?.vin)throw new G("vin (Vin) required");if(!e?.outsdRoNo)throw new G("outsdRoNo required");const n={customerNo:e.customerNo,advisorNo:e.advisorNo,tagNo:e.tagNo,outsdRoNo:e.outsdRoNo,departmentType:e.departmentType,vin:e.vin,mileageIn:e.mileageIn,roComment:e.roComment,estimate:e.estimate?{parts:e.estimate.parts,labor:e.estimate.labor,total:e.estimate.total}:void 0,tax:e.tax?{payType:e.tax.payType,taxCode:e.tax.taxCode,txblGrossAmt:e.tax.txblGrossAmt,grossTaxAmt:e.tax.grossTaxAmt}:void 0,rolabor:e.rolabor?{ops:e.rolabor.ops?.map(e=>({opCode:e.opCode,jobNo:e.jobNo,custPayTypeFlag:e.custPayTypeFlag,custTxblNtxblFlag:e.custTxblNtxblFlag,warrPayTypeFlag:e.warrPayTypeFlag,warrTxblNtxblFlag:e.warrTxblNtxblFlag,intrPayTypeFlag:e.intrPayTypeFlag,intrTxblNtxblFlag:e.intrTxblNtxblFlag,vlrCode:e.vlrCode,bill:e.bill?{payType:e.bill.payType,jobTotalHrs:e.bill.jobTotalHrs,billTime:e.bill.billTime,billRate:e.bill.billRate}:void 0,ccc:e.ccc?{cause:e.ccc.cause,complaint:e.ccc.complaint,correction:e.ccc.correction}:void 0,amount:e.amount?{payType:e.amount.payType,amtType:e.amount.amtType,custPrice:e.amount.custPrice,totalAmt:e.amount.totalAmt}:void 0}))}:void 0,ropart:e.ropart?{jobs:e.ropart.jobs?.map(e=>({opCode:e.opCode,jobNo:e.jobNo,lines:e.lines?.map(e=>({partNo:e.partNo,partNoDesc:e.partNoDesc,qtyOrd:e.partQty,sale:e.sale,cost:e.cost,addDeleteFlag:e.addDeleteFlag}))}))}:void 0,rogg:e.rogg?{roNo:e.rogg.roNo,ops:e.rogg.ops?.map(e=>({opCode:e.opCode,jobNo:e.jobNo,lines:e.lines?.map(e=>({breakOut:e.breakOut,itemType:e.itemType,itemDesc:e.itemDesc,custQty:e.custQty,warrQty:e.warrQty,intrQty:e.intrQty,custPayTypeFlag:e.custPayTypeFlag,warrPayTypeFlag:e.warrPayTypeFlag,intrPayTypeFlag:e.intrPayTypeFlag,custTxblNtxblFlag:e.custTxblNtxblFlag,warrTxblNtxblFlag:e.warrTxblNtxblFlag,intrTxblNtxblFlag:e.intrTxblNtxblFlag,amount:e.amount?{payType:e.amount.payType,amtType:e.amount.amtType,custPrice:e.amount.custPrice,dlrCost:e.amount.dlrCost}:void 0}))}))}:void 0,romisc:e.romisc?{roNo:e.romisc.roNo,ops:e.romisc.ops?.map(e=>({opCode:e.opCode,jobNo:e.jobNo,lines:e.lines?.map(e=>({miscCode:e.miscCode,custPayTypeFlag:e.custPayTypeFlag,warrPayTypeFlag:e.warrPayTypeFlag,intrPayTypeFlag:e.intrPayTypeFlag,custTxblNtxblFlag:e.custTxblNtxblFlag,warrTxblNtxblFlag:e.warrTxblNtxblFlag,intrTxblNtxblFlag:e.intrTxblNtxblFlag,codeAmt:e.codeAmt}))}))}:void 0};if(n.tax?.payType&&!["All","Cust","Intr","Warr"].includes(n.tax.payType))throw new G("tax.payType must be one of: All, Cust, Intr, Warr");if(n.rolabor?.ops?.some(e=>e.custTxblNtxblFlag&&!["T","N"].includes(e.custTxblNtxblFlag)||e.warrTxblNtxblFlag&&!["T","N"].includes(e.warrTxblNtxblFlag)||e.intrTxblNtxblFlag&&!["T","N"].includes(e.intrTxblNtxblFlag)))throw new G("Taxable flags (CustTxblNTxblFlag, WarrTxblNTxblFlag, IntrTxblNTxblFlag) must be 'T' or 'N'");if(n.rogg?.ops?.some(e=>e.lines?.some(e=>e.itemType&&!["G","P","S","F"].includes(e.itemType))))throw new G("rogg.ops.lines.itemType must be one of: G, P, S, F");const o={...r?.envelope||{},sender:{component:r?.envelope?.sender?.component??"Rome",task:r?.envelope?.sender?.task??"BSMRO",referenceId:r?.envelope?.sender?.referenceId??"Insert",creatorNameCode:r?.envelope?.sender?.creatorNameCode??"RCI",senderNameCode:r?.envelope?.sender?.senderNameCode??"RCI"}},a=t({routing:r.routing,sender:o.sender,creationDateTime:o.creationDateTime,bodId:o.bodId});return{starXml:B.default.render('\n\n {{{ApplicationArea}}}\n \n \n {{#RO.roComment}}\n \n {{/RO.roComment}}\n\n {{#RO.estimate}}\n \n {{/RO.estimate}}\n\n {{#RO.tax}}\n \n {{/RO.tax}}\n \n\n {{#RO.rolabor}}\n \n {{#RO.rolabor.ops}}\n \n {{#bill}}\n \n {{/bill}}\n\n {{#ccc}}\n \n {{/ccc}}\n\n {{#amount}}\n \n {{/amount}}\n \n {{/RO.rolabor.ops}}\n \n {{/RO.rolabor}}\n\n {{#RO.ropart}}\n \n {{#RO.ropart.jobs}}\n \n {{#lines}}\n \n {{/lines}}\n \n {{/RO.ropart.jobs}}\n \n {{/RO.ropart}}\n\n {{#RO.rogg}}\n \n {{#RO.rogg.ops}}\n \n {{#lines}}\n \n {{#amount}}\n \n {{/amount}}\n \n {{/lines}}\n \n {{/RO.rogg.ops}}\n \n {{/RO.rogg}}\n\n {{#RO.romisc}}\n \n {{#RO.romisc.ops}}\n \n {{#lines}}\n \n {{/lines}}\n \n {{/RO.romisc.ops}}\n \n {{/RO.romisc}}\n \n\n',{ApplicationArea:a,RO:n}),routing:r.routing,envelope:o,postParse:F,xsdFilename:"rey_RomeCreateBSMRepairOrderReq.xsd"}}(e,r))}async updateRepairOrder(e,r){return this._send(function(e={},r={}){if(!r?.routing?.dealerNumber)throw new G("routing.dealerNumber required");if(!e?.finalUpdate)throw new G("finalUpdate (FinalUpdate) required");if(!["Y","N"].includes(e.finalUpdate))throw new G("finalUpdate must be 'Y' or 'N'");if(!e?.outsdRoNo)throw new G(" outsdRoNo");const n={finalUpdate:e.finalUpdate||"N",roNo:e.roNo,customerNo:e.customerNo,tagNo:e.tagNo,outsdRoNo:e.outsdRoNo,departmentType:e.departmentType,vin:e.vin,mileageIn:e.mileageIn,mileageOut:e.mileageOut,roComment:e.roComment,estimate:e.estimate?{estimateType:e.estimate.estimateType}:void 0,tax:e.tax?{payType:e.tax.payType,taxCode:e.tax.taxCode,txblGrossAmt:e.tax.txblGrossAmt,grossTaxAmt:e.tax.grossTaxAmt}:void 0,rolabor:e.rolabor?{ops:e.rolabor.ops?.map(e=>({opCode:e.opCode,jobNo:e.jobNo,custPayTypeFlag:e.custPayTypeFlag,custTxblNtxblFlag:e.custTxblNtxblFlag,warrPayTypeFlag:e.warrPayTypeFlag,warrTxblNtxblFlag:e.warrTxblNtxblFlag,intrPayTypeFlag:e.intrPayTypeFlag,intrTxblNtxblFlag:e.intrTxblNtxblFlag,vlrCode:e.vlrCode,bill:e.bill?{payType:e.bill.payType,jobTotalHrs:e.bill.jobTotalHrs,billTime:e.bill.billTime,billRate:e.bill.billRate}:void 0,ccc:e.ccc?{cause:e.ccc.cause,complaint:e.ccc.complaint,correction:e.ccc.correction}:void 0,amount:e.amount?{payType:e.amount.payType,amtType:e.amount.amtType,custPrice:e.amount.custPrice}:void 0}))}:void 0,ropart:e.ropart?{jobs:e.ropart.jobs?.map(e=>({opCode:e.opCode,jobNo:e.jobNo,lines:e.lines?.map(e=>({partNo:e.partNo,partNoDesc:e.partNoDesc,qtyOrd:e.partQty,sale:e.sale,cost:e.cost,addDeleteFlag:e.addDeleteFlag}))}))}:void 0,rogg:e.rogg?{roNo:e.rogg.roNo,ops:e.rogg.ops?.map(e=>({opCode:e.opCode,jobNo:e.jobNo,lines:e.lines?.map(e=>({breakOut:e.breakOut,itemType:e.itemType,itemDesc:e.itemDesc,custQty:e.custQty,warrQty:e.warrQty,intrQty:e.intrQty,custPayTypeFlag:e.custPayTypeFlag,warrPayTypeFlag:e.warrPayTypeFlag,intrPayTypeFlag:e.intrPayTypeFlag,custTxblNtxblFlag:e.custTxblNtxblFlag,warrTxblNtxblFlag:e.warrTxblNtxblFlag,intrTxblNtxblFlag:e.intrTxblNtxblFlag,amount:e.amount?{payType:e.amount.payType,amtType:e.amount.amtType,custPrice:e.amount.custPrice,dlrCost:e.amount.dlrCost}:void 0}))}))}:void 0,romisc:e.romisc?{roNo:e.romisc.roNo,ops:e.romisc.ops?.map(e=>({opCode:e.opCode,jobNo:e.jobNo,lines:e.lines?.map(e=>({miscCode:e.miscCode,custPayTypeFlag:e.custPayTypeFlag,warrPayTypeFlag:e.warrPayTypeFlag,intrPayTypeFlag:e.intrPayTypeFlag,custTxblNtxblFlag:e.custTxblNtxblFlag,warrTxblNtxblFlag:e.warrTxblNtxblFlag,intrTxblNtxblFlag:e.intrTxblNtxblFlag,codeAmt:e.codeAmt}))}))}:void 0};if(n.tax?.payType&&!["All","Cust","Intr","Warr"].includes(n.tax.payType))throw new G("tax.payType must be one of: All, Cust, Intr, Warr");if(n.rolabor?.ops?.some(e=>e.custTxblNtxblFlag&&!["T","N"].includes(e.custTxblNtxblFlag)||e.warrTxblNtxblFlag&&!["T","N"].includes(e.warrTxblNtxblFlag)||e.intrTxblNtxblFlag&&!["T","N"].includes(e.intrTxblNtxblFlag)))throw new G("Taxable flags (CustTxblNTxblFlag, WarrTxblNTxblFlag, IntrTxblNTxblFlag) must be 'T' or 'N'");if(n.rogg?.ops?.some(e=>e.lines?.some(e=>e.itemType&&!["G","P","S","F"].includes(e.itemType))))throw new G("rogg.ops.lines.itemType must be one of: G, P, S, F");const o={...r?.envelope||{},sender:{component:r?.envelope?.sender?.component??"Rome",task:r?.envelope?.sender?.task??"BSMRO",referenceId:r?.envelope?.sender?.referenceId??"Update",creatorNameCode:r?.envelope?.sender?.creatorNameCode??"RCI",senderNameCode:r?.envelope?.sender?.senderNameCode??"RCI"}},a=t({routing:r.routing,sender:o.sender,creationDateTime:o.creationDateTime,bodId:o.bodId});return{starXml:B.default.render('\n\n {{{ApplicationArea}}}\n \n \n {{#RO.roComment}}\n \n {{/RO.roComment}}\n\n {{#RO.estimate}}\n \n {{/RO.estimate}}\n\n {{#RO.tax}}\n \n {{/RO.tax}}\n \n\n {{#RO.rolabor}}\n \n {{#RO.rolabor.ops}}\n \n {{#bill}}\n \n {{/bill}}\n\n {{#ccc}}\n \n {{/ccc}}\n\n {{#amount}}\n \n {{/amount}}\n \n {{/RO.rolabor.ops}}\n \n {{/RO.rolabor}}\n\n {{#RO.ropart}}\n \n {{#RO.ropart.jobs}}\n \n {{#lines}}\n \n {{/lines}}\n \n {{/RO.ropart.jobs}}\n \n {{/RO.ropart}}\n\n {{#RO.rogg}}\n \n {{#RO.rogg.ops}}\n \n {{#lines}}\n \n {{#amount}}\n \n {{/amount}}\n \n {{/lines}}\n \n {{/RO.rogg.ops}}\n \n {{/RO.rogg}}\n\n {{#RO.romisc}}\n \n {{#RO.romisc.ops}}\n \n {{#lines}}\n \n {{/lines}}\n \n {{/RO.romisc.ops}}\n \n {{/RO.romisc}}\n \n\n',{ApplicationArea:a,RO:n}),routing:r.routing,envelope:o,postParse:F,xsdFilename:"rey_RomeUpdateBSMRepairOrderReq.xsd",elementName:"rey_RomeUpdateBSMRepairOrderReq"}}(e,r))}async getParts(e,r){return this._send(function(e={},r={}){const n=e.roNumber?String(e.roNumber).trim():void 0;if(!n)throw new G("getParts: roNumber required");const o=t({routing:r.routing,sender:{component:"Rome",task:"RCT",referenceId:"Query",creator:"RCI",senderName:"RCI"}});return{starXml:B.default.render('\n\n {{{ApplicationArea}}}\n \n\n',{ApplicationArea:o,RoNumber:n}),routing:r.routing,envelope:r.envelope,xsdFilename:"rey_RomeGetPartsReq.xsd",elementName:"rey_RomeGetPartsReq",postParse:e=>function(e){return e?.rey_RomeGetPartsResp?.RoParts?.map(e=>({partNumber:w(e,"PartNumber"),partDescription:w(e,"PartDescription"),quantityOrdered:w(e,"QuantityOrdered"),quantityShipped:w(e,"QuantityShipped"),price:w(e,"Price"),cost:w(e,"Cost"),processedFlag:w(e,"ProcessedFlag"),addOrDelete:w(e,"AddOrDelete")}))||[]}(e)}}(e,r))}},exports.errors=$;
+"use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function t({routing:e={},sender:t={},creationDateTime:r,bodId:n}={}){const o={Sender:{Component:t.component??"Rome",Task:t.task??"CU",ReferenceId:t.referenceId??"Query",CreatorNameCode:t.creator??"RCI",SenderNameCode:t.senderName??"RCI"},CreationDateTime:r??(new Date).toISOString().replace(/\.\d{3}Z$/,"Z"),BODId:n??_.v4(),Destination:{DestinationNameCode:"RR",DealerNumber:e.dealerNumber||"",StoreNumber:e.storeNumber||"",AreaNumber:e.areaNumber||""}},a={bod:"{{#BODId}}{{BODId}}{{/BODId}}",creation:"{{CreationDateTime}}",sender:"\n \n {{Sender.Component}}\n {{Sender.Task}}\n {{#Sender.ReferenceId}}{{Sender.ReferenceId}}{{/Sender.ReferenceId}}\n {{#Sender.CreatorNameCode}}{{Sender.CreatorNameCode}}{{/Sender.CreatorNameCode}}\n {{#Sender.SenderNameCode}}{{Sender.SenderNameCode}}{{/Sender.SenderNameCode}}\n ".trim(),dest:"\n \n {{Destination.DestinationNameCode}}\n {{#Destination.DealerNumber}}{{Destination.DealerNumber}}{{/Destination.DealerNumber}}\n {{#Destination.StoreNumber}}{{Destination.StoreNumber}}{{/Destination.StoreNumber}}\n {{#Destination.AreaNumber}}{{Destination.AreaNumber}}{{/Destination.AreaNumber}}\n ".trim()},s=`\n${["bod","creation","sender","dest"].map(e=>a[e]).join("\n")}\n`;return U.default.render(s,o).trim()}function r(e,t=2){const r=" ".repeat(t);return String(e).split("\n").map(e=>e.length?r+e:e).join("\n")}function n(e){return String(e??"").replace(/&/g,"&").replace(//g,">")}function o(e,t){if(null==e)return null;if(Array.isArray(e)){for(const r of e){const e=o(r,t);if(null!=e)return e}return null}if("object"!=typeof e)return null;for(const[r,n]of Object.entries(e)){if(t(r,n))return n;const e=o(n,t);if(null!=e)return e}return null}function a(e,t,r=[]){if(null==e)return r;if(Array.isArray(e)){for(const n of e)a(n,t,r);return r}if("object"!=typeof e)return r;for(const[n,o]of Object.entries(e))t(n,o)&&r.push(o),a(o,t,r);return r}function s(e){return null==e?[]:Array.isArray(e)?e:[e]}function i(e,t){if(e&&"object"==typeof e)return function(e){if(null!=e)return"string"==typeof e||"number"==typeof e||"boolean"==typeof e?String(e):"object"==typeof e&&"#text"in e?String(e["#text"]):void 0}(e[t])}function l(e,t){const r=i(e,t);if(Y(r))return r;const n=function(e,t){if(e&&"object"==typeof e)return e.$&&Y(e.$[t])?e.$[t]:Y(e[`@_${t}`])?e[`@_${t}`]:Y(e[`@${t}`])?e[`@${t}`]:e._attributes&&Y(e._attributes[t])?e._attributes[t]:e.attributes&&Y(e.attributes[t])?e.attributes[t]:void 0}(e,t);return Y(n)?n:void 0}function c(e,t){if(e&&"object"==typeof e)return null!=e[`@_${t}`]?e[`@_${t}`]:void 0}function m(e){if(null!=e){if("string"==typeof e)return e;if("number"==typeof e)return String(e);if("object"==typeof e){if(null!=e._)return String(e._);if(null!=e["#text"])return String(e["#text"]);if(null!=e.text)return String(e.text)}}}function u(e){return a(e,e=>/(GenTransStatus|TransStatus)$/i.test(e)).flatMap(s)[0]}function p(e){if(e)return{status:(c(e,"Status")||e.Status||m(e)||"").toString().trim()||void 0,statusCode:(c(e,"StatusCode")||e.StatusCode||"").toString().trim()||void 0,message:e.Message&&m(e.Message)||e.GenTransStatus&&m(e.GenTransStatus)||e.TransStatus&&m(e.TransStatus)||m(e)||void 0}}function d(e){if(e)return{status:(c(e,"Status")||e.Status||m(e)||"").toString().trim()||void 0,date:(c(e,"Date")||e.Date||"").toString().trim()||void 0,time:(c(e,"Time")||e.Time||"").toString().trim()||void 0,outsdRoNo:(c(e,"OutsdRoNo")||e.OutsdRoNo||"").toString().trim()||void 0,dmsRoNo:(c(e,"DMSRoNo")||e.DMSRoNo||"").toString().trim()||void 0,errorMessage:(c(e,"ErrorMessage")||e.ErrorMessage||"").toString().trim()||void 0}}function y(e){const t=e?.rey_RomeCustServVehCombRes??e?.rey_RomeCustServVehCombReq??e?.rey_RomeCustServVehComb??e??{};return s(t?.CustServVehComb??t?.CustServVehCombRes??t?.CustServVehCombReq??t).map(e=>{const t=e?.NameContactId??void 0,r=t?.NameId??void 0,n=r?.IndName?Z(r.IndName):void 0,o=r?.BusName?Z(r.BusName):void 0,a=t&&{NameId:r&&{...Z(r)||{},...n?{IndName:n}:{},...o?{BusName:o}:{}},Address:s(t?.Address).map(e=>Z(e)||{}),ContactOptions:s(t?.ContactOptions).map(e=>Z(e)||{}),Phone:s(t?.Phone).map(e=>Z(e)||{}),Email:s(t?.Email).map(e=>Z(e)||{})},i=s(e?.ServVehicle).map(e=>{const t=e?.Vehicle,r=t?.VehicleDetail,n=t&&{...Z(t)||{},...r?{VehicleDetail:Z(r)||{}}:{}},o=e?.VehicleServInfo,a=o?.VehExtWarranty,i=o?.Advisor,l=i?.ContactInfo;let c;i&&(c={...Z(i)||{},...l?{ContactInfo:Z(l)||{}}:{}});const m=o&&{...Z(o)||{},...a?{VehExtWarranty:Z(a)||{}}:{},...c?{Advisor:c}:{},...o?.VehServComments?{VehServComments:s(o.VehServComments).map(e=>J(e)).filter(e=>null!=e&&""!==String(e).trim())}:{}};return{...n?{Vehicle:n}:{},...m?{VehicleServInfo:m}:{}}}),l=s(e?.Message).map(e=>{const t=J(e);return{...Z(e)||{},...null!=t&&""!==String(t).trim()?{Text:t}:{}}}).filter(e=>Object.keys(e).length>0),c={};return a&&(c.NameContactId=a),i.length&&(c.ServVehicle=i),l.length&&(c.Message=l),c})}function g(e,t){if(null!=e)return String("string"==typeof e||"number"==typeof e?e:e[t]||"")}function N(e){return String(e??"").trim()||void 0}function T(e,...t){if(e)for(const r of t){if(e.$&&null!=e.$[r])return e.$[r];if(null!=e[`@_${r}`])return e[`@_${r}`];if(null!=e[r]&&"object"!=typeof e[r])return e[r]}}function b(e){const t=function(e){const t=o(e,e=>"rey_RomeCustomerResponse"===e||e.endsWith(":rey_RomeCustomerResponse"));return t?a(t,e=>"TransStatus"===e||e.endsWith(":TransStatus")).flatMap(s)[0]:void console.log("No rey_RomeCustomerResponse found in root")}(e);if(!t)return{dmsRecKey:void 0};const r=T(t,"DMSRecKey");return{dmsRecKey:null!=r?String(r):void 0,status:T(t,"Status"),statusCode:T(t,"StatusCode")}}function C(e){if(null==e)return;const t=String(e).toUpperCase().replace(/[^A-Z0-9 ]+/g,"");if(!t)throw new Q(`Invalid string: ${e}. Must contain A-Z, 0-9, or space`);return t}function x(e){return e?String(e).toUpperCase():void 0}function f(e={}){const t=x(e.ibFlag)||(e.firstName?"I":"B");if("I"!==t&&"B"!==t)throw new Q("ibFlag must be 'I' or 'B'");const r=e.lastName||e.customerName;if(!r)throw new Q("lastName or customerName required");if("I"===t&&!e.firstName)throw new Q("firstName required when ibFlag='I'");const n=x(e.customerType);if(n&&!["R","W","I"].includes(n))throw new Q("customerType must be 'R', 'W', 'I', Retail, Wholesale, or Internal");const o=(e.addresses||[]).map(e=>{const t={Type:x(e.type)||"P",Addr1:e.line1?String(e.line1):void 0,Addr2:e.line2?String(e.line2):void 0,City:e.city?String(e.city):void 0,State:e.state?String(e.state):void 0,Zip:e.postalCode?String(e.postalCode):void 0,County:e.county?String(e.county):void 0,Country:e.country?String(e.country):void 0};if(!t.Addr1)throw new Q("Address requires line1");return t}),a=(e.phones||[]).map(e=>{const t={Type:x(e.type)||"H",Num:e.number?String(e.number):void 0,Ext:e.extension?String(e.extension):void 0};if(!t.Num)throw new Q("Phone requires number");return t}),s=e.emails?.[0]?.address?{MailTo:String(e.emails[0].address)}:void 0,i=e.personal,l=i?{Gender:x(i.gender),OtherName:C(i.otherName),AnniversaryDate:i.anniversaryDate?String(i.anniversaryDate):void 0,EmployerName:C(i.employerName),EmployerPhone:i.employerPhone?String(i.employerPhone):void 0,Occupation:C(i.occupation),OptOut:i.optOut?String(i.optOut):void 0,OptOutUse:i.optOutUse?String(i.optOutUse):void 0,BirthDates:(i.birthDates||[]).map(e=>({Type:x(e.type)||"P",date:e.date?String(e.date):void 0})).filter(e=>e.date),SSNs:(i.ssns||[]).map(e=>({Type:x(e.type)||"P",ssn:e.ssn?String(e.ssn):void 0})).filter(e=>e.ssn),DriverInfo:i.driver?[{Type:x(i.driver.type)||"P",LicNum:i.driver.licenseNumber?String(i.driver.licenseNumber):void 0,LicState:i.driver.licenseState?String(i.driver.licenseState):void 0,LicExpDate:i.driver.licenseExpDate?String(i.driver.licenseExpDate):void 0}].filter(e=>e.LicNum):void 0,CustChildren:(i.children||[]).map(e=>({ChildName:C(e.name)})).filter(e=>e.ChildName)}:void 0,c=e.dms,m=c?{TaxExemptNum:c.taxExemptNum?String(c.taxExemptNum):void 0,SalesTerritory:c.salesTerritory?String(c.salesTerritory):void 0,DeliveryRoute:c.deliveryRoute?String(c.deliveryRoute):void 0,SalesmanNum:c.salesmanNum?String(c.salesmanNum):void 0,LastContactMethod:c.lastContactMethod?String(c.lastContactMethod):void 0,Followups:(c.followups||[]).map(e=>({Type:x(e.type),Value:x(e.value)})).filter(e=>e.Type&&e.Value)}:void 0;return{custCateg:n||"R",createdBy:e.createdBy?String(e.createdBy):void 0,contactInfo:{IBFlag:t,LastName:C(r),FirstName:C(e.firstName),MidName:C(e.midName),Salut:C(e.salut),Suffix:C(e.suffix),Addresses:o,Phones:a,Email:s},custPersonal:l,dmsCustInfo:m}}function R(e){const t=o(e,e=>"rey_RomeServVehicleInsertResponse"===e||e.endsWith(":rey_RomeServVehicleInsertResponse"))||e,r=o(t,e=>"GenTransStatus"===e||e.endsWith(":GenTransStatus"));return{status:r?l(r,"Status"):void 0,statusCode:r?l(r,"StatusCode"):void 0}}function S(e,t){const r=Array.isArray(t)?t.map(e=>e.toLowerCase()):[String(t).toLowerCase()],n=[e];for(;n.length;){const e=n.pop();if(K(e))for(const t of Object.keys(e)){const o=e[t],a=z(t).toLowerCase();if(r.includes(a))return o;if(K(o))n.push(o);else if(Array.isArray(o))for(const e of o)K(e)&&n.push(e)}}}function v(e,t){if(e&&K(e)){if(null!=e.$?.[t])return e.$[t];if(null!=e[`@${t}`])return e[`@${t}`];if(null!=e[`@_${t}`])return e[`@_${t}`]}}function O(e){if(null!=e){if("string"==typeof e)return e;if("number"==typeof e)return String(e);if(K(e)){if(null!=e._)return String(e._);if(null!=e["#text"])return String(e["#text"]);if(null!=e.text)return String(e.text)}}}function F(e){const t=S(e,["CreateBSMRepairOrderResp","UpdateBSMRepairOrderResp"])||e,r=S(t,"RoRecordStatus")||{};return{status:v(r,"Status")||O(S(r,"Status")),date:v(r,"Date")||O(S(r,"Date")),time:v(r,"Time")||O(S(r,"Time")),outsdRoNo:v(r,"OutsdRoNo")||O(S(r,"OutsdRoNo")),dmsRoNo:v(r,"DMSRoNo")||O(S(r,"DMSRoNo")),errorMessage:v(r,"ErrorMessage")||O(S(r,"ErrorMessage"))}}function I(e={},r={}){const n=function(e){if(!e)throw new Error("department is required (S, P, B, SERVICE, PARTS, BODY)");const t=String(e).trim().toUpperCase();if("S"===t||"P"===t||"B"===t)return t;if("SERVICE"===t)return"S";if("PART"===t||"PARTS"===t)return"P";if("BODY"===t||"BODYSHOP"===t||"BODY SHOP"===t)return"B";throw new Error(`Invalid department: ${e}. Must be S, P, B, SERVICE, PARTS, BODY, BODYSHOP, or BODY SHOP`)}(e.department),o=e.advisorNumber?String(e.advisorNumber).trim():void 0,a=t({routing:r.routing,sender:r?.envelope?.sender,creationDateTime:r?.envelope?.creationDateTime,bodId:r?.envelope?.bodId});return{starXml:U.default.render('\n\n {{{ApplicationArea}}}\n \n \n \n\n',{ApplicationArea:a,DepartmentType:n,AdvisorNumber:o}),routing:r.routing,envelope:r.envelope,xsdFilename:"rey_RomeGetAdvisorsReq.xsd",elementName:"rey_RomeGetAdvisorsReq",postParse:e=>function(e,t={}){const r=t?.department;var n;return(e=>{const t=e?.Advisor;return t?Array.isArray(t)?t:[t]:[]})((n=e,n?.rey_RomeGetAdvisorsResp??n??{})).map(e=>({advisorId:ee(e,"AdvisorNumber"),firstName:ee(e,"FirstName"),lastName:ee(e,"LastName"),department:r}))}(e,{department:n})}}function h(e){return null==e?void 0:String(e)}function w(e,t){if(e)return null!=e[t]?"object"!=typeof e[t]?h(e[t]):h(e[t]["#text"]):null!=e[`@_${t}`]?h(e[`@_${t}`]):void 0}function P(e){const t=e?.meta?.statusBlocks?.transaction?.message;if(t)return String(t);return String((e?.meta?.status?.Message??e?.meta?.status?.message)||e?.message||"")}function D(e,t){return Math.min(1e4,e*Math.pow(2,t))}function A(e){return e+Math.floor(250*Math.random())}function M(e){return new Promise(t=>setTimeout(t,e))}function V(e){return/lock|in use|record.*busy/i.test(String(e||""))}function E(e,t="****"){if(!e||"string"!=typeof e)return e;let r=e;return r=r.replace(/(]*>)([^<]*)(<\/wsse:Username>)/gi,`$1${t}$3`),r=r.replace(/(]*>)([^<]*)(<\/wsse:Password>)/gi,`$1${t}$3`),r}Object.defineProperty(exports,"__esModule",{value:!0});const L=require("mustache"),_=require("uuid"),j=require("xmlbuilder2"),B=require("axios"),q=require("fast-xml-parser"),U=e(L),k=e(B);class $ extends Error{constructor(e,t={}){super(e),this.name="RRTransportError",this.meta=t}}class G extends Error{constructor(e,t={}){super(e),this.name="RRVendorStatusError",this.meta=t,this.retryable=!!t.retryable}}class Q extends Error{constructor(e,t={}){super(e),this.name="RRValidationError",this.meta=t}}const W=Object.freeze({__proto__:null,RRTransportError:$,RRVendorStatusError:G,RRValidationError:Q}),H={info:(...e)=>console.log("[rr-rome]",...e),warn:(...e)=>console.warn("[rr-rome]",...e),error:(...e)=>console.error("[rr-rome]",...e),debug:(...e)=>{process.env.RR_DEBUG&&console.log("[rr-rome][debug]",...e)}},Y=e=>null!=e&&""!==String(e).trim(),X=new q.XMLParser({ignoreAttributes:!1,attributeNamePrefix:"@_",parseAttributeValue:!1,parseTagValue:!1,isArray:e=>["Advisor"].includes(e)}),Z=e=>{if(!e||"object"!=typeof e)return;const t={};for(const[r,n]of Object.entries(e))r.startsWith("@_")&&(t[r.slice(2)]=n);return Object.keys(t).length?t:void 0},J=e=>{if(null!=e)return"string"==typeof e?e:e["#text"]},z=e=>{if("string"!=typeof e)return"";let t=e.includes("}")?e.split("}").pop():e;return t=t.includes(":")?t.split(":").pop():t,t.startsWith("rey_")&&(t=t.slice(4)),t},K=e=>e&&"object"==typeof e&&!Array.isArray(e),ee=(e,t)=>((e,t)=>e?.[`@_${t}`])(e,t)??i(e,t);exports.RRClient=class{constructor(e){if(!e?.baseUrl)throw new Error("RRClient requires baseUrl");if(!e?.username)throw new Error("RRClient requires username");if(!e?.password)throw new Error("RRClient requires password");this.cfg={wssePasswordType:"Text",timeoutMs:3e4,logger:H,retries:{max:3},...e},this.mask={password:!0}}async _send(e){const{starXml:t,routing:o,envelope:i,postParse:l}=e,y=this.cfg.logger||H,{bodId:g,creationDateTime:N,sender:T}=function(e){return{bodId:e?.bodId||_.v4(),creationDateTime:e?.creationDateTime||new Date,sender:e?.sender||{}}}(i),b=function({username:e,password:t,wssePasswordType:o="Text",starContentXml:a,normalize:s=!0,normalizeOptions:i}={}){const l=function(e){return`\n \n \n \n${r(e,10)}\n \n \n \n `.trim()}(a),c=`\n \n \n${r(function(e,t,r){const o="Digest"===r?' Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest"':' Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"';return`\n \n \n ${n(e)}\n ${n(t)}\n \n \n `.trim()}(e,t,o),8)}\n \n \n${r(l,8)}\n \n \n `.trim();return s?function(e,{prettyPrint:t=!0}={}){if(!e||"string"!=typeof e)return e;try{return j.create(e).end({prettyPrint:t,width:0,indent:" ",newline:"\n"}).trim()}catch(t){return String(e).trim()}}(c,i):c}({username:this.cfg.username,password:this.cfg.password,wssePasswordType:this.cfg.wssePasswordType||"Text",routing:o,sender:T,creationDateTime:(x=N,"string"==typeof x?x:(x instanceof Date?x:new Date).toISOString().replace(/\.\d{3}Z$/,"Z")),bodId:g,starContentXml:t}),C=E(b);var x;"1"===process.env.RR_DUMP_ENVELOPE&&console.log(`[rr] Soap envelope about to send (${e?.elementName}): \n`+C+"\n");const f=async()=>{const t=await async function({baseUrl:e,envelopeXml:t,timeoutMs:r=3e4,logger:n}){try{const n=await k.default.post(e,t,{timeout:r,headers:{"Content-Type":"text/xml; charset=utf-8",SOAPAction:"http://www.starstandards.org/webservices/2005/10/transport/ProcessMessage"},responseType:"text",validateStatus:()=>!0});if(n.status>=200&&n.status<300)return String(n.data??"");throw new $(`HTTP ${n.status}: ${function(e){const t=String(e??"");return t.length>1024?t.slice(0,1024)+"…":t}(n.data)}`,{status:n.status,body:n.data})}catch(e){if(k.default.isAxiosError(e))throw new $(`Network error: ${e.message}`,{cause:e});throw e}}({baseUrl:this.cfg.baseUrl,envelopeXml:b,timeoutMs:this.cfg.timeoutMs,logger:y}),r=function(e){const t=X.parse(e),r=t?.Envelope||t?.["soapenv:Envelope"]||t,n=r?.Body||r?.["soapenv:Body"]||r?.["S:Body"]||r?.["soap:Body"],o=n?.ProcessMessageResponse||n?.["ns2:ProcessMessageResponse"]||n?.["trans:ProcessMessageResponse"]||n,a=o?.payload||o?.["ns2:payload"]||o;return a?.content||a?.["ns2:content"]||a}(t),n=E(t),o=function(e){const t=u(e),r=a(e,e=>/RoRecordStatus$/i.test(e)).flatMap(s)[0];return{transaction:p(t),roRecord:d(r)}}(r),i=function(e){const t=String("ApplicationArea").toLowerCase(),r=[e];for(;r.length;){const e=r.pop();if(e&&"object"==typeof e)for(const[n,o]of Object.entries(e)){if(n.toLowerCase().endsWith(t))return o;o&&"object"==typeof o&&r.push(o)}}}(r),{status:g,norm:N}=function(e){const t=u(e)||a(e,e=>/Status$/i.test(e)).flatMap(s)[0]||{},r=(c(t,"Status")||t.Status||"").toString().trim();let n=(c(t,"StatusCode")||t.StatusCode||"").toString().trim();const o=t.Message&&m(t.Message)||m(t)||"";!n&&/success/i.test(r)&&(n="0");const i=Number(n);let l="FAIL";return/success/i.test(r)||0===i?l="SUCCESS":2!==i&&213!==i||(l="NO_MATCH"),{status:{Status:r,StatusCode:n,Message:o},norm:{kind:l,code:Number.isFinite(i)?i:void 0,message:o}}}(r);if("1"===process.env.RR_DUMP_STATUS&&(console.log("[rr] Status blocks:"),console.dir(o,{depth:null,colors:!0})),"1"===process.env.RR_DUMP_APPLICATION&&(console.log("[rr] ApplicationArea:"),console.dir(i,{depth:null,colors:!0})),"FAIL"===N.kind){const e=g?.StatusCode;throw new G(`Vendor status failure: ${e??""} ${g?.Message||g?.["#text"]||""}`.trim(),{status:g,resXml:n})}const T={success:"SUCCESS"===N.kind||"NO_MATCH"===N.kind,statusBlocks:o,applicationArea:i,xml:{request:C,response:n},parsed:r};if("function"==typeof l)try{T.data=l(r)}catch(e){y?.warn?.(`postParse failed: ${e?.message||e}`)}return"1"===process.env.RR_DUMP_XML&&console.log(`[rr] Full response XML (${e?.elementName}):\n`+n+"\n"),T?.data&&"1"===process.env.RR_DUMP_DATA&&(console.log(`[rr] Parsed response data (${e?.elementName}):\n`),console.dir(T.data,{depth:null,colors:!0})),T};try{return await async function(e,{max:t=3,logger:r}){let n,o=0;for(;o=t)break;const s=A(D(400,o));r?.warn?.(`Retrying attempt ${o}/${t} in ${s}ms: ${e.message}`),await M(s)}throw n}(f,{max:this.cfg.retries?.max??3,logger:y})}catch(e){if(e instanceof $||e instanceof G)throw e;throw new $(`Unexpected error: ${e?.message||e}`,{cause:e})}}async combinedSearch(e,r){return this._send(function(e={},r={}){if(!e||"object"!=typeof e)throw new Q("combinedSearch requires a query object");const n=function(e){if(!e)return"";const t=String(e).trim().toLowerCase();return"telephone"===t?"phone":"lic"===t||"plate"===t?"license":"vin"===t||"partvin"===t?"vin":"name"===t?"name":"namerecid"===t||"custid"===t?"nameRecId":"stkno"===t||"stock"===t?"stkNo":t}(e.kind),o={MaxRecs:Math.min(Number(e.maxResults||e.maxRecs||50),50)};if("phone"===n){const t=g(e.phone,"phone");if(!t)throw new Q("combinedSearch phone value missing");o.Phone=t}else if("license"===n){const t=g(e.license,"license");if(!t)throw new Q("combinedSearch license value missing");o.LicenseNum=t}else if("vin"===n){const t=g(e.vin,"vin");if(!t)throw new Q("combinedSearch vin value missing");o.PartVIN=t}else if("name"===n){const t=e.name;if("string"==typeof t){const e=t.trim();if(!e)throw new Q("combinedSearch name string is empty");o.LName=e}else{if(!t||"object"!=typeof t)throw new Q("combinedSearch name requires { fname/lname/mname } object or a last-name string");{const e=N(t.fname),r=N(t.mname),n=N(t.lname),a=!e&&!r&&!n&&N(t.name);if(e||r||n)o.FullName={FName:e,MName:r,LName:n};else{if(!a)throw new Q("combinedSearch name requires string last name, or object with any of { fname, lname, mname }");o.LName=a}}}}else if("nameRecId"===n){const t=g(e.nameRecId??e.custId,"custId");if(!t)throw new Q("combinedSearch nameRecId value missing");o.NameRecId=t}else{if("stkNo"!==n)throw new Q(`Unsupported CombinedSearch kind: ${e.kind}`);{const t=g(e.stkNo??e.stock,"stkNo");if(!t)throw new Q("combinedSearch stkNo value missing");o.StkNo=t}}if(1!==[o.Phone,o.LicenseNum,o.PartVIN,o.LName,o.FullName,o.NameRecId,o.StkNo].filter(Boolean).length)throw new Q("combinedSearch requires exactly one search criterion");const a=N(e.make),s=N(e.model),i=N(e.year);(a||s||i)&&(o.VehData={MakePfx:a,Model:s,Year:i});const l=t({routing:r.routing,sender:{component:"Rome",task:"CVC",referenceId:"Query",creator:"RCI",senderName:"RCI"},order:"creation-bod-sender-destination"});return{starXml:U.default.render('\n\n {{{ApplicationArea}}}\n \n \n {{#Phone}}{{/Phone}}\n {{#PartVIN}}{{/PartVIN}}\n {{#LicenseNum}}{{/LicenseNum}}\n {{#LName}}{{/LName}}\n {{#FullName}}\n \n {{/FullName}}\n {{#NameRecId}}{{/NameRecId}}\n {{#StkNo}}{{/StkNo}}\n \n {{#VehData}}\n \n {{/VehData}}\n \n\n',{ApplicationArea:l,...o}),routing:r.routing,envelope:r.envelope,elementName:"rey_RomeCustServVehCombReq",xsdFilename:"rey_RomeCustServVehCombReq.xsd",postParse:y}}(e,r))}async insertCustomer(e,r){return this._send(function(e,r){if(!r?.routing?.dealerNumber)throw new Q("routing.dealerNumber required");const n=f(e),o=t({routing:r.routing,sender:{component:"Rome",task:"CU",referenceId:"Insert"},order:"sender-creation-bod-destination"});return{starXml:U.default.render('\n\n {{{ApplicationArea}}}\n \n \n {{#C.contactInfo.Addresses}}\n \n {{/C.contactInfo.Addresses}}\n {{#C.contactInfo.Phones}}\n \n {{/C.contactInfo.Phones}}\n {{#C.contactInfo.Email}}\n \n {{/C.contactInfo.Email}}\n \n {{#C.custPersonal}}\n \n {{#BirthDates}}\n \n {{/BirthDates}}\n {{#SSNs}}\n \n {{/SSNs}}\n {{#DriverInfo}}\n \n {{/DriverInfo}}\n {{#CustChildren}}\n \n {{/CustChildren}}\n \n {{/C.custPersonal}}\n {{#C.dmsCustInfo}}\n \n {{#Followups}}\n \n {{/Followups}}\n \n {{/C.dmsCustInfo}}\n \n\n',{ApplicationArea:o,C:n}),routing:r.routing,envelope:r.envelope,postParse:b,xsdFilename:"rey_RomeCustomerInsertReq.xsd",elementName:"rey_RomeCustomerInsertReq"}}(e,r))}async updateCustomer(e,r){return this._send(function(e,r){if(!r?.routing?.dealerNumber)throw new Q("routing.dealerNumber required");if(!e.nameRecId)throw new Q("nameRecId or customerId required");const n=x(e.ibFlag);if("I"!==n&&"B"!==n)throw new Q("ibFlag required ('I' or 'B')");const o=f(e);o.contactInfo.NameRecId=String(e.nameRecId);const a=t({routing:r.routing,sender:{component:"Rome",task:"CU",referenceId:"Update"},order:"sender-creation-bod-destination"});return{starXml:U.default.render('\n\n {{{ApplicationArea}}}\n \n \n {{#C.contactInfo.Addresses}}\n \n {{/C.contactInfo.Addresses}}\n {{#C.contactInfo.Phones}}\n \n {{/C.contactInfo.Phones}}\n {{#C.contactInfo.Email}}\n \n {{/C.contactInfo.Email}}\n \n {{#C.custPersonal}}\n \n {{#BirthDates}}\n \n {{/BirthDates}}\n {{#SSNs}}\n \n {{/SSNs}}\n {{#DriverInfo}}\n \n {{/DriverInfo}}\n {{#CustChildren}}\n \n {{/CustChildren}}\n \n {{/C.custPersonal}}\n {{#C.dmsCustInfo}}\n \n {{#Followups}}\n \n {{/Followups}}\n \n {{/C.dmsCustInfo}}\n \n\n',{ApplicationArea:a,C:o}),routing:r.routing,envelope:r.envelope,postParse:b,xsdFilename:"rey_RomeCustomerUpdateReq.xsd",elementName:"rey_RomeCustomerUpdateReq"}}(e,r))}async insertServiceVehicle(e,r){return this._send(function(e={},r={}){if(!r?.routing?.dealerNumber)throw new Q("routing.dealerNumber is required");const n=t({routing:r.routing,sender:r?.envelope?.sender??{component:"Rome",task:"SV",referenceId:"Insert"},creationDateTime:r?.envelope?.creationDateTime,bodId:r?.envelope?.bodId}),o=function(e={}){const t=e.vin;if(!t)throw new Q("insertServiceVehicle: vin is required");const r=e.vehicleServInfo?.customerNo;if(!r)throw new Q("insertServiceVehicle: vehicleServInfo.customerNo (or customerNo) is required");return{VIN:String(t),ModelDesc:e.modelDesc,Carline:e.carline,ExtClrDesc:e.extClrDesc,IntClrDesc:e.intClrDesc,TrimDesc:e.trimDesc,BodyStyle:e.bodyStyle,EngineDesc:e.engineDesc,TransDesc:e.transDesc,Year:e.year,Odometer:e.odometer,OdometerUnits:e.odometerUnits,LicNo:e.vehicleDetail?.licNo,CustomerNo:String(r),vehicleServInfo:{salesmanNo:e.vehicleServInfo?.salesmanNo,inServiceDate:e.vehicleServInfo?.inServiceDate,mileage:e.vehicleServInfo?.mileage,teamCode:e.vehicleServInfo?.teamCode,vehExtWarranty:(()=>{const t=e.vehicleServInfo?.vehExtWarranty;if(!t)return;const r={contractNumber:t.contractNumber,expirationDate:t.expirationDate,expirationMileage:t.expirationMileage};return Object.values(r).some(e=>null!=e&&""!==e)?r:void 0})(),advisor:(()=>{const t=e.vehicleServInfo?.advisor,r=t?.contactInfo?.nameRecId;return r?{contactInfo:{nameRecId:String(r)}}:void 0})()}}}(e);return{starXml:U.default.render('\n\n {{{ApplicationArea}}}\n\n \n {{#V.Year}}{{.}}{{/V.Year}}\n {{#V.Odometer}}{{.}}{{/V.Odometer}}\n {{#V.OdometerUnits}}{{.}}{{/V.OdometerUnits}}\n\n {{#V.LicNo}}{{/V.LicNo}}\n \n\n \n {{#V.vehicleServInfo.salesmanNo}}{{.}}{{/V.vehicleServInfo.salesmanNo}}\n {{#V.vehicleServInfo.inServiceDate}}{{.}}{{/V.vehicleServInfo.inServiceDate}}\n {{#V.vehicleServInfo.mileage}}{{.}}{{/V.vehicleServInfo.mileage}}\n {{#V.vehicleServInfo.teamCode}}{{.}}{{/V.vehicleServInfo.teamCode}}\n\n {{#V.vehicleServInfo.vehExtWarranty}}\n \n {{#contractNumber}}{{.}}{{/contractNumber}}\n {{#expirationDate}}{{.}}{{/expirationDate}}\n {{#expirationMileage}}{{.}}{{/expirationMileage}}\n \n {{/V.vehicleServInfo.vehExtWarranty}}\n\n {{#V.vehicleServInfo.advisor}}\n \n \n \n {{/V.vehicleServInfo.advisor}}\n \n\n',{ApplicationArea:n,V:o}),routing:r.routing,envelope:r.envelope,postParse:R,xsdFilename:"rey_RomeServVehicleInsertReq.xsd",elementName:"rey_RomeServVehicleInsertReq"}}(e,r))}async getAdvisors(e,t){return this._send(I(e,t))}async createRepairOrder(e,r){return this._send(function(e={},r={}){if(!r?.routing?.dealerNumber)throw new Q("routing.dealerNumber required");if(!e?.customerNo)throw new Q("customerNo (CustNo) required");if(!e?.departmentType)throw new Q("departmentType (DeptType) required");if(!e?.vin)throw new Q("vin (Vin) required");if(!e?.outsdRoNo)throw new Q("outsdRoNo required");const n={customerNo:e.customerNo,advisorNo:e.advisorNo,tagNo:e.tagNo,outsdRoNo:e.outsdRoNo,departmentType:e.departmentType,vin:e.vin,mileageIn:e.mileageIn,roComment:e.roComment,estimate:e.estimate?{parts:e.estimate.parts,labor:e.estimate.labor,total:e.estimate.total}:void 0,tax:e.tax?{payType:e.tax.payType,taxCode:e.tax.taxCode,txblGrossAmt:e.tax.txblGrossAmt,grossTaxAmt:e.tax.grossTaxAmt}:void 0,rolabor:e.rolabor?{ops:e.rolabor.ops?.map(e=>({opCode:e.opCode,jobNo:e.jobNo,custPayTypeFlag:e.custPayTypeFlag,custTxblNtxblFlag:e.custTxblNtxblFlag,warrPayTypeFlag:e.warrPayTypeFlag,warrTxblNtxblFlag:e.warrTxblNtxblFlag,intrPayTypeFlag:e.intrPayTypeFlag,intrTxblNtxblFlag:e.intrTxblNtxblFlag,vlrCode:e.vlrCode,bill:e.bill?{payType:e.bill.payType,jobTotalHrs:e.bill.jobTotalHrs,billTime:e.bill.billTime,billRate:e.bill.billRate}:void 0,ccc:e.ccc?{cause:e.ccc.cause,complaint:e.ccc.complaint,correction:e.ccc.correction}:void 0,amount:e.amount?{payType:e.amount.payType,amtType:e.amount.amtType,custPrice:e.amount.custPrice,totalAmt:e.amount.totalAmt}:void 0}))}:void 0,ropart:e.ropart?{jobs:e.ropart.jobs?.map(e=>({opCode:e.opCode,jobNo:e.jobNo,lines:e.lines?.map(e=>({partNo:e.partNo,partNoDesc:e.partNoDesc,qtyOrd:e.partQty,sale:e.sale,cost:e.cost,addDeleteFlag:e.addDeleteFlag}))}))}:void 0,rogg:e.rogg?{roNo:e.rogg.roNo,ops:e.rogg.ops?.map(e=>({opCode:e.opCode,jobNo:e.jobNo,lines:e.lines?.map(e=>({breakOut:e.breakOut,itemType:e.itemType,itemDesc:e.itemDesc,custQty:e.custQty,warrQty:e.warrQty,intrQty:e.intrQty,custPayTypeFlag:e.custPayTypeFlag,warrPayTypeFlag:e.warrPayTypeFlag,intrPayTypeFlag:e.intrPayTypeFlag,custTxblNtxblFlag:e.custTxblNtxblFlag,warrTxblNtxblFlag:e.warrTxblNtxblFlag,intrTxblNtxblFlag:e.intrTxblNtxblFlag,amount:e.amount?{payType:e.amount.payType,amtType:e.amount.amtType,custPrice:e.amount.custPrice,dlrCost:e.amount.dlrCost}:void 0}))}))}:void 0,romisc:e.romisc?{roNo:e.romisc.roNo,ops:e.romisc.ops?.map(e=>({opCode:e.opCode,jobNo:e.jobNo,lines:e.lines?.map(e=>({miscCode:e.miscCode,custPayTypeFlag:e.custPayTypeFlag,warrPayTypeFlag:e.warrPayTypeFlag,intrPayTypeFlag:e.intrPayTypeFlag,custTxblNtxblFlag:e.custTxblNtxblFlag,warrTxblNtxblFlag:e.warrTxblNtxblFlag,intrTxblNtxblFlag:e.intrTxblNtxblFlag,codeAmt:e.codeAmt}))}))}:void 0};if(n.tax?.payType&&!["All","Cust","Intr","Warr"].includes(n.tax.payType))throw new Q("tax.payType must be one of: All, Cust, Intr, Warr");if(n.rolabor?.ops?.some(e=>e.custTxblNtxblFlag&&!["T","N"].includes(e.custTxblNtxblFlag)||e.warrTxblNtxblFlag&&!["T","N"].includes(e.warrTxblNtxblFlag)||e.intrTxblNtxblFlag&&!["T","N"].includes(e.intrTxblNtxblFlag)))throw new Q("Taxable flags (CustTxblNTxblFlag, WarrTxblNTxblFlag, IntrTxblNTxblFlag) must be 'T' or 'N'");if(n.rogg?.ops?.some(e=>e.lines?.some(e=>e.itemType&&!["G","P","S","F"].includes(e.itemType))))throw new Q("rogg.ops.lines.itemType must be one of: G, P, S, F");const o={...r?.envelope||{},sender:{component:r?.envelope?.sender?.component??"Rome",task:r?.envelope?.sender?.task??"BSMRO",referenceId:r?.envelope?.sender?.referenceId??"Insert",creatorNameCode:r?.envelope?.sender?.creatorNameCode??"RCI",senderNameCode:r?.envelope?.sender?.senderNameCode??"RCI"}},a=t({routing:r.routing,sender:o.sender,creationDateTime:o.creationDateTime,bodId:o.bodId});return{starXml:U.default.render('\n\n {{{ApplicationArea}}}\n \n \n {{#RO.roComment}}\n \n {{/RO.roComment}}\n\n {{#RO.estimate}}\n \n {{/RO.estimate}}\n\n {{#RO.tax}}\n \n {{/RO.tax}}\n \n\n {{#RO.rolabor}}\n \n {{#RO.rolabor.ops}}\n \n {{#bill}}\n \n {{/bill}}\n\n {{#ccc}}\n \n {{/ccc}}\n\n {{#amount}}\n \n {{/amount}}\n \n {{/RO.rolabor.ops}}\n \n {{/RO.rolabor}}\n\n {{#RO.ropart}}\n \n {{#RO.ropart.jobs}}\n \n {{#lines}}\n \n {{/lines}}\n \n {{/RO.ropart.jobs}}\n \n {{/RO.ropart}}\n\n {{#RO.rogg}}\n \n {{#RO.rogg.ops}}\n \n {{#lines}}\n \n {{#amount}}\n \n {{/amount}}\n \n {{/lines}}\n \n {{/RO.rogg.ops}}\n \n {{/RO.rogg}}\n\n {{#RO.romisc}}\n \n {{#RO.romisc.ops}}\n \n {{#lines}}\n \n {{/lines}}\n \n {{/RO.romisc.ops}}\n \n {{/RO.romisc}}\n \n\n',{ApplicationArea:a,RO:n}),routing:r.routing,envelope:o,postParse:F,xsdFilename:"rey_RomeCreateBSMRepairOrderReq.xsd"}}(e,r))}async updateRepairOrder(e,r){return this._send(function(e={},r={}){if(!r?.routing?.dealerNumber)throw new Q("routing.dealerNumber required");if(!e?.finalUpdate)throw new Q("finalUpdate (FinalUpdate) required");if(!["Y","N"].includes(e.finalUpdate))throw new Q("finalUpdate must be 'Y' or 'N'");if(!e?.outsdRoNo)throw new Q(" outsdRoNo");const n={finalUpdate:e.finalUpdate||"N",roNo:e.roNo,customerNo:e.customerNo,tagNo:e.tagNo,outsdRoNo:e.outsdRoNo,departmentType:e.departmentType,vin:e.vin,mileageIn:e.mileageIn,mileageOut:e.mileageOut,roComment:e.roComment,estimate:e.estimate?{estimateType:e.estimate.estimateType}:void 0,tax:e.tax?{payType:e.tax.payType,taxCode:e.tax.taxCode,txblGrossAmt:e.tax.txblGrossAmt,grossTaxAmt:e.tax.grossTaxAmt}:void 0,rolabor:e.rolabor?{ops:e.rolabor.ops?.map(e=>({opCode:e.opCode,jobNo:e.jobNo,custPayTypeFlag:e.custPayTypeFlag,custTxblNtxblFlag:e.custTxblNtxblFlag,warrPayTypeFlag:e.warrPayTypeFlag,warrTxblNtxblFlag:e.warrTxblNtxblFlag,intrPayTypeFlag:e.intrPayTypeFlag,intrTxblNtxblFlag:e.intrTxblNtxblFlag,vlrCode:e.vlrCode,bill:e.bill?{payType:e.bill.payType,jobTotalHrs:e.bill.jobTotalHrs,billTime:e.bill.billTime,billRate:e.bill.billRate}:void 0,ccc:e.ccc?{cause:e.ccc.cause,complaint:e.ccc.complaint,correction:e.ccc.correction}:void 0,amount:e.amount?{payType:e.amount.payType,amtType:e.amount.amtType,custPrice:e.amount.custPrice}:void 0}))}:void 0,ropart:e.ropart?{jobs:e.ropart.jobs?.map(e=>({opCode:e.opCode,jobNo:e.jobNo,lines:e.lines?.map(e=>({partNo:e.partNo,partNoDesc:e.partNoDesc,qtyOrd:e.partQty,sale:e.sale,cost:e.cost,addDeleteFlag:e.addDeleteFlag}))}))}:void 0,rogg:e.rogg?{roNo:e.rogg.roNo,ops:e.rogg.ops?.map(e=>({opCode:e.opCode,jobNo:e.jobNo,lines:e.lines?.map(e=>({breakOut:e.breakOut,itemType:e.itemType,itemDesc:e.itemDesc,custQty:e.custQty,warrQty:e.warrQty,intrQty:e.intrQty,custPayTypeFlag:e.custPayTypeFlag,warrPayTypeFlag:e.warrPayTypeFlag,intrPayTypeFlag:e.intrPayTypeFlag,custTxblNtxblFlag:e.custTxblNtxblFlag,warrTxblNtxblFlag:e.warrTxblNtxblFlag,intrTxblNtxblFlag:e.intrTxblNtxblFlag,amount:e.amount?{payType:e.amount.payType,amtType:e.amount.amtType,custPrice:e.amount.custPrice,dlrCost:e.amount.dlrCost}:void 0}))}))}:void 0,romisc:e.romisc?{roNo:e.romisc.roNo,ops:e.romisc.ops?.map(e=>({opCode:e.opCode,jobNo:e.jobNo,lines:e.lines?.map(e=>({miscCode:e.miscCode,custPayTypeFlag:e.custPayTypeFlag,warrPayTypeFlag:e.warrPayTypeFlag,intrPayTypeFlag:e.intrPayTypeFlag,custTxblNtxblFlag:e.custTxblNtxblFlag,warrTxblNtxblFlag:e.warrTxblNtxblFlag,intrTxblNtxblFlag:e.intrTxblNtxblFlag,codeAmt:e.codeAmt}))}))}:void 0};if(n.tax?.payType&&!["All","Cust","Intr","Warr"].includes(n.tax.payType))throw new Q("tax.payType must be one of: All, Cust, Intr, Warr");if(n.rolabor?.ops?.some(e=>e.custTxblNtxblFlag&&!["T","N"].includes(e.custTxblNtxblFlag)||e.warrTxblNtxblFlag&&!["T","N"].includes(e.warrTxblNtxblFlag)||e.intrTxblNtxblFlag&&!["T","N"].includes(e.intrTxblNtxblFlag)))throw new Q("Taxable flags (CustTxblNTxblFlag, WarrTxblNTxblFlag, IntrTxblNTxblFlag) must be 'T' or 'N'");if(n.rogg?.ops?.some(e=>e.lines?.some(e=>e.itemType&&!["G","P","S","F"].includes(e.itemType))))throw new Q("rogg.ops.lines.itemType must be one of: G, P, S, F");const o={...r?.envelope||{},sender:{component:r?.envelope?.sender?.component??"Rome",task:r?.envelope?.sender?.task??"BSMRO",referenceId:r?.envelope?.sender?.referenceId??"Update",creatorNameCode:r?.envelope?.sender?.creatorNameCode??"RCI",senderNameCode:r?.envelope?.sender?.senderNameCode??"RCI"}},a=t({routing:r.routing,sender:o.sender,creationDateTime:o.creationDateTime,bodId:o.bodId});return{starXml:U.default.render('\n\n {{{ApplicationArea}}}\n \n \n {{#RO.roComment}}\n \n {{/RO.roComment}}\n\n {{#RO.estimate}}\n \n {{/RO.estimate}}\n\n {{#RO.tax}}\n \n {{/RO.tax}}\n \n\n {{#RO.rolabor}}\n \n {{#RO.rolabor.ops}}\n \n {{#bill}}\n \n {{/bill}}\n\n {{#ccc}}\n \n {{/ccc}}\n\n {{#amount}}\n \n {{/amount}}\n \n {{/RO.rolabor.ops}}\n \n {{/RO.rolabor}}\n\n {{#RO.ropart}}\n \n {{#RO.ropart.jobs}}\n \n {{#lines}}\n \n {{/lines}}\n \n {{/RO.ropart.jobs}}\n \n {{/RO.ropart}}\n\n {{#RO.rogg}}\n \n {{#RO.rogg.ops}}\n \n {{#lines}}\n \n {{#amount}}\n \n {{/amount}}\n \n {{/lines}}\n \n {{/RO.rogg.ops}}\n \n {{/RO.rogg}}\n\n {{#RO.romisc}}\n \n {{#RO.romisc.ops}}\n \n {{#lines}}\n \n {{/lines}}\n \n {{/RO.romisc.ops}}\n \n {{/RO.romisc}}\n \n\n',{ApplicationArea:a,RO:n}),routing:r.routing,envelope:o,postParse:F,xsdFilename:"rey_RomeUpdateBSMRepairOrderReq.xsd",elementName:"rey_RomeUpdateBSMRepairOrderReq"}}(e,r))}async getParts(e,r){return this._send(function(e={},r={}){const n=e.roNumber?String(e.roNumber).trim():void 0;if(!n)throw new Q("getParts: roNumber required");const o=t({routing:r.routing,sender:{component:"Rome",task:"RCT",referenceId:"Query",creator:"RCI",senderName:"RCI"}});return{starXml:U.default.render('\n\n {{{ApplicationArea}}}\n \n\n',{ApplicationArea:o,RoNumber:n}),routing:r.routing,envelope:r.envelope,xsdFilename:"rey_RomeGetPartsReq.xsd",elementName:"rey_RomeGetPartsReq",postParse:e=>function(e){return e?.rey_RomeGetPartsResp?.RoParts?.map(e=>({partNumber:w(e,"PartNumber"),partDescription:w(e,"PartDescription"),quantityOrdered:w(e,"QuantityOrdered"),quantityShipped:w(e,"QuantityShipped"),price:w(e,"Price"),cost:w(e,"Cost"),processedFlag:w(e,"ProcessedFlag"),addOrDelete:w(e,"AddOrDelete")}))||[]}(e)}}(e,r))}},exports.errors=W;
diff --git a/server/rr/lib/index.mjs b/server/rr/lib/index.mjs
index 52a3e3c55..09e628d64 100644
--- a/server/rr/lib/index.mjs
+++ b/server/rr/lib/index.mjs
@@ -1 +1 @@
-function e({routing:e={},sender:t={},creationDateTime:r,bodId:n}={}){const o={Sender:{Component:t.component??"Rome",Task:t.task??"CU",ReferenceId:t.referenceId??"Query",CreatorNameCode:t.creator??"RCI",SenderNameCode:t.senderName??"RCI"},CreationDateTime:r??(new Date).toISOString().replace(/\.\d{3}Z$/,"Z"),BODId:n??E(),Destination:{DestinationNameCode:"RR",DealerNumber:e.dealerNumber||"",StoreNumber:e.storeNumber||"",AreaNumber:e.areaNumber||""}},a={bod:"{{#BODId}}{{BODId}}{{/BODId}}",creation:"{{CreationDateTime}}",sender:"\n \n {{Sender.Component}}\n {{Sender.Task}}\n {{#Sender.ReferenceId}}{{Sender.ReferenceId}}{{/Sender.ReferenceId}}\n {{#Sender.CreatorNameCode}}{{Sender.CreatorNameCode}}{{/Sender.CreatorNameCode}}\n {{#Sender.SenderNameCode}}{{Sender.SenderNameCode}}{{/Sender.SenderNameCode}}\n ".trim(),dest:"\n \n {{Destination.DestinationNameCode}}\n {{#Destination.DealerNumber}}{{Destination.DealerNumber}}{{/Destination.DealerNumber}}\n {{#Destination.StoreNumber}}{{Destination.StoreNumber}}{{/Destination.StoreNumber}}\n {{#Destination.AreaNumber}}{{Destination.AreaNumber}}{{/Destination.AreaNumber}}\n ".trim()},s=`\n${["bod","creation","sender","dest"].map(e=>a[e]).join("\n")}\n`;return V.render(s,o).trim()}function t(e,t=2){const r=" ".repeat(t);return String(e).split("\n").map(e=>e.length?r+e:e).join("\n")}function r(e){return String(e??"").replace(/&/g,"&").replace(//g,">")}function n(e,t){if(null==e)return null;if(Array.isArray(e)){for(const r of e){const e=n(r,t);if(null!=e)return e}return null}if("object"!=typeof e)return null;for(const[r,o]of Object.entries(e)){if(t(r,o))return o;const e=n(o,t);if(null!=e)return e}return null}function o(e,t,r=[]){if(null==e)return r;if(Array.isArray(e)){for(const n of e)o(n,t,r);return r}if("object"!=typeof e)return r;for(const[n,a]of Object.entries(e))t(n,a)&&r.push(a),o(a,t,r);return r}function a(e){return null==e?[]:Array.isArray(e)?e:[e]}function s(e,t){if(e&&"object"==typeof e)return function(e){if(null!=e)return"string"==typeof e||"number"==typeof e||"boolean"==typeof e?String(e):"object"==typeof e&&"#text"in e?String(e["#text"]):void 0}(e[t])}function i(e,t){const r=s(e,t);if(G(r))return r;const n=function(e,t){if(e&&"object"==typeof e)return e.$&&G(e.$[t])?e.$[t]:G(e[`@_${t}`])?e[`@_${t}`]:G(e[`@${t}`])?e[`@${t}`]:e._attributes&&G(e._attributes[t])?e._attributes[t]:e.attributes&&G(e.attributes[t])?e.attributes[t]:void 0}(e,t);return G(n)?n:void 0}function l(e,t){if(e&&"object"==typeof e)return null!=e[`@_${t}`]?e[`@_${t}`]:void 0}function c(e){if(null!=e){if("string"==typeof e)return e;if("number"==typeof e)return String(e);if("object"==typeof e){if(null!=e._)return String(e._);if(null!=e["#text"])return String(e["#text"]);if(null!=e.text)return String(e.text)}}}function m(e){return o(e,e=>/(GenTransStatus|TransStatus)$/i.test(e)).flatMap(a)[0]}function u(e){if(e)return{status:(l(e,"Status")||e.Status||c(e)||"").toString().trim()||void 0,statusCode:(l(e,"StatusCode")||e.StatusCode||"").toString().trim()||void 0,message:e.Message&&c(e.Message)||e.GenTransStatus&&c(e.GenTransStatus)||e.TransStatus&&c(e.TransStatus)||c(e)||void 0}}function p(e){if(e)return{status:(l(e,"Status")||e.Status||c(e)||"").toString().trim()||void 0,date:(l(e,"Date")||e.Date||"").toString().trim()||void 0,time:(l(e,"Time")||e.Time||"").toString().trim()||void 0,outsdRoNo:(l(e,"OutsdRoNo")||e.OutsdRoNo||"").toString().trim()||void 0,dmsRoNo:(l(e,"DMSRoNo")||e.DMSRoNo||"").toString().trim()||void 0,errorMessage:(l(e,"ErrorMessage")||e.ErrorMessage||"").toString().trim()||void 0}}function d(e){const t=e?.rey_RomeCustServVehCombRes??e?.rey_RomeCustServVehCombReq??e?.rey_RomeCustServVehComb??e??{};return a(t?.CustServVehComb??t?.CustServVehCombRes??t?.CustServVehCombReq??t).map(e=>{const t=e?.NameContactId??void 0,r=t?.NameId??void 0,n=r?.IndName?Q(r.IndName):void 0,o=r?.BusName?Q(r.BusName):void 0,s=t&&{NameId:r&&{...Q(r)||{},...n?{IndName:n}:{},...o?{BusName:o}:{}},Address:a(t?.Address).map(e=>Q(e)||{}),ContactOptions:a(t?.ContactOptions).map(e=>Q(e)||{}),Phone:a(t?.Phone).map(e=>Q(e)||{}),Email:a(t?.Email).map(e=>Q(e)||{})},i=a(e?.ServVehicle).map(e=>{const t=e?.Vehicle,r=t?.VehicleDetail,n=t&&{...Q(t)||{},...r?{VehicleDetail:Q(r)||{}}:{}},o=e?.VehicleServInfo,s=o?.VehExtWarranty,i=o?.Advisor,l=i?.ContactInfo;let c;i&&(c={...Q(i)||{},...l?{ContactInfo:Q(l)||{}}:{}});const m=o&&{...Q(o)||{},...s?{VehExtWarranty:Q(s)||{}}:{},...c?{Advisor:c}:{},...o?.VehServComments?{VehServComments:a(o.VehServComments).map(e=>W(e)).filter(e=>null!=e&&""!==String(e).trim())}:{}};return{...n?{Vehicle:n}:{},...m?{VehicleServInfo:m}:{}}}),l=a(e?.Message).map(e=>{const t=W(e);return{...Q(e)||{},...null!=t&&""!==String(t).trim()?{Text:t}:{}}}).filter(e=>Object.keys(e).length>0),c={};return s&&(c.NameContactId=s),i.length&&(c.ServVehicle=i),l.length&&(c.Message=l),c})}function y(e,t){if(null!=e)return String("string"==typeof e||"number"==typeof e?e:e[t]||"")}function g(e){return String(e??"").trim()||void 0}function N(e,...t){if(e)for(const r of t){if(e.$&&null!=e.$[r])return e.$[r];if(null!=e[`@_${r}`])return e[`@_${r}`];if(null!=e[r]&&"object"!=typeof e[r])return e[r]}}function T(e){const t=function(e){const t=n(e,e=>"rey_RomeCustomerResponse"===e||e.endsWith(":rey_RomeCustomerResponse"));return t?o(t,e=>"TransStatus"===e||e.endsWith(":TransStatus")).flatMap(a)[0]:void console.log("No rey_RomeCustomerResponse found in root")}(e);if(!t)return{dmsRecKey:void 0};const r=N(t,"DMSRecKey");return{dmsRecKey:null!=r?String(r):void 0,status:N(t,"Status"),statusCode:N(t,"StatusCode")}}function b(e){if(null==e)return;const t=String(e).toUpperCase().replace(/[^A-Z0-9 ]+/g,"");if(!t)throw new q(`Invalid string: ${e}. Must contain A-Z, 0-9, or space`);return t}function C(e){return e?String(e).toUpperCase():void 0}function x(e={}){const t=C(e.ibFlag)||(e.firstName?"I":"B");if("I"!==t&&"B"!==t)throw new q("ibFlag must be 'I' or 'B'");const r=e.lastName||e.customerName;if(!r)throw new q("lastName or customerName required");if("I"===t&&!e.firstName)throw new q("firstName required when ibFlag='I'");const n=C(e.customerType);if(n&&!["R","W","I"].includes(n))throw new q("customerType must be 'R', 'W', 'I', Retail, Wholesale, or Internal");const o=(e.addresses||[]).map(e=>{const t={Type:C(e.type)||"P",Addr1:e.line1?String(e.line1):void 0,Addr2:e.line2?String(e.line2):void 0,City:e.city?String(e.city):void 0,State:e.state?String(e.state):void 0,Zip:e.postalCode?String(e.postalCode):void 0,County:e.county?String(e.county):void 0,Country:e.country?String(e.country):void 0};if(!t.Addr1)throw new q("Address requires line1");return t}),a=(e.phones||[]).map(e=>{const t={Type:C(e.type)||"H",Num:e.number?String(e.number):void 0,Ext:e.extension?String(e.extension):void 0};if(!t.Num)throw new q("Phone requires number");return t}),s=e.emails?.[0]?.address?{MailTo:String(e.emails[0].address)}:void 0,i=e.personal,l=i?{Gender:C(i.gender),OtherName:b(i.otherName),AnniversaryDate:i.anniversaryDate?String(i.anniversaryDate):void 0,EmployerName:b(i.employerName),EmployerPhone:i.employerPhone?String(i.employerPhone):void 0,Occupation:b(i.occupation),OptOut:i.optOut?String(i.optOut):void 0,OptOutUse:i.optOutUse?String(i.optOutUse):void 0,BirthDates:(i.birthDates||[]).map(e=>({Type:C(e.type)||"P",date:e.date?String(e.date):void 0})).filter(e=>e.date),SSNs:(i.ssns||[]).map(e=>({Type:C(e.type)||"P",ssn:e.ssn?String(e.ssn):void 0})).filter(e=>e.ssn),DriverInfo:i.driver?[{Type:C(i.driver.type)||"P",LicNum:i.driver.licenseNumber?String(i.driver.licenseNumber):void 0,LicState:i.driver.licenseState?String(i.driver.licenseState):void 0,LicExpDate:i.driver.licenseExpDate?String(i.driver.licenseExpDate):void 0}].filter(e=>e.LicNum):void 0,CustChildren:(i.children||[]).map(e=>({ChildName:b(e.name)})).filter(e=>e.ChildName)}:void 0,c=e.dms,m=c?{TaxExemptNum:c.taxExemptNum?String(c.taxExemptNum):void 0,SalesTerritory:c.salesTerritory?String(c.salesTerritory):void 0,DeliveryRoute:c.deliveryRoute?String(c.deliveryRoute):void 0,SalesmanNum:c.salesmanNum?String(c.salesmanNum):void 0,LastContactMethod:c.lastContactMethod?String(c.lastContactMethod):void 0,Followups:(c.followups||[]).map(e=>({Type:C(e.type),Value:C(e.value)})).filter(e=>e.Type&&e.Value)}:void 0;return{custCateg:n||"R",createdBy:e.createdBy?String(e.createdBy):void 0,contactInfo:{IBFlag:t,LastName:b(r),FirstName:b(e.firstName),MidName:b(e.midName),Salut:b(e.salut),Suffix:b(e.suffix),Addresses:o,Phones:a,Email:s},custPersonal:l,dmsCustInfo:m}}function R(e){const t=n(e,e=>"rey_RomeServVehicleInsertResponse"===e||e.endsWith(":rey_RomeServVehicleInsertResponse"))||e,r=n(t,e=>"GenTransStatus"===e||e.endsWith(":GenTransStatus"));return{status:r?i(r,"Status"):void 0,statusCode:r?i(r,"StatusCode"):void 0}}function f(e,t){const r=Array.isArray(t)?t.map(e=>e.toLowerCase()):[String(t).toLowerCase()],n=[e];for(;n.length;){const e=n.pop();if(Y(e))for(const t of Object.keys(e)){const o=e[t],a=H(t).toLowerCase();if(r.includes(a))return o;if(Y(o))n.push(o);else if(Array.isArray(o))for(const e of o)Y(e)&&n.push(e)}}}function S(e,t){if(e&&Y(e)){if(null!=e.$?.[t])return e.$[t];if(null!=e[`@${t}`])return e[`@${t}`];if(null!=e[`@_${t}`])return e[`@_${t}`]}}function v(e){if(null!=e){if("string"==typeof e)return e;if("number"==typeof e)return String(e);if(Y(e)){if(null!=e._)return String(e._);if(null!=e["#text"])return String(e["#text"]);if(null!=e.text)return String(e.text)}}}function O(e){const t=f(e,["CreateBSMRepairOrderResp","UpdateBSMRepairOrderResp"])||e,r=f(t,"RoRecordStatus")||{};return{status:S(r,"Status")||v(f(r,"Status")),date:S(r,"Date")||v(f(r,"Date")),time:S(r,"Time")||v(f(r,"Time")),outsdRoNo:S(r,"OutsdRoNo")||v(f(r,"OutsdRoNo")),dmsRoNo:S(r,"DMSRoNo")||v(f(r,"DMSRoNo")),errorMessage:S(r,"ErrorMessage")||v(f(r,"ErrorMessage"))}}function F(t={},r={}){const n=function(e){if(!e)throw new Error("department is required (S, P, B, SERVICE, PARTS, BODY)");const t=String(e).trim().toUpperCase();if("S"===t||"P"===t||"B"===t)return t;if("SERVICE"===t)return"S";if("PART"===t||"PARTS"===t)return"P";if("BODY"===t||"BODYSHOP"===t||"BODY SHOP"===t)return"B";throw new Error(`Invalid department: ${e}. Must be S, P, B, SERVICE, PARTS, BODY, BODYSHOP, or BODY SHOP`)}(t.department),o=t.advisorNumber?String(t.advisorNumber).trim():void 0,a=e({routing:r.routing,sender:r?.envelope?.sender,creationDateTime:r?.envelope?.creationDateTime,bodId:r?.envelope?.bodId});return{starXml:V.render('\n\n {{{ApplicationArea}}}\n \n \n \n\n',{ApplicationArea:a,DepartmentType:n,AdvisorNumber:o}),routing:r.routing,envelope:r.envelope,xsdFilename:"rey_RomeGetAdvisorsReq.xsd",elementName:"rey_RomeGetAdvisorsReq",postParse:e=>function(e,t={}){const r=t?.department;var n;return(e=>{const t=e?.Advisor;return t?Array.isArray(t)?t:[t]:[]})((n=e,n?.rey_RomeGetAdvisorsResp??n??{})).map(e=>({advisorId:X(e,"AdvisorNumber"),firstName:X(e,"FirstName"),lastName:X(e,"LastName"),department:r}))}(e,{department:n})}}function I(e){return null==e?void 0:String(e)}function h(e,t){if(e)return null!=e[t]?"object"!=typeof e[t]?I(e[t]):I(e[t]["#text"]):null!=e[`@_${t}`]?I(e[`@_${t}`]):void 0}function w(e){const t=e?.meta?.statusBlocks?.transaction?.message;if(t)return String(t);return String((e?.meta?.status?.Message??e?.meta?.status?.message)||e?.message||"")}function P(e,t){return Math.min(1e4,e*Math.pow(2,t))}function D(e){return e+Math.floor(250*Math.random())}function A(e){return new Promise(t=>setTimeout(t,e))}function M(e){return/lock|in use|record.*busy/i.test(String(e||""))}import V from"mustache";import{v4 as E}from"uuid";import L from"axios";import{XMLParser as _}from"fast-xml-parser";class j extends Error{constructor(e,t={}){super(e),this.name="RRTransportError",this.meta=t}}class B extends Error{constructor(e,t={}){super(e),this.name="RRVendorStatusError",this.meta=t,this.retryable=!!t.retryable}}class q extends Error{constructor(e,t={}){super(e),this.name="RRValidationError",this.meta=t}}const U=Object.freeze({__proto__:null,RRTransportError:j,RRVendorStatusError:B,RRValidationError:q}),k={info:(...e)=>console.log("[rr-rome]",...e),warn:(...e)=>console.warn("[rr-rome]",...e),error:(...e)=>console.error("[rr-rome]",...e),debug:(...e)=>{process.env.RR_DEBUG&&console.log("[rr-rome][debug]",...e)}},G=e=>null!=e&&""!==String(e).trim(),$=new _({ignoreAttributes:!1,attributeNamePrefix:"@_",parseAttributeValue:!1,parseTagValue:!1,isArray:e=>["Advisor"].includes(e)}),Q=e=>{if(!e||"object"!=typeof e)return;const t={};for(const[r,n]of Object.entries(e))r.startsWith("@_")&&(t[r.slice(2)]=n);return Object.keys(t).length?t:void 0},W=e=>{if(null!=e)return"string"==typeof e?e:e["#text"]},H=e=>{if("string"!=typeof e)return"";let t=e.includes("}")?e.split("}").pop():e;return t=t.includes(":")?t.split(":").pop():t,t.startsWith("rey_")&&(t=t.slice(4)),t},Y=e=>e&&"object"==typeof e&&!Array.isArray(e),X=(e,t)=>((e,t)=>e?.[`@_${t}`])(e,t)??s(e,t);class Z{constructor(e){if(!e?.baseUrl)throw new Error("RRClient requires baseUrl");if(!e?.username)throw new Error("RRClient requires username");if(!e?.password)throw new Error("RRClient requires password");this.cfg={wssePasswordType:"Text",timeoutMs:3e4,logger:k,retries:{max:3},...e},this.mask={password:!0}}async _send(e){const{starXml:n,routing:s,envelope:i,postParse:d}=e,y=this.cfg.logger||k,{bodId:g,creationDateTime:N,sender:T}=function(e){return{bodId:e?.bodId||E(),creationDateTime:e?.creationDateTime||new Date,sender:e?.sender||{}}}(i),b=function({username:e,password:n,wssePasswordType:o="Text",starContentXml:a}){const s=function(e){return`\n \n \n \n${t(e,10)}\n \n \n \n `.trim()}(a);return`\n \n \n${t(function(e,t,n){const o="Digest"===n?' Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest"':' Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"';return`\n \n \n ${r(e)}\n ${r(t)}\n \n \n `.trim()}(e,n,o),8)}\n \n \n${t(s,8)}\n \n \n `.trim()}({username:this.cfg.username,password:this.cfg.password,wssePasswordType:this.cfg.wssePasswordType||"Text",routing:s,sender:T,creationDateTime:(C=N,"string"==typeof C?C:(C instanceof Date?C:new Date).toISOString().replace(/\.\d{3}Z$/,"Z")),bodId:g,starContentXml:n});var C;"1"===process.env.RR_DUMP_ENVELOPE&&console.log(`[rr] Soap envelope about to send (${e?.elementName}): \n`+b+"\n");const x=async()=>{const t=await async function({baseUrl:e,envelopeXml:t,timeoutMs:r=3e4,logger:n}){try{const n=await L.post(e,t,{timeout:r,headers:{"Content-Type":"text/xml; charset=utf-8",SOAPAction:"http://www.starstandards.org/webservices/2005/10/transport/ProcessMessage"},responseType:"text",validateStatus:()=>!0});if(n.status>=200&&n.status<300)return String(n.data??"");throw new j(`HTTP ${n.status}: ${function(e){const t=String(e??"");return t.length>1024?t.slice(0,1024)+"…":t}(n.data)}`,{status:n.status,body:n.data})}catch(e){if(L.isAxiosError(e))throw new j(`Network error: ${e.message}`,{cause:e});throw e}}({baseUrl:this.cfg.baseUrl,envelopeXml:b,timeoutMs:this.cfg.timeoutMs,logger:y}),r=function(e){const t=$.parse(e),r=t?.Envelope||t?.["soapenv:Envelope"]||t,n=r?.Body||r?.["soapenv:Body"]||r?.["S:Body"]||r?.["soap:Body"],o=n?.ProcessMessageResponse||n?.["ns2:ProcessMessageResponse"]||n?.["trans:ProcessMessageResponse"]||n,a=o?.payload||o?.["ns2:payload"]||o;return a?.content||a?.["ns2:content"]||a}(t),n=function(e){const t=m(e),r=o(e,e=>/RoRecordStatus$/i.test(e)).flatMap(a)[0];return{transaction:u(t),roRecord:p(r)}}(r),s=function(e){const t=String("ApplicationArea").toLowerCase(),r=[e];for(;r.length;){const e=r.pop();if(e&&"object"==typeof e)for(const[n,o]of Object.entries(e)){if(n.toLowerCase().endsWith(t))return o;o&&"object"==typeof o&&r.push(o)}}}(r),{status:i,norm:g}=function(e){const t=m(e)||o(e,e=>/Status$/i.test(e)).flatMap(a)[0]||{},r=(l(t,"Status")||t.Status||"").toString().trim();let n=(l(t,"StatusCode")||t.StatusCode||"").toString().trim();const s=t.Message&&c(t.Message)||c(t)||"";!n&&/success/i.test(r)&&(n="0");const i=Number(n);let u="FAIL";return/success/i.test(r)||0===i?u="SUCCESS":2!==i&&213!==i||(u="NO_MATCH"),{status:{Status:r,StatusCode:n,Message:s},norm:{kind:u,code:Number.isFinite(i)?i:void 0,message:s}}}(r);if("1"===process.env.RR_DUMP_STATUS&&(console.log("[rr] Status blocks:"),console.dir(n,{depth:null,colors:!0})),"1"===process.env.RR_DUMP_APPLICATION&&(console.log("[rr] ApplicationArea:"),console.dir(s,{depth:null,colors:!0})),"FAIL"===g.kind){const e=i?.StatusCode;throw new B(`Vendor status failure: ${e??""} ${i?.Message||i?.["#text"]||""}`.trim(),{status:i,resXml:t})}const N={success:"SUCCESS"===g.kind||"NO_MATCH"===g.kind,statusBlocks:n,applicationArea:s,xml:{request:b,response:t},parsed:r};if("function"==typeof d)try{N.data=d(r)}catch(e){y?.warn?.(`postParse failed: ${e?.message||e}`)}return"1"===process.env.RR_DUMP_XML&&console.log(`[rr] Full response XML (${e?.elementName}):\n`+t+"\n"),N?.data&&"1"===process.env.RR_DUMP_DATA&&(console.log(`[rr] Parsed response data (${e?.elementName}):\n`),console.dir(N.data,{depth:null,colors:!0})),N};try{return await async function(e,{max:t=3,logger:r}){let n,o=0;for(;o=t)break;const s=D(P(400,o));r?.warn?.(`Retrying attempt ${o}/${t} in ${s}ms: ${e.message}`),await A(s)}throw n}(x,{max:this.cfg.retries?.max??3,logger:y})}catch(e){if(e instanceof j||e instanceof B)throw e;throw new j(`Unexpected error: ${e?.message||e}`,{cause:e})}}async combinedSearch(t,r){return this._send(function(t={},r={}){if(!t||"object"!=typeof t)throw new q("combinedSearch requires a query object");const n=function(e){if(!e)return"";const t=String(e).trim().toLowerCase();return"telephone"===t?"phone":"lic"===t||"plate"===t?"license":"vin"===t||"partvin"===t?"vin":"name"===t?"name":"namerecid"===t||"custid"===t?"nameRecId":"stkno"===t||"stock"===t?"stkNo":t}(t.kind),o={MaxRecs:Math.min(Number(t.maxResults||t.maxRecs||50),50)};if("phone"===n){const e=y(t.phone,"phone");if(!e)throw new q("combinedSearch phone value missing");o.Phone=e}else if("license"===n){const e=y(t.license,"license");if(!e)throw new q("combinedSearch license value missing");o.LicenseNum=e}else if("vin"===n){const e=y(t.vin,"vin");if(!e)throw new q("combinedSearch vin value missing");o.PartVIN=e}else if("name"===n){const e=t.name;if("string"==typeof e){const t=e.trim();if(!t)throw new q("combinedSearch name string is empty");o.LName=t}else{if(!e||"object"!=typeof e)throw new q("combinedSearch name requires { fname/lname/mname } object or a last-name string");{const t=g(e.fname),r=g(e.mname),n=g(e.lname),a=!t&&!r&&!n&&g(e.name);if(t||r||n)o.FullName={FName:t,MName:r,LName:n};else{if(!a)throw new q("combinedSearch name requires string last name, or object with any of { fname, lname, mname }");o.LName=a}}}}else if("nameRecId"===n){const e=y(t.nameRecId??t.custId,"custId");if(!e)throw new q("combinedSearch nameRecId value missing");o.NameRecId=e}else{if("stkNo"!==n)throw new q(`Unsupported CombinedSearch kind: ${t.kind}`);{const e=y(t.stkNo??t.stock,"stkNo");if(!e)throw new q("combinedSearch stkNo value missing");o.StkNo=e}}if(1!==[o.Phone,o.LicenseNum,o.PartVIN,o.LName,o.FullName,o.NameRecId,o.StkNo].filter(Boolean).length)throw new q("combinedSearch requires exactly one search criterion");const a=g(t.make),s=g(t.model),i=g(t.year);(a||s||i)&&(o.VehData={MakePfx:a,Model:s,Year:i});const l=e({routing:r.routing,sender:{component:"Rome",task:"CVC",referenceId:"Query",creator:"RCI",senderName:"RCI"},order:"creation-bod-sender-destination"});return{starXml:V.render('\n\n {{{ApplicationArea}}}\n \n \n {{#Phone}}{{/Phone}}\n {{#PartVIN}}{{/PartVIN}}\n {{#LicenseNum}}{{/LicenseNum}}\n {{#LName}}{{/LName}}\n {{#FullName}}\n \n {{/FullName}}\n {{#NameRecId}}{{/NameRecId}}\n {{#StkNo}}{{/StkNo}}\n \n {{#VehData}}\n \n {{/VehData}}\n \n\n',{ApplicationArea:l,...o}),routing:r.routing,envelope:r.envelope,elementName:"rey_RomeCustServVehCombReq",xsdFilename:"rey_RomeCustServVehCombReq.xsd",postParse:d}}(t,r))}async insertCustomer(t,r){return this._send(function(t,r){if(!r?.routing?.dealerNumber)throw new q("routing.dealerNumber required");const n=x(t),o=e({routing:r.routing,sender:{component:"Rome",task:"CU",referenceId:"Insert"},order:"sender-creation-bod-destination"});return{starXml:V.render('\n\n {{{ApplicationArea}}}\n \n \n {{#C.contactInfo.Addresses}}\n \n {{/C.contactInfo.Addresses}}\n {{#C.contactInfo.Phones}}\n \n {{/C.contactInfo.Phones}}\n {{#C.contactInfo.Email}}\n \n {{/C.contactInfo.Email}}\n \n {{#C.custPersonal}}\n \n {{#BirthDates}}\n \n {{/BirthDates}}\n {{#SSNs}}\n \n {{/SSNs}}\n {{#DriverInfo}}\n \n {{/DriverInfo}}\n {{#CustChildren}}\n \n {{/CustChildren}}\n \n {{/C.custPersonal}}\n {{#C.dmsCustInfo}}\n \n {{#Followups}}\n \n {{/Followups}}\n \n {{/C.dmsCustInfo}}\n \n\n',{ApplicationArea:o,C:n}),routing:r.routing,envelope:r.envelope,postParse:T,xsdFilename:"rey_RomeCustomerInsertReq.xsd",elementName:"rey_RomeCustomerInsertReq"}}(t,r))}async updateCustomer(t,r){return this._send(function(t,r){if(!r?.routing?.dealerNumber)throw new q("routing.dealerNumber required");if(!t.nameRecId)throw new q("nameRecId or customerId required");const n=C(t.ibFlag);if("I"!==n&&"B"!==n)throw new q("ibFlag required ('I' or 'B')");const o=x(t);o.contactInfo.NameRecId=String(t.nameRecId);const a=e({routing:r.routing,sender:{component:"Rome",task:"CU",referenceId:"Update"},order:"sender-creation-bod-destination"});return{starXml:V.render('\n\n {{{ApplicationArea}}}\n \n \n {{#C.contactInfo.Addresses}}\n \n {{/C.contactInfo.Addresses}}\n {{#C.contactInfo.Phones}}\n \n {{/C.contactInfo.Phones}}\n {{#C.contactInfo.Email}}\n \n {{/C.contactInfo.Email}}\n \n {{#C.custPersonal}}\n \n {{#BirthDates}}\n \n {{/BirthDates}}\n {{#SSNs}}\n \n {{/SSNs}}\n {{#DriverInfo}}\n \n {{/DriverInfo}}\n {{#CustChildren}}\n \n {{/CustChildren}}\n \n {{/C.custPersonal}}\n {{#C.dmsCustInfo}}\n \n {{#Followups}}\n \n {{/Followups}}\n \n {{/C.dmsCustInfo}}\n \n\n',{ApplicationArea:a,C:o}),routing:r.routing,envelope:r.envelope,postParse:T,xsdFilename:"rey_RomeCustomerUpdateReq.xsd",elementName:"rey_RomeCustomerUpdateReq"}}(t,r))}async insertServiceVehicle(t,r){return this._send(function(t={},r={}){if(!r?.routing?.dealerNumber)throw new q("routing.dealerNumber is required");const n=e({routing:r.routing,sender:r?.envelope?.sender??{component:"Rome",task:"SV",referenceId:"Insert"},creationDateTime:r?.envelope?.creationDateTime,bodId:r?.envelope?.bodId}),o=function(e={}){const t=e.vin;if(!t)throw new q("insertServiceVehicle: vin is required");const r=e.vehicleServInfo?.customerNo;if(!r)throw new q("insertServiceVehicle: vehicleServInfo.customerNo (or customerNo) is required");return{VIN:String(t),ModelDesc:e.modelDesc,Carline:e.carline,ExtClrDesc:e.extClrDesc,IntClrDesc:e.intClrDesc,TrimDesc:e.trimDesc,BodyStyle:e.bodyStyle,EngineDesc:e.engineDesc,TransDesc:e.transDesc,Year:e.year,Odometer:e.odometer,OdometerUnits:e.odometerUnits,LicNo:e.vehicleDetail?.licNo,CustomerNo:String(r),vehicleServInfo:{salesmanNo:e.vehicleServInfo?.salesmanNo,inServiceDate:e.vehicleServInfo?.inServiceDate,mileage:e.vehicleServInfo?.mileage,teamCode:e.vehicleServInfo?.teamCode,vehExtWarranty:(()=>{const t=e.vehicleServInfo?.vehExtWarranty;if(!t)return;const r={contractNumber:t.contractNumber,expirationDate:t.expirationDate,expirationMileage:t.expirationMileage};return Object.values(r).some(e=>null!=e&&""!==e)?r:void 0})(),advisor:(()=>{const t=e.vehicleServInfo?.advisor,r=t?.contactInfo?.nameRecId;return r?{contactInfo:{nameRecId:String(r)}}:void 0})()}}}(t);return{starXml:V.render('\n\n {{{ApplicationArea}}}\n\n \n {{#V.Year}}{{.}}{{/V.Year}}\n {{#V.Odometer}}{{.}}{{/V.Odometer}}\n {{#V.OdometerUnits}}{{.}}{{/V.OdometerUnits}}\n\n {{#V.LicNo}}{{/V.LicNo}}\n \n\n \n {{#V.vehicleServInfo.salesmanNo}}{{.}}{{/V.vehicleServInfo.salesmanNo}}\n {{#V.vehicleServInfo.inServiceDate}}{{.}}{{/V.vehicleServInfo.inServiceDate}}\n {{#V.vehicleServInfo.mileage}}{{.}}{{/V.vehicleServInfo.mileage}}\n {{#V.vehicleServInfo.teamCode}}{{.}}{{/V.vehicleServInfo.teamCode}}\n\n {{#V.vehicleServInfo.vehExtWarranty}}\n \n {{#contractNumber}}{{.}}{{/contractNumber}}\n {{#expirationDate}}{{.}}{{/expirationDate}}\n {{#expirationMileage}}{{.}}{{/expirationMileage}}\n \n {{/V.vehicleServInfo.vehExtWarranty}}\n\n {{#V.vehicleServInfo.advisor}}\n \n \n \n {{/V.vehicleServInfo.advisor}}\n \n\n',{ApplicationArea:n,V:o}),routing:r.routing,envelope:r.envelope,postParse:R,xsdFilename:"rey_RomeServVehicleInsertReq.xsd",elementName:"rey_RomeServVehicleInsertReq"}}(t,r))}async getAdvisors(e,t){return this._send(F(e,t))}async createRepairOrder(t,r){return this._send(function(t={},r={}){if(!r?.routing?.dealerNumber)throw new q("routing.dealerNumber required");if(!t?.customerNo)throw new q("customerNo (CustNo) required");if(!t?.departmentType)throw new q("departmentType (DeptType) required");if(!t?.vin)throw new q("vin (Vin) required");if(!t?.outsdRoNo)throw new q("outsdRoNo required");const n={customerNo:t.customerNo,advisorNo:t.advisorNo,tagNo:t.tagNo,outsdRoNo:t.outsdRoNo,departmentType:t.departmentType,vin:t.vin,mileageIn:t.mileageIn,roComment:t.roComment,estimate:t.estimate?{parts:t.estimate.parts,labor:t.estimate.labor,total:t.estimate.total}:void 0,tax:t.tax?{payType:t.tax.payType,taxCode:t.tax.taxCode,txblGrossAmt:t.tax.txblGrossAmt,grossTaxAmt:t.tax.grossTaxAmt}:void 0,rolabor:t.rolabor?{ops:t.rolabor.ops?.map(e=>({opCode:e.opCode,jobNo:e.jobNo,custPayTypeFlag:e.custPayTypeFlag,custTxblNtxblFlag:e.custTxblNtxblFlag,warrPayTypeFlag:e.warrPayTypeFlag,warrTxblNtxblFlag:e.warrTxblNtxblFlag,intrPayTypeFlag:e.intrPayTypeFlag,intrTxblNtxblFlag:e.intrTxblNtxblFlag,vlrCode:e.vlrCode,bill:e.bill?{payType:e.bill.payType,jobTotalHrs:e.bill.jobTotalHrs,billTime:e.bill.billTime,billRate:e.bill.billRate}:void 0,ccc:e.ccc?{cause:e.ccc.cause,complaint:e.ccc.complaint,correction:e.ccc.correction}:void 0,amount:e.amount?{payType:e.amount.payType,amtType:e.amount.amtType,custPrice:e.amount.custPrice,totalAmt:e.amount.totalAmt}:void 0}))}:void 0,ropart:t.ropart?{jobs:t.ropart.jobs?.map(e=>({opCode:e.opCode,jobNo:e.jobNo,lines:e.lines?.map(e=>({partNo:e.partNo,partNoDesc:e.partNoDesc,qtyOrd:e.partQty,sale:e.sale,cost:e.cost,addDeleteFlag:e.addDeleteFlag}))}))}:void 0,rogg:t.rogg?{roNo:t.rogg.roNo,ops:t.rogg.ops?.map(e=>({opCode:e.opCode,jobNo:e.jobNo,lines:e.lines?.map(e=>({breakOut:e.breakOut,itemType:e.itemType,itemDesc:e.itemDesc,custQty:e.custQty,warrQty:e.warrQty,intrQty:e.intrQty,custPayTypeFlag:e.custPayTypeFlag,warrPayTypeFlag:e.warrPayTypeFlag,intrPayTypeFlag:e.intrPayTypeFlag,custTxblNtxblFlag:e.custTxblNtxblFlag,warrTxblNtxblFlag:e.warrTxblNtxblFlag,intrTxblNtxblFlag:e.intrTxblNtxblFlag,amount:e.amount?{payType:e.amount.payType,amtType:e.amount.amtType,custPrice:e.amount.custPrice,dlrCost:e.amount.dlrCost}:void 0}))}))}:void 0,romisc:t.romisc?{roNo:t.romisc.roNo,ops:t.romisc.ops?.map(e=>({opCode:e.opCode,jobNo:e.jobNo,lines:e.lines?.map(e=>({miscCode:e.miscCode,custPayTypeFlag:e.custPayTypeFlag,warrPayTypeFlag:e.warrPayTypeFlag,intrPayTypeFlag:e.intrPayTypeFlag,custTxblNtxblFlag:e.custTxblNtxblFlag,warrTxblNtxblFlag:e.warrTxblNtxblFlag,intrTxblNtxblFlag:e.intrTxblNtxblFlag,codeAmt:e.codeAmt}))}))}:void 0};if(n.tax?.payType&&!["All","Cust","Intr","Warr"].includes(n.tax.payType))throw new q("tax.payType must be one of: All, Cust, Intr, Warr");if(n.rolabor?.ops?.some(e=>e.custTxblNtxblFlag&&!["T","N"].includes(e.custTxblNtxblFlag)||e.warrTxblNtxblFlag&&!["T","N"].includes(e.warrTxblNtxblFlag)||e.intrTxblNtxblFlag&&!["T","N"].includes(e.intrTxblNtxblFlag)))throw new q("Taxable flags (CustTxblNTxblFlag, WarrTxblNTxblFlag, IntrTxblNTxblFlag) must be 'T' or 'N'");if(n.rogg?.ops?.some(e=>e.lines?.some(e=>e.itemType&&!["G","P","S","F"].includes(e.itemType))))throw new q("rogg.ops.lines.itemType must be one of: G, P, S, F");const o={...r?.envelope||{},sender:{component:r?.envelope?.sender?.component??"Rome",task:r?.envelope?.sender?.task??"BSMRO",referenceId:r?.envelope?.sender?.referenceId??"Insert",creatorNameCode:r?.envelope?.sender?.creatorNameCode??"RCI",senderNameCode:r?.envelope?.sender?.senderNameCode??"RCI"}},a=e({routing:r.routing,sender:o.sender,creationDateTime:o.creationDateTime,bodId:o.bodId});return{starXml:V.render('\n\n {{{ApplicationArea}}}\n \n \n {{#RO.roComment}}\n \n {{/RO.roComment}}\n\n {{#RO.estimate}}\n \n {{/RO.estimate}}\n\n {{#RO.tax}}\n \n {{/RO.tax}}\n \n\n {{#RO.rolabor}}\n \n {{#RO.rolabor.ops}}\n \n {{#bill}}\n \n {{/bill}}\n\n {{#ccc}}\n \n {{/ccc}}\n\n {{#amount}}\n \n {{/amount}}\n \n {{/RO.rolabor.ops}}\n \n {{/RO.rolabor}}\n\n {{#RO.ropart}}\n \n {{#RO.ropart.jobs}}\n \n {{#lines}}\n \n {{/lines}}\n \n {{/RO.ropart.jobs}}\n \n {{/RO.ropart}}\n\n {{#RO.rogg}}\n \n {{#RO.rogg.ops}}\n \n {{#lines}}\n \n {{#amount}}\n \n {{/amount}}\n \n {{/lines}}\n \n {{/RO.rogg.ops}}\n \n {{/RO.rogg}}\n\n {{#RO.romisc}}\n \n {{#RO.romisc.ops}}\n \n {{#lines}}\n \n {{/lines}}\n \n {{/RO.romisc.ops}}\n \n {{/RO.romisc}}\n \n\n',{ApplicationArea:a,RO:n}),routing:r.routing,envelope:o,postParse:O,xsdFilename:"rey_RomeCreateBSMRepairOrderReq.xsd"}}(t,r))}async updateRepairOrder(t,r){return this._send(function(t={},r={}){if(!r?.routing?.dealerNumber)throw new q("routing.dealerNumber required");if(!t?.finalUpdate)throw new q("finalUpdate (FinalUpdate) required");if(!["Y","N"].includes(t.finalUpdate))throw new q("finalUpdate must be 'Y' or 'N'");if(!t?.outsdRoNo)throw new q(" outsdRoNo");const n={finalUpdate:t.finalUpdate||"N",roNo:t.roNo,customerNo:t.customerNo,tagNo:t.tagNo,outsdRoNo:t.outsdRoNo,departmentType:t.departmentType,vin:t.vin,mileageIn:t.mileageIn,mileageOut:t.mileageOut,roComment:t.roComment,estimate:t.estimate?{estimateType:t.estimate.estimateType}:void 0,tax:t.tax?{payType:t.tax.payType,taxCode:t.tax.taxCode,txblGrossAmt:t.tax.txblGrossAmt,grossTaxAmt:t.tax.grossTaxAmt}:void 0,rolabor:t.rolabor?{ops:t.rolabor.ops?.map(e=>({opCode:e.opCode,jobNo:e.jobNo,custPayTypeFlag:e.custPayTypeFlag,custTxblNtxblFlag:e.custTxblNtxblFlag,warrPayTypeFlag:e.warrPayTypeFlag,warrTxblNtxblFlag:e.warrTxblNtxblFlag,intrPayTypeFlag:e.intrPayTypeFlag,intrTxblNtxblFlag:e.intrTxblNtxblFlag,vlrCode:e.vlrCode,bill:e.bill?{payType:e.bill.payType,jobTotalHrs:e.bill.jobTotalHrs,billTime:e.bill.billTime,billRate:e.bill.billRate}:void 0,ccc:e.ccc?{cause:e.ccc.cause,complaint:e.ccc.complaint,correction:e.ccc.correction}:void 0,amount:e.amount?{payType:e.amount.payType,amtType:e.amount.amtType,custPrice:e.amount.custPrice}:void 0}))}:void 0,ropart:t.ropart?{jobs:t.ropart.jobs?.map(e=>({opCode:e.opCode,jobNo:e.jobNo,lines:e.lines?.map(e=>({partNo:e.partNo,partNoDesc:e.partNoDesc,qtyOrd:e.partQty,sale:e.sale,cost:e.cost,addDeleteFlag:e.addDeleteFlag}))}))}:void 0,rogg:t.rogg?{roNo:t.rogg.roNo,ops:t.rogg.ops?.map(e=>({opCode:e.opCode,jobNo:e.jobNo,lines:e.lines?.map(e=>({breakOut:e.breakOut,itemType:e.itemType,itemDesc:e.itemDesc,custQty:e.custQty,warrQty:e.warrQty,intrQty:e.intrQty,custPayTypeFlag:e.custPayTypeFlag,warrPayTypeFlag:e.warrPayTypeFlag,intrPayTypeFlag:e.intrPayTypeFlag,custTxblNtxblFlag:e.custTxblNtxblFlag,warrTxblNtxblFlag:e.warrTxblNtxblFlag,intrTxblNtxblFlag:e.intrTxblNtxblFlag,amount:e.amount?{payType:e.amount.payType,amtType:e.amount.amtType,custPrice:e.amount.custPrice,dlrCost:e.amount.dlrCost}:void 0}))}))}:void 0,romisc:t.romisc?{roNo:t.romisc.roNo,ops:t.romisc.ops?.map(e=>({opCode:e.opCode,jobNo:e.jobNo,lines:e.lines?.map(e=>({miscCode:e.miscCode,custPayTypeFlag:e.custPayTypeFlag,warrPayTypeFlag:e.warrPayTypeFlag,intrPayTypeFlag:e.intrPayTypeFlag,custTxblNtxblFlag:e.custTxblNtxblFlag,warrTxblNtxblFlag:e.warrTxblNtxblFlag,intrTxblNtxblFlag:e.intrTxblNtxblFlag,codeAmt:e.codeAmt}))}))}:void 0};if(n.tax?.payType&&!["All","Cust","Intr","Warr"].includes(n.tax.payType))throw new q("tax.payType must be one of: All, Cust, Intr, Warr");if(n.rolabor?.ops?.some(e=>e.custTxblNtxblFlag&&!["T","N"].includes(e.custTxblNtxblFlag)||e.warrTxblNtxblFlag&&!["T","N"].includes(e.warrTxblNtxblFlag)||e.intrTxblNtxblFlag&&!["T","N"].includes(e.intrTxblNtxblFlag)))throw new q("Taxable flags (CustTxblNTxblFlag, WarrTxblNTxblFlag, IntrTxblNTxblFlag) must be 'T' or 'N'");if(n.rogg?.ops?.some(e=>e.lines?.some(e=>e.itemType&&!["G","P","S","F"].includes(e.itemType))))throw new q("rogg.ops.lines.itemType must be one of: G, P, S, F");const o={...r?.envelope||{},sender:{component:r?.envelope?.sender?.component??"Rome",task:r?.envelope?.sender?.task??"BSMRO",referenceId:r?.envelope?.sender?.referenceId??"Update",creatorNameCode:r?.envelope?.sender?.creatorNameCode??"RCI",senderNameCode:r?.envelope?.sender?.senderNameCode??"RCI"}},a=e({routing:r.routing,sender:o.sender,creationDateTime:o.creationDateTime,bodId:o.bodId});return{starXml:V.render('\n\n {{{ApplicationArea}}}\n \n \n {{#RO.roComment}}\n \n {{/RO.roComment}}\n\n {{#RO.estimate}}\n \n {{/RO.estimate}}\n\n {{#RO.tax}}\n \n {{/RO.tax}}\n \n\n {{#RO.rolabor}}\n \n {{#RO.rolabor.ops}}\n \n {{#bill}}\n \n {{/bill}}\n\n {{#ccc}}\n \n {{/ccc}}\n\n {{#amount}}\n \n {{/amount}}\n \n {{/RO.rolabor.ops}}\n \n {{/RO.rolabor}}\n\n {{#RO.ropart}}\n \n {{#RO.ropart.jobs}}\n \n {{#lines}}\n \n {{/lines}}\n \n {{/RO.ropart.jobs}}\n \n {{/RO.ropart}}\n\n {{#RO.rogg}}\n \n {{#RO.rogg.ops}}\n \n {{#lines}}\n \n {{#amount}}\n \n {{/amount}}\n \n {{/lines}}\n \n {{/RO.rogg.ops}}\n \n {{/RO.rogg}}\n\n {{#RO.romisc}}\n \n {{#RO.romisc.ops}}\n \n {{#lines}}\n \n {{/lines}}\n \n {{/RO.romisc.ops}}\n \n {{/RO.romisc}}\n \n\n',{ApplicationArea:a,RO:n}),routing:r.routing,envelope:o,postParse:O,xsdFilename:"rey_RomeUpdateBSMRepairOrderReq.xsd",elementName:"rey_RomeUpdateBSMRepairOrderReq"}}(t,r))}async getParts(t,r){return this._send(function(t={},r={}){const n=t.roNumber?String(t.roNumber).trim():void 0;if(!n)throw new q("getParts: roNumber required");const o=e({routing:r.routing,sender:{component:"Rome",task:"RCT",referenceId:"Query",creator:"RCI",senderName:"RCI"}});return{starXml:V.render('\n\n {{{ApplicationArea}}}\n \n\n',{ApplicationArea:o,RoNumber:n}),routing:r.routing,envelope:r.envelope,xsdFilename:"rey_RomeGetPartsReq.xsd",elementName:"rey_RomeGetPartsReq",postParse:e=>function(e){return e?.rey_RomeGetPartsResp?.RoParts?.map(e=>({partNumber:h(e,"PartNumber"),partDescription:h(e,"PartDescription"),quantityOrdered:h(e,"QuantityOrdered"),quantityShipped:h(e,"QuantityShipped"),price:h(e,"Price"),cost:h(e,"Cost"),processedFlag:h(e,"ProcessedFlag"),addOrDelete:h(e,"AddOrDelete")}))||[]}(e)}}(t,r))}}export{Z as RRClient,U as errors};
+function e({routing:e={},sender:t={},creationDateTime:r,bodId:n}={}){const o={Sender:{Component:t.component??"Rome",Task:t.task??"CU",ReferenceId:t.referenceId??"Query",CreatorNameCode:t.creator??"RCI",SenderNameCode:t.senderName??"RCI"},CreationDateTime:r??(new Date).toISOString().replace(/\.\d{3}Z$/,"Z"),BODId:n??L(),Destination:{DestinationNameCode:"RR",DealerNumber:e.dealerNumber||"",StoreNumber:e.storeNumber||"",AreaNumber:e.areaNumber||""}},a={bod:"{{#BODId}}{{BODId}}{{/BODId}}",creation:"{{CreationDateTime}}",sender:"\n \n {{Sender.Component}}\n {{Sender.Task}}\n {{#Sender.ReferenceId}}{{Sender.ReferenceId}}{{/Sender.ReferenceId}}\n {{#Sender.CreatorNameCode}}{{Sender.CreatorNameCode}}{{/Sender.CreatorNameCode}}\n {{#Sender.SenderNameCode}}{{Sender.SenderNameCode}}{{/Sender.SenderNameCode}}\n ".trim(),dest:"\n \n {{Destination.DestinationNameCode}}\n {{#Destination.DealerNumber}}{{Destination.DealerNumber}}{{/Destination.DealerNumber}}\n {{#Destination.StoreNumber}}{{Destination.StoreNumber}}{{/Destination.StoreNumber}}\n {{#Destination.AreaNumber}}{{Destination.AreaNumber}}{{/Destination.AreaNumber}}\n ".trim()},s=`\n${["bod","creation","sender","dest"].map(e=>a[e]).join("\n")}\n`;return E.render(s,o).trim()}function t(e,t=2){const r=" ".repeat(t);return String(e).split("\n").map(e=>e.length?r+e:e).join("\n")}function r(e){return String(e??"").replace(/&/g,"&").replace(//g,">")}function n(e,t){if(null==e)return null;if(Array.isArray(e)){for(const r of e){const e=n(r,t);if(null!=e)return e}return null}if("object"!=typeof e)return null;for(const[r,o]of Object.entries(e)){if(t(r,o))return o;const e=n(o,t);if(null!=e)return e}return null}function o(e,t,r=[]){if(null==e)return r;if(Array.isArray(e)){for(const n of e)o(n,t,r);return r}if("object"!=typeof e)return r;for(const[n,a]of Object.entries(e))t(n,a)&&r.push(a),o(a,t,r);return r}function a(e){return null==e?[]:Array.isArray(e)?e:[e]}function s(e,t){if(e&&"object"==typeof e)return function(e){if(null!=e)return"string"==typeof e||"number"==typeof e||"boolean"==typeof e?String(e):"object"==typeof e&&"#text"in e?String(e["#text"]):void 0}(e[t])}function i(e,t){const r=s(e,t);if(Q(r))return r;const n=function(e,t){if(e&&"object"==typeof e)return e.$&&Q(e.$[t])?e.$[t]:Q(e[`@_${t}`])?e[`@_${t}`]:Q(e[`@${t}`])?e[`@${t}`]:e._attributes&&Q(e._attributes[t])?e._attributes[t]:e.attributes&&Q(e.attributes[t])?e.attributes[t]:void 0}(e,t);return Q(n)?n:void 0}function l(e,t){if(e&&"object"==typeof e)return null!=e[`@_${t}`]?e[`@_${t}`]:void 0}function c(e){if(null!=e){if("string"==typeof e)return e;if("number"==typeof e)return String(e);if("object"==typeof e){if(null!=e._)return String(e._);if(null!=e["#text"])return String(e["#text"]);if(null!=e.text)return String(e.text)}}}function m(e){return o(e,e=>/(GenTransStatus|TransStatus)$/i.test(e)).flatMap(a)[0]}function u(e){if(e)return{status:(l(e,"Status")||e.Status||c(e)||"").toString().trim()||void 0,statusCode:(l(e,"StatusCode")||e.StatusCode||"").toString().trim()||void 0,message:e.Message&&c(e.Message)||e.GenTransStatus&&c(e.GenTransStatus)||e.TransStatus&&c(e.TransStatus)||c(e)||void 0}}function p(e){if(e)return{status:(l(e,"Status")||e.Status||c(e)||"").toString().trim()||void 0,date:(l(e,"Date")||e.Date||"").toString().trim()||void 0,time:(l(e,"Time")||e.Time||"").toString().trim()||void 0,outsdRoNo:(l(e,"OutsdRoNo")||e.OutsdRoNo||"").toString().trim()||void 0,dmsRoNo:(l(e,"DMSRoNo")||e.DMSRoNo||"").toString().trim()||void 0,errorMessage:(l(e,"ErrorMessage")||e.ErrorMessage||"").toString().trim()||void 0}}function d(e){const t=e?.rey_RomeCustServVehCombRes??e?.rey_RomeCustServVehCombReq??e?.rey_RomeCustServVehComb??e??{};return a(t?.CustServVehComb??t?.CustServVehCombRes??t?.CustServVehCombReq??t).map(e=>{const t=e?.NameContactId??void 0,r=t?.NameId??void 0,n=r?.IndName?H(r.IndName):void 0,o=r?.BusName?H(r.BusName):void 0,s=t&&{NameId:r&&{...H(r)||{},...n?{IndName:n}:{},...o?{BusName:o}:{}},Address:a(t?.Address).map(e=>H(e)||{}),ContactOptions:a(t?.ContactOptions).map(e=>H(e)||{}),Phone:a(t?.Phone).map(e=>H(e)||{}),Email:a(t?.Email).map(e=>H(e)||{})},i=a(e?.ServVehicle).map(e=>{const t=e?.Vehicle,r=t?.VehicleDetail,n=t&&{...H(t)||{},...r?{VehicleDetail:H(r)||{}}:{}},o=e?.VehicleServInfo,s=o?.VehExtWarranty,i=o?.Advisor,l=i?.ContactInfo;let c;i&&(c={...H(i)||{},...l?{ContactInfo:H(l)||{}}:{}});const m=o&&{...H(o)||{},...s?{VehExtWarranty:H(s)||{}}:{},...c?{Advisor:c}:{},...o?.VehServComments?{VehServComments:a(o.VehServComments).map(e=>Y(e)).filter(e=>null!=e&&""!==String(e).trim())}:{}};return{...n?{Vehicle:n}:{},...m?{VehicleServInfo:m}:{}}}),l=a(e?.Message).map(e=>{const t=Y(e);return{...H(e)||{},...null!=t&&""!==String(t).trim()?{Text:t}:{}}}).filter(e=>Object.keys(e).length>0),c={};return s&&(c.NameContactId=s),i.length&&(c.ServVehicle=i),l.length&&(c.Message=l),c})}function y(e,t){if(null!=e)return String("string"==typeof e||"number"==typeof e?e:e[t]||"")}function g(e){return String(e??"").trim()||void 0}function N(e,...t){if(e)for(const r of t){if(e.$&&null!=e.$[r])return e.$[r];if(null!=e[`@_${r}`])return e[`@_${r}`];if(null!=e[r]&&"object"!=typeof e[r])return e[r]}}function T(e){const t=function(e){const t=n(e,e=>"rey_RomeCustomerResponse"===e||e.endsWith(":rey_RomeCustomerResponse"));return t?o(t,e=>"TransStatus"===e||e.endsWith(":TransStatus")).flatMap(a)[0]:void console.log("No rey_RomeCustomerResponse found in root")}(e);if(!t)return{dmsRecKey:void 0};const r=N(t,"DMSRecKey");return{dmsRecKey:null!=r?String(r):void 0,status:N(t,"Status"),statusCode:N(t,"StatusCode")}}function b(e){if(null==e)return;const t=String(e).toUpperCase().replace(/[^A-Z0-9 ]+/g,"");if(!t)throw new k(`Invalid string: ${e}. Must contain A-Z, 0-9, or space`);return t}function C(e){return e?String(e).toUpperCase():void 0}function x(e={}){const t=C(e.ibFlag)||(e.firstName?"I":"B");if("I"!==t&&"B"!==t)throw new k("ibFlag must be 'I' or 'B'");const r=e.lastName||e.customerName;if(!r)throw new k("lastName or customerName required");if("I"===t&&!e.firstName)throw new k("firstName required when ibFlag='I'");const n=C(e.customerType);if(n&&!["R","W","I"].includes(n))throw new k("customerType must be 'R', 'W', 'I', Retail, Wholesale, or Internal");const o=(e.addresses||[]).map(e=>{const t={Type:C(e.type)||"P",Addr1:e.line1?String(e.line1):void 0,Addr2:e.line2?String(e.line2):void 0,City:e.city?String(e.city):void 0,State:e.state?String(e.state):void 0,Zip:e.postalCode?String(e.postalCode):void 0,County:e.county?String(e.county):void 0,Country:e.country?String(e.country):void 0};if(!t.Addr1)throw new k("Address requires line1");return t}),a=(e.phones||[]).map(e=>{const t={Type:C(e.type)||"H",Num:e.number?String(e.number):void 0,Ext:e.extension?String(e.extension):void 0};if(!t.Num)throw new k("Phone requires number");return t}),s=e.emails?.[0]?.address?{MailTo:String(e.emails[0].address)}:void 0,i=e.personal,l=i?{Gender:C(i.gender),OtherName:b(i.otherName),AnniversaryDate:i.anniversaryDate?String(i.anniversaryDate):void 0,EmployerName:b(i.employerName),EmployerPhone:i.employerPhone?String(i.employerPhone):void 0,Occupation:b(i.occupation),OptOut:i.optOut?String(i.optOut):void 0,OptOutUse:i.optOutUse?String(i.optOutUse):void 0,BirthDates:(i.birthDates||[]).map(e=>({Type:C(e.type)||"P",date:e.date?String(e.date):void 0})).filter(e=>e.date),SSNs:(i.ssns||[]).map(e=>({Type:C(e.type)||"P",ssn:e.ssn?String(e.ssn):void 0})).filter(e=>e.ssn),DriverInfo:i.driver?[{Type:C(i.driver.type)||"P",LicNum:i.driver.licenseNumber?String(i.driver.licenseNumber):void 0,LicState:i.driver.licenseState?String(i.driver.licenseState):void 0,LicExpDate:i.driver.licenseExpDate?String(i.driver.licenseExpDate):void 0}].filter(e=>e.LicNum):void 0,CustChildren:(i.children||[]).map(e=>({ChildName:b(e.name)})).filter(e=>e.ChildName)}:void 0,c=e.dms,m=c?{TaxExemptNum:c.taxExemptNum?String(c.taxExemptNum):void 0,SalesTerritory:c.salesTerritory?String(c.salesTerritory):void 0,DeliveryRoute:c.deliveryRoute?String(c.deliveryRoute):void 0,SalesmanNum:c.salesmanNum?String(c.salesmanNum):void 0,LastContactMethod:c.lastContactMethod?String(c.lastContactMethod):void 0,Followups:(c.followups||[]).map(e=>({Type:C(e.type),Value:C(e.value)})).filter(e=>e.Type&&e.Value)}:void 0;return{custCateg:n||"R",createdBy:e.createdBy?String(e.createdBy):void 0,contactInfo:{IBFlag:t,LastName:b(r),FirstName:b(e.firstName),MidName:b(e.midName),Salut:b(e.salut),Suffix:b(e.suffix),Addresses:o,Phones:a,Email:s},custPersonal:l,dmsCustInfo:m}}function R(e){const t=n(e,e=>"rey_RomeServVehicleInsertResponse"===e||e.endsWith(":rey_RomeServVehicleInsertResponse"))||e,r=n(t,e=>"GenTransStatus"===e||e.endsWith(":GenTransStatus"));return{status:r?i(r,"Status"):void 0,statusCode:r?i(r,"StatusCode"):void 0}}function f(e,t){const r=Array.isArray(t)?t.map(e=>e.toLowerCase()):[String(t).toLowerCase()],n=[e];for(;n.length;){const e=n.pop();if(Z(e))for(const t of Object.keys(e)){const o=e[t],a=X(t).toLowerCase();if(r.includes(a))return o;if(Z(o))n.push(o);else if(Array.isArray(o))for(const e of o)Z(e)&&n.push(e)}}}function S(e,t){if(e&&Z(e)){if(null!=e.$?.[t])return e.$[t];if(null!=e[`@${t}`])return e[`@${t}`];if(null!=e[`@_${t}`])return e[`@_${t}`]}}function v(e){if(null!=e){if("string"==typeof e)return e;if("number"==typeof e)return String(e);if(Z(e)){if(null!=e._)return String(e._);if(null!=e["#text"])return String(e["#text"]);if(null!=e.text)return String(e.text)}}}function O(e){const t=f(e,["CreateBSMRepairOrderResp","UpdateBSMRepairOrderResp"])||e,r=f(t,"RoRecordStatus")||{};return{status:S(r,"Status")||v(f(r,"Status")),date:S(r,"Date")||v(f(r,"Date")),time:S(r,"Time")||v(f(r,"Time")),outsdRoNo:S(r,"OutsdRoNo")||v(f(r,"OutsdRoNo")),dmsRoNo:S(r,"DMSRoNo")||v(f(r,"DMSRoNo")),errorMessage:S(r,"ErrorMessage")||v(f(r,"ErrorMessage"))}}function F(t={},r={}){const n=function(e){if(!e)throw new Error("department is required (S, P, B, SERVICE, PARTS, BODY)");const t=String(e).trim().toUpperCase();if("S"===t||"P"===t||"B"===t)return t;if("SERVICE"===t)return"S";if("PART"===t||"PARTS"===t)return"P";if("BODY"===t||"BODYSHOP"===t||"BODY SHOP"===t)return"B";throw new Error(`Invalid department: ${e}. Must be S, P, B, SERVICE, PARTS, BODY, BODYSHOP, or BODY SHOP`)}(t.department),o=t.advisorNumber?String(t.advisorNumber).trim():void 0,a=e({routing:r.routing,sender:r?.envelope?.sender,creationDateTime:r?.envelope?.creationDateTime,bodId:r?.envelope?.bodId});return{starXml:E.render('\n\n {{{ApplicationArea}}}\n \n \n \n\n',{ApplicationArea:a,DepartmentType:n,AdvisorNumber:o}),routing:r.routing,envelope:r.envelope,xsdFilename:"rey_RomeGetAdvisorsReq.xsd",elementName:"rey_RomeGetAdvisorsReq",postParse:e=>function(e,t={}){const r=t?.department;var n;return(e=>{const t=e?.Advisor;return t?Array.isArray(t)?t:[t]:[]})((n=e,n?.rey_RomeGetAdvisorsResp??n??{})).map(e=>({advisorId:J(e,"AdvisorNumber"),firstName:J(e,"FirstName"),lastName:J(e,"LastName"),department:r}))}(e,{department:n})}}function I(e){return null==e?void 0:String(e)}function h(e,t){if(e)return null!=e[t]?"object"!=typeof e[t]?I(e[t]):I(e[t]["#text"]):null!=e[`@_${t}`]?I(e[`@_${t}`]):void 0}function w(e){const t=e?.meta?.statusBlocks?.transaction?.message;if(t)return String(t);return String((e?.meta?.status?.Message??e?.meta?.status?.message)||e?.message||"")}function P(e,t){return Math.min(1e4,e*Math.pow(2,t))}function D(e){return e+Math.floor(250*Math.random())}function A(e){return new Promise(t=>setTimeout(t,e))}function M(e){return/lock|in use|record.*busy/i.test(String(e||""))}function V(e,t="****"){if(!e||"string"!=typeof e)return e;let r=e;return r=r.replace(/(]*>)([^<]*)(<\/wsse:Username>)/gi,`$1${t}$3`),r=r.replace(/(]*>)([^<]*)(<\/wsse:Password>)/gi,`$1${t}$3`),r}import E from"mustache";import{v4 as L}from"uuid";import{create as _}from"xmlbuilder2";import j from"axios";import{XMLParser as B}from"fast-xml-parser";class q extends Error{constructor(e,t={}){super(e),this.name="RRTransportError",this.meta=t}}class U extends Error{constructor(e,t={}){super(e),this.name="RRVendorStatusError",this.meta=t,this.retryable=!!t.retryable}}class k extends Error{constructor(e,t={}){super(e),this.name="RRValidationError",this.meta=t}}const $=Object.freeze({__proto__:null,RRTransportError:q,RRVendorStatusError:U,RRValidationError:k}),G={info:(...e)=>console.log("[rr-rome]",...e),warn:(...e)=>console.warn("[rr-rome]",...e),error:(...e)=>console.error("[rr-rome]",...e),debug:(...e)=>{process.env.RR_DEBUG&&console.log("[rr-rome][debug]",...e)}},Q=e=>null!=e&&""!==String(e).trim(),W=new B({ignoreAttributes:!1,attributeNamePrefix:"@_",parseAttributeValue:!1,parseTagValue:!1,isArray:e=>["Advisor"].includes(e)}),H=e=>{if(!e||"object"!=typeof e)return;const t={};for(const[r,n]of Object.entries(e))r.startsWith("@_")&&(t[r.slice(2)]=n);return Object.keys(t).length?t:void 0},Y=e=>{if(null!=e)return"string"==typeof e?e:e["#text"]},X=e=>{if("string"!=typeof e)return"";let t=e.includes("}")?e.split("}").pop():e;return t=t.includes(":")?t.split(":").pop():t,t.startsWith("rey_")&&(t=t.slice(4)),t},Z=e=>e&&"object"==typeof e&&!Array.isArray(e),J=(e,t)=>((e,t)=>e?.[`@_${t}`])(e,t)??s(e,t);class z{constructor(e){if(!e?.baseUrl)throw new Error("RRClient requires baseUrl");if(!e?.username)throw new Error("RRClient requires username");if(!e?.password)throw new Error("RRClient requires password");this.cfg={wssePasswordType:"Text",timeoutMs:3e4,logger:G,retries:{max:3},...e},this.mask={password:!0}}async _send(e){const{starXml:n,routing:s,envelope:i,postParse:d}=e,y=this.cfg.logger||G,{bodId:g,creationDateTime:N,sender:T}=function(e){return{bodId:e?.bodId||L(),creationDateTime:e?.creationDateTime||new Date,sender:e?.sender||{}}}(i),b=function({username:e,password:n,wssePasswordType:o="Text",starContentXml:a,normalize:s=!0,normalizeOptions:i}={}){const l=function(e){return`\n \n \n \n${t(e,10)}\n \n \n \n `.trim()}(a),c=`\n \n \n${t(function(e,t,n){const o="Digest"===n?' Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest"':' Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"';return`\n \n \n ${r(e)}\n ${r(t)}\n \n \n `.trim()}(e,n,o),8)}\n \n \n${t(l,8)}\n \n \n `.trim();return s?function(e,{prettyPrint:t=!0}={}){if(!e||"string"!=typeof e)return e;try{return _(e).end({prettyPrint:t,width:0,indent:" ",newline:"\n"}).trim()}catch(t){return String(e).trim()}}(c,i):c}({username:this.cfg.username,password:this.cfg.password,wssePasswordType:this.cfg.wssePasswordType||"Text",routing:s,sender:T,creationDateTime:(x=N,"string"==typeof x?x:(x instanceof Date?x:new Date).toISOString().replace(/\.\d{3}Z$/,"Z")),bodId:g,starContentXml:n}),C=V(b);var x;"1"===process.env.RR_DUMP_ENVELOPE&&console.log(`[rr] Soap envelope about to send (${e?.elementName}): \n`+C+"\n");const R=async()=>{const t=await async function({baseUrl:e,envelopeXml:t,timeoutMs:r=3e4,logger:n}){try{const n=await j.post(e,t,{timeout:r,headers:{"Content-Type":"text/xml; charset=utf-8",SOAPAction:"http://www.starstandards.org/webservices/2005/10/transport/ProcessMessage"},responseType:"text",validateStatus:()=>!0});if(n.status>=200&&n.status<300)return String(n.data??"");throw new q(`HTTP ${n.status}: ${function(e){const t=String(e??"");return t.length>1024?t.slice(0,1024)+"…":t}(n.data)}`,{status:n.status,body:n.data})}catch(e){if(j.isAxiosError(e))throw new q(`Network error: ${e.message}`,{cause:e});throw e}}({baseUrl:this.cfg.baseUrl,envelopeXml:b,timeoutMs:this.cfg.timeoutMs,logger:y}),r=function(e){const t=W.parse(e),r=t?.Envelope||t?.["soapenv:Envelope"]||t,n=r?.Body||r?.["soapenv:Body"]||r?.["S:Body"]||r?.["soap:Body"],o=n?.ProcessMessageResponse||n?.["ns2:ProcessMessageResponse"]||n?.["trans:ProcessMessageResponse"]||n,a=o?.payload||o?.["ns2:payload"]||o;return a?.content||a?.["ns2:content"]||a}(t),n=V(t),s=function(e){const t=m(e),r=o(e,e=>/RoRecordStatus$/i.test(e)).flatMap(a)[0];return{transaction:u(t),roRecord:p(r)}}(r),i=function(e){const t=String("ApplicationArea").toLowerCase(),r=[e];for(;r.length;){const e=r.pop();if(e&&"object"==typeof e)for(const[n,o]of Object.entries(e)){if(n.toLowerCase().endsWith(t))return o;o&&"object"==typeof o&&r.push(o)}}}(r),{status:g,norm:N}=function(e){const t=m(e)||o(e,e=>/Status$/i.test(e)).flatMap(a)[0]||{},r=(l(t,"Status")||t.Status||"").toString().trim();let n=(l(t,"StatusCode")||t.StatusCode||"").toString().trim();const s=t.Message&&c(t.Message)||c(t)||"";!n&&/success/i.test(r)&&(n="0");const i=Number(n);let u="FAIL";return/success/i.test(r)||0===i?u="SUCCESS":2!==i&&213!==i||(u="NO_MATCH"),{status:{Status:r,StatusCode:n,Message:s},norm:{kind:u,code:Number.isFinite(i)?i:void 0,message:s}}}(r);if("1"===process.env.RR_DUMP_STATUS&&(console.log("[rr] Status blocks:"),console.dir(s,{depth:null,colors:!0})),"1"===process.env.RR_DUMP_APPLICATION&&(console.log("[rr] ApplicationArea:"),console.dir(i,{depth:null,colors:!0})),"FAIL"===N.kind){const e=g?.StatusCode;throw new U(`Vendor status failure: ${e??""} ${g?.Message||g?.["#text"]||""}`.trim(),{status:g,resXml:n})}const T={success:"SUCCESS"===N.kind||"NO_MATCH"===N.kind,statusBlocks:s,applicationArea:i,xml:{request:C,response:n},parsed:r};if("function"==typeof d)try{T.data=d(r)}catch(e){y?.warn?.(`postParse failed: ${e?.message||e}`)}return"1"===process.env.RR_DUMP_XML&&console.log(`[rr] Full response XML (${e?.elementName}):\n`+n+"\n"),T?.data&&"1"===process.env.RR_DUMP_DATA&&(console.log(`[rr] Parsed response data (${e?.elementName}):\n`),console.dir(T.data,{depth:null,colors:!0})),T};try{return await async function(e,{max:t=3,logger:r}){let n,o=0;for(;o=t)break;const s=D(P(400,o));r?.warn?.(`Retrying attempt ${o}/${t} in ${s}ms: ${e.message}`),await A(s)}throw n}(R,{max:this.cfg.retries?.max??3,logger:y})}catch(e){if(e instanceof q||e instanceof U)throw e;throw new q(`Unexpected error: ${e?.message||e}`,{cause:e})}}async combinedSearch(t,r){return this._send(function(t={},r={}){if(!t||"object"!=typeof t)throw new k("combinedSearch requires a query object");const n=function(e){if(!e)return"";const t=String(e).trim().toLowerCase();return"telephone"===t?"phone":"lic"===t||"plate"===t?"license":"vin"===t||"partvin"===t?"vin":"name"===t?"name":"namerecid"===t||"custid"===t?"nameRecId":"stkno"===t||"stock"===t?"stkNo":t}(t.kind),o={MaxRecs:Math.min(Number(t.maxResults||t.maxRecs||50),50)};if("phone"===n){const e=y(t.phone,"phone");if(!e)throw new k("combinedSearch phone value missing");o.Phone=e}else if("license"===n){const e=y(t.license,"license");if(!e)throw new k("combinedSearch license value missing");o.LicenseNum=e}else if("vin"===n){const e=y(t.vin,"vin");if(!e)throw new k("combinedSearch vin value missing");o.PartVIN=e}else if("name"===n){const e=t.name;if("string"==typeof e){const t=e.trim();if(!t)throw new k("combinedSearch name string is empty");o.LName=t}else{if(!e||"object"!=typeof e)throw new k("combinedSearch name requires { fname/lname/mname } object or a last-name string");{const t=g(e.fname),r=g(e.mname),n=g(e.lname),a=!t&&!r&&!n&&g(e.name);if(t||r||n)o.FullName={FName:t,MName:r,LName:n};else{if(!a)throw new k("combinedSearch name requires string last name, or object with any of { fname, lname, mname }");o.LName=a}}}}else if("nameRecId"===n){const e=y(t.nameRecId??t.custId,"custId");if(!e)throw new k("combinedSearch nameRecId value missing");o.NameRecId=e}else{if("stkNo"!==n)throw new k(`Unsupported CombinedSearch kind: ${t.kind}`);{const e=y(t.stkNo??t.stock,"stkNo");if(!e)throw new k("combinedSearch stkNo value missing");o.StkNo=e}}if(1!==[o.Phone,o.LicenseNum,o.PartVIN,o.LName,o.FullName,o.NameRecId,o.StkNo].filter(Boolean).length)throw new k("combinedSearch requires exactly one search criterion");const a=g(t.make),s=g(t.model),i=g(t.year);(a||s||i)&&(o.VehData={MakePfx:a,Model:s,Year:i});const l=e({routing:r.routing,sender:{component:"Rome",task:"CVC",referenceId:"Query",creator:"RCI",senderName:"RCI"},order:"creation-bod-sender-destination"});return{starXml:E.render('\n\n {{{ApplicationArea}}}\n \n \n {{#Phone}}{{/Phone}}\n {{#PartVIN}}{{/PartVIN}}\n {{#LicenseNum}}{{/LicenseNum}}\n {{#LName}}{{/LName}}\n {{#FullName}}\n \n {{/FullName}}\n {{#NameRecId}}{{/NameRecId}}\n {{#StkNo}}{{/StkNo}}\n \n {{#VehData}}\n \n {{/VehData}}\n \n\n',{ApplicationArea:l,...o}),routing:r.routing,envelope:r.envelope,elementName:"rey_RomeCustServVehCombReq",xsdFilename:"rey_RomeCustServVehCombReq.xsd",postParse:d}}(t,r))}async insertCustomer(t,r){return this._send(function(t,r){if(!r?.routing?.dealerNumber)throw new k("routing.dealerNumber required");const n=x(t),o=e({routing:r.routing,sender:{component:"Rome",task:"CU",referenceId:"Insert"},order:"sender-creation-bod-destination"});return{starXml:E.render('\n\n {{{ApplicationArea}}}\n \n \n {{#C.contactInfo.Addresses}}\n \n {{/C.contactInfo.Addresses}}\n {{#C.contactInfo.Phones}}\n \n {{/C.contactInfo.Phones}}\n {{#C.contactInfo.Email}}\n \n {{/C.contactInfo.Email}}\n \n {{#C.custPersonal}}\n \n {{#BirthDates}}\n \n {{/BirthDates}}\n {{#SSNs}}\n \n {{/SSNs}}\n {{#DriverInfo}}\n \n {{/DriverInfo}}\n {{#CustChildren}}\n \n {{/CustChildren}}\n \n {{/C.custPersonal}}\n {{#C.dmsCustInfo}}\n \n {{#Followups}}\n \n {{/Followups}}\n \n {{/C.dmsCustInfo}}\n \n\n',{ApplicationArea:o,C:n}),routing:r.routing,envelope:r.envelope,postParse:T,xsdFilename:"rey_RomeCustomerInsertReq.xsd",elementName:"rey_RomeCustomerInsertReq"}}(t,r))}async updateCustomer(t,r){return this._send(function(t,r){if(!r?.routing?.dealerNumber)throw new k("routing.dealerNumber required");if(!t.nameRecId)throw new k("nameRecId or customerId required");const n=C(t.ibFlag);if("I"!==n&&"B"!==n)throw new k("ibFlag required ('I' or 'B')");const o=x(t);o.contactInfo.NameRecId=String(t.nameRecId);const a=e({routing:r.routing,sender:{component:"Rome",task:"CU",referenceId:"Update"},order:"sender-creation-bod-destination"});return{starXml:E.render('\n\n {{{ApplicationArea}}}\n \n \n {{#C.contactInfo.Addresses}}\n \n {{/C.contactInfo.Addresses}}\n {{#C.contactInfo.Phones}}\n \n {{/C.contactInfo.Phones}}\n {{#C.contactInfo.Email}}\n \n {{/C.contactInfo.Email}}\n \n {{#C.custPersonal}}\n \n {{#BirthDates}}\n \n {{/BirthDates}}\n {{#SSNs}}\n \n {{/SSNs}}\n {{#DriverInfo}}\n \n {{/DriverInfo}}\n {{#CustChildren}}\n \n {{/CustChildren}}\n \n {{/C.custPersonal}}\n {{#C.dmsCustInfo}}\n \n {{#Followups}}\n \n {{/Followups}}\n \n {{/C.dmsCustInfo}}\n \n\n',{ApplicationArea:a,C:o}),routing:r.routing,envelope:r.envelope,postParse:T,xsdFilename:"rey_RomeCustomerUpdateReq.xsd",elementName:"rey_RomeCustomerUpdateReq"}}(t,r))}async insertServiceVehicle(t,r){return this._send(function(t={},r={}){if(!r?.routing?.dealerNumber)throw new k("routing.dealerNumber is required");const n=e({routing:r.routing,sender:r?.envelope?.sender??{component:"Rome",task:"SV",referenceId:"Insert"},creationDateTime:r?.envelope?.creationDateTime,bodId:r?.envelope?.bodId}),o=function(e={}){const t=e.vin;if(!t)throw new k("insertServiceVehicle: vin is required");const r=e.vehicleServInfo?.customerNo;if(!r)throw new k("insertServiceVehicle: vehicleServInfo.customerNo (or customerNo) is required");return{VIN:String(t),ModelDesc:e.modelDesc,Carline:e.carline,ExtClrDesc:e.extClrDesc,IntClrDesc:e.intClrDesc,TrimDesc:e.trimDesc,BodyStyle:e.bodyStyle,EngineDesc:e.engineDesc,TransDesc:e.transDesc,Year:e.year,Odometer:e.odometer,OdometerUnits:e.odometerUnits,LicNo:e.vehicleDetail?.licNo,CustomerNo:String(r),vehicleServInfo:{salesmanNo:e.vehicleServInfo?.salesmanNo,inServiceDate:e.vehicleServInfo?.inServiceDate,mileage:e.vehicleServInfo?.mileage,teamCode:e.vehicleServInfo?.teamCode,vehExtWarranty:(()=>{const t=e.vehicleServInfo?.vehExtWarranty;if(!t)return;const r={contractNumber:t.contractNumber,expirationDate:t.expirationDate,expirationMileage:t.expirationMileage};return Object.values(r).some(e=>null!=e&&""!==e)?r:void 0})(),advisor:(()=>{const t=e.vehicleServInfo?.advisor,r=t?.contactInfo?.nameRecId;return r?{contactInfo:{nameRecId:String(r)}}:void 0})()}}}(t);return{starXml:E.render('\n\n {{{ApplicationArea}}}\n\n \n {{#V.Year}}{{.}}{{/V.Year}}\n {{#V.Odometer}}{{.}}{{/V.Odometer}}\n {{#V.OdometerUnits}}{{.}}{{/V.OdometerUnits}}\n\n {{#V.LicNo}}{{/V.LicNo}}\n \n\n \n {{#V.vehicleServInfo.salesmanNo}}{{.}}{{/V.vehicleServInfo.salesmanNo}}\n {{#V.vehicleServInfo.inServiceDate}}{{.}}{{/V.vehicleServInfo.inServiceDate}}\n {{#V.vehicleServInfo.mileage}}{{.}}{{/V.vehicleServInfo.mileage}}\n {{#V.vehicleServInfo.teamCode}}{{.}}{{/V.vehicleServInfo.teamCode}}\n\n {{#V.vehicleServInfo.vehExtWarranty}}\n \n {{#contractNumber}}{{.}}{{/contractNumber}}\n {{#expirationDate}}{{.}}{{/expirationDate}}\n {{#expirationMileage}}{{.}}{{/expirationMileage}}\n \n {{/V.vehicleServInfo.vehExtWarranty}}\n\n {{#V.vehicleServInfo.advisor}}\n \n \n \n {{/V.vehicleServInfo.advisor}}\n \n\n',{ApplicationArea:n,V:o}),routing:r.routing,envelope:r.envelope,postParse:R,xsdFilename:"rey_RomeServVehicleInsertReq.xsd",elementName:"rey_RomeServVehicleInsertReq"}}(t,r))}async getAdvisors(e,t){return this._send(F(e,t))}async createRepairOrder(t,r){return this._send(function(t={},r={}){if(!r?.routing?.dealerNumber)throw new k("routing.dealerNumber required");if(!t?.customerNo)throw new k("customerNo (CustNo) required");if(!t?.departmentType)throw new k("departmentType (DeptType) required");if(!t?.vin)throw new k("vin (Vin) required");if(!t?.outsdRoNo)throw new k("outsdRoNo required");const n={customerNo:t.customerNo,advisorNo:t.advisorNo,tagNo:t.tagNo,outsdRoNo:t.outsdRoNo,departmentType:t.departmentType,vin:t.vin,mileageIn:t.mileageIn,roComment:t.roComment,estimate:t.estimate?{parts:t.estimate.parts,labor:t.estimate.labor,total:t.estimate.total}:void 0,tax:t.tax?{payType:t.tax.payType,taxCode:t.tax.taxCode,txblGrossAmt:t.tax.txblGrossAmt,grossTaxAmt:t.tax.grossTaxAmt}:void 0,rolabor:t.rolabor?{ops:t.rolabor.ops?.map(e=>({opCode:e.opCode,jobNo:e.jobNo,custPayTypeFlag:e.custPayTypeFlag,custTxblNtxblFlag:e.custTxblNtxblFlag,warrPayTypeFlag:e.warrPayTypeFlag,warrTxblNtxblFlag:e.warrTxblNtxblFlag,intrPayTypeFlag:e.intrPayTypeFlag,intrTxblNtxblFlag:e.intrTxblNtxblFlag,vlrCode:e.vlrCode,bill:e.bill?{payType:e.bill.payType,jobTotalHrs:e.bill.jobTotalHrs,billTime:e.bill.billTime,billRate:e.bill.billRate}:void 0,ccc:e.ccc?{cause:e.ccc.cause,complaint:e.ccc.complaint,correction:e.ccc.correction}:void 0,amount:e.amount?{payType:e.amount.payType,amtType:e.amount.amtType,custPrice:e.amount.custPrice,totalAmt:e.amount.totalAmt}:void 0}))}:void 0,ropart:t.ropart?{jobs:t.ropart.jobs?.map(e=>({opCode:e.opCode,jobNo:e.jobNo,lines:e.lines?.map(e=>({partNo:e.partNo,partNoDesc:e.partNoDesc,qtyOrd:e.partQty,sale:e.sale,cost:e.cost,addDeleteFlag:e.addDeleteFlag}))}))}:void 0,rogg:t.rogg?{roNo:t.rogg.roNo,ops:t.rogg.ops?.map(e=>({opCode:e.opCode,jobNo:e.jobNo,lines:e.lines?.map(e=>({breakOut:e.breakOut,itemType:e.itemType,itemDesc:e.itemDesc,custQty:e.custQty,warrQty:e.warrQty,intrQty:e.intrQty,custPayTypeFlag:e.custPayTypeFlag,warrPayTypeFlag:e.warrPayTypeFlag,intrPayTypeFlag:e.intrPayTypeFlag,custTxblNtxblFlag:e.custTxblNtxblFlag,warrTxblNtxblFlag:e.warrTxblNtxblFlag,intrTxblNtxblFlag:e.intrTxblNtxblFlag,amount:e.amount?{payType:e.amount.payType,amtType:e.amount.amtType,custPrice:e.amount.custPrice,dlrCost:e.amount.dlrCost}:void 0}))}))}:void 0,romisc:t.romisc?{roNo:t.romisc.roNo,ops:t.romisc.ops?.map(e=>({opCode:e.opCode,jobNo:e.jobNo,lines:e.lines?.map(e=>({miscCode:e.miscCode,custPayTypeFlag:e.custPayTypeFlag,warrPayTypeFlag:e.warrPayTypeFlag,intrPayTypeFlag:e.intrPayTypeFlag,custTxblNtxblFlag:e.custTxblNtxblFlag,warrTxblNtxblFlag:e.warrTxblNtxblFlag,intrTxblNtxblFlag:e.intrTxblNtxblFlag,codeAmt:e.codeAmt}))}))}:void 0};if(n.tax?.payType&&!["All","Cust","Intr","Warr"].includes(n.tax.payType))throw new k("tax.payType must be one of: All, Cust, Intr, Warr");if(n.rolabor?.ops?.some(e=>e.custTxblNtxblFlag&&!["T","N"].includes(e.custTxblNtxblFlag)||e.warrTxblNtxblFlag&&!["T","N"].includes(e.warrTxblNtxblFlag)||e.intrTxblNtxblFlag&&!["T","N"].includes(e.intrTxblNtxblFlag)))throw new k("Taxable flags (CustTxblNTxblFlag, WarrTxblNTxblFlag, IntrTxblNTxblFlag) must be 'T' or 'N'");if(n.rogg?.ops?.some(e=>e.lines?.some(e=>e.itemType&&!["G","P","S","F"].includes(e.itemType))))throw new k("rogg.ops.lines.itemType must be one of: G, P, S, F");const o={...r?.envelope||{},sender:{component:r?.envelope?.sender?.component??"Rome",task:r?.envelope?.sender?.task??"BSMRO",referenceId:r?.envelope?.sender?.referenceId??"Insert",creatorNameCode:r?.envelope?.sender?.creatorNameCode??"RCI",senderNameCode:r?.envelope?.sender?.senderNameCode??"RCI"}},a=e({routing:r.routing,sender:o.sender,creationDateTime:o.creationDateTime,bodId:o.bodId});return{starXml:E.render('\n\n {{{ApplicationArea}}}\n \n \n {{#RO.roComment}}\n \n {{/RO.roComment}}\n\n {{#RO.estimate}}\n \n {{/RO.estimate}}\n\n {{#RO.tax}}\n \n {{/RO.tax}}\n \n\n {{#RO.rolabor}}\n \n {{#RO.rolabor.ops}}\n \n {{#bill}}\n \n {{/bill}}\n\n {{#ccc}}\n \n {{/ccc}}\n\n {{#amount}}\n \n {{/amount}}\n \n {{/RO.rolabor.ops}}\n \n {{/RO.rolabor}}\n\n {{#RO.ropart}}\n \n {{#RO.ropart.jobs}}\n \n {{#lines}}\n \n {{/lines}}\n \n {{/RO.ropart.jobs}}\n \n {{/RO.ropart}}\n\n {{#RO.rogg}}\n \n {{#RO.rogg.ops}}\n \n {{#lines}}\n \n {{#amount}}\n \n {{/amount}}\n \n {{/lines}}\n \n {{/RO.rogg.ops}}\n \n {{/RO.rogg}}\n\n {{#RO.romisc}}\n \n {{#RO.romisc.ops}}\n \n {{#lines}}\n \n {{/lines}}\n \n {{/RO.romisc.ops}}\n \n {{/RO.romisc}}\n \n\n',{ApplicationArea:a,RO:n}),routing:r.routing,envelope:o,postParse:O,xsdFilename:"rey_RomeCreateBSMRepairOrderReq.xsd"}}(t,r))}async updateRepairOrder(t,r){return this._send(function(t={},r={}){if(!r?.routing?.dealerNumber)throw new k("routing.dealerNumber required");if(!t?.finalUpdate)throw new k("finalUpdate (FinalUpdate) required");if(!["Y","N"].includes(t.finalUpdate))throw new k("finalUpdate must be 'Y' or 'N'");if(!t?.outsdRoNo)throw new k(" outsdRoNo");const n={finalUpdate:t.finalUpdate||"N",roNo:t.roNo,customerNo:t.customerNo,tagNo:t.tagNo,outsdRoNo:t.outsdRoNo,departmentType:t.departmentType,vin:t.vin,mileageIn:t.mileageIn,mileageOut:t.mileageOut,roComment:t.roComment,estimate:t.estimate?{estimateType:t.estimate.estimateType}:void 0,tax:t.tax?{payType:t.tax.payType,taxCode:t.tax.taxCode,txblGrossAmt:t.tax.txblGrossAmt,grossTaxAmt:t.tax.grossTaxAmt}:void 0,rolabor:t.rolabor?{ops:t.rolabor.ops?.map(e=>({opCode:e.opCode,jobNo:e.jobNo,custPayTypeFlag:e.custPayTypeFlag,custTxblNtxblFlag:e.custTxblNtxblFlag,warrPayTypeFlag:e.warrPayTypeFlag,warrTxblNtxblFlag:e.warrTxblNtxblFlag,intrPayTypeFlag:e.intrPayTypeFlag,intrTxblNtxblFlag:e.intrTxblNtxblFlag,vlrCode:e.vlrCode,bill:e.bill?{payType:e.bill.payType,jobTotalHrs:e.bill.jobTotalHrs,billTime:e.bill.billTime,billRate:e.bill.billRate}:void 0,ccc:e.ccc?{cause:e.ccc.cause,complaint:e.ccc.complaint,correction:e.ccc.correction}:void 0,amount:e.amount?{payType:e.amount.payType,amtType:e.amount.amtType,custPrice:e.amount.custPrice}:void 0}))}:void 0,ropart:t.ropart?{jobs:t.ropart.jobs?.map(e=>({opCode:e.opCode,jobNo:e.jobNo,lines:e.lines?.map(e=>({partNo:e.partNo,partNoDesc:e.partNoDesc,qtyOrd:e.partQty,sale:e.sale,cost:e.cost,addDeleteFlag:e.addDeleteFlag}))}))}:void 0,rogg:t.rogg?{roNo:t.rogg.roNo,ops:t.rogg.ops?.map(e=>({opCode:e.opCode,jobNo:e.jobNo,lines:e.lines?.map(e=>({breakOut:e.breakOut,itemType:e.itemType,itemDesc:e.itemDesc,custQty:e.custQty,warrQty:e.warrQty,intrQty:e.intrQty,custPayTypeFlag:e.custPayTypeFlag,warrPayTypeFlag:e.warrPayTypeFlag,intrPayTypeFlag:e.intrPayTypeFlag,custTxblNtxblFlag:e.custTxblNtxblFlag,warrTxblNtxblFlag:e.warrTxblNtxblFlag,intrTxblNtxblFlag:e.intrTxblNtxblFlag,amount:e.amount?{payType:e.amount.payType,amtType:e.amount.amtType,custPrice:e.amount.custPrice,dlrCost:e.amount.dlrCost}:void 0}))}))}:void 0,romisc:t.romisc?{roNo:t.romisc.roNo,ops:t.romisc.ops?.map(e=>({opCode:e.opCode,jobNo:e.jobNo,lines:e.lines?.map(e=>({miscCode:e.miscCode,custPayTypeFlag:e.custPayTypeFlag,warrPayTypeFlag:e.warrPayTypeFlag,intrPayTypeFlag:e.intrPayTypeFlag,custTxblNtxblFlag:e.custTxblNtxblFlag,warrTxblNtxblFlag:e.warrTxblNtxblFlag,intrTxblNtxblFlag:e.intrTxblNtxblFlag,codeAmt:e.codeAmt}))}))}:void 0};if(n.tax?.payType&&!["All","Cust","Intr","Warr"].includes(n.tax.payType))throw new k("tax.payType must be one of: All, Cust, Intr, Warr");if(n.rolabor?.ops?.some(e=>e.custTxblNtxblFlag&&!["T","N"].includes(e.custTxblNtxblFlag)||e.warrTxblNtxblFlag&&!["T","N"].includes(e.warrTxblNtxblFlag)||e.intrTxblNtxblFlag&&!["T","N"].includes(e.intrTxblNtxblFlag)))throw new k("Taxable flags (CustTxblNTxblFlag, WarrTxblNTxblFlag, IntrTxblNTxblFlag) must be 'T' or 'N'");if(n.rogg?.ops?.some(e=>e.lines?.some(e=>e.itemType&&!["G","P","S","F"].includes(e.itemType))))throw new k("rogg.ops.lines.itemType must be one of: G, P, S, F");const o={...r?.envelope||{},sender:{component:r?.envelope?.sender?.component??"Rome",task:r?.envelope?.sender?.task??"BSMRO",referenceId:r?.envelope?.sender?.referenceId??"Update",creatorNameCode:r?.envelope?.sender?.creatorNameCode??"RCI",senderNameCode:r?.envelope?.sender?.senderNameCode??"RCI"}},a=e({routing:r.routing,sender:o.sender,creationDateTime:o.creationDateTime,bodId:o.bodId});return{starXml:E.render('\n\n {{{ApplicationArea}}}\n \n \n {{#RO.roComment}}\n \n {{/RO.roComment}}\n\n {{#RO.estimate}}\n \n {{/RO.estimate}}\n\n {{#RO.tax}}\n \n {{/RO.tax}}\n \n\n {{#RO.rolabor}}\n \n {{#RO.rolabor.ops}}\n \n {{#bill}}\n \n {{/bill}}\n\n {{#ccc}}\n \n {{/ccc}}\n\n {{#amount}}\n \n {{/amount}}\n \n {{/RO.rolabor.ops}}\n \n {{/RO.rolabor}}\n\n {{#RO.ropart}}\n \n {{#RO.ropart.jobs}}\n \n {{#lines}}\n \n {{/lines}}\n \n {{/RO.ropart.jobs}}\n \n {{/RO.ropart}}\n\n {{#RO.rogg}}\n \n {{#RO.rogg.ops}}\n \n {{#lines}}\n \n {{#amount}}\n \n {{/amount}}\n \n {{/lines}}\n \n {{/RO.rogg.ops}}\n \n {{/RO.rogg}}\n\n {{#RO.romisc}}\n \n {{#RO.romisc.ops}}\n \n {{#lines}}\n \n {{/lines}}\n \n {{/RO.romisc.ops}}\n \n {{/RO.romisc}}\n \n\n',{ApplicationArea:a,RO:n}),routing:r.routing,envelope:o,postParse:O,xsdFilename:"rey_RomeUpdateBSMRepairOrderReq.xsd",elementName:"rey_RomeUpdateBSMRepairOrderReq"}}(t,r))}async getParts(t,r){return this._send(function(t={},r={}){const n=t.roNumber?String(t.roNumber).trim():void 0;if(!n)throw new k("getParts: roNumber required");const o=e({routing:r.routing,sender:{component:"Rome",task:"RCT",referenceId:"Query",creator:"RCI",senderName:"RCI"}});return{starXml:E.render('\n\n {{{ApplicationArea}}}\n \n\n',{ApplicationArea:o,RoNumber:n}),routing:r.routing,envelope:r.envelope,xsdFilename:"rey_RomeGetPartsReq.xsd",elementName:"rey_RomeGetPartsReq",postParse:e=>function(e){return e?.rey_RomeGetPartsResp?.RoParts?.map(e=>({partNumber:h(e,"PartNumber"),partDescription:h(e,"PartDescription"),quantityOrdered:h(e,"QuantityOrdered"),quantityShipped:h(e,"QuantityShipped"),price:h(e,"Price"),cost:h(e,"Cost"),processedFlag:h(e,"ProcessedFlag"),addOrDelete:h(e,"AddOrDelete")}))||[]}(e)}}(t,r))}}export{z as RRClient,$ as errors};