PageSourceSearch

https://quotexinsurance.com/assets/ApplicationRoot-D4scxSx1.js

js quotexinsurance.com collected 2026-09-24 14:50:49 UTC 994,361 bytes, 215 lines download raw bytes

1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/SoftwareApp-DBlXttyb.js","assets/index-CU9pv9kH.js","assets/index-B3Z7qEiE.css","assets/EmployeeLayout-CJrszjxn.js","assets/PortalShell-Bck8WkRK.js","assets/index-Bwim5EIL.js","assets/CountBadge-CLTOCm2I.js","assets/log-out-SkgzdFD0.js","assets/createLucideIcon-IZvJT3Oh.js","assets/arrow-left-B0QZoWyb.js","assets/taskFilters-DzBR5OzL.js","assets/trainingVideos-BM3At9rJ.js","assets/bot-CxeHrULO.js","assets/circle-check-qSrjwebh.js","assets/sparkles-y0wkYNFy.js","assets/send-BodfG4sM.js","assets/liveMailbox-D7Cc-bSf.js","assets/mailboxOAuth-CFqE8e_Z.js","assets/connectedCarrierAvailability-SKgD4VI6.js","assets/quotexConnect-DQ7jyqIj.js","assets/layout-dashboard-X5UlRC2B.js","assets/square-check-big-IPdB2OIw.js","assets/calendar-days-XsCr_3tH.js","assets/message-circle-C-cdLrUw.js","assets/users-DxU3LW1g.js","assets/shield-check-D3tb1wLl.js","assets/life-buoy-CYccp_YU.js","assets/receipt-text-g48-HsXQ.js","assets/calendar-clock-DYO1N6Tb.js","assets/megaphone-DqkHkBJI.js","assets/building-2-D_sW2e07.js","assets/chart-column-DgE4L3TC.js","assets/calculator-CunoYJPS.js","assets/heart-handshake-UVKdCzVB.js","assets/archive-BfSN1Byw.js","assets/graduation-cap-BdyHXcl5.js","assets/sliders-horizontal-DjBhatLF.js","assets/user-cog-BTh8Kkcj.js","assets/MasterLayout-6CYlFvzL.js","assets/user-plus-LfY1PI7C.js","assets/monitor-play-DkVRV2nB.js","assets/badge-dollar-sign-9jLn5R2V.js","assets/history-DudBhxHV.js","assets/file-check-2-B1UxIj7M.js","assets/activity-DECGov1g.js","assets/database-fRALS_BT.js","assets/RequireProfile-3-7YryEu.js","assets/RequireRole-DcBoDhjD.js","assets/AgencyMobileApp-BkLXjDHZ.js","assets/CustomerLayout-CyWfyMb_.js","assets/house-CfRnZqqL.js","assets/briefcase-BsACvV3S.js","assets/file-text-jyLQwAMQ.js","assets/settings-Civ4T17l.js","assets/CustomerLoginPage-C5u5aCB0.js","assets/AuthShell-BtGyLvlf.js","assets/agencyPublicProfile-wBgZcgGu.js","assets/Modal-C6kFkAbC.js","assets/useCustomerAgencySelection-Ytv4hOb_.js","assets/customerQuoteContinuation-D9OZJtu-.js","assets/loader-circle-DXUjcncs.js","assets/QuoteStartGate-B41jelJ9.js","assets/arrow-right-2lbzrhFM.js","assets/CustomerSignupPage-CDREedgc.js","assets/Disclaimer-BB2Oy90g.js","assets/info-M-1Pp2-D.js","assets/PasswordResetPage-Cbz2wYO2.js","assets/ClientQuestionnairePage-C49P7q2o.js","assets/Card-BzpsXsdE.js","assets/Badge-s9iX0649.js","assets/triangle-alert-BL3TtAct.js","assets/clipboard-list-fpEojxMu.js","assets/CustomerAssetPage-DiP4djmy.js","assets/Button-D9Hhg3jy.js","assets/DocumentList-BFYXabR0.js","assets/DocumentViewerModal-DhQe74A9.js","assets/documentUrls-Cn1xQvsu.js","assets/plus-DyEPwt-R.js","assets/trash-2-B6s-XdFu.js","assets/download-DetgfXnG.js","assets/file-image-ClpwilzM.js","assets/pencil-CV7ycgge.js","assets/save-CRDfMfIA.js","assets/CarrierPortalButton-d58tuFAL.js","assets/check-BvqISjvx.js","assets/external-link-CAml7HFm.js","assets/chevron-up-C9WwYN1L.js","assets/chevron-down-Bt45DgM_.js","assets/MapLink-5IWQoa0g.js","assets/map-pin-CqcGKtCU.js","assets/StatusBadge-DxpSWHtv.js","assets/Timeline-5iOlOoO5.js","assets/search-DiSA9t8z.js","assets/user-CAK-us5W.js","assets/arrow-up-right-Vxg26mHt.js","assets/paperclip-DUnDSaxu.js","assets/mail-w2cFRj--.js","assets/image-CPhbzW8f.js","assets/PolicyEditWizard-DXkasagZ.js","assets/useCustomer-CTl7_4vS.js","assets/CustomerAssetsPage-B_g1rSkj.js","assets/umbrella-D1DlRfIf.js","assets/gem-j5Xs2BSr.js","assets/sailboat-CmIg7C_1.js","assets/CustomerClaimsPage-BqxUmwYv.js","assets/CarrierClaimLink-CWmCV-oK.js","assets/phone-Gu3xayRM.js","assets/phone-DUApJRJy.js","assets/CustomerDashboard-B1Ncs7v6.js","assets/customerMessages-8nU6f15P.js","assets/CustomerDocumentsPage-D4ZcsJV2.js","assets/CustomerMessagesPage-DQRInAqg.js","assets/RichMessageBody-CXzpWJjl.js","assets/MarketingPamphletCard-1eMIPC1X.js","assets/electronicSignature-Dx4Lihjw.js","assets/CustomerPoliciesPage-6IbtpBuk.js","assets/carrierBillingDate-BHZMh1Zi.js","assets/package-C2vNwG7_.js","assets/car-D7_fZU-9.js","assets/CustomerPolicyPage-BQKHhRt3.js","assets/CustomerSettingsPage-S8lMPsvk.js","assets/AddressAutocomplete-BcGCP1sY.js","assets/QuoteFlowPage-BAtsohWr.js","assets/CustomerQuoteRequests-DcAhIQe8.js","assets/ContactPage-DNl1TW9s.js","assets/quotexContact-DEcSzb1M.js","assets/usePublicAgency-B8l_-SqA.js","assets/websiteApi-BTren2ja.js","assets/MarketingSmartContactPage-lJ9QVBeU.js","assets/log-in-ckr2IH8n.js","assets/AgencyWebsiteApp-CG2tXuQe.js","assets/PublicLayout-DCNROq4d.js","assets/AboutPage-d5pJ_rTB.js","assets/HomePage-ZPuV7iXW.js","assets/NotFoundPage-CZfWOTWi.js","assets/PrivateClientPage-zOulak7I.js","assets/LegalPages-DBJdHLRw.js","assets/ServicesPage-FXDroteu.js","assets/CheckoutApp-743z08g-.js","assets/QuotexContactPage-D9qv6BH0.js","assets/QuotexSiteFooter-BVnA5TbA.js","assets/QuotexHomePage-DJVBmLrC.js","assets/circle-play-CsHuChi2.js","assets/earth-kjaPh5HR.js","assets/smartphone-WxTlWoMh.js","assets/messages-square-CSn2S44l.js","assets/UnifiedApp-DrGXOtL6.js","assets/lossRuns-B1EYF6bw.js"])))=>i.map(i=>d[i]);
2var Cf=Object.defineProperty;var Sf=(e,t,r)=>t in e?Cf(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var ts=(e,t,r)=>Sf(e,typeof t!="symbol"?t+"":t,r);import{j as J,L as Tf,r as ce,_ as Lt}from"./index-CU9pv9kH.js";import{c as cc}from"./createLucideIcon-IZvJT3Oh.js";/**
3 * @license lucide-react v0.460.0 - ISC
4 *
5 * This source code is licensed under the ISC license.
6 * See the LICENSE file in the root directory of this source tree.
7 */const kf=cc("PlugZap",[["path",{d:"M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z",key:"goz73y"}],["path",{d:"m2 22 3-3",key:"19mgm9"}],["path",{d:"M7.5 13.5 10 11",key:"7xgeeb"}],["path",{d:"M10.5 16.5 13 14",key:"10btkg"}],["path",{d:"m18 3-4 4h6l-4 4",key:"16psg9"}]]);/**
8 * @license lucide-react v0.460.0 - ISC
9 *
10 * This source code is licensed under the ISC license.
11 * See the LICENSE file in the root directory of this source tree.
12 */const Rf=cc("RefreshCw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);/**
13 * @license lucide-react v0.460.0 - ISC
14 *
15 * This source code is licensed under the ISC license.
16 * See the LICENSE file in the root directory of this source tree.
17 */const Ef=cc("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}
17],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]),xf={sm:"h-7 w-7",md:"h-9 w-9",lg:"h-10 w-10",xl:"h-12 w-12"},Pf={sm:"text-[17px]",md:"text-[21px]",lg:"text-[24px]",xl:"text-[28px]"},Nf="M31.74 45.33L35.52 45.11Q36.75 47.31 38.58 49Q40.4 50.69 42.45 51.64Q44.5 52.59 46.34 52.59Q46.74 52.59 47.18 52.56Q47.62 52.54 47.93 52.5Q48.06 52.41 48.13 52.65Q48.19 52.89 48.1 52.94Q47.14 53.16 46.19 53.31Q45.24 53.47 44.36 53.47Q42.34 53.47 40.05 52.52Q37.76 51.57 35.61 49.77Q33.45 47.97 31.74 45.33ZM31.25 45.94Q28.08 45.94 25.51 44.82Q22.94 43.7 21.11 41.72Q19.28 39.74 18.29 37.16Q17.3 34.59 17.3 31.69Q17.3 28.12 18.69 25.44Q20.08 22.75 22.36 20.97Q24.65 19.19 27.38 18.31Q30.11 17.43 32.79 17.43Q36.05 17.43 38.62 18.6Q41.2 19.76 43 21.74Q44.8 23.72 45.75 26.23Q46.7 28.74 46.7 31.38Q46.7 34.46 45.46 37.1Q44.23 39.74 42.1 41.72Q39.96 43.7 37.17 44.82Q34.38 45.94 31.25 45.94ZM32.79 45.02Q35.78 45.02 38.16 43.59Q40.54 42.16 41.94 39.39Q43.35 36.61 43.35 32.61Q43.35 28.47 41.83 25.28Q40.32 22.09 37.52 20.27Q34.73 18.44 30.94 18.44Q26.06 18.44 23.35 21.59Q20.65 24.73 20.65 30.15Q20.65 33.27 21.51 35.98Q22.36 38.68 23.99 40.73Q25.62 42.77 27.86 43.9Q30.11 45.02 32.79 45.02Z";function du({className:e=""}){return J.jsx("svg",{"aria-hidden":"true",viewBox:"17 17 32 37",className:`inline-block overflow-visible ${e}`,focusable:"false",children:J.jsx("path",{d:Nf,fill:"currentColor"})})}function Ki(e){return e==="dark"?"text-white group-hover:text-white/85":e==="light"?"text-ink-950 group-hover:text-ink-700":""}function al(e,t=!1){return e==="dark"?t?"text-white/45":"text-white/62":e==="light"?t?"text-ink-400":"text-ink-600":""}function uu({size:e="md",className:t="border border-ink-100",letterClassName:r=""}){const n=/\b[hw]-/.test(t);return J.jsx("span",{className:`flex shrink-0 aspect-square items-center justify-center rounded-md bg-black text-white ${n?"":xf[e]} ${t}`,children:J.jsx("span",{className:`inline-flex items-center justify-center leading-none ${Pf[e]} ${r}`,children:J.jsx(du,{className:"h-[1em] w-[0.92em]"})})})}function Xs({className:e="",label:t="Quotex Insurance",tone:r="inherit"}){const n=t.replace(/^Q/i,"");return J.jsxs("span",{"aria-label":t,className:`inline-flex items-baseline font-display text-lg leading-tight tracking-normal ${Ki(r)} ${e}`,children:[J.jsx(du,{className:"mr-[-0.01em] h-[0.96em] w-[0.82em] translate-y-[0.2em]"}),J.jsx("span",{"aria-hidden":"true",children:n})]})}function Z0({to:e="/",subtitle:t,tagline:r,brandName:n="Quotex Insurance",brandColor:i,logoUrl:a,variant:s,tone:o="light",stacked:c=!1,interactive:d=!0}){const m=n==="Quotex Insurance",p=s??(c?"stacked":"horizontal"),u=n.trim().charAt(0).toUpperCase()||"Q",g=(r??t??"").replace(/^Agency portal\s+\u00c2?\u00b7\s+/i,`Insurance agency portal
18`).replace(/^Agency portal$/i,"Insurance agency portal").split(/\n+/).map(T=>T.trim()).filter(Boolean),y=a?J.jsx("img",{src:a,alt:"",className:"h-9 w-9 shrink-0 rounded border border-ink-100 bg-white object-cover"}):m?J.jsx(uu,{}):J.jsx("div",{className:"flex h-9 w-9 shrink-0 aspect-square items-center justify-center rounded-md bg-ink-900 font-display text-[21px] leading-none text-gold-300",style:i?{backgroundColor:i}:void 0,children:u}),h=`group flex min-w-0 gap-3 ${p==="stacked"?"items-start":"items-center"}`,w=J.jsxs(J.Fragment,{children:[y,p==="icon"?null:J.jsxs("div",{className:p==="stacked"?"min-w-0 pt-0.5 leading-[1.08]":"min-w-0 leading-tight",children:[m&&p==="stacked"?J.jsxs(J.Fragment,{children:[J.jsx("div",{className:`font-display text-[17px] leading-[1.02] ${Ki(o)}`,children:J.jsx(Xs,{tone:"inherit",label:"Quotex",className:"text-[17px]"})}),J.jsx("div",{className:`font-display text-[15px] leading-[1.02] ${Ki(o)}`,children:"Insurance"})]}):J.jsx("div",{className:`truncate font-display text-lg leading-tight ${Ki(o)}`,children:m?J.jsx(Xs,{tone:"inherit"}):n}),g.length>0&&J.jsx("div",{className:"mt-0.5 space-y-0.5 text-xs leading-tight",children:g.map((T,b)=>J.jsx("div",{className:b===0?al(o,!0):`font-medium ${al(o)}`,children:T},`${T}-${b}`))})]})]});return d?J.jsx(Tf,{to:e,className:h,children:w}):J.jsx("div",{className:h,children:w})}const rs={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1,VITE_AI_MODE:"server",VITE_API_BASE_URL:"/api",VITE_STATE_SYNC_ID:"default",VITE_STATE_SYNC_MODE:"supabase",VITE_VERCEL_DEPLOYMENT_ID:"dpl_F2uor5XT6WbCD6wQePTVkunvMZhq",VITE_VERCEL_ENV:"production",VITE_VERCEL_GIT_COMMIT_AUTHOR_LOGIN:"",VITE_VERCEL_GIT_COMMIT_AUTHOR_NAME:"barhoumfak24-hash",V
18ITE_VERCEL_GIT_COMMIT_MESSAGE:"Restore evidence-backed AI mapping completeness",VITE_VERCEL_GIT_COMMIT_REF:"codex/full-page-quote-flow",VITE_VERCEL_GIT_COMMIT_SHA:"0823d0042f218e01ecb18b834d364b43144d6484",VITE_VERCEL_GIT_PREVIOUS_SHA:"",VITE_VERCEL_GIT_PROVIDER:"github",VITE_VERCEL_GIT_PULL_REQUEST_ID:"",VITE_VERCEL_GIT_REPO_ID:"",VITE_VERCEL_GIT_REPO_OWNER:"barhoumfak24-hash",VITE_VERCEL_GIT_REPO_SLUG:"codex-quotex",VITE_VERCEL_OBSERVABILITY_CLIENT_CONFIG:'{"analytics":{"scriptSrc":"49897bef4da1095c/script.js","viewEndpoint":"49897bef4da1095c/view","eventEndpoint":"49897bef4da1095c/event","sessionEndpoint":"49897bef4da1095c/session"},"speedInsights":{"scriptSrc":"c1c2a871a5e4c1f5/script.js","endpoint":"c1c2a871a5e4c1f5/vitals"}}',VITE_VERCEL_PROJECT_ID:"prj_OAwowzIJBezI6pDFxpMTyLpQC8xD",VITE_VERCEL_PROJECT_PRODUCTION_URL:"quotexinsurance.com",VITE_VERCEL_TARGET_ENV:"production",VITE_VERCEL_URL:"quotexinsurance-2w14272cc-barhoumfak24-7816s-projects.vercel.app"},qf="quotex-lite-browser/1.0",sl=600;let ol=!1;function Of(){ol||typeof window>"u"||mu()&&(ol=!0,window.addEventListener("error",e=>{eo(e.error??e.message,{extra:{source:e.filename,line:e.lineno,column:e.colno}})}),window.addEventListener("unhandledrejection",e=>{eo(e.reason,{extra:{source:"unhandledrejection"}})}))}function eo(e,t={}){const r=Df(mu());if(!r||typeof fetch>"u")return;const n=Bf(e),i=Lf({event_id:jf(),timestamp:new Date().toISOString(),platform:"javascript",level:t.level??"error",environment:Yi("VITE_SENTRY_ENVIRONMENT")||Yi("MODE")||"development",release:Yi("VITE_SENTRY_RELEASE")||Mf(),logger:"quotex.browser",transaction:Ff(),tags:{app:"quotex",surface:$f(),...t.tags},exception:{values:[{type:n.name,value:n.message,stacktrace:n.stack?{frames:Uf(n.stack)}:void 0}]},extra:t.extra??{}}),a=[JSON.stringify({event_id:i.event_id,sent_at:new Date().toISOString()}),JSON.stringify({type:"event"}),JSON.stringify(i)].join(`
19`);fetch(r.envelopeUrl,{method:"POST",headers:{"content-type":"application/x-sentry-envelope"},body:a,keepalive:!0}).catch(()=>{})}function Df(e){const t=e==null?void 0:e.trim();if(!t)return null;try{const r=new URL(t),n=r.username,i=r.pathname.split("/").filter(Boolean).at(-1);if(!n||!i)return null;const a=r.pathname.split("/").filter(Boolean).slice(0,-1).join("/"),s=a?`/${a}`:"";return{publicKey:n,envelopeUrl:`${r.protocol}//${r.host}${s}/api/${i}/envelope/?sentry_key=${encodeURIComponent(n)}&sentry_version=7&sentry_client=${encodeURIComponent(qf)}`}}catch{return null}}function Lf(e){return to(e,new WeakSet)}function mu(){return Yi("VITE_SENTRY_DSN")}function Yi(e){try{return String((rs==null?void 0:rs[e])??"").trim()}catch{return""}}function Mf(){try{return"quotex@0823d0042f218e01ecb18b834d364b43144d6484"}catch{return"quotex@local"}}function $f(){if(typeof window>"u")return"unknown";const e=window.location.pathname;return e.startsWith("/employee")?"employee":e.startsWith("/agency-app")||e.startsWith("/app")?"agency-app":e.startsWith("/agency")||e.startsWith("/customer")?"customer":e.startsWith("/checkout")?"checkout":"website"}function Ff(){return typeof window>"u"?"":`${window.location.origin}${window.location.pathname}`}function Bf(e){return e instanceof Error?{name:Kn(e.name||"Error"),message:Kn(da(e.message||"Unknown error")),stack:e.stack}:typeof e=="string"?{name:"Error",message:Kn(da(e))}:{name:"Error",message:"Unknown non-error rejection"}}function Uf(e){return e.split(`
20`).slice(1,25).map(t=>({function:Kn(da(t.trim()))})).reverse()}function to(e,t){if(typeof e=="string")return Kn(da(e));if(e==null||typeof e!="object")return e;if(t.has(e))return"[Circular]";if(t.add(e),Array.isArray(e))return e.slice(0,20).map(n=>to(n,t));const r={};for(const[n,i]of Object.entries(e))Vf(n)?r[n]="[Filtered]":r[n]=to(i,t);return r}function Vf(e){return/password|passcode|token|secret|authorization|cookie|api[-_]?key|service[-_]?role|email|phone|address|ssn|dob|birth|vin|policy|claim|license/i.test(e)}function da(e){return e.replace(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/gi,"[email]").replace(/\b(?:\+?1[-.\s]?)?(?:\(?\d{3}\)?[-.\s]?)\d{3}[-.\s]?\d{4}\b/g,"[phone]").replace(/\b(?:sk|pk|rk|xox|ghp|gho|ghu|github_pat|SG)\S{12,}\b/gi,"[secret]").replace(/\b\d{3}-\d{2}-\d{4}\b/g,"[ssn]")}function Kn(e){return e.length>sl?`${e.slice(0,sl)}...`:e}function jf(){return typeof crypto<"u"&&"randomUUID"in crypto?crypto.randomUUID().replace(/-/g,""):Array.from({length:32},()=>Math.floor(Math.random()*16).toString(16)).join("")}class Qf extends ce.Component{constructor(){super(...arguments);ts(this,"state",{error:null})}static getDerivedStateFromError(r){return{error:r}}componentDidCatch(r,n){console.error("[quotex] Render failure contained by ErrorBoundary",r,n),eo(r,{tags:{boundary:"react"},extra:{componentStack:n.componentStack}})}render(){return this.state.error?this.props.fallback?this.props.fallback:this.props.compact?null:J.jsxs("section",{role:"alert","aria-live":"assertive",className:"rounded-lg border border-red-200 bg-red-50 p-5 text-red-950 shadow-soft",children:[J.jsx("h2",{className:"font-display text-2xl",children:"This section needs a refresh."}),J.jsx("p",{className:"mt-2 text-sm text-red-900",children:"The rest of the portal is still available. Reload the page, or open another category from the sidebar while this section recovers."}),J.jsx("p",{className:"mt-3 rounded-md bg-white/75 px-3 py-2 font-mono text-xs text-red-800",children:this.state.error.message})]}):this.props.children}}const Hf=new Set(["http:","https:","mailto:","tel:"]),zf=/[\u0000-\u001f\u007f]/;function pu(e,t={}){const{allowRelative:r=!0}=t,n=e.trim();if(!n||zf.test(n))return null;if(r&&/^(\/(?!\/)|#|\?)/.test(n))return n;try{const i=typeof window<"u"?window.location.href:"https://quotex.local/",a=new URL(n,i);return!Hf.has(a.protocol)||!r&&a.origin===new URL(i).origin&&!/^[a-z][a-z0-9+.-]*:/i.test(n)?null:a.protocol==="mailto:"||a.protocol==="tel:"?n:a.href}catch{return null}}function Gf(e){if(typeof window>"u")return!1;const t=pu(e);if(!t)return!1;
20try{const r=new URL(t,window.location.href);return r.protocol!=="http:"&&r.protocol!=="https:"?!1:r.origin!==window.location.origin}catch{return!1}}function Wf(e){const t=new Set((e||"").split(/\s+/).filter(Boolean));return t.add("noopener"),t.add("noreferrer"),Array.from(t).join(" ")}function Ji(e){const t=e.getAttribute("href");if(!t)return;const r=pu(t);if(!r){e.hasAttribute("href")&&e.removeAttribute("href"),e.setAttribute("aria-disabled","true");return}if(e.getAttribute("href")!==r&&e.setAttribute("href",r),!Gf(r))return;e.target!=="_blank"&&(e.target="_blank");const n=Wf(e.rel);e.rel!==n&&(e.rel=n)}function cl(e=document){e.querySelectorAll("a[href]").forEach(Ji)}function Kf(){ce.useEffect(()=>{if(typeof window>"u")return;cl();const e=r=>{const n=r.target;if(!(n instanceof Element))return;const i=n.closest("a[href]");i&&Ji(i)},t=new MutationObserver(r=>{for(const n of r){if(n.type==="attributes"&&n.target instanceof HTMLAnchorElement){Ji(n.target);continue}n.addedNodes.forEach(i=>{i instanceof Element&&(i instanceof HTMLAnchorElement&&Ji(i),cl(i))})}});return document.addEventListener("click",e,!0),t.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["href"]}),()=>{document.removeEventListener("click",e,!0),t.disconnect()}},[])}const ro="quotex:chunk-recovery",no="__quotex_retry",Yf=6e4;function Jf(e){const t=e instanceof Error?e.message:String(e??"");return/failed to fetch dynamically imported module|error loading dynamically imported module|importing a module script failed|chunkloaderror|loading chunk [\w-]+ failed|unable to preload css|expected a javascript(?:-or-wasm)? module script|mime type ["']?text\/html|unexpected token ["']?</i.test(t)}function Zf(){if(typeof window>"u")return!1;try{const e=Number(window.sessionStorage.getItem(ro)??"0");if(Date.now()-e<Yf)return!1;window.sessionStorage.setItem(ro,String(Date.now()));const t=new URL(window.location.href);return t.searchParams.set(no,String(Date.now())),window.location.replace(t.toString()),!0}catch{return!1}}function Xf(){if(!(typeof window>"u"))try{window.sessionStorage.removeItem(ro);const e=new URL(window.location.href);if(!e.searchParams.has(no))return;e.searchParams.delete(no),window.history.replaceState(window.history.state,"",e.toString())}catch{}}function Wr(e){return ce.lazy(async()=>{try{return await e()}catch(t){if(Jf(t)&&Zf())return await new Promise(()=>{});throw t}})}function X0(e,t){return Wr(()=>e().then(r=>({default:r[t]})))}function eg(e){const t=e.toLowerCase();return t==="software"||t==="website"?t:t==="app"||t==="agency-app"||t==="agencyapp"||t==="mobile-app"?"agencyApp":t==="checkout"||t==="transaction"||t==="transactions"?"checkout":"unified"}const tg="production".trim()?"production":"unified",Un=eg(tg),rg=Wr(Un==="software"?()=>Lt(()=>import("./SoftwareApp-DBlXttyb.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47])).then(e=>({default:e.SoftwareApp})):Un==="agencyApp"?()=>Lt(()=>import("./AgencyMobileApp-BkLXjDHZ.js"),__vite__mapDeps([48,1,2,49,4,5,6,7,8,9,50,51,25,52,26,23,14,53,47,54,55,56,57,58,59,30,60,61,62,63,64,65,66,67,68,69,13,70,71,15,72,73,74,75,76,77,78,79,80,81,82,83,19,84,85,86,87,88,89,90,91,92,12,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129])).then(e=>({default:e.AgencyMobileApp})):Un==="website"?()=>Lt(()=>import("./AgencyWebsiteApp-CG2tXuQe.js"),__vite__mapDeps([130,1,2,49,4,5,6,7,8,9,50,51,25,52,26,23,14,53,131,125,126,56,47,54,55,57,58,59,30,60,63,64,65,61,62,66,67,68,69,13,70,71,15,72,73,74,75,76,77,78,79,80,81,82,83,19,84,85,86,87,88,89,90,91,92,12,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,132,24,124,127,133,129,128,134,135,136,137])).then(e=>({default:e.AgencyWebsiteApp})):Un==="checkout"?()=>Lt(()=>import("./CheckoutApp-743z08g-.js"),__vite__mapDeps([138,1,2,134,139,140,125,127,9,8,13,15,96,107,141,11,129,87,62,142,40,143,144,12,25,145,136])
20).then(e=>({default:e.CheckoutApp})):()=>Lt(()=>import("./UnifiedApp-DrGXOtL6.js"),__vite__mapDeps([146,1,2,46,47,8])).then(e=>({default:e.UnifiedApp})));function ng(){window.location.reload()}function fu({showRefresh:e=!1}){return J.jsx("div",{role:"status","aria-live":"polite","aria-busy":e?"false":"true","aria-label":"Loading Quotex",className:"min-h-screen bg-ink-50 text-ink-900 flex items-center justify-center p-6",children:J.jsxs("div",{className:"flex flex-col items-center gap-5",children:[J.jsxs("div",{className:"flex items-center gap-3",children:[J.jsx(uu,{size:"xl",className:"shadow-soft"}),J.jsx(Xs,{className:"text-3xl text-ink-950"})]}),e&&J.jsxs("button",{type:"button",className:"btn-outline",onClick:ng,children:[J.jsx(Rf,{className:"h-4 w-4"}),"Refresh"]})]})})}function ig(){const[e,t]=ce.useState(()=>typeof navigator<"u"&&navigator.onLine===!1);return ce.useEffect(()=>{const r=window.setTimeout(()=>t(!0),8e3),n=()=>t(!0);return window.addEventListener("offline",n),()=>{window.clearTimeout(r),window.removeEventListener("offline",n)}},[]),J.jsx(fu,{showRefresh:e})}function ag(){return J.jsx(fu,{showRefresh:!0})}function sg(){return ce.useEffect(()=>{Xf()},[]),null}function og(){Kf();const e=J.jsx(Qf,{fallback:J.jsx(ag,{}),children:J.jsxs(ce.Suspense,{fallback:J.jsx(ig,{}),children:[J.jsx(rg,{}),J.jsx(sg,{})]})});return Un==="website"?J.jsx("div",{className:"min-h-screen bg-[#090807] px-4 py-5 md:px-8 md:py-8",children:J.jsx("div",{className:"mx-auto min-h-[calc(100vh-2.5rem)] max-w-[1500px] overflow-hidden rounded-[30px] border border-white/15 bg-white shadow-[0_28px_90px_rgba(0,0,0,0.48)] md:min-h-[calc(100vh-4rem)]",children:e})}):e}const ns={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1,VITE_AI_MODE:"server",VITE_API_BASE_URL:"/api",VITE_STATE_SYNC_ID:"default",VITE_STATE_SYNC_MODE:"supabase",VITE_VERCEL_DEPLOYMENT_ID:"dpl_F2uor5XT6WbCD6wQePTVkunvMZhq",VITE_VERCEL_ENV:"production",VITE_VERCEL_GIT_COMMIT_AUTHOR_LOGIN:"",VITE_VERCEL_GIT_COMMIT_AUTHOR_NAME:"barhoumfak24-hash",VITE_VERCEL_GIT_COMMIT_MESSAGE:"Restore evidence-backed AI mapping completeness",VITE_VERCEL_GIT_COMMIT_REF:"codex/full-page-quote-flow",VITE_VERCEL_GIT_COMMIT_SHA:"0823d0042f218e01ecb18b834d364b43144d6484",VITE_VERCEL_GIT_PREVIOUS_SHA:"",VITE_VERCEL_GIT_PROVIDER:"github",VITE_VERCEL_GIT_PULL_REQUEST_ID:"",VITE_VERCEL_GIT_REPO_ID:"",VITE_VERCEL_GIT_REPO_OWNER:"barhoumfak24-hash",VITE_VERCEL_GIT_REPO_SLUG:"codex-quotex",VITE_VERCEL_OBSERVABILITY_CLIENT_CONFIG:'{"analytics":{"scriptSrc":"49897bef4da1095c/script.js","viewEndpoint":"49897bef4da1095c/view","eventEndpoint":"49897bef4da1095c/event","sessionEndpoint":"49897bef4da1095c/session"},"speedInsights":{"scriptSrc":"c1c2a871a5e4c1f5/script.js","endpoint":"c1c2a871a5e4c1f5/vitals"}}',VITE_VERCEL_PROJECT_ID:"prj_OAwowzIJBezI6pDFxpMTyLpQC8xD",VITE_VERCEL_PROJECT_PRODUCTION_URL:"quotexinsurance.com",VITE_VERCEL_TARGET_ENV:"production",VITE_VERCEL_URL:"quotexinsurance-2w14272cc-barhoumfak24-7816s-projects.vercel.app"};function lc(e){try{return String((ns==null?void 0:ns[e])??"").trim()}catch{return""}}function cg(){try{return"production".trim()}catch{return""}}function lg(){try{return"production".trim()}catch{return""}}function ll(){const e=(lc("VITE_APP_SURFACE")||lg()||cg()).toLowerCase();if(e==="software"||e==="website")return e;if(e==="app"||e==="agency-app"||e==="agencyapp"||e==="mobile-app")return"agencyApp";if(e==="checkout"||e==="transactions"||e==="transaction")return"checkout";if(typeof window<"u"){const t=window.location.pathname;if(t==="/agency-app"||t.startsWith("/agency-app/")||t==="/app"||t.startsWith("/app/"))return"agencyApp"}return"unified"}function dg(){if(typeof window>"u")return"";const{pathname:e}=window.location;return e==="/agency-app"||e.startsWith("/agency-app/")?"/agency-app":e==="/app"||e.startsWith("/app/")?"/app":""}function ug(e){const t=e??(typeof window>"u"?"":window.location.pathname);return t==="/agency"||t.startsWith("/agency/")?"/agency":t==="/agency-app"||t.startsWith("/agency-app/")?"/agency-app":t==="/app"||t.startsWith("/app/")?"/app":""}function eT(e){const t=dg(),r=e.trim();if(/^(?:[a-z][a-z\d+.-]*:|\/\/)/i.test(r)||/[\\\u0000-\u001f\u007f]/.test(r))return t||"/";const n=r.startsWith("/")?r:`/${r}`;if(!t)return n;const i=n.split(/[?#]/,1)[0];return i===t||i.startsWith(`${t}/`)?n:n==="/"?t:`${t}${n}`}function tT(e,t){const r=ug(t),n=e.startsWith("/")?e:`/${e}`;return!r||n===r||n.startsWith(`${r}/`)?n:n==="/"?r:`${r}${n}`}function mg(){return lc("VITE_AGENCY_ID")||null}function pg(){return gu(lc("VITE_PORTAL_BASE_URL"))||null}function fg(){return typeof window>"u"?null:window.location.hostname||null}function gu(e){return e.replace(/\/+$/,"")}function gg(e,t){const r=gu(e),n=t.startsWith("/")?t:`/${t}`;return`${r}${n}`}const is={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1,VITE_AI_MODE:"server",VITE_API_BASE_URL:"/api",VITE_STATE_SYNC_ID:"default",VITE_STATE_SYNC_MODE:"supabase",VITE_VERCEL_DEPLOYMENT_ID:"dpl_F2uor5XT6WbCD6wQePTVkunvMZhq",VITE_VERCEL_ENV:"production",VITE_VERCEL_GIT_COMMIT_AUTHOR_LOGIN:"",VITE_VERCEL_GIT_COMMIT_AUTHOR_NAME:"barhoumfak24-hash",V
20ITE_VERCEL_GIT_COMMIT_MESSAGE:"Restore evidence-backed AI mapping completeness",VITE_VERCEL_GIT_COMMIT_REF:"codex/full-page-quote-flow",VITE_VERCEL_GIT_COMMIT_SHA:"0823d0042f218e01ecb18b834d364b43144d6484",VITE_VERCEL_GIT_PREVIOUS_SHA:"",VITE_VERCEL_GIT_PROVIDER:"github",VITE_VERCEL_GIT_PULL_REQUEST_ID:"",VITE_VERCEL_GIT_REPO_ID:"",VITE_VERCEL_GIT_REPO_OWNER:"barhoumfak24-hash",VITE_VERCEL_GIT_REPO_SLUG:"codex-quotex",VITE_VERCEL_OBSERVABILITY_CLIENT_CONFIG:'{"analytics":{"scriptSrc":"49897bef4da1095c/script.js","viewEndpoint":"49897bef4da1095c/view","eventEndpoint":"49897bef4da1095c/event","sessionEndpoint":"49897bef4da1095c/session"},"speedInsights":{"scriptSrc":"c1c2a871a5e4c1f5/script.js","endpoint":"c1c2a871a5e4c1f5/vitals"}}',VITE_VERCEL_PROJECT_ID:"prj_OAwowzIJBezI6pDFxpMTyLpQC8xD",VITE_VERCEL_PROJECT_PRODUCTION_URL:"quotexinsurance.com",VITE_VERCEL_TARGET_ENV:"production",VITE_VERCEL_URL:"quotexinsurance-2w14272cc-barhoumfak24-7816s-projects.vercel.app"};function Rt(){const e=Tn("VITE_API_BASE_URL");return e?hg(e):"/api"}function Tn(e){try{return bg(String((is==null?void 0:is[e])??"").trim())}catch{return""}}function yg(){return!0}function dc(){const e=Tn("VITE_STATE_SYNC_MODE").toLowerCase();return["off","local","disabled"].includes(e)?!1:e==="supabase"?!0:yg()}function hg(e){return e.replace(/\/+$/,"")}function bg(e){if(e.length<2)return e;const t=e[0],r=e[e.length-1];return t==='"'&&r==='"'||t==="'"&&r==="'"?e.slice(1,-1).trim():e}const Ig=["Confirm the agent is already signed in to the carrier portal in the active browser session.","Search by policy number first; if missing, search by insured name plus risk address.","Confirm at least two identifiers before opening or downloading anything.","Open policy/account documents and download declarations, ID cards, invoices, endorsements, notices, and carrier correspondence when available.","Attach downloaded files to the active Quotex record without modifying carrier data."],vg=["Confirm the agent is already signed in to the carrier portal in the active browser session.","Search by claim number first; if missing, search by policy number and date of loss.","Confirm insured, policy, and loss date before reading claim details.","Collect claim number, status, adjuster contact, paid/reserve amounts, loss description, and available claim documents.","Attach retrieved claim documents to the active Quotex record without changing claim status."],wg=["Confirm the agent is already signed in to the carrier portal in the active browser session.","Start the carrier's new quote or rating workflow for the requested line.","Enter only data already verified in Quotex or supplied by the client/agent.","Upload ACORDs, schedules, and supplemental documents only when the carrier workflow asks for them.","Save the quote indication/proposal and download the carrier-generated quote PDF when available."],_g=["Portal requests login, password, MFA, CAPTCHA, or security challenge.","The portal account, producer code, or agency appointment does not match the active Quotex agency.","The policy, insured, claim, or risk cannot be matched with at least two identifiers.","The carrier blocks the requested state, product, or risk class.","The next action would bind, issue, cancel, endorse, delete, submit payment, or change coverage.","Unexpected warning, legal attestation, producer agreement, or payment screen appears."],Ag=["Do not bind or issue coverage.","Do not cancel, non-renew, reinstate, or endorse a policy.","Do not submit payments or change billing/autopay settings.","Do not change carrier portal credentials, recovery methods, MFA, agency profile, or producer settings.","Do not save carrier credentials in Quotex.","Do not submit unverifiable, estimated, or fabricated answers."];function Ee(e){return{status:e.status??(e.agentPortalUrl?"configured":"needs_verification"),agentPortalUrl:e.agentPortalUrl,sourceUrls:e.sourceUrls??(e.agentPortalUrl?[e.agentPortalUrl]:[]),documents:e.documents??Ig,claims:e.claims??vg,quotes:e.quotes??wg,stopConditions:_g,forbiddenActions:Ag,notes:e.notes??"Runner may only proceed when the agency user already has an authenticated carrier session."}}function qe(e,t){return Ee({agentPortalUrl:e,status:"needs_verification",notes:t??"A public portal or carrier site is configured, but the exact appointed-agency workflow must be verified before runner use."})}const yu={carrier_chubb:Ee({agentPortalUrl:"https://www.chubb.com/us-en/agents-brokers.html"}),carrier_pure:Ee({agentPortalUrl:"https://broker.pureinsurance.com/",sourceUrls:["https://www.pureinsurance.com/brokers/broker-login","https://broker.pureinsurance.com/"]}),carrier_aig:Ee({agentPortalUrl:"https://www.aig.com/business/insurance/login"}),carrier_cincinnati_home:Ee({agentPortalUrl:"https://www.cinfin.com/cincinnati-insurance-agents"}),carrier_vault:qe("https://www.vault.insurance/","Carrier website is configured, but a public agent portal entry was not verified. Record the exact Vault producer portal URL before automation."),carrier_berkley_one:Ee({agentPortalUrl:"https://my.berkleyone.com/",sourceUrls:["https://www.berkleyone.com/","https://my.berkleyone.com/"]}),carrier_crestbrook:Ee({agentPortalUrl:"https://www.agentcenter.nationwide.com",notes:"Crestbrook/Nationwide Private Client is routed through Nationwide Agent Center when the agency is appointed."}),carrier_hagerty:Ee({agentPortalUrl:"https://www.hagertyagent.com/",sourceUrls:["https://www.hagertyagent.com/","https://insurance.hagertyagent.com/ISS/s/"]}),carrier_markel:Ee({agentPortalUrl:"https://magic.markelamerican.com/",sourceUrls:["https://www.markel.com/us/for-agents-and-brokers","https://magic.markelamerican.com/"]}),carrier_natgen_premier:Ee({agentPortalUrl:"https://natgenagency.com/",sourceUrls:["https://nationalgeneral.com/","https://natgenagency.com/"]}),carrier_travelers:Ee({agentPortalUrl:"https://www.travelers.com/agents/login"}),carrier_liberty:Ee({agentPortalUrl:"https://agents.libertymutual.com/"}),carrier_safeco:Ee({agentPortalUrl:"https://agents.libertymutual.com/",notes:"Safeco agent access is routed through Liberty Mutual/Safeco agent portal links for appointed agencies."}),carrier_hartford:Ee({agentPortalUrl:"https://account.thehartford.com/agent/login",sourceUrls:["https://www.thehartford.com/account-access","https://account.thehartford.com/agent/login"]}),carrier_nationwide:Ee({agentPortalUrl:"https://www.agentcenter.nationwide.com"}),carrier_progressive:Ee({agentPortalUrl:"https://www.foragentsonly.com/"}),carrier_allstate:Ee({agentPortalUrl:"https://agents.allstate.com"}),carrier_farmers:Ee({agentPortalUrl:"https://agents.farmers.com"}),carrier_statefarm:qe("https://b2b.statefarm.com","State Farm is generally a captive/proprietary channel. Runner can only proceed after an authorized agency session path is verified."),carrier_usa
20a:Ee({status:"unsupported",sourceUrls:["https://www.usaa.com/"],documents:[],claims:[],quotes:[],notes:"No independent-agent runner playbook is configured. Keep USAA manual unless a valid producer access path is supplied by the agency."}),carrier_autoowners:qe("https://www.auto-owners.com/"),carrier_erie:Ee({agentPortalUrl:"https://www.agentexchange.com/"}),carrier_mercury:qe("https://www.mercuryinsurance.com/"),carrier_amfam:qe("https://www.amfam.com/"),carrier_foremost:Ee({agentPortalUrl:"https://www.foremoststar.com/"}),carrier_stillwater:qe("https://www.stillwater.com/"),carrier_plymouth_rock:qe("https://www.plymouthrock.com/"),carrier_kemper:Ee({agentPortalUrl:"https://agents.kemper.com/"}),carrier_westfield:qe("https://www.westfieldinsurance.com/"),carrier_amtrust:qe("https://amtrustfinancial.com/"),carrier_auto_club_group:qe("https://www.aaa.com/insurance"),carrier_michigan_farm_bureau:qe("https://www.michfb.com/insurance"),carrier_frankenmuth:qe("https://www.fmins.com/agents"),carrier_hanover_citizens:qe("https://www.hanover.com/agents"),carrier_pioneer_state_mutual:qe("https://www.psmic.com"),carrier_hastings_mutual:qe("https://www.hastingsmutual.com"),carrier_fremont:qe("https://www.fmic.com"),carrier_michigan_insurance_company:qe("https://www.michiganinsurance.com"),carrier_secura:qe("https://www.secura.net/agents"),carrier_grange:qe("https://www.grangeinsurance.com/agents"),carrier_west_bend:qe("https://www.thesilverlining.com"),carrier_meemic:qe("https://www.meemic.com"),carrier_northstar_agent_hub:Ee({agentPortalUrl:"https://northstar-agent-hub.replit.app/",sourceUrls:["https://northstar-agent-hub.replit.app/"],notes:"Northstar is handled by Quotex Connect's blind semantic reader without a portal-specific selector map. The runner follows only safe same-origin read links, accepts exact identity matches with page evidence, never submits or changes carrier data, and stops for ambiguity, MFA, CAPTCHA, or an unsupported layout."}),carrier_insurance_agent_hub:Ee({agentPortalUrl:"https://insurance-agent-hub.replit.app/sign-in",sourceUrls:["https://insurance-agent-hub.replit.app/sign-in","https://insurance-agent-hub.replit.app/api/policies","https://insurance-agent-hub.replit.app/api/claims"],notes:"Quotex Connect 0.6.16 uses the authenticated Meridian session for verified carrier-book discovery, resilient exact policy and claim navigation, and real-file retrieval. It ignores carrier API-response tabs and restores its content bridge automatically after an extension update. Results remain fail-closed unless carrier identity, file type, size, SHA-256, tenant-scoped storage, and final attachment all verify. The current Meridian demo shows inert Download controls and exposes no file URL, so its metadata is reported as unavailable instead of being falsified as a document."})};function Cg(e){const t=yu[e.id];if(!t)return e;const r=e.quotingAutomation?(({credentialReference:a,...s})=>s)(e.quotingAutomation):{},n=r.agentPortalUrl??e.agentPortalUrl??t.agentPortalUrl,i=t.status==="unsupported"?r.status?{...r,status:"not_configured",agentPortalUrl:void 0}:void 0:{provider:r.provider??"AI carrier portal runner",agentPortalUrl:n,customerPortalUrl:r.customerPortalUrl,mfaMode:r.mfaMode??"staff_prompt",status:t.status==="configured"?r.status??"configured":"not_configured",lastTestedAt:r.lastTestedAt,notes:r.notes??"Uses the agent's existing signed-in carrier browser session only. Quotex never stores or types carrier usernames or passwords."};return{...e,agentPortalUrl:n,quotingAutomation:i,portalPlaybook:t}}function uc(e){if(!e)return{canAttempt:!1,label:"No carrier selected",detail:"The runner cannot start without a carrier record.",tone:"neutral"};const t=e.portalPlaybook??yu[e.id];return t?t.status==="unsupported"?{canAttempt:!1,label:"Manual only",detail:t.notes??"This carrier does not have a configured runner path.",tone:"warn"}:t.status==="needs_verification"?{canAttempt:!1,label:"Portal needs verification",detail:t.notes??"The public portal entry exists, but an appointed-agency login path must be verified before runner use.",tone:"warn"}
20:{canAttempt:!0,label:"Portal playbook ready",detail:"Runner may attempt the carrier workflow only with an existing signed-in portal session and must stop at login, MFA, bind, payment, or mismatch screens.",tone:"success"}:{canAttempt:!1,label:"No portal playbook",detail:"Add a carrier portal playbook before enabling an AI runner.",tone:"neutral"}}function di(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,24)||"agency"}function pt(e){return e.trim().toUpperCase().replace(/[^A-Z0-9]/g,"")}const io="qac1.",hu="quotex-agency-code",ao="qcs1.",bu="quotex-connection-secret";function Na(e,t){let r="";for(let n=0;n<e.length;n++)r+=String.fromCharCode(e.charCodeAt(n)^t.charCodeAt(n%t.length));return r}function Iu(e){return Array.from(e).map(t=>t.charCodeAt(0).toString(16).padStart(2,"0")).join("")}function vu(e){let t="";for(let r=0;r<e.length;r+=2)t+=String.fromCharCode(parseInt(e.slice(r,r+2),16));return t}function Sg(e){const t=pt(e);return`${io}${Iu(Na(t,hu))}`}function Tg(e){if(!(e!=null&&e.startsWith(io)))return null;try{const t=e.slice(io.length);return pt(Na(vu(t),hu))}catch{return null}}function kg(e){return pt(e).slice(-4)}function dl(e){return e?`**** ${e}`:"Encrypted"}function ui(e){const t=pt(e);return{agencyCodeEncrypted:Sg(t),agencyCodePreview:kg(t)}}function ua(e="qtx_site"){const t="ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz23456789";let r="";for(let n=0;n<32;n++)r+=t[Math.floor(Math.random()*t.length)];return`${e}_${r}`}function Rg(e){return`${ao}${Iu(Na(e,bu))}`}function wu(e){if(!(e!=null&&e.startsWith(ao)))return null;try{const t=e.slice(ao.length);return Na(vu(t),bu)}catch{return null}}function Eg(e){return e.slice(-6)}function _u(e){return{encrypted:Rg(e),preview:Eg(e)}}function Yn(e){const t=Tg(e.agencyCodeEncrypted);return t||pt(e.agencyCode??"")||null}function xg(e,t){const r=Yn(e);return!!r&&r===pt(t)}function Pg(e){const t=di(e).split("-").filter(Boolean),r=t.map(i=>i[0]).join("").toUpperCase(),n=t.join("").toUpperCase();return(r||n||"QTX").slice(0,5).padEnd(3,"X")}function Ng(){const e="ABCDEFGHJKLMNPQRSTUVWXYZ23456789";let t="";for(let r=0;r<4;r++)t+=e[Math.floor(Math.random()*e.length)];return t}function so(e,t=[]){const r=new Set(Array.from(t,pt)),n=Pg(e);for(let a=0;a<50;a++){const s=pt(`${n}${Ng()}`);if(!r.has(s))return s}let i=r.size+1;for(;r.has(pt(`${n}${i}`));)i++;return pt(`${n}${i}`)}function ul(e,t,r){const n=di(t),i=String(r).padStart(2,"0");return e==="manager"?`manager${i}-${n}`:e==="agent"?`agent${i}-${n}`:`${e}${i}-${n}`}function qg(e){switch(e){case"minimum":return{agent:2,manager:1,total:3};case"mid":return{agent:7,manager:3,total:10};case"ultra":return{agent:18,manager:7,total:25}}}const M=e=>e,R=(e=0)=>new Date(Date.now()-e*24*60*60*1e3).toISOString(),Og=ui("PCPC2026"),Dg=ui("LSHNW2026"),qa=[{id:M("agency_palmcoast"),name:"Palm Coast Private Client",logoUrl:"",brandColor:"#0d0c09",contactEmail:"[email protected]",phone:"+1 (555) 312-0099",address:"210 Ocean Blvd, Palm Beach, FL 33480",website:"palmcoastpc.example",websiteSlug:"palm-coast",websiteEnabled:!0,websiteHeadline:"Palm Coast private client insurance",websiteIntro:"Concierge insurance guidance for coastal homes, luxury vehicles, yachts, jewelry, and family portfolios across Florida, Georgia, and South Carolina.",portalBaseUrl:"https://app.quotexinsurance.com/palm-coast",customerPortalUrl:"https://app.quotexinsurance.com/palm-coast/contact",quoteStartUrl:"https://app.quotexinsurance.com/palm-coast/quote/new",carrierRunnerEnabled:!0,carrierRunnerStatus:"pending_setup",carrierRunnerMode:"ai_portal_runner",carrierRunnerAgencyCode:"PCPC-CARRIER-RUNNER",carrierRunnerProfileId:"PCPC-RUNNER-DEMO",carrierRunnerReceiverCode:"QUOTEX-PCPC",carrierRunnerCredentialVaultRef:"secret://carrier-runner/palmcoastpc/portal-access",carrierRunnerMfaMode:"staff_approval",carrierRunnerAuthorizedUserIds:["user_manager_pc"],carrierRunnerLinesOfBusiness:["personal","commercial"],carrierRunnerFeeds:["policy","renewal","endorsement","billing","claims","edocs"],carrierRunnerCarrierIds:["carrier_chubb","carrier_pure"],carrierRunnerReviewRule:"require_review_for_material_changes",carrierRunnerSchedule:"as_available",carrierRunnerWorkingPath:"runner://palmcoastpc/inbound",carrierRunnerArchivePath:"runner://palmcoastpc/archive",carrierRunnerFailureAlertEmails:["[email protected]"],carrierRunnerContactEmail:"[email protected]",carrierRunnerContactPhone:"+1 (555) 312-0099",carrierRunnerLastTestStatus:"not_tested",carrierRunnerNotes:"Configuration placeholder. Run only from an existing signed-in carrier browser session, then activate production sync after supervised testing.",serviceAreas:["FL","GA","SC"],...Og,tier:"mid",active:!0,allowedUsers:25,allowedProspectsPerMonth:1e3,allowedAiMessagesPerMonth:5e3,allowedCarriers:12,softwarePlanTermMonths:12,softwarePlanStartedAt:"2026-06-01T12:00:00.000Z",softwarePlanRenewsAt:"2027-06-01T12:00:00.000Z",createdAt:
20R(120)},{id:M("agency_lakeshore"),name:"Lakeshore High-Net-Worth Group",logoUrl:"",brandColor:"#3f3b30",contactEmail:"[email protected]",phone:"+1 (555) 882-1100",address:"88 N Michigan Ave, Chicago, IL 60601",website:"lakeshorehnw.example",websiteSlug:"lakeshore",websiteEnabled:!0,websiteHeadline:"Lakeshore coverage for complex families",websiteIntro:"High-net-worth insurance coordination for homes, vehicles, watercraft, collections, and umbrella liability across the Great Lakes region.",portalBaseUrl:"https://app.quotexinsurance.com/lakeshore",customerPortalUrl:"https://app.quotexinsurance.com/lakeshore/contact",quoteStartUrl:"https://app.quotexinsurance.com/lakeshore/quote/new",carrierRunnerEnabled:!1,carrierRunnerStatus:"not_configured",carrierRunnerMode:"ai_portal_runner",carrierRunnerMfaMode:"staff_approval",carrierRunnerAuthorizedUserIds:[],carrierRunnerLinesOfBusiness:["personal"],carrierRunnerFeeds:["policy","renewal","billing","edocs"],carrierRunnerCarrierIds:[],carrierRunnerReviewRule:"require_review_for_material_changes",carrierRunnerSchedule:"as_available",carrierRunnerFailureAlertEmails:[],carrierRunnerLastTestStatus:"not_tested",serviceAreas:["IL","WI","IN","MI"],...Dg,tier:"ultra",active:!0,allowedUsers:50,allowedProspectsPerMonth:99999,allowedAiMessagesPerMonth:99999,allowedCarriers:999,softwarePlanTermMonths:24,softwarePlanStartedAt:"2026-04-01T12:00:00.000Z",softwarePlanRenewsAt:"2028-04-01T12:00:00.000Z",createdAt:R(300)}],Lg=[{id:M("master_activity_palmcoast_created"),agencyId:"agency_palmcoast",agencyName:"Palm Coast Private Client",kind:"agency_created",title:"Agency created",description:"Palm Coast Private Client was added to the platform and issued an encrypted agency sign-in code.",actorName:"Quotex Founder",source:"master_portal",metadata:{codePreview:"PC***26",serviceAreas:"FL, GA, SC"},createdAt:R(120)},{id:M("master_activity_palmcoast_plan"),agencyId:"agency_palmcoast",agencyName:"Palm Coast Private Client",kind:"agency_plan_updated",title:"Software plan configured",description:"Plan set to 25 users with a 12-month term renewing June 1, 2027.",actorName:"Quotex Founder",source:"master_portal",metadata:{userSlots:25,termMonths:12,renewsAt:"2027-06-01"},createdAt:R(118)},{id:M("master_activity_palmcoast_website"),agencyId:"agency_palmcoast",agencyName:"Palm Coast Private Client",kind:"agency_website_connection_updated",title:"Website connection configured",description:"Website connection, portal URLs, API key preview, and webhook settings were prepared for the Palm Coast site.",actorName:"Quotex Founder",source:"master_portal",metadata:{website:"palmcoastpc.example",portalBase:"customer portal enabled"},createdAt:R(116)},{id:M("master_activity_palmcoast_carrier_runner"),agencyId:"agency_palmcoast",agencyName:"Palm Coast Private Client",kind:"agency_carrier_runner_updated",title:"Carrier download runner setup added",description:"Carrier portal runner credentials reference, MFA approver, enabled carriers, feeds, and alert contacts were recorded for policy, renewal, billing, claims, and eDoc updates.",actorName:"Quotex Founder",source:"master_portal",metadata:{status:"pending_setup",feeds:"policy, renewal, endorsement, billing, claims, edocs"},createdAt:R(115)},{id:M("master_activity_lakeshore_created"),agencyId:"agency_lakeshore",agencyName:"Lakeshore High-Net-Worth Group",kind:"agency_created",title:"Agency created",description:"Lakeshore High-Net-Worth Group was added with Great Lakes service areas and an encrypted agency sign-in code.",actorName:"Quotex Founder",source:"master_portal",metadata:{codePreview:"LS***26",serviceAreas:"IL, WI, IN, MI"},createdAt:R(300)},{id:M("master_activity_lakeshore_plan"),agencyId:"agency_lakeshore",agencyName:"Lakeshore High-Net-Worth Group",kind:"agency_plan_updated",title:"Software plan configured",description:"Plan set to 50 users with a 24-month term renewing April 1, 2028.",actorName:"Quotex Founder",source:"master_portal",metadata:{userSlots:50,termMonths:24,renewsAt:"2028-04-01"},createdAt:R(298)}],Mg=[{id:M("user_agent_pc"),tenantId:"agency_palmcoast",role:"agent",email:"[email protected]",username:"agent01-palmcoastpc",passwordUpdatedAt:R(200),name:"Olivia Marsh",phone:"+1 (555) 312-0011",lineOfBusiness:"personal",profileCompleted:!0,active:!0,createdAt:
20R(200)},{id:M("user_manager_pc"),tenantId:"agency_palmcoast",role:"manager",email:"[email protected]",username:"manager01-palmcoastpc",passwordUpdatedAt:R(200),name:"Daniel Reyes",profileCompleted:!0,active:!0,createdAt:R(200)},{id:M("user_csr_pc"),tenantId:"agency_palmcoast",role:"csr",email:"[email protected]",username:"csr01-palmcoastpc",passwordUpdatedAt:R(190),name:"Maya Chen",phone:"+1 (555) 312-0014",lineOfBusiness:"personal",profileCompleted:!0,active:!0,createdAt:R(190)},{id:M("user_agent_ls"),tenantId:"agency_lakeshore",role:"agent",email:"[email protected]",username:"agent01-lakeshorehnw",passwordUpdatedAt:R(180),name:"Henry Caldwell",lineOfBusiness:"personal",profileCompleted:!0,active:!0,createdAt:R(180)},{id:M("user_customer_demo"),tenantId:"agency_palmcoast",role:"customer",email:"[email protected]",name:"Alexandra Whitford",phone:"+1 (555) 902-0431",active:!0,createdAt:R(90)}],$g=[{id:M("customer_demo"),tenantId:"agency_palmcoast",userId:"user_customer_demo",name:"Alexandra Whitford",email:"[email protected]",phone:"+1 (555) 902-0431",mailingAddress:"44 Sea Breeze Ln, Palm Beach, FL 33480",garagingAddress:"44 Sea Breeze Ln, Palm Beach, FL 33480",additionalContacts:[{name:"Marcus Whitford",relation:"Spouse",phone:"+1 (555) 902-7711"}],marketingOptInEmail:!0,marketingOptInSms:!0,assignedAgentId:"user_agent_pc",assignedCsrId:"user_csr_pc",createdAt:R(90)}],Me=["AL","AK","AZ","AR","CA","CO","CT","DE","DC","FL","GA","HI","ID","IL","IN","IA","KS","KY","LA","ME","MD","MA","MI","MN","MS","MO","MT","NE","NV","NH","NJ","NM","NY","NC","ND","OH","OK","OR","PA","RI","SC","SD","TN","TX","UT","VT","VA","WA","WV","WI","WY"],ml=["FL","GA","SC","NC","NY","CT","NJ","MA","PA","CA","WA","IL","TX","CO","AZ"],as=["MI","OH","IN","IL","WI","MN","IA","PA"],Fg=[{id:M("carrier_chubb"),name:"Chubb Masterpiece",claimsUrl:"https://www.chubb.com/us-en/claims.html",billingPortalUrl:"https://www.chubb.com/us-en/agents-brokers.html",billingPhone:"+1 (800) 699-9916",billingEmail:"[email protected]",agentPortalUrl:"https://www.chubb.com/us-en/agents-brokers.html",quotingAutomation:{provider:"AI carrier portal runner",agentPortalUrl:"https://www.chubb.com/us-en/agents-brokers.html",mfaMode:"staff_prompt",status:"configured",notes:"Uses the agent's existing signed-in carrier browser session to retrieve quotes, documents, billing updates, renewals, and claim updates."},appetiteNotes:"Coastal homes $1.5M+, high-value autos, fine art, jewelry. Strong in FL/NY/CA.",tendencyNotes:"Premium pricing, generous limits, white-glove claims. Slower to bind.",underwritingRules:"Wind mitigation required for coastal FL. 4-point inspection on homes 30+ yrs. Appraisals <3y for scheduled items.",preferredAssetTypes:["coastal_home","luxury_vehicle","jewelry","yacht","umbrella_liability"],restrictedRisks:["short-term rentals","homes within 500 ft of coast without mitigation"],stateAvailability:Me,appetites:[{assetType:"coastal_home",minValue:15e5,riskLevels:["low","medium","high"],pricingTendency:1.15},{assetType:"luxury_vehicle",minValue:1e5,riskLevels:["low","medium"],pricingTendency:1.1},{assetType:"jewelry",minValue:25e3,riskLevels:["low","medium","high"],pricingTendency:1.1},{assetType:"yacht",minValue:5e5,riskLevels:["low","medium"],pricingTendency:1.12},{assetType:"umbrella_liability",minValue:1e6,riskLevels:["low","medium","high"],pricingTendency:1.05},{assetType:"full_portfolio",minValue:5e6,riskLevels:["low","medium"],pricingTendency:1.12}],status:"active",createdAt:R(400)},{id:M("carrier_pure"),name:"PURE Insurance",claimsUrl:"https://www.pureinsurance.com/claims",billingPortalUrl:"https://www.pureinsurance.com/member-login",billingPhone:"+1 (888) 813-7873",billingEmail:"[email protected]",agentPortalUrl:"https://www.pureinsurance.com/member-login",quotingAutomation:{provider:"AI carrier portal runner",agentPortalUrl:"https://www.pureinsurance.com/member-login",mfaMode:"staff_prompt",status:"configured",notes:"Uses the agent's existing signed-in carrier browser session to retrieve quotes, documents, billing updates, renewals, and claim updates."},appetiteNotes:"Membership-based reciprocal. HNW homes, yachts, umbrella.",tendencyNotes:"Aggressive on retention, white-glove claims, ~5–10% under Chubb.",underwritingRules:"Membership initiation fee. Yacht: captain credentials required for >50ft.",preferredAssetTypes:["coastal_home","yacht","umbrella_liability","luxury_vehicle"],stateAvailability:Me,appetites:[{assetType:"coastal_home",minValue:1e6,riskLevels:["low","medium"],pricingTendency:1.05},{assetType:"luxury_vehicle",minValue:75e3,riskLevels:["low","medium"],pricingTendency:1},{assetType:"yacht",minValue:25e4,riskLevels:["low","medium"],pricingTendency:1.02},{assetType:"umbrella_liability",minValue:1e6,riskLevels:["low","medium","high"],pricingTendency:.98},{assetType:"jewelry",minValue:25e3,riskLevels:["low","medium","high"],pricingTendency:1.05}
20],status:"active",createdAt:R(380)},{id:M("carrier_aig"),name:"AIG Private Client Select",claimsUrl:"https://www.aig.com/private-client-group/claims",agentPortalUrl:"https://www.aig.com/business/insurance/login",appetiteNotes:"Ultra-high-net-worth full portfolio, fine art, jewelry collections.",tendencyNotes:"Strong on collections and complex risks; pricing similar to Chubb.",underwritingRules:"Schedule items >$50k. Appraisals within 3 years.",preferredAssetTypes:["full_portfolio","jewelry","coastal_home","yacht"],stateAvailability:ml,appetites:[{assetType:"coastal_home",minValue:2e6,riskLevels:["low","medium","high"],pricingTendency:1.12},{assetType:"jewelry",minValue:5e4,riskLevels:["low","medium","high"],pricingTendency:1.08},{assetType:"yacht",minValue:1e6,riskLevels:["low","medium"],pricingTendency:1.1},{assetType:"full_portfolio",minValue:1e7,riskLevels:["low","medium"],pricingTendency:1.1},{assetType:"umbrella_liability",minValue:5e6,riskLevels:["low","medium","high"],pricingTendency:1.05}],status:"active",createdAt:R(370)},{id:M("carrier_cincinnati_home"),name:"Cincinnati Insurance (HOME)",claimsUrl:"https://www.cinfin.com/claims",appetiteNotes:"HNW home + auto package. Independent-agent channel only.",tendencyNotes:"Mid-market pricing, strong agent service.",preferredAssetTypes:["coastal_home","luxury_vehicle","jewelry","umbrella_liability"],stateAvailability:["AL","AZ","AR","CO","CT","DC","DE","FL","GA","ID","IL","IN","IA","KS","KY","MD","MI","MN","MO","MT","NE","NH","NJ","NM","NY","NC","OH","OK","OR","PA","SC","TN","TX","UT","VA","WA","WV","WI","WY"],appetites:[{assetType:"coastal_home",minValue:5e5,maxValue:5e6,riskLevels:["low","medium"],pricingTendency:.95},{assetType:"luxury_vehicle",minValue:5e4,maxValue:25e4,riskLevels:["low","medium"],pricingTendency:.92},{assetType:"umbrella_liability",minValue:1e6,maxValue:1e7,riskLevels:["low","medium","high"],pricingTendency:.95}],status:"active",createdAt:R(360)},{id:M("carrier_vault"),name:"Vault Insurance",claimsUrl:"https://www.vault.insurance/claims",appetiteNotes:"HNW home, yacht, umbrella. Strong in FL coastal corridor.",tendencyNotes:"Competitive HNW pricing — typically below Chubb/PURE.",preferredAssetTypes:["coastal_home","yacht","umbrella_liability","luxury_vehicle"],stateAvailability:["FL","GA","SC","NC","NY","NJ","CT","CA","TX","AZ"],appetites:[{assetType:"coastal_home",minValue:1e6,riskLevels:["low","medium"],pricingTendency:1},{assetType:"yacht",minValue:25e4,riskLevels:["low","medium"],pricingTendency:.98},{assetType:"umbrella_liability",minValue:1e6,riskLevels:["low","medium","high"],pricingTendency:.95},{assetType:"luxury_vehicle",minValue:75e3,riskLevels:["low","medium"],pricingTendency:.98}],status:"active",createdAt:R(350)},{id:M("carrier_berkley_one"),name:"Berkley One",claimsUrl:"https://www.berkleyone.com/claims",appetiteNotes:"HNW home, valuables, auto. W. R. Berkley's HNW arm.",tendencyNotes:"Mid-to-premium pricing.",preferredAssetTypes:["coastal_home","luxury_vehicle","jewelry","umbrella_liability"],stateAvailability:ml,appetites:[{assetType:"coastal_home",minValue:1e6,riskLevels:["low","medium"],pricingTendency:1.05},{assetType:"jewelry",minValue:25e3,riskLevels:["low","medium"],pricingTendency:1.05},{assetType:"luxury_vehicle",minValue:75e3,riskLevels:["low","medium"],pricingTendency:1.02},{assetType:"umbrella_liability",minValue:1e6,riskLevels:["low","medium","high"],pricingTendency:1}],status:"active",createdAt:R(340)},{id:M("carrier_crestbrook"),name:"Crestbrook (Nationwide Private Client)",claimsUrl:"https://www.nationwide.com/personal/insurance/private-client",appetiteNotes:"HNW home + auto + valuables, Nationwide-backed.",tendencyNotes:"Mid-market pricing, broad availability.",preferredAssetTypes:["coastal_home","luxury_vehicle","jewelry","umbrella_liability"],stateAvailability:Me,appetites:[{assetType:"coastal_home",minValue:75e4,maxValue:1e7,riskLevels:["low","medium"],pricingTendency:1},{assetType:"luxury_vehicle",minValue:5e4,riskLevels:["low","medium"],pricingTendency:.98},{assetType:"jewelry",minValue:25e3,riskLevels:["low","medium","high"],pricingTendency:1},{assetType:"umbrella_liability",minValue:1e6,riskLevels:["low","medium","high"],pricingTendency:.98}
20],status:"active",createdAt:R(330)},{id:M("carrier_hagerty"),name:"Hagerty",claimsUrl:"https://www.hagerty.com/services/claims",appetiteNotes:"Collector vehicles + vintage boats. Agreed-value specialists.",tendencyNotes:"Dramatically below standard auto market for properly stored collector cars.",preferredAssetTypes:["luxury_vehicle","yacht"],stateAvailability:Me,appetites:[{assetType:"luxury_vehicle",minValue:25e3,riskLevels:["low"],pricingTendency:.55},{assetType:"yacht",minValue:5e4,maxValue:1e6,riskLevels:["low","medium"],pricingTendency:.85}],status:"active",createdAt:R(320)},{id:M("carrier_markel"),name:"Markel Specialty",claimsUrl:"https://www.markel.com/claims",appetiteNotes:"Yachts, collector autos, scheduled jewelry, specialty fine art.",tendencyNotes:"Sharp pricing on specialty, slower on home/auto.",preferredAssetTypes:["yacht","luxury_vehicle","jewelry"],stateAvailability:Me,appetites:[{assetType:"yacht",minValue:1e5,riskLevels:["low","medium","high"],pricingTendency:.92},{assetType:"luxury_vehicle",minValue:75e3,riskLevels:["low","medium"],pricingTendency:.95},{assetType:"jewelry",minValue:5e4,riskLevels:["low","medium","high"],pricingTendency:.95}],status:"active",createdAt:R(310)},{id:M("carrier_natgen_premier"),name:"National General Premier",claimsUrl:"https://www.nationalgeneral.com/claims",appetiteNotes:"Allstate-owned HNW home + auto package.",tendencyNotes:"Mid-market pricing, broad availability.",preferredAssetTypes:["coastal_home","luxury_vehicle","umbrella_liability"],stateAvailability:Me,appetites:[{assetType:"coastal_home",minValue:5e5,maxValue:5e6,riskLevels:["low","medium"],pricingTendency:1},{assetType:"luxury_vehicle",minValue:5e4,riskLevels:["low","medium"],pricingTendency:1},{assetType:"umbrella_liability",minValue:1e6,riskLevels:["low","medium","high"],pricingTendency:1}],status:"active",createdAt:R(300)},{id:M("carrier_travelers"),name:"Travelers",claimsUrl:"https://www.travelers.com/claims",agentPortalUrl:"https://www.travelers.com/agents/login",appetiteNotes:"Home, auto, umbrella. Broad-market personal lines.",tendencyNotes:"At-market pricing across most lines.",preferredAssetTypes:["coastal_home","luxury_vehicle","umbrella_liability","jewelry"],stateAvailability:Me,appetites:[{assetType:"coastal_home",maxValue:25e5,riskLevels:["low","medium"],pricingTendency:1},{assetType:"luxury_vehicle",maxValue:15e4,riskLevels:["low","medium","high"],pricingTendency:1},{assetType:"umbrella_liability",minValue:1e6,maxValue:1e7,riskLevels:["low","medium","high"],pricingTendency:1},{assetType:"jewelry",maxValue:1e5,riskLevels:["low","medium"],pricingTendency:1.05}],status:"active",createdAt:R(295)},{id:M("carrier_liberty"),name:"Liberty Mutual",claimsUrl:"https://www.libertymutual.com/customer-support/claims",agentPortalUrl:"https://business.libertymutual.com",appetiteNotes:"Personal home + auto. Direct + agent channels.",tendencyNotes:"Slightly above market in NE/CA.",preferredAssetTypes:["coastal_home","luxury_vehicle","umbrella_liability"],stateAvailability:Me,appetites:[{assetType:"coastal_home",maxValue:2e6,riskLevels:["low","medium","high"],pricingTendency:1.05},{assetType:"luxury_vehicle",maxValue:125e3,riskLevels:["low","medium","high"],pricingTendency:1.05},{assetType:"umbrella_liability",maxValue:5e6,riskLevels:["low","medium","high"],pricingTendency:1.02}],status:"active",createdAt:R(290)},{id:M("carrier_safeco"),name:"Safeco (Liberty Mutual)",claimsUrl:"https://www.safeco.com/claims",appetiteNotes:"Liberty's independent-agent brand. Home, auto.",tendencyNotes:"Competitive on bundled home + auto.",preferredAssetTypes:["coastal_home","luxury_vehicle","umbrella_liability"],stateAvailability:Me,appetites:[{assetType:"coastal_home",maxValue:15e5,riskLevels:["low","medium"],pricingTendency:.95},{assetType:"luxury_vehicle",maxValue:1e5,riskLevels:["low","medium"],pricingTendency:.95},{assetType:"umbrella_liability",maxValue:5e6,riskLevels:["low","medium"],pricingTendency:.97}],status:"active",createdAt:R(285)},{id:M("carrier_hartford"),name:"The Hartford",claimsUrl:"https://www.thehartford.com/claims",appetiteNotes:"Home + auto, AARP affinity, umbrella.",tendencyNotes:"Slightly above market, strong claims service.",preferredAssetTypes:["coastal_home","luxury_vehicle","umbrella_liability"],stateAvailability:Me,appetites:[{assetType:"coastal_home",maxValue:15e5,riskLevels:["low","medium"],pricingTendency:1.05},{assetType:"luxury_vehicle",maxValue:1e5,riskLevels:["low","medium"],pricingTendency:1.03},{assetType:"umbrella_liability",maxValue:1e7,riskLevels:["low","medium","high"],pricingTendency:1.05}
20],status:"active",createdAt:R(280)},{id:M("carrier_nationwide"),name:"Nationwide",claimsUrl:"https://www.nationwide.com/claims",agentPortalUrl:"https://www.agentcenter.nationwide.com",appetiteNotes:"Personal lines (standard tier), jewelry rider, umbrella.",tendencyNotes:"Competitive across the standard market.",preferredAssetTypes:["coastal_home","luxury_vehicle","jewelry","umbrella_liability"],stateAvailability:Me,appetites:[{assetType:"coastal_home",maxValue:15e5,riskLevels:["low","medium","high"],pricingTendency:.95},{assetType:"luxury_vehicle",maxValue:1e5,riskLevels:["low","medium","high"],pricingTendency:.95},{assetType:"jewelry",maxValue:5e4,riskLevels:["low","medium"],pricingTendency:.98},{assetType:"umbrella_liability",maxValue:5e6,riskLevels:["low","medium","high"],pricingTendency:.95}],status:"active",createdAt:R(275)},{id:M("carrier_progressive"),name:"Progressive",claimsUrl:"https://www.progressive.com/claims",agentPortalUrl:"https://progressivecommercial.com/agent-login/",quotingAutomation:{provider:"AI carrier portal runner",agentPortalUrl:"https://progressivecommercial.com/agent-login/",status:"configured",mfaMode:"staff_prompt",notes:"Configuration placeholder for carrier-approved web rater automation. Production uses the agent's existing signed-in browser session and stops at login, MFA, bind, or payment screens."},appetiteNotes:"Auto-heavy. Home via partner programs.",tendencyNotes:"Aggressive on auto.",preferredAssetTypes:["luxury_vehicle"],stateAvailability:Me,appetites:[{assetType:"luxury_vehicle",maxValue:1e5,riskLevels:["low","medium","high"],pricingTendency:.9}],status:"active",createdAt:R(270)},{id:M("carrier_allstate"),name:"Allstate",claimsUrl:"https://www.allstate.com/claims",agentPortalUrl:"https://agents.allstate.com",quotingAutomation:{provider:"AI carrier portal runner",agentPortalUrl:"https://agents.allstate.com",status:"configured",mfaMode:"staff_prompt",notes:"Configuration placeholder for carrier-approved web rater automation. Production uses the agent's existing signed-in browser session and stops at login, MFA, bind, or payment screens."},appetiteNotes:"Home, auto, umbrella. Standard market.",tendencyNotes:"At-market pricing.",preferredAssetTypes:["coastal_home","luxury_vehicle","umbrella_liability"],stateAvailability:Me,appetites:[{assetType:"coastal_home",maxValue:15e5,riskLevels:["low","medium","high"],pricingTendency:1},{assetType:"luxury_vehicle",maxValue:1e5,riskLevels:["low","medium","high"],pricingTendency:1},{assetType:"umbrella_liability",maxValue:5e6,riskLevels:["low","medium","high"],pricingTendency:1}],status:"active",createdAt:R(265)},{id:M("carrier_farmers"),name:"Farmers",claimsUrl:"https://www.farmers.com/claims",agentPortalUrl:"https://agents.farmers.com",quotingAutomation:{provider:"AI carrier portal runner",agentPortalUrl:"https://agents.farmers.com",status:"configured",mfaMode:"staff_prompt",notes:"Configuration placeholder for carrier-approved web rater automation. Production uses the agent's existing signed-in browser session and stops at login, MFA, bind, or payment screens."},appetiteNotes:"Home, auto, umbrella, jewelry.",tendencyNotes:"Slightly above market on home.",preferredAssetTypes:["coastal_home","luxury_vehicle","jewelry","umbrella_liability"],stateAvailability:Me,appetites:[{assetType:"coastal_home",maxValue:15e5,riskLevels:["low","medium","high"],pricingTendency:1.05},{assetType:"luxury_vehicle",maxValue:1e5,riskLevels:["low","medium","high"],pricingTendency:1.02},{assetType:"jewelry",maxValue:5e4,riskLevels:["low","medium"],pricingTendency:1.05},{assetType:"umbrella_liability",maxValue:5e6,riskLevels:["low","medium","high"],pricingTendency:1}],status:"active",createdAt:R(260)},{id:M("carrier_statefarm"),name:"State Farm",claimsUrl:"https://www.statefarm.com/claims",agentPortalUrl:"https://b2b.statefarm.com",appetiteNotes:"Home, auto, jewelry rider. Captive agent channel.",tendencyNotes:"Competitive on bundled.",preferredAssetTypes:["coastal_home","luxury_vehicle","jewelry","umbrella_liability"],stateAvailability:Me,appetites:[{assetType:"coastal_home",maxValue:15e5,riskLevels:["low","medium","high"],pricingTendency:.95},{assetType:"luxury_vehicle",maxValue:1e5,riskLevels:["low","medium","high"],pricingTendency:.95},{assetType:"jewelry",maxValue:5e4,riskLevels:["low","medium"],pricingTendency:.95},{assetType:"umbrella_liability",maxValue:5e6,riskLevels:["low","medium","high"],pricingTendency:.95}
20],status:"active",createdAt:R(255)},{id:M("carrier_usaa"),name:"USAA",claimsUrl:"https://www.usaa.com/claims",appetiteNotes:"Military + family. Home, auto, valuables, umbrella.",tendencyNotes:"Below market for eligible members.",preferredAssetTypes:["coastal_home","luxury_vehicle","jewelry","umbrella_liability"],stateAvailability:Me,appetites:[{assetType:"coastal_home",maxValue:2e6,riskLevels:["low","medium","high"],pricingTendency:.85},{assetType:"luxury_vehicle",maxValue:15e4,riskLevels:["low","medium","high"],pricingTendency:.85},{assetType:"jewelry",maxValue:75e3,riskLevels:["low","medium"],pricingTendency:.88},{assetType:"umbrella_liability",maxValue:5e6,riskLevels:["low","medium","high"],pricingTendency:.88}],status:"active",createdAt:R(250)},{id:M("carrier_autoowners"),name:"Auto-Owners Insurance",claimsUrl:"https://www.auto-owners.com/claims",appetiteNotes:"Regional Midwest/SE. Home, auto, umbrella.",tendencyNotes:"Competitive in MI/OH/TN.",preferredAssetTypes:["coastal_home","luxury_vehicle","umbrella_liability"],stateAvailability:["AL","AZ","AR","CO","FL","GA","ID","IL","IN","IA","KS","KY","MI","MN","MO","NE","NC","ND","OH","PA","SC","SD","TN","UT","VA","WI"],appetites:[{assetType:"coastal_home",maxValue:15e5,riskLevels:["low","medium"],pricingTendency:.95},{assetType:"luxury_vehicle",maxValue:1e5,riskLevels:["low","medium"],pricingTendency:.93},{assetType:"umbrella_liability",maxValue:5e6,riskLevels:["low","medium","high"],pricingTendency:.95}],status:"active",createdAt:R(245)},{id:M("carrier_erie"),name:"Erie Insurance",claimsUrl:"https://www.erieinsurance.com/claims",appetiteNotes:"Regional NE/MidAtlantic. Home, auto, umbrella.",tendencyNotes:"Aggressive in PA/OH/VA.",preferredAssetTypes:["coastal_home","luxury_vehicle","umbrella_liability"],stateAvailability:["DC","IL","IN","KY","MD","NY","NC","OH","PA","TN","VA","WV","WI"],appetites:[{assetType:"coastal_home",maxValue:15e5,riskLevels:["low","medium"],pricingTendency:.9},{assetType:"luxury_vehicle",maxValue:1e5,riskLevels:["low","medium"],pricingTendency:.88},{assetType:"umbrella_liability",maxValue:5e6,riskLevels:["low","medium","high"],pricingTendency:.92}],status:"active",createdAt:R(240)},{id:M("carrier_mercury"),name:"Mercury Insurance",claimsUrl:"https://www.mercuryinsurance.com/claims",appetiteNotes:"CA-heavy. Auto + home.",tendencyNotes:"Below market in CA, NV, AZ.",preferredAssetTypes:["coastal_home","luxury_vehicle"],stateAvailability:["AZ","CA","FL","GA","IL","NV","NJ","NY","OK","TX","VA"],appetites:[{assetType:"coastal_home",maxValue:15e5,riskLevels:["low","medium"],pricingTendency:.88},{assetType:"luxury_vehicle",maxValue:1e5,riskLevels:["low","medium","high"],pricingTendency:.85}],status:"active",createdAt:R(235)},{id:M("carrier_amfam"),name:"American Family",claimsUrl:"https://www.amfam.com/claims",appetiteNotes:"Midwest. Home, auto, umbrella.",tendencyNotes:"Mid-market.",preferredAssetTypes:["coastal_home","luxury_vehicle","umbrella_liability"],stateAvailability:["AZ","CO","GA","ID","IL","IN","IA","KS","KY","MN","MO","NE","NV","ND","OH","OR","SD","TN","UT","WA","WI"],appetites:[{assetType:"coastal_home",maxValue:15e5,riskLevels:["low","medium","high"],pricingTendency:.95},{assetType:"luxury_vehicle",maxValue:1e5,riskLevels:["low","medium","high"],pricingTendency:.95},{assetType:"umbrella_liability",maxValue:5e6,riskLevels:["low","medium","high"],pricingTendency:.95}],status:"active",createdAt:R(230)},{id:M("carrier_foremost"),name:"Foremost (Farmers Specialty)",claimsUrl:"https://www.foremost.com/claims",appetiteNotes:"Specialty: manufactured home, motorcycle, off-road, vacant home.",tendencyNotes:"At-market for specialty risks others won't write.",preferredAssetTypes:["coastal_home","luxury_vehicle"],stateAvailability:Me,appetites:[{assetType:"coastal_home",maxValue:75e4,riskLevels:["medium","high"],pricingTendency:1.05},{assetType:"luxury_vehicle",maxValue:75e3,riskLevels:["medium","high"],pricingTendency:1}],status:"active",createdAt:R(225)},{id:M("carrier_stillwater"),name:"Stillwater Insurance",claimsUrl:"https://www.stillwater.com/claims",appetiteNotes:"Coastal FL specialty home + condo.",tendencyNotes:"Premium on FL coast, accepts wind exposure.",preferredAssetTypes:["coastal_home"],stateAvailability:["FL","GA","SC","NC","LA","MS","AL","TX"],appetites:[{assetType:"coastal_home",maxValue:2e6,riskLevels:["medium","high"],pricingTendency:1.1}
20],status:"active",createdAt:R(220)},{id:M("carrier_plymouth_rock"),name:"Plymouth Rock Assurance",claimsUrl:"https://www.plymouthrock.com/claims",appetiteNotes:"NE coastal home + auto (NJ, MA, NY, CT, NH, PA).",tendencyNotes:"Premium on coastal, competitive inland.",preferredAssetTypes:["coastal_home","luxury_vehicle"],stateAvailability:["CT","MA","NH","NJ","NY","PA"],appetites:[{assetType:"coastal_home",maxValue:15e5,riskLevels:["low","medium","high"],pricingTendency:1.05},{assetType:"luxury_vehicle",maxValue:1e5,riskLevels:["low","medium","high"],pricingTendency:1}],status:"active",createdAt:R(215)},{id:M("carrier_kemper"),name:"Kemper",claimsUrl:"https://www.kemper.com/claims",appetiteNotes:"Non-standard auto, specialty home.",tendencyNotes:"Above market on non-standard.",preferredAssetTypes:["luxury_vehicle"],stateAvailability:Me,appetites:[{assetType:"luxury_vehicle",maxValue:75e3,riskLevels:["medium","high"],pricingTendency:1.1}],status:"active",createdAt:R(210)},{id:M("carrier_westfield"),name:"Westfield Insurance",claimsUrl:"https://www.westfieldinsurance.com/claims",appetiteNotes:"Midwest standard market. Home, auto, umbrella.",tendencyNotes:"Competitive in OH/IN/PA.",preferredAssetTypes:["coastal_home","luxury_vehicle","umbrella_liability"],stateAvailability:["DC","DE","IL","IN","IA","KY","MD","MI","MN","NJ","NC","OH","PA","TN","VA","WV"],appetites:[{assetType:"coastal_home",maxValue:15e5,riskLevels:["low","medium"],pricingTendency:.95},{assetType:"luxury_vehicle",maxValue:1e5,riskLevels:["low","medium"],pricingTendency:.95},{assetType:"umbrella_liability",maxValue:5e6,riskLevels:["low","medium","high"],pricingTendency:.95}],status:"active",createdAt:R(205)},{id:M("carrier_amtrust"),name:"AmTrust Financial",claimsUrl:"https://www.amtrustfinancial.com/claims",appetiteNotes:"Niche personal + small commercial.",tendencyNotes:"At-market for specialty.",preferredAssetTypes:["coastal_home","umbrella_liability"],stateAvailability:Me,appetites:[{assetType:"coastal_home",maxValue:15e5,riskLevels:["low","medium"],pricingTendency:1},{assetType:"umbrella_liability",maxValue:5e6,riskLevels:["low","medium","high"],pricingTendency:1}],status:"active",createdAt:R(200)},{id:M("carrier_auto_club_group"),name:"Auto Club Group (AAA)",claimsUrl:"https://www.aaa.com/insurance/claims",agentPortalUrl:"https://www.aaa.com/insurance",appetiteNotes:"Michigan AAA / Auto Club market. Strong home + auto bundle, umbrella, and member-driven personal lines.",tendencyNotes:"Competitive on Michigan bundled households, especially preferred auto + homeowners accounts.",underwritingRules:"Membership eligibility and underwriting tier may affect placement. Strongest fit for bundled preferred-risk households.",preferredAssetTypes:["coastal_home","luxury_vehicle","umbrella_liability"],stateAvailability:["MI","IL","IN","IA","MN","NE","ND","WI","FL","GA","NC","SC","TN"],appetites:[{assetType:"coastal_home",maxValue:15e5,riskLevels:["low","medium"],pricingTendency:.94},{assetType:"luxury_vehicle",maxValue:125e3,riskLevels:["low","medium"],pricingTendency:.92},{assetType:"umbrella_liability",maxValue:5e6,riskLevels:["low","medium"],pricingTendency:.94}],status:"active",createdAt:R(198)},{id:M("carrier_michigan_farm_bureau"),name:"Michigan Farm Bureau Insurance",claimsUrl:"https://www.michfb.com/insurance/claims",agentPortalUrl:"https://www.michfb.com/insurance",appetiteNotes:"Michigan-focused carrier for home, auto, farm, small business, and umbrella risks.",tendencyNotes:"Very relevant for Michigan households and rural / lake-area property packages.",underwritingRules:"Best for Michigan-domiciled risks; farm, acreage, and rural-property details should be captured before submission.",preferredAssetTypes:["coastal_home","luxury_vehicle","umbrella_liability"],stateAvailability:["MI"],appetites:[{assetType:"coastal_home",maxValue:175e4,riskLevels:["low","medium","high"],pricingTendency:.95},{assetType:"luxury_vehicle",maxValue:125e3,riskLevels:["low","medium","high"],pricingTendency:.94},{assetType:"umbrella_liability",maxValue:5e6,riskLevels:["low","medium","high"],pricingTendency:.96}
20],status:"active",createdAt:R(196)},{id:M("carrier_frankenmuth"),name:"Frankenmuth Insurance",claimsUrl:"https://www.fmins.com/claims",agentPortalUrl:"https://www.fmins.com/agents",appetiteNotes:"Michigan-rooted independent-agent carrier. Home, auto, umbrella, business, and farm-adjacent risks.",tendencyNotes:"Strong regional fit for Michigan preferred personal lines and select small-commercial packages.",underwritingRules:"Strongest when home and auto are packaged. Review prior losses and property age carefully on older Michigan homes.",preferredAssetTypes:["coastal_home","luxury_vehicle","umbrella_liability"],stateAvailability:["MI","OH","IN","IL","WI","PA"],appetites:[{assetType:"coastal_home",maxValue:15e5,riskLevels:["low","medium"],pricingTendency:.93},{assetType:"luxury_vehicle",maxValue:125e3,riskLevels:["low","medium"],pricingTendency:.94},{assetType:"umbrella_liability",maxValue:5e6,riskLevels:["low","medium"],pricingTendency:.95}],status:"active",createdAt:R(194)},{id:M("carrier_hanover_citizens"),name:"Citizens / The Hanover",claimsUrl:"https://www.hanover.com/claims",agentPortalUrl:"https://www.hanover.com/agents",appetiteNotes:"Citizens is a familiar Michigan personal-lines brand within The Hanover family; home, auto, umbrella, and package accounts.",tendencyNotes:"Good Michigan agency market with broader Hanover appetite for preferred personal lines.",underwritingRules:"Package quality matters. Confirm roof age, prior losses, and auto household composition before submission.",preferredAssetTypes:["coastal_home","luxury_vehicle","umbrella_liability","jewelry"],stateAvailability:Me,appetites:[{assetType:"coastal_home",maxValue:2e6,riskLevels:["low","medium"],pricingTendency:.98},{assetType:"luxury_vehicle",maxValue:15e4,riskLevels:["low","medium"],pricingTendency:.98},{assetType:"jewelry",maxValue:75e3,riskLevels:["low","medium"],pricingTendency:1},{assetType:"umbrella_liability",maxValue:5e6,riskLevels:["low","medium"],pricingTendency:.98}],status:"active",createdAt:R(192)},{id:M("carrier_pioneer_state_mutual"),name:"Pioneer State Mutual",claimsUrl:"https://www.psmic.com/claims",agentPortalUrl:"https://www.psmic.com",appetiteNotes:"Michigan mutual carrier for home, auto, dwelling, and umbrella accounts.",tendencyNotes:"Useful Michigan regional market for standard personal lines and select property risks.",underwritingRules:"Best for Michigan risks with clean maintenance profile. Capture updates on roof, plumbing, electrical, and heating.",preferredAssetTypes:["coastal_home","luxury_vehicle","umbrella_liability"],stateAvailability:["MI"],appetites:[{assetType:"coastal_home",maxValue:125e4,riskLevels:["low","medium"],pricingTendency:.94},{assetType:"luxury_vehicle",maxValue:1e5,riskLevels:["low","medium"],pricingTendency:.95},{assetType:"umbrella_liability",maxValue:3e6,riskLevels:["low","medium"],pricingTendency:.96}],status:"active",createdAt:R(190)},{id:M("carrier_hastings_mutual"),name:"Hastings Mutual Insurance",claimsUrl:"https://www.hastingsmutual.com/claims",agentPortalUrl:"https://www.hastingsmutual.com",appetiteNotes:"Michigan-based regional mutual for personal lines, farm, and small-commercial risks.",tendencyNotes:"Strong Great Lakes fit, especially package accounts outside the highest-value HNW tier.",underwritingRules:"Capture acreage, outbuildings, animal exposure, prior losses, and property updates for farm-adjacent households.",preferredAssetTypes:["coastal_home","luxury_vehicle","umbrella_liability"],stateAvailability:as,appetites:[{assetType:"coastal_home",maxValue:15e5,riskLevels:["low","medium","high"],pricingTendency:.95},{assetType:"luxury_vehicle",maxValue:1e5,riskLevels:["low","medium","high"],pricingTendency:.96},{assetType:"umbrella_liability",maxValue:3e6,riskLevels:["low","medium"],pricingTendency:.97}],status:"active",createdAt:R(188)},{id:M("carrier_fremont"),name:"Fremont Insurance",claimsUrl:"https://www.fmic.com/claims",agentPortalUrl:"https://www.fmic.com",appetiteNotes:"Michigan regional carrier for home, auto, dwelling fire, and umbrella package accounts.",tendencyNotes:"Useful for Michigan standard-market households and lake-area property that does not fit HNW specialists.",underwritingRules:"Michigan-only placement. Collect property updates, occupancy, seasonal use, and distance to water when applicable.",preferredAssetTypes:["coastal_home","luxury_vehicle","umbrella_liability"],stateAvailability:["MI"],appetites:[{assetType:"coastal_home",maxValue:125e4,riskLevels:["low","medium"],pricingTendency:.96},{assetType:"luxury_vehicle",maxValue:1e5,riskLevels:["low","medium"],pricingTendency:.96},{assetType:"umbrella_liability",maxValue:3e6,riskLevels:["low","medium"],pricingTendency:.98}
20],status:"active",createdAt:R(186)},{id:M("carrier_michigan_insurance_company"),name:"Michigan Insurance Company",claimsUrl:"https://www.michiganinsurance.com/claims",agentPortalUrl:"https://www.michiganinsurance.com",appetiteNotes:"Michigan-focused market for personal auto, home, umbrella, and small-business package opportunities.",tendencyNotes:"Relevant Michigan agency option when national markets are too broad or less competitive.",underwritingRules:"Confirm Michigan garaging, driver history, and home updates. Best for standard-market package accounts.",preferredAssetTypes:["coastal_home","luxury_vehicle","umbrella_liability"],stateAvailability:["MI"],appetites:[{assetType:"coastal_home",maxValue:125e4,riskLevels:["low","medium"],pricingTendency:.97},{assetType:"luxury_vehicle",maxValue:1e5,riskLevels:["low","medium"],pricingTendency:.97},{assetType:"umbrella_liability",maxValue:3e6,riskLevels:["low","medium"],pricingTendency:.98}],status:"active",createdAt:R(184)},{id:M("carrier_secura"),name:"SECURA Insurance",claimsUrl:"https://www.secura.net/claims",agentPortalUrl:"https://www.secura.net/agents",appetiteNotes:"Great Lakes / Midwest carrier with personal, farm, and small-commercial package appetite.",tendencyNotes:"Good regional alternative for bundled Midwest households and main-street commercial accounts.",underwritingRules:"Strongest in bundled accounts. Capture property protection class, updates, liability exposures, and loss history.",preferredAssetTypes:["coastal_home","luxury_vehicle","umbrella_liability"],stateAvailability:as,appetites:[{assetType:"coastal_home",maxValue:15e5,riskLevels:["low","medium"],pricingTendency:.96},{assetType:"luxury_vehicle",maxValue:1e5,riskLevels:["low","medium"],pricingTendency:.96},{assetType:"umbrella_liability",maxValue:5e6,riskLevels:["low","medium"],pricingTendency:.97}],status:"active",createdAt:R(182)},{id:M("carrier_grange"),name:"Grange Insurance",claimsUrl:"https://www.grangeinsurance.com/claims",agentPortalUrl:"https://www.grangeinsurance.com/agents",appetiteNotes:"Independent-agent regional market for home, auto, umbrella, and small business.",tendencyNotes:"Competitive standard-market placement across Ohio / Michigan-adjacent agency books.",underwritingRules:"Package quality and prior losses drive fit. Collect roof age and household driver details early.",preferredAssetTypes:["coastal_home","luxury_vehicle","umbrella_liability"],stateAvailability:["MI","OH","IN","IL","KY","TN","GA","PA","VA","WI"],appetites:[{assetType:"coastal_home",maxValue:15e5,riskLevels:["low","medium"],pricingTendency:.96},{assetType:"luxury_vehicle",maxValue:1e5,riskLevels:["low","medium"],pricingTendency:.96},{assetType:"umbrella_liability",maxValue:5e6,riskLevels:["low","medium"],pricingTendency:.97}],status:"active",createdAt:R(180)},{id:M("carrier_west_bend"),name:"West Bend Insurance",claimsUrl:"https://www.thesilverlining.com/claims",agentPortalUrl:"https://www.thesilverlining.com",appetiteNotes:"Midwest regional carrier for home, auto, umbrella, and business accounts.",tendencyNotes:"Useful Great Lakes market for package business and agency-centered service.",underwritingRules:"Best for Midwest package accounts with clear property maintenance and manageable loss history.",preferredAssetTypes:["coastal_home","luxury_vehicle","umbrella_liability"],stateAvailability:as,appetites:[{assetType:"coastal_home",maxValue:15e5,riskLevels:["low","medium"],pricingTendency:.97},{assetType:"luxury_vehicle",maxValue:1e5,riskLevels:["low","medium"],pricingTendency:.97},{assetType:"umbrella_liability",maxValue:5e6,riskLevels:["low","medium"],pricingTendency:.98}],status:"active",createdAt:R(178)},{id:M("carrier_meemic"),name:"MEEMIC Insurance",claimsUrl:"https://www.meemic.com/claims",agentPortalUrl:"https://www.meemic.com",appetiteNotes:"Michigan educator-affinity market for home, auto, umbrella, and related personal lines.",tendencyNotes:"Good niche option when the insured qualifies through education-related eligibility.",underwritingRules:"Eligibility-driven. Confirm educator / school-employee affinity status before presenting as a primary option.",preferredAssetTypes:["coastal_home","luxury_vehicle","umbrella_liability"],stateAvailability:["MI"],appetites:[{assetType:"coastal_home",maxValue:125e4,riskLevels:["low","medium"],pricingTendency:.94},{assetType:"luxury_vehicle",maxValue:1e5,riskLevels:["low","medium"],pricingTendency:.94},{assetType:"umbrella_liability",maxValue:3e6,riskLevels:["low","medium"],pricingTendency:.95}
20],status:"active",createdAt:R(176)},{id:M("carrier_northstar_agent_hub"),name:"Northstar Insurance",claimsUrl:"https://northstar-agent-hub.replit.app/",agentPortalUrl:"https://northstar-agent-hub.replit.app/",appetiteNotes:"Northstar carrier portal available through Quotex Connect.",tendencyNotes:"Pricing and placement must come from verified carrier-returned data.",underwritingRules:"Use the blind read-only carrier runner. Never infer appetite or submit an action when the portal is ambiguous.",preferredAssetTypes:[],stateAvailability:[],appetites:[],status:"active",createdAt:R(175)},{id:M("carrier_insurance_agent_hub"),name:"Meridian Insurance",claimsUrl:"https://insurance-agent-hub.replit.app/sign-in",agentPortalUrl:"https://insurance-agent-hub.replit.app/sign-in",appetiteNotes:"Meridian Insurance carrier portal available through Quotex Connect.",tendencyNotes:"Pricing and placement are supplied by the connected carrier portal.",underwritingRules:"Use only after the agency links this carrier and completes its authorized portal setup.",preferredAssetTypes:[],stateAvailability:[],appetites:[],status:"active",createdAt:R(174)}],oo=Fg.map(Cg),Bg=["carrier_chubb","carrier_pure","carrier_aig","carrier_cincinnati_home","carrier_vault","carrier_berkley_one","carrier_crestbrook","carrier_hagerty","carrier_markel","carrier_natgen_premier","carrier_travelers","carrier_liberty","carrier_safeco","carrier_hartford","carrier_nationwide","carrier_progressive","carrier_allstate","carrier_farmers","carrier_statefarm","carrier_stillwater","carrier_plymouth_rock"],Ug=["carrier_chubb","carrier_pure","carrier_aig","carrier_cincinnati_home","carrier_berkley_one","carrier_crestbrook","carrier_hagerty","carrier_markel","carrier_natgen_premier","carrier_travelers","carrier_liberty","carrier_safeco","carrier_hartford","carrier_nationwide","carrier_progressive","carrier_allstate","carrier_farmers","carrier_statefarm","carrier_usaa","carrier_autoowners","carrier_erie","carrier_amfam","carrier_foremost","carrier_kemper","carrier_westfield","carrier_amtrust","carrier_auto_club_group","carrier_michigan_farm_bureau","carrier_frankenmuth","carrier_hanover_citizens","carrier_pioneer_state_mutual","carrier_hastings_mutual","carrier_fremont","carrier_michigan_insurance_company","carrier_secura","carrier_grange","carrier_west_bend","carrier_meemic"],Au=[...Bg.map(e=>({id:M(`link_pc_${e}`),tenantId:"agency_palmcoast",carrierId:e,active:!0,createdAt:R(120)})),...Ug.map(e=>({id:M(`link_ls_${e}`),tenantId:"agency_lakeshore",carrierId:e,active:!0,createdAt:R(300)}))];function $e(e,t,r,n,i){return{id:M(`ccontact_${e}_${t}`),tenantId:e,carrierId:t,name:r,position:"underwriter",email:n,notes:"Demo underwriter contact used for commercial application workflow testing.",createdAt:R(95),createdById:i}}const Cu=[$e("agency_palmcoast","carrier_chubb","Mara Ellison","[email protected]","user_manager_pc"),$e("agency_palmcoast","carrier_travelers","Grant Patel","[email protected]","user_manager_pc"),$e("agency_palmcoast","carrier_hartford","Nina Brooks","[email protected]","user_manager_pc"),$e("agency_palmcoast","carrier_nationwide","Caleb Stone","[email protected]","user_manager_pc"),$e("agency_palmcoast","carrier_progressive","Priya Shah","[email protected]","user_manager_pc"),$e("agency_palmcoast","carrier_farmers","Luis Moreno","[email protected]","user_manager_pc"),$e("agency_lakeshore","carrier_autoowners","Erin Voss","[email protected]","user_agent_ls"),$e("agency_lakeshore","carrier_auto_club_group","Drew Palmer","[email protected]","user_agent_ls"),$e("agency_lakeshore","carrier_michigan_farm_bureau","Kara Whitman","[email protected]","user_agent_ls"),$e("agency_lakeshore","carrier_frankenmuth","Seth Alden","[email protected]","user_agent_ls"),$e("agency_lakeshore","carrier_hanover_citizens","Brielle Carter","[email protected]","user_agent_ls"),$e("agency_lakeshore","carrier_pioneer_state_mutual","Mason Reid","[email protected]","user_agent_ls"),$e("agency_lakeshore","carrier_hastings_mutual","Anika Wells","[email protected]","user_agent_ls"),$e("agency_lakeshore","carrier_fremont","Tyler Nash","[email protected]","user_agent_ls"),$e("agency_lakeshore","carrier_michigan_insurance_company","Leah Foster","[email protected]","user_agent_ls"),$e("agency_lakeshore","carrier_secura","Noah Kim","[email protected]","user_agent_ls"),$e("agency_lakeshore","carrier_grange","Molly Harper","[email protected]","user_agent_ls"),$e("agency_lakeshore","carrier_west_bend","Eli Warner","[email protected]","user_agent_ls"),$e("agency_lakeshore","carrier_westfield","Avery Collins","[email protected]","user_agent_ls"),$e("agency_lakeshore","carrier_amtrust","Jon Bell","[email protected]","user_agent_ls")],Vg=[{id:M("download_chubb_renewal_premium"),tenantId:"agency_palmcoast",carrierId:"carrier_chubb",kind:"policy_update",status:"matched",source:"carrier_runner",sourceReference:"CHB-DL-2027-0330",fileName:"CHB-HM-558920-renewal-download.xml",receivedAt:R(-1),effectiveDate:R(305),customerId:"customer_demo",assetId:"asset_home",policyId:"policy_home",confidence:96,summary:"Chubb renewal download matched to policy CHB-HM-558920. Premium and renewal date changed.",changes:[{field:"finalPremium",label:"Final premium",currentValue:17950,incomingValue:18840,severity:"warn"},{field:"renewalDate",label:"Renewal date",currentValue:R(305),incomingValue:R(365),severity:"info"},{field:"billingReference",label:"Billing reference",currentValue:"Direct bill schedule Q3",incomingValue:"Renewal direct bill schedule 2027",severity:"info"}],documentPayload:{fileName:"CHB-HM-558920-renewal-dec-2027.pdf",fileType:"application/pdf",documentName:"Renewal declarations page",type:"declarations_page",visibility:"customer_visible",status:"approved"}},{id:M("download_pure_billing_plan"),tenantId:"agency_palmcoast",carrierId:"carrier_pure",kind:"billing_update",status:"matched",source:"carrier_runner",sourceReference:"PURE-BILL-7781",fileName:"PU
20RE-BILLING-441188.dat",receivedAt:R(-2),customerId:"customer_demo",assetId:"asset_vehicle",policyId:"policy_vehicle",confidence:91,summary:"PURE billing download matched to auto policy. Carrier changed autopay schedule from semi-annual to quarterly.",changes:[{field:"paymentFrequency",label:"Payment plan",currentValue:"semi_annual",incomingValue:"quarterly",severity:"info"},{field:"nextPaymentAmount",label:"Next payment amount",currentValue:3025,incomingValue:1512.5,severity:"info"}]},{id:M("download_chubb_edoc_unmatched"),tenantId:"agency_palmcoast",carrierId:"carrier_chubb",kind:"edoc",status:"needs_review",source:"email_parser",sourceReference:"CHB-EDOC-UNKNOWN-91",fileName:"Chubb-Endorsement-Unknown-Insured.pdf",receivedAt:R(-3),confidence:42,summary:"Carrier eDoc could not be confidently matched. The insured name resembles Alexandra Whitford, but the policy number is missing.",changes:[],documentPayload:{fileName:"Chubb-Endorsement-Unknown-Insured.pdf",fileType:"application/pdf",documentName:"Unmatched carrier endorsement",type:"endorsement_document",visibility:"employee_only",status:"pending"},notes:"Needs staff review before importing into a client file."}],jg=[{id:M("asset_home"),tenantId:"agency_palmcoast",customerId:"customer_demo",type:"coastal_home",label:"Sea Breeze Estate",estimatedValue:425e4,status:"insured",details:{address:"44 Sea Breeze Ln, Palm Beach, FL 33480",squareFootage:6800,roofAge:4,windMitigation:!0,floodZone:"AE",constructionType:"Concrete block"},createdAt:R(80)},{id:M("asset_vehicle"),tenantId:"agency_palmcoast",customerId:"customer_demo",type:"luxury_vehicle",label:"2023 Porsche 911 Turbo S",estimatedValue:245e3,status:"insured",details:{vin:"WP0AD2A99NS260123",year:2023,make:"Porsche",model:"911 Turbo S",garagingAddress:"44 Sea Breeze Ln, Palm Beach, FL 33480",usage:"Pleasure",drivers:[{name:"Alexandra Whitford",license:"FL"}]},createdAt:R(70)},{id:M("asset_yacht"),tenantId:"agency_palmcoast",customerId:"customer_demo",type:"yacht",label:"M/Y Liora — 72ft",estimatedValue:31e5,status:"pending",details:{length:72,year:2021,make:"Princess Yachts",model:"Y72",marinaLocation:"Palm Harbor Marina, Palm Beach, FL",navigationArea:"FL coastal + Bahamas",operator:"captain"},createdAt:R(20)}],Qg=[],Hg=[{id:M("policy_home"),tenantId:"agency_palmcoast",customerId:"customer_demo",assetId:"asset_home",carrierId:"carrier_chubb",policyNumber:"CHB-HM-558920",premiumEstimate:18400,finalPremium:17950,effectiveDate:R(60),renewalDate:R(-305),status:"bound",renewalStatus:"upcoming",agentId:"user_agent_pc",paymentFrequency:"quarterly",billingMethod:"direct_bill",billingPayer:"client",billingStatus:"current",billingAccountNumber:"CHB-BILL-558920",billingReference:"Direct bill schedule Q3",billingLastVerifiedAt:R(2),billingNotes:"Client pays Chubb directly. Agency tracks due dates and receipts only.",coverages:[{name:"Dwelling (Coverage A)",limit:24e5,deductible:5e3,description:"Replacement cost on the structure."},{name:"Other Structures (Coverage B)",limit:24e4,description:"Detached structures (guest house, garage)."},{name:"Personal Property (Coverage C)",limit:12e5,deductible:5e3,description:"Furniture, electronics, scheduled jewelry rides separately."},{name:"Loss of Use (Coverage D)",limit:48e4,description:"Additional living expense if uninhabitable."},{name:"Personal Liability (Coverage E)",limit:1e6},{name:"Medical Payments (Coverage F)",limit:1e4},{name:"Hurricane / Named-Storm Deductible",deductible:36e3,description:"1.5% of Coverage A."}],endorsements:[{name:"Water Backup Coverage",description:"$25,000 limit. Backup of sewers and drains.",addedAt:R(70)},{name:"Equipment Breakdown",description:"Generator, HVAC, smart-home systems.",addedAt:R(70)},{name:"Service Line Coverage",description:"Underground utility lines from street to home.",addedAt:R(40)}],exclusions:["Flood (separate NFIP / private flood policy required)","Earth movement / sinkhole (FL endorsement available)","Wear and tear, mechanical breakdown beyond Equipment Breakdown endorsement","Intentional acts"],additionalInsureds:[{name:"First Coastal Bank",relationship:"Mortgagee",holderType:"mortgagee",email:"[email protected]",phone:"+1 (555) 410-188
200",address:"220 Royal Palm Way, Palm Beach, FL 33480",deliveryPreference:"email",notes:"Receives declarations pages and renewal evidence."},{name:"Marcus Whitford",relationship:"Spouse — Additional Insured"}],participants:[{id:M("participant_home_marcus"),participantType:"household_member",name:"Marcus Whitford",relationship:"Household member",status:"active",notes:"Tracked for occupancy and underwriting context. Document delivery stays under policy contacts."}],premiumBreakdown:{base:16800,fees:350,taxes:800,total:17950},nextPaymentDueDate:R(-10),nextPaymentAmount:4487,createdAt:R(75)},{id:M("policy_vehicle"),tenantId:"agency_palmcoast",customerId:"customer_demo",assetId:"asset_vehicle",carrierId:"carrier_pure",policyNumber:"PURE-AU-441188",premiumEstimate:6200,finalPremium:6050,effectiveDate:R(50),renewalDate:R(-315),status:"bound",renewalStatus:"not_renewed",agentId:"user_agent_pc",paymentFrequency:"semi_annual",billingMethod:"carrier_autopay",billingPayer:"client",billingStatus:"current",billingAccountNumber:"PURE-BILL-441188",billingReference:"Autopay on file with carrier",billingLastVerifiedAt:R(5),billingNotes:"Carrier autopay confirmed. No agency collection action required.",coverages:[{name:"Bodily Injury Liability",limit:5e5,description:"Per person / per accident."},{name:"Property Damage Liability",limit:25e4},{name:"Comprehensive",deductible:1e3,description:"Theft, vandalism, glass, weather."},{name:"Collision",deductible:1e3},{name:"Uninsured / Underinsured Motorist",limit:5e5},{name:"Medical Payments",limit:25e3},{name:"Rental Reimbursement",limit:5e3,description:"$100/day, up to 50 days."},{name:"Roadside Assistance",description:"PURE concierge tow + lockout."}],endorsements:[{name:"Agreed Value",description:"Settles at agreed value, not ACV. Important for collector / luxury vehicles.",addedAt:R(60)},{name:"OEM Parts",description:"Repairs use original-equipment manufacturer parts.",addedAt:R(60)}],exclusions:["Racing or track-day use","Commercial use / ride-share","Wear and tear / mechanical breakdown"],additionalInsureds:[{name:"Porsche Financial Services",relationship:"Lienholder",holderType:"lienholder",email:"[email protected]",phone:"+1 (555) 801-9110",address:"PO Box 9110, Atlanta, GA 30301",deliveryPreference:"email",notes:"Send ID card and declarations page after renewal updates."}],participants:[{id:M("participant_vehicle_alexandra"),participantType:"driver",name:"Alexandra Whitford",relationship:"Primary driver",status:"primary",dateOfBirth:"1986-04-18",licenseState:"FL",licenseNumber:"W431-018-86-144-0",notes:"Primary operator for underwriting and rating."},{id:M("participant_vehicle_marcus"),participantType:"driver",name:"Marcus Whitford",relationship:"Household driver",status:"occasional",dateOfBirth:"1984-09-03",licenseState:"FL",notes:"Occasional household driver; not a policy holder or document recipient."}],premiumBreakdown:{base:5800,fees:100,taxes:150,total:6050},nextPaymentDueDate:R(-45),nextPaymentAmount:3025,createdAt:R(65)}],zg=[{id:M("quote_yacht"),tenantId:"agency_palmcoast",customerId:"customer_demo",assetType:"yacht",rawDescription:"Looking to insure a 72ft Princess yacht based in Palm Beach. Bahamas cruising. Captain operated.",parsedData:{length:72,year:2021,make:"Princess Yachts",model:"Y72",marinaLocation:"Palm Harbor Marina, Palm Beach, FL",navigationArea:"FL coastal + Bahamas",operator:"captain",estimatedValue:31e5},aiPremiumEstimateMin:28500,aiPremiumEstimateMax:34e3,aiRecommendedCarrierId:"carrier_pure",aiRecommendationReason:"PURE has strong appetite for $1M+ yachts with captain credentials. Coastal FL navigation aligns with appetite. Chubb is alternate.",missingDocuments:["Captain credentials","Most recent survey","Marina contract"],status:"submitted_to_agent",assignedAgentId:"user_agent_pc",createdAt:R(20)}],Gg=[{id:M("deposit_home"),tenantId:"agency_palmcoast",customerId:"customer_demo",policyId:"policy_home",amount:2500,currency:"USD",stripePaymentIntentId:"pi_seed_home",status:"paid",paidAt:R(74),createdAt:R(74)},{id:M("deposit_yacht"),tenantId:"agency_palmcoast",customerId:"customer_demo",quoteRequestId:"quote_yacht",amount:1e3,currency:"USD",stripePaymentIntentId:"pi_seed_yacht",status:"paid",paidAt:R(18),createdAt:
20R(18)}],Wg=[{id:M("payment_home_1"),tenantId:"agency_palmcoast",customerId:"customer_demo",policyId:"policy_home",amount:4487,currency:"USD",method:"card",status:"paid",paidAt:R(60),createdAt:R(60)},{id:M("payment_home_2"),tenantId:"agency_palmcoast",customerId:"customer_demo",policyId:"policy_home",amount:4487,currency:"USD",method:"card",status:"paid",paidAt:R(30),createdAt:R(30)},{id:M("payment_vehicle_1"),tenantId:"agency_palmcoast",customerId:"customer_demo",policyId:"policy_vehicle",amount:3025,currency:"USD",method:"ach",status:"paid",paidAt:R(50),createdAt:R(50)}],Kg=[{id:M("prospect_jenkins"),tenantId:"agency_palmcoast",name:"Robert Jenkins",email:"[email protected]",phone:"+1 (555) 220-7711",assetType:"coastal_home",estimatedValue:275e4,aiSummary:"Started a coastal home quote on a $2.75M FL property. Uploaded one photo, did not complete wind mitigation. Stopped at document upload step.",lastAction:"Abandoned at document upload step",lastActivityAt:R(3),recommendedFollowUp:"Personal email offering to schedule a 15-min call to walk through wind mitigation requirements; mention Chubb appetite.",marketingStatus:"active",assignedAgentId:"user_agent_pc",assignedCsrId:"user_csr_pc",status:"abandoned",createdAt:R(5)},{id:M("prospect_carmichael"),tenantId:"agency_palmcoast",name:"Eleanor Carmichael",email:"[email protected]",phone:"+1 (555) 880-9921",assetType:"jewelry",estimatedValue:48e4,aiSummary:"Inquired about scheduling jewelry collection. Has appraisals on hand. Did not complete intake.",lastAction:"Viewed jewelry intake form",lastActivityAt:R(12),recommendedFollowUp:"SMS: short reminder with link to resume. Offer concierge appraisal review.",marketingStatus:"active",status:"nurturing",createdAt:R(15)},{id:M("prospect_lin"),tenantId:"agency_lakeshore",name:"Henry Lin",email:"[email protected]",assetType:"full_portfolio",estimatedValue:12e6,aiSummary:"Inquired about full portfolio coverage. Owns 2 homes, art collection, and yacht.",lastAction:"Submitted contact form",lastActivityAt:R(2),recommendedFollowUp:"Manager call within 24h.",marketingStatus:"active",status:"new",createdAt:R(2)}],Su=[{number:"3",name:"Claims / Occurrence Notice",fileName:"ACORD-003.pdf",sourceFileName:"acord-3.pdf",line:"Claims / servicing",use:"Record notice of an occurrence, claim, or loss for servicing."},{number:"4",name:"Workers Compensation First Report",fileName:"ACORD-004.pdf",sourceFileName:"acord-4-pdf.pdf",line:"Claims / servicing",use:"Capture workers compensation claim or first-report information."},{number:"20",name:"Certificate / Evidence Form",fileName:"ACORD-020.pdf",sourceFileName:"acord-20.pdf",line:"Certificates / evidence",use:"Issue certificate or evidence information for proof of coverage."},{number:"21",name:"Certificate Form",fileName:"ACORD-021.pdf",sourceFileName:"ACORD-21-certificate.pdf",line:"Certificates / evidence",use:"Issue certificate evidence to a holder or interested party."},{number:"22",name:"Certificate Form",fileName:"ACORD-022.pdf",sourceFileName:"ACORD-22-form.pdf",line:"Certificates / evidence",use:"Issue proof of insurance to certificate holders."},{number:"23",name:"Certificate Form",fileName:"ACORD-023.pdf",sourceFileName:"ACORD-23-fillable.pdf",line:"Certificates / evidence",use:"Issue fillable certificate evidence for covered risks."},{number:"24",name:"Certificate of Property Insurance",fileName:"ACORD-024.pdf",sourceFileName:"ACORD-24-sample.pdf",line:"Certificates / evidence",use:"Provide property certificate evidence to holders or lenders."},{number:"25",name:"Certificate of Liability Insurance",fileName:"ACORD-025-Certificate-of-Liability.pdf",sourceFileName:"acord-coi-form.pdf",line:"Certificates / evidence",use:"Issue proof of liability coverage to certificate holders."},{number:"27",name:"Evidence of Property Insurance",fileName:"ACORD-027.pdf",sourceFileName:"acord-27-fillable.pdf",line:"Certificates / evidence",use:"Provide evidence of property insurance for a covered location or interest."},{number:"28",name:"Evidence of Commercial Property Insurance",fileName:"ACORD-028.pdf",sourceFileName:"acord-28-pdf-template.pdf",line:"Certificates / evidence",use:"Provide commercial property evidence to lenders, landlords, or holders."},{number:"30",name:"Certificate / Evidence Form",fileName:"ACORD-030.pdf",sourceFileName:"fillable-acord-30.pdf",line:"Certificates / evidence",use:"Issue fillable proof of insurance or evidence documentation."},{number:"31",name:"Certificate / Evidence Form",fileName:"ACORD-031.pdf",sourceFileName:"acord-31-pdf.pdf",line:"Certificates / evidence",use:"Issue evidence documentation for certificate or holder requests."},{number:"35",name:"Cancellation Request / Policy Release",fileName:"ACORD-035-Cancellation.pdf",sourceFileName:"acord-35-cancellation-form.pdf",line:"Claims / servicing",use:"Document a cancellation request, policy release, or cancellation authorization."},{number:"36",name:"Agent / Broker of Record Change",fileName:"ACORD-036-Agent-Broker-of-Record-Change.pdf",sourceFileName:"acord-36-Agent-broker-of-Record-Change.pdf",line:"Claims / servicing",use:"Record a broker of record or agent of record change request."},{number:"37",name:"Statement of No Loss",fileName:"ACORD-037-Statement-of-No-Loss.pdf",sourceFileName:"Statement-Of-No-Loss-Acord-37.pdf",line:"Claims / servicing",use:"Document an insured statement confirming no known losses."},{number:"45",name:"Additional Interest",fileName:"ACORD-045-Additional-Interest.pdf",sourceFileName:"Acord-45-Additional-Interest.pdf",line:"Claims / servicing",use:"Record additional insureds, mortgagees, lienholders, or other interests."},{number:"50",name:"Auto ID Card",fileName:"ACORD-050-Auto-ID-Card.pdf",sourceFileName:"acord-50-auto-id-card.pdf",line:"Certificates / evidence",use:"Provide auto identification card proof of coverage."},{number:"63",name:"Fraud Statement",fileName:"ACORD-063-Fraud-Statement.pdf",sourceFileName:"Acord-63-fraud-form.pdf",line:"Claims / servicing",use:"Attach fraud warning or acknowledgement language to a packet."}
20,{number:"70",name:"Personal Policy Change Request",fileName:"ACORD-070-Personal-Policy-Change.pdf",sourceFileName:"ACORD-70-Personal-Policy-Change-Request.pdf",line:"Personal lines",use:"Request a personal policy endorsement or change."},{number:"71",name:"Personal Auto Policy Change Request",fileName:"ACORD-071-Personal-Auto-Policy-Change.pdf",sourceFileName:"ACORD-71-Personal-Auto-Policy-Change.pdf",line:"Personal lines",use:"Request a private passenger auto endorsement or change."},{number:"75",name:"Insurance Binder",fileName:"ACORD-075.pdf",sourceFileName:"acord-75.pdf",line:"Certificates / evidence",use:"Create temporary evidence of coverage while policy documents are pending."},{number:"80",name:"Homeowner Application",fileName:"ACORD-080-Homeowner.pdf",sourceFileName:"ACORD-80-homeowner-application.pdf",line:"Personal lines",use:"Collect homeowner risk details for a personal residential submission."},{number:"83",name:"Personal Umbrella Application",fileName:"ACORD-083-Umbrella.pdf",sourceFileName:"umbrella-acord-83-form.pdf",line:"Personal lines",use:"Collect personal umbrella and excess liability underwriting information."},{number:"84",name:"Dwelling Fire Application",fileName:"ACORD-084-Dwelling-Fire.pdf",sourceFileName:"Acord-84-Dwelling-Fire-Insurance.pdf",line:"Personal lines",use:"Collect dwelling fire or rental dwelling underwriting information."},{number:"101",name:"Additional Remarks Schedule",fileName:"ACORD-101-Additional-Remarks.pdf",sourceFileName:"ACORD-101-Additional-Remarks.pdf",line:"Claims / servicing",use:"Attach overflow notes or supplemental remarks to another ACORD form."},{number:"125",name:"Commercial Insurance Application",fileName:"ACORD-125.pdf",sourceFileName:"ACORD-125.pdf",line:"Commercial lines",use:"Collect core applicant, operations, premises, and prior policy information."},{number:"126",name:"Commercial General Liability Section",fileName:"ACORD-126.pdf",sourceFileName:"acord-126-pdf.pdf",line:"Commercial lines",use:"Collect general liability exposures, classifications, and operations."},{number:"127",name:"Business Auto Section",fileName:"ACORD-127.pdf",sourceFileName:"acord-127-pdf.pdf",line:"Commercial lines",use:"Collect commercial auto, driver, vehicle, and coverage information."},{number:"128",name:"Garage and Dealers Section",fileName:"ACORD-128.pdf",sourceFileName:"ACORD-128-2015-12.pdf",line:"Commercial lines",use:"Collect garage, dealer, and related auto business exposures."},{number:"129",name:"Vehicle Schedule",fileName:"ACORD-129-Vehicle-Schedule.pdf",sourceFileName:"Acord-129-Vehicle-Schedule-form.pdf",line:"Commercial lines",use:"List vehicles attached to a commercial auto or fleet submission."},{number:"130 Scenario 1",name:"Workers Compensation Application Packet",fileName:"ACORD-130-Scenario-1-Documents.pdf",sourceFileName:"ACORD 130 Scenario 1 Documents.pdf",line:"Commercial lines",use:"Collect workers compensation application details for the first supplied ACORD 130 scenario packet."},{number:"130 Scenario 2",name:"Workers Compensation Application Packet",fileName:"ACORD-130-Scenario-2-Documents.pdf",sourceFileName:"ACORD 130 Scenario 2 Documents.pdf",line:"Commercial lines",use:"Collect workers compensation application details for the second supplied ACORD 130 scenario packet."},{number:"130 Scenario 3",name:"Workers Compensation Application Packet",fileName:"ACORD-130-Scenario-3-Documents.pdf",sourceFileName:"ACORD 130 Scenario 3 Documents.pdf",line:"Commercial lines",use:"Collect workers compensation application details for the third supplied ACORD 130 scenario packet."},{number:"131",name:"Umbrella / Excess Section",fileName:"ACORD-131-Umbrella.pdf",sourceFileName:"acord-131-umbrella-form.pdf",line:"Commercial lines",use:"Collect umbrella or excess liability underwriting information."},{number:"140",name:"Property Section",fileName:"ACORD-140-Property.pdf",sourceFileName:"Y24e6_vl8b-1wdzP-acord-140.pdf",line:"Commercial lines",use:"Collect commercial property building, premises, and coverage details."},{number:"140 Filled",name:"Property Section - Filled Sample",fileName:"ACORD-140-Filled.pdf",sourceFileName:"acord_140_filled.pdf",line:"Commercial lines",use:"Review a filled commercial property section sample."},{number:"152",name:"Commercial Inland Marine Section",fileName:"ACORD-152.pdf",sourceFileName:"acord-152-pdf.pdf",line:"Commercial lines",use:"Collect commercial inland marine coverage and schedule information."},{number:"611",name:"Supplemental ACORD Form",fileName:"ACORD-611.pdf",sourceFileName:"Acord-611.pdf",line:"Claims / servicing",use:"Attach supplemental ACORD information to a submission or service packet."},{number:"810",name:"Supplemental ACORD Form",fileName:"ACORD-810-Fillable.pdf",sourceFileName:"ACORD-810-Fillable.pdf",line:"Commercial lines",use:"Collect fillable supplemental underwriting information."},{number:"823",name:"Supplemental ACORD Form",fileName:"ACORD-823.pdf",sourceFileName:"Acord-823.pdf",line:"Commercial lines",use:"Collect supplemental commercial submission information."},{number:"1035",name:"Supplemental ACORD Form",fileName:"ACORD-1035.pdf",sourceFileName:"Acord-1035.pdf",line:"Commercial lines",use:"Collect supplemental commercial underwriting information."},{number:"Packet 1",name:"Downloaded ACORD Packet",fileName:"ACORD-Exercise-download-files.pdf",sourceFileName:"exercise-20-download-20-files.pdf",line:"Claims / servicing",use:"Reference the downloaded ACORD packet supplied for the production form library."},{number:"Packet 2",name:"Downloaded ACORD Packet Copy",fileName:"ACORD-Exercise-download-files-1.pdf",sourceFileName:"exercise-20-download-20-files (1).pdf",line:"Claims / servicing",use:"Reference the second downloaded ACORD packet supplied for the production form library."},{number:"Untitled 11",name:"Imported PDF Packet",fileName:"ACORD-Untitled-document-11.pdf",sourceFileName:"Untitled document (11).pdf",line:"Claims / servicing",use:"Reference the imported PDF packet supplied for the production form library."}];function Yg(e){if(e==="Personal lines")return"personal";if(e==="Commercial lines")return"commercial"}const Jg=[{agencyId:"agency_palmcoast",uploadedById:"user_manager_pc"},{agencyId:"agency_lakeshore",uploadedById:"user_agent_ls"}];function Zg(){return Jg.flatMap(({agencyId:e,uploadedById:t})=>Su.map((r,n)=>({id:M(`doc_acord_${e}_${r.number.replace(/[^a-z0-9]/gi,"_").toLowerCase()}`),tenantId:e,uploadedById:t,fileName:r.fileName,fileType:"application/pdf",documentName:`ACORD ${r.number} - ${r.name}`,type:"agency_template",visibility:"employee_only",status:"approved",storagePath:`/acord/${r.fileName}`,downloadUrl:`/acord/${r.fileName}`,agencyId:e,lineOfBusiness:Yg(r.line),required:!1,templateFields:{"ACORD form number":`ACORD ${r.number}`,"Form name":r.name,"Line / category":r.line,"Typical use":r.use,"Source file":r.sourceFileName,"Bundled PDF":"Yes - loaded from the agency-provided PDF set","Agency action":"Use this uploaded PDF as the agency template."},uploadedAt:R(18+n/100)})))}const Tu=[...Zg(),{id:M("doc_home_dec"),tenantId:"agency_palmcoast",uploadedById:"user_agent_pc",fileName:"Whitford-Chubb-Masterpiece-Declarations.pdf",fileType:"application/pdf",type:"declarations_page",visibility:"customer_visible",status:"approved",storagePath:"s3://placeholder/agency_palmcoast/policy_home/declarations.pdf",policyId:"policy_home",customerId:"customer_demo",assetId:"asset_home",needsRenewal
20Update:!0,renewalForRenewalId:"ren_home",customerEsignRequired:!0,customerEsignSentAt:R(9),customerEsignSignedAt:R(8.9),agentEsignRequired:!0,agentEsignAssignedToId:"user_agent_pc",agentEsignSignedAt:R(8.8),agentEsignSignatureName:"Olivia Marsh",agentEsignSignatureFont:"Great Vibes",agentEsignSignatureSize:42,uploadedAt:R(60)},{id:M("doc_home_booklet"),tenantId:"agency_palmcoast",uploadedById:"user_agent_pc",fileName:"Chubb-Masterpiece-Homeowners-Booklet.pdf",fileType:"application/pdf",type:"policy_booklet",visibility:"customer_visible",status:"approved",storagePath:"s3://placeholder/agency_palmcoast/policy_home/booklet.pdf",policyId:"policy_home",customerId:"customer_demo",assetId:"asset_home",uploadedAt:R(60)},{id:M("doc_home_endorse"),tenantId:"agency_palmcoast",uploadedById:"user_agent_pc",fileName:"Endorsement-ServiceLine-Added.pdf",fileType:"application/pdf",type:"endorsement_document",visibility:"customer_visible",status:"approved",storagePath:"s3://placeholder/agency_palmcoast/policy_home/service_line.pdf",policyId:"policy_home",customerId:"customer_demo",assetId:"asset_home",needsRenewalUpdate:!0,renewalForRenewalId:"ren_home",uploadedAt:R(40)},{id:M("doc_home_poi"),tenantId:"agency_palmcoast",uploadedById:"user_agent_pc",fileName:"PalmBeach-POI-Chubb.pdf",fileType:"application/pdf",type:"proof_of_insurance",visibility:"customer_visible",status:"approved",storagePath:"s3://placeholder/agency_palmcoast/policy_home/poi.pdf",policyId:"policy_home",customerId:"customer_demo",assetId:"asset_home",needsRenewalUpdate:!0,renewalForRenewalId:"ren_home",uploadedAt:R(60)},{id:M("doc_home_inspection"),tenantId:"agency_palmcoast",uploadedById:"user_agent_pc",fileName:"4-Point-Inspection-2024.pdf",fileType:"application/pdf",type:"inspection_report",visibility:"customer_visible",status:"approved",storagePath:"s3://placeholder/agency_palmcoast/policy_home/inspection.pdf",policyId:"policy_home",customerId:"customer_demo",assetId:"asset_home",uploadedAt:R(78)},{id:M("doc_home_appraisal"),tenantId:"agency_palmcoast",uploadedById:"user_customer_demo",fileName:"Whitford-Home-Appraisal-2024.pdf",fileType:"application/pdf",type:"appraisal",visibility:"customer_visible",status:"approved",storagePath:"s3://placeholder/agency_palmcoast/policy_home/appraisal.pdf",assetId:"asset_home",customerId:"customer_demo",uploadedAt:R(75)},{id:M("doc_auto_dec"),tenantId:"agency_palmcoast",uploadedById:"user_agent_pc",fileName:"Whitford-PURE-Auto-Declarations.pdf",fileType:"application/pdf",type:"declarations_page",visibility:"customer_visible",status:"approved",storagePath:"s3://placeholder/agency_palmcoast/policy_vehicle/declarations.pdf",policyId:"policy_vehicle",customerId:"customer_demo",assetId:"asset_vehicle",agentEsignRequired:!0,agentEsignAssignedToId:"user_agent_pc",agentEsignSignedAt:R(5.6),agentEsignSignatureName:"Olivia Marsh",agentEsignSignatureFont:"Great Vibes",agentEsignSignatureSize:42,uploadedAt:R(50)},{id:M("doc_auto_idcard"),tenantId:"agency_palmcoast",uploadedById:"user_agent_pc",fileName:"Insurance-ID-Card-2024.pdf",fileType:"application/pdf",type:"insurance_id_card",visibility:"customer_visible",status:"approved",storagePath:"s3://placeholder/agency_palmcoast/policy_vehicle/idcard.pdf",policyId:"policy_vehicle",customerId:"customer_demo",assetId:"asset_vehicle",uploadedAt:R(50)},{id:M("doc_auto_booklet"),tenantId:"agency_palmcoast",uploadedById:"user_agent_pc",fileName:"PURE-Auto-Coverage-Forms.pdf",fileType:"application/pdf",type:"policy_booklet",visibility:"customer_visible",status:"approved",storagePath:"s3://placeholder/agency_palmcoast/policy_vehicle/booklet.pdf",policyId:"policy_vehicle",customerId:"customer_demo",assetId:"asset_vehicle",uploadedAt:R(50)}],Xg=[{id:M("se_1"),tenantId:"agency_palmcoast",source:"system",message:"Policy bound with Chubb",visibility:"customer_visible",policyId:"policy_home",customerId:"customer_demo",createdAt:R(60)},{id:M("se_2"),tenantId:"agency_palmcoast",source:"agent",message:"Submitted yacht file to PURE for underwriting review.",visibility:"customer_visible",customerId:"customer_demo",createdAt:
20R(15)},{id:M("se_3"),tenantId:"agency_palmcoast",source:"ai",message:"AI detected abandoned quote for Robert Jenkins. Marketing follow-up queued.",visibility:"internal",prospectId:"prospect_jenkins",createdAt:R(3)},{id:M("se_4"),tenantId:"agency_palmcoast",source:"customer",message:"Deposit of $1,000 paid toward yacht quote.",visibility:"customer_visible",customerId:"customer_demo",depositId:"deposit_yacht",createdAt:R(18)}],ey=[{id:M("camp_winterhome"),tenantId:"agency_palmcoast",name:"Coastal Winter Retention",channel:"email",audienceFilter:{assetType:"coastal_home",renewalWithinDays:60},status:"active",createdAt:R(40)},{id:M("camp_abandon"),tenantId:"agency_palmcoast",name:"Abandoned Quote Rescue",channel:"email",audienceFilter:{status:"abandoned"},status:"active",createdAt:R(60)}],ty=[{id:M("msg_jenkins_1"),tenantId:"agency_palmcoast",campaignId:"camp_abandon",prospectId:"prospect_jenkins",channel:"email",subject:"Wrapping up your Palm Beach home quote",content:"Hi Robert — I noticed you started a quote on your Palm Beach home but didn't finish. Most coastal homes here qualify for meaningful wind mitigation credits — happy to walk you through it on a 15-minute call this week.",sentAt:R(2),deliveryStatus:"opened",createdAt:R(2)}],ry=[{id:M("ren_home"),tenantId:"agency_palmcoast",policyId:"policy_home",renewalDate:R(-305),status:"upcoming",agentId:"user_agent_pc",retentionActions:["Send retention email","Request updated wind mitigation"],createdAt:R(20)},{id:M("ren_vehicle_nonrenewal"),tenantId:"agency_palmcoast",policyId:"policy_vehicle",renewalDate:R(-315),status:"not_renewed",agentId:"user_agent_pc",retentionActions:["Confirm non-renewal notice was received","Collect updated garaging and driver details","Start rewrite with collector-auto markets"],nonRenewalReason:"Carrier issued a non-renewal because the garaging territory and vehicle usage changed outside current collector-auto appetite.",nonRenewalNoticeDate:R(8),nonRenewalEffectiveDate:R(-315),nonRenewalNoticeUrl:"https://www.pureinsurance.com/member-login",nonRenewalCarrierReference:"PURE-NR-441188-2027",replacementStatus:"marketing",replacementStrategy:"Rewrite with Chubb, AIG Private Client, and Cincinnati. Prioritize agreed value, OEM parts, broad rental reimbursement, and umbrella compatibility.",recommendedCarrierIds:["carrier_chubb","carrier_aig","carrier_cincinnati_home"],nonRenewalNotes:["Client should keep the Porsche off business-use exposure.","Ask for updated registration, current mileage, and garage address before submitting."],createdAt:R(8)}],ny=[],iy=[{id:M("note_yacht"),tenantId:"agency_palmcoast",authorId:"user_agent_pc",customerId:"customer_demo",body:"Customer prefers SMS for quick updates. Captain credentials due Friday.",visibility:"internal",createdAt:R(10)}],ay=[{id:M("comm_1"),tenantId:"agency_palmcoast",customerId:"customer_demo",channel:"email",direction:"outbound",subject:"Welcome to Palm Coast Private Client",body:"Thank you for choosing us. Your dedicated agent is Olivia Marsh.",createdAt:R(89),createdById:"user_agent_pc"}],U={estimatedValue:{key:"estimatedValue",label:"Estimated value (USD)",inputType:"currency",required:!0},address:{key:"address",label:"Primary address",inputType:"address",required:!0},garagingAddress:{key:"garagingAddress",label:"Garaging address",inputType:"address",required:!0},vin:{key:"vin",label:"VIN",inputType:"text",placeholder:"17-character VIN",helpText:"Triggers NHTSA decoder for year/make/model."},year:{key:"year",label:"Year",inputType:"number"},make:{key:"make",label:"Make",inputType:"text"},model:{key:"model",label:"Model",inputType:"text"},notes:{key:"notes",label:"Additional notes",inputType:"textarea"}};R(360),U.address,U.estimatedValue,R(360),U.address,U.estimatedValue,R(360),U.address,U.estimatedValue,R(360),U.address,U.estimatedValue,R(360),U.address,U.estimatedValue,R(360),U.address,U.estimatedValue,R(360),U.address,U.estimatedValue,R(360),U.address,R(360),U.vin,U.year,U.make,U.model,U.estimatedValue,U.garagingAddress,R(360),U.year,U.make,U.model,U.estimatedValue,U.garagingAddress,R(360),U.vin,U.year,U.make,U.model,U.estimatedValue,U.garagingAddress,R(360),U.year,U.make,U.model,U.estimatedValue,U.garagingAddress,R(360),U.year,U.make,U.model,U.estimatedValue,R(360),U.year,U.make,U.estimatedValue,R(360),U.year,U.make,U.model,U.estimatedValue,R(360),U.year,U.make,U.model,U.estimatedValue,R(360),U.year,U.make,U.model,U.estimatedValue,R(360),U.address,U.estimatedValue,R(360),U.year,U.make,U.model,U.estimatedValue,R(360),U.make,U.model,U.estimatedValue,R(360),U.estimatedValue,R(360),U.estimatedValue,R(360),U.estimatedValue,R(360),U.estimatedValue,R(360),U.estimatedValue,R(360),R(360),R(360),R(360),R(360),U.estimatedValue,U.notes;
20function sy(e){switch(e){case"coastal_home":return[U.address,U.estimatedValue,{key:"yearBuilt",label:"Year built",inputType:"number"},{key:"squareFootage",label:"Square footage",inputType:"number"},U.notes];case"luxury_vehicle":return[U.vin,U.year,U.make,U.model,U.estimatedValue,U.garagingAddress,U.notes];case"yacht":return[U.year,U.make,U.model,U.estimatedValue,{key:"length",label:"Length (ft)",inputType:"number"},U.notes];case"jewelry":return[U.estimatedValue,{key:"itemType",label:"Item or collection type",inputType:"text"},{key:"appraisalDate",label:"Appraisal date",inputType:"date"},U.notes];case"umbrella_liability":return[{key:"estimatedValue",label:"Limit requested (USD)",inputType:"currency",required:!0},U.notes];case"full_portfolio":return[U.estimatedValue,U.notes];case"other":default:return[U.estimatedValue,U.notes]}}function ku(e,t){return{...t,lineOfBusiness:e,active:!0,createdAt:R(360),questions:t.questions??sy(t.assetType)}}const V=e=>ku("personal",e),D=e=>ku("commercial",e),ma=[V({id:"cat_primary_home",label:"Primary Home",description:"Owner-occupied principal residence.",assetType:"coastal_home",icon:"Home",sortOrder:10}),V({id:"cat_high_value_home",label:"High-Value Home",description:"Luxury home with higher replacement cost, specialty finishes, and concierge claims needs.",assetType:"coastal_home",icon:"Home",sortOrder:11}),V({id:"cat_coastal_home",label:"Coastal / Beach Home",description:"Wind, hurricane, and flood-exposed waterfront residence.",assetType:"coastal_home",icon:"Home",sortOrder:12}),V({id:"cat_vacation_home",label:"Vacation / Secondary Home",description:"Seasonal or secondary residence away from the primary home.",assetType:"coastal_home",icon:"Home",sortOrder:13}),V({id:"cat_condo",label:"Condo / Co-op",description:"HO-6 walls-in coverage, loss assessment, and personal property.",assetType:"coastal_home",icon:"Home",sortOrder:14}),V({id:"cat_renters",label:"Renters / Tenant Contents",description:"Personal property and liability for tenants.",assetType:"coastal_home",icon:"Home",sortOrder:15}),V({id:"cat_rental_home",label:"Rental / Investment Property",description:"Tenant-occupied single-family, short-term rental, or small multi-unit property.",assetType:"coastal_home",icon:"Home",sortOrder:16}),V({id:"cat_dwelling_fire",label:"Dwelling Fire / DP Policy",description:"Non-owner-occupied residential dwelling, limited peril, or landlord policy.",assetType:"coastal_home",icon:"Home",sortOrder:17}),V({id:"cat_vacant_home",label:"Vacant Home",description:"Unoccupied residential property awaiting sale, renovation, or occupancy.",assetType:"coastal_home",icon:"Home",sortOrder:18}),V({id:"cat_mobile_home",label:"Mobile / Manufactured Home",description:"Manufactured housing, mobile homes, and modular residences.",assetType:"coastal_home",icon:"Home",sortOrder:19}),V({id:"cat_tiny_home",label:"Tiny Home",description:"Tiny homes on wheels or foundation with specialty valuation needs.",assetType:"coastal_home",icon:"Home",sortOrder:20}),V({id:"cat_farm",label:"Personal Farm / Ranch",description:"Residence, barns, livestock, private equipment, and hobby farming exposures.",assetType:"coastal_home",icon:"Home",sortOrder:21}),V({id:"cat_vacant_land",label:"Vacant Land",description:"Undeveloped personal land and premises liability.",assetType:"coastal_home",icon:"Home",sortOrder:22}),V({id:"cat_flood",label:"Flood",description:"NFIP or private flood coverage for residences and contents.",assetType:"coastal_home",icon:"Home",sortOrder:23}),V({id:"cat_earthquake",label:"Earthquake",description:"Earth movement coverage for dwelling, contents, and loss of use.",assetType:"coastal_home",icon:"Home",sortOrder:24}),V({id:"cat_wind_hail",label:"Wind / Hail",description:"Standalone wind, hurricane, and hail coverage where needed.",assetType:"coastal_home",icon:"Home",sortOrder:25}),V({id:"cat_equipment_breakdown_personal",label:"Home Equipment Breakdown",description:"Mechanical, electrical, and service-line related residential equipment exposures.",assetType:"coastal_home",icon:"ShieldCheck",sortOrder:26}),V({id:"cat_domestic_staff",label:"Domestic Staff / Workers",description:"Household employees, nannies, caretakers, and domestic workers comp needs.",assetType:"umbrella_liability",icon:"Umbrella",sortOrder:27}
20),V({id:"cat_standard_auto",label:"Standard Auto",description:"Personal-use cars, SUVs, and trucks.",assetType:"luxury_vehicle",icon:"Briefcase",sortOrder:40}),V({id:"cat_luxury_vehicle",label:"Luxury Vehicle",description:"Premium daily drivers, exotic vehicles, and high-value autos.",assetType:"luxury_vehicle",icon:"Briefcase",sortOrder:41}),V({id:"cat_classic_car",label:"Classic / Collector Car",description:"Agreed-value vintage, collector, show, and limited-use vehicles.",assetType:"luxury_vehicle",icon:"Briefcase",sortOrder:42}),V({id:"cat_motorcycle",label:"Motorcycle",description:"Cruisers, touring bikes, sport bikes, scooters, and mopeds.",assetType:"luxury_vehicle",icon:"Briefcase",sortOrder:43}),V({id:"cat_rv",label:"RV / Motorhome",description:"Motorhomes, fifth wheels, travel trailers, and camper vans.",assetType:"luxury_vehicle",icon:"Briefcase",sortOrder:44}),V({id:"cat_trailer",label:"Trailer / Camper",description:"Utility, boat, horse, toy hauler, and personal trailers.",assetType:"luxury_vehicle",icon:"Briefcase",sortOrder:45}),V({id:"cat_atv_utv",label:"ATV / UTV / Off-Road",description:"Side-by-sides, ATVs, dirt bikes, and off-road recreational vehicles.",assetType:"luxury_vehicle",icon:"Briefcase",sortOrder:46}),V({id:"cat_golf_cart",label:"Golf Cart / Low-Speed Vehicle",description:"Golf carts, neighborhood electric vehicles, and low-speed vehicles.",assetType:"luxury_vehicle",icon:"Briefcase",sortOrder:47}),V({id:"cat_snowmobile",label:"Snowmobile",description:"Personal snowmobiles and seasonal recreational vehicles.",assetType:"luxury_vehicle",icon:"Briefcase",sortOrder:48}),V({id:"cat_yacht",label:"Yacht",description:"Motor yachts, sailboats, and larger private vessels.",assetType:"yacht",icon:"Sailboat",sortOrder:60}),V({id:"cat_boat",label:"Boat",description:"Runabouts, sport fishers, pontoons, center consoles, and small craft.",assetType:"yacht",icon:"Sailboat",sortOrder:61}),V({id:"cat_pwc",label:"Jet Ski / Personal Watercraft",description:"Personal watercraft and stand-up watercraft.",assetType:"yacht",icon:"Sailboat",sortOrder:62}),V({id:"cat_dock",label:"Pier / Dock / Boat Lift",description:"Private docks, piers, seawalls, lifts, and marina attachments.",assetType:"yacht",icon:"Sailboat",sortOrder:63}),V({id:"cat_aircraft",label:"Private Aircraft",description:"Single-engine aircraft, twins, turboprops, helicopters, and light jets.",assetType:"other",icon:"Sparkles",sortOrder:80}),V({id:"cat_drone",label:"Drone / UAV",description:"Personal drones, hobby drones, and small UAVs.",assetType:"other",icon:"Sparkles",sortOrder:81}),V({id:"cat_jewelry",label:"Jewelry",description:"Rings, necklaces, bracelets, earrings, and scheduled jewelry.",assetType:"jewelry",icon:"Gem",sortOrder:100}),V({id:"cat_watches",label:"Watch Collection",description:"Luxury watches, scheduled timepieces, and watch collections.",assetType:"jewelry",icon:"Gem",sortOrder:101}),V({id:"cat_fine_art",label:"Fine Art",description:"Paintings, sculpture, photography, and private art collections.",assetType:"jewelry",icon:"Gem",sortOrder:102}),V({id:"cat_collectibles",label:"Collectibles / Memorabilia",description:"Sports memorabilia, coins, stamps, comics, cards, and rare collectibles.",assetType:"jewelry",icon:"Gem",sortOrder:103}),V({id:"cat_antiques",label:"Antiques",description:"Antique furniture, decor, heirlooms, and valuables.",assetType:"jewelry",icon:"Gem",sortOrder:104}),V({id:"cat_wine",label:"Wine Collection",description:"Wine cellars, private bottle collections, and offsite wine storage.",assetType:"jewelry",icon:"Gem",sortOrder:105}),V({id:"cat_furs",label:"Furs & Designer Goods",description:"Furs, handbags, couture, and luxury apparel.",assetType:"jewelry",icon:"Gem",sortOrder:106}),V({id:"cat_musical_instruments",label:"Musical Instruments",description:"Scheduled instruments, studio equipment, and performance gear.",assetType:"jewelry",icon:"Gem",sortOrder:107}),V({id:"cat_firearms",label:"Firearms / Sporting Equipment",description:"Firearms, safes, hunting gear, and sporting collections.",assetType:"jewelry",icon:"Gem",sortOrder:108}),V({id:"cat_cameras_electronics",label:"Cameras / Electronics",de
20scription:"Scheduled cameras, computers, AV equipment, and electronics.",assetType:"jewelry",icon:"Gem",sortOrder:109}),V({id:"cat_umbrella",label:"Personal Umbrella",description:"Personal liability coverage above home, auto, boat, and other underlying policies.",assetType:"umbrella_liability",icon:"Umbrella",sortOrder:130}),V({id:"cat_excess_liability",label:"Personal Excess Liability",description:"High-limit excess liability for high-net-worth households.",assetType:"umbrella_liability",icon:"Umbrella",sortOrder:131}),V({id:"cat_directors",label:"Personal D&O",description:"Personal director and officer exposure for private boards and nonprofits.",assetType:"umbrella_liability",icon:"Umbrella",sortOrder:132}),V({id:"cat_cyber",label:"Personal Cyber / Identity",description:"Personal cyber, fraud, identity restoration, and online privacy coverage.",assetType:"umbrella_liability",icon:"Umbrella",sortOrder:133}),V({id:"cat_travel",label:"Travel Insurance",description:"Trip cancellation, medical travel, evacuation, and travel interruption.",assetType:"other",icon:"Sparkles",sortOrder:150}),V({id:"cat_pet",label:"Pet Insurance",description:"Accident, illness, wellness, and specialty pet coverage.",assetType:"other",icon:"Sparkles",sortOrder:151}),V({id:"cat_wedding_event_personal",label:"Wedding / Private Event",description:"Private event cancellation, host liquor, and event liability.",assetType:"umbrella_liability",icon:"Umbrella",sortOrder:152}),V({id:"cat_life",label:"Life Insurance",description:"Term, whole life, universal life, survivorship, and estate-planning needs.",assetType:"other",icon:"ShieldCheck",sortOrder:170}),V({id:"cat_disability",label:"Disability Income",description:"Individual disability income and high-earner income protection.",assetType:"other",icon:"ShieldCheck",sortOrder:171}),V({id:"cat_long_term_care",label:"Long-Term Care",description:"Traditional and hybrid long-term-care coverage.",assetType:"other",icon:"ShieldCheck",sortOrder:172}),V({id:"cat_full",label:"Full Personal Portfolio",description:"Coordinated private-client review across all personal assets and liability.",assetType:"full_portfolio",icon:"Layers",sortOrder:190}),D({id:"cat_com_bop",label:"Business Owners Policy (BOP)",description:"Bundled property and liability for eligible small businesses.",assetType:"other",icon:"Briefcase",sortOrder:1e3}),D({id:"cat_com_cpp",label:"Commercial Package Policy",description:"Multi-line commercial package with property, liability, and endorsements.",assetType:"other",icon:"Briefcase",sortOrder:1001}),D({id:"cat_com_property",label:"Commercial Property",description:"Building, business personal property, tenant improvements, and income exposure.",assetType:"coastal_home",icon:"Home",sortOrder:1002}),D({id:"cat_com_general_liability",label:"General Liability",description:"Premises, operations, products, and completed operations liability.",assetType:"umbrella_liability",icon:"Umbrella",sortOrder:1003}),D({id:"cat_com_umbrella",label:"Commercial Umbrella / Excess",description:"Excess liability over GL, auto, employers liability, and other scheduled policies.",assetType:"umbrella_liability",icon:"Umbrella",sortOrder:1004}),D({id:"cat_com_workers_comp",label:"Workers' Compensation",description:"Employee injury, employers liability, and statutory workers comp coverage.",assetType:"other",icon:"ShieldCheck",sortOrder:1005}),D({id:"cat_com_auto",label:"Commercial Auto",description:"Business vehicles, symbols, liability, physical damage, and hired/non-owned auto.",assetType:"luxury_vehicle",icon:"Briefcase",sortOrder:1006}),D({id:"cat_com_fleet",label:"Fleet Auto",description:"Multi-vehicle business fleets, scheduled units, and fleet rating.",assetType:"luxury_vehicle",icon:"Briefcase",sortOrder:1007}),D({id:"cat_com_trucking",label:"Trucking / Transportation",description:"For-hire trucking, liability, physical damage, cargo, and filings.",assetType:"luxury_vehicle",icon:"Briefcase",sortOrder:1008}),D({id:"cat_com_motor_truck_cargo",label:"Motor Truck Cargo",description:"Cargo transported by truck, transit, terminal, and freight exposure.",assetType:"luxury_vehicle",icon:"Briefcase",sortOrder:1009}),D({id:"cat_com_garage",label:"Garage / Garagekeepers",description:"Auto service, repair, dealership, valet, and customers' autos in care.",assetType:"luxury_vehicle",icon:"Briefcase",sortOrder:1010}),D({id:"cat_com_hired_non_owned",label:"Hired & Non-Owned Auto",de
20scription:"Employee-owned, rented, and borrowed vehicles used for business.",assetType:"luxury_vehicle",icon:"Briefcase",sortOrder:1011}),D({id:"cat_com_professional_liability",label:"Professional Liability / E&O",description:"Errors and omissions for professional services.",assetType:"umbrella_liability",icon:"ShieldCheck",sortOrder:1030}),D({id:"cat_com_med_mal",label:"Medical Malpractice",description:"Professional liability for physicians, practices, clinics, and allied health.",assetType:"umbrella_liability",icon:"ShieldCheck",sortOrder:1031}),D({id:"cat_com_legal_mal",label:"Legal Malpractice",description:"Law firm and attorney professional liability.",assetType:"umbrella_liability",icon:"ShieldCheck",sortOrder:1032}),D({id:"cat_com_ae_eo",label:"Architects & Engineers E&O",description:"Design professional liability for architects, engineers, and surveyors.",assetType:"umbrella_liability",icon:"ShieldCheck",sortOrder:1033}),D({id:"cat_com_tech_eo",label:"Technology E&O",description:"Technology services, SaaS, managed services, and professional tech mistakes.",assetType:"umbrella_liability",icon:"ShieldCheck",sortOrder:1034}),D({id:"cat_com_insurance_agents_eo",label:"Insurance Agents E&O",description:"Agency and producer errors and omissions.",assetType:"umbrella_liability",icon:"ShieldCheck",sortOrder:1035}),D({id:"cat_com_accountants_eo",label:"Accountants E&O",description:"CPA, tax preparer, bookkeeping, and accounting professional liability.",assetType:"umbrella_liability",icon:"ShieldCheck",sortOrder:1036}),D({id:"cat_com_media_liability",label:"Media Liability",description:"Publishing, advertising injury, defamation, and content liability.",assetType:"umbrella_liability",icon:"ShieldCheck",sortOrder:1037}),D({id:"cat_com_cyber",label:"Cyber Liability",description:"Data breach, ransomware, privacy, funds transfer fraud, and incident response.",assetType:"umbrella_liability",icon:"Umbrella",sortOrder:1050}),D({id:"cat_com_epli",label:"Employment Practices Liability",description:"Wrongful termination, discrimination, harassment, and workplace claims.",assetType:"umbrella_liability",icon:"Umbrella",sortOrder:1051}),D({id:"cat_com_do",label:"Directors & Officers",description:"Private, nonprofit, and public company management liability.",assetType:"umbrella_liability",icon:"Umbrella",sortOrder:1052}),D({id:"cat_com_fiduciary",label:"Fiduciary Liability",description:"Employee benef
20it plan fiduciary claims.",assetType:"umbrella_liability",icon:"Umbrella",sortOrder:1053}),D({id:"cat_com_crime",label:"Crime / Fidelity",description:"Employee theft, forgery, funds transfer fraud, and social engineering.",assetType:"umbrella_liability",icon:"ShieldCheck",sortOrder:1054}),D({id:"cat_com_product_liability",label:"Product Liability",description:"Bodily injury or property damage from products sold, made, or distributed.",assetType:"umbrella_liability",icon:"Umbrella",sortOrder:1055}),D({id:"cat_com_product_recall",label:"Product Recall",description:"Recall expense, contamination, brand rehab, and withdrawal costs.",assetType:"other",icon:"ShieldCheck",sortOrder:1056}),D({id:"cat_com_liquor_liability",label:"Liquor Liability",description:"Businesses serving, selling, or furnishing alcohol.",assetType:"umbrella_liability",icon:"Umbrella",sortOrder:1057}),D({id:"cat_com_pollution",label:"Environmental / Pollution",description:"Contractors pollution, site pollution, storage tanks, and cleanup liability.",assetType:"umbrella_liability",icon:"Umbrella",sortOrder:1058}),D({id:"cat_com_kidnap_ransom",label:"Kidnap, Ransom & Extortion",description:"Executive protection, crisis response, and extortion exposures.",assetType:"umbrella_liability",icon:"ShieldCheck",sortOrder:1059}),D({id:"cat_com_inland_marine",label:"Inland Marine",description:"Mobile property, installation, bailee, contractor property, and floaters.",assetType:"jewelry",icon:"Layers",sortOrder:1080}),D({id:"cat_com_builders_risk",label:"Builders Risk",description:"Course-of-construction property, soft costs, and delay exposures.",assetType:"coastal_home",icon:"Home",sortOrder:1081}),D({id:"cat_com_contractors_equipment",label:"Contractors Equipment",description:"Scheduled equipment, tools, leased/rented items, and jobsite property.",assetType:"jewelry",icon:"Layers",sortOrder:1082}),D({id:"cat_com_installation_floater",label:"Installation Floater",description:"Materials and equipment awaiting or during installation.",assetType:"jewelry",icon:"Layers",sortOrder:1083}),D({id:"cat_com_equipment_breakdown",label:"Boiler & Machinery / Equipment Breakdown",description:"Mechanical and electrical breakdown of business equipment and systems.",assetType:"other",icon:"ShieldCheck",sortOrder:1084}),D({id:"cat_com_business_income",label:"Business Income / Extra Expense",description:"Income loss, extra expense, and restoration-period coverage.",assetType:"other",icon:"Layers",sortOrder:1085}),D({id:"cat_com_ocean_marine",label:"Ocean Marine",description:"Hull, P&I, marine liability, cargo, and marine operations.",assetType:"yacht",icon:"Sailboat",sortOrder:1086}),D({id:"cat_com_cargo",label:"Cargo / Stock Throughput",description:"Goods in transit, warehouse-to-warehouse, import/export, and stock throughput.",assetType:"jewelry",icon:"Layers",sortOrder:1087}),D({id:"cat_com_commercial_aviation",label:"Commercial Aviation",description:"Aircraft operators, charter, FBO, hangar, and aviation liability.",assetType:"other",icon:"Sparkles",sortOrder:1088}),D({id:"cat_com_drone",label:"Commercial Drone / UAV",description:"Drone operators, aerial imaging, inspection, mapping, and Part 107 exposures.",assetType:"other",icon:"Sparkles",sortOrder:1089}),D({id:"cat_com_surety",label:"Surety Bonds",description:"Contract, bid, performance, payment, license, permit, and court bonds.",assetType:"other",icon:"ShieldCheck",sortOrder:1110}),D({id:"cat_com_fidelity_bonds",label:"Fidelity Bonds",description:"Employee dishonesty, ERISA bonds, and third-party fidelity.",assetType:"other",icon:"ShieldCheck",sortOrder:1111}),D({id:"cat_com_trade_credit",label:"Trade Credit",description:"Accounts receivable protection, buyer insolvency, and payment default.",assetType:"other",icon:"ShieldCheck",sortOrder:1112}),D({id:"cat_com_reps_warranties",label:"Representations & Warranties",description:"M&A transaction insurance for purchase agreement breaches.",assetType:"other",icon:"ShieldCheck",sortOrder:1113}),D({id:"cat_com_parametric",label:"Parametric Weather / Catastrophe",description:"Trigger-based catastrophe, weather, wind, flood, and climate risk transfer.",assetType:"other",icon:"Sparkles",sortOrder:1114}),D({id:"cat_com_restaurant",label:"Restaurant / Bar",description:"Restaurants, bars, food service, liquor, property, GL, and workers comp.",assetType:"other",icon:"Briefcase",sortOrder:1140}
20),D({id:"cat_com_hotel_motel",label:"Hotel / Motel / Hospitality",description:"Lodging, hospitality property, GL, crime, cyber, and employment exposures.",assetType:"coastal_home",icon:"Home",sortOrder:1141}),D({id:"cat_com_retail",label:"Retail Store",description:"Storefront retail, inventory, premises, products, and business income.",assetType:"other",icon:"Briefcase",sortOrder:1142}),D({id:"cat_com_wholesale",label:"Wholesale / Distributor",description:"Wholesale distribution, warehousing, product liability, and transit exposures.",assetType:"other",icon:"Briefcase",sortOrder:1143}),D({id:"cat_com_manufacturing",label:"Manufacturing",description:"Manufacturing property, products, equipment, BI, and casualty exposure.",assetType:"other",icon:"Briefcase",sortOrder:1144}),D({id:"cat_com_contractor",label:"Contractor / Artisan Trade",description:"General contractors, subcontractors, jobsite liability, tools, and auto.",assetType:"other",icon:"Briefcase",sortOrder:1145}),D({id:"cat_com_hvac_plumbing_electrical",label:"HVAC / Plumbing / Electrical",description:"Trade contractors with service, installation, tools, auto, and completed operations.",assetType:"other",icon:"Briefcase",sortOrder:1146}),D({id:"cat_com_landscaping",label:"Landscaping / Lawn Care",description:"Landscape contractors, snow removal, equipment, auto, and herbicide exposure.",assetType:"other",icon:"Briefcase",sortOrder:1147}),D({id:"cat_com_real_estate",label:"Real Estate / Lessor's Risk",description:"Office, retail, mixed-use, industrial, and lessor's risk property schedules.",assetType:"coastal_home",icon:"Home",sortOrder:1148}),D({id:"cat_com_habitational",label:"Habitational / Multi-Family",description:"Apartments, condos, HOAs, student housing, senior housing, and condos for rent.",assetType:"coastal_home",icon:"Home",sortOrder:1149}),D({id:"cat_com_hoa",label:"HOA / Condo Association",description:"Association property, GL, D&O, crime, and community exposures.",assetType:"coastal_home",icon:"Home",sortOrder:1150}),D({id:"cat_com_office",label:"Office / Professional Services",description:"Office risks, tenant improvements, BOP/CPP, E&O, cyber, and workers comp.",assetType:"other",icon:"Briefcase",sortOrder:1151}),D({id:"cat_com_technology",label:"Technology Company / SaaS",description:"SaaS, software, MSP, IT consulting, cyber, technology E&O, and D&O.",assetType:"other",icon:"Briefcase",sortOrder:1152}),D({id:"cat_com_financial_institution",label:"Financial Institution",description:"Banks, lenders, investment advisers, funds, crime, cyber, D&O, and E&O.",assetType:"other",icon:"ShieldCheck",sortOrder:1153}),D({id:"cat_com_nonprofit",label:"Nonprofit Organization",description:"Nonprofit GL, property, D&O, EPLI, volunteers, events, and abuse/molestation.",assetType:"other",icon:"ShieldCheck",sortOrder:1154}),D({id:"cat_com_religious",label:"Church / Religious Organization",description:"Religious institutions, property, liability, vehicles, volunteers, and events.",assetType:"other",icon:"ShieldCheck",sortOrder:1155}),D({id:"cat_com_school_daycare",label:"School / Daycare",description:"Schools, childcare, abuse/molestation, vans, employees, and campus property.",assetType:"other",icon:"ShieldCheck",sortOrder:1156}),D({id:"cat_com_healthcare",label:"Healthcare / Clinic",description:"Clinics, allied health, professional liability, GL, property, cyber, and workers comp.",assetType:"other",icon:"ShieldCheck",sortOrder:1157}),D({id:"cat_com_home_health",label:"Home Health / Senior Care",description:"Home care, assisted living, professional liability, auto, abuse, and employee exposures.",assetType:"other",icon:"ShieldCheck",sortOrder:1158}),D({id:"cat_com_farm_ag",label:"Commercial Farm / Agribusiness",description:"Farms, ranches, crop, livestock, equipment, processing, and agritourism.",assetType:"coastal_home",icon:"Home",sortOrder:1159}),D({id:"cat_com_cannabis",label:"Cannabis / Hemp",description:"Cultivation, dispensary, processing, product liability, crop, and cash exposures.",assetType:"other",icon:"Briefcase",sortOrder:1160}
20),D({id:"cat_com_beauty_salon",label:"Beauty / Salon / Spa",description:"Salons, spas, med spas, professional liability, products, and premises exposures.",assetType:"other",icon:"Briefcase",sortOrder:1161}),D({id:"cat_com_event",label:"Commercial Event / Entertainment",description:"Concerts, festivals, productions, special events, cancellation, and liability.",assetType:"umbrella_liability",icon:"Sparkles",sortOrder:1162}),D({id:"cat_com_sports_fitness",label:"Sports / Fitness / Recreation",description:"Gyms, studios, clubs, leagues, recreation venues, and participant liability.",assetType:"umbrella_liability",icon:"Sparkles",sortOrder:1163}),D({id:"cat_com_group_benefits",label:"Group Benefits",description:"Employer medical, dental, vision, life, disability, and ancillary benefits.",assetType:"other",icon:"ShieldCheck",sortOrder:1180}),D({id:"cat_com_key_person",label:"Key Person / Business Life",description:"Business-owned life and disability for key employees, partners, and buy-sell funding.",assetType:"other",icon:"ShieldCheck",sortOrder:1181}),V({id:"cat_personal_articles",label:"Personal Articles / Inland Marine",description:"Scheduled valuables, collectibles, cameras, musical instruments, and portable property.",assetType:"jewelry",icon:"Gem",sortOrder:260}),V({id:"cat_personal_ebike",label:"Bicycle / E-Bike",description:"Traditional bikes, e-bikes, theft, liability, accessories, and travel exposure.",assetType:"other",icon:"Bike",sortOrder:261}),V({id:"cat_personal_escooter",label:"E-Scooter / Personal Mobility",description:"Scooters, mobility devices, liability, theft, and personal transportation exposure.",assetType:"other",icon:"Bike",sortOrder:262}),V({id:"cat_personal_solar",label:"Residential Solar / Battery",description:"Solar panels, battery storage, roof-mounted equipment, and energy system coverage.",assetType:"coastal_home",icon:"Home",sortOrder:263}),V({id:"cat_personal_service_line",label:"Service Line",description:"Underground utility, sewer, water, power, and communication line failures.",assetType:"coastal_home",icon:"Home",sortOrder:264}),V({id:"cat_personal_water_backup",label:"Water Backup / Sump Overflow",description:"Sewer backup, drain backup, sump overflow, and interior water events.",assetType:"coastal_home",icon:"Home",sortOrder:265}),V({id:"cat_personal_home_sharing",label:"Home Sharing / Short-Term Rental",description:"Owner-occupied hosting, Airbnb/VRBO exposure, guests, liability, and property gaps.",assetType:"coastal_home",icon:"Home",sortOrder:266}),V({id:"cat_personal_rental_host",label:"Vacation Rental Host",description:"Dedicated vacation rental homes, seasonal rentals, guest exposure, and income risk.",assetType:"coastal_home",icon:"Home",sortOrder:267}),V({id:"cat_personal_non_owner_auto",label:"Non-Owned / Named Non-Owner Auto",description:"Driver liability when the insured does not own a personal vehicle.",assetType:"luxury_vehicle",icon:"Car",sortOrder:268}),V({id:"cat_personal_mexico_auto",label:"Mexico Tourist Auto",description:"Temporary Mexico auto liability and physical damage coverage for personal trips.",assetType:"luxury_vehicle",icon:"Car",sortOrder:269}),V({id:"cat_personal_boat_trailer",label:"Boat Trailer / Marine Equipment",description:"Trailers, tenders, boat lifts, navigation gear, and personal marine equipment.",assetType:"yacht",icon:"Sailboat",sortOrder:270}),V({id:"cat_personal_equine",label:"Personal Equine / Horse",description:"Personally owned horses, tack, liability, mortality, and private stable exposure.",assetType:"other",icon:"ShieldCheck",sortOrder:271}),V({id:"cat_personal_livestock",label:"Personal Livestock / Hobby Farm",description:"Hobby farm animals, private acreage, small barns, and limited farm liability.",assetType:"other",icon:"ShieldCheck",sortOrder:272}),V({id:"cat_personal_mortgage_protection",label:"Mortgage Protection",description:"Life or disability coverage intended to help protect a mortgage obligation.",assetType:"other",icon:"HeartPulse",sortOrder:273}),V({id:"cat_personal_accident_health",label:"Accident / Supplemental Health",description:"Accident, hospital indemnity, critical illness, and supplemental personal benefits.",assetType:"other",icon:"HeartPulse",sortOrder:274}),V({id:"cat_personal_medicare",label:"Medicare Supplement / Advantage",description:"Medicare supplement, Medicare Advantage, prescription drug, and senior health coverage.",assetType:"other",icon:"HeartPulse",sortOrder:275}),V({id:"cat_personal_dental_vision",label:"Dental / Vision",description:"Individual dental, vision, orthodontic, and routine-care benefit plans.",assetType:"other",icon:"HeartPulse",sortOrder:276}),V({id:"cat_personal_tuition_refund",label:"Tuition Refund",description:"School tuition protection for medical withdrawal or eligible interruption events.",assetType:"other",icon:"ShieldCheck",sortOrder:277}),V({id:"cat_personal_home_business",label:"Home-Based Business",description:"Small home business property, liability, inventory, equipment, and client exposure.",assetType:"coastal_home",icon:"Home",sortOrder:278}),V({id:"cat_personal_liability",label:"Personal Liability Monoline",description:"Standalone personal liability where home or umbrella placement needs a separate layer.",assetType:"umbrella_liability",icon:"ShieldCheck",sortOrder:279}),V({id:"cat_personal_excess_um",label:"Excess UM / UIM",description:"Excess uninsured and underinsured motorist protection for personal auto programs.",assetType:"umbrella_liability",icon:"ShieldCheck",sortOrder:280}),V({id:"cat_personal_kidnap_ransom",label:"Personal Kidnap / Ransom",description:"Private-client kidnap, ransom, extortion, travel security, and crisis response.",assetType:"umbrella_liability",icon:"ShieldCheck",sortOrder:281}),V({id:"cat_personal_private_staff_epli",label:"Private Staff EPLI",description:"Household staff employment practices, wrongful termination, harassment, and wage claims.",assetType:"umbrella_liability",icon:"Users",sortOrder:282}),V({id:"cat_personal_identity_fraud",label:"Identity Fraud / Cyber",description:"Identity theft, cyber extortion, social engineering, and personal online fraud.",assetType:"other",icon:"ShieldCheck",sortOrder:283}),V({id:"cat_personal_moving_storage",label:"Moving / Storage",description:"Personal property in transit, storage units, relocation, and temporary storage exposure.",assetType:"other",icon:"Package",sortOrder:284}),D({id:"cat_com_public_entity",label:"Public Entity / Municipality",description:"Cities, counties, public authorities, schools, utilities, and governmental liability.",assetType:"other",icon:"Building2",sortOrder:1190}
20),D({id:"cat_com_utility",label:"Utility / Infrastructure",description:"Water, power, gas, telecom, infrastructure, property, liability, and equipment exposure.",assetType:"other",icon:"Building2",sortOrder:1191}),D({id:"cat_com_energy_oil_gas",label:"Energy / Oil & Gas",description:"Upstream, midstream, downstream, contractors, pollution, equipment, and control of well.",assetType:"other",icon:"Briefcase",sortOrder:1192}),D({id:"cat_com_renewable_energy",label:"Renewable Energy",description:"Solar, wind, battery, EV charging, project property, liability, and business interruption.",assetType:"other",icon:"Sparkles",sortOrder:1193}),D({id:"cat_com_mining",label:"Mining / Quarry",description:"Mining operations, quarries, heavy equipment, environmental, and site liability.",assetType:"other",icon:"Briefcase",sortOrder:1194}),D({id:"cat_com_logging_forestry",label:"Logging / Forestry",description:"Logging crews, forestry equipment, timber, inland marine, auto, and liability.",assetType:"other",icon:"Briefcase",sortOrder:1195}),D({id:"cat_com_crop",label:"Crop / Farm Yield",description:"Crop, hail, yield protection, farm revenue, and agricultural production risk.",assetType:"coastal_home",icon:"Home",sortOrder:1196}),D({id:"cat_com_livestock_mortality",label:"Livestock Mortality",description:"Cattle, livestock, mortality, transit, disease, and herd value protection.",assetType:"other",icon:"ShieldCheck",sortOrder:1197}),D({id:"cat_com_equine",label:"Commercial Equine",description:"Boarding, training, breeding, horse farms, mortality, liability, and events.",assetType:"other",icon:"ShieldCheck",sortOrder:1198}),D({id:"cat_com_jewelers_block",label:"Jewelers Block",description:"Retail jewelers, wholesalers, stock, memo goods, transit, crime, and showcases.",assetType:"jewelry",icon:"Gem",sortOrder:1199}),D({id:"cat_com_fine_art_dealer",label:"Fine Art Dealer / Gallery",description:"Galleries, dealers, exhibitions, consignment, transit, and valuable inventory.",assetType:"jewelry",icon:"Gem",sortOrder:1200}),D({id:"cat_com_museum",label:"Museum / Cultural Institution",description:"Collections, exhibitions, property, GL, directors, events, and transit exposure.",assetType:"jewelry",icon:"Gem",sortOrder:1201}),D({id:"cat_com_bailee",label:"Bailee / Customers' Goods",description:"Customer property in care, custody, or control for service, storage, or repair.",assetType:"other",icon:"Package",sortOrder:1202}),D({id:"cat_com_warehouse_legal",label:"Warehouse Legal Liability",description:"Warehouse operators, stored goods, legal liability, inventory, and logistics risk.",assetType:"other",icon:"Package",sortOrder:1203}),D({id:"cat_com_marina",label:"Marina / Boat Dealer",description:"Marinas, docks, boat dealers, storage, repair, rental, and marine liability.",assetType:"yacht",icon:"Sailboat",sortOrder:1204}),D({id:"cat_com_ship_repairers",label:"Ship Repairers / Marine Trade",description:"Shipyards, marine contractors, repairers legal liability, and waterfront operations.",assetType:"yacht",icon:"Sailboat",sortOrder:1205}),D({id:"cat_com_charter_boat",label:"Charter Boat / Passenger Vessel",description:"Commercial passenger vessels, charters, crew, hull, P&I, and excursion operations.",assetType:"yacht",icon:"Sailboat",sortOrder:1206}),D({id:"cat_com_railroad_protective",label:"Railroad Protective",description:"Project-specific liability for contractors working near railroad property.",assetType:"other",icon:"ShieldCheck",sortOrder:1207}),D({id:"cat_com_wrap_up",label:"OCIP / CCIP / Wrap-Up",description:"Owner-controlled and contractor-controlled insurance programs for construction projects.",assetType:"other",icon:"Briefcase",sortOrder:1208}),D({id:"cat_com_manufacturers_eo",label:"Manufacturers E&O",description:"Financial loss from defective products, failure to perform, and manufacturing errors.",assetType:"other",icon:"ShieldCheck",sortOrder:1209}),D({id:"cat_com_staffing",label:"Staffing Agency / PEO",description:"Temporary staffing, leased employees, PEO operations, WC, EPLI, and client contracts.",assetType:"other",icon:"Users",sortOrder:1210}),D({id:"cat_com_security_guards",label:"Security Guards / Patrol",description:"Armed and unarmed guards, patrol, alarm response, assault, and contract liability.",assetType:"other",icon:"ShieldCheck",sortOrder:1211}),D({id:"cat_com_janitorial",label:"Janitorial / Building Services",description:"Cleaning contractors, building services, keys, property damage, auto, and GL.",assetType:"other",icon:"Briefcase",sortOrder:1212}),D({id:"cat_com_pest_control",label:"Pest Control",description:"Exterminators, chemical application, completed operations, auto, and pollution exposure.",assetType:"other",icon:"Briefcase",sortOrder:1213}),D({id:"cat_com_towing",label:"Towing / Roadside Service",description:"Tow trucks, garagekeepers, on-hook cargo, auto liability, and dispatch operations.",assetType:"luxury_vehicle",icon:"Car",sortOrder:1214}),D({id:"cat_com_auto_dealer",label:"Auto Dealer / Garage",description:"Dealerships, repair shops, garage liability, dealer plates, inventory, and test drives.",assetType:"luxury_vehicle",icon:"Car",sortOrder:1215}),D({id:"cat_com_equipment_rental",label:"Equipment Rental",description:"Rental equipment fleets, damage waivers, inland marine, liability, and delivery exp
20osure.",assetType:"other",icon:"Package",sortOrder:1216}),D({id:"cat_com_self_storage",label:"Self-Storage Facility",description:"Storage facilities, tenant goods, premises liability, business income, and cyber.",assetType:"coastal_home",icon:"Home",sortOrder:1217}),D({id:"cat_com_data_center",label:"Data Center / Colocation",description:"Data centers, uptime, property, cyber, technology E&O, power, and cooling exposure.",assetType:"other",icon:"ShieldCheck",sortOrder:1218}),D({id:"cat_com_telecom",label:"Telecom / Communications",description:"Telecom providers, tower work, fiber, networks, cyber, E&O, and infrastructure.",assetType:"other",icon:"ShieldCheck",sortOrder:1219}),D({id:"cat_com_life_sciences",label:"Life Sciences / Medical Device",description:"Biotech, medical device, product liability, clinical trials, cyber, and E&O.",assetType:"other",icon:"ShieldCheck",sortOrder:1220}),D({id:"cat_com_clinical_trials",label:"Clinical Trials",description:"Human subject research, trial liability, foreign trials, participant injury, and sponsors.",assetType:"other",icon:"HeartPulse",sortOrder:1221}),D({id:"cat_com_contamination_recall",label:"Product Recall / Contamination",description:"Recall expense, brand damage, contamination, withdrawal, and crisis response.",assetType:"other",icon:"ShieldCheck",sortOrder:1222}),D({id:"cat_com_franchise",label:"Franchise / Multi-Location",description:"Franchisees, franchisors, multi-location schedules, brand standards, and operations.",assetType:"other",icon:"Building2",sortOrder:1223}),D({id:"cat_com_event_cancellation",label:"Event Cancellation",description:"Cancellation, non-appearance, weather, communicable disease, and revenue protection.",assetType:"umbrella_liability",icon:"Sparkles",sortOrder:1224}),D({id:"cat_com_film_production",label:"Film / Media Production",description:"Production packages, cast, equipment, E&O, locations, vehicles, and props.",assetType:"other",icon:"Sparkles",sortOrder:1225}),D({id:"cat_com_contingent_bi",label:"Contingent Business Interruption",description:"Supplier, customer, leader property, utility interruption, and dependent property losses.",assetType:"other",icon:"ShieldCheck",sortOrder:1226}),D({id:"cat_com_abuse_molestation",label:"Abuse / Molestation Liability",description:"Organizations with vulnerable populations, youth programs, schools, churches, and care.",assetType:"umbrella_liability",icon:"ShieldCheck",sortOrder:1227}),D({id:"cat_com_student_accident",label:"Student / Participant Accident",description:"School, camp, sports, youth, volunteer, and participant accident medical coverage.",assetType:"other",icon:"HeartPulse",sortOrder:1228}),D({id:"cat_com_ambulance",label:"Ambulance / Medical Transport",description:"Emergency transport, non-emergency medical transport, fleet, med mal, and GL.",assetType:"luxury_vehicle",icon:"Car",sortOrder:1229}),D({id:"cat_com_social_services",label:"Social Services",description:"Human service agencies, counseling, shelters, outreach, grants, abuse, and auto.",assetType:"other",icon:"Users",sortOrder:1230}),D({id:"cat_com_assisted_living",label:"Assisted Living / Memory Care",description:"Senior living, memory care, professional liability, GL, property, and resident care.",assetType:"other",icon:"HeartPulse",sortOrder:1231}),D({id:"cat_com_import_export",label:"Importer / Exporter",description:"International trade, cargo, product liability, customs, trade credit, and marine.",assetType:"other",icon:"Package",sortOrder:1232}),D({id:"cat_com_customs_bond",label:"Customs / Surety Bond",description:"Customs bonds, license bonds, permit bonds, contract bonds, and commercial surety.",assetType:"other",icon:"ShieldCheck",sortOrder:1233}),D({id:"cat_com_captive_fronting",label:"Captive / Fronting / Alternative Risk",description:"Captive programs, fronting, loss-sensitive plans, collateral, and alternative risk.",assetType:"other",icon:"ShieldCheck",sortOrder:1234}),D({id:"cat_com_executive_risk",label:"Executive Risk",description:"D&O, EPLI, fiduciary, crime, K&R, management liability, and private company risk.",assetType:"other",icon:"ShieldCheck",sortOrder:1235})],pl=ma.map(e=>e.id),Ru=[...pl.map(e=>({id:M(`catlink_pc_${e}`),tenantId:"agency_palmcoast",categoryId:e,active:!0,createdAt:
20R(120)})),...pl.map(e=>({id:M(`catlink_ls_${e}`),tenantId:"agency_lakeshore",categoryId:e,active:!0,createdAt:R(300)}))],pa="quotex.authToken";let mc=null;function oy(e){if(typeof window>"u")return null;try{return window.localStorage.getItem(e)}catch{return null}}function cy(e,t){if(!(typeof window>"u"))try{window.localStorage.setItem(e,t)}catch{}}function Eu(e){if(!(typeof window>"u"))try{window.localStorage.removeItem(e)}catch{}}function Ne(){return typeof window>"u"?null:mc||oy(pa)}function ly(){var e;return((e=Rr())==null?void 0:e.role)??null}function Rr(){const e=Ne();if(!e||typeof window>"u")return null;try{const t=e.split(".")[1];if(!t)return null;const r=t.replace(/-/g,"+").replace(/_/g,"/"),n=r.padEnd(Math.ceil(r.length/4)*4,"="),i=JSON.parse(window.atob(n)),a=typeof i.userId=="string"?i.userId:typeof i.sub=="string"?i.sub:"",s=typeof i.role=="string"?i.role:"";return!a||!s?null:{userId:a,role:s,tenantId:typeof i.tenantId=="string"?i.tenantId:null,branchId:typeof i.branchId=="string"?i.branchId:null,expiresAt:typeof i.exp=="number"?i.exp*1e3:null,sessionSurface:i.sessionSurface==="client_app"?"client_app":"web"}}catch{return null}}function ss(e){const t=e.trim();mc=t||null,t?cy(pa,t):Eu(pa)}function Ci(){mc=null,Eu(pa)}function Mr(){const e=Ne();return e?{authorization:`Bearer ${e}`}:{}}async function co(e,t,r){const n=new AbortController;let i;const a=new Promise((s,o)=>{i=globalThis.setTimeout(()=>{n.abort(),o(new Error("The cloud request timed out. Its save has not been confirmed."))},r)});try{return await Promise.race([a,(async()=>{const s=await fetch(e,{...t,signal:n.signal}),o=await s.json().catch(()=>null);return{response:s,payload:o}})()])}finally{i!==void 0&&globalThis.clearTimeout(i)}}const dy=100*1024,uy=2*1024*1024,fl=new Map,os=new Map;async function rT(e,t=()=>!0){var m;if(!e.size||e.size>25*1024*1024)throw new Error("Choose a non-empty file up to 25 MB.");const r=Ne(),n=()=>!!r&&Ne()===r&&t();if(!n())throw new Error("The upload session changed.");const{response:i,payload:a}=await co(`${Rt()}/state-blobs/upload-url`,{method:"POST",headers:{"content-type":"application/json",...Mr()},body:JSON.stringify({contentType:e.type||"application/octet-stream",sizeBytes:e.size})},3e4);if(!n())throw new Error("The upload session changed.");const s=a;if(!i.ok||!((m=s==null?void 0:s.ref)!=null&&m.startsWith("blob:"))||!s.uploadUrl)throw new Error("Private file storage is unavailable. Please try again.");const o=new URL(s.uploadUrl);if(o.protocol!=="https:"||o.username||o.password)throw new Error("Private file storage did not return a secure upload destination.");const c=new FormData;c.append("cacheControl","3600"),c.append("",e);const{response:d}=await co(o,{method:"PUT",headers:{"x-upsert":"false"},body:c},12e4);if(!n())throw new Error("The upload session changed.");if(!d.ok)throw new Error("The file upload was not confirmed. Please try again.");return s.ref}function lo(e){return typeof e=="string"&&e.startsWith("data:")&&e.length>dy}function nT(e){if(!e.startsWith("blob:"))return e;const t=e.slice(5),r=`${Rt()}/state-blobs/${t.split("/").map(encodeURIComponent).join("/")}`,n=new URLSearchParams,i=Ne();i&&n.set("access_token",i),/^\d{4}-\d{2}-\d{2}\/[a-f0-9-]+\.[a-z0-9]+$/i.test(t)&&n.set("state_id",Tn("VITE_STATE_SYNC_ID")||"default");const a=n.toString();return a?`${r}?${a}`:r}async function gl(e,t){if(!lo(e))return e;const r=my(e),n=fl.get(r);if(n)return n;const i=os.get(r);if(i)return i;const a=py(e,t).then(s=>(fl.set(r,s),s));os.set(r,a);try{return await a}finally{os.delete(r)}}function my(e){return`${Ne()??"unauthenticated"}\0${e}`}async function py(e,t){var a;const r=fy(e,t);if(!r)throw new Error("State blob upload received an invalid file.");if(r.sizeBytes>uy)return gy(r);const n=await fetch(`${Rt()}/state-blobs`,{method:"POST",headers:{"content-type":"application/json",...Mr()},body:JSON.stringify({dataUrl:e,contentType:t})}),i=await n.json().catch(()=>null);if(!n.ok)throw new Error(i!=null&&i.error?`State blob upload failed: ${i.error}`:`State blob upload failed: ${n.status}`);if(!((a=i==null?void 0:i.ref)!=null&&a.startsWith("blob:")))throw new Error("State blob upload did not return a blob reference.");return i.ref}function fy(e,t){const r=e.match(/^data:([^;,]+)?(;base64)?,(.*)$/s);if(!r)return null;const n=r[3]??"",i=!!r[2],a=i?Math.max(0,Math.floor(n.length*3/4)-(n.endsWith("==")?2:n.endsWith("=")?1:0)):new TextEncoder().encode(decodeURIComponent(n)).byteLength;return{contentType:r[1]||t||"application/octet-stream",encoded:n,base64:i,sizeBytes:a}}async function gy(e){var a;const t=await fetch(`${Rt()}/state-blobs/upload-url`,{method:"POST",headers:{"content-type":"application/json",...Mr()},body:JSON.stringify({contentType:e.contentType,sizeBytes:e.sizeBytes})}),r=await t.json().catch(()=>null);if(!t.ok)throw new Error(r!=null&&r.error?`State blob upload failed: ${r.error}`:`State blob upload failed: ${t.status}`);if(!((a=r==null?void 0:r.ref)!=null&&a.startsWith("blob:"))||!r.uploadUrl)throw new Error("State blob upload permission was incomplete.");const n=new FormData;n.append("cacheControl","3600"),n.append("",yy(e));const i=await fetch(r.uploadUrl,{method:"PUT",headers:{"x-upsert":"false"},body:n});if(!i.ok)throw new Error(`State blob upload failed: ${i.status}`);return r.ref}function yy(e){if(!e.base64)return new Blob([decodeURIComponent(e.encoded)],{type:e.contentType});
20const t=atob(e.encoded),r=new Uint8Array(t.length);for(let n=0;n<t.length;n+=1)r[n]=t.charCodeAt(n);return new Blob([r],{type:e.contentType})}const Kt=300,iT=Kt,aT=0,pc=3e3,fc=3e3,xu=1e3,hy=pc+fc-xu,Pu={full_platform:{label:"Full Quotex software",shortLabel:"Full software",description:"Complete agency operating system with clients, policies, messages, documents, carrier workflows, and AI quoting.",userMonthlyPriceUsd:Kt,supportsWebsiteAppAddOns:!0}},by=[{months:12,label:"12 months",discountPercent:0},{months:24,label:"24 months",discountPercent:5},{months:36,label:"36 months",discountPercent:8}],Iy={none:{label:"Software only",description:"No company website or Quotex app activation.",monthlyPriceUsd:0},website:{label:"Company website",description:"Add the branded company website with client portal access and quote intake connected to the software.",monthlyPriceUsd:pc},app:{label:"Quotex client app",description:"Activate the agency inside the universal Quotex client app with portal access and quote intake connected to the software.",monthlyPriceUsd:fc},website_app:{label:"Company website + Quotex app",description:"Bundle the separate branded company website with Quotex app activation. Both connect client portal access and quote intake to the software. Save $1,000/mo.",monthlyPriceUsd:hy}},gc={minimum:{allowedUsers:10,allowedProspectsPerMonth:200,allowedAiMessagesPerMonth:1e3,allowedCarriers:5,customBranding:!1,customDomain:!1,support:"Basic",seatPriceUsd:Kt,minimumBillableSeats:10,monthlyPriceUsd:Kt*10},mid:{allowedUsers:25,allowedProspectsPerMonth:1e3,allowedAiMessagesPerMonth:5e3,allowedCarriers:12,customBranding:!0,customDomain:!1,support:"Priority",seatPriceUsd:Kt,minimumBillableSeats:25,monthlyPriceUsd:Kt*25},ultra:{allowedUsers:50,allowedProspectsPerMonth:999999,allowedAiMessagesPerMonth:999999,allowedCarriers:999,customBranding:!0,customDomain:!0,support:"Dedicated",seatPriceUsd:Kt,minimumBillableSeats:50,monthlyPriceUsd:Kt*50}};function Nu(e){return Iy[e??"none"].monthlyPriceUsd}function yc(e){return"full_platform"}function sT(e){return Pu[yc()].supportsWebsiteAppAddOns}function vy(e){return Pu[yc()].userMonthlyPriceUsd}function oT(e){return e==="website_app"?pc+fc:Nu(e)}function cT(e){return e==="website_app"?xu:0}function hc(e){return e===24||e===36?e:12}function wy(e){var r;const t=hc(e);return((r=by.find(n=>n.months===t))==null?void 0:r.discountPercent)??0}function _y(e){return Math.max(1,Math.ceil(Number.isFinite(e)?e:1))}function Ay(e,t){return _y(e)*vy()}function Cy(e,t,r,n){const i=Ty(e,t);return Math.max(0,i-ky(i,r))}function Sy(e){return gc[e].allowedUsers}function Ty(e,t,r){const n=t;return Ay(e)+Nu(n)}function ky(e,t){const r=wy(t);return r>0?Math.round(Math.max(0,e)*(r/100)):0}function lT(e){return Math.max(0,e.allowedUsers-Sy(e.tier))}function Ry(e){return yc(e.softwareProduct),Cy(Math.max(1,Math.ceil(e.allowedUsers||gc[e.tier].allowedUsers)),e.websiteAppAddOn,e.softwarePlanTermMonths)}function Ey(e){return typeof e.monthlyPriceOverrideUsd=="number"&&e.monthlyPriceOverrideUsd>=0?e.monthlyPriceOverrideUsd:Ry(e)}function ln(e){if(!e)return"";const t=new Date(e);return Number.isNaN(t.getTime())?"":t.toISOString().slice(0,10)}function fa(e,t){return e&&/^\d{4}-\d{2}-\d{2}$/.test(e)?new Date(`${e}T12:00:00.000Z`).toISOString():t||new Date().toISOString()}function bc(e,t){const r=e&&/^\d{4}-\d{2}-\d{2}$/.test(e)?new Date(`${e}T12:00:00.000Z`):new Date,n=r.getUTCDate(),i=new Date(r);return i.setUTCMonth(i.getUTCMonth()+hc(t)),i.getUTCDate()!==n&&i.setUTCDate(0),i.toISOString().slice(0,10)}function Jn(e){return hc(e.softwarePlanTermMonths)}function xy(e){return e.softwarePlanStartedAt??e.createdAt??new Date().toISOString()}function uo(e){return e.softwarePlanRenewsAt?e.softwarePlanRenewsAt:fa(bc(ln(xy(e)),Jn(e)))}function qu(e){const t=new Date(uo(e)).getTime();return Number.isNaN(t)?0:Math.ceil((t-Date.now())/864e5)}function dT(e){return Math.max(0,Math.ceil(qu(e)/30.4375))}function uT(e){const t=qu(e);return t<0?{label:"Renewal overdue",tone:"error"}:t===0?{label:"Renews today",tone:"warn"}:t<=30?{label:`${t}
20d to renewal`,tone:"warn"}:t<=90?{label:`${t}d to renewal`,tone:"gold"}:{label:"Active term",tone:"success"}}const Ou={policies:!0,documents:!0,claims:!0,messages:!0,questionnaires:!0,payments:!0,signatures:!0};function Py(e){return e.trim().replace(/\/+$/,"")}function hr(e,t){if(e!=null&&e.trim())return`${Py(e)}${t}`}function Ny(e){const t=e.trim().toLowerCase();if(!t)return null;try{const r=/^https?:\/\//.test(t)?t:`https://${t}`;return new URL(r).hostname.replace(/^www\./,"")}catch{return t.replace(/^https?:\/\//,"").replace(/^www\./,"").split("/")[0]||null}}function ga(e){const t=Array.isArray(e)?e:(e??"").split(/[\n,]+/);return Array.from(new Set(t.map(r=>Ny(r)).filter(Boolean)))}function qy(e){return{loginSuccess:hr(e,"/client-portal"),logout:hr(e,"/client-login"),passwordReset:hr(e,"/client-reset-password"),documentSignatureReturn:hr(e,"/client-portal/documents"),questionnaireReturn:hr(e,"/client-portal/questionnaires")}}function Du(e=ua("qtx_site")){const t=_u(e);return{websiteApiKeyEncrypted:t.encrypted,websiteApiKeyPreview:t.preview}}function Lu(e=ua("qtx_hook")){const t=_u(e);return{websiteWebhookSecretEncrypted:t.encrypted,websiteWebhookSecretPreview:t.preview}}function Oy(e){return wu(e.websiteApiKeyEncrypted)}function Dy(e){return wu(e.websiteWebhookSecretEncrypted)}function Mu(e){var i;const t=(i=e.websiteAllowedDomains)!=null&&i.length?ga(e.websiteAllowedDomains):ga(e.website),r=e.websiteApiKeyEncrypted?{}:Du(),n=e.websiteWebhookSecretEncrypted?{}:Lu();return{...e,websiteAllowedDomains:t,customerPortalUrl:e.customerPortalUrl||hr(e.website,"/client-portal"),quoteStartUrl:e.quoteStartUrl||hr(e.website,"/start-quote"),websiteAuthRedirects:{...qy(e.website),...e.websiteAuthRedirects??{}},websitePortalModules:{...Ou,...e.websitePortalModules??{}},websiteLastWebhookStatus:e.websiteLastWebhookStatus??"not_tested",websiteLastWebhookMessage:e.websiteLastWebhookMessage??"Connection has not been checked yet.",...r,...n}}function Ly(e){var r,n,i,a,s,o;const t=[];
20return(r=e.website)!=null&&r.trim()||t.push("external website URL"),(n=e.customerPortalUrl)!=null&&n.trim()||t.push("customer portal URL"),(i=e.quoteStartUrl)!=null&&i.trim()||t.push("quote start URL"),(a=e.portalBaseUrl)!=null&&a.trim()||t.push("software portal URL"),(s=e.websiteAllowedDomains)!=null&&s.length||t.push("allowed domains"),e.websiteApiKeyEncrypted||t.push("website API key"),(o=e.websiteWebhookUrl)!=null&&o.trim()||t.push("sync webhook URL"),e.websiteWebhookSecretEncrypted||t.push("webhook signing secret"),t.length?{status:"needs_setup",message:`Missing ${t.join(", ")}.`}:{status:"ready",message:"Website connection is ready for two-way portal sync."}}const My=[{value:"gmail",label:"Gmail / Google Workspace"},{value:"outlook",label:"Outlook / Microsoft 365"},{value:"apple",label:"iCloud Mail"},{value:"yahoo",label:"Yahoo Mail"},{value:"other",label:"Other email app"}];function rr(e){const t=e.trim().toLowerCase().split("@")[1]??"";return t?t==="gmail.com"||t==="googlemail.com"?"gmail":["outlook.com","hotmail.com","live.com","msn.com"].includes(t)?"outlook":t==="icloud.com"||t==="me.com"||t==="mac.com"?"apple":t==="yahoo.com"||t==="ymail.com"?"yahoo":"other":"other"}function mT(e){var t;return((t=My.find(r=>r.value===e))==null?void 0:t.label)??"Email"}function pT(e){switch(e){case"gmail":return"Gmail";case"outlook":return"Outlook";case"apple":return"iCloud Mail";case"yahoo":return"Yahoo Mail";default:return"email app"}}function yl(e,t){const r=encodeURIComponent(e.trim());switch(t){case"gmail":return`https://mail.google.com/mail/u/?authuser=${r}#inbox`;case"outlook":return"https://outlook.office.com/mail/";case"apple":return"https://www.icloud.com/mail/";case"yahoo":return"https://mail.yahoo.com/";default:return`mailto:${r}`}}function hl(e){const t=e.trim().replace(/\s+/g," ").replace(/"/g,"");return t?`"${t}"`:""}function $y(e){var a;const t=[],r=(a=e.contactEmail)==null?void 0:a.trim();r&&t.push(`from:${r} OR to:${r}`);const n=hl(e.subject??"");n&&t.push(`subject:${n}`);const i=e.externalThreadId??e.threadId;return!n&&i&&t.push(hl(i)),t.join(" ")}function fT(e){if(e.externalUrl)return e.externalUrl;const t=e.mailbox.trim(),r=encodeURIComponent(t);if(e.provider==="gmail"){const a=Fy(e.rfc822MessageId??e.messageIdHeader);if(a)return`https://mail.google.com/mail/u/?authuser=${r}#search/rfc822msgid:${encodeURIComponent(a)}`}const n=$y(e),i=encodeURIComponent(n);if(!n)return yl(t,e.provider);switch(e.provider){case"gmail":return`https://mail.google.com/mail/u/?authuser=${r}#search/${i}`;case"outlook":return`https://outlook.office.com/mail/search?q=${i}`;case"yahoo":return`https://mail.yahoo.com/d/search/keyword=${i}`;case"apple":return"https://www.icloud.com/mail/";default:return e.contactEmail?`mailto:${encodeURIComponent(e.contactEmail)}`:yl(t,e.provider)}}function Fy(e){return(e??"").trim().replace(/^<+/,"").replace(/>+$/,"")}function gT(e){return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e.trim())}function $u(e){return e.role==="master_admin"&&e.active!==!1}const Zr=Symbol("absent");function dn(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function mo(e,t){if(e===t)return!0;if(Array.isArray(e)&&Array.isArray(t))return e.length===t.length&&e.every((n,i)=>mo(n,t[i]));if(!dn(e)||!dn(t))return!1;const r=Object.keys(e);return r.length===Object.keys(t).length&&r.every(n=>Object.hasOwn(t,n)&&mo(e[n],t[n]))}function cs(e,t){return Object.hasOwn(e,t)?e[t]:Zr}function po(e,t,r){if(mo(e,t))return r;if(dn(e)&&dn(t)&&dn(r)){const n=new Set([...Object.keys(r),...Object.keys(e),...Object.keys(t)]);return Object.fromEntries([...n].flatMap(i=>{const a=po(cs(e,i),cs(t,i),cs(r,i));return a===Zr?[]:[[i,a]]}))}return e}function ls(e){const t=new Set;return e.every(r=>!dn(r)||typeof r.id!="string"||!r.id||t.has(r.id)?!1:(t.add(r.id),!0))}function By(e,t,r){if(!ls(e)||!ls(t)||!ls(r))return po(e,t,r);const n=new Map(e.map(o=>[o.id,o])),i=new Map(t.map(o=>[o.id,o])),a=new Map(r.map(o=>[o.id,o]));return[...new Set([...a.keys(),...n.keys(),...i.keys()])].flatMap(o=>{const c=po(n.get(o)??Zr,i.get(o)??Zr,a.get(o)??Zr);return c===Zr?[]:[c]})}function Uy(e,t,r){const n=JSON.parse(JSON.stringify(e)),i=JSON.parse(JSON.stringify(t)),a=JSON.parse(JSON.stringify(r)),s=new Set([...Object.keys(n),...Object.keys(i),...Object.keys(a)]);return Object.fromEntries([...s].map(o=>[o,By(n[o]??[],i[o]??[],a[o]??[])]))}const Vy="gzip_base64_snapshot_v1",Ic="gzip-base64-v1",jy=256*1024,fo=8*1024*1024,Zn=1.5*1024*1024;
20class De extends Error{constructor(t){super(t==="too_large"?"The cloud transfer exceeds its safe size limit. Your local changes are preserved.":"The cloud snapshot transfer could not be verified. Your local changes are preserved."),this.reason=t}}function Oa(){return typeof CompressionStream=="function"&&typeof DecompressionStream=="function"}function Ir(e){return new TextEncoder().encode(e).byteLength}async function Fu(e,t){const r=e.getReader(),n=[];let i=0;try{for(;;){const o=await r.read();if(o.done)break;if(i+=o.value.byteLength,i>t)throw await r.cancel().catch(()=>{}),new De("too_large");n.push(o.value)}}finally{r.releaseLock()}const a=new Uint8Array(i);let s=0;for(const o of n)a.set(o,s),s+=o.byteLength;return a}function Bu(e){return new ReadableStream({start(t){t.enqueue(e),t.close()}})}function Uu(e){const t=[];for(let r=0;r<e.length;r+=32768)t.push(String.fromCharCode(...e.subarray(r,r+32768)));return btoa(t.join(""))}function Qy(e){if(typeof e!="string"||!e.length||e.length>Zn||e.length%4!==0||!/^[A-Za-z0-9+/]*={0,2}$/.test(e))throw new De("invalid");const t=atob(e),r=Uint8Array.from(t,n=>n.charCodeAt(0));if(Uu(r)!==e)throw new De("invalid");return r}async function Hy(e,t,r){const n=Ir(e);if(n>fo)throw new De("too_large");const i=`{"snapshot":${e},"baseRevision":${t??"null"}}`,a=Ir(i);if(r&&Oa()&&n>=jy)try{const s=await Fu(Bu(new TextEncoder().encode(e)).pipeThrough(new CompressionStream("gzip")),Zn),o=JSON.stringify({snapshotTransport:{encoding:Ic,data:Uu(s),uncompressedBytes:n},baseRevision:t});if(Ir(o)<=Zn&&Ir(o)<a)return o}catch(s){if(!(s instanceof De)||s.reason!=="too_large")throw new De("invalid")}if(a>Zn)throw new De("too_large");return i}async function Vu(e){if(!e||typeof e!="object"||Array.isArray(e))return null;const t=e;if(!Object.prototype.hasOwnProperty.call(t,"snapshotTransport")){if(Ir(JSON.stringify(t))>fo)throw new De("too_large");return t}if(Ir(JSON.stringify(t))>Zn)throw new De("too_large");if(Object.prototype.hasOwnProperty.call(t,"snapshot"))throw new De("invalid");const r=t.snapshotTransport;if(!r||typeof r!="object"||Array.isArray(r))throw new De("invalid");const{encoding:n,data:i,uncompressedBytes:a}=r;if(n!==Ic||!Number.isInteger(a)||a<=0||a>fo)throw new De("invalid");if(!Oa())throw new De("unsupported");try{const s=await Fu(Bu(Qy(i)).pipeThrough(new DecompressionStream("gzip")),a);if(s.byteLength!==a)throw new De("invalid");const o=JSON.parse(new TextDecoder("utf-8",{fatal:!0}).decode(s));if(!o||typeof o!="object"||Array.isArray(o))throw new De("invalid");const{snapshotTransport:c,...d}=t;return{...d,snapshot:o}}catch(s){throw s instanceof De?s:new De("invalid")}}const at="quotex.db.v33",vr=`${at}.critical`,wr=`${at}.quote-workflows`,Zi=`${at}.history`,ju=5,zy=["quotex.db.v1","quotex.db.v2","quotex.db.v3","quotex.db.v4","quotex.db.v5","quotex.db.v6","quotex.db.v7","quotex.db.v8","quotex.db.v9","quotex.db.v10","quotex.db.v11","quotex.db.v12","quotex.db.v13","quotex.db.v14","quotex.db.v15","quotex.db.v16","quotex.db.v17","quotex.db.v18","quotex.db.v19","quotex.db.v20","quotex.db.v21","quotex.db.v22","quotex.db.v23","quotex.db.v24","quotex.db.v25","quotex.db.v26","quotex.db.v27","quotex.db.v28","quotex.db.v29","quotex.db.v30","quotex.db.v31","quotex.db.v32"],vc=["agencies","branches","users","customers","assets","policies","quoteRequests","prospects","carriers","carrierLinks","carrierDownloads","carrierRunnerJobs","carrierContacts","deposits","payments","renewals","claims","campaigns","messages","categoryLinks","categories","customMessages","customDocumentTypes","quotingSessions","importBatches","communications","carrierEmailProcessing","connectedMailboxes","documents","notes","statusEvents","tasks","aiNotifications","mailboxOutbox","softwareSales","masterAgencyActivities","securityIncidents","securityBans","accountingSettings","timesheets","hrSubmissions","calendarEvents","audit","marketingConfigs","reminders","internalThreads","internalMessages","messagePins","messageMutes","messageReports","messageBlocks","demoLeads","deletedRows"],bl={carrier_chubb:"https://www.chubb.com/us-en/agents-brokers.html",carrier_pure:"https://www.pureinsurance.com/member-login",carrier_aig:"https://www.aig.com/business/insurance/login",carrier_cincinnati_home:"https://www.cinfin.com/agents",carrier_vault:"https://www.vault.insurance/insurance-agents",carrier_berkley_one:"https://www.berkleyone.com/insurance-professionals/",carrier_crestbrook:"https://www.nationwide.com/personal/insurance/private-client/",carrier_hagerty:"https://www.hagertyagent.com/",carrier_markel:"https://www.markel.com/insurance/agents-and-brokers",carrier_natgen_premier:"https://www.nationalgeneral.com/agent/",carrier_travelers:"https://www.travelers.com/agents/login",carrier_liberty:"https://business.libertymutual.com",carrier_safeco:"https://www.safeco.com/agent-resources",carrier_hartford:"https://www.thehartford.com/agents-producers",carrier_nationwide:"https://www.agentcenter.nationwide.com",carrier_progressive:"https://progressivecommercial.com/agent-login/",carrier_allstate:"https://agents.allstate.com",carrier_farmers:"https://agents.farmers.com",carrier_statefarm:"https://b2b.statefarm.com",carrier_usa
20a:"https://www.usaa.com/inet/wc/insurance-products",carrier_autoowners:"https://www.auto-owners.com/agency-services/ao-access",carrier_erie:"https://www.erieinsurance.com/agents",carrier_mercury:"https://www.mercuryinsurance.com/agents/",carrier_amfam:"https://www.amfam.com/agents",carrier_foremost:"https://www.foremost.com/agents/",carrier_stillwater:"https://www.stillwaterinsurance.com/agents/",carrier_plymouth_rock:"https://www.plymouthrock.com/agents",carrier_kemper:"https://www.kemper.com/agents",carrier_westfield:"https://www.westfieldinsurance.com/agents",carrier_amtrust:"https://amtrustfinancial.com/agents",carrier_auto_club_group:"https://www.aaa.com/insurance",carrier_michigan_farm_bureau:"https://www.michfb.com/insurance",carrier_frankenmuth:"https://www.fmins.com/agents",carrier_hanover_citizens:"https://www.hanover.com/agents",carrier_pioneer_state_mutual:"https://www.psmic.com/agents",carrier_hastings_mutual:"https://www.hastingsmutual.com/agents",carrier_fremont:"https://www.fmic.com/agents",carrier_michigan_insurance_company:"https://www.michiganinsurance.com/agent",carrier_secura:"https://www.secura.net/agents",carrier_grange:"https://www.grangeinsurance.com/agents",carrier_west_bend:"https://www.thesilverlining.com/agents",carrier_meemic:"https://www.meemic.com"};function un(){return{agencies:structuredClone(qa),branches:[],users:structuredClone(Mg),importBatches:[],customers:structuredClone($g),assets:structuredClone(jg),policies:structuredClone(Hg),quoteRequests:structuredClone(zg),prospects:structuredClone(Kg),carriers:structuredClone(oo),carrierLinks:structuredClone(Au),carrierDownloads:structuredClone(Vg),carrierRunnerJobs:structuredClone(Qg),carrierContacts:structuredClone(Cu),deposits:structuredClone(Gg),payments:structuredClone(Wg),documents:structuredClone(Tu),statusEvents:structuredClone(Xg),campaigns:structuredClone(ey),messages:structuredClone(ty),renewals:structuredClone(ry),claims:structuredClone(ny),notes:structuredClone(iy),communications:structuredClone(ay),carrierEmailProcessing:[],connectedMailboxes:[],mailboxOutbox:[],audit:[],categories:structuredClone(ma),categoryLinks:structuredClone(Ru),customMessages:[],customDocumentTypes:[],aiNotifications:[],tasks:[],marketingConfigs:[],reminders:[],internalThreads:[],internalMessages:[],messagePins:[],messageMutes:[],messageReports:[],messageBlocks:[],securityIncidents:[],securityBans:[],quotingSessions:[],demoLeads:[],softwareSales:[],masterAgencyActivities:structuredClone(Lg),accountingSettings:[],timesheets:[],hrSubmissions:[],calendarEvents:[],deletedRows:[]}}function Gy(e){const t=new Set;return e.agencies=e.agencies.map(r=>{const n=pt(Yn(r)??""),i=n&&!t.has(n)?n:so(r.name,t);t.add(i);const{agencyCode:a,...s}=r;return{...s,...ui(i)}}),e}function Wy(e){return e.users=(e.users??[]).filter(t=>!0),e}function Ky(e){return e.agencies=e.agencies.map(t=>Mu(t)),e}function Yy(e){const t=new Map(qa.map(r=>[r.id,r]));return e.agencies=e.agencies.map(r=>{const n=t.get(r.id),i=Jn({...r,softwarePlanTermMonths:r.softwarePlanTermMonths??(n==null?void 0:n.softwarePlanTermMonths)}),a=r.softwarePlanStartedAt??(n==null?void 0:n.softwarePlanStartedAt)??r.createdAt,s=r.softwarePlanRenewsAt??(n==null?void 0:n.softwarePlanRenewsAt)??fa(bc(ln(a),i));return{...r,softwarePlanTermMonths:i,softwarePlanStartedAt:a,softwarePlanRenewsAt:s}}),e}function Jy(e){e.carrierRunnerJobs??(e.carrierRunnerJobs=[]);const t=new Map(qa.map(r=>[r.id,r]));return e.agencies=e.agencies.map(r=>{const n=t.get(r.id);return{...r,carrierRunnerEnabled:r.carrierRunnerEnabled??(n==null?void 0:n.carrierRunnerEnabled)??r.ivansDownloadEnabled??(n==null?void 0:n.ivansDownloadEnabled)??!1,carrierRunnerStatus:r.carrierRunnerStatus??(n==null?void 0:n.carrierRunnerStatus)??r.ivansConnectionStatus??(n==null?void 0:n.ivansConnectionStatus)??(r.carrierRunnerEnabled??r.ivansDownloadEnabled?"pending_setup":"not_configured"),carrierRunnerMode:r.carrierRunnerMode??(n==null?void 0:n.carrierRunnerMode)??"ai_portal_runner",carrierRunnerAgencyCode:r.carrierRunnerAgencyCode??(n==null?void 0:n.carrierRunnerAgencyCode)??r.ivansAgencyAccount??(n==null?void 0:n.ivansAgencyAccount),carrierRunnerProfileId:r.carrierRunnerProfileId??(n==null?void 0:n.carrierRunnerProfileId)??r.ivansMailboxId??(n==null?void 0:n.ivansMailboxId),carrierRunnerReceiverCode:r.carrierRunnerReceiverCode??(n==null?void 0:n.carrierRunnerReceiverCode)??r.ivansReceiverCode??(n==null?void 0:n.ivansReceiverCode),carrierRunnerCredentialVaultRef:r.carrierRunnerCredentialVaultRef??(n==null?void 0:n.carrierRunnerCredentialVaultRef)??r.ivansCredentialReference??(n==null?void 0:n.ivansCredentialReference),carrierRunnerMfaMode:r.carrierRunnerMfaMode??(n==null?void 0:n.carrierRunnerMfaMode)??"staff_approval",carrierRunnerAuthorizedUserIds:r.carrierRunnerAuthorizedUserIds??(n==null?void 0:n.carrierRunnerAuthorizedUserIds)??[],carrierRunnerLinesOfBusiness:r.carrierRunnerLinesOfBusiness??(n==null?void 0:n.carrierRunnerLinesOfBusiness)??r.ivansLinesOfBusiness??(n==null?void 0:n.ivansLinesOfBusiness)??["personal"],carrierRunnerFeeds:r.carrierRunnerFeeds??(n==null?void 0:n.carrierRunnerFeeds)??r.ivansDownloadFeeds??(n==null?void 0:n.ivansDownloadFeeds)??["policy","renew
20al","billing","edocs"],carrierRunnerCarrierIds:r.carrierRunnerCarrierIds??(n==null?void 0:n.carrierRunnerCarrierIds)??r.ivansTradingPartnerIds??(n==null?void 0:n.ivansTradingPartnerIds)??[],carrierRunnerReviewRule:r.carrierRunnerReviewRule??(n==null?void 0:n.carrierRunnerReviewRule)??"require_review_for_material_changes",carrierRunnerSchedule:r.carrierRunnerSchedule??(n==null?void 0:n.carrierRunnerSchedule)??r.ivansPollingSchedule??(n==null?void 0:n.ivansPollingSchedule)??"as_available",carrierRunnerWorkingPath:r.carrierRunnerWorkingPath??(n==null?void 0:n.carrierRunnerWorkingPath)??r.ivansInboundPath??(n==null?void 0:n.ivansInboundPath),carrierRunnerArchivePath:r.carrierRunnerArchivePath??(n==null?void 0:n.carrierRunnerArchivePath)??r.ivansArchivePath??(n==null?void 0:n.ivansArchivePath),carrierRunnerFailureAlertEmails:r.carrierRunnerFailureAlertEmails??(n==null?void 0:n.carrierRunnerFailureAlertEmails)??r.ivansErrorAlertEmails??(n==null?void 0:n.ivansErrorAlertEmails)??[],carrierRunnerContactEmail:r.carrierRunnerContactEmail??(n==null?void 0:n.carrierRunnerContactEmail)??r.ivansContactEmail??(n==null?void 0:n.ivansContactEmail),carrierRunnerContactPhone:r.carrierRunnerContactPhone??(n==null?void 0:n.carrierRunnerContactPhone)??r.ivansContactPhone??(n==null?void 0:n.ivansContactPhone),carrierRunnerNotes:r.carrierRunnerNotes??(n==null?void 0:n.carrierRunnerNotes)??r.ivansNotes??(n==null?void 0:n.ivansNotes),carrierRunnerLastTestAt:r.carrierRunnerLastTestAt??(n==null?void 0:n.carrierRunnerLastTestAt)??r.ivansTestFileReceivedAt??(n==null?void 0:n.ivansTestFileReceivedAt),carrierRunnerLastTestStatus:r.carrierRunnerLastTestStatus??(n==null?void 0:n.carrierRunnerLastTestStatus)??r.ivansLastTestStatus??(n==null?void 0:n.ivansLastTestStatus)??"not_tested",carrierRunnerLastTestMessage:r.carrierRunnerLastTestMessage??(n==null?void 0:n.carrierRunnerLastTestMessage)??r.ivansLastTestMessage??(n==null?void 0:n.ivansLastTestMessage),carrierRunnerLastSyncAt:r.carrierRunnerLastSyncAt??(n==null?void 0:n.carrierRunnerLastSyncAt)??r.ivansLastSyncAt??(n==null?void 0:n.ivansLastSyncAt),carrierRunnerUpdatedAt:r.carrierRunnerUpdatedAt??(n==null?void 0:n.carrierRunnerUpdatedAt)??r.ivansUpdatedAt??(n==null?void 0:n.ivansUpdatedAt),ivansDownloadEnabled:r.ivansDownloadEnabled??(n==null?void 0:n.ivansDownloadEnabled)??!1,ivansConnectionStatus:r.ivansConnectionStatus??(n==null?void 0:n.ivansConnectionStatus)??(r.ivansDownloadEnabled?"pending_setup":"not_configured"),ivansAgencyAccount:r.ivansAgencyAccount??(n==null?void 0:n.ivansAgencyAccount),ivansMailboxId:r.ivansMailboxId??(n==null?void 0:n.ivansMailboxId),ivansReceiverCode:r.ivansReceiverCode??(n==null?void 0:n.ivansReceiverCode),ivansDownloadMethod:r.ivansDownloadMethod??(n==null?void 0:n.ivansDownloadMethod)??"ivans_exchange",ivansCredentialReference:r.ivansCredentialReference??(n==null?void 0:n.ivansCredentialReference),ivansLinesOfBusiness:r.ivansLinesOfBusiness??(n==null?void 0:n.ivansLinesOfBusiness)??["personal"],ivansDownloadFeeds:r.ivansDownloadFeeds??(n==null?void 0:n.ivansDownloadFeeds)??["policy","renewal","billing","edocs"],ivansTradingPartnerIds:r.ivansTradingPartnerIds??(n==null?void 0:n.ivansTradingPartnerIds)??[],ivansFileFormats:r.ivansFileFormats??(n==null?void 0:n.ivansFileFormats)??["acord_al3","pdf_edoc"],ivansPollingSchedule:r.ivansPollingSchedule??(n==null?void 0:n.ivansPollingSchedule)??"as_available",ivansInboundPath:r.ivansInboundPath??(n==null?void 0:n.ivansInboundPath),ivansArchivePath:r.ivansArchivePath??(n==null?void 0:n.ivansArchivePath),ivansErrorAlertEmails:r.ivansErrorAlertEmails??(n==null?void 0:n.ivansErrorAlertEmails)??[],ivansContactEmail:r.ivansContactEmail??(n==null?void 0:n.ivansContactEmail),ivansContactPhone:r.ivansContactPhone??(n==null?void 0:n.ivansContactPhone),ivansNotes:r.ivansNotes??(n==null?void 0:n.ivansNotes),ivansTestFileReceivedAt:r.ivansTestFileReceivedAt??(n==null?void 0:n.ivansTestFileReceivedAt),ivansLastTestStatus:r.ivansLastTestStatus??(n==null?void 0:n.ivansLastTestStatus)??"not_tested",ivansLastTestMessage:r.ivansLastTestMessage??(n==null?void 0:n.ivansLastTestMessage),ivansLastSyncAt:r.ivansLastSyncAt??(n==null?void 0:n.ivansLastSyncAt),ivansUpdatedAt:r.ivansUpdatedAt??(n==null?void 0:n.ivansUpdatedAt)}}),e}function Zy(e){const t=new Map(qa.map(r=>[r.id,r]));return e.agencies=(e.agencies??[]).map(r=>{const n=t.get(r.id);if(!n)return r;const i=s=>/ivans|mailbox/i.test(s??""),a=(r.carrierRunnerCarrierIds??[]).some(s=>/naic|ivans/i.test(s));return{...r,carrierRunnerSchedule:r.carrierRunnerSchedule==="manual"?"manual":"as_available",carrierRunnerAgencyCode:i(r.carrierRunnerAgencyCode)?n.carrierRunnerAgencyCode:r.carrierRunnerAgencyCode,carrierRunnerProfileId:i(r.carrierRunnerProfileId)?n.carrierRunnerProfileId:r.carrierRunnerProfileId,carrierRunnerCredentialVaultRef:i(r.carrierRunnerCredentialVaultRef)?n.carrierRunnerCredentialVaultRef:r.carrierRunnerCredentialVaultRef,carrierRunnerWorkingPath:i(r.carrierRunnerWorkingPath)?n.carrierRunnerWorkingPath:r.carrierRunnerWorkingPath,carrierRunnerArchivePath:i(r.carrierRunnerArchivePath)?n.carrierRunnerArchivePath:r.carrierRunnerArchivePath,carrierRunnerCarrierIds:a?n.carrierRunnerCarrierIds:r.carrierRunnerCarrierIds}}),e.masterAgencyActivities=(e.masterAgencyActivities??[]).map(r=>{var n;return r.kind!=="agency_ivans_connection_updated"?r:{...r,kind:"agency_carrier_runner_updated",title:"Carrier download runner setup added",description:"Carrier portal runner credentials reference, MFA approver, enabled carriers, feeds, and alert contacts were recorded for policy, renewal, billing, claims, and eDoc updates.",metadata:{...r.metadata??{},status:((n=r.metadata)==null?void 0:n.status)??"pending_setup"}}}),e.carrierDownloads=(e.carrierDownloads??[]).map(r=>r.source==="ivans"?{...r,source:"carrier_runner"}:r),e}function Xy(e){e.connectedMailboxes??(e.connectedMailboxes=[]);const t=new Date().toISOString(),r=new Map(e.connectedMailboxes.map(n=>[n.id,n]));return e.users.filter(n=>!!n.tenantId&&n.active&&(n.role==="agent"||n.role==="manager"||n.role==="csr")).forEac
20h(n=>{const i=n.businessEmail??n.email,a=typeof i=="string"?i.trim().toLowerCase():"";if(!a)return;const s=`mailbox_staff_${n.id}`,o=r.get(s),c=n.mailProvider??rr(a);if(!o){e.connectedMailboxes.push({id:s,tenantId:n.tenantId,ownerType:"staff",userId:n.id,address:a,provider:c,displayName:n.name,status:"needs_auth",authMode:"oauth",scopes:[],updatedAt:t});return}(o.authMode==="demo"||o.status==="connected"&&!o.tokenVaultRef)&&(o.address=a,o.provider=c,o.displayName=n.name,o.status="needs_auth",o.authMode="oauth",o.scopes=[],delete o.connectedAt,o.updatedAt=t)}),e.agencies.forEach(n=>{const i=n.contactEmail.trim().toLowerCase();if(!i)return;const a=`mailbox_agency_marketing_${n.id}`,s=r.get(a),o=rr(i);if(!s){e.connectedMailboxes.push({id:a,tenantId:n.id,ownerType:"agency_marketing",agencyId:n.id,address:i,provider:o,displayName:`${n.name} Marketing`,status:"needs_auth",authMode:"oauth",scopes:[],updatedAt:t});return}(s.authMode==="demo"||s.status==="connected"&&!s.tokenVaultRef)&&(s.address=i,s.provider=o,s.displayName=`${n.name} Marketing`,s.status="needs_auth",s.authMode="oauth",s.scopes=[],delete s.connectedAt,s.updatedAt=t)}),e}function eh(e){e.carriers??(e.carriers=[]),e.carrierLinks??(e.carrierLinks=[]),e.carrierContacts??(e.carrierContacts=[]);const t=new Map(oo.map(a=>[a.id,a]));e.carriers=e.carriers.map(a=>{var m;const s=t.get(a.id),o=a.id==="carrier_insurance_agent_hub",c=a.agentPortalUrl??(s==null?void 0:s.agentPortalUrl)??bl[a.id],d=a.quotingAutomation?{...a.quotingAutomation,agentPortalUrl:a.quotingAutomation.agentPortalUrl??((m=s==null?void 0:s.quotingAutomation)==null?void 0:m.agentPortalUrl)??c}:s!=null&&s.quotingAutomation?{...s.quotingAutomation,agentPortalUrl:s.quotingAutomation.agentPortalUrl??c}:void 0;return{...a,...o&&s?{name:s.name,claimsUrl:s.claimsUrl,appetiteNotes:s.appetiteNotes,tendencyNotes:s.tendencyNotes,underwritingRules:s.underwritingRules}:{},agentPortalUrl:c,...d?{quotingAutomation:d}:{}}});const r=new Set(e.carriers.map(a=>a.id));for(const a of oo)if(!r.has(a.id)){const s=structuredClone(a);s.agentPortalUrl=s.agentPortalUrl??bl[s.id],s.quotingAutomation&&(s.quotingAutomation.agentPortalUrl=s.quotingAutomation.agentPortalUrl??s.agentPortalUrl),e.carriers.push(s),r.add(a.id)}const n=new Set(e.carrierLinks.map(a=>`${a.tenantId}:${a.carrierId}`));for(const a of Au){const s=`${a.tenantId}:${a.carrierId}`;n.has(s)||(e.carrierLinks.push(structuredClone(a)),n.add(s))}const i=new Set(e.carrierContacts.map(a=>a.id));for(const a of Cu)i.has(a.id)||(e.carrierContacts.push(structuredClone(a)),i.add(a.id));return e}function th(e){e.categories??(e.categories=[]),e.categoryLinks??(e.categoryLinks=[]);const t=new Map(ma.map(o=>[o.id,o])),r=[],n=new Set;for(const o of e.categories){if(n.has(o.id))continue;n.add(o.id);const c=t.get(o.id),d=o.lineOfBusiness;r.push({...o,lineOfBusiness:d??(c==null?void 0:c.lineOfBusiness)??"personal",sortOrder:o.sortOrder??(c==null?void 0:c.sortOrder)??9999,active:o.active??!0})}e.categories=r;const i=new Set(e.categories.map(o=>o.id));for(const o of ma)i.has(o.id)||(e.categories.push(structuredClone(o)),i.add(o.id));const a=new Map;for(const o of e.categoryLinks){const c=`${o.tenantId}:${o.categoryId}`,d=a.get(c);if(!d){a.set(c,o);continue}a.set(c,{...d,active:d.active||o.active,createdAt:d.createdAt<o.createdAt?d.createdAt:o.createdAt})}e.categoryLinks=[...a.values()];const s=new Set(e.categoryLinks.map(o=>`${o.tenantId}:${o.categoryId}`));for(const o of Ru){const c=`${o.tenantId}:${o.categoryId}`;s.has(c)||(e.categoryLinks.push(structuredClone(o)),s.add(c))}return e}function Qu(e){return String(e.type)==="agency_template"&&(/^doc_acord_/i.test(e.id)||/\bacord\b/i.test(`${e.fileName} ${e.documentName??""}`))}function Hu(){return Tu.filter(Qu)}function zu(e){const t=Hu();new Map(t.map(i=>[i.id,i]));const r=(e.documents??[]).filter(Qu),n=new Map(r.map(i=>[i.id,i]));return t.every(i=>{const a=n.get(i.id);return(a==null?void 0:a.fileName)===i.fileName&&a.storagePath===i.storagePath&&a.downloadUrl===i.downloadUrl})}function Gu(e){if(e.documents??(e.documents=[]),zu(e))return e;const t=Hu(),r=new Set(t.map(n=>n.id));return e.documents=e.documents.filter(n=>!r.has(n.id)),e.documents.unshift(...structuredClone(t)),e}function rh(e){const t=new Date(Date.now()+864e6).toISOString(),r=new Date(Date.now()+1080*60*60*1e3).toISOString(),n=new Date(Date.now()-2880*60*1e3).toISOString(),i=new Date(Date.now()-7200*60*1e3).toISOString(),a=e.carriers.find(d=>d.id==="carrier_chubb");a&&(a.billingPortalUrl??(a.billingPortalUrl="https://www.chubb.com/us-en/agents-brokers.html"),a.billingPhone??(a.billingPhone="+1 (800) 699-9916"),a.billingEmail??(a.billingEmail="[email protected]"));const s=e.carriers.find(d=>d.id==="carrier_pure");s&&(s.billingPortalUrl??(s.billingPortalUrl="https://www.pureinsurance.com/member-login"),s.billingPhone??(s.billingPhone="+1 (888) 813-7873"),s.billingEmail??(s.billingEmail="[email protected]"));const o=e.policies.find(d=>d.id==="policy_home");o&&!o.billingMethod&&Object.assign(o,{billingMethod:"direct_bill",billingPayer:"client",billingStatus:"current",billingAccountNumber:"CHB-BILL-558920",billingReference:"Direct bill schedule Q3",billingLastVerifiedAt:n,billingNotes:"Client pays Chubb directly. Agency tracks due dates and receipts only.",nextPaymentDueDate:t,nextPaymentAmount:4487});const c=e.policies.find(d=>d.id==="policy_vehicle");return c&&!c.billingMethod&&Object.assign(c,{billingMethod:"carrier_autopay",billingPayer:"client",billingStatus:"current",billingAccountNumber:"PURE-BILL-441188",billingReference:"Autopay on file with carrier",billingLastVerifiedAt:i,billingNotes:"Carrier autopay confirmed. No agency collection action required.",nextPaymentDueDate:r,nextPaymentAmount:3025}),e.payments.some(d=>d.id==="payment_vehicle_1")||e.payments.push({id:"payment_vehicle_1",tenantId:"agency_palmcoast",customerId:"customer_demo",policyId:"policy_vehicle",amount:3025,currency:"USD",method:"ach",status:"paid",paidAt:new Date(Date.now()-1200*60*60*1e3).toISOString(),createdAt:new Date(Date.now()-1200*60*60*1e3).toISOString()}),e}function nh(e){e.accountingSettings??(e.accountingSettings=[]),e.t
20imesheets??(e.timesheets=[]),e.hrSubmissions??(e.hrSubmissions=[]),e.calendarEvents??(e.calendarEvents=[]);const t=Date.now(),r=a=>new Date(t-a*24*60*60*1e3).toISOString(),n=a=>new Date(t+a*24*60*60*1e3).toISOString();for(const a of e.agencies){const s=e.users.filter(c=>c.tenantId===a.id&&c.active&&c.role==="agent").map(c=>c.id),o=e.accountingSettings.find(c=>c.tenantId===a.id);o&&!Array.isArray(o.timesheetRecipientIds)&&(o.timesheetRecipientIds=s),o||e.accountingSettings.push({id:`acct_settings_${a.id}`,tenantId:a.id,timesheetFrequency:"weekly",dueWeekday:5,dueDayOfMonth:28,reminderTime:"09:00",timesheetRecipientIds:s,updatedAt:r(14)})}if(e.timesheets.some(a=>a.id==="timesheet_olivia_last_week")||e.timesheets.push({id:"timesheet_olivia_last_week",tenantId:"agency_palmcoast",userId:"user_agent_pc",periodStart:r(10),periodEnd:r(4),dueDate:r(3),status:"submitted",entries:[{id:"timesheet_entry_olivia_service",workDate:r(9),startTime:"09:00",endTime:"17:30",breakMinutes:30,hours:8,category:"service",description:"Client service, renewal prep, and carrier follow-up."},{id:"timesheet_entry_olivia_marketing",workDate:r(8),startTime:"09:30",endTime:"16:00",breakMinutes:30,hours:6,category:"marketing",description:"Reviewed prospect outreach and AI campaign responses."}],totalHours:14,notes:"Submitted for manager review.",submittedAt:r(2),createdAt:r(10),updatedAt:r(2)}),e.hrSubmissions.some(a=>a.id==="hr_suggestion_demo")||e.hrSubmissions.push({id:"hr_suggestion_demo",tenantId:"agency_palmcoast",kind:"suggestion",anonymous:!1,submittedById:"user_agent_pc",subject:"Standardize renewal handoff notes",message:"It would help if every renewal handoff included the same checklist for missing docs, premium changes, and carrier contact.",status:"new",submittedAt:n(-1)}),!e.calendarEvents.some(a=>a.id==="calendar_event_book_review")){const a=new Date(t+1728e5);a.setHours(10,30,0,0);const s=new Date(a);s.setMinutes(s.getMinutes()+45),e.calendarEvents.push({id:"calendar_event_book_review",tenantId:"agency_palmcoast",userId:"user_agent_pc",title:"Book review prep",description:"Review open renewals and high-priority client follow-ups before the manager meeting.",startsAt:a.toISOString(),endsAt:s.toISOString(),importance:"warning",location:"Agency office",createdAt:r(1),updatedAt:r(1)})}const i=e.tasks.find(a=>a.tenantId==="agency_palmcoast"&&!a.completedAt&&!a.dueAt);if(i){const a=new Date(t+864e5);a.setHours(16,0,0,0),i.dueAt=a.toISOString()}return e}function er(e){return Wy(Zy(Xy(nh(rh(Gu(th(eh(Jy(Yy(Ky(Gy(e))))))))))))}function ih(){if(typeof window>"u")return[];const e=[...zy,...Array.from({length:ju},(r,n)=>`${Zi}.${n+1}`),at],t=[];for(const r of e){const n=window.localStorage.getItem(r);
20n&&t.push(n)}return t}function ah(e){let t=er(un());for(const r of e){const n=_c(r);n&&(t=La(n,t))}return t}function sh(){if(typeof window>"u")return er(un());try{const e=ih(),t=Ti(window.sessionStorage.getItem(vr))??Ti(window.localStorage.getItem(vr)),r=Si(window.sessionStorage.getItem(wr))??Si(window.localStorage.getItem(wr));if(e.length===0){const a=ms(us(er(un()),t),r);return window.localStorage.setItem(at,JSON.stringify(a)),a}const n=ah(e),i=ms(us(n,t),r);try{window.localStorage.setItem(at,JSON.stringify(i))}catch{}return i}catch{const e=typeof window>"u"?null:Ti(window.sessionStorage.getItem(vr))??Ti(window.localStorage.getItem(vr)),t=typeof window>"u"?null:Si(window.sessionStorage.getItem(wr))??Si(window.localStorage.getItem(wr));return ms(us(er(un()),e),t)}}let ge=sh(),xn=!1,ut=!1,Vn=!1,go=!1,it,Jt,yo=0,_r,ho=0,Xi=null,br,Xn=!1,ya=0,ha=-1,ba,Ia,va=!1,wa,Wu=!1,Ku=null,Il=0,ds=0,vl=!1,wl;const oh=`${at}.changes`,tr=Math.random().toString(36).slice(2),Yu="__quotexActiveDbInstanceId",ei=`${at}.remote-sync-lease`,ch=3e4,lh=45e3,dh=300,uh=15e3,_l=[1e3,2e3,5e3,15e3,6e4],Al=[2e3,5e3,15e3,3e4,6e4],mh=15e4,ph=6e4,fh=6e4;function gh(){typeof window>"u"||(window[Yu]=tr)}function Ze(){return typeof window>"u"?!0:window[Yu]===tr}gh();let yn={status:ze()?"saving":"local-only",reason:ze()?void 0:"not_configured",message:ze()?"Saving changes.":"Cloud backup is not connected in this environment.",updatedAt:new Date().toISOString()};const bo=new Set;function ze(){return dc()}function Ju(){return Rt()}function Zu(){return Tn("VITE_STATE_SYNC_ID")||"default"}function Xu(){return{"content-type":"application/json",...Mr(),...Oa()?{"X-Quotex-State-Encoding":Ic}:{}}}function em(){const e=Ne();return!!e&&Ku===e&&Oa()}function Tr(){return new Date().toISOString()}function xe(e){yn={...e,updatedAt:Tr()},bo.forEach(t=>{try{t(yn)}catch{}})}function tm(e,t="unknown"){return e===401||e===403?"unauthorized":e===429?"rate_limited":e===409?"conflict":e===413?"too_large":e===503?"not_configured":e>
20=500?"server":t}function rm(e){if(!e)return 0;const t=Number(e);if(Number.isFinite(t)&&t>=0)return t*1e3;const r=Date.parse(e);return Number.isFinite(r)?Math.max(0,r-Date.now()):0}function wc(){return typeof navigator<"u"&&navigator.onLine===!1}const nm=(e,t)=>co(e,t,uh);function im(e=Date.now()){if(typeof window>"u")return!0;try{const t=JSON.parse(window.localStorage.getItem(ei)??"null");if(t!=null&&t.instanceId&&t.instanceId!==tr&&typeof t.expiresAt=="number"&&t.expiresAt>e)return!1;window.localStorage.setItem(ei,JSON.stringify({instanceId:tr,expiresAt:e+lh}));const r=JSON.parse(window.localStorage.getItem(ei)??"null");return(r==null?void 0:r.instanceId)===tr}catch{return!0}}function yh(){if(!(typeof window>"u"))try{const e=JSON.parse(window.localStorage.getItem(ei)??"null");(e==null?void 0:e.instanceId)===tr&&window.localStorage.removeItem(ei)}catch{}}function am(...e){return e.filter(Boolean).sort().at(-1)??Tr()}function hh(e){if(!e||typeof e!="object")return e;const t=Tr(),r={...e};return(typeof r.createdAt!="string"||!r.createdAt)&&(r.createdAt=t),r.updatedAt=am(typeof r.updatedAt=="string"?r.updatedAt:void 0,t),r}function bh(e,t){const r=Tr(),n={...e,...t},i=typeof e.updatedAt=="string"?e.updatedAt:void 0,a=typeof t.updatedAt=="string"?t.updatedAt:void 0;return n.updatedAt=am(i,a,r),n}function sm(e){if(!e||typeof e!="object"||Array.isArray(e))return null;const t=un();return er({...t,...e})}function _c(e){if(!e)return null;try{const t=JSON.parse(e),r=un();return er({...r,...t})}catch{return null}}function Ih(e){const t={},r=t;return vc.forEach(n=>{r[n]=e[n]}),t}function vh(e){return{quotingSessions:e.quotingSessions}}function Si(e){if(!e)return null;try{const t=JSON.parse(e);return Array.isArray(t.quotingSessions)?t.quotingSessions:null}catch{return null}}function Ti(e){if(!e)return null;try{const t=JSON.parse(e),r={},n=r;return vc.forEach(i=>{const a=t[i];Array.isArray(a)&&(n[i]=a)}),r}catch{return null}}function us(e,t){if(!t)return e;const r={...e},n=r;return vc.forEach(i=>{const a=t[i];Array.isArray(a)&&(n[i]=i==="deletedRows"?Ac(a,r.deletedRows):Da(a,r[i]))}),er(om(r))}function ms(e,t){return!t||t.length===0?e:er({...e,quotingSessions:Da(t,e.quotingSessions)})}function Cl(e){const t=e;return t.restoredAt??t.updatedAt??t.lastTouchedAt??t.submittedAt??t.completedAt??t.deletedAt??t.createdAt??""}function wh(e,t){return`${e}:${t}`}function Da(e,t){const r=new Map,n=[],i=a=>{if(!a.id){n.push(a);return}const s=r.get(a.id);if(!s){r.set(a.id,a);return}const o=Cl(s),c=Cl(a);r.set(a.id,c>=o?a:s)};return t.forEach(i),e.forEach(i),[...r.values(),...n]}function Ac(e=[],t=[]){return Da(e,t)}function om(e){return{...e,deletedRows:Ac(e.deletedRows??[],[])}}function Sl(e){const t={...e},r=t,n=new Map;for(const i of e.deletedRows??[]){if(i.restoredAt||!i.table||i.table==="deletedRows")continue;const a=n.get(i.table)??new Set;a.add(i.rowId),n.set(i.table,a)}return n.forEach((i,a)=>{const s=a,o=r[s];Array.isArray(o)&&(r[s]=o.filter(c=>{const d=c.id;return!d||!i.has(d)}))}),t}function La(e,t){const r={...e},n=r;return Object.keys(e).forEach(i=>{if(i==="deletedRows"){n[i]=Ac(e.deletedRows,t.deletedRows);return}n[i]=Da(e[i],t[i])}),om(r)}function cm(){if(!(typeof window>"u"||!("BroadcastChannel"in window)))return wl??(wl=new BroadcastChannel(oh)),wl}function Cc(e){var t;(t=cm())==null||t.postMessage({type:"quotex-db-change",key:at,source:e,instanceId:tr,at:Date.now()})}function lm(e,t){const r=La(ge,e),n=JSON.stringify(ge),i=JSON.stringify(r);return n===i?!1:(ge=r,hn(),Zt(),t==="remote"&&Cc("remote"),!0)}function _h(e){if(typeof window>"u")return!1;const t=_c(window.localStorage.getItem(at));return t?lm(t,e):!1}async function mn(e={}){var r,n,i;if(Vn)return await new Promise(a=>{const s=()=>
20{if(!Vn){a();return}setTimeout(s,10)};s()}),ut;if(!Ze()||!ze()||typeof window>"u"||!e.force&&xn){ze()||xe({status:"local-only",reason:"not_configured",message:"Cloud backup is not connected in this environment."});return}if(!Ne()){ut=!1,xn=!1,xe({status:"saving",reason:"unauthorized",message:"Waiting for a secure session before loading cloud data."});return}Vn=!0;const t=Ne();ut||xe({status:"saving",message:"Connecting cloud state."});try{const{response:a,payload:s}=await nm(`${Ju()}/state/${encodeURIComponent(Zu())}`,{method:"GET",headers:Xu()});if(!a.ok){const g=s,y=(g==null?void 0:g.error)==="state_sync_temporarily_unavailable"?"server":tm(a.status);ut=!1,xn=!1,xe({status:"error",reason:y,message:(g==null?void 0:g.error)==="state_sync_temporarily_unavailable"?"Cloud state is temporarily unavailable. Retrying automatically.":`Cloud state could not be loaded (${a.status}).`}),Tl(y,rm(((n=(r=a.headers)==null?void 0:r.get)==null?void 0:n.call(r,"retry-after"))??null));return}const o=await Vu(s);if(!Ze()||Ne()!==t)return;if(!o)throw new De("invalid");Ku=((i=o.capabilities)==null?void 0:i.includes(Vy))===!0?t:null;const d=!ut&&ly()==="customer";ut=!0,xn=!0,Ah(),typeof o.revision=="number"&&(Xi=o.revision);const m=sm(o.snapshot);if(!o.found||!m){_a(50,{skipStatus:!0});return}const p=e.merge!==!1&&!d,u=p?La(ge,m):m,f=JSON.stringify(u)!==JSON.stringify(ge);ge=u,f&&(hn(),Zt(),Cc("remote")),p&&JSON.stringify(u)!==JSON.stringify(m)||go?_a(100,{skipStatus:!0}):!it&&!Jt&&xe({status:"synced",message:"All changes saved."}),go=!1}catch(a){console.warn("[db] Supabase state hydrate failed",a),ut=!1,xn=!1;const s=a instanceof De?a.reason==="too_large"?"too_large":"server":"network";xe({status:"error",reason:s,message:"Cloud state could not be loaded. Your local changes are preserved."}),Tl(s)}finally{Vn=!1}}function Ah(){_r&&clearTimeout(_r),_r=void 0,ho=0}function Tl(e,t=0){if(!ze()||typeof window>"u"||e==="unauthorized"||e==="not_configured"||e==="too_large")return;const r=Al[Math.min(ho,Al.length-1)],n=Math.max(r,t);ho+=1,_r&&clearTimeout(_r),_r=setTimeout(()=>{_r=void 0,!(!Ze()||wc()||!Ne())&&im()&&mn({force:!0,merge:!0})},n)}function _a(e=dh,t={}){!Ze()||!ze()||typeof window>"u"||va&&Ia&&Ia===wa&&em()===Wu||(Vn&&(go=!0),t.skipStatus||xe({status:"saving",message:"Saving changes."}),it&&clearTimeout(it),it=setTimeout(()=>{it=void 0,Ze()&&mi()},e))}function Ch(){Jt&&clearTimeout(Jt),Jt=void 0,yo=0}function Pn(e,t,r=0){if(!ze()||typeof window>"u"||e==="too_large")return;const n=_l[Math.min(yo,_l.length-1)],i=Math.max(n,r);yo+=1,Jt&&clearTimeout(Jt),Jt=setTimeout(()=>{Jt=void 0,!(!Ze()||wc())&&mi()},i),xe({status:"error",reason:e,message:`${t} Retrying in ${Math.round(i/1e3)}s.`})}function Xr(e){return typeof e=="string"&&e.startsWith("data:")&&e.length>mh}function Sh(e){var r,n;if(!Xr(e.downloadUrl)&&!Xr(e.storagePath))return e;const t={...e};return Xr(t.downloadUrl)&&((r=t.storagePath)!=null&&r.startsWith("blob:")?t.downloadUrl=t.storagePath:delete t.downloadUrl),Xr(t.storagePath)&&(t.storagePath=(n=t.downloadUrl)!=null&&n.startsWith("blob:")?t.downloadUrl:""),t}function Th(e){const t=e.attachments??[];return t.some(r=>Xr(r.dataUrl))?{...e,attachments:t.map(r=>{var i;if(!Xr(r.dataUrl))return r;const n={...r};return(i=n.storagePath)!=null&&i.startsWith("blob:")?n.dataUrl=n.storagePath:delete n.dataUrl,n})}:e}function kh(e){return{...e,documents:e.documents.map(Sh),communications:e.communications.map(Th)}}function Rh(e){const t=Date.now();if(t-Il<ph)return;Il=t;const r=Object.keys(ge).map(n=>({table:n,bytes:JSON.stringify(ge[n]).length})).sort((n,i)=>i.bytes-n.bytes).slice(0,8);console.warn("[db] State snapshot too large for safe sync",{bytes:e,biggestTables:r})}async function Eh(){if(!ze()||!ut)return!1;let e=!1;for(const t of ge.documents)if(lo(t.downloadUrl))try{const r=await gl(t.downloadUrl,t.fileType);r.startsWith("blob:")&&(t.downloadUrl=r,(!t.storagePath||t.storagePath.startsWith("data:"))&&(t.storagePath=r),e=!0)}catch(r){console.warn("[db] State blob upload failed for document",t.id,r)}for(const t of ge.communications)for(const r of t.attachments??[])if(lo(r.dataUrl))try{const n=await gl(r.dataUrl,r.fileType);n.startsWith("blob:")&&(r.dataUrl=n,r.storagePath??(r.storagePath=n),e=!0)}catch(n){console.warn("[db] State blob upload failed for communication attachment",r.id,n)}return e&&hn(),e}async function mi(e={}){if(!Ze())return!1;if(br&&!e.keepalive)return Xn=!0,br;const t=dm(e);return e.keepalive||(br=t,t.finally(()=>{br===t&&(br=void 0),Xn&&(Xn=!1,_a(0,{skipStatus:!0}))}
20)),t}async function dm(e={}){var o,c;if(!Ze())return!1;const t=Ne();if(!ze())return xe({status:"local-only",reason:"not_configured",message:"Cloud backup is not connected in this environment."}),!1;if(!ut)return xe({status:"saving",message:"Waiting for cloud state before uploading local changes."}),!1;if(await Eh(),!Ze()||Ne()!==t)return!1;const r=ya,n=Ia??JSON.stringify(ge),i=Xi,a=em();let s;try{s=await Hy(n,i,a)}catch(d){return d instanceof De&&d.reason==="too_large"?(va=!0,wa=n,Wu=a,Xn=!1,it&&(clearTimeout(it),it=void 0),Rh(Ir(n)),xe({status:"error",reason:"too_large",message:"Changes are saved locally, but the cloud transfer exceeds its safe size limit."})):(xe({status:"error",reason:"server",message:"The cloud transfer could not be prepared. Your local changes are preserved."}),Pn("server","The cloud transfer could not be prepared.")),!1}if(!Ze()||Ne()!==t)return!1;va=!1,wa=void 0,xe({status:"saving",message:"Saving changes."});try{const{response:d,payload:m}=await nm(`${Ju()}/state/${encodeURIComponent(Zu())}`,{method:"PUT",headers:Xu(),body:s,keepalive:e.keepalive}),p=await Vu(m);if(!Ze()||Ne()!==t)return!1;if(d.status===409){p&&Object.prototype.hasOwnProperty.call(p,"revision")&&(Xi=typeof p.revision=="number"?p.revision:null);const u=sm(p==null?void 0:p.snapshot);return u&&(ge=La(ge,u),hn(),Zt()),(e.attempt??0)<5?dm({attempt:(e.attempt??0)+1}):(xe({status:"error",reason:"conflict",message:"Cloud save conflict could not be resolved automatically."}),Pn("conflict","Cloud save conflict."),!1)}if(!d.ok){const u=(p==null?void 0:p.error)==="state_sync_temporarily_unavailable"?"server":tm(d.status),f=p!=null&&p.error?`Cloud save failed: ${p.error}.`:`Cloud save failed: ${d.status}.`;return xe({status:"error",reason:u,message:f}),Pn(u,f,rm(((c=(o=d.headers)==null?void 0:o.get)==null?void 0:c.call(o,"retry-after"))??null)),!1}return(p==null?void 0:p.ok)!==!0||!Number.isInteger(p.revision)||(p.revision??-1)<0||!p.snapshot||typeof p.snapshot!="object"||Array.isArray(p.snapshot)?(xe({status:"error",reason:"server",message:"The cloud save has not been confirmed. Your local changes are preserved."}),Pn("server","Cloud save acknowledgement was incomplete."),!1):(Xi=p.revision,ba=structuredClone(p.snapshot),ge=Uy(ge,JSON.parse(n),ba),hn(),Ch(),ha=Math.max(ha,r),ya>r?(Xn=!0,xe({status:"saving",message:"Saving newer changes."})):xe({status:"synced",message:"Synced with saved server data."}),Zt(),!0)}catch(d){console.warn("[db] Supabase state write failed",d);const m=d instanceof Error?d.message:"Network error while saving cloud state.",p=d instanceof De?d.reason==="too_large"?"too_large":"server":"network";return xe({status:"error",reason:p,message:m}),Pn(p,m),!1}}function hn(){if(typeof window>"u")return;const e=JSON.stringify(vh(ge));try{window.sessionStorage.setItem(wr,e)}catch{}const t=JSON.stringify(Ih(ge));try{window.sessionStorage.setItem(vr,t)}catch{}try{const r=JSON.stringify(ge);Ia=r,r!==wa&&(va=!1);const n=window.localStorage.getItem(at);if(!!n&&n!==r&&(ds===0||Date.now()-ds>=fh))try{for(let a=ju;a>1;a-=1){const s=window.localStorage.getItem(`${Zi}.${a-1}`);s&&window.localStorage.setItem(`${Zi}.${a}`,s)}window.localStorage.setItem(`${Zi}.1`,n),ds=Date.now()}catch{}window.localStorage.setItem(at,r);try{window.localStorage.setItem(wr,e)}catch{}try{window.localStorage.setItem(vr,t)}catch{}}catch{try{const r=JSON.stringify(kh(ge));window.localStorage.setItem(at,r);try{window.localStorage.setItem(wr,e)}catch{}try{window.localStorage.setItem(vr,t)}catch{}ze()&&yn.status!=="saving"&&xe({status:"saving",message:"Saving changes securely."})}catch{ze()?xe({status:"saving",reason:"local_quota",message:"Saving changes securely."}):xe({status:"local-only",reason:"local_quota",message:"Cloud backup is not connected in this environment."})}}}function jn(){ya+=1,hn(),_a(),Cc("local")}function xh(e){e&&e!=="documents"||zu(ge)||(ge=Gu(ge),jn())}const Io=new Set;
20function Zt(){Io.forEach(e=>{try{e()}catch{}})}function Ph(e){return Io.add(e),()=>{Io.delete(e)}}function yT(e){return bo.add(e),e(yn),()=>{bo.delete(e)}}mn({merge:!0});function Nh(){var r;if(typeof window>"u"||vl)return;vl=!0;const e=()=>{!Ze()||!ze()||!Ne()||wc()||document.visibilityState==="hidden"||!im()||mn({force:!0,merge:!0})};window.addEventListener("storage",n=>{Ze()&&(n.key!==at||!n.newValue||lm(_c(n.newValue)??ge,"storage"))}),(r=cm())==null||r.addEventListener("message",n=>{if(!Ze())return;const i=n.data;(i==null?void 0:i.type)!=="quotex-db-change"||i.key!==at||i.instanceId===tr||_h("broadcast")}),ze()?(window.setInterval(e,ch),window.addEventListener("focus",e),window.addEventListener("online",e)):xe({status:"local-only",reason:"not_configured",message:"Cloud backup is not connected in this environment."});const t=()=>{Ze()&&(!ze()||!it&&yn.status!=="saving"||(it&&(clearTimeout(it),it=void 0),mi({keepalive:!0})))};window.addEventListener("pagehide",()=>{t(),yh()}),window.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"?t():e()})}Nh();const l={reset(){{console.warn("Quotex blocked a production database reset to preserve agency data.");return}},snapshot(){return Sl(ge)},syncStatus(){return yn},confirmedRemoteSnapshot(){return ba?structuredClone(ba):void 0},async hydrateNow(){return ze()?(await mn({force:!0,merge:!0}),ut):!1},async syncNow(){return ze()?(ut||await mn({force:!0,merge:!0}),mi()):!1},async flushRemoteChanges(){if(!ze()||(ut||await mn({force:!0,merge:!0}),!ut||!Ze()))return!1;const e=ya;return br&&await br,ha>=e?!0:(it&&(clearTimeout(it),it=void 0),await mi()&&ha>=e)},list(e){return xh(e),structuredClone(Sl(ge)[e])},insert(e,t){const r=e==="deletedRows"?t:hh(t),n=ge[e],i=r.id,a=i?n.findIndex(s=>s.id===i):-1;if(e!=="deletedRows"&&i&&a>=0){n[a]=r;const s=ge.deletedRows.find(o=>o.table===String(e)&&o.rowId===i&&!o.restoredAt);s&&(s.restoredAt=Tr())}else n.push(r);return jn(),Zt(),r},update(e,t,r){const n=ge[e],i=n.findIndex(a=>a.id===t);return i===-1?null:(n[i]=e==="deletedRows"?{...n[i],...r}:bh(n[i],r),jn(),Zt(),n[i])},remove(e,t,r){var p;if(e==="deletedRows")return!1;const n=ge[e],i=n.findIndex(u=>u.id===t);if(i===-1)return!1;const a=n[i],s=Tr(),o=(r==null?void 0:r.actorId)??((p=Rr())==null?void 0:p.userId),c=typeof a.tenantId=="string"?a.tenantId:typeof a.agencyId=="string"?a.agencyId:void 0,d={id:wh(String(e),t),table:String(e),rowId:t,deletedAt:s,tenantId:c,actorId:o,reason:(r==null?void 0:r.reason)??"explicit_user_action",operationId:`archive_${Date.now()}_${Math.random().toString(36).slice(2,10)}`},m=ge.deletedRows.findIndex(u=>u.id===d.id);return m===-1?ge.deletedRows.push(d):ge.deletedRows[m]=d,jn(),Zt(),!0},restore(e,t){const r=ge.deletedRows.find(i=>i.table===String(e)&&i.rowId===t&&!i.restoredAt),n=ge[e].some(i=>i.id===t);return!r||!n?!1:(r.restoredAt=Tr(),jn(),Zt(),!0)}},qh=["agent","manager","csr"],Oh=["agent","manager","csr"],Dh=["manager"];function nt(e){return!!e&&qh.includes(e)}function kr(e){return!!e&&Oh.includes(e)}function ps(e){return!!e&&Dh.includes(e)}function Ht(e){switch(e){case"agent":return"Agent";case"manager":return"Manager";case"csr":return"CSR";case"master_admin":return"Master admin";case"customer":return"Customer";default:return"Staff"}}function hT(e,t){return e.filter(r=>(t===void 0||r.tenantId===t)&&r.active!==!1&&kr(r.role)).sort((r,n)=>{const i=s=>s==="manager"?0:s==="agent"?1:s==="csr"?2:3;return i(r.role)-i(n.role)||r.name.localeCompare(n.name)})}function kl(e,t){return e.filter(r=>r.tenantId===t&&r.active&&nt(r.role)).length}const um=ce.createContext(null),Rl="quotex.auth.sessionChanged.v2",Lh=["quotex.jwt","quotex.auth.serverUser.v1","quotex.auth.userId.v1"],Mh=2e4,El=[1e3,2e3,5e3,1e4,3e4],$h=900*1e3,xl=60*1e3;function Fh({children:e}){const[t,r]=ce.useState(null),[n,i]=ce.useState(!0),a=ce.useRef(null),s=ce.useCallback(C=>{const k=a.current;if(a.current=C,r(C),((k==null?void 0:k.id)!==(C==null?void 0:C.id)||(k==null?void 0:k.tenantId)!==(C==null?void 0:C.tenantId)||(k==null?void 0:k.role)!==(C==null?void 0:C.role))&&typeof window<"u")try{window.localStorage.setItem(Rl,String(Date.now()))}catch{}},[]),o=ce.useCallback(()=>{Ci(),s(null)},[s]),c=ce.useCallback(async(C,k)=>{var q;const O=((q=C.token)==null?void 0:q.trim())||(k==null?void 0:k.trim());if(!O||!C.user)return o(),{ok:!1,reason:"no_session"};const x=Uh(C.user);if(!x)return o(),{ok:!1,reason:"wrong_portal"};ss(O),Nl();const $=Pl(x);return $.role==="customer"&&dc()&&(await ql(),Ne()!==O)?{ok:!1,reason:"no_session"}:(Vh($),jh(C.customerProfile,$),s($),$.role!=="customer"&&ql(),{ok:!0,user:$})},[o,s]),d=ce.useCallback(async()=>{const C=Ne();if(!C)return s(null),"complete";const k=await Ct("session",{method:"GET"},!0);
20return k.ok?(Ne()!==C||await c(k.json,C),"complete"):k.reason==="server_unreachable"||k.reason==="rate_limited"?"retry":(Ci(),s(null),"complete")},[c,s]);ce.useEffect(()=>{Qh(),Nl();let C=!1,k,O=0;const x=async()=>{const $=await d().catch(()=>"retry");if(!C){if($==="retry"){const q=El[Math.min(O,El.length-1)];O+=1,k=globalThis.setTimeout(()=>void x(),q);return}i(!1)}};return x(),()=>{C=!0,k&&globalThis.clearTimeout(k)}},[d]),ce.useEffect(()=>{if(!t)return;let C=!1,k;const O=()=>{var B;if(C)return;const $=(B=Rr())==null?void 0:B.expiresAt,q=$?Math.max(1e3,$-Date.now()-$h):xl;k=globalThis.setTimeout(()=>void x(),q)},x=async()=>{const $=Ne();if(!$||C)return;const q=await Ct("session",{method:"GET"},!0);if(!(C||Ne()!==$)){if(q.ok&&q.json.token){ss(q.json.token),O();return}if(!q.ok&&(q.reason==="server_unreachable"||q.reason==="rate_limited")){k=globalThis.setTimeout(()=>void x(),xl);return}o()}};return O(),()=>{C=!0,k&&globalThis.clearTimeout(k)}},[o,t]),ce.useEffect(()=>{if(typeof window>"u")return;const C=k=>{if(!(k.key!=="quotex.authToken"&&k.key!==Rl)){if(k.key==="quotex.authToken"){k.newValue?ss(k.newValue):Ci();const O=Rr(),x=a.current;if(k.newValue&&x&&(O==null?void 0:O.userId)===x.id&&O.tenantId===x.tenantId&&O.role===x.role)return}d()}};return window.addEventListener("storage",C),()=>window.removeEventListener("storage",C)},[d]);const m=ce.useCallback(async(C,k,O,x)=>{Ci(),s(null);const $=await Ct("login",{method:"POST",body:JSON.stringify({scope:C,identifier:k.trim().toLowerCase(),password:O,...x?{tenantId:x}:{},...C==="customer"?{sessionSurface:ll()==="agencyApp"?"client_app":"web"}:{}})});if(!$.ok)return{ok:!1,reason:$.reason};const q=await c($.json);return q.ok&&!Hh(q.user.role,C)?(o(),{ok:!1,reason:"wrong_portal"}):q},[c,o,s]),p=ce.useCallback((C,k,O)=>m("customer",C,k,O),[m]),u=ce.useCallback((C,k)=>m("staff",C,k),[m]),f=ce.useCallback((C,k)=>m("master",C,k),[m]),g=ce.useCallback(async C=>{const k=await Ct("register",{method:"POST",body:JSON.stringify({scope:"customer",...C,email:C.email.trim().toLowerCase(),sessionSurface:ll()==="agencyApp"?"client_app":"web"})});return k.ok?c(k.json):{ok:!1,reason:k.reason}},[c]),y=ce.useCallback(async C=>{const k=await Ct("register",{method:"POST",body:JSON.stringify({scope:"staff",...C,agencyCode:C.agencyCode.trim().toUpperCase(),businessEmail:C.businessEmail.trim().toLowerCase()})});if(!k.ok)return{ok:!1,reason:k.errorCode??k.reason};const O=await c(k.json);return!O.ok||!nt(O.user.role)?(o(),{ok:!1,reason:O.ok?"wrong_portal":O.reason}):{ok:!0,user:O.user,agencyId:O.user.tenantId??""}},[c,o]),h=ce.useCallback(async C=>{const k=C.name.trim(),O=C.email.trim().toLowerCase();if(!k)return{ok:!1,reason:"missing_name"};if(!/^\S+@\S+\.\S+$/.test(O))return{ok:!1,reason:"invalid_email"};if(C.password.length<12)return{ok:!1,reason:"weak_password"};const x=await Ct("master/create",{method:"POST",body:JSON.stringify({name:k,email:O,password:C.password})});if(!x.ok)return{ok:!1,reason:x.status===409?"exists":"server_unavailable"};const $=await c(x.json);return!$.ok||$.user.role!=="master_admin"?{ok:!1,reason:"server_unavailable"}:{ok:!0,user:$.user}},[c]),w=ce.useCallback(async(C,k,O)=>{const x=await Ct("password/reset-request",{method:"POST",body:JSON.stringify({email:k.trim().toLowerCase(),scope:C,tenantId:O})});return x.ok?{ok:!0}:{ok:!1,reason:x.reason}},[]),T=ce.useCallback((C,k)=>w("customer",C,k),[w]),b=ce.useCallback(async(C,k)=>{if(!a.current)return{ok:!1,reason:"Not signed in."};if(k.length<8)return{ok:!1,reason:"New password must be at least 8 characters."};const O=await Ct("password/change",{method:"POST",body:JSON.stringify({currentPassword:C,newPassword:k})},!0);if(!O.ok)return{ok:!1,reason:Ol(O.reason)};const x=await c(O.json);return x.ok?{ok:!0}:{ok:!1,reason:Ol(x.reason)}},[c]),_=ce.useCallback(()=>{Ct("logout",{method:"POST"},!0),o()},[o]),A=ce.useCallback(()=>{const C=a.current;if(!C)return null;const k=Pl(C);return a.current=k,r(k),k},[]),v=ce.useCallback((...C)=>!!(a.current&&C.includes(a.current.role)),[]),S=ce.useMemo(()=>({user:t,loading:n,signInCustomer:p,signInStaff:u,signInMaster:f,registerCustomer:g,registerStaff:y,createMasterAccount:h,requestPasswordReset:w,resetCustomerPassword:T,changeMyPassword:b,signOut:_,refreshUser:A,hasRole:v}),[t,n,p,u,f,g,y,h,w,T,b,_,A,v]);
20return J.jsx(um.Provider,{value:S,children:e})}async function Ct(e,t,r=!1){const n=new AbortController,i=globalThis.setTimeout(()=>n.abort(),Mh);try{const a=await fetch(`${Rt()}/auth/${e.replace(/^\/+/,"")}`,{...t,headers:{"content-type":"application/json",...r?Mr():{},...t.headers??{}},signal:n.signal,cache:"no-store"}),s=await Bh(a);if(!a.ok||s.ok===!1){const o=typeof s.reason=="string"?s.reason:typeof s.error=="string"?s.error:void 0;return{ok:!1,reason:Gh(o,a.status),errorCode:o,status:a.status}}return{ok:!0,json:s}}catch{return{ok:!1,reason:"server_unreachable"}}finally{globalThis.clearTimeout(i)}}async function Bh(e){try{return await e.json()}catch{return{}}}function Uh(e){var r,n,i;const t=e.role==="agency_owner"||e.role==="agency_admin"?"manager":e.role;return!((r=e.id)!=null&&r.trim())||!((n=e.email)!=null&&n.trim())||!((i=e.name)!=null&&i.trim())||!zh(t)||t!=="master_admin"&&!e.tenantId?null:{...e,role:t,email:e.email.trim().toLowerCase(),tenantId:t==="master_admin"?null:e.tenantId}}function Pl(e){const t=l.list("users").find(n=>n.id===e.id),r=e.role;return{...t??{},id:e.id,tenantId:r==="master_admin"?null:e.tenantId,branchId:e.branchId??(t==null?void 0:t.branchId),role:r,email:e.email.trim().toLowerCase(),businessEmail:(t==null?void 0:t.businessEmail)??e.email.trim().toLowerCase(),name:e.name,generatedPassword:void 0,staffAccessStatus:"active",profileCompleted:(t==null?void 0:t.profileCompleted)??!0,active:!0,createdAt:(t==null?void 0:t.createdAt)??new Date().toISOString()}}function Vh(e){const t=l.list("users").find(r=>r.id===e.id);t?l.update("users",t.id,e):l.insert("users",e)}function jh(e,t){if(!e||t.role!=="customer"||!t.tenantId||e.userId!==t.id||e.tenantId!==t.tenantId||!e.id||!e.name||!e.email||!e.createdAt)return;const r=l.list("customers").find(i=>i.id===e.id);if(r&&(r.tenantId!==t.tenantId||r.userId!==t.id))return;const n={id:e.id,tenantId:t.tenantId,userId:t.id,name:e.name,email:e.email,phone:e.phone,mailingAddress:e.mailingAddress,branchId:e.branchId,assignedAgentId:e.assignedAgentId,assignedCsrId:e.assignedCsrId,marketingOptInEmail:e.marketingOptInEmail===!0,marketingOptInSms:e.marketingOptInSms===!0,createdAt:e.createdAt};r?l.update("customers",r.id,n):l.insert("customers",n)}function Nl(){for(const e of l.list("users"))e.generatedPassword&&l.update("users",e.id,{generatedPassword:void 0})}function Qh(){if(!(typeof window>"u")){for(const e of Lh){try{window.localStorage.removeItem(e)}catch{}try{window.sessionStorage.removeItem(e)}catch{}}try{window.sessionStorage.removeItem("quotex.authToken")}catch{}}}async function ql(){dc()&&await l.hydrateNow().catch(()=>!1)}function Hh(e,t){return t==="customer"?e==="customer":t==="master"?e==="master_admin":nt(e)}function zh(e){return["customer","agent","manager","csr","master_admin"].includes(e)}function Gh(e,t){return e==="invalid_credentials"||e==="account_not_found"||e==="account_disabled"||e==="agency_inactive"||e==="app_not_in_plan"||e==="password_not_set"||e==="rate_limited"||e==="server_unreachable"||e==="wrong_portal"||e==="no_session"?e:t===404?"account_not_found":t===403?"account_disabled":t===409?"password_not_set":t===429?"rate_limited":t&&t>=500?"server_unreachable":"invalid_credentials"}function Ol(e,t){return e==="account_not_found"?"Email or password is incorrect.":e==="account_disabled"?"This account has been disabled. Contact your administrator.":e==="agency_inactive"?"Your agency's subscription is inactive.":e==="app_not_in_plan"?"Your agency has not activated the Quotex client app. Use your agency website or contact your agency.":e==="password_not_set"?"Your account doesn't have a password yet — use 'Forgot password' to set one.":e==="rate_limited"?"Too many attempts. Try again in a minute.":e==="server_unreachable"?"Can't reach the sign-in server. Check your connection and try again.":e==="no_session"?"Your session has ended. Sign in again.":e==="wrong_portal"?t==="staff"?"This login belongs to a different portal — use the Customer or Master sign-in.":t==="customer"?"This login belongs to a different portal — use the Employee or Master sign-in.":"This login belongs to a different portal — use the Employee or Customer sign-in.":"Email or password is incorrect."}async function bT(e,t){const r=await Ct("password/reset",{method:"POST",body:JSON.stringify({token:e,newPassword:t})});return r.ok?{ok:!0}:{ok:!1,reason:r.reason}}function Wh(){const e=ce.useContext(um);if(!e)throw new Error("useAuth must be used inside AuthProvider");return e}
20class fs extends Error{constructor(t,r){super(r),this.code=t,this.name="AiResourceGovernorError"}}const Kh={cacheTtlMs:6e4,dedupe:!0,estimatedUnitCost:1,maxPerMinute:60,maxPayloadBytes:18e5},Yh={intake_parse:{cacheTtlMs:5*6e4,estimatedUnitCost:2},premium_estimate:{cacheTtlMs:10*6e4,estimatedUnitCost:3},carrier_match:{cacheTtlMs:10*6e4,estimatedUnitCost:2},marketing_message:{cacheTtlMs:5*6e4,estimatedUnitCost:1},email_subject:{cacheTtlMs:5*6e4,estimatedUnitCost:1},message_enhancement:{cacheTtlMs:2*6e4,estimatedUnitCost:1},contact_extraction:{cacheTtlMs:15*6e4,estimatedUnitCost:5},policy_extraction:{cacheTtlMs:15*6e4,estimatedUnitCost:5},asset_enrichment:{cacheTtlMs:30*6e4,estimatedUnitCost:4},property_imagery:{cacheTtlMs:1440*6e4,estimatedUnitCost:10,maxPerMinute:10},document_mapping:{cacheTtlMs:0,estimatedUnitCost:10,maxPerMinute:15},acord_mapping:{cacheTtlMs:0,estimatedUnitCost:8,maxPerMinute:20},carrier_appetite_parse:{cacheTtlMs:30*6e4,estimatedUnitCost:5},campaign_draft:{cacheTtlMs:5*6e4,estimatedUnitCost:2},marketing_creative:{cacheTtlMs:5*6e4,estimatedUnitCost:2},pamphlet_draft:{cacheTtlMs:10*6e4,estimatedUnitCost:3},portal_assistant:{cacheTtlMs:2e4,estimatedUnitCost:1,maxPerMinute:30},sort_intent:{cacheTtlMs:10*6e4,estimatedUnitCost:1,maxPerMinute:120}},Dl=500,gs=new Map,ki=new Map,ys=new Map,Ri=[];let Jh=0;function Zh(e){switch(e.replace(/^\/+/,"")){case"ai/parse-intake":return"intake_parse";case"ai/premium-estimate":return"premium_estimate";case"ai/carrier-match":return"carrier_match";case"ai/marketing-message":return"marketing_message";case"ai/email-subject":return"email_subject";case"ai/enhance-message":return"message_enhancement";case"ai/extract-contact":return"contact_extraction";case"ai/extract-policy":return"policy_extraction";case"ai/enrich-asset":return"asset_enrichment";case"ai/property-imagery":return"property_imagery";case"ai/document-map":return"document_mapping";case"ai/acord-map":return"acord_mapping";case"ai/parse-carrier-appetite":return"carrier_appetite_parse";case"ai/draft-campaign":return"campaign_draft";case"ai/marketing-creative":return"marketing_creative";case"ai/marketing-image":case"ai/draft-pamphlet":return"pamphlet_draft";case"ai/portal-assistant":return"portal_assistant";case"ai/sort-intent":return"sort_intent";default:return"unknown"}}async function Xh(e,t){const r=eb(e),n=Date.now(),i=wo(e.payload),a=rb(i),s=nb(i),o=e.tenantId||vo(e.payload)||"local-demo",c=`${o}:${e.feature}:${e.operation}:${a}`;if(s>r.maxPayloadBytes)throw jr(e,r,{tenantId:o,payloadHash:a,payloadBytes:s,status:"blocked",startedAtMs:n,reason:"payload_too_large"}),new fs("payload_too_large",`AI payload for ${e.feature} is ${s} bytes, above the ${r.maxPayloadBytes} byte limit.`);if(!e.forceRefresh){const m=gs.get(c);if(m&&m.expiresAt>Date.now())return jr(e,r,{tenantId:o,payloadHash:a,payloadBytes:s,status:"cache_hit",startedAtMs:n}),m.value;if(m&&gs.delete(c),r.dedupe&&ki.has(c))return jr(e,r,{tenantId:o,payloadHash:a,payloadBytes:s,status:"deduped",startedAtMs:n}),await ki.get(c)}if(!tb(o,e.feature,r.maxPerMinute))throw jr(e,r,{tenantId:o,payloadHash:a,payloadBytes:s,status:"blocked",startedAtMs:n,reason:"quota_exceeded"}),new fs("quota_exceeded",`AI quota exceeded for ${e.feature}. Try again after the current minute window resets.`);const d=(async()=>{try{const m=await t();return r.cacheTtlMs>0&&m!==null&&m!==void 0&&gs.set(c,{value:m,expiresAt:Date.now()+r.cacheTtlMs}),jr(e,r,{tenantId:o,payloadHash:a,payloadBytes:s,status:"success",startedAtMs:n}),m}catch(m){throw jr(e,r,{tenantId:o,payloadHash:a,payloadBytes:s,status:m instanceof fs?"blocked":"error",startedAtMs:n,reason:m instanceof Error?m.message:"unknown_error"}),m}finally{ki.delete(c)}})();return r.dedupe&&ki.set(c,d),d}function eb(e){return{...Kh,...Yh[e.feature]??{},...e.policy??{}}}function tb(e,t,r){const n=`${e}:${t}`,i=Date.now(),a=i-6e4,s=(ys.get(n)??[]).filter(o=>o>=a);return s.length>=r?(ys.set(n,s),!1):(s.push(i),ys.set(n,s),!0)}function jr(e,t,r){const n=r.status==="cache_hit"||r.status==="deduped"||r.status==="blocked"?0:t.estimatedUnitCost;Ri.push({id:`ai_evt_${++Jh}`,feature:e.feature,operation:e.operation,tenantId:r.tenantId,userId:e.userId,payloadHash:r.payloadHash,payloadBytes:r.payloadBytes,status:r.status,cached:r.status==="cache_hit",deduped:r.status==="deduped",estimatedUnitCost:n,startedAt:new Date(r.startedAtMs).toISOString(),durationMs:Math.max(0,Date.now()-r.startedAtMs),reason:r.reason}),Ri.length>Dl&&Ri.splice(0,Ri.length-Dl)}function vo(e){if(!e||typeof e!="object")return;if(Array.isArray(e)){for(const n of e){const i=vo(n);if(i)return i}return}const t=e,r=t.tenantId??t.agencyId;if(typeof r=="string"&&r.trim())return r.trim();for(const n of Object.values(t)){const i=vo(n);if(i)return i}}function wo(e){if(e==null)return String(e);if(typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return`[${e.map(r=>wo(r)).join(",")}]`;const t=e;return`{${Object.keys(t).sort().map(r=>`${JSON.stringify(r)}:${wo(t[r])}`).join(",")}}`}function rb(e){let t=2166136261;for(let r=0;r<e.length;r+=1)t^=e.charCodeAt(r),t=Math.imul(t,16777619);return(t>>>0).toString(16).padStart(8,"0")}function nb(e){return typeof Blob<"u"?new Blob([e]).size:e.length}function ib(){const e=Sc();return mm(e)?!1:!!(e==="server"||Rt()||pm())}function ab(){const e=Rt();return e==="/api/app/api"?"/api":e.endsWith("/api/app/api")?e.slice(0,-8):e}
20class ea extends Error{constructor(r){super(r.message);ts(this,"detail");this.name="AiGatewayUnavailableError",this.detail=r}}async function Et(e,t,r={}){const n=Sc();if(!(ib()||r.requireServer===!0&&!mm(n))){const a={path:e,message:"Server AI is not enabled for this environment.",error:"server_ai_disabled"};if(r.requireServer)throw _o(a),new ea(a);return null}try{return await Xh({feature:Zh(e),operation:e,payload:t},async()=>{const a=new AbortController,s=typeof window<"u"?window.setTimeout:setTimeout,o=typeof window<"u"?window.clearTimeout:clearTimeout,c=s(()=>a.abort(),r.timeoutMs??2e4);try{const d={method:"POST",headers:mb(),body:JSON.stringify(t)};cb(a.signal)&&(d.signal=a.signal);const m=`${ab()}${e}`;if(m.startsWith("/")&&(typeof window>"u"||lb())&&!db()){if(r.requireServer){const u={path:e,message:"Server AI requires a browser or absolute API base URL.",error:"server_ai_unreachable"};throw _o(u),new ea(u)}return null}const p=await fetch(m,d);if(!p.ok){const u=await ub(p),f=Ll({path:e,status:p.status,message:(u==null?void 0:u.message)||(u==null?void 0:u.error)||`AI request failed with HTTP ${p.status}.`,error:u==null?void 0:u.error});return r.softFail||Ml(f),null}return await p.json()}finally{o(c)}})}catch(a){if(a instanceof ea)throw a;if(r.softFail)return null;const s=Ll({path:e,message:a instanceof Error?a.message:"AI request could not be completed.",error:a instanceof Error?a.name:"ai_request_failed"});return Ml(s),null}}function Ll(e){const t=e.message??"",r=e.error??"",n=`${t} ${r}`.toLowerCase();return e.status===504||n.includes("function_invocation_timeout")||n.includes("timeout")||n.includes("aborterror")||n.includes("aborted")?{...e,message:e.path==="/ai/marketing-creative"?"The campaign draft is taking longer than expected. Your previous draft is unchanged. Please try generating the campaign again.":e.path==="/ai/marketing-image"?"The campaign image is taking longer than expected. Your copy is kept. Please retry the image before approving the campaign.":"AI mapping is taking longer than expected. Any unanswered fields will stay blank for review.",error:"timeout"}:e}function Sc(){return Tn("VITE_AI_MODE").toLowerCase()}function mm(e=Sc()){return e==="off"||e==="disabled"}function sb(){return!ob()&&Tn("VITE_ALLOW_BROWSER_AI_FALLBACKS")==="true"}function ob(){return pm()}function pm(){var e,t;try{return!!((t=(e=import.meta)==null?void 0:e.env)!=null&&t.PROD)}catch{return!1}}function Ml(e){if(_o(e),!sb())throw new ea(e)}function cb(e){if(typeof Request>"u")return!0;try{return new Request("http://quotex.local/abort-check",{signal:e}),!0}catch{return!1}}function lb(){var e,t,r,n;try{if(((t=(e=import.meta)==null?void 0:e.env)==null?void 0:t.MODE)==="test")return!0}catch{}try{return((n=(r=globalThis.process)==null?void 0:r.env)==null?void 0:n.VITEST)==="true"}catch{return!1}}function db(){try{const e=globalThis.fetch;return!!(e!=null&&e.mock||e!=null&&e._isMockFunction)}catch{return!1}}async function ub(e){try{const t=await e.clone().json();return{message:typeof t.message=="string"?t.message:void 0,error:typeof t.error=="string"?t.error:void 0}}catch{try{const t=await e.clone().text();return t?{message:t.slice(0,300)}:null}catch{return null}}}function _o(e){typeof console<"u"&&console.warn("[quotex-ai-gateway-failure]",e),!(typeof window>"u")&&window.dispatchEvent(new CustomEvent("quotex-ai-gateway-failure",{detail:e}))}function mb(){const e={"content-type":"application/json"},t=pb();t&&(e.authorization=`Bearer ${t}`);const r=fb();return r&&(e["x-user-id"]=r.id,e["x-user-role"]=r.role,r.tenantId&&(e["x-tenant-id"]=r.tenantId),r.branchId&&(e["x-branch-id"]=r.branchId)),e}function pb(){return typeof window>"u"?null:Ne()}function fb(){const e=Rr();return e?{id:e.userId,role:e.role,tenantId:e.tenantId,branchId:e.branchId}:null}const gb=[{key:"riskAddress",label:"Property address",inputType:"address",required:!0,placeholder:"Street, city, state, ZIP",publicHints:["address","risk address"]},{key:"occupancy",label:"Occupancy",inputType:"select",required:!0,options:["Primary","Secondary / seasonal","Tenant occupied","Vacant","Condo","Dwelling fire"],publicHints:["occupancy"],questionHints:["occupancy"]},{key:"ownershipAndLien",label:"Ownership and lien details",inputType:"textarea",questionHints:["ownership","lien","mortgagee","loan"]},{key:"countyTownship",label:"County and township / municipality",inputType:"text",publicHints:["county","township","municipality"]},{key:"priorOrMailingAddress",label:"Prior or mailing address in the last 3 years",inputType:"address",questionHints:["prior address","mailing address"]},{key:"yearBuilt",label:"Year built",inputType:"number",required:!0,publicHints:["year built"]},{key:"squareFeet",label:"Square footage",inputType:"number",publicHints:["square footage","sq ft"]},{key:"unitsWallHeight",label:"Number of units and wall height",inputType:"textarea",publicHints:["units","wall height"],questionHints:["number of units","wall height"]},{key:"homeStyle",label:"Home style",inputType:"select",options:["1 story","1.5 story","1.75 story","2 story","Split-level","Condo","Apartment","Manufactured home","Other"],publicHints:["style","stories"]}
20,{key:"foundationDetails",label:"Foundation details",inputType:"textarea",publicHints:["foundation","basement"],questionHints:["foundation","basement","crawl space"]},{key:"constructionType",label:"Construction type",inputType:"select",options:["Frame","Masonry","Stucco over masonry","ICF concrete","Other / unknown"],publicHints:["construction"]},{key:"frameAndExterior",label:"Frame and exterior materials",inputType:"textarea",publicHints:["frame","exterior","siding","brick","stone","stucco"],questionHints:["frame","exterior"]},{key:"roofShapePitch",label:"Roof shape and pitch",inputType:"textarea",publicHints:["roof shape","roof pitch","gable","hip","flat"],questionHints:["roof shape","roof pitch"]},{key:"roofMaterial",label:"Roof material",inputType:"select",options:["Shingle","Tile","Metal","Slate","Flat / membrane","Other / unknown"],publicHints:["roof material","roof"],questionHints:["roof age","partial replacements"]},{key:"roofYear",label:"Roof year",inputType:"number",publicHints:["roof"],questionHints:["roof age","partial replacements"]},{key:"skylights",label:"Skylights",inputType:"textarea",publicHints:["skylight"],questionHints:["skylight"]},{key:"attachedStructures",label:"Attached structures",inputType:"textarea",publicHints:["porch","deck","attached garage","carport","balcony"],questionHints:["attached structures","porch","deck","garage"]},{key:"detachedStructuresAndRecreation",label:"Detached structures and recreational features",inputType:"textarea",publicHints:["detached garage","shed","pool","gazebo"],questionHints:["pool","hot tub","trampoline","shed","detached garage"]},{key:"interiorFinishes",label:"Interior walls, ceilings, and floors",inputType:"textarea",questionHints:["interior","walls","ceilings","floors"]},{key:"kitchenBathQuality",label:"Kitchen and bathroom quality",inputType:"textarea",questionHints:["kitchen","bath"]},{key:"interiorFeatures",label:"Interior features",inputType:"textarea",questionHints:["wet bar","fireplace","wood stove","spiral staircase","attic","central vacuum"]},{key:"heatingCoolingSystems",label:"Heating and cooling systems",inputType:"textarea",publicHints:["heating","cooling","central air","hvac"],questionHints:["heating","cooling","central AC"]},{key:"electricalAndSafetySystems",label:"Electrical and safety systems",inputType:"textarea",publicHints:["electrical","alarm","sprinkler"],questionHints:["electrical","alarm","sprinkler","surveillance"]},{key:"homeUpdates",label:"Updates and remodels",inputType:"textarea",publicHints:["updates","renovation","remodel"],questionHints:["roof receipt","heating","plumbing","electrical","addition","remodel"]},{key:"distanceToCoast",label:"Distance to coast",inputType:"text",placeholder:"e.g., 0.8 miles",publicHints:["distance to coast"]},{key:"lotSize",label:"Lot size",inputType:"text",publicHints:["lot size","acreage","acres"]},{key:"floodZone",label:"Flood zone",inputType:"text",publicHints:["flood zone"]},{key:"windMitigation",label:"Wind mitigation details",inputType:"textarea",placeholder:"Certificate year, opening protection, roof deck/uplift details",questionHints:["wind-mitigation","wind mitigation","uplift"]},{key:"lossHistory",label:"Loss history",inputType:"textarea",placeholder:"Carrier, cause, paid amount, and date for any losses",questionHints:["losses","loss history","carrier, paid amount"]},{key:"animalsAndLiabilityExposures",label:"Animals, business, rental, and liability exposures",inputType:"textarea",questionHints:["dogs","bite","daycare","business","rental","vacant land","pond","recreational vehicles"]},{key:"scheduledProperty",label:"Scheduled property",inputType:"textarea",questionHints:["jewelry","watches","guns","furs","art","collections","safe","vault"]},{key:"requestedHomeEndorsements",label:"Requested endorsements and special coverages",inputType:"textarea",questionHints:["water backup","personal injury","ordinance","loss assessment","service line","equipment breakdown","id theft"]},{key:"homeDiscountsAndProtection",label:"Discounts and protection details",inputType:"textarea",questionHints:["full pay","escrow","non-smoker","generator","protective","hydrant","fire station","multi-policy"]}],yb=[{key:"vin",label:"VIN",inputType:"text",required:!0,placeholder:"17-ch
20aracter VIN",publicHints:["vin","vin-decoded","trim"]},{key:"year",label:"Year",inputType:"number",required:!0,publicHints:["year / make / model","year"]},{key:"make",label:"Make",inputType:"text",required:!0,publicHints:["year / make / model","make"]},{key:"model",label:"Model",inputType:"text",required:!0,publicHints:["year / make / model","model"]},{key:"statedValue",label:"Stated value",inputType:"currency",publicHints:["stated value","market value","msrp"],questionHints:["stated value"]},{key:"purchaseAndOwnership",label:"Purchase date, new/used, own/lien/lease, and name on title",inputType:"textarea",questionHints:["purchase date","new","used","own","lien","lease","title"]},{key:"garagingAddress",label:"Garaging address",inputType:"address",required:!0,publicHints:["garaging"],placeholder:"Where the vehicle is normally kept"},{key:"lienholderOrLessor",label:"Lienholder or lessor name and address",inputType:"textarea",questionHints:["lienholder","lessor","lease","holder"]},{key:"annualMileage",label:"Annual mileage",inputType:"number",questionHints:["annual mileage"]},{key:"commuteAndAnnualMileage",label:"Distance one way, days per week, and annual mileage",inputType:"textarea",questionHints:["distance one way","days per week","annual mileage"]},{key:"primaryUse",label:"Primary use",inputType:"select",options:["Pleasure","Commute","Business","Collector / limited use","Other"],questionHints:["primary use","pleasure","commute","business"]},{key:"businessDeliveryRideshareUse",label:"Business, delivery, rideshare, advertising, or wrapped vehicle use",inputType:"textarea",questionHints:["business","delivery","uber","lyft","advertising","wrap"]},{key:"principalOperator",label:"Principal operator",inputType:"text",questionHints:["principal operator"]},{key:"vehicleSafetyAndDamage",label:"Safety features and existing damage",inputType:"textarea",publicHints:["safety features","blind spot","automatic braking","telematics"],questionHints:["blind spot","auto brake","onstar","damage"]},{key:"customEquipmentOrModifications",label:"Customized equipment or modifications",inputType:"textarea",questionHints:["custom","lift","cap","tires","snow plow","modifications"]},{key:"coverageLimits",label:"Requested liability, property damage, and UM/UIM limits",inputType:"textarea",questionHints:["split limits","csl","property damage","um","uim"]},{key:"physicalDamageDeductibles",label:"Comprehensive and collision coverage / deductibles",inputType:"textarea",questionHints:["comprehensive","collision","deductible","glass"]},{key:"roadsideRentalGap",label:"Roadside, rental, glass, gap, and travel coverage",inputType:"textarea",questionHints:["roadside","rental","glass","gap","travel"]},{key:"drivers",label:"Drivers",inputType:"textarea",placeholder:"Names, DOBs, license numbers, and years insured",questionHints:["all drivers","drivers"]},{key:"driverIncidents",label:"Tickets, accidents, PIP, deer, glass, or other claims",inputType:"textarea",questionHints:["tickets","accidents","pip","deer","glass","claims"]},{key:"driverEducationStudent",label:"Driver education and student details",inputType:"textarea",questionHints:["education","student","gpa","student distance"]},{key:"priorAutoCarrier",label:"Prior carrier, policy number, expiration date, term, and loss-free years",inputType:"textarea",questionHints:["prior carrier","policy number","expiration","loss-free"]},{key:"autoDiscountsAndPayment",label:"Discounts, groups, payment plan, health insurance, and deductible choices",inputType:"textarea",questionHints:["discount","group","payment","health insurance","deductible"]},{key:"ratingResidence",label:"Residence/rating details",inputType:"textarea",questionHints:["own","rent","house","apartment","condo","manufactured home"]},{key:"motorcycleOrSpecialVehicleDetails",label:"Motorcycle or special vehicle details",inputType:"textarea",questionHints:["motorcycle","cycle","helmet","custom value","medical benefits"]}],hb=[{key:"hin",label:"Hull ID / HIN",inputType:"text",required:!0,publicHints:["hull"]},{key:"year",label:"Year built",inputType:"number",required:!0,publicHints:["year built","year"]},{key:"make",label:"Builder / make",inputType:"text",required:!0,publicHints:["make"]},{key:"model",label:"Model",inputType:"text",publicHints:["model"]},{key:"length",label:"Length",inputType:"number",required:!0,publicHints:["hull length","length"]},{key:"hullMaterial",label:"Hull material",inputType:"select",options:["Fiberglass","Aluminum","Steel","Wood","Carbon / composite","Other"],publicHints:["hull material"]},{key:"marinaAddress",label:"Marina / mooring address",inputType:"address",required:!0,publicHints:["marina","mooring"],questionHints:["marina","slip"]},{key:"cruisingArea",label:"Cruising area",inputType:"text",placeholder:"e.g., Atlantic coast, Bahamas, Great Lakes",questionHints:["cruising area"]},{key:"hurricanePlan",label:"Hurricane plan",inputType:"textarea",questionHints:["hurricane plan"]}],bb=[{key:"assetIdentifier",label:"Serial, appraisal, or inventory ID",inputType:"text",publicHints:["serial","asset id","inventory id","appraisal number"]},{key:"itemType",label:"Item type",inputType:"text",required:!0,publicHints:["item type"]},{key:"itemDescription",label:"Item description",inputType:"textarea",required:!0,placeholder:"Stone, metal, designer, serial number, distinguishing details",questionHints:["item"]},{key:"appraisedValue",label:"Appraised value",inputType:"currency",required:!0,publicHints:["appraised value","value"],questionHints:["replacement value","appraisal"]},{key:"appraisalDate",label:"Appraisal date",inputType:"text",placeholder:"MM/YYYY",questionHints:["appraisal"]},{key:"appraiser",label:"Appraiser",inputType:"text",questionHints:["appraiser"]},{key:"storageLocation",label:"Storage when not worn",inputType:"select",options:["Home safe","Bank vault","On person","Dealer storage","Other"],publicHints:["storage location","storage"],questionHints:["storage"]},{key:"travelFrequency",label:"Travel frequency",inputType:"text",questionHints:["travel"]}],Ib=[{key:"assetIdentifier",label:"Policy or exposure reference",inputType:"text",publicHints:["policy number","reference","asset id"]},{key:"primaryResidenceAddress",label:"Primary residence address",inputType:"address",required:!0,publicHints:["address"]},{key:"requestedLimit",label:"Requested umbrella limit",inputType:"currency",required:!0,publicHints:["value","limit"]},{key:"underlyingLimits",label:"Underlying policy limits",inputType:"textarea",required:!0,placeholder:"Home, auto, watercraft, and excess limits currently carried",publicHints:["underlying policies"],questionHints:["underlying"]},{key:"householdDrivers",label:"Household drivers",inputType:"textarea",questionHints:["drivers"]},{key:"publicExposure",label:"Public exposure / board seats",inputType:"textarea",questionHints:["public-facing","board","media"]},{key:"propertyExposures",label:"Property exposures",inputType:"textarea",placeholder:"Pools, dogs, rentals, recreational vehicles, domestic staff, etc.",questionHints:["dog","pool","diving","slide"]}],vb=[{key:"primaryAddress",label:"Primary address",inputType:"address",required:!0,publicHints:["address"]},{key:"portfolioSummary",label:"Portfolio summary",inputType:"textarea",required:!0,placeholder:"Homes, autos, watercraft, jewelry, umbrella, business-owned assets, etc.",questionHints:["portfolio","details","describe"]},{key:"totalInsuredValue",label:"Total insured value",inputType:"currency",publicHints:["value"]},{key:"currentCarriers",label:"Current carriers / policies",inputType:"textarea",questionHints:["underlying","policies"]}],wb=[{key:"description",label:"Asset / exposure description",inputType:"textarea",required:!0,placeholder:"Describe exactly what is being insured.",questionHints:["describe","details"]},{key:"location",label:"Location / address",inputType:"address",required:!0,publicHints:["address","location"]},{key:"identifier",label:"Identifier",inputType:"text",placeholder:"Serial number, registration, parcel ID, or other lookup key",publicHints:["id","identifier","serial"]},{key:"useCase",label:"Use / operations",inputType:"textarea",required:!0,questionHints:["usage","operations","details"]},{key:"requestedCoverage",label:"Coverage requested",inputType:"textarea",questionHints:["coverage","limit"]}],Ma={coastal_home:gb,luxury_vehicle:yb,yacht:hb,jewelry:bb,umbrella_liability:Ib,full_portfolio:vb,other:wb},_b={coastal_home:{riskAddress:["propertyAddress","address","locationAddress","premisesAddress","primaryResidenceAddress"],ownershipAndLien:["ownershipLien","mortgageeInfo","mortgagee","lienholder","loanDetail
20s"],countyTownship:["county","township","municipality"],priorOrMailingAddress:["priorAddress","mailingAddress","previousAddress"],yearBuilt:["builtYear","constructionYear","year_built"],squareFeet:["squareFootage","sqft","sqFt","livingArea","livingAreaSqFt"],unitsWallHeight:["units","numberOfUnits","wallHeight"],homeStyle:["style","homeStyleType","stories","story"],foundationDetails:["foundation","basement","crawlSpace"],constructionType:["construction","constructionClass","wallConstruction"],frameAndExterior:["frameExterior","exterior","siding","exteriorMaterials"],roofShapePitch:["roofShape","roofPitch","roofStyle"],roofMaterial:["roof","roofCovering","roofType"],skylights:["skylight"],attachedStructures:["porchesDecksGarages","porches","decks","attachedGarage","carport"],detachedStructuresAndRecreation:["detachedStructures","poolTrampoline","pool","shed","detachedGarage"],interiorFinishes:["interior","wallsCeilingsFloors"],kitchenBathQuality:["kitchenBath","bathrooms","kitchenQuality","bathQuality"],interiorFeatures:["fireplaces","woodStove","wetBar","centralVacuum"],heatingCoolingSystems:["heatingCooling","hvac","heat","centralAir","ac"],electricalAndSafetySystems:["electricalSafety","electrical","alarmSystems","protectiveDevices"],homeUpdates:["updates","renovations","remodels"],distanceToCoast:["coastDistance","distanceFromCoast","distanceToWater"],lotSize:["acreage","acres","lotSqFt"],floodZone:["femaFloodZone"],windMitigation:["windMitigationDetails","windCert","windCertificate"],lossHistory:["losses","claims","claimsHistory"],animalsAndLiabilityExposures:["animals","dogs","liabilityExposures","businessRentalExposure"],scheduledProperty:["specialProperty","valuableArticles","jewelry","collections"],requestedHomeEndorsements:["endorsements","specialCoverages","requestedCoverages"],homeDiscountsAndProtection:["discounts","protectiveCredits","protectionDetails"]},luxury_vehicle:{vin:["VIN","vehicleVin"],statedValue:["vehicleStatedValue","marketValue","msrp","basePrice"],purchaseAndOwnership:["purchaseDate","ownershipStatus","titleOwner","ownedLeasedLien"],garagingAddress:["garageAddress","garagingAddressIfDifferent","vehicleGaragingAddress","vehicleLocation","storageAddress"],lienholderOrLessor:["lienholder","lessor","lossPayee","holderAddress"],annualMileage:["mileage","estimatedAnnualMileage"],commuteAndAnnualMileage:["commuteDetails","distanceOneWay","daysPerWeek"],primaryUse:["use","usage"],businessDeliveryRideshareUse:["businessUse","rideshareUse","deliveryUse","uberLyftUse","advertisingWrap"],principalOperator:["principalDriver","operator"],vehicleSafetyAndDamage:["safetyFeaturesDamage","safetyFeatures","existingDamage","telematics"],customEquipmentOrModifications:["modifications","customEquipment","customizedEquipment"],coverageLimits:["autoCoverageLimits","liabilityLimits","umLimits","uimLimits"],physicalDamageDeductibles:["deductibles","compCollision","comprehensiveCollision"],roadsideRentalGap:["roadsideRentalGlassGap","roadside","rental","gap"],drivers:["allDrivers","driverSchedule","driverOneDetails","driverTwoDetails"],driverIncidents:["ticketsAccidentsClaims","incidents","violations","claims"],driverEducationStudent:["educationStudent","studentDetails"],priorAutoCarrier:["priorCarrier","priorAuto","lossFreeYears"],autoDiscountsAndPayment:["discountsAndPayment","autoDiscounts","paymentPlan"],ratingResidence:["residenceRating","homeRating","ownRent"],motorcycleOrSpecialVehicleDetails:["motorcycleDetails","specialVehicleDetails"]},yacht:{hin:["HIN","hullId","hullIdentificationNumber"],marinaAddress:["address","mooringAddress","riskAddress","propertyAddress"],length:["hullLength","loa"],cruisingArea:["navigationArea","navigationTerritory"]},jewelry:{assetIdentifier:["serialNumber","inventoryId","appraisalNumber","referenceNumber"],appraisedValue:["value","estimatedValue","scheduledValue"],itemDescription:["description"],appraisalDate:["valuationDate"]},umbrella_liability:{assetIdentifier:["policyNumber","exposureReference","referenceNumber"],primaryResidenceAddress:["address","mailingAddress","propertyAddress","riskAddress"],requestedLimit:["limit","coverageLimit","estimatedValue"]},full_portfolio:{primaryAddress:["address","mailingAddress","propertyAddress","riskAddress","primaryResidenceAddress"],totalInsuredValue:["value","estimatedValue","portfolioValue"]},other:{location:["address","propertyAddress","riskAddress","premisesAddress"],identifier:["assetIdentifier","serialNumber","registration","referenceNumber"],requestedCoverage:["coverage","limit"]}};function Ab(e,t,r){var i;if(!t)return;if(Object.prototype.hasOwnProperty.call(t,r))return t[r];const n=((i=_b[e])==null?void 0:i[r])??[];for(const a of n)if(Object.prototype.hasOwnProperty.call(t,a))return t[a]}function $a(e,t){const r=Ma[e]??[],n={};for(const i of r){const a=Ab(e,t,i.key),s=Rb(a);s&&(n[i.key]=s)}return n}function Cb(e,t){const r=$a(e,t);return({coastal_home:["riskAddress"],luxury_vehicle:["garagingAddress"],yacht:["marinaAddress"],umbrella_liability:["primaryResidenceAddress"],full_portfolio:["primaryAddress"],other:["location"]}[e]??[]).map(a=>
20r[a]).find(Boolean)}function Sb(e,t,r,n){const i=$a(e,r),a=t.toLowerCase();if(e==="luxury_vehicle"&&(a.includes("vin-decoded")||a.includes("trim")))return;if(e==="luxury_vehicle"&&a.includes("year / make / model"))return $l([i.year,i.make,i.model]," ");if(e==="luxury_vehicle"&&(a.includes("garaging")||a.includes("address")))return i.garagingAddress;if(e==="yacht"&&a.includes("year built"))return i.year;if(e==="yacht"&&a.includes("hull length"))return i.length?`${i.length} ft`:void 0;if(e==="coastal_home"&&a.includes("roof"))return $l([i.roofMaterial,i.roofYear?`installed ${i.roofYear}`:""]," - ");if(a.includes("address")||a.includes("garaging")||a.includes("marina")||a.includes("mooring"))return Cb(e,i)??(n==null?void 0:n.address);if(a.includes("msrp")||a.includes("appraised")||a.includes("value"))return Co(i.appraisedValue||i.totalInsuredValue||i.requestedLimit)??(n!=null&&n.estimatedValue?Co(String(n.estimatedValue)):void 0);const s=(Ma[e]??[]).find(o=>Ao(o.publicHints,a));if(s)return Eb(s,i[s.key])}function Tb(e,t,r){const n=$a(e,r),i=t.toLowerCase();return(Ma[e]??[]).some(a=>!!n[a.key]&&(Ao(a.questionHints,i)||Ao(a.publicHints,i)))}function kb(e,t){const r=$a(e,t);return(Ma[e]??[]).map(n=>{const i=r[n.key];return i?`${n.label}: ${i}`:""}).filter(Boolean)}function Rb(e){return e==null?"":typeof e=="string"?e.trim():typeof e=="number"&&Number.isFinite(e)?String(e):typeof e=="boolean"?e?"Yes":"No":""}function Ao(e,t){return(e??[]).some(r=>{const n=r.toLowerCase();return t.includes(n)||n.includes(t)})}function Eb(e,t){if(t)return e.inputType==="currency"?Co(t):e.key==="squareFeet"?`${Number(t).toLocaleString()} sq ft`:t}function Co(e){if(!e)return;const t=Number(e.replace(/[$,]/g,""));return!Number.isFinite(t)||t<=0?e:`$${Math.round(t).toLocaleString()}`}function $l(e,t){const r=e.map(n=>n==null?void 0:n.trim()).filter(Boolean);return r.length>0?r.join(t):void 0}const xb={coastal_home:"Coastal Home",luxury_vehicle:"Luxury Vehicle",yacht:"Yacht",jewelry:"Jewelry",umbrella_liability:"Umbrella Liability",full_portfolio:"Full Portfolio",other:"Other"};function Bt(e){return String(e??"").replace(/[^A-Za-z0-9]/g,"").toUpperCase()}function fm(e){var a;const t=String(e??""),r=t.match(/\bVIN(?:\s+(?:NUMBER|NO\.?))?(?:\s+IS)?[\s:#-]*([A-HJ-NPR-Z0-9](?:[\s-]*[A-HJ-NPR-Z0-9]){16})(?=[\s.,;:!?)]|$)/i),n=Bt(r==null?void 0:r[1]);if(!pi(n))return n;const i=Bt((a=t.match(/\b[A-HJ-NPR-Z0-9]{17}\b/i))==null?void 0:a[0]);return pi(i)?void 0:i}function pi(e){return e?/[IOQ]/.test(e)?"VIN contains I, O, or Q, which are not valid in standard VINs.":e.length<17?"VIN is too short. A standard 17-character VIN is required before Quotex decodes vehicle records.":e.length>17?"VIN is too long. A standard 17-character VIN is required before Quotex decodes vehicle records.":null:"Enter a VIN to look up vehicle records."}async function Pb(e){if(!e)return null;const t=`https://vpic.nhtsa.dot.gov/api/vehicles/DecodeVin/${encodeURIComponent(e)}?format=json`;try{const r=await fetch(t);if(!r.ok)return null;const n=await r.json(),i=o=>{var m;const c=(m=n.Results)==null?void 0:m.find(p=>p.Variable===o),d=c==null?void 0:c.Value;return typeof d=="string"&&d.trim()!==""?d:void 0},a=i("Model Year"),s=a?Number(a):void 0;return{year:Number.isFinite(s)?s:void 0,make:i("Make"),model:i("Model"),bodyClass:i("Body Class"),errorCode:i("Error Code")}}catch{return null}}function gm(e){return/^[A-HJ-NPR-Z0-9]{17}$/i.test(e.trim())}function hs(e){const t=Bt(e);return t?`VIN ...${t.slice(-6)}`:"VIN pending"}function Ei(e){return e.trim().split(/\s+/).filter(Boolean).map(t=>/^[A-Za-z]{1,3}$/.test(t)||/^[0-9]+$/.test(t)||/^[A-Z]{1,3}[0-9]+$/i.test(t)||/^[0-9]+[A-Z]{1,3}$/i.test(t)||/^[A-Za-z]{1,2}[0-9]{1,3}$/i.test(t)?t.toUpperCase():t.toLowerCase().replace(/(^|[-/])([a-z])/g,(r,n,i)=>`${n}${i.toUpperCase()}`)).join(" ")}function ti(e){return xb[e]??"Asset"}function IT(e){return typeof e=="number"&&Number.isFinite(e)&&e>0?`$${Math.round(e).toLocaleString()}`:"Value pending"}function ta(e,t={}){const r=Bt(zt(t,["vin","vehicleVin","assetIdentifier"])),n=r?hs(r):"",i=ti(e);let s=Dt(t.customLabel);if(!s)if(e==="luxury_vehicle"){const c=Dt(t.year),d=Ei(Dt(t.make)),m=Ei(Dt(t.model)),p=[c,d,m].filter(
20Boolean).join(" ").trim();s=p&&n?`${p} - ${n}`:p||zt(t,["assetName","vehicleName"])||(n?`Vehicle - ${n}`:"Luxury Vehicle")}else if(e==="coastal_home")s=zt(t,["assetName","propertyAddress","riskAddress","address","primaryResidenceAddress"]),s&&(s=Fl(s)),s||(s="Coastal Home");else if(e==="yacht"){const c=Dt(t.year),d=Ei(Dt(t.make)),m=Ei(Dt(t.model)),p=zt(t,["assetName","vesselName","name"]),u=zt(t,["hin","hullId","hullIdentificationNumber"]);s=p||[c,d,m].filter(Boolean).join(" ").trim()||(u?`Yacht - HIN ...${Bt(u).slice(-6)}`:"Yacht")}else e==="jewelry"?s=zt(t,["assetName","description"])||"Jewelry Collection":s=zt(t,["assetName"])||Fl(zt(t,["propertyAddress","riskAddress","address","primaryResidenceAddress","garagingAddress"]))||i;const o=s.trim();return gm(o)?e==="luxury_vehicle"?`Vehicle - ${hs(o)}`:`${i} - ${hs(o)}`:o||i}function Dt(e){return e==null?"":String(e).trim()}function zt(e,t){for(const r of t){const n=Dt(e[r]);if(n)return n}return""}function Fl(e){var r,n;const t=Dt(e);return t?((n=(r=t.split(/\r?\n/)[0])==null?void 0:r.split(",")[0])==null?void 0:n.trim())||t:""}const So=.8,Nb=.55,qb=new Set(["model_estimate","public_web","imagery_vision","unknown"]),Ob=new Set(["model_estimate","unknown"]);function bs(e){return String(e??"").toLowerCase().replace(/&/g,"and").replace(/[^a-z0-9]+/g," ").trim()}function Ie(e,t){var a;if(!e)return;const r=bs(t),n=r.replace(/\s+/g,"");if(!r)return;const i=Object.entries(e).map(([s,o])=>{const c=bs(s),d=bs(o.fieldKey),m=c.replace(/\s+/g,""),p=d.replace(/\s+/g,""),u=c===r||d===r;return!u&&!(m===n||p===n)?null:{exact:u,item:o}}).filter(s=>!!s);if(i.length!==0)return(a=i.sort((s,o)=>{const c=s.item.sourceKind!=="model_estimate"&&s.item.sourceKind!=="unknown",d=o.item.sourceKind!=="model_estimate"&&o.item.sourceKind!=="unknown";return c!==d?c?-1:1:s.exact!==o.exact?s.exact?-1:1:s.item.verified!==o.item.verified?s.item.verified?-1:1:o.item.confidence-s.item.confidence})[0])==null?void 0:a.item}function Er(e){return!e||qb.has(e.sourceKind)?!1:e.allowDocumentAutofill&&e.verified&&e.confidence>=So}function He(e){return!e||e.reviewStatus==="conflict"||e.conflictReason||Ob.has(e.sourceKind)||(e.sourceKind==="web_search"||e.sourceKind==="public_web"||e.sourceKind==="government_api"||e.sourceKind==="commercial_provider")&&!Is(e)?!1:e.sourceKind==="imagery_vision"?e.confidence>=.82&&Is(e):(e.sourceKind==="web_search"||e.sourceKind==="public_web")&&e.reviewStatus==="needs_confirmation"?e.confidence>=.8&&Is(e):e.confidence<Nb?!1:e.verified||e.sourceKind==="public_web"||e.sourceKind==="web_search"||e.sourceKind==="public_geocoder"||e.sourceKind==="government_api"||e.sourceKind==="commercial_provider"}function Is(e){return Db(e.sourceUrl)?!0:/\bsource url:\s*https?:\/\//i.test(e.notes??"")}function Db(e){const t=String(e??"").trim();if(!t)return!1;try{const r=new URL(t);return r.protocol==="http:"||r.protocol==="https:"}catch{return!1}}function Lb(e,t,r){const n=e==null?void 0:e[r];return n!=null&&String(n).trim().length>0&&Er(Ie(t,r))}function ym(e){const t=[],r=[];let n=!1;const i=Number.isFinite(e.confidence)?e.confidence:void 0,a=Math.max(0,e.verifiedEvidenceCount??0),s=Math.max(a,e.evidenceCount??0);switch(e.tenantScoped===!1&&t.push("tenant_scope_missing"),e.usesOnlyProvidedFacts===!1&&t.push("unbounded_ai_facts"),e.touchesExternalSystem&&!e.humanApproved&&t.push("external_action_requires_human_approval"),e.sendsOutboundMessage&&!e.humanApproved&&t.push("outbound_message_requires_human_approval"),e.writesDocument&&a===0&&!e.humanReviewed&&t.push("document_write_requires_verified_evidence_or_review"),e.writesSystemOfRecord&&!e.humanReviewed&&(n=!0,r.push("system_record_write_requires_review")),i!==void 0&&i<So&&(e.writesDocument||e.writesSystemOfRecord)&&(n=!0,r.push("low_confidence_output_requires_review")),e.system){case"agency_data_import":e.humanReviewed||(n=!0,r.push("agency_import_is_review_queue_only"));break;case"carrier_portal_runner":e.touchesExternalSystem&&(s===0||a===0)&&t.push("carrier_runner_requires_verified_mapping_evidence");break;case"document_autofill":a===0&&!e.humanReviewed&&t.push("document_autofill_requires_source_backed_fields");break;case"quote_pricing":s===0&&r.push("pricing_is_preliminary_without_carrier_source");break;case"marketing_ai":e.humanApproved||(n=!0,r.push("marketing_send_requires_approval"));break;case"portal_assistant":e.writesSystemOfRecord&&!e.humanApproved&&t.push("assistant_mutation_requires_confirmation");break;case"custom_sort":(e.writesSystemOfRecord||e.sendsOutboundMessage||e.touchesExternalSystem)&&t.push("custom_sort_must_remain_read_only");break;case"public_data_sweep":i!==void 0&&i<So&&r.push("public_sweep_value_is_estimate_only");break}return{allowed:t.length===0&&!n,requiresHumanReview:n,blockedReasons:t,warnings:r,auditLabel:`${e.system}:${e.action}`}}const Mb=[{key:"appetite",label:"Carrier appetite / line fit",weight:40},{key:"valueBand",label:"Risk value inside carrier band",weight:20},{key:"state",label:"State availability",weight:20},{key:"pricing",label:"Pricing tendency",weight:20}];function hm(e,t,r){return Math.max(t,Math.min(r,e))}function $b(e){return typeof e!="number"||!Number.isFinite(e)||e<=0?0:hm((1.3-e)/.4,0,1)*.2}function vT(e){return typeof e!="number"||!Number.isFinite(e)?0:Math.round(hm(e,0,1)*100)}function Fb(e){return e>=90?"excellent":e>=80?"strong":e>=70?"good":e>=60?"review":"weak"}function wT(e){const t=Fb(e);return t==="excellent"?"border-emerald-200 bg-emerald-100 text-emerald-900":t==="strong"?"border-green-200 bg-green-50 text-green-800":t==="good"?"border-gold-200 bg-gold-50 text-gold-800":t==="review"?"border-amber-200 bg-amber-50 text-amber-800":"border-red-200 bg-red-50 text-red-700"}function _T(e){const t=Mb.map(r=>`${r.label} ${r.weight}%`).join("; ");return`${e}% match based on ${t}.`}function Xt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function xr(e,t,r){return Math.max(t,Math.min(r,e))}function Bl(e){const t=e.toLowerCase();return/(yacht|boat|vessel|hull|marina)/.test(t)?"yacht":/(home|house|property|condo|estate|coastal)/.test(t)?"coastal_home":/(porsche|ferrari|lamborghini|bentley|car|vehicle|auto)/.test(t)?"luxury_vehicle":/(jewel|ring|watch|necklace|earring|appraisal)/.test(t)?"jewelry":/(umbrella|liability)/.test(t)?"umbrella_liability":/(portfolio|everything|collection)/.test(t)?"full_portfolio":"other"}function Ul(e){const t=e.match(/\$?\s?([\d,]+(?:\.\d+)?)\s?(k|m|million|thousand)?/i);if(!t)return;let r=Number(t[1].replace(/,/g,""));const n=(t[2]||"").toLowerCase();return(n==="k"||n==="thousand")&&(r*=1e3),(n==="m"||n==="million")&&(r*=1e6),r>1e3?r:void 0}function Oe(e){return e==null?"":typeof e=="string"?e.trim():typeof e=="number"&&Number.isFinite(e)?String(e):typeof e=="boolean"?e?"yes":"no":""}function Bb(e){const t=new Set,r=[];return e.forEach(n=>{const i=n.trim();!i||t.has(i.toLowerCase())||(t.add(i.toLowerCase()),r.push(i))}),r}async function Ub(e){const t=Vb(e),r=await Et("/ai/email-subject",{body:e.body??"",contactName:e.contactName,context:e.context}),n=[];r&&typeof r.subject=="string"&&r.subject.trim()&&n.push({subject:r.subject,score:72+xr(Number(r.confidence??.72),0,1)*25,reason:"model"});const i=vm([...n,...t.candidates],e);return i?i.subject:(await new Promise(a=>setTimeout(a,250)),t.fallback)}function bm(e){return e.replace(/\[\[quotex-email-signature:[\s\S]*?\]\]/g,"").split(/\r?\n/).map(t=>t.trim()).filter(t=>!(!t||/^(hi|hello|hey)\b[\s,\w.-]*$/i.test(t)||/^(thanks|thank you|best|regards|sincerely|warmly)[,!.\s]*$/i.test(t)||/^[-–—]+$/.test(t))).join(" ").replace(/\s+/g," ").trim()}const Im=/^(a message from|message from|quick follow[- ]?up|follow[- ]?up|checking in|touching base|hello|hi there)\b/i;function Vb(e){var u;const t=bm(e.body??""),r=`${e.context??""} ${t}`.toLowerCase(),n=[],i=(f,g,y)=>{const h=wm(f,e);h&&n.push({subject:h,score:g,reason:y})},a=Hb(r),s=a?` for your ${a}`:"",o=zb(r),c=Gb(r),d=/\b(document|documents|doc|packet|form|paperwork|declaration|dec page|proof|license|appraisal|supplemental)\b/.test(r);/\b(e-?sign|signature|signatures?|signed|signing)\b/.test(r)&&d&&(i(`${c??"Documents"} ready for e-signature`,95,"e-signature"),/renew|renewal/.test(r)&&i("Renewal packet ready for e-signature",98,"renew
20al e-signature")),/\b(upload|send|provide|need|needed|missing|still need|require|required)\b/.test(r)&&d&&(i(`${c??"Documents"} needed to continue`,92,"missing documents"),/underwriting|carrier|quote|application/.test(r)&&i(`${c??"Documents"} needed for underwriting`,96,"underwriting documents")),/\b(questionnaire|questions?|underwriting details|supplemental|application fields?|missing fields?)\b/.test(r)&&(i("A few underwriting details needed",90,"questionnaire"),/supplemental/.test(r)&&i("Supplemental details needed for carrier review",93,"supplemental")),/\b(renew|renewal|expir|expiration|lapse|term)\b/.test(r)&&(i(`Renewal review${s}`,88,"renewal"),i(`Your${s||" policy"} renewal next steps`,84,"renewal next step")),/\b(claim|fnol|loss|adjuster|damage|incident)\b/.test(r)&&(i(`${o?`${o} `:""}Claim follow-up`,88,"claim"),i(`Claim update${s}`,84,"claim update")),/\b(quote|premium|estimate|pricing|proposal|carrier option|market option|indication)\b/.test(r)&&(i(`Quote options${s}`,88,"quote"),i(`Your${s||" coverage"} quote next steps`,84,"quote next step")),/\b(payment|invoice|bill|billing|deposit|checkout|autopay|past due)\b/.test(r)&&i("Payment details for your policy",86,"payment"),/\b(schedule|call|appointment|meeting|connect|available|time works)\b/.test(r)&&i(`Time to review${s||" your coverage"}`,82,"meeting"),/\b(welcome|thank you|thanks for choosing|portal access|login)\b/.test(r)&&i("Welcome to your agency portal",80,"welcome"),/\b(policy change|endorsement|update|change request|edit request)\b/.test(r)&&i(`Policy update${s}`,87,"policy change");const m=(u=t.split(/[.!?\n]/)[0])==null?void 0:u.trim();m&&i(m.split(/\s+/).slice(0,10).join(" "),48,"first sentence");const p=vm(n,e);return{candidates:n,fallback:(p==null?void 0:p.subject)??"A clear next step from your agency"}}function vm(e,t){const r=`${t.context??""} ${bm(t.body??"")}`.toLowerCase();return e.map(i=>{const a=wm(i.subject,t);return a?{...i,subject:a,score:i.score+jb(a,r)}:null}).filter(i=>!!i).sort((i,a)=>a.score-i.score)[0]??null}function jb(e,t){const r=e.split(/\s+/).filter(Boolean);let n=0;e.length>=28&&e.length<=62&&(n+=12),e.length>72&&(n-=35),e.length<12&&(n-=20),Im.test(e)&&(n-=35),/\b(e-?signature|documents?|renewal|quote|claim|underwriting|payment|policy|coverage|supplemental)\b/i.test(e)&&(n+=14);const i=r.filter(a=>a.length>4&&t.includes(a.toLowerCase())).length;return n+=Math.min(10,i*2),/[!?]{2,}|!!!/.test(e)&&(n-=12),/\bguaranteed|approved|savings|save \$|bound coverage\b/i.test(e)&&(n-=40),n}function wm(e,t){let r=e.replace(/^subject:\s*/i,"").replace(/^["']|["']$/g,"").replace(/\s+/g," ").replace(/\s+([,.;:!?])/g,"$1").trim();r=r.replace(/^(hi|hello|hey)\s+[^,]+,\s*/i,"").replace(/\bplease\b\s*/i,"").replace(/[.?!]+$/g,"").trim();const n=(t.contactName??"").split(/\s+/).map(a=>a.trim()).filter(a=>a.length>2);return[(t.contactName??"").trim(),...n].filter(Boolean).forEach(a=>{r=r.replace(new RegExp(`\\b${Wb(a)}\\b'?s?`,"gi"),"your")}),r=r.replace(/\byour your\b/gi,"your").replace(/\s+/g," ").trim(),!r||Im.test(r)?null:(r.length>72&&(r=Qb(r,72)),r.charAt(0).toUpperCase()+r.slice(1))}function Qb(e,t){if(e.length<=t)return e;const r=e.slice(0,t-1),n=r.lastIndexOf(" ");return`${(n>32?r.slice(0,n):r).trim()}...`}function Hb(e){return/\b(coastal home|beach house|homeowner|homeowners|home|house|estate|condo)\b/.test(e)?"home":/\b(auto|vehicle|car|driver|garaging|porsche|ferrari|lamborghini|bentley)\b/.test(e)?"auto":/\b(yacht|boat|vessel|watercraft|marina)\b/.test(e)?"yacht":/\b(jewelry|jewellery|watch|ring|appraisal|valuables|collection)\b/.test(e)?"valuables":/\b(umbrella|excess liability|liability)\b/.test(e)?"liability":/\b(commercial|business|general liability|workers'? comp|property)\b/.test(e)?"business":null}function zb(e){const t=e.match(/\b(chubb|pure|aig|cincinnati|travelers|progressive|nationwide|berkley|hanover|hartford)\b/i);return t?t[1].charAt(0).toUpperCase()+t[1].slice(1).toLowerCase():null}function Gb(e){return/\brenewal packet\b/.test(e)?"Renewal packet":/\b(declarations?|dec page)\b/.test(e)?"Declarations page":/\b(wind mitigation|roof certificate|inspection)\b/.test(e)?"Inspection documents":/\b(appraisal|appraisals)\b/.test(e)?"Appraisal documents":/\b(driver'?s? license|license)\b/.test(e)?"Driver information":/\b(supplemental|supplementals)\b/.test(e)?"Supplemental documents":/\b(application|applications)\b/.test(e)?"Application documents":null}function Wb(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}async function Kb(e){const t=await Et("/ai/enhance-message",{body:e.body,channel:e.channel,contactName:e.contactName});
20if(t&&typeof t.body=="string"&&t.body.trim())return t.body.trim();await new Promise(c=>setTimeout(c,450));const r=e.body.trim();if(!r)return r;const n=(e.contactName??"").split(/\s+/)[0],i=c=>{const d=c.trim().replace(/\s+/g," ");return d&&d.charAt(0).toUpperCase()+d.slice(1)},s=r.split(new RegExp("(?<=[.!?])\\s+")).map(c=>c.trim()).filter(Boolean).map(c=>{const d=i(c);return/[.!?]$/.test(d)?d:`${d}.`}).join(" ");return[n?`Hi ${n},`:"Hello,","",s,"","Please don't hesitate to reach out with any questions — I'm glad to help.","","Warm regards,"].join(`
21`)}function Yb(e){let t=2166136261;for(let r=0;r<e.length;r++)t^=e.charCodeAt(r),t=Math.imul(t,16777619);return t>>>0}function _m(e){let t=Yb(e)||1;return()=>(t^=t<<13,t^=t>>>17,t^=t<<5,(t>>>0)%1e5/1e5)}const Jb="https://hazards.fema.gov/gis/nfhl/rest/services/public/NFHL/MapServer/28/query",Zb=6500;async function Fa(e,t={},r=Zb){const n=new AbortController,i=setTimeout(()=>n.abort(),r);try{return await fetch(e,{...t,signal:t.signal??n.signal})}finally{clearTimeout(i)}}function Am(e,t,r,n){return{fieldKey:e,sourceKind:t,sourceLabel:r,sourceUrl:n.sourceUrl,confidence:Math.max(0,Math.min(1,n.confidence)),verified:n.verified,allowDocumentAutofill:n.allowDocumentAutofill,collectedAt:new Date().toISOString(),observedDate:n.observedDate,reviewStatus:n.reviewStatus,reviewReason:n.reviewReason,corroboratingSourceCount:n.corroboratingSourceCount,supportingSources:n.supportingSources,conflictReason:n.conflictReason,notes:n.notes}}function Pr(e,t,r,n,i){e[t]=Am(t,r,n,i)}function Xb(e){const t=e.trim().toLowerCase();return!t||/^(unknown|n\/a|none|not found|not public|not publicly|not available|requires)\b/.test(t)?!0:/\b(not found|not public|not publicly|no public|not available|unable to confirm|unable to determine|requires applicant|requires client|requires insured|applicant attestation|clue|loss runs?|verify with applicant)\b/.test(t)}function eI(e,t,r){return Oe(e[r])?Lb(e,t,r):!1}function tI(e){switch(e.provider){case"smarty":return{sourceKind:"validated_address",sourceLabel:"Smarty US Street validation",confidence:.96,verified:!0};case"census":return{sourceKind:"government_api",sourceLabel:"US Census Geocoder",confidence:.9,verified:!0};case"google":return{sourceKind:"public_geocoder",sourceLabel:"Google Geocoding API",confidence:.86,verified:!0};case"nominatim":default:return{sourceKind:"public_geocoder",sourceLabel:"OpenStreetMap Nominatim",confidence:.74,verified:!1}}}function Cm(){var e;try{const t=(e=import.meta)==null?void 0:e.env;return typeof(t==null?void 0:t.VITE_GOOGLE_PLACES_API_KEY)=="string"&&t.VITE_GOOGLE_PLACES_API_KEY?t.VITE_GOOGLE_PLACES_API_KEY:typeof(t==null?void 0:t.VITE_GOOGLE_MAPS_API_KEY)=="string"&&t.VITE_GOOGLE_MAPS_API_KEY?t.VITE_GOOGLE_MAPS_API_KEY:""}catch{return""}}async function rI(e){var n,i,a,s,o;const t=Cm();if(!t)return null;const r=new URL("https://maps.googleapis.com/maps/api/geocode/json");r.searchParams.set("address",e),r.searchParams.set("components","country:US"),r.searchParams.set("key",t);try{const c=await Fa(r);if(!c.ok)return console.warn(`[propertyLookup] Google geocode HTTP ${c.status} for "${e}"`),null;const d=await c.json();if(d.status!=="OK"||!((n=d.results)!=null&&n[0]))return console.info(`[propertyLookup] Google geocode status=${d.status} for "${e}"`),null;const m=d.results[0],p=(a=(i=m.geometry)==null?void 0:i.location)==null?void 0:a.lat,u=(o=(s=m.geometry)==null?void 0:s.location)==null?void 0:o.lng;return typeof p!="number"||typeof u!="number"?null:{lat:p,lon:u,displayName:m.formatted_address??e,provider:"google"}}catch(c){return console.warn("[propertyLookup] Google geocode failed",c),null}}async function nI(e){const t=new URL("https://nominatim.openstreetmap.org/search");t.searchParams.set("format","json"),t.searchParams.set("countrycodes","us"),t.searchParams.set("addressdetails","0"),t.searchParams.set("limit","1"),t.searchParams.set("q",e);try{const r=await Fa(t,{headers:{"Accept-Language":"en-US"}});if(!r.ok)return console.warn(`[propertyLookup] Nominatim HTTP ${r.status} for "${e}"`),null;const n=await r.json();if(!Array.isArray(n)||n.length===0)return null;const i=n[0];return!(i!=null&&i.lat)||!(i!=null&&i.lon)?null:{lat:Number(i.lat),lon:Number(i.lon),displayName:i.display_name,provider:"nominatim"}}catch(r){return console.warn("[propertyLookup] Nominatim failed",r),null}}async function iI(e){var r,n,i,a;const t=new URL("https://geocoding.geo.census.gov/geocoder/locations/onelineaddress");t.searchParams.set("address",e),t.searchParams.set("benchmark","Public_AR_Current"),t.searchParams.set("format","json");try{const s=await Fa(t);if(!s.ok)return console.warn(`[propertyLookup] Census HTTP ${s.status} for "${e}"`),null;const c=(n=(r=(await s.json()).result)==null?void 0:r.addressMatches)==null?void 0:n[0],d=(i=c==null?void 0:c.coordinates)==null?void 0:i.x,m=(a=c==null?void 0:c.coordinates)==null?void 0:a.y;return typeof d!="number"||typeof m!="number"?null:{lat:m,lon:d,displayName:(c==null?void 0:c.matchedAddress)??e,provider:"census"}}catch(s){return console.warn("[propertyLookup] Census geocoder failed",s),null}}async function aI(e){try{const{validateAddress:t}=await Lt(async()=>{const{validateAddress:n}=await import("./smartyValidation-DGcHtqdn.js");return{validateAddress:n}},[]),r=await t(e);return!r||r.lat===null||r.lon===null?null:{lat:r.lat,lon:r.lon,displayName:r.composed,provider:"smarty"}}catch(t){return console.warn("[propertyLookup] Smarty validation failed",t),null}}async function sI(e){if(!e.trim())return null;const t=typeof performance<"u"?performance.now():0;let r=null,n="";if(r=await aI(e),r&&(n="smarty"),!r&&Cm()&&(r=await rI(e),r&&(n="google")),r||(r=await iI(e),r&&(n="census")),r||(r=await nI(e),r&&(n="nominatim")),typeof performance<"u"){const i=Math.round(performance.now()-t);r?console.info(`[propertyLookup] geocoded "${e}" via ${n} → ${r.lat.toFixed(4)},${r.lon.toFixed(4)} (${i}ms)`):console.warn(`[propertyLookup] geocode MISS for "${e}" (${i}ms)`)}return r}async function oI(e,t){var i,a;
21const r=new URL(Jb);r.searchParams.set("geometry",`${t},${e}`),r.searchParams.set("geometryType","esriGeometryPoint"),r.searchParams.set("inSR","4326"),r.searchParams.set("spatialRel","esriSpatialRelIntersects"),r.searchParams.set("outFields","FLD_ZONE,ZONE_SUBTY"),r.searchParams.set("returnGeometry","false"),r.searchParams.set("f","json");const n=typeof performance<"u"?performance.now():0;try{const s=await Fa(r);if(!s.ok)return console.warn(`[propertyLookup] FEMA NFHL HTTP ${s.status} at ${e},${t}`),null;const c=(a=(i=(await s.json()).features)==null?void 0:i[0])==null?void 0:a.attributes;if(typeof performance<"u"){const d=Math.round(performance.now()-n);console.info(`[propertyLookup] FEMA NFHL → zone=${(c==null?void 0:c.FLD_ZONE)??"none"} (${d}ms)`)}return c!=null&&c.FLD_ZONE?{zone:c.FLD_ZONE,subtype:c.ZONE_SUBTY}:null}catch{return null}}async function cI(e){const t=String(e.address??"").trim();if(!t)return{fields:{},sources:[],confidence:0,notes:"Enter a property address to look up records."};const r=await sI(t);if(!r)return{fields:{},sources:["Geocoder (no match)"],confidence:0,unavailableFields:["address","floodZone","yearBuilt","squareFootage","constructionType","roofMaterial","roofAge","lotSize","distanceToCoast","estimatedValue","windMitigation"],notes:"We couldn't resolve that exact address against any of our geocoders, so the public-records lookup didn't run. Double-check the spelling (street type, ZIP) or fill the fields in by hand — your agent can verify everything during the carrier review."};const n=await oI(r.lat,r.lon),i={address:r.displayName},a={},s=["Geocoder (address resolution)"],o=new Set(["yearBuilt","squareFootage","constructionType","roofMaterial","roofAge","lotSize","distanceToCoast","estimatedValue","windMitigation"]),c=tI(r);return Pr(a,"address",c.sourceKind,c.sourceLabel,{confidence:c.confidence,verified:c.verified,allowDocumentAutofill:c.verified,notes:"Normalized address returned by the geocoding provider."}),n?(i.floodZone=n.zone,s.push("FEMA National Flood Hazard Layer (NFHL)"),Pr(a,"floodZone","government_api","FEMA National Flood Hazard Layer (NFHL)",{confidence:.96,verified:!0,allowDocumentAutofill:!0,notes:n.subtype?`Zone subtype: ${n.subtype}`:void 0})):o.add("floodZone"),{fields:i,evidence:a,sources:s,confidence:n?.78:.62,unavailableFields:Array.from(o),notes:"Address and flood-zone data are source-backed when available. Property characteristics that require assessor or commercial-provider data stay blank until a verified source or client answer is available."}}function Ar(e){if(typeof e!="string")return;const t=e.replace(/\s+/g," ").trim();return t||void 0}function To(e,t=" / "){const r=e.map(Ar).filter(n=>!!n);return r.length>0?r.join(t):void 0}function Vl(e){return e.toLowerCase().replace(/[^a-z0-9]/g,"")}function vs(e,t){if(!t)return;const r=Vl(t);if(!r)return;e.some(i=>{const a=Vl(i);return a.includes(r)||r.includes(a)})||e.push(t)}function lI(e,t,r){const n=[];return vs(n,e),vs(n,t),vs(n,r),n.length>0?n.join(" "):void 0}function dI(e,t){const r=Ar(e);if(!r)return/vin decoded clean/i.test(t??"");const n=r.split(/[,\s]+/).filter(Boolean);return n.length>0&&n.every(i=>i==="0")}function uI(e){const t=Ar(e.DisplacementL),r=Ar(e.EngineCylinders),n=Ar(e.EngineHP),i=Ar(e.FuelTypePrimary);return To([t?`${t}L`:void 0,r?`${r} cylinder`:void 0,n?`${n} hp`:void 0,i]," ")}async function mI(e){var r;if(!e)return null;const t=`https://vpic.nhtsa.dot.gov/api/vehicles/DecodeVinValuesExtended/${encodeURIComponent(e)}?format=json`;try{const n=await fetch(t);if(!n.ok)return null;const a=(r=(await n.json()).Results)==null?void 0:r[0];if(!a)return null;const s=p=>Ar(a[p]),o=s("ModelYear"),c=o?Number(o):void 0,d=To([a.Trim,a.Trim2]),m=To([a.Series,a.Series2]);return{year:Number.isFinite(c)?c:void 0,make:s("Make"),model:lI(s("Model"),m,d),bodyClass:s("BodyClass"),trim:d,series:m,vehicleType:s("VehicleType"),doors:s("Doors"),driveType:s("DriveType"),fuelType:s("FuelTypePrimary"),engineCylinders:s("EngineCylinders"),displacementL:s("DisplacementL"),engineDescription:uI(a),basePrice:s("BasePrice"),curbWeightLb:s("CurbWeightLB"),errorCode:s("ErrorCode"),errorText:s("ErrorText")}}catch{return null}}async function pI(e){const t=Bt(e.vin),r=pi(t);if(r)return{fields:{},sources:[],confidence:0,unavailableFields:["vin","year","make","model","estimatedValue"],notes:r};const n=await mI(t);
21if(!n)return{fields:{},sources:["NHTSA VIN decoder (request failed)"],confidence:0,unavailableFields:["year","make","model","estimatedValue"],notes:"Couldn't reach NHTSA's VIN decoder. If the VIN is well-formed your agent will look it up manually."};const i=n.errorCode??"";if(!dI(i,n.errorText))return{fields:{},sources:["NHTSA VIN decoder (vpic.nhtsa.dot.gov)"],confidence:0,unavailableFields:["year","make","model","bodyClass","trim","series","curbWeightLb","basePrice","estimatedValue"],notes:`NHTSA could not validate this VIN${n.errorText?`: ${n.errorText}`:i?` (error code ${i})`:""}. Re-enter the VIN before using decoded vehicle details.`};const s={};n.year&&(s.year=n.year),n.make&&(s.make=n.make),n.model&&(s.model=n.model),n.bodyClass&&(s.bodyClass=n.bodyClass),n.trim&&(s.trim=n.trim),n.series&&(s.series=n.series),n.vehicleType&&(s.vehicleType=n.vehicleType),n.doors&&(s.doors=n.doors),n.driveType&&(s.driveType=n.driveType),n.fuelType&&(s.fuelType=n.fuelType),n.engineCylinders&&(s.engineCylinders=n.engineCylinders),n.displacementL&&(s.displacementL=n.displacementL),n.engineDescription&&(s.engineDescription=n.engineDescription),n.basePrice&&(s.basePrice=n.basePrice),n.curbWeightLb&&(s.curbWeightLb=n.curbWeightLb);const o={},c=`https://vpic.nhtsa.dot.gov/api/vehicles/DecodeVinValuesExtended/${encodeURIComponent(t)}?format=json`;Object.keys(s).forEach(m=>{Pr(o,m,"government_api","NHTSA VIN decoder (vpic.nhtsa.dot.gov)",{confidence:.95,verified:!0,allowDocumentAutofill:!0,notes:`Decoded from VIN ${t}.`,sourceUrl:c})}),Pr(o,"vin","client_intake","Client-entered VIN",{confidence:.9,verified:!0,allowDocumentAutofill:!0,notes:"VIN accepted by NHTSA decoder."});const d=[];return d.push("estimatedValue"),n.year||d.push("year"),n.make||d.push("make"),n.model||d.push("model"),n.bodyClass||d.push("bodyClass"),!n.trim&&!n.series&&d.push("trim"),n.curbWeightLb||d.push("curbWeightLb"),n.basePrice||d.push("basePrice"),{fields:s,evidence:o,sources:["NHTSA VIN decoder (vpic.nhtsa.dot.gov)"],confidence:.95,unavailableFields:d,notes:"VIN decoded via NHTSA's federal database. Market value requires a paid valuation provider (Manheim / KBB / NADA / J.D. Power) wired through the production backend."}}async function fI(e){const t=String(e.make??"").trim(),r=String(e.model??"").trim(),n=Number(e.year);return!t&&!r?{fields:{},sources:[],confidence:0,notes:"Enter the vessel make, model, and year to look up records."}:{fields:{},sources:[],confidence:0,unavailableFields:["length","estimatedValue"],notes:n&&t&&r?`Vessel specifications (length) and market value for ${n} ${t} ${r} require a marine valuation provider (USCG HIN lookup + BoatTrader / Yachtworld comparables) wired through the production backend. Your agent will gather these.`:"Vessel specifications and market value require a marine valuation provider wired through the production backend. Your agent will gather these."}}async function gI(e){return{fields:{},sources:[],confidence:0,unavailableFields:["storage","wearFrequency"],notes:"Jewelry intake doesn't have a public-records source. Storage location and wear frequency are customer-declared; appraised value comes from your appraisal document."}}async function Tc(e,t,r=[]){let n=null;try{n=await Et("/ai/enrich-asset",{assetType:e,seed:t,targetQuestions:r},{timeoutMs:24e4})}catch{return{fields:{},sources:[],confidence:0,unavailableFields:Object.keys(t).filter(Boolean),notes:"Server-side public-record enrichment is unavailable. Quotex did not run browser-side lookup fallbacks."}}if(n){if(bI(n))return n;if(!jl())return{fields:{},sources:[],confidence:0,unavailableFields:Object.keys(t).filter(Boolean),notes:"Server-side public-record enrichment returned an invalid response shape. Quotex did not apply any AI-filled values."}}if(!jl())return{fields:{},sources:[],confidence:0,unavailableFields:Object.keys(t).filter(Boolean),notes:"Server-side public-record enrichment is unavailable. Quotex did not run browser-side lookup fallbacks for this production session."};switch(e){case"coastal_home":return cI(t);case"luxury_vehicle":return pI(t);case"yacht":return fI(t);case"jewelry":return gI();default:return{fields:{},sources:[],confidence:0}}}function jl(){var e;try{const t=(e=import.meta)==null?void 0:e.env;
21return(t==null?void 0:t.VITE_ALLOW_BROWSER_AI_FALLBACK)==="true"?!0:yI()?hI():!!(t!=null&&t.DEV)}catch{return!1}}function yI(){var e,t,r,n;try{if(((t=(e=import.meta)==null?void 0:e.env)==null?void 0:t.MODE)==="test")return!0}catch{}try{return((n=(r=globalThis.process)==null?void 0:r.env)==null?void 0:n.VITEST)==="true"}catch{return!1}}function hI(){try{const e=globalThis.fetch;return!!(e!=null&&e.mock||e!=null&&e._isMockFunction)}catch{return!1}}function bI(e){return Xt(e)?Xt(e.fields)&&Array.isArray(e.sources)&&typeof e.confidence=="number"&&(e.evidence===void 0||Xt(e.evidence))&&(e.unavailableFields===void 0||Array.isArray(e.unavailableFields)&&e.unavailableFields.every(t=>typeof t=="string"))&&(e.notes===void 0||typeof e.notes=="string")&&(e.researchQuality===void 0||Xt(e.researchQuality)):!1}function Sm(e){const t=e.toLowerCase();if(/(home|house|property|condo|residence|coastal)/.test(t))return"coastal_home";if(/(auto|car|vehicle|porsche|ferrari|truck)/.test(t))return"luxury_vehicle";if(/(yacht|boat|vessel|hull|marina)/.test(t))return"yacht";if(/(jewel|ring|watch|necklace|appraisal)/.test(t))return"jewelry";if(/(umbrella|liability)/.test(t))return"umbrella_liability";if(/(portfolio|collection)/.test(t))return"full_portfolio"}function II(e){return`${e.fileName}
22${e.text??""}`.replace(/\r/g,`
23`).replace(/[ \t]+/g," ").replace(/\n{3,}/g,`
24
25`).trim()}function en(e){return e.toLowerCase().replace(/[^a-z0-9@.+-]+/g," ").replace(/\s+/g," ").trim()}function vI(e,t){const r=String(t??"").trim();if(!r)return"";const n=en(r),a=e.split(/\n+/).map(s=>s.trim()).filter(Boolean).find(s=>en(s).includes(n));return a?a.slice(0,220):r.slice(0,220)}function Pt(e,t,r,n=.86){const i=typeof t=="number"&&Number.isFinite(t)?String(t):typeof t=="string"?t.trim():"";if(!i)return;const a=vI(r,i),s=a.length>0&&(en(r).includes(en(a))||en(r).includes(en(i)));return{fieldKey:e,value:i,sourceKind:"local_pattern",evidence:a,confidence:n,verified:s}}function wI(e){const t=Object.fromEntries(e.filter(r=>!!(r&&r.verified)).map(r=>[r.fieldKey,r]));return Object.keys(t).length>0?t:void 0}function $t(e,t){var r;for(const n of t){const i=new RegExp(String.raw`(?:^|\n)\s*(?:${n})\s*[:#-]?\s*([^\n]{2,120})`,"i"),a=e.match(i),s=(r=a==null?void 0:a[1])==null?void 0:r.trim().replace(/\s{2,}/g," ");if(s&&!/^(n\/a|none|unknown)$/i.test(s))return s}return""}function ws(e){return e.replace(/\b(MR|MRS|MS|DR)\.?\s+/gi,"").replace(/\s+/g," ").trim().split(" ").map(t=>/^(LLC|INC|CO|CORP|LTD|LP|LLP)$/i.test(t)?t.toUpperCase():t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join(" ")}function Tm(e){var t;return(t=e.match(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/i))==null?void 0:t[0]}function _I(e){var r;const t=e.match(/(?:phone|mobile|cell|tel|telephone|contact)?\s*[:#-]?\s*(\+?1?[\s.-]?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4})(?!\d)/i);return(r=t==null?void 0:t[1])==null?void 0:r.replace(/\s+/g," ").trim()}function AI(e){var n;const t=$t(e,["mailing address","insured address","applicant address","property address","risk address","address"]);if(/\d{1,6}\s+/.test(t)&&/,\s*[A-Z]{2}\s+\d{5}/i.test(t))return t;const r=e.match(/\b\d{1,6}\s+[A-Za-z0-9.' -]+(?:Street|St\.?|Avenue|Ave\.?|Road|Rd\.?|Drive|Dr\.?|Lane|Ln\.?|Boulevard|Blvd\.?|Way|Court|Ct\.?|Circle|Cir\.?|Trail|Trl\.?|Place|Pl\.?|Highway|Hwy\.?)\b[^\n,]*(?:,\s*[A-Za-z .'-]+){1,2},?\s+[A-Z]{2}\s+\d{5}(?:-\d{4})?/i);return(n=r==null?void 0:r[0])==null?void 0:n.replace(/\s+/g," ").trim()}function CI(e){var i;const t=$t(e,["business name","company name","named insured","insured name","applicant business","entity name","legal name"]);if(t&&/\b(LLC|L\.L\.C\.|INC\.?|CORP\.?|CORPORATION|CO\.?|COMPANY|LTD\.?|LP|LLP|DBA)\b/i.test(t))return t.replace(/\s+/g," ").trim();const n=e.match(/\b([A-Z][A-Za-z0-9&'., -]{2,80}\s+(?:LLC|L\.L\.C\.|Inc\.?|Corp\.?|Corporation|Co\.?|Company|Ltd\.?|LP|LLP))\b/);return(i=n==null?void 0:n[1])==null?void 0:i.replace(/\s+/g," ").trim()}function SI(e,t){const r=$t(e,["first name","given name"]),n=$t(e,["last name","surname"]);if(r&&n)return ws(`${r} ${n}`);const i=$t(e,["contact name","primary contact","client name","applicant name","customer name","name"]);if(i&&i!==t&&!/\b(LLC|INC|CORP|COMPANY|AGENCY|INSURANCE|CARRIER)\b/i.test(i))return ws(i);const a=Tm(e);
25if(a){const s=a.split("@")[0].replace(/[._-]+/g," ");if(/[a-z]{2,}\s+[a-z]{2,}/i.test(s))return ws(s)}}function TI(e,t){const r=e.toLowerCase();if(t||/\b(commercial|business owners|bop|general liability|workers comp|workers compensation|commercial auto|professional liability|premises|operations|payroll|fein|naics|sic)\b/.test(r))return"commercial";if(/\b(homeowners?|personal auto|personal lines|dwelling|umbrella|jewelry|yacht|primary residence|household)\b/.test(r))return"personal"}function kI(e){const t=e.toLowerCase();return Sm(t)??(Bl(t)==="other"?void 0:Bl(t))}function RI(e){const t=$t(e,["estimated value","replacement cost","dwelling limit","coverage a","building limit","appraised value","scheduled value","hull value","market value","requested limit","asset value"]),r=Ul(t);if(r)return r;const n=Array.from(e.matchAll(/\$\s?([\d,]+(?:\.\d+)?)\s?(m|mm|million|k|thousand)?/gi)).map(i=>Ul(i[0])).filter(i=>typeof i=="number"&&i>=5e3);if(n.length!==0)return Math.max(...n)}function EI(e,t){var n,i;const r=[$t(e,["notes","remarks","description","operations","coverage requested"]),$t(e,["current carrier","carrier"]),$t(e,["policy number","prior policy"])].filter(Boolean);if(t==="luxury_vehicle"){const a=(n=e.match(/\b[A-HJ-NPR-Z0-9]{17}\b/i))==null?void 0:n[0];a&&r.push(`VIN: ${a.toUpperCase()}`)}if(t==="yacht"){const a=(i=e.match(/\b[A-Z]{3}[A-Z0-9]{9}\b/i))==null?void 0:i[0];a&&r.push(`Hull ID: ${a.toUpperCase()}`)}return Bb(r).join(`
26`)||void 0}function xI(e){return[e.lineOfBusiness,e.businessName,e.name,e.email,e.phone,e.address,e.assetType,e.estimatedValue,e.notes].filter(Boolean).length}async function PI(e){const t=await Et("/ai/extract-contact",{fileName:e.fileName,fileType:e.fileType,text:e.text,dataUrl:e.dataUrl},{timeoutMs:6e4});if(t&&typeof t.summary=="string"&&typeof t.confidence=="number"&&xI(t)>0)return t;await new Promise(n=>setTimeout(n,700));const r=II(e);if(e.text&&r.length>e.fileName.length+8){const n=Tm(r),i=_I(r),a=CI(r),s=SI(r,a),o=AI(r),c=kI(r),d=TI(r,a)??(a?"commercial":c?"personal":void 0),m=RI(r),p=EI(r,c),u=wI([Pt("lineOfBusiness",d,r,.78),Pt("businessName",a,r,.9),Pt("name",s,r,.9),Pt("email",n,r,.96),Pt("phone",i,r,.92),Pt("address",o,r,.9),Pt("assetType",c,r,.76),Pt("estimatedValue",m,r,.86),Pt("notes",p,r,.72)]),f=[d,a,s,n,i,o,c,m,p].filter(Boolean).length;if(f>0){const g=a||s||"the uploaded intake";return{lineOfBusiness:d,businessName:a,name:s,email:n,phone:i,address:o,assetType:c,estimatedValue:m,notes:p,summary:`Scanned "${e.fileName}" and extracted ${f} profile field${f===1?"":"s"} for ${g}. Review before saving.`,confidence:xr(.42+f*.07+(n?.08:0)+(o?.08:0),0,.92),sources:[`Document: ${e.fileName}`,"Full document text scan",...e.dataUrl?["Vision attachment available for server AI"]:[]],fieldEvidence:u,outcome:"needs_confirm",requiredFieldsPresent:!!(u!=null&&u.name&&(u!=null&&u.email)),autoCreateEligible:!1,peopleDetected:1,extractionWarnings:[]}}}return{summary:e.dataUrl?`Scanned "${e.fileName}", but no fields were confidently extracted in this environment. Review the file and fill only verified details.`:`No readable contact fields were found in "${e.fileName}". Review the file and enter verified details manually.`,confidence:.18,sources:[`Document: ${e.fileName}`,e.dataUrl?"Vision attachment available for server AI":"No readable text found","No fabricated filename data"],outcome:e.dataUrl?"needs_confirm":"no_client_found",requiredFieldsPresent:!1,autoCreateEligible:!1,peopleDetected:0,extractionWarnings:e.dataUrl?["No verified fields were extracted from the upload."]:["No readable text found."]}}async function NI(e){const t=await Et("/ai/extract-policy",{fileName:e.fileName,fileType:e.fileType,carrierNames:e.carrierNames});if(t&&typeof t.summary=="string"&&typeof t.confidence=="number")return t;await new Promise(u=>setTimeout(u,700));const r=_m(e.fileName.toLowerCase()),n=e.carrierNames&&e.carrierNames.length>0?e.carrierNames[Math.floor(r()*e.carrierNames.length)]:void 0,a=`${(n??"POL").split(/\s+/).map(u=>u[0]).join("").toUpperCase().slice(0,3)}-${Math.floor(r()*90+10)}${Math.floor(r()*9e3+1e3)}
26`,s=Math.round((2e3+r()*18e3)/50)*50,o=Math.round(s*(.9+r()*.15)/50)*50,c=new Date(Date.now()-Math.floor(r()*120)*24*60*60*1e3),d=new Date(c.getTime()+365*24*60*60*1e3),m=u=>u.toISOString().slice(0,10),p=Sm(e.fileName);return{policyNumber:a,carrierName:n,premiumEstimate:o,finalPremium:s,effectiveDate:m(c),renewalDate:m(d),assetHint:p?p.replace(/_/g," "):void 0,summary:`Extracted from "${e.fileName}". Read the policy number, premium, and effective/renewal dates off the declarations page${n?` (carrier: ${n})`:""}. Confirm before saving.`,confidence:n?.82:.66,sources:[`Document: ${e.fileName}`,"OCR + LLM dec-page extraction",n?"Carrier-name match":"Carrier not matched — pick manually"]}}const qI=["AL","AK","AZ","AR","CA","CO","CT","DE","FL","GA","HI","ID","IL","IN","IA","KS","KY","LA","ME","MD","MA","MI","MN","MS","MO","MT","NE","NV","NH","NJ","NM","NY","NC","ND","OH","OK","OR","PA","RI","SC","SD","TN","TX","UT","VT","VA","WA","WV","WI","WY","DC"];function OI(e){const t=[];return/(coastal|home|homeowner|dwelling|ho-?[36]|condo|townhome)/i.test(e)&&t.push("coastal_home"),/(yacht|boat|vessel|hull|marina|inland marine)/i.test(e)&&t.push("yacht"),/(auto|vehicle|luxury car|porsche|ferrari|bentley|exotics?)/i.test(e)&&t.push("luxury_vehicle"),/(jewel|ring|watch|necklace|fine art|valuables)/i.test(e)&&t.push("jewelry"),/(umbrella|excess liability)/i.test(e)&&t.push("umbrella_liability"),/(portfolio|estate package|wrap)/i.test(e)&&t.push("full_portfolio"),Array.from(new Set(t))}function DI(e){const t=new Set;for(const i of qI)new RegExp(`\\b${i}\\b`).test(e)&&t.add(i);const r={florida:"FL",california:"CA",georgia:"GA","south carolina":"SC","north carolina":"NC",texas:"TX","new york":"NY","new jersey":"NJ",massachusetts:"MA",connecticut:"CT",virginia:"VA",maryland:"MD"},n=e.toLowerCase();for(const[i,a]of Object.entries(r))n.includes(i)&&t.add(a);return Array.from(t).sort()}function LI(e){const t=/\$\s?([\d,]+(?:\.\d+)?)\s?([kKmM]?)/g,r=[];let n;for(;(n=t.exec(e))!==null;){let i=parseFloat(n[1].replace(/,/g,""));Number.isNaN(i)||((n[2]==="k"||n[2]==="K")&&(i*=1e3),(n[2]==="m"||n[2]==="M")&&(i*=1e6),r.push(i))}return r.length===0?{}:r.length===1?{max:r[0]}:(r.sort((i,a)=>i-a),{min:r[0],max:r[r.length-1]})}function MI(e){const t=/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/g;return Array.from(new Set(e.match(t)??[]))}async function $I(e){var C;const t=await Et("/ai/parse-carrier-appetite",{fileName:e.fileName,text:e.text,carrier:e.carrier});if(t&&Array.isArray(t.missingFields)&&typeof t.confidence=="number")return t;await new Promise(k=>setTimeout(k,600));const r=[e.fileName??"",e.text??""].join(`
27`),n=r||(((C=e.carrier)==null?void 0:C.name)??"carrier"),i=_m(n),a=OI(r),s=DI(r),o=/(commercial|business owner|bop|workers? comp|professional liability|general liability|commercial property|commercial auto|commercial umbrella|fleet|d&o|directors and officers|cyber liability|epli|errors and omissions)/i.test(r),c=/(personal lines|hnw|high net worth|homeowner|valuables|auto policy|umbrella|estate|family office|private client)/i.test(r),d=k=>o&&!c?"commercial":"personal",m=LI(r),p=a.map(k=>{const O=Math.round((.85+i()*.3)*100)/100;return{line:d(),assetType:k,minValue:m.min,maxValue:m.max,riskLevels:/(broad|all risk|preferred)/i.test(r)?["low","medium","high"]:["low","medium"],pricingTendency:O}});if(o&&c){const k=[];p.forEach(O=>{k.push({...O,line:"personal"}),k.push({...O,line:"commercial"})}),p.length=0,p.push(...k)}const u=[];/(excluded|not eligible|will not write|do not write|ineligible|prohibited)/i.test(r)&&(/(coastal|hurricane|wind)/i.test(r)&&u.push("Wind exposure beyond X miles of coast"),/(flood|sfha)/i.test(r)&&u.push("Standalone flood (SFHA)"),/(commercial|business)/i.test(r)&&u.push("Commercial / business-use exposures"),/(modified|kit car|salvage)/i.test(r)&&u.push("Modified / kit / salvage-title vehicles"));const f=(e.text??"").trim(),g=f?f.slice(0,220)+(f.length>220?"…":""):a.length>0?`Writes ${a.map(k=>k.replace(/_/g," ")).join(", ")}${s.length>0?` in ${s.slice(0,5).join(", ")}${s.length>5?"…":""}`:""}.`:"Couldn't infer appetite from the document.";let y="";/(below market|aggressive pricing|competitive)/i.test(r)?y="Competitive / below-market pricing per source document.":/(premium positioning|above market|niche)/i.test(r)&&(y="Premium / above-market positioning per source document.");let h="";const w=r.match(/(?:guidelines|requirements|underwriting)[:\s]+([^\n]{0,300})/i);w&&(h=w[1].trim());const T=MI(r).map(k=>({email:k})),b=+(a.length>0)+ +(s.length>0)+ +(p.length>0)+ +(u.length>0)+ +!!y+ +!!h,_=xr(.4+b*.08,.4,.95),A=[];a.length===0&&A.push("Preferred asset types"),s.length===0&&A.push("State availability"),(p.length===0||!m.max)&&A.push("Value band (min/max)"),u.length===0&&A.push("Restricted risks / exclusions"),y||A.push("Pricing tendency notes"),h||A.push("Underwriting rules"),T.length===0&&A.push("Carrier rep distribution emails");const v=[];e.fileName&&v.push(`Document: ${e.fileName}`),e.text&&v.push(`Pasted text (${e.text.length} chars)`),v.push("OCR + LLM appetite extractor"),a.length>0&&v.push("Asset-type classifier"),s.length>0&&v.push("Geographic gazetteer");const S=a.length===0&&s.length===0?`Couldn't confidently extract appetite from the source. ${A.length} field${A.length===1?"":"s"} need manual entry.`:`Parsed ${a.length} asset type${a.length===1?"":"s"} and ${s.length} state${s.length===1?"":"s"} from the source.${A.length>0?` ${A.length} field${A.length===1?"":"s"} still need manual entry.`:""}`;return{preferredAssetTypes:a.length>0?a:void 0,appetites:p.length>0?p:void 0,stateAvailability:s.length>0?s:void 0,restrictedRisks:u.length>0?u:void 0,appetiteNotes:g,tendencyNotes:y||void 0,underwritingRules:h||void 0,carrierEmailHints:T.length>0?T:void 0,summary:S,confidence:_,sources:v,missingFields:A}}function FI(e){return e.replace(/\r/g,"").split(new RegExp("\\n+|(?<=[.!?])\\s+")).map(t=>
27t.trim()).filter(Boolean).slice(0,18)}function BI(e){return Array.from(new Set(e.match(/\$\s?\d[\d,]*(?:\.\d{2})?(?:\s?(?:annual|annually|year|yr|premium))?/gi)??[])).slice(0,8)}function Qn(e,t){var n;const r=e.match(new RegExp(`${t.source}\\s*:?\\s*([^\\n\\r]+)`,t.flags));return((n=r==null?void 0:r[1])==null?void 0:n.replace(/^[-*•]\s*/,"").trim())||void 0}function UI(e){var r;const t=Qn(e,/(?:estimated\s+)?annual\s+premium/i);return(r=t==null?void 0:t.match(/\$\s?\d[\d,]*(?:\.\d{2})?/))==null?void 0:r[0]}function km(e){const t=[e.email.subject??"",e.email.text??"",e.email.html??""].join(`
28`).replace(/<[^>]+>/g," "),r=t.toLowerCase(),n=FI(t),i=v=>n.filter(S=>v.some(C=>C.test(S))).slice(0,6),a=(e.email.attachments??[]).filter(v=>/\.pdf$/i.test(v.fileName??"")||/pdf/i.test(v.fileType??"")||/supplement/i.test(v.fileName??"")).map(v=>v.fileName??"Supplemental attachment").filter(Boolean),s=UI(t),o=s?[s]:BI(t),c=Qn(t,/policy\s+type/i),d=Qn(t,/(?:proposed\s+)?effective\s+date/i),m=Qn(t,/(?:property\s+)?deductible/i),p=Qn(t,/commission/i),u=t.match(/(?:need(?:ed)?|required|respond|response|due|provide|send|return|receive)[^.!?\n]{0,60}\bby\s+((?:jan(?:uary)?|feb(?:ruary)?|mar(?:ch)?|apr(?:il)?|may|jun(?:e)?|jul(?:y)?|aug(?:ust)?|sep(?:tember)?|oct(?:ober)?|nov(?:ember)?|dec(?:ember)?)\s+\d{1,2}(?:,\s*\d{4})?|\d{1,2}[\/-]\d{1,2}[\/-]\d{2,4})/i),f=u?new Date(u[1]):null,g=f&&Number.isFinite(f.getTime())?f.toISOString().slice(0,10):void 0,y=i([/\bdeclin(?:e|ed|ing)\b/i,/\bno appetite\b/i,/\bunable to quote\b/i,/\bcannot quote\b/i,/\bnot able to offer\b/i]),h=i([/\bsupplemental\b/i,/\bmore information\b/i,/\badditional information\b/i,/\bneed(?:ed|s)?\b/i,/\brequir(?:e|ed|es)\b/i]),w=i([/\bquote\b/i,/\bpremium\b/i,/\bindication\b/i,/\bproposal\b/i,/\bbind(?:able|ing)?\b/i]),T=i([/\bapprov(?:e|ed|al)\b/i,/\bcan proceed\b/i,/\bwe can consider\b/i,/\baccepted\b/i,/\bappetite\b/i]),b=i([/\brequired prior to bind(?:ing)?\b/i,/\bsubject to\b/i,/\bto bind\b/i,/\bbinding (?:condition|requirement|subjectiv)/i,/\bcoverage is not bound\b/i]),_=h.filter(v=>!b.includes(v)).map(v=>v.replace(/^(please|we|carrier|underwriter)\s+/i,"").trim()).filter(v=>v.length>8).slice(0,8);if(y.length>0)return{outcome:"declined",confidence:.84,coverages:[],limits:[],premiums:[],deductibles:[],terms:[],carrierNotes:[],conditions:[],nextSteps:[],requestedItems:[],supplementalAttachmentNames:[],declineReason:y[0],evidenceSnippets:y,requiresAgentReview:!1,responseDeadline:g};if(o.length>0&&(T.length>0||w.length>0))return{outcome:"quoted",confidence:T.length>0?.92:.8,policyType:c,coverages:[],limits:Array.from(new Set(t.match(/\$?\d[\d,]*(?:,\d{3})*(?:\s?(?:limit|coverage|occurrence|aggregate))/gi)??[])).slice(0,8),premiums:o,deductibles:m?[m]:[],terms:[d?`Effective date: ${d}`:"",p?`Commission: ${p}`:""].filter(Boolean),carrierNotes:[...T,...w].slice(0,8),conditions:b,nextSteps:[...b,...i([/\bnext step\b/i,/\bsubject to\b/i,/\bunderwriting\b/i])].slice(0,8),requestedItems:[],supplementalAttachmentNames:[],evidenceSnippets:[...T,...w,...b].slice(0,8),requiresAgentReview:!1,responseDeadline:g};if(a.length>0||_.length>0)return{outcome:"more_info_required",confidence:a.length>0?.82:.74,coverages:[],limits:[],premiums:o,deductibles:[],terms:[],carrierNotes:w,conditions:[],nextSteps:[],requestedItems:_.length?_:["Carrier requested supplemental information."],supplementalAttachmentNames:a,evidenceSnippets:[...h,...w].slice(0,8),requiresAgentReview:!1,responseDeadline:g};if(o.length>0&&w.length>0)return{outcome:"quoted",confidence:.8,coverages:[],limits:Array.from(new Set(t.match(/\$?\d[\d,]*(?:,\d{3})*(?:\s?(?:limit|coverage))/gi)??[])).slice(0,8),premiums:o,deductibles:Array.from(new Set(t.match(/\$?\d[\d,]*(?:,\d{3})*(?:\s?(?:deductible|ded))/gi)??[])).slice(0,8),terms:[],carrierNotes:w,conditions:[],nextSteps:i([/\bnext step\b/i,/\bsubject to\b/i,/\bunderwriting\b/i]),requestedItems:[],supplementalAttachmentNames:[],evidenceSnippets:w,requiresAgentReview:!1,responseDeadline:g};const A=/\b(application|underwriting|quote|carrier|policy|premium|supplemental|decline)\b/.test(r);return{outcome:"pending",confidence:A?.48:.28,coverages:[],limits:[],premiums:o,deductibles:[],terms:[],carrierNotes:A?n.slice(0,4):[],conditions:[],nextSteps:[],requestedItems:[],supplementalAttachmentNames:a,evidenceSnippets:n.slice(0,4),requiresAgentReview:!0,responseDeadline:g,agentReviewReason:"Carrier reply did not clearly state quote, decline, or supplemental outcome."}}async function Rm(e){const t=await Et("/ai/parse-carrier-reply",{submission:e.submission,email:e.email},{timeoutMs:6e4,softFail:!0});return t&&typeof t.outcome=="string"&&typeof t.confidence=="number"&&Array.isArray(t.evidenceSnippets)?{...t,coverages:Array.isArray(t.coverages)?t.coverages:[],limits:Array.isArray(t.limits)?t.limits:[],premiums:Array.isArray(t.premiums)?t.premiums:[],deductibles:Array.isArray(t.deductibles)?t.deductibles:[],terms:Array.isArray(t.terms)?t.terms:[],carrierNotes:Array.isArray(t.carrierNotes)?t.carrierNotes:[],conditions:Array.isArray(t.conditions)?t.conditions:[],nextSteps:Array.isArray(t.nextSteps)?t.nextSteps:[],requestedItems:Array.isArray(t.requestedItems)?t.requestedItems:[],supplementalAttachmentNames:Array.isArray(t.supplementalAttachmentNames)?t.supplementalAttachmentNames:[],requiresAgentReview:t.requiresAgentReview===!0||t.confidence<.72,responseDeadline:typeof t.responseDeadline=="string"&&/^\d{4}-\d{2}-\d{2}$/.test(t.responseDeadline)?t.responseDeadline:void 0}:km(e)}const VI={coastal_home:["Year built","Square footage","County, township, or municipality","Home style","Foundation details","Construction type","Frame and exterior materials","Roof shape, pitch, material, and skylights","Roof age","Attached structures","Detached structures and recreational features","Heating and cooling systems","Electrical and safety systems","Updates and remodels","Distance to coast","Lot size","Flood zone","Occupancy","Estimated exposure value","Owner of record"],luxury_vehicle:["Year / make / model","VIN-decoded trim","Curb weight","MSRP at sale","Safety features","Stated value","Garaging address"],yacht:["Hull length","Year built","Hull material","Cruising speed","Marina / mooring"],jewelry:["Item type","Appraised value","Storage location"],umbrella_liability:["Underlying policies","Net worth tier (estimated)"]},jI={coastal_home:["Ownership and lien details","Prior or mailing address in the last 3 years","Number of units and wall height","Interior walls, ceilings, and floors","Kitchen and bathroom quality","Interior features","Animals, business, rental, and liability exposures","Jewelry, watches, guns, furs, art, collections, medical equipment, vault or safe","Prior carrier, coverage, policy number, expiration date, deductible, and losses","Requested endorsements and special coverages","Discounts and protection details"],luxury_vehicle:["Purchase date, new/used, own/lien/lease, and name on title","Lienholder or lessor name and address","Business, delivery, rideshare, advertising, or wrapped vehicle use","Distance one way, days per week, and annual mileage","Principal operator","Customized equipment or modifications","Requested liability, property damage, and UM/UIM limits","Comprehensive and collision coverage / deductibles","Roadside, rental, glass, gap, and travel coverage","All drivers and household members","Tickets, accidents, PIP, deer, glass, or other claims","Prior carrier, policy number, expiration date, term, and loss-free years","Discounts, groups, payment plan, health insurance, and deductible choices","Motorcycle or special vehicle details, if applicable"],yacht:["Cruising area (e.g. Atlantic coast, Caribbean, Great Lakes)","Captain & crew details (licensed? years experience?)","Marina + slip address (where moored)","Hurricane plan","Loss history in last 5 years"],jewelry:["Recent appraisal (year, appraiser, replacement value)","Storage when not worn (home safe / bank vault / on person)","Travel frequency with the item"],umbrella_liability:["Confirmed underlying limits (HO / Auto / Watercraft)","Household drivers under age 25","Dog breed + bite history (if any)","Pool + diving board / 
28slide","Public-facing roles (board seats, media, etc.)"]},QI=new Set(["agent_seed","client_intake","validated_address","public_geocoder","web_search","public_web","government_api","commercial_provider","imagery_vision","carrier_api","model_estimate"]);function Ql(e){return QI.has(e)?e:"unknown"}function HI(e){return e==="web_search"||e==="public_web"||e==="government_api"||e==="commercial_provider"||e==="imagery_vision"}function zI(e){return new Set(e.flatMap(t=>{try{return[new URL(t).hostname.toLowerCase().replace(/^www\./,"")]}catch{return[]}})).size}function GI(e){const t=e.toLowerCase().replace(/[^a-z0-9]+/g," ").trim();return/\b(address|location|premises|garaging|mooring|risk)\b/.test(t)}function _s(e){return/\d/.test(e)&&/\b(st|street|rd|road|ave|avenue|dr|drive|ln|lane|blvd|boulevard|ct|court|cir|circle|way|pkwy|parkway|hwy|highway|pl|place|terrace|ter|trail|mi|fl|ga|sc|ny|ca|tx|il|oh|pa|zip)\b/i.test(e)}function Em(e){return/\b(unknown|not public|not publicly|not found|not listed|not noted|no public|no information|no data|information unavailable|not provided|n\/a|not available|unconfirmed|requires|needed|needs verification|verify|applicant|attestation|clue|loss runs?|likely|possibly|probably|appears|seems|may be|might be|could be|assumed|inferred|estimated|estimate only|approximately|approx\.?|needs? confirmation|subject to verification)\b/i.test(e)}function Hl(e){const t=Oe(e);if(!t)return!1;try{const r=new URL(t);if(r.protocol!=="http:"&&r.protocol!=="https:")return!1;const n=r.hostname.toLowerCase().replace(/^www\./,"");return!((n==="quotexinsurance.com"||n.endsWith(".quotexinsurance.com"))&&r.pathname.startsWith("/customer/questionnaire/"))}catch{return!1}}function WI(e){return/\d/.test(e.trim())}function KI(e,t,r={}){const n=e.toLowerCase().replace(/[^a-z0-9]+/g," ").trim();if(r.questionnairePrefill&&Em(t))return!1;if(GI(e))return _s(t);if(/\b(email)\b/.test(n))return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t);if(/\b(phone|telephone)\b/.test(n))return t.replace(/\D/g,"").length>=7;if(/\b(fein|ein|tax id)\b/.test(n))return t.replace(/\D/g,"").length>=9;if(/\b(year built|roof year|model year|year started)\b/.test(n)){const i=Number(t.trim());return Number.isInteger(i)&&i>=1800&&i<=new Date().getFullYear()+2}return/\byears in business\b/.test(n)?/^\d{1,3}$/.test(t.trim()):/\b(square footage|living area|building area|lot size|number of stories|stories|bedrooms|bathrooms|roof age)\b/.test(n)?/^\$?\s*\d[\d,]*(?:\.\d+)?$/.test(t.trim())||!!(r.questionnairePrefill&&WI(t)):/\b(occupancy|occupied|use)\b/.test(n)?/\b(primary|secondary|seasonal|vacation|rental|tenant|owner|occupied|vacant)\b/i.test(t):/\b(construction type|construction|roof material|roof type|flood zone|protection class)\b/.test(n)?!_s(t)&&!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t)&&t.trim().length<=(r.questionnairePrefill?220:80):!(/\b(name|insured|applicant|business)\b/.test(n)&&_s(t))}function ko(e){const t=e.toLowerCase().replace(/\s+/g," ").trim();return!!(!t||t.includes("?")||/\bexplain all\b|\byes responses?\b|\bremarks?\b|\bdetails?\b/.test(t)||/\bfax\b|\bsecondary\b|\balternate\b|\bssn\b|\bsocial security\b/.test(t))}function YI(e){const t=e.toLowerCase().replace(/[^a-z0-9]+/g," ").trim();return!(!t||ko(t)||/\b(loss|claim|incident|conviction|violation|mvr|bankruptcy|cancel|nonrenew|authorization|authorize|fein|tax id|ssn|social security)\b/.test(t))}function JI(e,t="document_autofill"){const r=Xt(e)?e:{},n={},i={},a=[];(Array.isArray(r.mappings)?r.mappings:[]).forEach(d=>{if(!Xt(d))return;const m=Oe(d.targetField),p=Oe(d.value),u=xr(Number(d.confidence??0),0,1),f=d.verified===!0,g=d.conflictDetected===!0,y=Oe(d.conflictReason),h=Em(p);if(!m||!p||g||y||h||ko(m)||!KI(m,p,{questionnairePrefill:t==="questionnaire_prefill"}))return;const w=Ql(d.sourceKind),T=Oe(d.sourceUrl);if(w==="model_estimate"||w==="unknown"||HI(w)&&!Hl(T))return;const b=f&&u>=.84&&w!=="public_web",_=t==="questionnaire_prefill"&&YI(m)&&u>=.55&&(f||w==="public_web"||w==="web_search"||w==="public_geocoder"||w==="commercial_provider"||w==="government_api"||w==="imagery_vision"&&u>=.82&&!!T||w==="client_intake");if(!b&&!_)return;const A=Oe(d.sourceLabel)||"Verified Quotex AI mapping",v=Oe(d.targetId),S=Array.isArray(d.supportingSources)?d.supportingSources.filter(Xt).map(q=>({label:Oe(q.label)||"Supporting source",url:Oe(q.url),sourceKind:Ql(q.sourceKind),observedDate:Oe(q.observedDate)||void 0})).filter(q=>Hl(q.url)).filter((q,B,F)=>F.findIndex(Y=>Y.url===q.url)===B).slice(0,6):[],C=zI([T,...S.map(q=>
28q.url)].filter(Boolean)),k=d.reviewRequired===!0||w==="imagery_vision",O=Oe(d.reviewReason)||(w==="imagery_vision"?"Visual observation must be confirmed before carrier submission.":""),x=k?w==="imagery_vision"?"advisory":"needs_confirmation":w==="web_search"||w==="public_web"?C>=2?"corroborated":"needs_confirmation":f?"verified":"needs_confirmation",$={...v?{targetId:v}:{},...T?{sourceUrl:T}:{},targetField:m,value:p,sourceLabel:A,sourceKind:w,confidence:u,verified:f,...k?{reviewRequired:!0}:{},...O?{reviewReason:O}:{},...S.length>0?{supportingSources:S}:{},...C>0?{corroboratingSourceCount:C}:{},rationale:Oe(d.rationale)};n[m]=p,Pr(i,m,w,A,{confidence:u,verified:f,allowDocumentAutofill:b,sourceUrl:T,reviewStatus:x,reviewReason:O,corroboratingSourceCount:C,supportingSources:S,notes:[$.rationale,T?`Source URL: ${T}`:""].filter(Boolean).join(" ")||(b?"Mapped by server-side ACORD AI with source-backed verification.":"Mapped as editable questionnaire prefill from source-backed AI research.")}),t==="questionnaire_prefill"&&v&&(n[v]=p,Pr(i,v,w,A,{confidence:u,verified:f,allowDocumentAutofill:!1,sourceUrl:T,reviewStatus:x,reviewReason:O,corroboratingSourceCount:C,supportingSources:S,notes:[$.rationale,T?`Source URL: ${T}`:""].filter(Boolean).join(" ")||"Mapped as editable questionnaire prefill from source-backed AI research."})),a.push($)});const o=Array.isArray(r.missingFields)?r.missingFields.map(Oe).filter(d=>d&&!ko(d)):[],c=Array.isArray(r.webSources)?r.webSources.filter(Xt).map(d=>({title:Oe(d.title),url:Oe(d.url),field:Oe(d.field)})).filter(d=>d.title||d.url||d.field):[];return{fields:n,publicFieldEvidence:i,mappings:a,missingFields:o,webSources:c,summary:Oe(r.summary)||`Mapped ${a.length} verified ACORD field${a.length===1?"":"s"}.`,confidence:xr(Number(r.confidence??(a.length?.84:0)),0,1),providerError:Oe(r.providerError),providerErrorCode:Oe(r.providerErrorCode)}}async function Aa(e){const t=await Et("/ai/acord-map",{tenantId:e.tenantId,template:e.template,fields:e.fields,dossier:e.dossier,intent:e.intent},{timeoutMs:24e4,requireServer:!0});return t?JI(t,e.intent):{fields:{},publicFieldEvidence:{},mappings:[],missingFields:e.fields.map(r=>r.label).filter(Boolean),webSources:[],summary:e.intent==="questionnaire_prefill"?"OpenAI-backed questionnaire mapping route was unavailable; no editable questionnaire answers were changed.":"OpenAI-backed ACORD mapping route was unavailable; no document fields were changed.",confidence:0,providerError:"Server AI route was unavailable.",providerErrorCode:"server_ai_unavailable"}}async function ZI(e){const t=VI[e.assetType]??[],r={},n={},i=(f,g,y,h,w)=>{const T=Oe(g);if(!T||Xb(T))return;const b=n[f],_=y==="government_api"&&w.verified&&b&&["agent_seed","client_intake","model_estimate","unknown"].includes(b.sourceKind);r[f]&&(b==null?void 0:b.sourceKind)!=="model_estimate"&&!_||(r[f]=T,Pr(n,f,y,h,w))};for(const f of t){const g=Sb(e.assetType,f,e.assetDetails,{address:e.address,estimatedValue:e.estimatedValue});g&&i(f,g,"agent_seed","QuoteX intake",{confidence:.9,verified:!0,allowDocumentAutofill:!0,notes:"Already present in the client or agent quote intake."})}e.estimatedValue&&i("Estimated exposure value",e.estimatedValue,"agent_seed","QuoteX intake",{confidence:.86,verified:!0,allowDocumentAutofill:!0,notes:"Exposure value supplied in the quote request."});const a=XI(e.assetType,e.address,e.assetDetails,t);if(!e.deferExternalEnrichment&&Object.keys(a).length>0){const f=await Tc(e.assetType,a,t.map(g=>({label:g,required:!0})));ev(e.assetType,t,f,i)}const s=t.filter(f=>!eI(r,n,f)),o=(jI[e.assetType]??[]).filter(f=>!Tb(e.assetType,f,e.assetDetails)),c=[...s,...o],d=kb(e.assetType,e.assetDetails),m=Object.values(n).filter(Er).length,p=Object.values(n).filter(f=>f.sourceKind==="model_estimate").length,u=e.deferExternalEnrichment?`Carrier selection is required before targeted AI research. ${Object.keys(r).length} intake value${Object.keys(r).length===1?" was":"s were"} preserved without running broad external lookups.`:`Prepared ${m} verified document-ready field${m===1?"":"s"} and kept ${p} estimate-only signal${p===1?"":"s"} out of document autofill for the ${e.assetType.replace(/_/g," ")}${d.length>0?`, using ${d.length} agent-provided lookup detail${d.length===1?"":"s"}`:""}; need ${c.length} confirmation${c.length===1?"":"s"} from the client to bind a carrier quote.`;return{assetType:e.assetType,publicFields:r,publicFieldEvidence:n,missingFields:c,summary:u}}function XI(e,t,r,n=[]){const i=r??{},a=n.length>0?{questionnaireFields:n,publicFieldLabels:n}:{};if(e==="coastal_home"){const c=i.riskAddress??i.propertyAddress??i.address??t;return c?{address:c,...a}:{}}if(e==="luxury_vehicle")return i.vin?{vin:i.vin,...a}:{};if(e==="yacht"){const c=i.hin??i.hullId??i.hullIdentificationNumber,d=i.make??i.builder,m=i.model,p=i.year;return c||d||m||p?{hin:c,make:d,model:m,year:p,...a}:{}}if(e==="jewelry"||e==="umbrella_liability"){const c=i.assetIdentifier;return c?{assetIdentifier:c,...a}:{}}if(e==="full_portfolio"){const c=i.primaryAddress??i.primaryResidenceAddress??t;return c?{address:c,...a}:{}}const s=i.identifier??i.assetIdentifier,o=i.location??t;return s||o?{assetIdentifier:s,address:o,...a}:{}}function ev(e,t,r,n){const i=r.fields??{},a=r.evidence??{},s=c=>a[c]??Am(c,"unknown","Unlabeled enrichment",{confidence:r.confidence,verified:!1,allowDocumentAutofill:!1}),o=(c,d,m=i[d])=>{if(m==null||m==="")return;const p=s(d);n(c,m,p.sourceKind,p.sourceLabel,{confidence:p.confidence,verified:p.verified,allowDocumentAutofill:p.allowDocumentAutofill,notes:p.notes,sourceUrl:p.sourceUrl,observedDate:p.observedDate})};t.forEach(c=>{var d;if(i[c]!==void 0&&o(c,c),e==="coastal_home"&&(/year built/i.test(c)?o(c,"yearBuilt"):/square footage|sq ft/i.test(c)?o(c,"squareFootage"):/construction/i.test(c)?o(c,"constructionType"):/home style|style|stories/i.test(c)?o(c,"homeStyle"):/foundation/i.test(c)?o(c,"foundationDetail
28s"):/frame|exterior/i.test(c)?o(c,"frameAndExterior"):/roof shape|roof pitch|skylight/i.test(c)?o(c,"roofShapePitchMaterial"):/roof material/i.test(c)?o(c,"roofMaterial"):/roof age|roof year/i.test(c)?o(c,i.roofAge?"roofAge":"roofYear"):/attached structure|porch|deck|balcony|carport/i.test(c)?o(c,"attachedStructures"):/detached structure|recreational|pool|hot tub|trampoline/i.test(c)?o(c,"detachedStructuresAndRecreation"):/heating|cooling|hvac/i.test(c)?o(c,"heatingCoolingSystems"):/electrical|safety|alarm|sprinkler|surveillance/i.test(c)?o(c,"electricalAndSafetySystems"):/updates|remodel/i.test(c)?o(c,"homeUpdates"):/animals|liability exposure|business|rental/i.test(c)?o(c,"animalsAndLiabilityExposures"):/county|township|municipality/i.test(c)?o(c,"countyTownship"):/ownership|lien/i.test(c)?o(c,"ownershipAndLien"):/distance to coast/i.test(c)?o(c,"distanceToCoast"):/lot size/i.test(c)?o(c,"lotSize"):/flood zone/i.test(c)?o(c,"floodZone"):/occupancy/i.test(c)?o(c,"occupancy"):/estimated exposure value|estimated value|exposure value/i.test(c)&&o(c,"estimatedValue")),e==="luxury_vehicle"&&/year \/ make \/ model/i.test(c)){const m=[i.year,i.make,i.model].filter(Boolean).join(" ");if(!m)return;const p=["year","make","model"].map(u=>s(u));n(c,m,"government_api","NHTSA VIN decoder (vpic.nhtsa.dot.gov)",{confidence:Math.min(...p.map(u=>u.confidence)),verified:p.every(u=>u.verified),allowDocumentAutofill:p.every(u=>u.allowDocumentAutofill),notes:"Derived from NHTSA year, make, and model fields.",sourceUrl:(d=p.find(u=>u.sourceUrl))==null?void 0:d.sourceUrl})}if(e==="luxury_vehicle"&&/vin-decoded trim|trim/i.test(c)){const m=[i.trim,i.series].filter(Boolean).join(" / ");if(!m)return;const p=i.trim?s("trim"):s("series");n(c,m,p.sourceKind,p.sourceLabel,{confidence:p.confidence,verified:p.verified,allowDocumentAutofill:p.allowDocumentAutofill,notes:p.notes,sourceUrl:p.sourceUrl})}if(e==="luxury_vehicle"&&/curb weight/i.test(c)){const m=i.curbWeightLb?`${i.curbWeightLb} lb`:void 0;o(c,"curbWeightLb",m)}e==="luxury_vehicle"&&/msrp|base price/i.test(c)&&o(c,"basePrice")}),e==="luxury_vehicle"&&[["vehicleYear","year"],["vehicleMake","make"],["vehicleModel","model"],["vehicleTrim",i.trim?"trim":"series"],["vehicleBodyStyle","bodyClass"],["vehicleOriginalMsrp","basePrice"],["vehicleEngine","engineModel"],["vehicleCylinders","engineCylinders"],["vehicleDisplacement","displacementL"],["vehicleFuelType","fuelType"],["vehicleDriveType","driveType"],["vehicleDoorCount","doors"],["antiLockBrakes","antiLockBrakes"],["antiTheftDevice","antiTheftDevice"],["airbags","airbags"]].forEach(([d,m])=>{o(d,m)})}function tv(e){const t=e.contactName.trim();return/\b(llc|l\.l\.c\.|inc\.?|corp\.?|corporation|company|co\.?|group|holdings|partners|partnership|enterprises|industries|associates|consulting|capital|ventures|labs|studios|services|systems|technologies|tech|llp|lp|pllc|trust|foundation)\b/i.test(t)||e.assetType==="other"&&(e.estimatedValue??0)>=5e5?"commercial":"personal"}function xm(e){return e.missingFields.map(t=>{const r=t.toLowerCase(),n=/loss history|losses|claims|operations|notes|details|describe|usage|hurricane|specs|drivers|plan|registered/i.test(r)?"textarea":/mileage|count|year|age|sq ft|length|value|limit|per/i.test(r)?"number":/yes|no|pleasure|commute|business/i.test(r)&&/\((y\/n|yes\/no)\)/i.test(t)?"select":"text",i=n==="select"?["Yes","No","Not sure"]:void 0;return{id:`personal-${e.assetType}-${Ro(t)}`,section:`${e.assetType.replace(/_/g," ")} intake`,label:t,kind:n,options:i,required:!1,round:"initial"}})}function Pm(e){const t=[];return[{label:"Legal business name (as registered)",kind:"text",required:!0},{label:"Federal EIN",kind:"text",required:!0},{label:"Year established",kind:"number",required:!0},{label:"Entity type",kind:"select",options:["LLC","C-Corp","S-Corp","Partnership","Sole proprietor","Other"],required:!0},{label:"Primary industry / NAICS code",kind:"text",required:!0},{label:"Annual gross revenue (USD)",kind:"number",required:!0},{label:"Full-time employees (count)",kind:"number",required:!0},{label:"Part-time / seasonal employees (count)",kind:"number"},{label:"Business operations summary (2-3 sentences)",kind:"textarea",required:!0},{label:"Operating states",kind:"text",required:!0},{label:"Prior carrier (most recent)",kind:"text"},{label:"Claims in the last 5 years (Y/N + details)",kind:"textarea",required:!0}
28].forEach(n=>{t.push({id:`base-${Ro(n.label)}`,section:"Base business intake",label:n.label,kind:n.kind,options:n.options,required:n.required,round:"initial"})}),e.carrierList.forEach(n=>{const i=`${n.name} — supplemental`,a=[];a.push({label:`${n.name}: do you carry separate cyber liability coverage?`,kind:"select",options:["Yes","No","Pending quote"]}),a.push({label:`${n.name}: do you operate outside the US?`,kind:"select",options:["No","Canada/Mexico only","Worldwide"]}),n.preferredAssetTypes.includes("luxury_vehicle")&&a.push({label:`${n.name}: fleet — number of company-owned vehicles`,kind:"number"}),n.preferredAssetTypes.includes("coastal_home")&&a.push({label:`${n.name}: commercial property — locations + sq ft`,kind:"textarea"}),a.push({label:`${n.name}: any pending or threatened litigation?`,kind:"textarea"}),a.forEach(s=>{t.push({id:`${n.id}-${Ro(s.label)}`,section:i,label:s.label,kind:s.kind,options:s.options,carrierId:n.id,round:"initial"})})}),t}function Ro(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"").slice(0,40)}function rv(e){const t="A few details to finalize your quote",r=`Hi ${e.prospectName.split(/\s+/)[0]},`,n=`Thank you for working with ${e.agencyName}. I have pulled what I can from public records — to lock in firm quotes from our carriers I just need you to confirm or fill in the items below.`,i=e.missingFields.map((o,c)=>`${c+1}. ${o}`).join(`
29`),a="Reply right to this email and I'll feed it into our quoting engine — once we have these answers, you'll usually have firm numbers back the same business day.",s=e.agentName?`Best,
30${e.agentName}`:`Best,
31${e.agencyName}`;return{subject:t,body:[r,"",n,"",i,"",a,"",s].join(`
32`)}}function kc(e){var a;const t=e.carriers.filter(s=>s.status==="active"),r=t.map(s=>{var T,b,_;const o=e.lineOfBusiness??"personal",c=(s.appetites??[]).find(A=>A.assetType===e.assetType&&(A.line??"personal")===o)??(o==="commercial"?(s.appetites??[]).find(A=>A.assetType===e.assetType):void 0);let d=0,m=[];if(c){d+=.4,m.push("appetite match");const A=c.minValue??0,v=c.maxValue??Number.MAX_SAFE_INTEGER;e.estimatedValue>=A&&e.estimatedValue<=v&&(d+=.2,m.push("value in band"))}else m.push("no appetite row");if(e.state&&s.stateAvailability.includes(e.state)?(d+=.2,m.push(`writes in ${e.state}`)):e.state&&m.push(`not licensed in ${e.state}`),c){const A=$b(c.pricingTendency);d+=A,A>=.18?m.push("preferred pricing tendency"):A>=.1?m.push("market pricing tendency"):A>0?m.push("premium pricing tendency"):m.push("pricing tendency outside target")}const p=uc(s);p.canAttempt?m.push("portal playbook ready"):s.portalPlaybook&&m.push(p.label.toLowerCase());const u=e.assetType==="coastal_home"?.006:e.assetType==="luxury_vehicle"?.012:e.assetType==="yacht"?.015:e.assetType==="jewelry"?.018:e.assetType==="umbrella_liability"?8e-4:.01,f=(c==null?void 0:c.pricingTendency)??1,g=.85+s.id.charCodeAt(s.id.length-1)%30/100,y=Math.round(e.estimatedValue*u*f*g),h=xr(.55+d*.4,.5,.95),w=((T=s.quotingApi)==null?void 0:T.status)==="connected"?"connected":((b=s.quotingApi)==null?void 0:b.status)==="configured"||((_=s.quotingAutomation)==null?void 0:_.status)==="configured"||p.canAttempt?"simulated":"no_api";return{carrierId:s.id,premium:y,confidence:h,score:xr(d,0,1),fitReason:m.join(" · "),apiStatus:w}});r.sort((s,o)=>o.score-s.score||s.premium-o.premium);const n=r[0],i=n?`${t.length} carrier${t.length===1?"":"s"} queried. Top recommendation: ${((a=t.find(s=>s.id===n.carrierId))==null?void 0:a.name)??"—"} based on ${n.fitReason}${e.lineOfBusiness==="commercial"?" after commercial appetite screening":""}.`:`No active carriers configured for ${e.assetType.replace(/_/g," ")}.`;return{quotes:r,summary:i}}function Nm(e){const t=`${e.title??""} ${e.description??""}`.toLowerCase(),r=s=>s.test(t),n=/\b(add|added|adding|new|additional|insure|cover)\b[\s\S]{0,40}\b(vehicle|car|auto|truck|suv|boat|yacht|vessel|jewelry|ring|watch|home|house|property|dwelling|condo|asset|driver|toy|rv|motorcycle)\b/,i=/\b(file|filing|open|report|submit)\b[\s\S]{0,30}\bclaim\b|\bclaim\b[\s\S]{0,20}\b(file|open|report)\b/,a=/\b(upload|attach|provide|send|submit|sign|signature|e-?sign)\b[\s\S]{0,30}\b(document|doc|paperwork|form|declaration|dec page|id|license|proof)\b/;switch(e.topic){case"coverage_change":case"endorsement_request":return r(n)?xi:Pi;case"policy_edit_request":return r(n)?xi:Pi;case"cancellation_request":return Pi;case"claim_filed":case"claim_status":return Gl;case"document_upload":return zl;case"coverage_gap":return r(n)?xi:Pi;
32case"renewal_approaching":case"payment_issue":case"other":case void 0:default:return r(n)?xi:r(i)?Gl:r(a)?zl:nv}}const xi={kind:"asset_added",label:"AI confirms the asset was added",expectation:"This activity is about adding an asset (e.g. a vehicle) to the account. The AI is watching for a new asset on this client before it will unlock resolve.",evidence:"a new asset added to this client's account since the activity opened"},Pi={kind:"policy_changed",label:"AI confirms the policy change landed",expectation:"This activity is about changing a policy. The AI is watching for a new or edited policy on this client before it will unlock resolve.",evidence:"a new policy, or a logged policy edit, on this client since the activity opened"},zl={kind:"document_added",label:"AI confirms the document was filed",expectation:"This activity is about a document. The AI is watching for a new document on this client before it will unlock resolve.",evidence:"a new document filed to this client since the activity opened"},Gl={kind:"claim_filed",label:"AI confirms the claim was filed",expectation:"This activity is about a claim. The AI is watching for a claim opened on this client before it will unlock resolve.",evidence:"a claim opened for this client since the activity opened"},nv={kind:"none",label:"AI verification",expectation:"",evidence:""},bn="2026-07-24-v4";function qm(e){const r=(e??"").replace(/<br\s*\/?\s*>/gi,`
33`).replace(/<\/p\s*>/gi,`
34`).replace(/<[^>]+>/g," ").replace(/&nbsp;/gi," ").replace(/&amp;/gi,"&").replace(/&lt;/gi,"<").replace(/&gt;/gi,">").replace(/&quot;/gi,'"').replace(/&#39;|&apos;/gi,"'").replace(/\r\n?/g,`
35`).split(`
36`),n=[],i=/^(?:>{1,}|on .+ wrote:|from:\s|sent:\s|to:\s|subject:\s|-----+\s*original message\s*-----+)/i,a=/^(?:--\s*$|_{3,}\s*$|confidentiality notice|this (?:email|message) and any attachments|unsubscribe\b|manage (?:your )?preferences|view (?:this )?email in (?:your )?browser)/i;for(const s of r){const o=s.trim();if(i.test(o)||a.test(o))break;n.push(o)}return n.join(`
37`).replace(/\n{3,}/g,`
38
39`).replace(/[ \t]+/g," ").trim()}function Om(e){const t=qm(e.body),r=(e.subject??"").replace(/^\s*(?:re|fw|fwd):\s*/gi,"").trim(),n=`${r} ${t}`.toLowerCase().trim(),i=e.contactName??"Contact",a=u=>u.test(n),s=(u="No actionable intent was identified.",f=[])=>({disposition:"ignore",warrants:!1,title:"",topic:"other",severity:"info",reason:u,confidence:"high",evidence:f,requiresHumanReview:!1,version:bn});if(!t||/^(thanks|thank you|thx|ty|ok|okay|k|got it|great|perfect|sounds good|will do|received|no problem|np|cheers|appreciate it|👍+|🙏+)[!.\s]*$/i.test(t)||t.length<6&&!t.includes("?"))return s("The newest message is an acknowledgement or contains no actionable content.",["newest_message:acknowledgement"]);if(/\b(unsubscribe|view in browser|manage (?:your )?preferences|newsletter|livestream|new listing|price cut|open house|shop now|limited time offer)\b/i.test(`${e.subject??""} ${e.body??""}`))return s("Bulk or promotional email was excluded from workflow automation.",["message_pattern:bulk_marketing"]);const c=(u,f,g,y="activity",h="high",w=[])=>({disposition:y,warrants:y==="activity",title:`${i}: ${g}`,topic:u,severity:f,reason:`AI read an inbound ${e.channel?e.channel.toUpperCase()+" ":""}message and ${y==="activity"?"opened an activity":"logged a notification"} from the newest message - "${iv(t)}"`,confidence:h,evidence:w,requiresHumanReview:h!=="high",version:bn}),d=/\b(?:i|we|my|our)\b[\s\S]{0,35}\b(?:had|have|experienced|suffered|was in|were in|reported)\b[\s\S]{0,35}\b(?:accident|collision|crash|theft|burglary|fire|flood|water damage|hail damage|storm damage|loss|injury)\b/i,m=/\b(?:file|open|start|report|submit)\b[\s\S]{0,25}\b(?:a\s+)?claim\b/i;if(d.test(n)||m.test(n))return c("claim_filed","urgent","possible claim / loss reported","activity","high",["intent:explicit_claim_or_loss"]);if(a(/\b(?:please\s+cancel|cancel\s+(?:my|our|the)\s+(?:policy|coverage)|want\s+to\s+cancel|terminate\s+(?:my|our|the)\s+(?:policy|coverage)|do\s+not\s+renew|stop\s+(?:my|our)\s+coverage)\b/))return c("cancellation_request","urgent","wants to cancel coverage","activity","high",["intent:explicit_cancellation_request"]);if(e.contactKind==="carrier")return a(/\b(?:declin(?:e|ed)|not eligible|subjectivit(?:y|ies)|supplemental|additional information|missing information|required prior to binding|binding requirement|underwriting question|non[- ]renewal)\b/)?c("coverage_change","warning","carrier response needs review","activity","high",["carrier_intent:underwriting_action_required"]):a(/\b(?:approved|accepted|quoted|proposal|annual premium|policy limits?|deductible|commission|effective date|bindable)\b/)?c("coverage_change","info","carrier quote or decision received","notification","high",["carrier_intent:quote_or_decision"]):s("The carrier message did n
39ot contain a verified quote, decision, or underwriting request.",["carrier_intent:none"]);if(a(/\b(certificate of insurance|proof of insurance|coi)\b/)&&a(/\b(send|email|issue|provide|get|need|request|attach|copy|could you|can you|please)\b/))return{...c("document_upload","info","certificate of insurance requested","notification"),serviceIntent:"certificate_of_insurance"};if(a(/\b(insurance id card|auto id card|vehicle id card|proof of auto insurance)\b/)&&a(/\b(send|email|issue|provide|get|need|request|attach|copy|could you|can you|please)\b/))return{...c("document_upload","info","insurance ID card requested","notification"),serviceIntent:"insurance_id_card"};if(a(/\b(declarations page|declaration page|dec page)\b/)&&a(/\b(send|email|provide|get|need|request|attach|copy|could you|can you|please)\b/))return{...c("document_upload","info","declarations page requested","notification"),serviceIntent:"declarations_page"};if(a(/\b(full policy|policy copy|copy of (?:my|the) policy|policy booklet)\b/)&&a(/\b(send|email|provide|get|need|request|attach|copy|could you|can you|please)\b/))return{...c("document_upload","info","policy copy requested","notification"),serviceIntent:"policy_copy"};if(a(/\b(quote|estimate|pricing|rate|proposal)\b/)&&a(/\b(vehicle|car|auto|truck|pickup|suv|van|ford|chev(?:y|rolet)|gmc|ram|dodge|toyota|honda|nissan|tesla|bmw|mercedes|audi|jeep|subaru|hyundai|kia|volkswagen|volvo|lexus|acura|mazda|f[\s-]?150|silverado|sierra|tacoma|tundra|ranger)\b/)){const u=[],f=!!fm(`${r} ${t}`),g=a(/\b(personal|private passenger|family|household|commercial|business|company|business use|work use)\b/);return f||u.push("vin"),g||u.push("policy_line"),u.length>0?{...c("coverage_change","info","vehicle quote details needed","notification","high",["intent:vehicle_quote_request",...u.map(y=>`missing:${y}`)]),serviceIntent:"vehicle_quote_intake",serviceQuestions:u}:c("coverage_change","warning","vehicle quote request ready for review","activity","high",["intent:vehicle_quote_request","intake:complete"])}return a(/\b(add|adding|insure|cover|new)\b[\s\S]{0,40}\b(vehicle|car|auto|truck|suv|driver|boat|yacht|jewelry|ring|watch|home|house|property|condo|asset|rv|motorcycle)\b/)?c("coverage_change","warning","wants to add to their policy","activity","high",["intent:explicit_add_asset_or_driver"]):a(/\b(increase|decrease|raise|lower|change|update|adjust|add|remove)\b[\s\S]{0,30}\b(coverage|limit|deductible|endorsement|policy)\b/)?c("coverage_change","warning","requested a coverage change"):a(/\b(payment|invoice|bill|billed|charge|charged|refund|autopay|past due|overdue|premium)\b/)?a(/\b(past due|overdue|failed|declined|bounced|nsf|lapse|lapsed|non[- ]payment|nonpayment|chargeback|refund dispute|cancel(?:lation)? notice)\b/)?c("payment_issue","urgent","has a billing issue that may affect coverage"):c("payment_issue","info","billing update received","notification"):a(/\b(document|upload|sign|signature|e-?sign|form|declaration|dec page|proof of insurance|paperwork|attachment)\b/)?a(/\b(send|issue|provide|get|need|request)\b[\s\S]{0,35}\b(proof of insurance|certificate|coi|dec page|declaration|id card|binder)\b/)||a(/\b(wrong|incorrect|rejected|can't|cannot|unable|problem|issue|missing signature|expired)\b[\s\S]{0,35}\b(document|form|signature|attachment|paperwork)\b/)?c("document_upload","warning","document request needs service"):c("document_upload","info","document update received","notification"):a(/\b(renew|renewal|expire|expiring|expiration)\b/)?a(/\b(non[- ]renew|not renewing|carrier exiting|lapse|lapsed|expires today|expires tomorrow|remarket|re-shop|shop|review|change|increase|decrease)\b/)?c("renewal_approaching","warning","renewal needs review"):c("renewal_approaching","info","renewal update received","notification"):a(/\b(quote|estimate|proposal)\b/)?c("coverage_change","warning","asking about a quote / pricing","activity","medium",["intent:quote_or_proposal_mention"]):a(/\b(premium|price|pricing|rate)\b/)?c("other","info","pricing question received","notification"):a(/\?|\b(can you|could you|would you|please|need|how do|how can|when|why|what about|let me know|follow up|following up|waiting)\b/)?c("other","info","message may need a reply","notification","low",["intent:general_question_or_request"]):s("No explicit service, claim, billing, policy-change, or carrier intent was found.",["intent:none"])}function iv(e){const t=(e??"").trim().replace(/\s+/g," "),r=t.split(new RegExp("(?<=[.!?])\\s"))[0]??t;return r.length>90?`${r.slice(0,87)}…`:r}const Wl=Object.freeze(Object.defineProperty({__proto__:null,INBOUND_TRIAGE_VERSION:bn,aiClassifyActivityResolution:Nm,aiClassifyInbou
39ndForActivity:Om,aiDraftQuestionnaire:rv,aiEmailSubject:Ub,aiEnhanceMessage:Kb,aiEnrichAsset:Tc,aiExtractContactFromFile:PI,aiExtractPolicyFromFile:NI,aiGenerateCommercialQuestionnaire:Pm,aiGeneratePersonalQuestionnaire:xm,aiInferLineOfBusiness:tv,aiMapAcordFields:Aa,aiParseCarrierAppetite:$I,aiParseCarrierReply:Rm,aiPreparePublicFields:ZI,aiRankCarrierQuotes:kc,fallbackParseCarrierReply:km,newestInboundMessageText:qm},Symbol.toStringTag,{value:"Module"}));function As(e){return String(e??"").toLowerCase().replace(/[^a-z0-9]+/g,"")}function Rc(e){return e.toUpperCase()}function Dm(e){const t=As(e.key),r=As(e.id),n=String(e.label??"").trim().toLowerCase(),i=As(n);return["vin","vinnumber","vehiclevin","vehiclevinnumber"].includes(t)||["vin","vinnumber","vehiclevin","vehiclevinnumber"].includes(r)||["vin","vin number","vehicle vin","vehicle vin number"].includes(n)||/^vin\s*\(/i.test(n)?!0:i==="vehicleidentificationnumber"}function AT(e,t){return Dm(e)?Rc(t):t}const av={coastal_home:"Coastal Home",luxury_vehicle:"Luxury Vehicle",yacht:"Yacht",jewelry:"Jewelry",umbrella_liability:"Umbrella Liability",full_portfolio:"Full Portfolio",other:"Other"},sv={luxury_vehicle:"Vehicle"},ov=/\b[A-HJ-NPR-Z0-9]{17}\b/gi;function nr(e){return e==null?"":String(e).trim()}function Kr(e,t){for(const r of t){const n=nr(e[r]);if(n)return n;const i=Object.keys(e).find(a=>a.toLowerCase()===r.toLowerCase());if(i){const a=nr(e[i]);if(a)return a}}return""}function Ut(e){return e.replace(ov,t=>Rc(t))}function Ba(e){const t=nr(e).replace(/[^a-z0-9]/gi,"");return/^[A-HJ-NPR-Z0-9]{17}$/i.test(t)}function Ca(e){return av[e]??"Asset"}function CT(e){return sv[e]??Ca(e)}function Kl(e){return e.toLowerCase().replace(/[^a-z0-9]+/g," ").trim()}function cv(e){const t=[];for(const r of e.map(n=>Ut(nr(n))).filter(Boolean)){if(Ba(r))continue;const n=Kl(r);if(!n)continue;t.some(a=>{const s=Kl(a);return s===n||s.includes(n)||n.includes(s)}
39)||t.push(r)}return t.join(" ").trim()}function Lm(e){const t=Kr(e,["year","modelYear","vehicleYear","model_year"]),r=Kr(e,["make","vehicleMake","manufacturer","manufacturerName","vehicle_make"]),n=Kr(e,["model","vehicleModel","modelName","vehicle_model"]),i=Kr(e,["trim","vehicleTrim","trimLevel","series","series2","vehicleSeries","vehicle_trim"]);if(r||n)return cv([t,r,n,i]);const a=Kr(e,["yearMakeModel","makeModel","vehicleDescription","vehicle","assetName"]);return Ba(a)?"":Ut(a)}function ST(e){const t=nr(e.label);return e.type==="luxury_vehicle"?Lm(e.details??{})||(Ba(t)?"Luxury Vehicle":Ut(t))||"Luxury Vehicle":Ut(t)||Ca(e.type)}function Eo(e){const{type:t,details:r}=e;if(t==="luxury_vehicle")return Lm(r)||(Ba(e.fallbackLabel)?"":Ut(nr(e.fallbackLabel)))||e.categoryLabel||Ca(t);const n=Kr(r,["assetName","propertyAddress","riskAddress","address","primaryResidenceAddress","garagingAddress"])||nr(e.fallbackLabel)||e.categoryLabel||Ca(t);return Ut(n)}function lv(e,t){const r=nr(t);return Dm({key:e,label:e})?Rc(r):Ut(r)}function Yl(e){return Object.fromEntries(Object.entries(e).map(([t,r])=>[t,typeof r=="string"?lv(t,r):r]))}const Le={money(e,t="USD"){return new Intl.NumberFormat("en-US",{style:"currency",currency:t,maximumFractionDigits:0}).format(e)},date(e){return e?new Date(e).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"}):"—"},dateTime(e){return e?new Date(e).toLocaleString("en-US",{month:"short",day:"numeric",year:"numeric",hour:"numeric",minute:"2-digit"}):"—"},relative(e){if(!e)return"—";const t=(Date.now()-new Date(e).getTime())/1e3,r=t>=0,n=Math.abs(t),i=[[60,"s"],[60,"m"],[24,"h"],[7,"d"],[4.345,"w"],[12,"mo"],[1/0,"y"]];let a=n;for(const[s,o]of i){if(a<s)return r?`${Math.floor(a)}${o} ago`:`in ${Math.floor(a)}${o}`;a=a/s}return""},titleCase(e){return e.split(/[\s_]+/).map(t=>{var r;return((r=t[0])==null?void 0:r.toUpperCase())+t.slice(1)}).join(" ")},policyRef(e){return e?typeof e=="string"?e.trim()?`Policy #${e}`:"Policy pending":e.policyNumber&&e.policyNumber.trim()?`Policy #${e.policyNumber}`:e.id?`Policy #${e.id.slice(-6).toUpperCase()}`:"Policy pending":"Policy pending"}},TT={quote_started:"Quote Started",documents_needed:"Documents Needed",submitted_to_agent:"Submitted to Agent",under_agent_review:"Under Agent Review",submitted_to_carrier:"Submitted to Carrier",carrier_reviewing:"Carrier Reviewing",approved:"Approved",bound:"Bound",declined:"Declined",deposit_paid:"Deposit Paid",deposit_refunded:"Deposit Refunded",renewal_upcoming:"Renewal Upcoming",renewed:"Renewed",claim_opened:"Claim Opened",claim_closed:"Claim Closed",closed:"Closed"},kT={new:"New",contacted:"Contacted",quote_in_progress:"Quote In Progress",abandoned:"Abandoned",nurturing:"Nurturing",converted:"Converted",lost:"Lost"},RT={not_due:"Not Due",upcoming:"Upcoming",customer_notified:"Customer Notified",agent_notified:"Agent Notified",waiting_on_customer:"Waiting on Customer",submitted_for_renewal:"Submitted",renewed:"Renewed",not_renewed:"Not Renewed",lost:"Lost"};function ET(e){return e==="bound"||e==="approved"||e==="renewed"?"success":e==="declined"||e==="deposit_refunded"?"error":e==="renewal_upcoming"||e==="documents_needed"?"warn":e==="closed"||e==="quote_started"?"neutral":"info"}function xT(e){return e==="converted"?"success":e==="lost"?"error":e==="abandoned"?"warn":e==="new"?"info":"neutral"}const Mm="Get in touch",dv=new Set(["all_clients","all_prospects","auto_clients","coastal_home_clients","high_value_clients","renewal_clients"]);async function PT(e){var i;const t=await Et("/ai/marketing-creative",e,{timeoutMs:15e4,requireServer:!0});if(!t)throw new Error("The campaign could not be prepared. Your previous draft is unchanged. Please try again.");const r=uv(t),n=(i=e.agencyAddress)==null?void 0:i.trim();return n&&!r.emailBody.toLowerCase().includes(n.toLowerCase())&&(r.emailBody=dt(r.emailBody+`
40
41Mailing address: `+n,"email body including mailing address",1800)),r}function uv(e){if(!Jl(e)||!Jl(e.pamphlet))throw new Error("The campaign response was incomplete. Please try again.");const t=e.pamphlet,r=Array.isArray(t.highlights)?t.highlights.map(a=>dt(a,"highlight",120)):[];if(r.length<3||r.length>4||new Set(r.map(a=>a.toLowerCase())).size!==r.length)throw new Error("The pamphlet needs three or four distinct highlights. Please regenerate it.");
41const n=Array.isArray(e.audience)?e.audience.filter(a=>dv.has(a)):[];if(!n.length)throw new Error("The campaign audience was not recognized. Please try again.");const i={campaignName:dt(e.campaignName,"campaign name",80),strategy:dt(e.strategy,"strategy",600),channels:["email"],audience:[...new Set(n)],recurrence:"none",emailSubject:dt(e.emailSubject,"email subject",89),emailBody:dt(e.emailBody,"email body",1800),pamphlet:{eyebrow:dt(t.eyebrow,"eyebrow",40),headline:dt(t.headline,"headline",80),subheadline:dt(t.subheadline,"subheadline",150),intro:dt(t.intro,"introduction",360),highlightsTitle:dt(t.highlightsTitle,"highlights title",60),highlights:r,ctaTitle:dt(t.ctaTitle,"call to action",90),ctaButton:Mm,imagePrompt:dt(t.imagePrompt,"image direction",1400)}};if(i.emailBody.split(/\s+/).length<45||i.pamphlet.intro.split(/\s+/).length<20)throw new Error("The campaign copy needs more substance. Please regenerate it.");return i}function NT(e,t){return JSON.stringify([e.trim(),t])}async function qT(e){const t=await Et("/ai/marketing-image",{...e,nonce:crypto.randomUUID()},{timeoutMs:27e4,requireServer:!0});let r;try{r=new URL((t==null?void 0:t.imageUrl)||"")}catch{throw new Error("The campaign image could not be saved. Your copy is kept; try the image again.")}if(!t||t.imageValidated!==!0||t.imageSource!=="openai"||r.protocol!=="https:")throw new Error("The image did not pass its quality check. Your copy is kept; try the image again.");return t}function Jl(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function dt(e,t,r){const n=typeof e=="string"?e.replace(/\r\n/g,`
42`).trim():"";if(n.length<3||n.length>r)throw new Error("The campaign "+t+" was missing or too long. Please regenerate it.");return n}const Zl="/marketing/contact",$m="Get in touch";function mv(e){const t=new URLSearchParams;e.tenantId&&t.set("tenant",e.tenantId),e.customerId&&t.set("customer",e.customerId),e.prospectId&&t.set("prospect",e.prospectId);const r=t.toString();return r?`${Zl}?${r}`:Zl}function xo(e){var n;const t=mv(e),r=(n=e.origin)==null?void 0:n.trim().replace(/\/+$/g,"");if(!r)return t;try{return new URL(t,r).toString()}catch{return t}}function pv(e,t,r=$m){const n=e.trim();return!t||n.includes(t)?n:`${n}
43
44[${r}](${t})`}function fv(e,t,r="Campaign image"){const n=e.trim(),i=t==null?void 0:t.trim();return!i||n.includes(i)?n:`![${vv(r)}](${i})
45
46${n}`}function OT(e){const t=e.agency??null,r=e.appBase??"/agency-app",n=e.websiteBase??"/agency",i=e.customer??null;if(hv(e.userAgent)&&gv(t)&&yv(i))return`${r}/contact`;const s=Iv(t==null?void 0:t.website);return s||`${n}/contact`}function gv(e){return e?e.websiteAppAddOn==="app"||e.websiteAppAddOn==="website_app":!1}function yv(e){return!!(e!=null&&e.userId)}function hv(e=""){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Mobile/i.test(e)}function bv(e){const t=e==null?void 0:e.trim();return t?/^(https?:|mailto:|tel:|\/)/i.test(t)?t:`https://${t}`:null}function Iv(e){const t=bv(e);if(!t)return null;try{if(new URL(t,"https://placeholder.local").hostname.endsWith(".example"))return null}catch{return t}return t}function vv(e){return e.replace(/[\]\n\r]/g," ").replace(/\s{2,}/g," ").trim()||"Campaign image"}const ra={executive:{label:"Executive gold",page:"#f2f1eb",paper:"#fffdf8",ink:"#23372d",muted:"#526258",accent:"#977b42",accentText:"#765d2c",panel:"#edf1eb",border:"#dce2d8",button:"#263e32",buttonText:"#ffffff"},coastal:{label:"Coastal slate",page:"#edf3f4",paper:"#ffffff",ink:"#203b43",muted:"#526970",accent:"#527e88",accentText:"#3b636d",panel:"#edf5f6",border:"#d8e5e8",button:"#29545f",buttonText:"#ffffff"},ivory:{label:"Ivory private client",page:"#f0ece5",paper:"#fffdfa",ink:"#37332d",muted:"#6b6356",accent:"#94815e",accentText:"#715d3c",panel:"#f3efe6",border:"#e5ded0",button:"#514638",buttonText:"#ffffff"},midnight:{label:"Midnight blue",page:"#edf1f6",paper:"#fcfdff",ink:"#24364e",muted:"#59687b",accent:"#5a779b",accentText:"#435f81",panel:"#edf2f8",border:"#dce4ef",button:"#2d4565",buttonText:"#ffffff"}},DT=Object.entries(ra),Nn={heading:"Georgia, 'Times New Roman', serif",body:"Arial, Helvetica, sans-serif"};function Fm(e){return e&&Object.prototype.hasOwnProperty.call(ra,e)?ra[e]:ra.executive}function pn(e,t=!1){const r=e==null?void 0:e.trim();if(!r||/[\u0000-\u001f\u007f]/.test(r))return;if(t&&/^data:image\/(?:png|jpe?g|webp|gif);base64,[a-z0-9+/=]+$/i.test(r)||!t&&/^(?:mailto|tel):[^\s]+$/i.test(r))return r;const n=r.startsWith("/")&&!r.startsWith("//");if(!(!n&&!/^https?:\/\//i.test(r)))try{const i=typeof window>"u"?"https://quotex.local":window.location.origin,a=new URL(r,i);return!["https:","http:"].includes(a.protocol)||a.username||a.password?void 0:n&&typeof window>"u"?r:a.toString()}catch{return}}function wv(e,t){return pn(t)??xo({origin:typeof window>"u"?void 0:window.location.origin,tenantId:e==null?void 0:e.id})}function _v(e){var s,o,c,d;
46const t=[],r=(s=e==null?void 0:e.contactEmail)==null?void 0:s.trim(),n=(o=e==null?void 0:e.phone)==null?void 0:o.trim(),i=(c=e==null?void 0:e.website)==null?void 0:c.trim(),a=(d=e==null?void 0:e.address)==null?void 0:d.trim();if(r&&t.push({label:r,href:pn(`mailto:${r}`)}),n){const m=n.replace(/[^\d+]/g,"");t.push({label:n,href:m?pn(`tel:${m}`):void 0})}if(i){const m=pn(/^[a-z][a-z\d+.-]*:/i.test(i)?i:`https://${i}`);t.push({label:i.replace(/^https?:\/\//i,"").replace(/\/+$/,""),href:m})}return a&&t.push({label:a}),t}function Yr(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function Bm(e){var f,g,y,h;const t=Fm(e.themeId),r=e.pamphlet,n=((g=(f=e.agency)==null?void 0:f.name)==null?void 0:g.trim())||"Your agency",i=pn(e.imageUrl,!0),a=pn(e.logoUrl??((y=e.agency)==null?void 0:y.logoUrl),!0),s=wv(e.agency,e.ctaHref),o=((h=r.ctaTitle)==null?void 0:h.trim())||"Start a conversation with your agency.",c=_v(e.agency),d=w=>Yr((w==null?void 0:w.trim())||""),m=`margin:0;color:${t.accentText};font-size:11px;font-weight:700;line-height:1.6;letter-spacing:1.6px;text-transform:uppercase;`,p=(r.highlights??[]).filter(w=>w.trim()).map((w,T)=>`
47    <tr><td valign="top" width="34" style="width:34px;padding:12px 10px 12px 0;border-top:1px solid ${t.border};color:${t.accentText};font-size:12px;font-weight:700;">${String(T+1).padStart(2,"0")}</td>
48    <td valign="top" style="padding:10px 0;border-top:1px solid ${t.border};color:${t.ink};font-size:15px;line-height:1.65;">${d(w)}</td></tr>`).join(""),u=c.map(w=>w.href?`<a href="${Yr(w.href)}" style="color:${t.muted};text-decoration:underline;text-underline-offset:3px;">${d(w.label)}</a>`:`<span>${d(w.label)}</span>`).join("<br />");return`<table role="presentation" class="marketing-pamphlet" width="100%" cellpadding="0" cellspacing="0" border="0" style="width:100%;max-width:720px;margin:0 auto;border-collapse:collapse;background:${t.paper};color:${t.ink};font-family:${Nn.body};text-align:left;overflow-wrap:anywhere;">
49  <tr><td class="pamphlet-inset" style="padding:24px 32px;border-top:4px solid ${t.accent};border-bottom:1px solid ${t.border};">
50    ${a?`<img class="pamphlet-logo" src="${Yr(a)}" alt="${d(n)} logo" style="display:block;width:auto;height:auto;max-width:160px;max-height:44px;margin:0 0 10px;" />`:""}
51    <p style="margin:0;color:${t.ink};font-size:14px;font-weight:700;line-height:1.5;letter-spacing:.4px;">${d(n)}</p>
52  </td></tr>
53  ${i?`<tr><td style="padding:0;background:${t.panel};"><img class="pamphlet-hero" src="${Yr(i)}" alt="${d(e.imageAlt||r.headline||"Campaign photograph")}" width="720" style="display:block;width:100%;max-width:720px;height:auto;border:0;" /></td></tr>`:""}
54  <tr><td class="pamphlet-inset" style="padding:32px;">
55    ${r.eyebrow?`<p style="${m}">${d(r.eyebrow)}</p>`:""}
56    <h1 class="pamphlet-headline" style="margin:12px 0 16px;color:${t.ink};font-family:${Nn.heading};font-size:40px;font-weight:400;line-height:1.12;letter-spacing:-.7px;">${d(r.headline)}</h1>
57    ${r.subheadline?`<p style="margin:0;color:${t.ink};font-size:18px;line-height:1.6;">${d(r.subheadline)}</p>`:""}
58    ${r.intro?`<p style="margin:22px 0 0;color:${t.muted};font-size:15px;line-height:1.8;white-space:pre-line;">${d(r.intro)}</p>`:""}
59  </td></tr>
60  ${p?`<tr><td class="pamphlet-inset" style="padding:0 32px 30px;">
61    <p style="${m}margin-bottom:14px;">${d(r.highlightsTitle||"What matters for you")}</p>
62    <table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0" style="width:100%;border-collapse:collapse;font-family:${Nn.body};">${p}</table>
63  </td></tr>`:""}
64  <tr><td class="pamphlet-inset" style="padding:28px 32px;background:${t.panel};border-top:1px solid ${t.border};">
65    <p style="margin:0 0 20px;color:${t.ink};font-family:${Nn.heading};font-size:27px;font-weight:400;line-height:1.3;">${d(o)}</p>
66    <table role="presentation" cellpadding="0" cellspacing="0" border="0"><tr><td bgcolor="${t.button}" style="border-radius:4px;background:${t.button};mso-padding-alt:14px 22px;">
67      <a href="${Yr(s)}" target="_blank" rel="noopener noreferrer" style="display:inline-block;padding:14px 22px;border:1px solid ${t.button};border-radius:4px;color:${t.buttonText};font-family:${Nn.body}
67;font-size:14px;font-weight:700;line-height:1.2;text-decoration:none;">${d(e.ctaLabel||Mm)}</a>
68    </td></tr></table>
69  </td></tr>
70  <tr><td class="pamphlet-inset" style="padding:24px 32px;border-top:1px solid ${t.border};">
71    <p style="margin:0 0 8px;color:${t.ink};font-size:12px;font-weight:700;line-height:1.6;">${d(n)}</p>
72    ${u?`<p style="margin:0;color:${t.muted};font-size:12px;line-height:1.9;">${u}</p>`:""}
73  </td></tr>
74</table>`}function LT(e){const t=Fm(e.themeId);return`<!doctype html><html><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width,initial-scale=1" />
75<title>${Yr(e.pamphlet.headline||"Agency pamphlet")}</title><style>
76*{box-sizing:border-box}body{margin:0;padding:32px 16px;background:${t.page}}.marketing-pamphlet{box-shadow:0 12px 42px rgba(25,35,30,.08)}
77@media(max-width:480px){body{padding:0}.pamphlet-inset{padding-left:24px!important;padding-right:24px!important}.pamphlet-headline{font-size:32px!important}}
78@media print{body{padding:0;background:white}.marketing-pamphlet{max-width:100%!important;box-shadow:none}tr{break-inside:avoid}a{color:inherit}*{-webkit-print-color-adjust:exact;print-color-adjust:exact}}
79</style></head><body>${Bm(e)}<script>
80document.querySelectorAll('.pamphlet-logo').forEach(function(img){img.addEventListener('error',function(){img.style.display='none'});if(img.complete&&!img.naturalWidth)img.style.display='none'});
81<\/script></body></html>`}function N(e="id"){const t=Math.random().toString(36).slice(2,10);return`${e}_${Date.now().toString(36)}_${t}`}function I(){return new Date().toISOString()}const Um=21,Av=1440*60*1e3;function Vm(e){switch(e){case"policy_placed":return"Policy placed";case"policy_check":return"Policy check";case"renewal_window":return"Renewal window";case"renewal_status_check":return"Renewal status check";case"billing_check":return"Billing check";case"claim_check":return"Claim check";case"document_sync":return"Document sync";case"manual":return"Manual runner check"}}function Cv(e){return!["completed","cancelled"].includes(e.status)}function Sv(e,t){if(!e.renewalDate)return null;const r=new Date(e.renewalDate).getTime(),n=new Date(t).getTime();return!Number.isFinite(r)||!Number.isFinite(n)?null:Math.ceil((r-n)/Av)}function Tv(e,t,r,n=Um){if(!e.renewalDate||e.status!=="bound"&&e.status!=="renewed"&&e.status!=="renewal_upcoming"||e.renewalStatus==="not_renewed"||(t==null?void 0:t.status)==="not_renewed"||e.renewalStatus==="renewed"||(t==null?void 0:t.status)==="renewed")return!1;const i=Sv(e,r);return i!==null&&i<=n&&i>=-7}function kv(e,t=new Date().toISOString()){const r=e.map(Rv).sort((n,i)=>n.name.localeCompare(i.name));return{generatedAt:t,count:r.length,carriers:r}}function Rv(e){var n;const t=Xl((n=e.quotingAutomation)==null?void 0:n.agentPortalUrl,e.agentPortalUrl,e.billingPortalUrl,e.claimsUrl),r=xv(e);return{id:e.id,name:e.name,logoUrl:Xl(e.logoUrl),loginUrl:t,domainMatch:t?Ev(t):void 0,lineOfBusiness:r[0]??"personal",linesOfBusiness:r,preferredAssetTypes:e.preferredAssetTypes,stateAvailability:e.stateAvailability,status:e.status}}function Ev(e){try{const t=new URL(e).hostname.replace(/^www\./i,"");return t?`*://*.${t}/*`:void 0}catch{return}}function xv(e){var r,n;const t=new Set;return(r=e.appetites)!=null&&r.some(i=>i.line==="commercial")&&t.add("commercial"),Pv(e)&&t.add("hnw"),(t.size===0||(n=e.appetites)!=null&&n.some(i=>!i.line||i.line==="personal")||e.preferredAssetTypes.length>0)&&t.add("personal"),Array.from(t)}function Pv(e){const t=`${e.id} ${e.name} ${e.appetiteNotes??""}`.toLowerCase();return["hnw","high-net-worth","private client","masterpiece","pure","vault","berkley one","crestbrook","aig"].some(r=>t.includes(r))}function Xl(...e){for(const t of e){const r=t==null?void 0:t.trim();if(r)return r}}const Po="Carrier questionnaire",Nv=new Set(["id","prompt","kind","required","options"]),qv=new Set(["questionId","ordinal","itemSelector","promptSelector","controlSelector","prompt"]),Ov=new Set(["verified","source","portalUrl","verifiedAt","recipeVersion","questionCount"]),Dv=new Set(["questions","evidence","verification"]),Lv=new Set(["text","textarea","number","date","boolean","select","multiselect"]),Mv=new Set(["a","an","are","did","do","does","enter","estimate","estimated","for","had","has","have","how","indicate","is","of","please","provide","select","tell","the","this","to","us","was","were","what","when","where","which","you","your"]);function $v(e){const t=new Map,r=new Map,n=[],i=new Set,a=[];for(const[m,p]of(e.existingQuestions??[]).entries()){const u=Sa(p.label,p.kind,p.options??[]),f=u&&!r.has(u)?u:`baseline::${na(p.id)||m}`,g=p,y=Array.isArray(g.carrierIds)?g.carrierIds.map(na).filter(
81Boolean):[],h=Array.isArray(g.carrierProvenance)?g.carrierProvenance.map(w=>({...w})):[];t.set(f,{...p,semanticKey:u,carrierIds:y,carrierProvenance:h}),n.push(f),u&&!r.has(u)&&r.set(u,f)}for(const m of e.carrierResults){const p=na(m==null?void 0:m.carrierId);if(!p){a.push({carrierId:String((m==null?void 0:m.carrierId)??""),reason:"invalid_carrier"});continue}const u=Fv(m.result);if(!u.ok){a.push({carrierId:p,reason:u.reason});continue}for(const[f,g]of u.result.questions.entries()){const y=Sa(g.prompt,g.kind,g.options),h=Ec(g.kind,g.options),w=h.family==="boolean"?["Yes","No"]:Yv(g.options),T=Bv(m,g,u.result.evidence[f]),b=r.get(y),_=b?t.get(b):void 0;if(!_){const A={id:Qv(y),section:"Carrier questions",label:g.prompt.trim(),kind:h.kind,required:g.required,acordFieldKey:g.id,acordFieldLabels:[g.prompt.trim(),g.id],semanticKey:y,carrierId:p,carrierIds:[p],carrierProvenance:[T]},v=h.family==="boolean"?["Yes","No"]:td([],w);v.length>0&&(A.options=v),t.set(y,A),r.set(y,y),i.add(y);continue}_.label=zm(_.label,g.prompt),_.required=!!(_.required||g.required),_.acordFieldLabels=[...new Set([..._.acordFieldLabels??[],g.prompt.trim(),g.id])],_.acordFieldKey||(_.acordFieldKey=g.id),_.options=h.family==="boolean"?["Yes","No"]:Jv(td(_.options??[],w)),_.carrierIds=[...new Set([..._.carrierIds,p])].sort(ir),Zv(_.carrierProvenance,T)||_.carrierProvenance.push(T),_.carrierProvenance.sort(Xv),_.carrierIds.length===1?_.carrierId=_.carrierIds[0]:delete _.carrierId}}const o=[...n.map(m=>t.get(m)).filter(id),...[...i].sort(ir).map(m=>t.get(m)).filter(id)].filter(m=>m.carrierProvenance.length>0).map(m=>({...m,section:Po})),{responses:c,responseSourceIds:d}=Uv(o,e.existingQuestions??[],e.existingResponses??{});return{questions:o,responses:c,responseSourceIds:d,rejectedCarrierResults:a}}function Sa(e,t,r=[]){const n=Qm(e);if(n.length===0)return"";const i=jm(n),a=Ec(t,r).family,s=[...new Set(n)].sort(ir).join("-");return`${i}::${a}::${s}`}function Fv(e){if(!qi(e)||!Ni(e,Dv))return{ok:!1,reason:"unverified_result"};const t=e.verification;if(!qi(t)||!Ni(t,Ov)||t.verified!==!0||t.source!=="carrier_portal"||t.recipeVersion!==1||!Number.isInteger(t.questionCount)||typeof t.verifiedAt!="string"||!Number.isFinite(Date.parse(t.verifiedAt))||!Gv(t.portalUrl))return{ok:!1,reason:"unverified_result"};if(!Array.isArray(e.questions)||!Array.isArray(e.evidence)||e.questions.length<1||e.questions.length>100||e.questions.length!==e.evidence.length||t.questionCount!==e.questions.length)return{ok:!1,reason:"invalid_question_evidence"};const r=new Set,n=new Set;for(const[i,a]of e.questions.entries()){const s=e.evidence[i];if(!qi(a)||!Ni(a,Nv)||!qi(s)||!Ni(s,qv))return{ok:!1,reason:"invalid_question_evidence"};const o=a,c=s,d=typeof o.prompt=="string"?o.prompt.trim():"",m=Array.isArray(o.options)?o.options:[];if(typeof o.id!="string"||!/^[A-Za-z0-9][A-Za-z0-9._:-]{0,159}$/.test(o.id)||!d||d.length>500||!Lv.has(o.kind)||typeof o.required!="boolean"||!zv(o.kind,m)||!Sa(d,o.kind,m)||r.has(o.id)||n.has(In(d)))return{ok:!1,reason:"invalid_question_evidence"};if(c.questionId!==o.id||c.ordinal!==i||c.prompt!==o.prompt||!Cs(c.itemSelector)||!Cs(c.promptSelector)||!Cs(c.controlSelector))return{ok:!1,reason:"invalid_question_evidence"};r.add(o.id),n.add(In(d))}return{ok:!0,result:e}}function Bv(e,t,r){var n;return{carrierId:na(e.carrierId),...(n=e.carrierName)!=null&&n.trim()?{carrierName:e.carrierName.trim()}:{},sourceQuestionId:t.id,sourceKind:t.kind,prompt:t.prompt,required:t.required,options:[...t.options],evidence:{...r},verification:{...e.result.verification}}}function Ec(e,t){return e==="boolean"||e==="select"&&Wv(t)?{kind:"select",family:"boolean"}:e==="date"?{kind:"text",family:"text"}:e==="multiselect"?{kind:"textarea",family:"textarea"}:{kind:e,family:e}}function Uv(e,t,r){const n=new Map,i=new Map;for(const o of t){if(!ad(r,o.id))continue;const c=r[o.id];if(typeof c!="string")continue;const d={questionId:o.id,value:c},m=Vv(o);m&&rd(n,m,d);const p=ed(o);p&&rd(i,p,d)}const a={},s={};for(const o of e){if(ad(r,o.id)&&typeof r[o.id]=="string"){a[o.id]=r[o.id],s[o.id]=o.id;continue}const c=nd(n.get(o.semanticKey));if(c.status==="one"){a[o.id]=c.value,s[o.id]=c.questionId;continue}if(c.status==="ambiguous")continue;const d=nd(i.get(ed(o)));d.status==="one"&&(a[o.id]=d.value,s[o.id]=d.questionId)}return{responses:a,responseSourceIds:s}}function Vv(e){var a;const t=Sa(e.label,e.kind,e.options??[]),r=(a=e.semanticKey)==null?void 0:a.trim();if(!r||!t)return t;const n=r.split("::"),i=t.split("::");return n.length===3&&n[0]===i[0]&&n[1]===i[1]?r:t}function ed(e){const t=In(e.label);if(!t)return"";const r=Qm(e.label),n=Ec(e.kind,e.options??[]);return`${jm(r)}::${n.family}::${t}`}function jm(e){const t=new Set(e),r=[];if(t.has("address")||t.has("mailing")||t.has("garaging")){const n=["current","mailing","garaging","prior"].filter(i=>t.has(i));r.push(`address:${n.length>0?n.join("+"):"generic"}`)}for(const n of["applicant","driver","vehicle"])t.has(n)&&r.push(`entity:${n}`);return(t.has("coverage")||t.has("limit")||t.has("deductible"))&&r.push("entity:coverage"),r.length>0?r.sort(ir).join("+"):"general"}function Qm(e){return In(e).split(" ").flatMap(jv).filter(t=>t&&!Mv.has(t))}function jv(e){switch(e){case"auto":case"automobile":case"automobiles":case"car":case"cars":case"vehicles":return["vehicle"];case"drivers":case"operator":case"operators":return["driver"];case"applicants":case"insured":case"policyholder":return["applicant"];case"coverages":return["coverage"];case"limits":return["limit"];case"deductibles":return["deductible"];case"currently":return["current"];case"mail":return["mailing"];case"garage":case"garaged":return["garaging"];case"former":case"previous":return["prior"];case"annually":case"yearly":return["annual"];case"mile":case"miles":return["mileage"];case"primarily":return["primary"];case"usage":case"used":return["use"];case"birthdate":case"dob":return["birth","date"];default:return[e]}}function Qv(e){return`carrier-question-${e.replace(/::/g,"-").replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,72)}-${Hv(e)}`}function Hv(e){let t=2166136261;for(let r=0;r<e.length;r+=1)t^=e.charCodeAt(r),t=Math.imul(t,16777619)>>>0;return t.toString(36).padStart(7,"0")}function In(e){return String(e??"").normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[\u2018\u2019']/g,"").toLowerCase().replace(/[^a-z0-9]+/g," ").trim().replace(/\s+/g," ")}function zv(e,t){if(t.length>50)return!1;const r=t.map(i=>typeof i=="string"?i.trim():"");return r.some(i=>!i||i.length>200)||new Set(r.map(Hm)).size!==r.length?!1:(e==="select"||e==="multiselect")===r.length>0}function Gv(e){if(typeof e!="string"||e.length>2e3)return!1;try{const t=new URL(e);return t.protocol==="https:"&&!t.username&&!t.password&&!t.search&&!t.hash}catch{return!1}}function Cs(e){return typeof e=="string"&&e.trim().length>0&&e.length<=500}function Wv(e){if(e.length!==2)return!1;const t=new Set(e.map(r=>Kv(r)));return t.size===2&&t.has("yes")&&t.has("no")}function Kv(e){const t=In(e);return["yes","y","true"].includes(t)?"yes":["no","n","false"].includes(t)?"no":t}function Yv(e){return e.map(t=>
81t.trim()).filter(Boolean)}function td(e,t){const r=new Map;for(const n of[...e,...t]){const i=n.trim();if(!i)continue;const a=Hm(i),s=r.get(a);r.set(a,s?zm(s,i):i)}return[...r.entries()].sort(([n],[i])=>ir(n,i)).map(([,n])=>n)}function Jv(e){return e.length>0?e:void 0}function Hm(e){return In(e)}function zm(e,t){const r=e.trim(),n=t.trim();return n.length!==r.length?n.length<r.length?n:r:ir(n,r)<0?n:r}function Zv(e,t){return e.some(r=>r.carrierId===t.carrierId&&r.sourceQuestionId===t.sourceQuestionId&&r.evidence.ordinal===t.evidence.ordinal)}function Xv(e,t){return ir(e.carrierId,t.carrierId)||ir(e.sourceQuestionId,t.sourceQuestionId)||e.evidence.ordinal-t.evidence.ordinal}function rd(e,t,r){const n=e.get(t)??[];n.push(r),e.set(t,n)}function nd(e){if(!e||e.length===0)return{status:"none"};const t=[...new Set(e.map(i=>i.value))];if(t.length!==1)return{status:"ambiguous"};const r=e.filter(i=>i.value===t[0]),n=[...new Set(r.map(i=>i.questionId))];return n.length===1?{status:"one",questionId:n[0],value:t[0]}:{status:"ambiguous"}}function na(e){const t=String(e??"").trim();return/^[A-Za-z0-9][A-Za-z0-9._:-]{0,159}$/.test(t)?t:""}function Ni(e,t){return Object.keys(e).every(r=>t.has(r))}function qi(e){return!!(e&&typeof e=="object"&&!Array.isArray(e))}function id(e){return e!==void 0}function ad(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function ir(e,t){return e<t?-1:e>t?1:0}function L(e,t,r="text",n={}){return{key:e,label:t,inputType:r,...n}}function E(e,t,r,n="text",i={}){return L(t,r,n,{required:!1,...i,section:e})}function Gm(e){return e.toLowerCase().replace(/&/g,"and")}function we(e,t){return t.some(r=>e.includes(r))}function ew(e){const t=new Set,r=[];for(const n of e){const i=n.key.trim();!i||t.has(i)||(t.add(i),r.push({...n,key:i}))}return r}function tw(){const e=[L("propertyAddress","Property address","address",{required:!0,placeholder:"Street, city, state, ZIP"}),L("occupancy","Occupancy","select",{options:["Primary","Secondary / seasonal","Tenant occupied","Vacant","Condo","Dwelling fire"],required:!0}),L("ownershipAndLien","Ownership and lien details","textarea",{placeholder:"Owner, trust/LLC, mortgagee, escrow, loan number, ISAOA/ATIMA if applicable"}),L("countyTownship","County and township / municipality","text"),L("priorOrMailingAddress","Prior or mailing address in the last 3 years","address"),L("yearBuilt","Year built","number"),L("squareFootageAndUnits","Square footage, number of units, and wall height","textarea"),L("homeStyle","Home style","select",{options:["1 story","1.5 story","1.75 story","2 story","Split-level","Condo","Apartment","Manufactured home","Other"]}),L("foundationDetails","Foundation details","textarea",{placeholder:"Basement, slab, crawl space, block, concrete, brick, fieldstone, piers, walkout/daylight, percent finished"}),L("frameAndExterior","Frame and exterior materials","textarea",{placeholder:"2x4/2x6/log/steel/insulated panels plus siding, brick, stone, stucco, hardiboard, percentages if known"}),L("roofShapePitchMaterial","Roof shape, pitch, material, and skylights","textarea",{placeholder:"Gable/hip/flat, simple/elaborate, slight/moderate/steep, asphalt/architectural/metal/wood, skylights"}),L("attachedStructures","Attached structures","textarea",{placeholder:"Porches, decks, breezeway, balcony, columns, attached garage, built-in garage, carport"}),L("detachedStructuresAndRecreation","Detached structures and recreational features","textarea",{placeholder:"Detached garage, shed, gazebo, pool, hot tub, trampoline, fencing, diving board, slide"}),L("interiorFinishes","Interior walls, ceilings, and floors","textarea"),L("kitchenBathQuality","Kitchen and bathroom quality","textarea",{placeholder:"Kitchen grade, number of full/half/three-quarter baths, custom vanity, jacuzzi"}),L("interiorFeatures","Interior features","textarea",{placeholder:"Wet bar, fireplaces, wood stove, spiral staircase, attic access, central vacuum/stereo"}),L("heatingCoolingSystems","Heating and cooling systems","textarea",{placeholder:"Fuel, system type, location, central AC, ductwork, high-efficiency units"}),L("electricalAndSafetySystems","Electrical and safety systems","textarea",{placeholder:"Amps, fuses, fire/burglar/temp/water leak alarms, sprinklers, surveillance, motion lights"}),L("homeUpdates","Updates and remodels","textarea",{placeholder:"Roof receipt, heating, plumbing, electrical, additions, remodels, dates and materials"}),L("animalsAndLiabilityExposures","Animals, business, rental, and liability exposures","textarea",{placeholder:"Dogs/bite history/breeds, daycare, business or hobbies, structures rented, vacant land, ponds, rec vehicles"}),L("scheduledProperty","Jewelry, watches, guns, furs, art, collections, medical equipment, vault or safe","textarea"),L("priorCarrierAndLosses","Prior carrier, coverage, policy number, expiration date, deductible, and losses","textarea"),L("requestedHomeEndorsements","Requested endorsements and special coverages","textarea",{placeholder:"Guaranteed replacement, water backup, personal injury, med pay, ordinance/law, loss assessment, quake/sinkhole, service line, equipment breakdown, ID theft"}),L("homeDiscountsAndProtection","Discounts and protection details","textarea",{placeholder:"Full pay, escrow, non-smoker, group, generator, protective devices, hydrant/fire-station distance, mortgage free, multi-policy"})],t=new Set(["propertyAddress","occupancy","ownershipAndLien","countyTownship","yearBuilt","squareFootageAndUnits","homeStyle","foundationDetail
81s","frameAndExterior","roofShapePitchMaterial","heatingCoolingSystems","electricalAndSafetySystems","priorCarrierAndLosses"]);return e.map(r=>({...r,required:t.has(r.key)}))}function rw(){const e="1. Applicant Information",t="2. Contact Information",r="3. Third Party Reports",n="4. Address Information",i="5. Policy Information",a="6. Current Insurance",s="7. Discounts",o="8. Carrier Questions",c="9. Driver Information (repeat for every licensed driver)",d="10. Vehicle Information (repeat for every vehicle)",m="11. Coverage Selection",p="12. Vehicle Specific Coverages (per vehicle)",u="13. Accident / Incident History (repeat for every incident)",f="14. Final Review",g=[E(e,"primaryFirstName","Primary applicant first name"),E(e,"primaryMiddleInitial","Primary applicant middle initial"),E(e,"primaryLastName","Primary applicant last name"),E(e,"primarySuffix","Primary applicant suffix"),E(e,"primaryDateOfBirth","Primary applicant date of birth","date"),E(e,"primarySsnLastFour","Primary applicant Social Security number (optional / last four)","text",{required:!1,placeholder:"Last four digits"}),E(e,"primaryGender","Primary applicant gender","select",{options:["Female","Male","Nonbinary","Prefer not to answer"]}),E(e,"primaryMaritalStatus","Primary applicant marital status","select",{options:["Single","Married","Divorced","Separated","Widowed","Domestic partner"]}),E(e,"primaryOccupation","Primary applicant occupation"),E(e,"coApplicantFirstName","Co-applicant first name (if applicable)","text",{required:!1}),E(e,"coApplicantMiddleInitial","Co-applicant middle initial (if applicable)","text",{required:!1}),E(e,"coApplicantLastName","Co-applicant last name (if applicable)","text",{required:!1}),E(e,"coApplicantSuffix","Co-applicant suffix (if applicable)","text",{required:!1}),E(e,"coApplicantDateOfBirth","Co-applicant date of birth (if applicable)","date",{required:!1}),E(e,"coApplicantSsn","Co-applicant Social Security number (if applicable)","text",{required:!1}),E(e,"coApplicantGender","Co-applicant gender (if applicable)","select",{required:!1,options:["Female","Male","Nonbinary","Prefer not to answer"]}),E(e,"coApplicantMaritalStatus","Co-applicant marital status (if applicable)","select",{required:!1,options:["Single","Married","Divorced","Separated","Widowed","Domestic partner"]}),E(e,"coApplicantOccupation","Co-applicant occupation (if applicable)","text",{required:!1}),E(t,"cellPhone","Cell phone"),E(t,"homePhone","Home phone","text",{required:!1}),E(t,"workPhone","Work phone","text",{required:!1}),E(t,"emailAddress","Email address"),E(t,"preferredContactMethod","Preferred contact method","select",{options:["Cell","Home","Work","Email"]}),E(r,"authorizeMvr","Authorize Motor Vehicle Reports (MVR)?","boolean"),E(r,"authorizeClue","Authorize CLUE claims reports?","boolean"),E(r,"authorizeCredit","Authorize credit reports where permitted?","boolean"),E(r,"thirdPartyReportAuthorization","Third-party report authorization","select",{options:["Yes","No"]}),E(n,"currentStreetAddress","Current residence street address","address"),E(n,"currentCity","Current residence city"),E(n,"currentState","Current residence state"),E(n,"currentZipCode","Current residence ZIP code"),E(n,"uspsValidated","USPS validated?","boolean"),E(n,"yearsAtAddress","Years at current address","number"),E(n,"monthsAtAddress","Months at current address","number"),E(n,"residenceType","Residence type","select",{options:["Own Home","Rent","Condo","Apartment","Other"]}),E(n,"mailingSameAsCurrent","Mailing address same as current address?","boolean"),E(n,"mailingAddress","Mailing address (if different)","address",{required:!1}),E(n,"previousAddress","Previous address if at current residence less than 3 years","address",{required:!1}),E(n,"previousCity","Previous city","text",{required:!1}),E(n,"previousState","Previous state","text",{required:!1}),E(n,"previousZipCode","Previous ZIP code","text",{required:!1}),E(n,"alternateGarageStreet","Alternate garage street address (if vehicle kept elsewhere)","address",{required:!1}),E(n,"alternateGarageCity","Alternate garage city","text",{required:!1}),E(n,"alternateGarageState","Alternate garage state","text",{required:!1}),E(n,"alternateGarageZip","Alternate garage ZIP code","text",{required:!1}),E(i,"ratingState","Rating state"),E(i,"ratingCounty","County"),E(i,"targetEffectiveDate","Effective date","date"),E(i,"policyTerm","Policy term","select",{options:["6 Months","12 Months"]}),E(a,"currentlyInsured","Are you currently insured?","boolean"),E(a,"continuousCoverageYears","Continuous coverage years","number",{required:!1}),E(a,"continuousCoverageMonths","Continuous coverage months","number",{required:!1}),E(a,"currentPremium","Current premium","currency",{required:!1}),E(a,"currentCarrier","Current carrier","text",{required:!1}),E(a,"timeWithCurrentCarrier","Time with current carrier","text",{required:!1}),E(a,"currentPolicyExpirationDate","Policy expiration date","date",{required:!1}),E(a,"currentPolicyNumber","Current policy number","text",{required:!1}),E(a,"currentLiabilityLimits","Current liability limits","textarea",{required:!1}),E(s,"multiPolicyDiscount","Do you currently have a multi-policy discount?","boolean"),E(s,"homeownersPolicy","Do you currently have a homeowners policy?","boolean"),E(s,"homeownersPolicyType","Type of homeowners policy","text",{required:!1}),E(o,"recommendedRepairShops","Will you use recommended repair shops?","boolean"),E(o,"householdResidentCount","Number of residents in household","number"),E(o,"autoOwnersCompanySelection","Auto-Owners company selection"),E(o,"autoOwnersGroupProgram","Auto-Owners group program"),E(o,"progressiveSpinOffReason","Progressive spin-off reason","textarea"),E(o,"progressivePolicyInForce","Is another Progressive policy already in force?","boolean"),E(o,"paperlessBilling","Paperless billing?","boolean"),E(o,"twoOrMorePipClaims59Months","Have you had 2 or more PIP claims within the last 59 months?","boolean"),E(o,"pipClaimsLastThreeYears","Number of PIP claims in the last 3 years","number"),E(o,"floridaLessThanTenMonths","Do you reside in Florida less than 10 months per year?","boolean"),E(c,"driverFirstName","Driver first name"),E(c,"driverLastName","Driver last name"),E(c,"driverDateOfBirth","Driver date of birth","date"),E(c,"driverSsn","Driver Social Security number","text",{required:!1}),E(c,"driverGender","Driver gender","select",{options:["Female","Male","Nonbinary","Prefer not to answer"]}),E(c,"driverRelationshipToApplicant","Driver relationship to applicant"),E(c,"driverIsCoApplicant","Is this driver the co-applicant?","boolean"),E(c,"driverOccupation","Driver occupation"),E(c,"driverEducationLevel","Driver education level","select",{options:["High school","Some college","Associate degree","Bachelor degree","Graduate degree","Other"]}),E(c,"driverStatus","Driver status","select",{options:["Rated","Excluded","Permit","Non-driver","Other"]}),E(c,"driverLicenseState","Driver license state issued"),E(c,"driverLicenseNumber","Driver license number"),E(c,"driverLicenseStatus","Driver license status","select",{options:["Valid","Suspended","Revoked","Expired","Permit","Other"]}),E(c,"driverAgeFirstLicensed","Driver age first licensed","number"),E(c,"driverGoodStudent","Good student discount?","boolean"),E(c,"driverAwayAtSchool","Away at school?","boolean"),E(c,"driverTrainingCompleted","Driver training completed?","boolean"),E(c,"driverDefensiveDriving","Defensive driving course completed?","boolean"),E(c,"driverGoodDriverDiscount","Good driver discount?","boolean"),E(c,"driverSr22Required","SR-22 filing required?","boolean"),E(c,"driverFr44Required","FR-44 filing required?","boolean"),E(d,"vin","VIN","text",{placeholder:"17-ch
81aracter VIN"}),E(d,"vehicleYear","Vehicle year","number"),E(d,"vehicleMake","Vehicle make"),E(d,"vehicleModel","Vehicle model"),E(d,"vehicleTrim","Vehicle trim"),E(d,"vehicleBodyStyle","Vehicle body style"),E(d,"vehiclePurchaseDate","Vehicle purchase date","date"),E(d,"vehicleOwnershipStatus","Vehicle ownership status","select",{options:["Owned","Financed","Leased"]}),E(d,"vehicleRegisteredState","Vehicle registered state"),E(d,"vehicleOriginalMsrp","Original MSRP","currency"),E(d,"vehicleEngine","Engine"),E(d,"vehicleCylinders","Cylinders","number"),E(d,"vehicleDisplacement","Displacement"),E(d,"vehicleFuelType","Fuel type"),E(d,"vehicleDriveType","Drive type"),E(d,"vehicleDoorCount","Number of doors","number"),E(d,"principalOperator","Principal operator"),E(d,"occasionalOperator","Occasional operator","text",{required:!1}),E(d,"vehicleUsage","Vehicle usage","select",{options:["Pleasure","Commute","Business","Farm"]}),E(d,"oneWayCommuteMiles","One-way commute miles","number"),E(d,"daysDrivenPerWeek","Days driven per week","number"),E(d,"annualMileage","Annual mileage","number"),E(d,"vehicleGaraged","Vehicle garaged?","boolean"),E(d,"garageLocation","Garage location","select",{options:["Residence","Other"]}),E(d,"antiLockBrakes","Anti-lock brakes?","boolean"),E(d,"antiTheftDevice","Anti-theft device?","boolean"),E(d,"airbags","Airbags?","boolean"),E(m,"bodilyInjuryLimits","Bodily injury limits"),E(m,"propertyDamageLimits","Property damage limits"),E(m,"pipDeductible","Personal Injury Protection (PIP) deductible","currency"),E(m,"pipAppliesTo","PIP applies to"),E(m,"pipWageLoss","PIP wage loss"),E(m,"pipType","PIP type"),E(m,"umLimits","Uninsured / underinsured motorist limits"),E(m,"umStacked","Uninsured / underinsured motorist stacked?","boolean"),E(m,"medicalPayments","Medical payments","currency"),E(m,"accidentalDeathCoverage","Accidental death coverage","currency"),E(m,"usageBasedInsurance","Enroll in usage-based insurance?","boolean"),E(m,"telematicsEnrollmentSettings","Telematics enrollment settings","textarea",{required:!1}),E(p,"comprehensiveDeductible","Comprehensive deductible","currency"),E(p,"collisionDeductible","Collision deductible","currency"),E(p,"rentalReimbursement","Rental reimbursement","currency"),E(p,"towingCoverage","Towing coverage","currency"),E(p,"customEquipmentCoverage","Custom equipment coverage","currency"),E(p,"fullGlassCoverage","Full glass coverage?","boolean"),E(p,"leaseCoverage","Lease coverage?","boolean"),E(p,"excludeLiability","Exclude liability?","boolean"),E(u,"incidentType","Incident type","select",{required:!1,options:["Accident","Comprehensive","Theft","Other"]}),E(u,"incidentDate","Incident date","date",{required:!1}),E(u,"incidentDriver","Driver involved","text",{required:!1}),E(u,"incidentVehicle","Vehicle involved","text",{required:!1}),E(u,"incidentDescription","Incident description","textarea",{required:!1}),E(u,"incidentFault","Incident fault","select",{required:!1,options:["At Fault","Not At Fault"]}),E(u,"incidentPropertyDamageAmount","Property damage amount","currency",{required:!1}),E(u,"incidentBodilyInjuryAmount","Bodily injury amount","currency",{required:!1}),E(f,"applicantInformationVerified","Applicant information verified?","boolean"),E(f,"addressVerified","Address verified?","boolean"),E(f,"driversVerified","Drivers verified?","boolean"),E(f,"vehiclesVerified","Vehicles verified?","boolean"),E(f,"coveragesVerified","Coverages verified?","boolean"),E(f,"incidentsVerified","Incidents verified?","boolean")],y=new Set(["primaryFirstName","primaryLastName","primaryDateOfBirth","primaryGender","primaryMaritalStatus","emailAddress","authorizeMvr","authorizeClue","authorizeCredit","currentStreetAddress","currentCity","currentState","currentZipCode","yearsAtAddress","monthsAtAddress","residenceType","mailingSameAsCurrent","ratingState","ratingCounty","targetEffectiveDate","policyTerm","currentlyInsured","driverFirstName","driverLastName","driverDateOfBirth","driverGender","driverRelationshipToApplicant","driverStatus","driverLicenseState","driverLicenseNumber","driverLicenseStatus","driverAgeFirstLicensed","vin","vehicleYear","vehicleMake","vehicleModel","vehicleOwnershipStatus","vehicleRegisteredState","principalOperator","vehicleUsage","oneWayCommuteMiles","daysDrivenPerWeek","annualMileage","vehicleGaraged","garageLocation","bodilyInjuryLimits","propertyDamageLimits"]);return g.map(h=>({...h,required:y.has(h.key)}))}
81function nw(e){switch(e){case"coastal_home":return tw();case"luxury_vehicle":return rw();case"yacht":return[L("hin","Hull ID / HIN","text"),L("vesselName","Vessel name","text"),L("mooringLocation","Marina or mooring location","address"),L("navigationTerritory","Navigation territory","text"),L("operatorExperience","Operator or captain experience","textarea"),L("surveyOrAppraisal","Survey or appraisal on file?","boolean")];case"jewelry":return[L("appraisedValue","Appraised value","currency",{required:!0}),L("appraisalDate","Most recent appraisal date","date"),L("storageLocation","Storage when not in use","select",{options:["Home safe","Bank vault","Alarmed residence","Worn daily","Other"]}),L("travelExposure","Taken outside the home or while traveling?","boolean")];case"umbrella_liability":return[L("requestedLimit","Requested liability limit","currency",{required:!0}),L("underlyingPoliciesNotInQuotex","Underlying policies not already on file","textarea"),L("householdExposureNotes","Drivers, household staff, boards, pets, pools, or other liability notes","textarea")];case"full_portfolio":return[L("primaryResidenceAddress","Primary residence address","address",{required:!0}),L("assetsNotAlreadyListed","Assets not already listed in your Quotex profile","textarea"),L("entityTrustOwnership","Trust, LLC, or entity ownership details","textarea"),L("coveragePriorities","Coverage priorities","textarea")];case"other":default:return[L("riskDescription","Risk or asset description","textarea",{required:!0}),L("requestedAmount","Requested amount or limit","currency")]}}function iw(e){const t=Gm(e),r=[];return we(t,["condo","co-op","hoa"])&&r.push(L("hoaMasterPolicyType","HOA master policy type","select",{options:["Bare walls","Single entity","All-in","Unknown"]}),L("lossAssessmentLimit","Loss assessment limit","currency")),we(t,["rental","investment","home sharing","vacation rental","short-term"])&&r.push(L("rentalType","Rental type","select",{options:["Annual lease","Seasonal","Short-term","Mixed","Vacant between rentals"]}),L("annualRentalIncome","Annual rental income","currency"),L("rentalPlatformOrManager","Rental platform or manager","text")),we(t,["coastal","beach","flood","wind","hail"])&&r.push(L("elevationCertificate","Elevation certificate on file?","boolean"),L("windMitigation","Wind mitigation report on file?","boolean")),we(t,["vacant","dwelling fire","mobile","manufactured","tiny"])&&r.push(L("vacancyStatus","Vacancy or occupancy status","text"),L("renovationPlans","Renovation, inspection, or anchoring notes","textarea")),we(t,["solar","service line","water backup","equipment breakdown"])&&r.push(L("systemDetails","System details","textarea"),L("installationDate","Installation date","date")),we(t,["classic","collector"])&&r.push(L("agreedValue","Agreed value requested","currency"),L("showOrClubUse","Shows, clubs, or track use","textarea")),we(t,["motorcycle","rv","motorhome","trailer","camper","atv","utv","golf cart","snowmobile","e-bike","scooter"])&&r.push(L("storageLocationIfDifferent","Storage location if different from garaging address","address"),L("accessoriesValue","Accessories or custom equipment value","currency")),we(t,["non-owned","mexico"])&&r.push(L("tripOrDriverDetails","Trip or driver details","textarea"),L("requestedCoverageDates","Requested coverage dates","text")),we(t,["boat","pwc","dock","marine","yacht"])&&r.push(L("hurricanePlan","Hurricane or storage plan","textarea"),L("trailerIncluded","Trailer or tender included?","boolean")),we(t,["watch","art","collectible","antiques","wine","furs","musical","firearms","cameras","articles"])&&r.push(L("appraisalFormat","Appraisal or inventory format","select",{options:["Single appraisal","Itemized schedule","Spreadsheet","Photos only","Not available"]}),L("transitOrExhibition","Transit, exhibition, lending, or travel exposure","textarea")),we(t,["cyber","identity","fraud"])&&r.push(L("onlineRiskProfile","Online risk profile","textarea"),L("financialAccountExposure","Financial account exposure","textarea")),we(t,["life","disability","long-term","medicare","dental","vision","health"])&&r.push(L("dateOfBirth","Date of birth","date"),L("householdMembers","Household members to quote","textarea"),L("healthNotes","Health or benef
81it notes","textarea")),we(t,["pet","equine","horse","livestock"])&&r.push(L("animalSchedule","Animal schedule","textarea"),L("vetOrRegistration","Vet, registration, or microchip details","text")),we(t,["farm","ranch"])&&r.push(L("farmSchedule","Acreage, barns, equipment, or animal schedule","textarea")),we(t,["wedding","event","travel","tuition","moving","storage"])&&r.push(L("eventOrTripDates","Event, trip, or move dates","text"),L("contractedCosts","Contracted costs","currency")),r}function aw(){return[L("legalBusinessName","Legal business name","text",{required:!0}),L("publicSearchKey","Website, Google listing, or state registration link","text")]}function sw(){return[L("targetEffectiveDate","Target effective date","date"),L("currentCoverage","Current carrier and policy number, if any","text")]}function ow(e,t){const r=Gm(e),n=[];return(we(r,["property","bop","package","hotel","motel","habitational","hoa","real estate","lessor","builders risk"])||t==="coastal_home")&&n.push(L("propertyLimits","Requested building, contents, and business income limits","textarea")),we(r,["liability","umbrella","excess","products","liquor","pollution","sports","fitness","event"])&&n.push(L("grossSales","Gross sales","currency"),L("payroll","Payroll","currency"),L("subcontractorCost","Subcontractor cost","currency")),we(r,["auto","fleet","trucking","cargo","garage","hired","transportation"])&&n.push(L("vehicleSchedule","Vehicle schedule","textarea",{required:!0}),L("driverExceptions","Drivers not already on file","textarea"),L("radiusOfOperations","Radius of operations","text"),L("commoditiesHauled","Commodities hauled or vehicle use","textarea")),we(r,["workers","employee","benefits"])&&n.push(L("payrollByClass","Payroll by class code","textarea",{required:!0}),L("statesOfOperation","States of operation","text"),L("ownerOfficerInclusion","Owner/officer inclusion or exclusion","textarea")),we(r,["professional","e&o","malpractice","architect","engineer","technology","accountants","legal","medical","media"])&&n.push(L("annualProfessionalRevenue","Professional services revenue","currency"),L("retroactiveDate","Current retroactive date","date"),L("contractsRequireLimits","Contract-required limits","textarea")),we(r,["cyber","crime","fidelity","social engineering"])&&n.push(L("recordCount","Records or identities handled","number"),L("mfaBackupsSecurity","MFA, backups, EDR, and security controls","textarea")),we(r,["d&o","directors","epli","fiduciary","nonprofit"])&&n.push(L("employeePractices","HR policies, handbook, and employee practices","textarea"),L("financialsAvailable","Financial statements available?","boolean")),we(r,["inland","equipment","installation","bailee","warehouse","jewelers","fine art","museum","cargo","stock"])&&n.push(L("maxValueAnyOneLocation","Max value at any one location","currency"),L("securityAndInventoryControls","Security and inventory controls","textarea")),we(r,["restaurant","bar","food","liquor"])&&n.push(L("alcoholSalesPercent","Alcohol sales percentage","number"),L("cookingProtection","Co
81oking protection and hood suppression","textarea")),we(r,["contractor","hvac","plumbing","electrical","landscaping","wrap-up"])&&n.push(L("tradeWorkPerformed","Trade work performed","textarea"),L("largestProjectValue","Largest project value","currency"),L("licenseNumbers","License numbers","text")),we(r,["healthcare","clinic","home health","senior","school","daycare","religious"])&&n.push(L("clientPatientStudentCount","Client/patient/student count","number"),L("abusePreventionControls","Screening and abuse-prevention controls","textarea")),we(r,["farm","agri","crop","livestock","equine","cannabis"])&&n.push(L("acreageOrProduction","Acreage, production, or animal schedule","textarea"),L("regulatedLicenses","Licenses, permits, or registrations","textarea")),(we(r,["marine","marina","ship","charter","ocean"])||t==="yacht")&&n.push(L("marineOperations","Marine operations","textarea"),L("vesselOrDockSchedule","Vessel, dock, or slip schedule","textarea"),L("crewPassengerExposure","Crew/passenger exposure","textarea")),we(r,["aviation","drone"])&&n.push(L("aircraftOrDroneSchedule","Aircraft/drone schedule","textarea"),L("pilotOperatorDetails","Pilot/operator details","textarea"),L("faaOrPart107","FAA or Part 107 details","text")),we(r,["surety","bond","trade credit","representations","parametric","key person"])&&n.push(L("bondOrTransactionDetails","Bond, transaction, or trigger details","textarea"),L("financialsAndContracts","Financials, contracts, or obligations","textarea")),n}function cw(e){const t=e.lineOfBusiness==="commercial"?[...aw(),...ow(e.label,e.assetType)]:[...nw(e.assetType),...iw(e.label)],r=e.lineOfBusiness==="commercial"?9:e.assetType==="coastal_home"?30:e.assetType==="luxury_vehicle"?160:8,n=e.lineOfBusiness==="personal"&&e.assetType==="luxury_vehicle"?[]:sw();return ew([...t,...n]).slice(0,r)}function lw(e){return e==="textarea"||e==="address"?"textarea":e==="number"||e==="currency"?"number":e==="select"||e==="boolean"?"select":"text"}function Wm(e){return cw(e).map(t=>({id:`category-${e.id}-${t.key}`,section:t.section??`${e.label} intake`,label:t.label,kind:lw(t.inputType),options:t.inputType==="boolean"?["Yes","No","Unsure"]:t.inputType==="select"?t.options:void 0,required:!!t.required,round:"initial",acordFieldKey:t.key,acordFieldLabels:[t.label]}))}const No="[[quotex-email-signature:",Km="]]";function dw(e,t){var s,o;const r=(e.emailSignature??"").trim(),n=(e.emailSignatureImages??[]).filter(c=>c.dataUrl),i=n.length>0?n:t!=null&&t.dataUrl?[t]:[],a=e.emailSignatureIncludesEsignature&&((o=(s=e.electronicSignature)==null?void 0:s.name)!=null&&o.trim())?e.electronicSignature:void 0;return!r&&i.length===0&&!a?null:{text:r||void 0,images:i,electronicSignature:a}}function uw(e,t){if(!t)return e;const r=encodeURIComponent(JSON.stringify(t));return`${e.trimEnd()}
82
83${No}${r}${Km}`}function MT(e){const t=e.indexOf(No);if(t!==-1){const r=t+No.length,n=e.indexOf(Km,r);if(n!==-1){const i=e.slice(r,n);try{const a=JSON.parse(decodeURIComponent(i));return{message:e.slice(0,t).trimEnd(),signature:a}}catch{return{message:e}}}}return mw(e)}function mw(e){const t=e.split(/\r?\n/),r=[];let n;const i=[];for(const s of t){const o=s.match(/^\[Image:\s*(.+?)\]$/i);if(o){r.push({name:o[1].trim()});continue}const c=s.match(/^\[Electronic signature:\s*([^|\]]+)(?:\|\s*([^|\]]+))?(?:\|\s*(\d+)px)?\]$/i);if(c){n={name:c[1].trim(),fontFamily:"cursive",fontSize:Number(c[3])||34};continue}i.push(s)}return r.length===0&&!n?{message:e}:{message:i.join(`
84`).replace(/\n{2,}—\s*$/u,"").trimEnd(),signature:{images:r,electronicSignature:n}}}const pw={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1,VITE_AI_MODE:"server",VITE_API_BASE_URL:"/api",VITE_STATE_SYNC_ID:"default",VITE_STATE_SYNC_MODE:"supabase",VITE_VERCEL_DEPLOYMENT_ID:"dpl_F2uor5XT6WbCD6wQePTVkunvMZhq",VITE_VERCEL_ENV:"production",VITE_VERCEL_GIT_COMMIT_AUTHOR_LOGIN:"",VITE_VERCEL_GIT_COMMIT_AUTHOR_NAME:"barhoumfak24-hash",VITE_VERCEL_GIT_COMMIT_MESSAGE:"Restore evidence-backed AI mapping completeness",VITE_VERCEL_GIT_COMMIT_REF:"codex/full-page-quote-flow",VITE_VERCEL_GIT_COMMIT_SHA:"0823d0042f218e01ecb18b834d364b43144d6484",VITE_VERCEL_GIT_PREVIOUS_SHA:"",VITE_VERCEL_GIT_PROVIDER:"github",VITE_VERCEL_GIT_PULL_REQUEST_ID:"",VITE_VERCEL_GIT_REPO_ID:"",VITE_VERCEL_GIT_REPO_OWNER:"barhoumfak24-hash",V
84ITE_VERCEL_GIT_REPO_SLUG:"codex-quotex",VITE_VERCEL_OBSERVABILITY_CLIENT_CONFIG:'{"analytics":{"scriptSrc":"49897bef4da1095c/script.js","viewEndpoint":"49897bef4da1095c/view","eventEndpoint":"49897bef4da1095c/event","sessionEndpoint":"49897bef4da1095c/session"},"speedInsights":{"scriptSrc":"c1c2a871a5e4c1f5/script.js","endpoint":"c1c2a871a5e4c1f5/vitals"}}',VITE_VERCEL_PROJECT_ID:"prj_OAwowzIJBezI6pDFxpMTyLpQC8xD",VITE_VERCEL_PROJECT_PRODUCTION_URL:"quotexinsurance.com",VITE_VERCEL_TARGET_ENV:"production",VITE_VERCEL_URL:"quotexinsurance-2w14272cc-barhoumfak24-7816s-projects.vercel.app"};function Ss(e){const t=pw,r=t==null?void 0:t[e];if(typeof r=="string")return r.trim()||void 0;if(typeof r=="boolean")return r?"true":void 0}function ia(e){let t=0;for(let r=0;r<e.length;r+=1)t=t*31+e.charCodeAt(r)>>>0;return t}function xc(e){return e.replace(/[-_]+/g," ").replace(/\s+/g," ").trim().replace(/\b\w/g,t=>t.toUpperCase())}function fw(e){return e==null?"":typeof e=="string"?e.trim():typeof e=="number"||typeof e=="boolean"?String(e):JSON.stringify(e)}function gw(e){const t=xc(e),r=t.toLowerCase().replace(/[^a-z0-9]+/g," ").trim();return{"asset type":"Line / Risk Type","estimated value":"Estimated Insured Value","garaging address":"Garaging / Risk Address","property address":"Risk Address","mailing address":"Applicant Mailing Address",vin:"VIN",hin:"HIN","federal ein":"FEIN","base federal ein":"FEIN","legal business name":"Legal Business Name","legal business name as registered":"Legal Business Name","base legal business name":"Legal Business Name","base legal business name as registered":"Legal Business Name"}[r]??t}function Ym(e,t){const r=t==="commercial"?["Line of business","Asset type","Estimated value","Legal business name","FEIN"]:["Line of business","Asset type","Estimated value"];return e==="coastal_home"?[...r,"Property address","Garaging address","Year built","Roof year"]:e==="luxury_vehicle"?[...r,"VIN","Year","Make","Model","Garaging address"]:e==="yacht"?[...r,"HIN","Length","Marina","Captain credentials"]:e==="jewelry"?[...r,"Appraisal value","Safe storage","Description"]:e==="umbrella_liability"?[...r,"Underlying limits","Requested umbrella limit"]:r}function yw(e,t){const r=e.toLowerCase().replace(/[^a-z0-9]+/g," ");return t.some(n=>{const i=n.toLowerCase().replace(/[^a-z0-9]+/g," ").trim();return r.includes(i)||i.includes(r)})}function ur(e,t,r,n){const i=fw(t);return i?{quotexField:e,carrierField:gw(e),value:i,source:r,required:yw(e,n),confidence:r==="system"?.99:r==="questionnaire"?.93:r==="asset_detail"?.88:.82}:null}function hw(e,t){const r=e.lineOfBusiness??"personal",n=Ym(e.assetType,r),i=[],a=o=>{if(!o)return;i.find(d=>d.carrierField===o.carrierField&&d.value.toLowerCase()===o.value.toLowerCase())||i.push(o)};a(ur("Line of business",r==="commercial"?"Commercial lines":"Personal lines","system",n)),a(ur("Asset type",xc(e.assetType),"system",n)),a(ur("Estimated value",e.estimatedValue,"system",n)),a(ur("State",t??e.state,"system",n)),Object.entries(e.assetDetails??{}).forEach(([o,c])=>{a(ur(o,c,"asset_detail",n))}),Object.entries(e.publicFields??{}).forEach(([o,c])=>{a(ur(o,c,"public_record",n))});const s=new Map((e.questionnaireQuestions??[]).map(o=>[o.id,o.label]));return Object.entries(e.questionnaireResponses??{}).forEach(([o,c])=>{a(ur(s.get(o)??o,c,"questionnaire",n))}),i.sort((o,c)=>o.required!==c.required?o.required?-1:1:o.carrierField.localeCompare(c.carrierField))}function bw(e){var c,d,m,p;const t=Ym(e.session.assetType,e.session.lineOfBusiness??"personal"),r=[],n=u=>r.push(u),i=!!e.entryUrl&&/^https:\/\//i.test(e.entryUrl),a=uc(e.carrier),s=((c=e.carrier.quotingAutomation)==null?void 0:c.status)==="connected"&&((d=e.carrier.portalPlaybook)==null?void 0:d.status)!=="unsupported";n({label:"Carrier agent portal",status:i?"pass":"block",detail:i?`Runner entry point is ${e.entryUrl}.`:"A secure HTTPS carrier agent portal URL is required."}),n({label:"Carrier playbook",status:a.canAttempt||s?"pass":"block",detail:a.canAttempt?a.detail:s?"Carrier portal path has been marked connected after live testing for this agency.":a.detail}),n({label:"Signed-in browser session",status:e.mode==="configuration_trace"?"warn":e.browserSessionReference?"pass":"block",detail
84:e.mode==="configuration_trace"?"Live carrier access will require the agent to be signed into the carrier portal in their browser first.":e.browserSessionReference?"Runner will use the existing signed-in browser session; no carrier username or password is provided.":"Sign in to the carrier portal in your browser, then run the AI runner again."}),n({label:"MFA mode",status:(m=e.carrier.quotingAutomation)!=null&&m.mfaMode?"pass":"warn",detail:(p=e.carrier.quotingAutomation)!=null&&p.mfaMode?`MFA handling: ${e.carrier.quotingAutomation.mfaMode.replace(/_/g," ")}.`:"MFA mode is not specified; production should require staff prompt or carrier push handling."}),n({label:"Server automation worker",status:e.bridgeUrl?"pass":"warn",detail:e.bridgeUrl?"Carrier automation bridge URL is configured for live server-side browser work.":"No live worker is configured in this environment, so Quotex records a configuration trace only."}),n({label:"Carrier state availability",status:!e.state||e.carrier.stateAvailability.includes(e.state)?"pass":"block",detail:e.state?e.carrier.stateAvailability.includes(e.state)?`${e.carrier.name} is listed for ${e.state}.`:`${e.carrier.name} is not listed for ${e.state}.`:"No state was supplied; runner will rely on carrier-side validation."});const o=t.filter(u=>!e.fieldMappings.some(f=>f.required&&(f.quotexField.toLowerCase().includes(u.toLowerCase())||f.carrierField.toLowerCase().includes(u.toLowerCase()))));return n({label:"Carrier form field coverage",status:o.length===0?"pass":"warn",detail:o.length===0?`${e.fieldMappings.filter(u=>u.required).length} required fields are mapped.`:`Mapped ${e.fieldMappings.length} fields; review missing/ambiguous fields: ${o.slice(0,5).join(", ")}.`}),r}function Iw(e,t){const r=.97+ia(`${t}:premium`)%9/100,n=Math.max(250,Math.round(e.baseQuote.premium*r)),a=new Date().toISOString().slice(0,10);return{quoteNumber:`QT-${e.carrier.id.slice(-5).toUpperCase()}-${ia(t)%1e5}`,premium:n,effectiveDate:a,carrierReference:`RUN-${e.carrier.id.slice(-5).toUpperCase()}-${ia(`${t}:ref`)%1e5}`,coverageSummary:[`${e.session.lineOfBusiness==="commercial"?"Commercial":"Personal"} ${xc(e.session.assetType)} quote`,`Estimated value ${e.session.estimatedValue.toLocaleString("en-US",{style:"currency",currency:"USD",maximumFractionDigits:0})}`,e.state??e.session.state?`Rated state ${e.state??e.session.state}`:"State validated by carrier portal"]}}function vw(e){var w,T,b,_;const t=e.carrier.quotingAutomation,r=((w=t==null?void 0:t.agentPortalUrl)==null?void 0:w.trim())||((T=t==null?void 0:t.customerPortalUrl)==null?void 0:T.trim())||((b=e.carrier.agentPortalUrl)==null?void 0:b.trim())||"",n=t!=null&&t.agentPortalUrl||e.carrier.agentPortalUrl?"agent_portal":"customer_portal",i=Ss("VITE_QUOTEX_CARRIER_AUTOMATION_BRIDGE_URL"),a=Ss("VITE_QUOTEX_CARRIER_BROWSER_SESSION_REFERENCE"),s=i&&(t==null?void 0:t.status)==="connected"?"live_worker":"configuration_trace",o=`RPA-${e.carrier.id.slice(-5).toUpperCase()}-${e.session.id.slice(-6).toUpperCase()}-${ia(`${e.carrier.id}:${e.session.id}:${e.state??""}`)%1e4}`,c=hw(e.session,e.state),d=ym({system:"carrier_portal_runner",action:n,tenantScoped:!0,confidence:c.length>0?Math.min(...c.map(A=>A.confidence)):0,evidenceCount:c.length,verifiedEvidenceCount:c.filter(A=>A.confidence>=.88).length,humanApproved:s==="configuration_trace"||Ss("VITE_QUOTEX_CARRIER_RUNNER_HUMAN_APPROVED")==="true",touchesExternalSystem:s==="live_worker",usesOnlyProvidedFacts:!0}),m=bw({carrier:e.carrier,session:e.session,state:e.state,entryUrl:r,browserSessionReference:a,bridgeUrl:i,mode:s,fieldMappings:c});s==="live_worker"&&!d.allowed&&m.push({label:"AI production gate",status:"block",detail:`Live carrier automation blocked: ${[...d.blockedReasons,...d.warnings].join(", ")}.`});const u=m.filter(A=>A.status==="block").length>0?"blocked":s==="live_worker"?"queued":"completed",f=u==="blocked"?void 0:Iw(e,o),g=c.filter(A=>A.required).length,y=new Date().toISOString(),h=[`Runner job ${o} prepared for ${e.carrier.name}.`,(_=e.carrier.portalPlaybook)!=null&&_.quotes.length?`Quote playbook loaded: ${e.carrier.portalPlaybook.quotes.slice(0,3).join(" -> ")}.`:"No quote playbook loaded; runner must remain manual.",`Mapped ${c.length} Quotex field${c.length===1?"":"s"} into carrier form fields.`,s==="live_worker"?"Live worker is configured; job requires the agent's existing signed-in browser session and will not use carrier credentials.":"Configuration trace generated because live worker configuration is not present in this environment.",d.allowed?`AI production gate passed for ${n}.`:`AI production gate held runner work for review: ${[...d.blockedReasons,...d.warnings].join(", ")}.`,f?`Quote result captured: ${f.quoteNumber}
84 at ${f.premium.toLocaleString("en-US",{style:"currency",currency:"USD",maximumFractionDigits:0})}.`:"Quote result not captured because a blocking validation issue remains."];return{jobId:o,mode:s,surface:n,entryUrl:r,browserSessionReference:a,signInNotice:"Sign in to the carrier portal in your browser, then run the AI runner again.",mfaMode:(t==null?void 0:t.mfaMode)??"staff_prompt",parallelGroupKey:`parallel:${e.session.id}:${e.session.lineOfBusiness??"personal"}`,status:u,queuedAt:y,completedAt:u==="completed"?y:void 0,mappedFieldCount:c.length,requiredFieldCount:g,validationChecks:m,fieldMappings:c,extractedQuote:f,auditEvents:h,blockingReasons:m.filter(A=>A.status==="block").map(A=>A.detail)}}const ww={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1,VITE_AI_MODE:"server",VITE_API_BASE_URL:"/api",VITE_STATE_SYNC_ID:"default",VITE_STATE_SYNC_MODE:"supabase",VITE_VERCEL_DEPLOYMENT_ID:"dpl_F2uor5XT6WbCD6wQePTVkunvMZhq",VITE_VERCEL_ENV:"production",VITE_VERCEL_GIT_COMMIT_AUTHOR_LOGIN:"",VITE_VERCEL_GIT_COMMIT_AUTHOR_NAME:"barhoumfak24-hash",VITE_VERCEL_GIT_COMMIT_MESSAGE:"Restore evidence-backed AI mapping completeness",VITE_VERCEL_GIT_COMMIT_REF:"codex/full-page-quote-flow",VITE_VERCEL_GIT_COMMIT_SHA:"0823d0042f218e01ecb18b834d364b43144d6484",VITE_VERCEL_GIT_PREVIOUS_SHA:"",VITE_VERCEL_GIT_PROVIDER:"github",VITE_VERCEL_GIT_PULL_REQUEST_ID:"",VITE_VERCEL_GIT_REPO_ID:"",VITE_VERCEL_GIT_REPO_OWNER:"barhoumfak24-hash",VITE_VERCEL_GIT_REPO_SLUG:"codex-quotex",VITE_VERCEL_OBSERVABILITY_CLIENT_CONFIG:'{"analytics":{"scriptSrc":"49897bef4da1095c/script.js","viewEndpoint":"49897bef4da1095c/view","eventEndpoint":"49897bef4da1095c/event","sessionEndpoint":"49897bef4da1095c/session"},"speedInsights":{"scriptSrc":"c1c2a871a5e4c1f5/script.js","endpoint":"c1c2a871a5e4c1f5/vitals"}}',VITE_VERCEL_PROJECT_ID:"prj_OAwowzIJBezI6pDFxpMTyLpQC8xD",VITE_VERCEL_PROJECT_PRODUCTION_URL:"quotexinsurance.com",VITE_VERCEL_TARGET_ENV:"production",VITE_VERCEL_URL:"quotexinsurance-2w14272cc-barhoumfak24-7816s-projects.vercel.app"};function sd(e){const t=ww,r=t==null?void 0:t[e];if(typeof r=="string")return r.trim()||void 0;if(typeof r=="boolean")return r?"true":void 0}function _w(e){var r,n,i;return`${((r=e.quotingAutomation)==null?void 0:r.provider)??""} ${((n=e.quotingAutomation)==null?void 0:n.agentPortalUrl)??((i=e.quotingAutomation)==null?void 0:i.customerPortalUrl)??""}`.toLowerCase()||e.agentPortalUrl?"carrier_portal_automation":"configuration_only"}function Aw(e,t){var r,n;return e==="carrier_portal_automation"&&((n=(r=t.quotingAutomation)==null?void 0:r.provider)==null?void 0:n.trim())||"AI carrier portal runner"}function Cw(e){return e==="carrier_portal_automation"?"browser_automation":"manual"}function Pc(e){var g,y,h,w,T,b,_,A;const t=_w(e),r=void 0,n=((y=(g=e.quotingAutomation)==null?void 0:g.agentPortalUrl)==null?void 0:y.trim())||((w=(h=e.quotingAutomation)==null?void 0:h.customerPortalUrl)==null?void 0:w.trim())||((T=e.agentPortalUrl)==null?void 0:T.trim()),i=((b=e.quotingAutomation)==null?void 0:b.status)??"not_configured",a=((_=e.quotingAutomation)==null?void 0:_.status)??"configured",s=uc(e),o=s.canAttempt||a==="connected"&&((A=e.portalPlaybook)==null?void 0:A.status)!=="unsupported",c=!1,d=!!n&&/^https:\/\//i.test(n),m=[],p=Aw(t,e);if(t==="carrier_portal_automation"){const v=sd("VITE_QUOTEX_CARRIER_AUTOMATION_BRIDGE_URL"),S=sd("VITE_QUOTEX_CARRIER_BROWSER_SESSION_REFERENCE");n||m.push("missing carrier portal URL"),n&&!d&&m.push("carrier portal URL must be HTTPS"),o||m.push(s.detail),v||m.push("server-side carrier automation worker is not configured"),v&&!S&&m.push("agent must be signed into the carrier portal in their browser before the runner can access it"),a==="not_configured"&&m.push("carrier portal automation not configured"),a==="configured"&&m.push("carrier portal automation has not passed a live test"),a==="error"&&m.push("last carrier portal automation test failed")}else m.push("carrier portal runner not configured");const u=t==="carrier_portal_automation"&&a==="connected"&&o&&d&&m.length===0,f=u?"connected":t==="carrier_portal_automation"&&d?"simulated":"no_api";return{provider:t,providerLabel:p,transport:Cw(t),endpoint:r,portalUrl:n,hasHttpsEndpoint:c,hasPortalUrl:d,configuredStatus:i,quoteApiStatus:f,liveReady:u,blockingReasons:m}}const gr=1,aa=1;function Sw(e){var b;const t=e.questions??e.session.questionnaireQuestions??[],r=e.responses??e.session.questionnaireResponses??{},n=e.responseMeta??e.session.questionnaireResponseMeta??{},i=e.createdAt??new Date().toISOString(),a=e.session.createdAt||((b=e.session.personalRiskFactDossier)==null?void 0:b.createdAt)||i,s=Hn({tenantId:e.session.tenantId,customerId:e.session.customerId??"",prospectId:e.session.prospectId??"",assetId:e.session.assetId??"",assetType:e.session.assetType,state:e.session.state??"",assets:(e.session.selectedAssetMappings??[]).map(_=>({id:_.assetId??"",type:_.assetType,address:_.address??"",details:_.assetDetails??{}})),details:e.session.assetDetails??{}}),o=Nc(t),c=Rw(e.session,t,r,n,a),d=Hn({schemaVersion:gr,riskFingerprint:s,facts:c}),m=e.session.personalRiskFactDossier,p=(m==null?void 0:m.schemaVersion)===gr&&m.riskFingerprint===s&&m.dossierDigest===d?m:{id:`risk_facts_${d}`,schemaVersion:gr,riskFingerprint:s,dossierDigest:d,createdAt:i,facts:c},u=new Map;for(const _ of p.facts)for(const A of _.questionIds)u.set(A,_);const f=t.map(_=>{const A=ii(r[_.id]),v=n[_.id],S=u.get(_.id),C=xw(_,A,v,S);return{questionId:_.id,label:_.label,required:_.required===!0,carrierIds:Jm(_),factKey:(S==null?void 0:S.key)??Zm(_),status:C,...A?{answer:A}:{},sourceKind:(S==null?void 0:S.sourceKind)??(v==null?void 0:v.sourceKind)??"unknown",sourceLabel:(S==null?void 0:S.sourceLabel)??(v==null?void 0:v.sourceLabel)??(v==null?void 0:v.sourceName)??Xm(v),...(S==null?void 0:S.sourceUrl)??(v==null?void 0:v.sourceUrl)?{sourceUrl:(S==null?void 0:S.sourceUrl)??(v==null?void 0:v.sourceUrl)}:{},confidence:(S==null?void 0:S.confidence)??qc(v==null?void 0:v.confidence,A?1:0),verified:(S==null?void 0:S.verified)??(v==null?void 0:v.verified)??ni(v,A),...(S==null?void 0:S.reviewReason)??(v==null?void 0:v.reviewReason)?{reviewReason:(S==null?void 0:S.reviewReason)??(v==null?void 0:v.reviewReason)}:{},...(S==null?void 0:S.conflictReason)??(v==null?void 0:v.conflictReason)?{conflictReason:(S==null?void 0:S.conflictReason)??(v==null?void 0:v.conflictReason)}:{}}}),g={total:f.length,answered:f.filter(_=>_.status==="answered").length,needsClient:f.filter(_=>_.status==="needs_client").length,needsVerification:f.filter(_=>_.status==="needs_verification").length,conflicting:f.filter(_=>_.status==="conflicting").length,notApplicable:f.filter(_=>_.status==="not_applicable").length},y=Hn({schemaVersion:gr,resolverVersion:aa,riskFactDossierDigest:p.dossierDigest,questionSetDigest:o,responses:t.map(_=>[_.id,ii(r[_.id])])}),h=Hn({inputDigest:y,counts:g,resolutions:f}),w=e.session.personalCarrierAnswerSet,T=(w==null?void 0:w.schemaVersion)===gr&&w.resolverVersion===aa&&w.inputDigest===y&&w.answerSetDigest===h?w:{id:`carrier_answers_${h}`,schemaVersion:gr,resolverVersion:aa,riskFactDossierId:p.id,riskFactDossierDigest:p.dossierDigest,questionSetDigest:o,inputDigest:y,answerSetDigest:h,createdAt:i,counts:g,resolutions:f};return{riskFactDossier:p,answerSet:T}}function ri(e,t={}){if(e.lineOfBusiness==="commercial")return{};const r=Sw({session:e,...t});return{personalRiskFactDossier:r.riskFactDossier,personalCarrierAnswerSet:r.answerSet}}function Tw(e){const t=e.personalCarrierAnswerSet,r=e.questionnaireQuestions??[];return!t||t.questionSetDigest!==Nc(r)?{...e.questionnaireResponses??{}}:Object.fromEntries(t.resolutions.flatMap(n=>n.answer?[[n.questionId,n.answer]]:[]))}function kw(e){return!!(e.personalCarrierAnswerSet&&e.personalCarrierAnswerSet.schemaVersion===gr&&e.personalCarrierAnswerSet.resolverVersion===aa&&e.personalCarrierAnswerSet.questionSetDigest===Nc(e.questionnaireQuestions??[]))}function Nc(e){return Hn(e.map(t=>{const r=t;return{id:t.id,label:t.label,kind:t.kind,required:t.required===!0,options:t.options??[],acordFieldKey:t.acordFieldKey??"",semanticKey:r.semanticKey??"",provenance:(r.carrierProvenance??[]).map(n=>({carrierId:n.carrierId,sourceQuestionId:n.sourceQuestionId,prompt:n.prompt,required:n.required,options:n.options,portalUrl:n.verification.portalUrl,re
84cipeVersion:n.verification.recipeVersion}))}}))}function Hn(e){const t=qo(e);let r=0xcbf29ce484222325n;const n=0x100000001b3n;for(let i=0;i<t.length;i+=1)r^=BigInt(t.charCodeAt(i)),r=BigInt.asUintN(64,r*n);return r.toString(16).padStart(16,"0")}function Rw(e,t,r,n,i){const a=t.map(s=>{const o=ii(r[s.id]),c=n[s.id],d=(c==null?void 0:c.sourceKind)??qw(c,o),m=(c==null?void 0:c.reviewStatus)==="conflict"||!!(c!=null&&c.conflictReason),p=(c==null?void 0:c.reviewStatus)==="advisory"||(c==null?void 0:c.reviewStatus)==="needs_confirmation"||d==="imagery_vision"||d==="model_estimate",u=m?"conflicting":o?p?"advisory":(c==null?void 0:c.verified)===!0||ni(c,o)?"verified":"asserted":"unavailable";return{key:Zm(s),canonicalKey:Pw(s),...o?{value:o}:{},status:u,sourceKind:d,sourceLabel:(c==null?void 0:c.sourceLabel)??(c==null?void 0:c.sourceName)??Xm(c),...c!=null&&c.sourceUrl?{sourceUrl:c.sourceUrl}:{},confidence:qc(c==null?void 0:c.confidence,o?ni(c,o)?1:.5:0),verified:(c==null?void 0:c.verified)??ni(c,o),...c!=null&&c.observedDate?{observedDate:c.observedDate}:{},collectedAt:(c==null?void 0:c.updatedAt)??i,questionIds:[s.id],carrierIds:Jm(s),...c!=null&&c.reviewReason?{reviewReason:c.reviewReason}:{},...c!=null&&c.conflictReason?{conflictReason:c.conflictReason}:{},...c!=null&&c.supportingSources?{supportingSources:c.supportingSources}:{}}});for(const[s,o]of Object.entries(e.publicFields??{})){const c=ii(o);if(!c)continue;const d=Nw(e,s);a.push(Ew(`public.${vn(s)}`,s,c,d,i))}for(const[s,o]of Object.entries(e.assetDetails??{})){const c=ii(o);c&&a.push({key:`asset.${vn(s)}`,canonicalKey:s,value:c,status:"verified",sourceKind:"agent_seed",sourceLabel:"QuoteX intake",confidence:1,verified:!0,collectedAt:i,questionIds:[],carrierIds:[]})}return a.sort((s,o)=>s.key.localeCompare(o.key))}function Ew(e,t,r,n,i){const a=(n==null?void 0:n.reviewStatus)==="conflict"||!!(n!=null&&n.conflictReason),s=(n==null?void 0:n.reviewStatus)==="advisory"||(n==null?void 0:n.reviewStatus)==="needs_confirmation"||(n==null?void 0:n.sourceKind)==="imagery_vision"||(n==null?void 0:n.sourceKind)==="model_estimate";return{key:e,canonicalKey:t,value:r,status:a?"conflicting":s?"advisory":n!=null&&n.verified?"verified":"asserted",sourceKind:(n==null?void 0:n.sourceKind)??"unknown",sourceLabel:(n==null?void 0:n.sourceLabel)??"QuoteX dossier",...n!=null&&n.sourceUrl?{sourceUrl:n.sourceUrl}:{},confidence:qc(n==null?void 0:n.confidence,.5),verified:(n==null?void 0:n.verified)??!1,...n!=null&&n.observedDate?{observedDate:n.observedDate}:{},collectedAt:(n==null?void 0:n.collectedAt)??i,questionIds:[],carrierIds:[],...n!=null&&n.reviewReason?{reviewReason:n.reviewReason}:{},...n!=null&&n.conflictReason?{conflictReason:n.conflictReason}:{},...n!=null&&n.supportingSources?{supportingSources:n.supportingSources}:{}}}function xw(e,t,r,n){const i=ni(r,t);return t&&i?"answered":(n==null?void 0:n.status)==="conflicting"||(r==null?void 0:r.reviewStatus)==="conflict"||r!=null&&r.conflictReason?"conflicting":t?(n==null?void 0:n.status)==="advisory"||(r==null?void 0:r.reviewStatus)==="advisory"||(r==null?void 0:r.reviewStatus)==="needs_confirmation"||(r==null?void 0:r.sourceKind)==="imagery_vision"||(r==null?void 0:r.sourceKind)==="model_estimate"||(r==null?void 0:r.sourceKind)==="unknown"||(r==null?void 0:r.verified)===!1?"needs_verification":"answered":e.required===!0?"needs_client":"not_applicable"}function Jm(e){const t=e;return Array.from(new Set([...t.carrierIds??[],e.carrierId??""].filter(Boolean))).sort()}function Zm(e){return`carrier_question.${vn(e.id)}`}function Pw(e){var r,n;const t=e;return((r=e.acordFieldKey)==null?void 0:r.trim())||((n=t.semanticKey)==null?void 0:n.trim())||vn(e.label)}function Nw(e,t){var i,a;const r=(i=e.publicFieldEvidence)==null?void 0:i[t];if(r)return r;const n=vn(t);return(a=Object.entries(e.publicFieldEvidence??{}).find(([s])=>vn(s)===n))==null?void 0:a[1]}function ni(e,t){return!!t&&(!e||["agent","manager","customer"].includes(e.updatedByRole))}function qw(e,t){return t?(e==null?void 0:e.updatedByRole)==="customer"?"client_intake":"agent_seed":"unknown"}function Xm(e){return(e==null?void 0:e.updatedByRole)==="customer"?"Client questionnaire":(e==null?void 0:e.updatedByRole)==="agent"||(e==null?void 0:e.updatedByRole)==="manager"?"Agent review":"QuoteX mapping"}function ii(e){return typeof e=="number"&&Number.isFinite(e)?String(e):typeof e=="boolean"?e?"Yes":"No":typeof e=="string"?e.trim():""}function qc(e,t){return Number.isFinite(e)?Math.max(0,Math.min(1,Number(e))):t}function vn(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,".").replace(/^\.+|\.+$/g,"")||"unknown"}function qo(e){if(e===null||typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return`[${e.map(qo).join(",")}]`;const t=e;return`{${Object.keys(t).filter(r=>t[r]!==void 0).sort().map(r=>`${JSON.stringify(r)}:${qo(t[r])}`).join(",")}}`}function H(e,...t){return{field:e,prompts:t}}const ep=[H("clientName","Client Full Name"),H("drivers.0.fullName","Full Name","Driver Full Name"),H("drivers.0.dateOfBirth","Date of Birth","Driver Date of Birth"),H("drivers.0.gender","Gender","Driver Gender"),H("drivers.0.maritalStatus","Marital Status","Driver Marital Status"),H("drivers.0.licenseNumber","License Number","Driver License Number"),H("drivers.0.licenseState","License State","Driver License State"),H("drivers.0.yearsLicensed","Years Licensed"),H("drivers.0.violations","Violations (5 yrs)","Moving Violations","Violations"),H("drivers.0.atFaultAccidents","At-fault Accidents (5 yrs)","At-Fault Accidents"),H("drivers.0.sr22Required","Requires SR-22 filing","Is an SR-22 Required?"),H("vehicles.0.year","Year","Vehicle Year"),H("vehicles.0.make","Make","Vehicle Make"),H("vehicles.0.model","Model","Vehicle Model"),H("vehicles.0.vin","VIN (Optional)","Vehicle VIN","VIN"),H("vehicles.0.primaryUse","Primary Use","Vehicle Primary Use"),H("vehicles.0.annualMiles","Annual Miles","Estimated Annual Mileage"),H("vehicles.0.ownership","Ownership","Vehicle Ownership"),H("vehicles.0.antiTheft","Has active anti-theft device","Does the Vehicle Have an Anti-Theft Device?"),H("priorInsurance.carrierName","Current Carrier Name","Current Insurance Carrier"),H("priorInsurance.expirationDate","Policy Expiration Date","Current Policy Expiration Date"),H("priorInsurance.yearsInsured","Years Continuously Insured"),H("priorInsurance.reason","Reason for Shopping"),H("coverage.bodilyInjury","Bodily Injury Liability","Bodily Injury Liability Limits"),H("coverage.propertyDamage","Property Damage Liability","Property Damage Liability Limit"),H("coverage.uninsuredMotorist","Uninsured/Underinsured Motorist","Uninsured / Underinsured Motorist Coverage"),H("coverage.medicalPayments","Medical Payments","Medical Payments Coverage"),H("coverage.collisionDeductible","Collision Deductible"),H("coverage.comprehensiveDeductible","Comprehensive Deductible"),H("coverage.rentalReimbursement","Rental Reimbursement"),H("coverage.roadsideAssistance","Roadside Assistance"),H("coverage.gapCoverage","Gap Coverage","GAP Coverage"),H("coverage.newCarReplacement","New Car Replacement","New Car Replacement Coverage")],tp=[H("clientName","Client Full Name"),H("property.address","Street Address","Property Street Address"),H("property.city","City","Property City"),H("property.state","State","Property State"),H("property.zip","ZIP Code","Property ZIP Code"),H("property.yearBuilt","Year Built"),H("property.squareFootage","Square Footage"),H("property.stories","Stories","Number of Stories"),H("property.constructionType","Construction Type"),H("property.foundationType","Foundation Type"),H("property.units","Units","Number of Units"),H("property.roofType","Roof Type"),H("property.roofReplacedYear","Roof Last Replaced (Year)","Roof Replacement Year"),H("occupancy.type","Occupancy Type"),H("occupancy.residents","Full-Time Residents","Number of Residents"),H("occupancy.heatingType","Heating Type"),H("occupancy.centralAir","Central AC","Central Air Conditioning"),H("occupancy.businessConducted","Business run from home","Is Any Business Conducted at the Property?"),H("occupancy.trampoline","Trampoline","Is There a Trampoline?"),H("occupancy.gatedCommunity","Gated Community","Is the Property in a Gated Community?"),H("occupancy.fireSprinkler","Fire Sprinkler System","Does the Property Have Fire Sprinklers?"),H("occupancy.deadboltLocks","Deadbolts on all ext doors","Does the Property Have Deadbolt Locks?"),H("occupancy.swimmingPool","Swimming Pool","Is There a Swimming Pool?"),H("occupancy.poolFenced","Fully Fenced","Is the Pool Fe
84nced?"),H("occupancy.poolDivingBoard","Has Diving Board","Does the Pool Have a Diving Board?"),H("occupancy.dog","Dog on Premises","Is There a Dog at the Property?"),H("occupancy.dogBreed","Breed","Dog Breed"),H("occupancy.burglarAlarm","Burglar Alarm","Burglar Alarm Type"),H("occupancy.fireAlarm","Fire/Smoke Alarm","Fire / Smoke Alarm Type"),H("homeLosses.any","Has the property or applicant had any property losses in the past 5 years?","Any Home Losses?"),H("homeLosses.count","Number of Losses","Number of Home Losses"),H("homeCoverage.dwellingAmount","Dwelling Amount (Cov A)","Dwelling Coverage Amount"),H("homeCoverage.personalPropertyDisplayOnly","Personal Property (Cov C)"),H("homeCoverage.personalLiability","Personal Liability (Cov E)","Personal Liability Limit"),H("homeCoverage.medicalPayments","Medical Payments (Cov F)","Medical Payments Limit"),H("homeCoverage.allPerilDeductible","All-Peril Deductible"),H("mortgage.isMortgaged","Is the property mortgaged?","Is the Property Mortgaged?"),H("mortgage.lenderName","Lender Name","Mortgage Lender Name"),H("mortgage.loanNumber","Loan Number","Mortgage Loan Number")],Ow=ep.map(e=>e.field),Dw=tp.map(e=>e.field).filter(e=>e!=="homeCoverage.personalPropertyDisplayOnly");function wn(e){return e.toLowerCase().replace(/[–—]/g,"-").replace(/[^a-z0-9]+/g," ").trim()}function od(e){return typeof e=="number"&&Number.isFinite(e)?String(e):typeof e=="string"?e.trim():""}function Lw(e){var n,i;return e.assetType==="luxury_vehicle"||((n=e.selectedAssetMappings)==null?void 0:n.some(a=>a.assetType==="luxury_vehicle"))?"auto":e.assetType==="coastal_home"||((i=e.selectedAssetMappings)==null?void 0:i.some(a=>a.assetType==="coastal_home"))?"homeowners":null}function Mw(e,t){const r=e;return t?r.filter(n=>{var i;return(i=n.carrierProvenance)==null?void 0:i.some(a=>a.carrierId===t)}):[]}function cd(e,t){var r,n;return((n=(r=e.carrierProvenance)==null?void 0:r.find(i=>i.carrierId===t))==null?void 0:n.prompt)??e.label}function $w(e,t){var r,n;return e.required??((n=(r=e.carrierProvenance)==null?void 0:r.find(i=>i.carrierId===t))==null?void 0:n.required)??!0}function Fw(e,t){var i;const r=wn(t);return(i=(e==="auto"?ep:tp).find(a=>a.prompts.some(s=>wn(s)===r)))==null?void 0:i.field}function zn(e){const t=wn(e);if(["yes","true","1","y"].includes(t))return!0;if(["no","false","0","n","none"].includes(t))return!1}function Ua(e){const t=e.replace(/[$,\s]/g,"").replace(/\+$/,"");if(!t)return;const r=Number(t);return Number.isFinite(r)?r:void 0}function Oi(e,t,r){const n=Ua(e);return n!==void 0&&Number.isInteger(n)&&n>=t&&n<=r?n:void 0}function ld(e,t,r=Number.POSITIVE_INFINITY){const n=Ua(e);return n!==void 0&&n>=t&&n<=r?n:void 0}function dd(e){const t=wn(e);if(t==="none")return"none";if(t==="waive"||t==="waived")return"waive";const r=Ua(e.replace(/k\b/i,"000"));return r===void 0?void 0:String(Math.round(r))}function Gt(e,t){const r=wn(e);return t[r]??(Object.values(t).includes(e)?e:void 0)}function Bw(e,t){var i,a,s,o;if(new Set(["drivers.0.sr22Required","vehicles.0.antiTheft","coverage.roadsideAssistance","coverage.gapCoverage","coverage.newCarReplacement","occupancy.centralAir","occupancy.businessConducted","occupancy.trampoline","occupancy.gatedCommunity","occupancy.fireSprinkler","occupancy.deadboltLocks","occupancy.swimmingPool","occupancy.poolFenced","occupancy.poolDivingBoard","occupancy.dog","homeLosses.any","mortgage.isMortgaged"]).has(e))return zn(t);if(["drivers.0.yearsLicensed","drivers.0.violations","drivers.0.atFaultAccidents","homeLosses.count"].includes(e))return Oi(t,0,100);if(e==="vehicles.0.year")return Oi(t,1886,new Date().getFullYear()+1);if(e==="property.yearBuilt")return Oi(t,1700,new Date().getFullYear());if(e==="property.squareFootage")return Oi(t,1,5e5);if(["homeCoverage.dwellingAmount","homeCoverage.personalLiability","homeCoverage.allPerilDeductible"].includes(e))return ld(t,Number.MIN_VALUE);if(e==="homeCoverage.medicalPayments")return ld(t,0);if(e==="vehicles.0.vin"){const c=t.replace(/[^A-HJ-NPR-Z0-9]/gi,"").toUpperCase();return!c||/^[A-HJ-NPR-Z0-9]{17}$/.test(c)?c:void 0}if(e==="property.roofReplacedYear"){const c=Ua(t);return c!==void 0&&Number.isInteger(c)&&c>=new Date().getFullYear()-400&&c<=new Date().getFullYear()?String(c):void 0}if(e==="vehicles.0.annualMiles")return Gt(t,{"7 500":"7500","7 500 15 000":"12000","15 000 20 000":"17500","20 000":"25000",7500:"7500",12e3:"12000",17500:"17500",25e3:"25000"});if(e==="priorInsurance.yearsInsured")return Gt(t,{"1 yr":"< 1 yr","1 2 yrs":"1-2 yrs","3 5 yrs":"3-5 yrs","6 10 yrs":"6-10 yrs","10 yrs":"10+ yrs"});if(e==="coverage.bodilyInjury"){const c=[...t.matchAll(/(\d+)\s*k/gi)].map(d=>d[1]);return c.length>=2?`${c[0]}/${c[1]}`:(i=t.match(/(25\/50|50\/100|100\/300|250\/500|500\/500)/))==null?void 0:i[1]}if(e==="coverage.propertyDamage"){const c=dd(t);return c!==void 0&&/^\d+$/.test(c)?c:void 0}if(e==="coverage.uninsuredMotorist")return Gt(t,{"match bi limits":"match",match:"match","lower limits":"lower",lower:"lower",reject:"none",none:"none"});if(e==="coverage.medicalPayments"||e==="coverage.collisionDeductible"||e==="coverage.comprehensiveDeductible"){const c=dd(t);return c!==void 0&&(e==="coverage.medicalPayments"?/^(?:none|\d+)$/:/^(?:waive|\d+)$/).test(c)?c:void 0}if(e==="coverage.rentalReimbursement"){if(wn(t)==="none")return"none";const d=((a=t.match(/(30|50|75)\s*\/\s*day/i))==null?void 0:a[1])??((s=t.match(/\$?(30|50|75)/))==null?void 0:s[1]);return d?`${d}/day`:void 0}if(e==="property.constructionType")return Gt(t,{frame:"frame","masonry veneer":"masonry_veneer",masonry:"masonry","superior fire resistive":"superior",superior:"superior"});if(e==="property.units")return(o=t.match(/^[1-4]/))==null?void 0:o[0];if(e==="property.roofType")return Gt(t,{"asphalt composition shingle":"asphalt","asphalt shingle":"asphalt",asphalt:"asphalt",metal:"metal",tile:"tile",slate:"slate","flat other":"flat",flat:"flat"});if(e==="occupancy.type")return Gt(t,{"primary residence":"primary",primary:"primary","secondary vacation":"secondary",secondary:"secondary","seasonal 6 months":"seasonal",seasonal:"seasonal","tenant occupied rental":"rental",rental:"rental"});if(e==="occupancy.burglarAlarm")return Gt(t,{none:"none","local bell only":"local",local:"local","central station monitored":"monitored",monitored:"monitored"});if(e==="occupancy.fireAlarm")return Gt(t,{none:"none","smoke detectors only":"detectors_only","detectors only":"detectors_only","central station monitored":"monitored",monitored:"monitored"});if(e==="property.state"||e==="drivers.0.licenseState")return/^[A-Za-z]{2}$/.test(t)?t.toUpperCase():void 0;if(e==="property.zip")return/^\d{5}(?:-\d{4})?$/.test(t)?t:void 0;if(["drivers.0.dateOfBirth","priorInsurance.expirationDate"].includes(e))return/^\d{4}-\d{2}-\d{2}$/.test(t)?t:void 0;if(["occupancy.dogBreed","mortgage.lenderName","mortgage.loanNumber"].includes(e)&&t==="")return"";const n=e==="occupancy.dogBreed"?200:500;return t&&t.length<=n?t:void 0}function Uw(e,t){if(["occupancy.poolFenced","occupancy.poolDivingBoard"].includes(e)&&zn(t.get("occupancy.swimmingPool")??"")===!1)return"No";if(e==="occupancy.dogBreed"&&zn(t.get("occupancy.dog")??"")===!1)return"";if(e==="homeLosses.count"&&zn(t.get("homeLosses.any")??"")===!1)return"0";if(["mortgage.lenderName","mortgage.loanNumber"].includes(e)&&zn(t.get("mortgage.isMortgaged")??"")===!1||e==="vehicles.0.vin")return"";if(e==="homeCoverage.personalPropertyDisplayOnly")return"display-only"}function ud(e){if(["occupancy.poolFenced","occupancy.poolDivingBoard"].includes(e))return"occupancy.swimmingPool";if(e==="occupancy.dogBreed")return"occupancy.dog";if(e==="homeLosses.count")return"homeLosses.any";if(["mortgage.lenderName","mortgage.loanNumber"].includes(e))return"mortgage.isMortgaged"}function G(e,t){return e.get(t)}function Vw(e){return{policyType:"auto",clientName:G(e,"clientName"),drivers:[{fullName:G(e,"drivers.0.fullName"),dateOfBirth:G(e,"drivers.0.dateOfBirth"),gender:G(e,"drivers.0.gender"),maritalStatus:G(e,"drivers.0.maritalStatus"),licenseNumber:G(e,"drivers.0.licenseNumber"),licenseState:G(e,"drivers.0.licenseState"),yearsLicensed:G(e,"drivers.0.yearsLicensed"),violations:G(e,"drivers.0.violations"),atFaultAccidents:G(e,"drivers.0.atFaultAccidents"),sr22Required:G(e,"drivers.0.sr22Required")}],vehicles:[{year:G(e,"vehicles.0.year"),make:G(e,"vehicles.0.make"),model:G(e,"vehicles.0.model"),vin:G(e,"vehicles.0.vin"),primaryUse:G(e,"vehicles.0.primaryUse"),annualMiles:G(e,"vehicles.0.annualMiles"),ownership:G(e,"vehicles.0.ownership"),antiTheft:G(e,"vehicles.0.antiTheft")}],priorInsurance:{carrierName:G(e,"priorInsurance.carrierName"),expirationDate:G(e,"priorInsurance.expirationDate"),yearsInsured:G(e,"priorInsurance.yearsInsured"),reason:G(e,"priorInsurance.reason")},coverage:{bodilyInjury:G(e,"coverage.bodilyInjury"),propertyDamage:G(e,"coverage.propertyDamage"),uninsuredMotorist:G(e,"coverage.uninsuredMotorist"),medicalPayments:G(e,"coverage.medicalPayments"),collisionDeductible:G
84(e,"coverage.collisionDeductible"),comprehensiveDeductible:G(e,"coverage.comprehensiveDeductible"),rentalReimbursement:G(e,"coverage.rentalReimbursement"),roadsideAssistance:G(e,"coverage.roadsideAssistance"),gapCoverage:G(e,"coverage.gapCoverage"),newCarReplacement:G(e,"coverage.newCarReplacement")}}}function jw(e){const t=Number(G(e,"property.roofReplacedYear"));return{policyType:"homeowners",clientName:G(e,"clientName"),property:{address:G(e,"property.address"),city:G(e,"property.city"),state:G(e,"property.state"),zip:G(e,"property.zip"),yearBuilt:G(e,"property.yearBuilt"),squareFootage:G(e,"property.squareFootage"),stories:G(e,"property.stories"),constructionType:G(e,"property.constructionType"),foundationType:G(e,"property.foundationType"),units:G(e,"property.units"),roofType:G(e,"property.roofType"),roofReplacedYear:String(t),roofAge:new Date().getFullYear()-t},occupancy:{type:G(e,"occupancy.type"),residents:G(e,"occupancy.residents"),businessConducted:G(e,"occupancy.businessConducted"),heatingType:G(e,"occupancy.heatingType"),centralAir:G(e,"occupancy.centralAir"),swimmingPool:G(e,"occupancy.swimmingPool"),poolFenced:G(e,"occupancy.poolFenced"),poolDivingBoard:G(e,"occupancy.poolDivingBoard"),trampoline:G(e,"occupancy.trampoline"),dog:G(e,"occupancy.dog"),dogBreed:G(e,"occupancy.dogBreed"),burglarAlarm:G(e,"occupancy.burglarAlarm"),fireAlarm:G(e,"occupancy.fireAlarm"),fireSprinkler:G(e,"occupancy.fireSprinkler"),deadboltLocks:G(e,"occupancy.deadboltLocks"),gatedCommunity:G(e,"occupancy.gatedCommunity")},losses:{count:G(e,"homeLosses.count")},coverage:{dwellingAmount:G(e,"homeCoverage.dwellingAmount"),personalLiability:G(e,"homeCoverage.personalLiability"),medicalPayments:G(e,"homeCoverage.medicalPayments"),allPerilDeductible:G(e,"homeCoverage.allPerilDeductible")},mortgage:{isMortgaged:G(e,"mortgage.isMortgaged"),lenderName:G(e,"mortgage.lenderName"),loanNumber:G(e,"mortgage.loanNumber")}}}function md(e){var O,x,$,q;const t=Lw(e.session),r=Mw(e.session.questionnaireQuestions??[],e.carrierId),n=Tw(e.session),i=e.session.personalCarrierAnswerSet,a={policyType:t,...i?{answerSetId:i.id,answerSetDigest:i.answerSetDigest,riskFactDossierId:i.riskFactDossierId,riskFactDossierDigest:i.riskFactDossierDigest,questionSetDigest:i.questionSetDigest,resolverVersion:i.resolverVersion}:{},questionCount:r.length,answeredQuestionCount:r.filter(B=>od(n[B.id])).length};if(!t||r.length===0)return{application:null,...a,transferredAnswerCount:0,unmappedQuestionIds:[],missingQuestionIds:[],invalidQuestionIds:[],missingCarrierFields:[],fields:[],nonApplicationQuestions:[],blockingQuestionIds:[],blockingIssueCount:0};const s=r.map(B=>({question:B,fieldName:Fw(t,cd(B,e.carrierId)),raw:od(n[B.id])})),o=new Map;for(const B of s)B.fieldName&&o.set(B.fieldName,[...o.get(B.fieldName)??[],B]);const c=new Set([...o.values()].filter(B=>B.length>1).flatMap(B=>B.map(F=>F.question.id))),d=new Map;for(const[B,F]of o)F.length===1&&d.set(B,F[0].raw);const m=new Map,p=[],u=[],f=[...c],g=[],y=[];let h=0;for(const B of s){const F=cd(B.question,e.carrierId);if(!(e.carrierId??"").trim()||(e.carrierId??"").trim().length>160||!B.question.id.trim()||B.question.id.trim().length>240||!F.trim()||F.trim().length>1e3||B.raw.length>2e3){f.push(B.question.id);continue}if(!B.fieldName){B.raw?$w(B.question,e.carrierId)?p.push(B.question.id):y.push({carrierId:e.carrierId??"",questionId:B.question.id,prompt:F,rawAnswer:B.raw,required:!1}):u.push(B.question.id);continue}if(c.has(B.question.id))continue;const X=Uw(B.fieldName,d),j=ud(B.fieldName),Q=X!==void 0&&(!B.raw||j!==void 0),ae=Q?X:B.raw||X;if(ae===void 0){u.push(B.question.id);continue}const ue=Bw(B.fieldName,ae);if(ue===void 0){f.push(B.question.id);continue}m.set(B.fieldName,ue);const de=ud(B.fieldName),be=de?(x=(O=o.get(de))==null?void 0:O[0])==null?void 0:x.question.id:void 0;g.push({carrierId:e.carrierId??"",questionId:B.question.id,prompt:F,field:B.fieldName,rawAnswer:Q?"":B.raw,value:ue,source:Q?B.fieldName==="homeCoverage.personalPropertyDisplayOnly"?"carrier_display":"carrier_rule":"questionnaire",derivedFromQuestionIds:Q&&be?[be]:[]}),h+=1}const w=m.get("homeLosses.any"),T=m.get("homeLosses.count");if(w===!0&&T===0)for(const B of["homeLosses.any","homeLosses.count"]){const F=(q=($=o.get(B))==null?void 0:$[0])==null?void 0:q.question.id;F&&f.push(F)}
84const _=(t==="auto"?Ow:Dw).filter(B=>!m.has(B)),A=[...new Set([...p,...u,...f])],v=new Set(s.flatMap(B=>B.fieldName?[B.fieldName]:[])),S=_.filter(B=>!v.has(B)).length,C=A.length+S;return{application:C===0&&_.length===0&&h+y.length===r.length?t==="auto"?Vw(m):jw(m):null,...a,transferredAnswerCount:h,unmappedQuestionIds:p,missingQuestionIds:u,invalidQuestionIds:f,missingCarrierFields:_,fields:g,nonApplicationQuestions:y,blockingQuestionIds:A,blockingIssueCount:C}}const Qw={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1,VITE_AI_MODE:"server",VITE_API_BASE_URL:"/api",VITE_STATE_SYNC_ID:"default",VITE_STATE_SYNC_MODE:"supabase",VITE_VERCEL_DEPLOYMENT_ID:"dpl_F2uor5XT6WbCD6wQePTVkunvMZhq",VITE_VERCEL_ENV:"production",VITE_VERCEL_GIT_COMMIT_AUTHOR_LOGIN:"",VITE_VERCEL_GIT_COMMIT_AUTHOR_NAME:"barhoumfak24-hash",VITE_VERCEL_GIT_COMMIT_MESSAGE:"Restore evidence-backed AI mapping completeness",VITE_VERCEL_GIT_COMMIT_REF:"codex/full-page-quote-flow",VITE_VERCEL_GIT_COMMIT_SHA:"0823d0042f218e01ecb18b834d364b43144d6484",VITE_VERCEL_GIT_PREVIOUS_SHA:"",VITE_VERCEL_GIT_PROVIDER:"github",VITE_VERCEL_GIT_PULL_REQUEST_ID:"",VITE_VERCEL_GIT_REPO_ID:"",VITE_VERCEL_GIT_REPO_OWNER:"barhoumfak24-hash",VITE_VERCEL_GIT_REPO_SLUG:"codex-quotex",VITE_VERCEL_OBSERVABILITY_CLIENT_CONFIG:'{"analytics":{"scriptSrc":"49897bef4da1095c/script.js","viewEndpoint":"49897bef4da1095c/view","eventEndpoint":"49897bef4da1095c/event","sessionEndpoint":"49897bef4da1095c/session"},"speedInsights":{"scriptSrc":"c1c2a871a5e4c1f5/script.js","endpoint":"c1c2a871a5e4c1f5/vitals"}}',VITE_VERCEL_PROJECT_ID:"prj_OAwowzIJBezI6pDFxpMTyLpQC8xD",VITE_VERCEL_PROJECT_PRODUCTION_URL:"quotexinsurance.com",VITE_VERCEL_TARGET_ENV:"production",VITE_VERCEL_URL:"quotexinsurance-2w14272cc-barhoumfak24-7816s-projects.vercel.app"};function Oc(e){const t=Qw,r=t==null?void 0:t[e];if(typeof r=="string")return r.trim()||void 0;if(typeof r=="boolean")return r?"true":void 0}function Hw(e){let t=0;for(let r=0;r<e.length;r+=1)t=t*31+e.charCodeAt(r)>>>0;return t}function zw(e,t){var n;return((n=t.providerTrace)==null?void 0:n.provider)==="carrier_portal_automation"?"carrier_portal_automation":e.agentPortalUrl?"manual_required":"configuration_only"}function Gw(e,t,r){var n,i,a;return(i=(n=t.bindingApi)==null?void 0:n.provider)!=null&&i.trim()?t.bindingApi.provider.trim():e==="carrier_portal_automation"?"AI carrier portal runner":e==="manual_required"?(a=r.providerTrace)!=null&&a.providerLabel?`${r.providerTrace.providerLabel} manual bind`:"Manual carrier bind":"Manual carrier workflow"}function Ww(e){return e==="carrier_portal_automation"?"browser_automation":"manual"}function Kw(e){var o,c,d,m;const{carrier:t,session:r,quote:n,policy:i}=e,a=`BND-${r.id.slice(-8).toUpperCase()}-${t.id.slice(-5).toUpperCase()}`,s=i.carrierBindingReference??((o=n.implementation)==null?void 0:o.carrierReference)??((c=n.providerTrace)==null?void 0:c.executionId)??`${i.policyNumber??i.id}-${new Date().toISOString().slice(0,10).replace(/-/g,"")}`;return{requestId:a,carrierId:t.id,carrierName:t.name,customerId:i.customerId,assetId:i.assetId,policyId:i.id,policyNumber:i.policyNumber,premium:i.finalPremium??i.premiumEstimate??n.premium,effectiveDate:i.effectiveDate,renewalDate:i.renewalDate,lineOfBusiness:i.department,quoteRequestId:(d=n.providerTrace)==null?void 0:d.requestId,quoteExecutionId:(m=n.providerTrace)==null?void 0:m.executionId,carrierReference:s,publicFields:r.publicFields??{},questionnaireResponses:r.questionnaireResponses??{},assetDetails:r.assetDetails??{}}}function Yw(e,t,r){const n=[],i=Oc("VITE_QUOTEX_CARRIER_BINDING_BRIDGE_URL");return r==="configuration_only"&&n.push("no carrier portal handoff configured"),r==="manual_required"&&n.push("carrier-side issuance requires opening the carrier portal"),r==="carrier_portal_automation"&&(e.agentPortalUrl||n.push("missing carrier agent portal URL"),i||n.push("AI carrier portal runner bridge not configured")),n}function rp(e){const t=zw(e.carrier,e.quote),r=Kw(e),n=Yw(e.carrier,e.quote,t),i=Oc("VITE_QUOTEX_CARRIER_BINDING_BRIDGE_URL"),a=n.length===0&&!!i,s=t==="carrier_portal_automation"?`RPA-${e.carrier.id.slice(-5).toUpperCase()}-${Hw(r.requestId)%1e4}`:void 0,o=t==="manual_required"?"manual_required":"prepared_not_sent",c=t==="manual_required"?[`Prepared carrier bind handoff ${r.requestId}.`,"Carrier-side registration still requires opening the carrier / rater portal and issuing the policy there.",...n]:t==="carrier_portal_automation"?[`Prepared AI carrier portal runner task ${r.requestId}.`,a?"Runner bridge is configured; production can open the carrier portal, complete MFA, and submit only after the carrier, insured, premium, effective date, and policy number match.":"Runner checklist prepared. Carrier-side submission is blocked until the AI runner bridge, carrier portal URL, and protected credentials are configured.","No carrier page is submitted unless every verification checkpoint passes.",...n]:t==="configuration_only"?[`Recorded manual implementation placeholder ${r.requestId}.`,"No carrier-side bind request was sent."]:[`Prepared carrier portal handoff ${r.requestId}.`,"Carrier-side issuance remains a staff-supervised carrier portal step.",...n];return{provider:t,providerLabel:Gw(t,e.carrier,e.quote),transport:Ww(t),requestId:r.requestId,executionId:s,liveReady:a,submittedAt:new Date().toISOString(),status:o,carrierReference:r.carrierReference,carrierPolicyNumber:e.policy.policyNumber,messages:c,blockingReasons:n}}async function Jw(e){const t=rp(e),r=Oc("VITE_QUOTEX_CARRIER_BINDING_BRIDGE_URL");if(!r||!t.liveReady)return t;try{const n=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({carrier:{id:e.carrier.id,name:e.carrier.name,agentPortalUrl:e.carrier.agentPortalUrl,bindingApi:e.carrier.bindingApi,quotingApi:e.carrier.quotingApi},session:{id:e.session.id,tenantId:e.session.tenantId,customerId:e.session.customerId,prospectId:e.session.prospectId,assetId:e.session.assetId,assetType:e.session.assetType,state:e.session.state,lineOfBusiness:e.session.lineOfBusiness,publicFields:e.session.publicFields,questionnaireResponses:e.session.questionnaireResponses,assetDetails:e.session.assetDetails},quote:{carrierId:e.quote.carrierId,premium:e.quote.premium,providerTrace:e.quote.providerTrace},policy:e.policy,implementedById:e.implementedById})}),i=await n.json();return n.ok&&i.bindingTrace?i.bindingTrace:{...t,status:"failed",liveReady:!1,messages:[...t.messages,i.message??`Carrier binding bridge returned HTTP ${n.status}.`],blockingReasons:[...t.blockingReasons,"carrier binding bridge failed"]}}catch(n){return{...t,status:"failed",liveReady:!1,messages:[...t.messages,n instanceof Error?n.message:"Carrier binding bridge request failed."],blockingReasons:[...t.blockingReasons,"carrier binding bridge request failed"]}}}const Zw=new Set(["accepted","declined","needs_supplemental","supplemental_sent","needs_client_info","agent_review"]);function np(e){var t;return!!e.responseAt||(((t=e.replyCommunicationIds)==null?void 0:t.length)??0)>0||Zw.has(e.status)}function Xw(e){const t=e.commercialCarrierSubmissions??[];return t.length>0&&t.every(np)}function Oo(e,t){return Math.round(e/t*100)}function qn(e,t){if(t<=0)return 0;const r=Math.max(0,Math.min(t,e-1));return Oo(r,t)}function Ta(e){return e.status==="voided"?!1:!e.quotes.some(t=>{var r;return!!((r=t.implementation)!=null&&r.policyId)})}function Gn(e){return e.lineOfBusiness==="commercial"&&e.aiSummary==="ACORD documents initialized from the client Documents card."}function $T(e){const t=e.commercialCarrierSubmissions??[],r=t.filter(m=>m.status==="accepted"||m.status==="supplemental_sent").length,n=t.filter(np).length,i=Xw(e),a=t.filter(m=>m.status==="needs_client_info").length,s=e.quotes.length,o=e.quotes.some(m=>{var p;return!!((p=m.implementation)!=null&&p.policyId)}),c=e.lineOfBusiness==="commercial"?"commercial":"personal",d=e.lineOfBusiness==="commercial"?6:4;
84if(o)return{stage:"Policy implemented",tone:"success",detail:"Quote workflow finished and policy/billing records were created.",blocker:"No blocker",progress:Oo(d,d),currentStep:d,totalSteps:d,acceptedCount:r,waitingCount:a,quoteCount:s,implemented:o,isClosed:!0,sortPriority:90};if(e.lineOfBusiness==="commercial"&&e.status==="awaiting_reply"&&e.commercialSecondRoundSentAt)return{stage:r>0?"Accepted ranking live":"Missing-info round",tone:r>0?"gold":"warn",detail:r>0?`${r} accepted market${r===1?"":"s"} ranked while supplementals continue.`:"Second-round carrier supplemental questions are waiting on the client.",blocker:a>0?`${a} carrier${a===1?"":"s"} waiting on supplemental info.`:"Waiting on second-round client answers.",progress:qn(5,d),currentStep:5,totalSteps:d,acceptedCount:r,waitingCount:a,quoteCount:s,implemented:o,isClosed:!1,sortPriority:10};if(e.status==="complete"){if(e.lineOfBusiness==="commercial"&&!i){const m=Math.max(0,t.length-n);return{stage:"Awaiting carrier replies",tone:"info",detail:t.length>0?`${n} of ${t.length} carrier repl${t.length===1?"y":"ies"} received.`:"Carrier submissions have not been recorded yet.",blocker:m>0?`${m} carrier repl${m===1?"y":"ies"} still outstanding.`:"Waiting for carrier submission records.",progress:qn(4,d),currentStep:4,totalSteps:d,acceptedCount:r,waitingCount:a,quoteCount:s,implemented:o,isClosed:!1,sortPriority:25}}return{stage:"Ranking ready",tone:"success",detail:s>0?`${s} carrier option${s===1?"":"s"} ranked for review.`:"Carrier ranking finished with no active market match.",blocker:s>0?"Ready for agent review.":"Review carrier appetite/API setup.",progress:Oo(d,d),currentStep:d,totalSteps:d,acceptedCount:r,waitingCount:a,quoteCount:s,implemented:o,isClosed:!1,sortPriority:20}}return e.status==="quoting"?{stage:"Running quotes",tone:"gold",detail:`AI is running ${c} carrier ranking.`,blocker:"No blocker",progress:qn(d,d),currentStep:d,totalSteps:d,acceptedCount:r,waitingCount:a,quoteCount:s,implemented:o,isClosed:!1,sortPriority:30}:e.status==="awaiting_reply"?{stage:"Awaiting client reply",tone:"warn",detail:e.lineOfBusiness==="commercial"?"Shared commercial questionnaire is out to the client.":"Questionnaire is out to the client before final ranking.",blocker:`${e.missingFields.length} missing field${e.missingFields.length===1?"":"s"} outstanding.`,progress:qn(3,d),currentStep:3,totalSteps:d,acceptedCount:r,waitingCount:a,quoteCount:s,implemented:o,isClosed:!1,sortPriority:40}:{stage:"Gathering info",tone:"neutral",detail:`AI is collecting public data and preparing the ${c} questionnaire.`,blocker:e.missingFields.length>0?`${e.missingFields.length} detail${e.missingFields.length===1?"":"s"} needed.`:"No blocker",progress:qn(2,d),currentStep:2,totalSteps:d,acceptedCount:r,waitingCount:a,quoteCount:s,implemented:o,isClosed:!1,sortPriority:50}}const e_=/\b\d{1,6}\s+[A-Z0-9][A-Z0-9.'-]*(?:\s+[A-Z0-9][A-Z0-9.'-]*){0,7}\s+(?:ST(?:REET)?|AVE(?:NUE)?|RD|ROAD|DR(?:IVE)?|LN|LANE|BLVD|BOULEVARD|CT|COURT|CIR(?:CLE)?|WAY|HWY|HIGHWAY|PKWY|PARKWAY|PL(?:ACE)?|TER(?:RACE)?|TRL|TRAIL)\b(?:[^\n\r;]{0,80})?/i,t_=/\b(?:HIN|HULL(?:\s+IDENTIFICATION)?(?:\s+NUMBER)?)[\s:#-]*([A-HJ-NPR-Z0-9]{12})\b/i,r_=/\b(?:ASSET|SERIAL|ITEM|APPRAISAL|REGISTRATION|DOCUMENT)(?:\s+(?:ID|NUMBER|NO\.?|#))?[\s:#-]+([A-Z0-9][A-Z0-9-]{4,31})\b/i,n_=/\b(?:quote|quotation|quoted|pricing|premium|rate|coverage|insur(?:ance|ed)?|add (?:a |an )?(?:vehicle|car|truck|home|property|boat|yacht|item))\b/i,pd=/\b(?:commercial|business|company|corporate|work(?:\s+use|\s+vehicle)?|fleet|for (?:my|the) business)\b/i,fd=/\b(?:personal|private passenger|household|family|for (?:me|myself|my family)|non-commercial)\b/i;function i_(e){const t=e.replace(/\r\n?/g,`
85`).trim(),r=[/^On .+wrote:\s*$/im,/^From:\s.+$/im,/^-{2,}\s*Original Message\s*-{2,}$/im,/^_{5,}$/m];let n=t.length;return r.forEach(i=>{const a=i.exec(t);(a==null?void 0:a.index)!=null&&(n=Math.min(n,a.index))}),t.slice(0,n).trim()}function a_(e){var r;return(((r=e.match(/^.*?\b\d{5}(?:-\d{4})?\b/))==null?void 0:r[0])??e).replace(/\s+/g," ").replace(/[.,;:\s]+$/,"").trim()}function s_(e,t){return/\b(?:boat|yacht|vessel|watercraft|marine)\b/i.test(e)?"yacht":/\b(?:jewel(?:ry)?|ring|watch|necklace|bracelet|appraisal)\b/i.test(e)?"jewelry":"other"}function gd(e){var m,p,u,f,g;
85const t=i_(e.body),r=[e.subject,t,e.priorQuoteContext].filter(Boolean).join(`
86`);if(!n_.test(r))return null;const n=pd.test(t)||pd.test(e.subject??""),i=fd.test(t)||fd.test(e.subject??""),a=n?"commercial":i?"personal":e.contactLine??"unknown",s=fm(t);if(s)return{line:a,identifierKind:"vin",identifier:s,assetType:"luxury_vehicle"};const o=(p=(m=t.match(t_))==null?void 0:m[1])==null?void 0:p.toUpperCase();if(o)return{line:a,identifierKind:"hin",identifier:o,assetType:"yacht"};const c=(u=t.match(e_))==null?void 0:u[0];if(c)return{line:a,identifierKind:"address",identifier:a_(c),assetType:"coastal_home"};const d=(g=(f=t.match(r_))==null?void 0:f[1])==null?void 0:g.toUpperCase();return d?{line:a,identifierKind:"asset_id",identifier:d,assetType:s_(r)}:null}function yd(e,t){const r=String(t??"").trim();return e==="address"?r.toLowerCase().replace(/[^a-z0-9]/g,""):r.toUpperCase().replace(/[^A-Z0-9]/g,"")}function o_(e,t){return t!=null&&t.trim()?t.trim():{driver_license:"Driver's license",ssn_documentation:"SSN documentation",proof_of_insurance:"Proof of insurance",asset_information:"Asset information",policy_document:"Policy document",declarations_page:"Declarations page",insurance_id_card:"Insurance ID card",policy_booklet:"Policy booklet / forms",endorsement_document:"Endorsement document",deposit_receipt:"Deposit receipt",payment_receipt:"Payment receipt",appraisal:"Appraisal",wind_mitigation:"Wind mitigation",inspection_report:"Inspection report",carrier_appetite_guide:"Carrier appetite guide",carrier_application:"Carrier application form",carrier_supplemental:"Carrier supplemental form",underwriting_manual:"Underwriting manual",claim_document:"Claim document",cancellation_notice:"Cancellation / lapse notice",carrier_correspondence:"Carrier correspondence",agency_template:"Agency template / form",other:"Other"}[e]??u_(e)}function c_(e){var n;const t={},r=(i,a)=>{if(a==null)return;const s=String(a).trim();s&&(t[i]=s)};return r("File name",e.fileName),r("Document type",e.documentName||e.documentTypeLabel),r("Visibility",e.visibilityLabel),r("Status",e.statusLabel),r("Agency",e.agencyName),r("Client name",e.customerName),r("Client email",e.customerEmail),r("Client phone",e.customerPhone),r("Asset",e.assetLabel),r("Asset value",e.assetValue),r("Policy number",e.policyNumber),r("Carrier",e.carrierName),r("Premium",e.premium),r("Effective date",e.effectiveDate),r("Renewal date",e.renewalDate),r("Policy term year",e.termYear),r("Original document",e.originalFileName),r("Line of business",e.lineOfBusiness),(n=e.sourceFiles)!=null&&n.length&&r("Source files reviewed",e.sourceFiles.join(", ")),t}function Ts(e){if(!e)return;const t=d_(l_(e));return Object.keys(t).length>0?t:void 0}function l_(e){return Object.entries(e??{}).map(([t,r])=>({label:t,value:r==null?"":String(r)}))}function d_(e){const t={};return e.forEach((r,n)=>{const i=r.label.trim()||`Field ${n+1}`;let a=i,s=2;for(;Object.prototype.hasOwnProperty.call(t,a);)a=`${i} ${s}`,s+=1;t[a]=r.value==null?"":String(r.value)}),t}function u_(e){return e.replace(/[_-]+/g," ").replace(/\s+/g," ").trim().replace(/\b\w/g,t=>t.toUpperCase())}const hd=e=>({detected:!1,confidence:.18,reason:e,detectedAt:new Date().toISOString()});function ip(e){const t={...e.baseFields??{}},r=[e.fileName,e.type,e.documentName].filter(Boolean).join(" ").toLowerCase(),n=e.fileName.toLowerCase();if(!(/\.(pdf|docx?|png|jpe?g)$/i.test(e.fileName)||/pdf|word|image|document/.test(e.fileType??"")))return{detection:hd("File type is not a form-friendly document."),templateFields:t,templateFieldLayout:[]};const a=m_(r,n);if(!a)return{detection:hd("No fillable field pattern detected. The file will be stored as a static template."),templateFields:t,templateFieldLayout:[]};const s={...t};return a.fields.forEach(o=>{Object.prototype.hasOwnProperty.call(s,o.label)||(s[o.label]="")}),{detection:{detected:!0,confidence:a.confidence,reason:a.reason,detectedAt:new Date().toISOString()},templateFields:s,templateFieldLayout:a.fields}}function m_(e,t){return/\bacord[-_\s]?0?25\b/.test(t)||/certificate[-_\s]+of[-_\s]+liability/.test(e)?{reason:"ACORD 25 / certificate of liability style form detected.",confidence:.94,fields:p_()}:/\bacord[-_\s]?0?27\b/.test(t)||/evidence[-_\s]+of[-_\s]+property/.test(e)?{reason:"ACORD 27 / evidence of property style form detected.",confidence:.92,fields:f_()}:/\bacord[-_\s]?0?(126|127|128|129|131|140|152|611|810|823|1035)\b/.test(t)?{reason:"Commercial ACORD section or supplemental form detected.",confidence:.82,fields:bd()}:/supplemental|supplementary/.test(e)||/carrier_supplemental/.test(e)?{reason:"Carrier supplemental form detected.",confidence:.88,fields:bd()}:/application|app\b|intake|questionnaire/.test(e)||/carrier_application/.test(e)?{reason:"Insurance application or intake form detected.",confidence:.84,fields:g_()}:/checklist|inspection|wind mitigation|wind_mitigation/.test(e)?{reason:"Inspection or checklist form detected.",confidence:.78,fields:y_()}:/form|fillable|blank/.test(e)?{reason:"Generic blank form detected.",confidence:.68,fields:Id()}:/\bacord[-_\s]?0?\d{1,4}\b/.test(t)||/\bacord\b/.test(e)?{reason:"ACORD form detected.",confidence:.72,fields:Id()}:null}function K(e,t,r,n,i,a={}){return{label:e,page:1,x:t,y:r,width:n,height:i,source:"detected",kind:"text",...a}}function p_(){return[K("Agency",8,14,34,4.8,{required:!0}),K("Agency phone",45,14,20,4.8),K("Agency email",67,14,25,4.8),K("Client name",8,23,40,5.4,{required:!0}),K("Client address",50,23,42,5.4,{multiline:!0}),K("Carrier",8,36,30,4.6),K("Policy number",40,36,22,4.6,{required:!0}),K("Effective date",64,36,13,4.6,{kind:"date"}),K("Expiration date",79,36,13,4.6,{kind:"date"}),K("General liability limit",8,49,24,4.2,{kind:"currency"}),K("Automobile liability limit",35,49,24,4.2,{kind:"currency"}),K("Umbrella limit",62,49,24,4.2,{kind:"currency"}),K("Description of operations",8,62,84,13,{multiline:!0}),K("Certificate holder",8,81,54,8.5,{multiline:!0}),K("Authorized representative",65,83,27,6.5)]}function f_(){return[K("Agency",8,14,36,4.8,{required:!0}),K("Client name",8,23,40,5.2,{required:!0}),K("Property address",50,23,42,5.2,{multiline:!0,required:!0}),K("Carrier",8,34,30,4.6),K("Policy number",40,34,24,4.6,{required:!0}),K("Effective date",66,34,12,4.6,{kind:"date"}),K("Expiration date",80,34,12,4.6,{kind:"date"}),K("Coverage amount",8,48,22,4.5,{kind:"currency"}),K("Deductible",32,48,18,4.5,{kind:"currency"}),K("Mortgagee / lienholder",8,69,55,9,{multiline:!0}),K("Loan number",66,69,26,4.8),K("Authorized representative",62,84,30,6)]}function g_(){return[K("Client name",8,13,36,4.8,{required:!0}),K("Business legal name",47,13,45,4.8),K("Mailing address",8,22,40,6,{multiline:!0,required:!0}),K("Risk / property address",52,22,40,6,{multiline:!0}),K("Phone",8,33,22,4.6),K("Email",33,33,30,4.6),K("Requested effective date",66,33,26,4.6,{kind:"date"}),K("Policy number",8,45,25,4.6),K("Carrier",36,45,28,4.6),K("Premium",67,45,25,4.6,{kind:"currency"}),K("Description of operations",8,58,84,12,{multiline:!0}),K("Loss history",8,74,84,9,{multiline:!0}),K("Applicant signature",8,88,36,5),K("Signature date",47,88,18,5,{kind:"date"})]}function bd(){return[K("Business legal name",8,13,44,4.8,{required:!0}),K("FEIN",56,13,24,4.8),K("Primary contact",8,22,34,4.8),K("Contact email",45,22,35,4.8),K("Years in business",8,34,20,4.5,{kind:"number"}),K("Annual revenue",31,34,24,4.5,{kind:"currency"}),K("Annual payroll",58,34,24,4.5,{kind:"currency"}),K("Description of operations",8,47,84,15,{multiline:!0,required:!0}),K("Subcontractor controls",8,66,84,8,{multiline:!0}),K("Prior carrier",8,79,32,4.8),K("Loss history",43,79,49,8,{multiline:!0}),K("Applicant signature",8,91,36,4.5),K("Signature date",47,91,18,4.5,{kind:"date"})]}function y_(){return[K("Client name",8,14,38,5,{required:!0}),K("Property address",49,14,43,6.5,{multiline:!0,required:!0}),K("Inspection date",8,26,20,4.8,{kind:"date"}),K("Inspector / company",31,26,34,4.8),K("Roof year",8,39,15,4.4,{kind:"number"}),K("Electrical updated",26,39,20,4.4),K("Plumbing updated",49,39,20,4.4),K("HVAC updated",72,39,20,4.4),K("Findings / notes",8,54,84,17,{multiline:!0}),K("Recommended repairs",8,76,84,10,{multiline:!0})]}function Id(){return[K("Client name",8,18,40,5,{required:!0}),K("Policy number",52,18,28,5),K("Date",8,30,20,5,{kind:"date"}),K("Details",8,43,84,18,{multiline:!0}),K("Signature",8,80,38,5)]}const h_=["Yes","No","Not sure"],b_=["Flat","Pro rata","Short rate","Other"],I_=["Add","Change","Delete","Cancel","Other"],v_=new Set(["loss_history"]);function W(e,t,r,n,i={}){return{key:e,label:t,kind:r,targetFields:n,required:!0,...i}}const wt=W("certificate_holder","Certificate holder or evidence holder name and mailing address","textarea",["Certificate holder","Evidence holder","Holder name and address"],{assetHints:["certificate holder","holder","evidence holder"]}),On=W("producer_contact","Producer contact, phone, email, and agency customer number","textarea",["Producer","Producer contact","Agency phone","Agency email","Agency customer ID"],{required:!1,assetHints:["producer","agent","agency contact"]}),Se=W("insured_name_address","Named insured legal name and mailing address","textarea",["Insured","Named insured","Applicant name","Mailing address"],{publicHints:["Owner of record"],assetHints:["insured","named insured","mailing address","business legal name"]}),_t=W("policy_term","Policy number, effective date, and expiration date","textarea",["Policy number","Effective date","Expiration date","Policy term"],{assetHints:["policy number","effective date","expiration date"]}),rt=W("coverage_limits","Coverage requested, limits, deductibles, and forms","textarea",["Coverage","Limits","Deductible","Forms and endorsements"],{publicHints:["Underlying policies"],assetHints:["coverage","limits","deductible","underlying policies"]}
86),Ve=W("loss_history","Prior losses or claims in the last 5 years","textarea",["Loss history","Claims history","Prior losses"],{publicHints:["Loss history"],assetHints:["loss history","claims"]}),mr=W("vehicle_schedule","Vehicle year, make, model, VIN, value, and garaging location","textarea",["Vehicle schedule","Year / make / model","VIN","Garaging address","Stated value"],{publicHints:["Year / make / model","VIN-decoded trim","Garaging address","MSRP at sale"],assetHints:["vin","vehicle","garaging"]}),lt=W("property_location","Property location, occupancy, and description","textarea",["Property address","Location","Occupancy","Description of premises"],{publicHints:["Property address","Risk address","Premises address","Location address"],assetHints:["property address","risk address","premises address","location address","occupancy"]}),pr=W("property_values","Building, business personal property, income, and other property values","textarea",["Building value","Business personal property","Business income","Other property values"],{publicHints:["Appraised value","MSRP at sale"],assetHints:["building value","bpp","business personal property","business income"]}),Ot=W("operations","Business operations, products, services, and locations","textarea",["Description of operations","Business operations","Products / services","Locations"],{assetHints:["operations","business description","products","services","locations"]}),Je=W("business_identity","Legal business name, entity type, FEIN, website, and years in business","textarea",["Legal business name","Business legal name","Entity type","FEIN","Website","Years in business"],{publicHints:["Owner of record"],assetHints:["legal business name","entity type","ein","fein","website","years"]}),ot=W("remarks","Remarks, exceptions, special instructions, or overflow details","textarea",["Remarks","Additional remarks","Special instructions"],{required:!1,assetHints:["remarks","notes","special instructions"]}),w_={3:{formNumber:"3",title:"ACORD 3 - Claims / Occurrence Notice",questions:[Se,W("claim_details","Date, time, location, and description of occurrence","textarea",["Date of occurrence","Time of occurrence","Location of occurrence","Description of occurrence"]),W("claim_parties","Injured parties, property damage, witnesses, and contacts","textarea",["Claimant / injured party","Property damage","Witnesses","Contact information"]),W("authority_report","Police, fire, or authority report details","textarea",["Authority contacted","Report number","Responding agency"],{required:!1}),Ve]},4:{formNumber:"4",title:"ACORD 4 - Workers Compensation First Report",questions:[Se,W("employee_injury","Employee name, job title, injury date, and injury description","textarea",["Employee name","Job title","Date of injury","Injury description"]),W("work_status","Work status, medical provider, and lost-time details","textarea",["Work status","Medical provider","Lost time"]),W("wc_policy","Workers compensation policy number, carrier, and employer location","textarea",["WC policy number","Carrier","Employer location"])]},20:{formNumber:"20",title:"ACORD 20 - Certificate / Evidence Form",questions:[wt,On,Se,_t,rt]},21:{formNumber:"21",title:"ACORD 21 - Certificate Form",questions:[wt,Se,_t,rt,ot]},22:{formNumber:"22",title:"ACORD 22 - Certificate Form",questions:[wt,Se,_t,rt,ot]},23:{formNumber:"23",title:"ACORD 23 - Certificate Form",questions:[wt,On,Se,_t,rt]},24:{formNumber:"24",title:"ACORD 24 - Certificate of Property Insurance",questions:[wt,Se,lt,pr,rt]},25:{formNumber:"25",title:"ACORD 25 - Certificate of Liability Insurance",questions:[wt,On,Se,W("liability_coverages","General liability, auto liability, umbrella, and workers comp limits","textarea",["Commercial general liability","Automobile liability","Umbrella liability","Workers compensation"]),W("description_operations","Description of operations, locations, vehicles, or special wording","textarea",["Description of operations","Locations","Vehicles","Special wording"])]},27:{formNumber:"27",title:"ACORD 27 - Evidence of Property Insurance",questions:[wt,On,Se,lt,pr,rt]},28:{formNumber:"28",title:"ACORD 28 - Evidence of Commercial Property Insurance",questions:[wt,lt,pr,W("property_coverage_terms","Causes of loss, c
86oinsurance, valuation, deductibles, and mortgagee details","textarea",["Causes of loss","Coinsurance","Valuation","Deductibles","Mortgagee / lender"])]},30:{formNumber:"30",title:"ACORD 30 - Certificate / Evidence Form",questions:[wt,On,Se,_t,rt]},31:{formNumber:"31",title:"ACORD 31 - Certificate / Evidence Form",questions:[wt,Se,_t,rt,ot]},35:{formNumber:"35",title:"ACORD 35 - Cancellation Request / Policy Release",questions:[Se,W("cancel_policy","Policy number, carrier, line of business, and cancellation date","textarea",["Policy number","Carrier","Line of business","Cancellation date"]),W("cancel_reason","Reason for cancellation or policy release","textarea",["Cancellation reason","Policy release reason"]),W("cancel_method","Cancellation method","select",["Cancellation method"],{options:b_}),W("return_premium","Return premium, finance company, or lienholder instructions","textarea",["Return premium","Finance company","Lienholder instructions"],{required:!1})]},36:{formNumber:"36",title:"ACORD 36 - Agent / Broker of Record Change",questions:[Se,W("current_agent","Current agent or broker information","textarea",["Current agent","Current broker"]),W("new_agent","New agent or broker of record information","textarea",["New agent","New broker of record"]),_t,W("bor_authorization","Authorized signer name, title, and requested effective date","textarea",["Authorized signer","Signer title","Requested effective date"])]},37:{formNumber:"37",title:"ACORD 37 - Statement of No Loss",questions:[Se,_t,W("no_loss_period","No-loss statement period and affected location or vehicle","textarea",["No-loss period","Affected location","Affected vehicle"]),W("no_loss_confirmation","Confirm no known losses, claims, or incidents","select",["No known losses confirmation"],{options:h_})]},45:{formNumber:"45",title:"ACORD 45 - Additional Interest",questions:[Se,W("interest_party","Additional interest name, address, role, and loan or reference number","textarea",["Additional interest name","Additional interest address","Interest type","Loan / reference number"]),lt,mr,ot]},50:{formNumber:"50",title:"ACORD 50 - Auto ID Card",questions:[Se,mr,W("auto_policy","Auto carrier, policy number, effective date, and expiration date","textarea",["Auto carrier","Auto policy number","Effective date","Expiration date"]),W("naic_code","NAIC code and agency contact for the ID card","text",["NAIC code","Agency contact"],{required:!1})]},63:{formNumber:"63",title:"ACORD 63 - Fraud Statement",questions:[Se,W("fraud_state","State-specific fraud statement jurisdiction","text",["Fraud statement state"],{assetHints:["state"]}),W("acknowledgement","Applicant acknowledgement, signer name, title, and date","textarea",["Applicant acknowledgement","Signer name","Signer title","Signature date"]),ot]},70:{formNumber:"70",title:"ACORD 70 - Personal Policy Change Request",questions:[Se,_t,W("personal_change","Personal policy change requested","select",["Change type"],{options:I_}),W("personal_change_details","Effective date, affected coverage, and change details","textarea",["Effective date","Affected coverage","Change details"]),ot]},71:{formNumber:"71",title:"ACORD 71 - Personal Auto Policy Change Request",questions:[Se,_t,mr,W("driver_change","Driver add, remove, license, date of birth, and usage details","textarea",["Driver change","License number","Date of birth","Vehicle usage"]),W("auto_change","Coverage, lienholder, or garaging change requested","textarea",["Coverage change","Lienholder change","Garaging change"])]},75:{formNumber:"75",title:"ACORD 75 - Insurance Binder",questions:[Se,W("binder_term","Binder number, carrier, effective date, expiration date, and time","textarea",["Binder number","Carrier","Effective date","Expiration date","Time"]),rt,lt,W("binder_conditions","Binder conditions, mortgagee, additional interest, and cancellation notice","textarea",["Binder conditions","Mortgagee","Additional interest","Cancellation notice"])]},80:{formNumber:"80",title:"ACORD 80 - Homeowner Application",questions:[Se,lt,W("home_construction","Year built, square footage, construction, roof, protection, and occupancy","textarea",["Year built","Square footage","Construction type","Roof","Protection class","Occupancy"],{publicHints:["Year built","Square footage","Construction type","Roof material"]}),pr,Ve]},83:{formNumber:"83",title:"ACORD 83 - Personal Umbrella Application",questions:[Se,W("umbrella_limit","Umbrella limit requested and underlying policy schedule","textarea",["Umbrella limit","Underlying policy schedule"],{publicHints:["Underlying policies"]}
86),W("household_exposures","Household drivers, residences, watercraft, recreational vehicles, and employees","textarea",["Household drivers","Residences","Watercraft","Recreational vehicles","Employees"]),W("personal_liability_exposures","Boards, public profile, animals, pools, rentals, or other liability exposures","textarea",["Boards","Public profile","Animals","Pools","Rental exposures"]),Ve]},84:{formNumber:"84",title:"ACORD 84 - Dwelling Fire Application",questions:[Se,lt,W("dwelling_details","Dwelling use, occupancy, protection, construction, roof, and updates","textarea",["Dwelling use","Occupancy","Protection","Construction","Roof","Updates"],{publicHints:["Year built","Construction type","Roof material"]}),pr,Ve]},101:{formNumber:"101",title:"ACORD 101 - Additional Remarks Schedule",questions:[Se,W("related_form","Related ACORD form number, policy, carrier, and page reference","textarea",["Related ACORD form","Policy number","Carrier","Page reference"]),ot,W("remark_author","Remark author, date, and agency contact","textarea",["Remark author","Remark date","Agency contact"],{required:!1})]},125:{formNumber:"125",title:"ACORD 125 - Commercial Insurance Application",questions:[Je,Se,W("contact_information","Primary contact, phone, email, and mailing address","textarea",["Primary contact","Phone","Email","Mailing address"]),Ot,W("commercial_exposures","Annual revenue, payroll, employee count, locations, and operating states","textarea",["Annual revenue","Payroll","Employee count","Locations","Operating states"]),Ve]},126:{formNumber:"126",title:"ACORD 126 - Commercial General Liability Section",questions:[Je,W("gl_classification","Premises operations classification, class code, exposure basis, and rates","textarea",["GL classification","Class code","Exposure basis","Rates"]),W("products_completed_ops","Products and completed operations description","textarea",["Products","Completed operations"]),W("subcontractor_controls","Subcontracted work, certificates, additional insureds, and hold harmless controls","textarea",["Subcontracted work","Certificates","Additional insureds","Hold harmless"]),Ve]},127:{formNumber:"127",title:"ACORD 127 - Business Auto Section",questions:[Je,mr,W("driver_schedule","Driver names, dates of birth, license numbers, and MVR concerns","textarea",["Driver schedule","Date of birth","License number","MVR concerns"]),W("auto_exposures","Vehicle use, radius, hired auto, non-owned auto, and filings","textarea",["Vehicle use","Radius","Hired auto","Non-owned auto","Filings"]),Ve]},128:{formNumber:"128",title:"ACORD 128 - Garage and Dealers Section",questions:[Je,W("garage_operations","Garage, dealer, service, repair, storage, and towing operations","textarea",["Garage operations","Dealer operations","Service / repair","Storage","Towing"]),W("dealer_exposures","Dealer plates, demos, loaners, non-owned autos, and garagekeepers exposure","textarea",["Dealer plates","Demos","Loaners","Non-owned autos","Garagekeepers"]),lt,Ve]},129:{formNumber:"129",title:"ACORD 129 - Vehicle Schedule",questions:[Je,mr,W("vehicle_use","Vehicle use, radius, territory, garaging, and ownership or lease status","textarea",["Vehicle use","Radius","Territory","Garaging","Ownership / lease"]),W("vehicle_interest","Lienholder, lessor, loss payee, and additional interest details","textarea",["Lienholder","Lessor","Loss payee","Additional interest"],{required:!1})]},131:{formNumber:"131",title:"ACORD 131 - Umbrella / Excess Section",questions:[Je,W("umbrella_limit_commercial","Umbrella or excess limit requested, retention, and policy type","textarea",["Umbrella / excess limit","Retention","Policy type"]),W("underlying_schedule","Underlying general liability, auto, employers liability, and other policies","textarea",["Underlying general liability","Underlying auto","Employers liability","Other underlying policies"],{publicHints:["Underlying policies"]}),Ot,Ve]},140:{formNumber:"140",title:"ACORD 140 - Property Section",questions:[Je,lt,W("building_details","Building number, year built, construction, occupancy, protection, roof, and updates","textarea",["Building number","Year built","Construction","Occupancy","Protection","Roof","Updates"],{publicHints:["Year built","Construction type","Roof material","Square footage"]}),pr,W("property_safeguards","Protective safeguards, alarms, sprinklers, distance to hydrant, and exposure details","textarea",["Protective safeguards","Alarms","Sprinklers","Distance to hydrant","Exposure details"],{publicHints:["Distance to coast"]}),Ve]},"140-filled":{formNumber:"140 Filled",title:"ACORD 140 - Property Section Filled Sample",questions:[Je,lt,pr,ot]},152:{formNumber:"152",title:"ACORD 152 - Commercial Inland Marine Section",questions:[Je,W("scheduled_property","Scheduled property, equipment, tools, fine arts, or installation floater items","textarea",["Scheduled property","Equipment","Tools","Fine arts","Installation floater"],{publicHints:["Item type","Appraised value"]}),W("im_values_limits","Values, limits, deductibles, valuation, and coinsurance","textarea",["Values","Limits","Deductibles","Valuation","Coinsurance"]),W("transit_storage","Transit, jobsite, storage, and off-premises exposure","textarea",["Transit exposure","Jobsite exposure","Storage","Off-premises exposure"]),Ve]},611:{formNumber:"611",title:"ACORD 611 - Supplemental ACORD Form",questions:[Je,Ot,rt,Ve,ot]},810:{formNumber:"810",title:"ACORD 810 - Supplemental ACORD Form",questions:[Je,W("supplemental_locations","Supplemental locations, exposures, schedule rows, and payroll or sales basis","textarea",["Supplemental locations","Exposure schedule","Payroll basis","Sales basis"]),rt,Ve,ot]},823:{formNumber:"823",title:"ACORD 823 - Supplemental ACORD Form",questions:[Je,Ot,W("supplemental_controls","Risk controls, safeguards, inspections, contracts, and certificates","textarea",["Risk controls","S
86afeguards","Inspections","Contracts","Certificates"]),Ve,ot]},1035:{formNumber:"1035",title:"ACORD 1035 - Supplemental ACORD Form",questions:[Je,Ot,W("professional_services","Professional services, advisory work, revenue split, and contractual requirements","textarea",["Professional services","Advisory work","Revenue split","Contractual requirements"]),Ve,ot]},"packet-1":{formNumber:"Packet 1",title:"Downloaded ACORD Packet",questions:[Je,Ot,rt,lt,mr,Ve]},"packet-2":{formNumber:"Packet 2",title:"Downloaded ACORD Packet Copy",questions:[Je,Ot,rt,lt,mr,Ve]},"untitled-11":{formNumber:"Untitled 11",title:"Imported ACORD PDF Packet",questions:[Je,Se,Ot,rt,lt,Ve,ot]}},__={formNumber:"Form",title:"ACORD Form",questions:[Se,Ot,rt,Ve,ot]};function ap(e){const t=`${e.fileName??""} ${e.documentName??""}`,r=t.toLowerCase();if(r.includes("140-filled")||r.includes("140 - property section - filled"))return"140-filled";if(r.includes("exercise-download-files-1")||r.includes("packet copy"))return"packet-2";if(r.includes("exercise-download-files")||r.includes("downloaded acord packet"))return"packet-1";if(r.includes("untitled-document-11")||r.includes("imported pdf packet"))return"untitled-11";const n=t.match(/\bACORD[-_\s]?0?(\d{1,4})\b/i)??t.match(/\bacord_?0?(\d{1,4})\b/i);return n?String(Number(n[1])):"Form"}function _n(e){return w_[ap(e)]??__}function A_(e){return _n(e).questions.length}function C_(e,t){const r=_n(e);return r.questions.flatMap(n=>{const i=op(n,t),a=cp(n,i),s=Lc(n);if(!s&&a&&i.missingTargets.length===0)return[];const o=!s&&a&&i.knownTargets.length>0&&i.missingTargets.length>0;return[{id:Dc(e,n),section:`${r.title} - ACORD fields`,label:`ACORD ${r.formNumber}: ${o?Do(i.missingTargets):n.label}`,kind:n.kind,options:n.options,required:n.required,round:"initial",sourceDocumentId:e.templateId,sourceDocumentFileName:e.fileName,acordFormNumber:r.formNumber,acordFieldKey:n.key,acordFieldLabels:o?i.missingTargets:n.targetFields}]})}function S_(e,t){const r=_n(e),n={"ACORD form number":`ACORD ${r.formNumber}`,"Form name":r.title},i=[],a=[];return r.questions.forEach(s=>{const o=op(s,t);o.knownTargets.forEach(({targetField:p,value:u})=>{n[p]=u,i.push({sourceLabel:`ACORD ${r.formNumber}: ${p}`,targetField:p,value:u,source:"system"})});const c=sp(e,s,t);if(!c){s.required&&vd(s,o)&&a.push(`ACORD ${r.formNumber}: ${Do(o.missingTargets)}`);return}const d=c.source==="questionnaire"&&cp(s,o)?o.missingTargets:s.targetFields,m=R_(s,c.value,c.source,d);if(m.length===0){s.required&&vd(s,o)&&a.push(`ACORD ${r.formNumber}: ${Do(o.missingTargets)}`);return}m.forEach(({targetField:p,value:u})=>{n[p]=u,i.push({sourceQuestionId:c.source==="questionnaire"?Dc(e,s):void 0,sourceLabel:`ACORD ${r.formNumber}: ${s.label}`,targetField:p,value:u,source:c.source})})}),{fields:n,mappings:i,missingFieldLabels:a}}function T_(e,t){return _n(e).questions.filter(n=>sp(e,n,t)).length}function Dc(e,t){return`acord-${e.templateId}-${M_(t.key)}`}function sp(e,t,r){var c,d;const n=(d=(c=r.responses)==null?void 0:c[Dc(e,t)])==null?void 0:d.trim();if(n)return{value:n,source:"questionnaire"};const i=gi(r.assetDetails,[t.key,t.label,...t.assetHints??[]]);if(i&&fi(t,i.key,i.value)&&yi(r.publicFieldEvidence,i.key,"asset_detail"))return{value:i.value,source:"asset_detail"};const a=gi(r.publicFields,[t.key,t.label,...t.publicHints??[]]);if(a&&fi(t,a.key,a.value)&&yi(r.publicFieldEvidence,a.key,"public_record"))return{value:a.value,source:"public_record"};const s=sa(r.knownFields,[t.key,t.label,...t.targetFields,...t.assetHints??[],...t.publicHints??[]]);if(s)return{value:s,source:"system"};const o=t.key.toLowerCase();return r.contactName&&D_(t,o)?{value:r.contactName,source:"contact"}:r.agencyName&&L_(t,o)?{value:r.agencyName,source:"system"}:r.state&&(o.includes("state")||o.includes("fraud"))?{value:r.state,source:"system"}:typeof r.estimatedValue=="number"&&r.estimatedValue>0&&(o.includes("value")||o.includes("limit")||o.includes("coverage"))?{value:`$${Math.round(r.estimatedValue).toLocaleString()}`,source:"system"}:null}function k_(e){return e.key==="property_location"?e.targetFields.filter(t=>{const r=It(t);return st(t)==="property_address"||r==="location"}):O_(e.targetFields)?e.targetFields:[]}function R_(e,t,r,n){const i=n??e.targetFields,a=i===e.targetFields?e:{...e,targetFields:i},s=k_(a);if(s.length>0){const c=s.map(d=>({targetField:d,value:Ad(t,d)})).filter(d=>!!d.value);return c.length>0?c:r==="questionnaire"?s.length===1?[{targetField:s[0],value:t}]:[]:s.map(d=>({targetField:d,value:t}))}const o=i.map(c=>({targetField:c,value:Ad(t,c)})).filter(c=>!!c.value);if(o.length>0)return o;if(r==="questionnaire"){const c=i.find(d=>st(d)!=="generic")??i[0];return c?[{targetField:c,value:t}]:[]}return[]}function op(e,t){const r=e.targetFields.filter(a=>st(a)!=="generic"),n=[],i=[];return r.forEach(a=>{const s=x_(e,a,t,{strictForSuppression:!0});s?n.push({targetField:a,value:s}):i.push(a)}),{knownTargets:n,missingTargets:i,nonGenericTargets:r}}function cp(e,t){return!Lc(e)&&t.nonGenericTargets.length>0}function Lc(e){return v_.has(e.key)}function vd(e,t){return Lc(e)||t.nonGenericTargets.length===0?!0:t.missingTargets.length>0}function Do(e){return e.length===0?"Remaining applicant details":E_(e)}function E_(e){const t=Array.from(new Set(e.map(r=>
86r.trim()).filter(Boolean)));return t.length<=1?t[0]??"":t.length===2?`${t[0]} and ${t[1]}`:`${t.slice(0,-1).join(", ")}, and ${t[t.length-1]}`}function x_(e,t,r,n={}){if(n.strictForSuppression){const c=ks(r.knownFields,e,t);if(c)return c;const d=ks(r.assetDetails,e,t,"asset_detail",r);if(d)return d;const m=ks(r.publicFields,e,t,"public_record",r);if(m)return m;switch(st(t)){case"insured_name":return Lo(r.contactName);case"agency_name":return Lo(r.agencyName);default:return null}}const i=N_(t),a=sa(r.knownFields,[t]);if(a)return a;const s=gi(r.assetDetails,i);if(s&&fi(e,s.key,s.value)&&yi(r.publicFieldEvidence,s.key,"asset_detail"))return s.value;const o=gi(r.publicFields,i);if(o&&fi(e,o.key,o.value)&&yi(r.publicFieldEvidence,o.key,"public_record"))return o.value;switch(st(t)){case"insured_name":return r.contactName??null;case"agency_name":return r.agencyName??null;case"property_address":return sa(r.assetDetails,[t,"Property address","Risk address","Premises address"])??sa(r.publicFields,[t,"Property address","Risk address","Premises address"]);case"coverage":return typeof r.estimatedValue=="number"&&r.estimatedValue>0?String(r.estimatedValue):null;default:return null}}function ks(e,t,r,n,i){if(!e)return null;const a=Object.entries(e).map(([m,p])=>({key:m,value:Lo(p)})).filter(m=>!!m.value);if(a.length===0)return null;const s=It(r),o=st(r),c=a.find(m=>It(m.key)===s);if(c&&wd(t,r,c,n,i))return c.value;if(o==="generic")return null;const d=a.find(m=>st(m.key)===o);return d&&wd(t,r,d,n,i)?d.value:null}function wd(e,t,r,n,i){return!fi(e,r.key,r.value)||!P_(r.value,t)?!1:!n||!i?!0:yi(i.publicFieldEvidence,r.key,n)}function Lo(e){const t=lp(e);return!t||/^commercial applicant$/i.test(t)||/\b(unknown|not public|not publicly|not found|not listed|no public|n\/a|not available|unconfirmed|requires|needed|needs verification|verify)\b/i.test(t)?null:t}function P_(e,t){const r=st(t);return!((r==="insured_name"||r==="agency_name")&&(/@/.test(e)||_d(e))||r.includes("email")&&!/@/.test(e)||r.includes("phone")&&!/[0-9]{7,}/.test(e.replace(/\D/g,""))||r.includes("address")&&!_d(e))}function _d(e){return/\d/.test(e)&&/\b(st|street|rd|road|ave|avenue|dr|drive|ln|lane|blvd|boulevard|ct|court|cir|circle|way|pkwy|parkway|hwy|highway|pl|place|terrace|ter|trail|mi|fl|ga|sc|ny|ca|tx|il|oh|pa|zip)\b/i.test(e)}function N_(e){const t=st(e),r=[e];return t==="insured_name"?[...r,"Named insured","Applicant name","Legal business name"]:t==="insured_mailing_address"?[...r,"Mailing address"]:t==="property_address"?[...r,"Property address","Risk address","Premises address","Location address"]:t==="agency_name"?[...r,"Producer","Agency","Agency name"]:t==="agency_phone"||t==="insured_phone"?[...r,"Phone","Primary phone"]:t==="agency_email"||t==="insured_email"?[...r,"Email","Primary email"]:t==="fein"?[...r,"FEIN","EIN","Federal EIN","Tax ID"]:t==="entity_type"?[...r,"Entity type","Business entity type"]:t==="business_website"?[...r,"Website","Business website"]:t==="years_in_business"?[...r,"Years in business","Year established"]:t==="industry_code"?[...r,"Primary industry","NAICS","SIC"]:t==="operations"?[...r,"Business operations","Description of operations","Products / services"]:t==="revenue"?[...r,"Annual revenue","Revenue"]:t==="payroll"?[...r,"Payroll"]:t==="loss_history"?[...r,"Loss history","Claims","Losses"]:r}function Ad(e,t){const r=q_(e);if(r.length===0)return"";const n=It(t),i=r.find(({label:o})=>{const c=It(o);return c===n||n.includes(c)||c.includes(n)});if(i)return i.value;const a=st(t);if(a==="generic")return"";const s=r.find(({label:o})=>st(o)===a);return(s==null?void 0:s.value)??""}function q_(e){return e.split(/\r?\n|;\s+/).map(t=>t.trim()).map(t=>t.match(/^([^:]{2,90}):\s*(.+)$/)).filter(t=>!!(t!=null&&t[1])&&!!(t!=null&&t[2])).map(t=>({label:t[1].trim(),value:t[2].trim()})).filter(t=>!!t.label&&!!t.value)}function O_(e){if(e.length<=1)return!0;const t=e.map(st);return t.includes("generic")?!1:new Set(t).size===1}function D_(e,t){if(!(t.includes("insured")||t.includes("identity")||t.includes("business")))return!1;const r=new Set(e.targetFields.map(st));return r.size===1&&r.has("insured_name")}function L_(e,t){if(!t.includes("producer"))return!1;const r=new Set(e.targetFields.map(st));return r.size===1&&r.has("agency_name")}function st(e){const t=It(e);return t.includes("fax")?t.includes("agency")||t.includes("producer")?"agency_fax":"insured_fax":t.includes("email")?t.includes("agency")||t.includes("producer")?"agency_email":"insured_email":t.includes("phone")?t.includes("agency")||t.includes("producer")?"agency_phone":"insured_phone":t.includes("website")?t.includes("agency")||t.includes("producer")?"agency_website":"business_website":t.includes("address")?t.includes("agency")||t.includes("producer")?"agency_address":t.includes("property")||t.includes("risk")||t.includes("premises")||t.includes("location")?"property_address":"insured_mailing_address":t.includes("customer")||t.includes("account number")?"agency_customer_id":t.includes("fein")||t.includes("tax")||t.includes("ein")?"fein":t.includes("policy")&&(t.includes("number")||t.includes("no"))?"policy_number":t.includes("effective")?"effective_date":t.includes("expiration")?"expiration_date":t.includes("premium")?"premium":t.includes("revenue")?"revenue":t.includes("payroll")?"payroll":t.includes("deductible")?"deductible":t.includes("coverage")||t.includes("limit")?"coverage":t.includes("entity")?"entity_type":t.includes("year")&&(t.includes("business")||t.includes("established"))?"years_in_business":t.includes("naics")||t.includes("sic")||t.includes("industry")?"industry_code":t.includes("loss")||t.includes("claim")?"loss_history":t.includes("operation")||t.includes("product")||t.includes("service")?"operations":t.includes("remark")||t.includes("instruction")?"remarks":t.includes("agency")||t.includes("producer")?"agency_name":t==="insured"||t.includes("insured")||t.includes("applicant")||t.includes("legal business")||t.includes("business legal")||t.includes("client name")?"insured_name":"generic"}
86function fi(e,t,r){const n=It(t),i=new Set(e.targetFields.map(st)),a=/\d/.test(r)&&/\b(st|street|rd|road|ave|avenue|dr|drive|ln|lane|blvd|boulevard|ct|court|cir|circle|way|pkwy|parkway|hwy|highway|pl|place|terrace|ter|trail|trl|mi|fl|ga|sc|ny|ca|tx|il|oh|pa|zip)\b/i.test(r);return e.key==="property_location"||i.has("property_address")?n.includes("owner")||n.includes("insured")||n.includes("applicant")||n.includes("name")?!1:a:i.has("insured_name")?!(n.includes("property address")||n.includes("risk address")||n.includes("premises address")):!0}function sa(e,t){var r;return((r=gi(e,t))==null?void 0:r.value)??null}function gi(e,t){if(!e)return null;const r=Object.entries(e).map(([i,a])=>[i,lp(a)]).filter(([,i])=>!!i);if(r.length===0)return null;const n=t.map(It).filter(Boolean);for(const i of n){const a=r.find(([s])=>It(s)===i);if(a)return{key:a[0],value:a[1]}}for(const i of n){const a=r.find(([s])=>{const o=It(s);return o.includes(i)||i.includes(o)});if(a)return{key:a[0],value:a[1]}}return null}function yi(e,t,r){const n=Ie(e,t);return n?Er(n):r!=="public_record"}function lp(e){return e==null?"":typeof e=="string"?e.trim():typeof e=="number"?Number.isFinite(e)?String(e):"":typeof e=="boolean"?e?"Yes":"No":String(e).trim()}function It(e){return e.toLowerCase().replace(/[^a-z0-9]+/g," ").trim()}function M_(e){return It(e).replace(/\s+/g,"-")||"field"}const dp=new Set(["ACORD form number","Form name","Line / category","Typical use","Source file","Bundled PDF","Agency action","Source ACORD template ID","Source ACORD file","Source ACORD layout fields","Completed packet type","Completed by","Completed field count","Missing field count","Missing fields","AI dossier source count","AI candidate field count","AI fitted PDF field count","AI overflow field count","AI sources used","AI source field counts","ACORD PDF fill status","Last filled at"]);function Mc(e){var y,h,w,T;const t=$_(e.dossier),r=Sd(t),n=Sd(t.filter(b=>b.source!=="questionnaire")),i=S_(e.template,{contactName:(y=e.dossier.contact)==null?void 0:y.name,agencyName:(h=e.dossier.agency)==null?void 0:h.name,estimatedValue:e.dossier.session.estimatedValue,state:e.dossier.session.state,publicFields:e.dossier.session.publicFields,publicFieldEvidence:e.dossier.session.publicFieldEvidence,assetDetails:e.dossier.session.assetDetails,responses:e.dossier.responses,knownFields:{...kd((w=e.dossier.templateDocument)==null?void 0:w.templateFields),...n}}),a=H_(i.fields,e.dossier),s=i.mappings.filter(b=>gp(b.targetField,b.source,e.dossier)),o={...kd((T=e.dossier.templateDocument)==null?void 0:T.templateFields),...a,...r},c=[...s],d=[];let m=0;const p=e.layout??[];p.forEach(b=>{const _=F_(b.label,t);if(!_)return;const A=J_(_.value,b);o[b.label]=A.value,A.overflow&&d.push(`${b.label}: ${A.overflow}`),m+=1,c.push({sourceLabel:_.label,targetField:b.label,value:A.value,source:_.source})});const u=X_(p,o,i.missingFieldLabels),f=eA(c),g=f.reduce((b,_)=>(b[_.source]+=1,b),{questionnaire:0,public_record:0,asset_detail:0,contact:0,system:0});return{fields:o,mappings:f,missingFieldLabels:u,audit:{sourceCount:e.dossier.assets.length+e.dossier.policies.length+e.dossier.claims.length+e.dossier.documents.length+e.dossier.notes.length+e.dossier.communications.length+4,candidateCount:t.length,fittedFieldCount:m,overflowFieldCount:d.length,sourcesUsed:Array.from(new Set(f.map(b=>b.source))),sourceFieldCounts:g}}}function $_(e){var p,u,f,g,y,h,w,T,b,_,A;const t=[],r=(v,S,C,k=.7,O)=>{const x=Mo(S);x&&t.push({label:v,value:x,source:C,confidence:k,kind:O??hi(v,C)})},n=e.contact,i=n&&"userId"in n?n:void 0,a=(i==null?void 0:i.clientCode)??(i==null?void 0:i.id),s=i==null?void 0:i.mailingAddress,o=i==null?void 0:i.garagingAddress,c=(i==null?void 0:i.businessName)??(n==null?void 0:n.name),d=[c,s].filter(Boolean).join(`
87`);r("Agency",(p=e.agency)==null?void 0:p.name,"system",.98,"agency_name"),r("Agency name",(u=e.agency)==null?void 0:u.name,"system",.98,"agency_name"),r("Producer",(f=e.agency)==null?void 0:f.name,"system",.98,"agency_name"),r("Producer name",(g=e.agency)==null?void 0:g.name,"system",.98,"agency_name"),r("Agency address",(y=e.agency)==null?void 0:y.address,"system",.96,"agency_address"),r("Producer address",(h=e.agency)==null?void 0:h.address,"system",.96,"agency_address"),r("Agency phone",(w=e.agency)==null?void 0:w.phone,"system",.96,"agency_phone"),r("Producer phone",(T=e.agency)==null?void 0:T.phone,"system",.96,"agency_phone"),r("Agency email",(b=e.agency)==null?void 0:b.contactEmail,"system",.96,"agency_email"),r("Producer email",(_=e.agency)==null?void 0:_.contactEmail,"system",.96,"agency_email"),r("Agency website",(A=e.agency)==null?void 0:A.website,"system",.92,"agency_website"),r("Applicant name",n==null?void 0:n.name,"contact",.96,"insured_name"),r("Client name",n==null?void 0:n.name,"contact",.96,"insured_name"),r("Applicant name and mailing address",d,"contact",.96,"insured_name_address"),r("Named insured",c,"contact",.96,"insured_name"),r("Name insured",c,"contact",.96,"insured_name"),r("Insured",c,"contact",.96,"insured_name"),r("Insured name",c,"contact",.96,"insured_name"),r("First named insured",c,"contact",.95,"insured_name"),r("Named insured and mailing address",d,"contact",.95,"insured_name_address"),r("Insured name and address",d,"contact",.95,"insured_name_address"),r("Business legal name",c,"contact",.95,"insured_name"),r("Legal business name",c,"contact",.95,"insured_name"),r("Agency customer ID",a,"contact",.86,"agency_customer_id"),r("Customer number",a,"contact",.86,"agency_customer_id"),r("Primary contact",n==null?void 0:n.name,"contact",.92,"
87insured_name"),r("Phone",n==null?void 0:n.phone,"contact",.92,"insured_phone"),r("Applicant phone",n==null?void 0:n.phone,"contact",.92,"insured_phone"),r("Insured phone",n==null?void 0:n.phone,"contact",.92,"insured_phone"),r("Email",n==null?void 0:n.email,"contact",.92,"insured_email"),r("Contact email",n==null?void 0:n.email,"contact",.92,"insured_email"),r("Applicant email",n==null?void 0:n.email,"contact",.92,"insured_email"),r("Insured email",n==null?void 0:n.email,"contact",.92,"insured_email"),r("Mailing address",s,"contact",.9,"insured_mailing_address"),r("Insured mailing address",s,"contact",.9,"insured_mailing_address"),r("Client address",s,"contact",.9,"insured_mailing_address"),r("Garaging address",o,"contact",.88,"property_address"),r("Description of operations",i==null?void 0:i.operationsDescription,"contact",.88,"operations"),r("Business operations",i==null?void 0:i.operationsDescription,"contact",.88,"operations"),Object.entries(e.session.publicFields??{}).forEach(([v,S])=>{Cd(v,e.session.publicFieldEvidence,"public_record")&&r(v,S,"public_record",.84)}),Object.entries(e.session.assetDetails??{}).forEach(([v,S])=>{Cd(v,e.session.publicFieldEvidence,"asset_detail")&&r(v,S,"asset_detail",.88)}),e.questions.forEach(v=>{const S=e.responses[v.id];if(!S)return;const C=v.acordFieldLabels??[];C.length<=1?(r(v.label,S,"questionnaire",.96),C.forEach(k=>r(k,S,"questionnaire",.98))):G_(C)&&!yp(S)?Td(S,C).forEach(({fieldLabel:O,fieldValue:x})=>r(O,x,"questionnaire",.98)):Td(S,C).forEach(({fieldLabel:O,fieldValue:x})=>r(O,x,"questionnaire",.98))}),r("Estimated exposure value",At(e.session.estimatedValue),"system",.76),r("State",e.session.state,"system",.85),e.assets.forEach(v=>{const S=v.details.address??v.details.propertyAddress??v.details.riskAddress??v.details.location;r("Asset name",v.label,"asset_detail",.82,"property_detail"),r("Location",S,"asset_detail",.86,"property_address"),r("Premises address",S,"asset_detail",.86,"property_address"),r("Premises",S,"asset_detail",.82,"property_address"),r("Risk address",S,"asset_detail",.86,"property_address"),r("Stated value",At(v.estimatedValue),"asset_detail",.82,"premium"),r("Property address",S,"asset_detail",.86,"property_address"),r("Risk / property address",S,"asset_detail",.86,"property_address"),Object.entries(v.details).forEach(([C,k])=>r(C,k,"asset_detail",.82))}),e.policies.forEach(v=>{var k,O,x,$;const S=e.carriers.find(q=>q.id===v.carrierId),C=[v.policyNumber?`Policy #${v.policyNumber}`:void 0,v.effectiveDate?`Effective ${St(v.effectiveDate)}`:void 0,v.renewalDate?`Expires ${St(v.renewalDate)}`:void 0].filter(Boolean).join("; ");r("Carrier",S==null?void 0:S.name,"system",.82,"carrier_name"),r("Insurance carrier",S==null?void 0:S.name,"system",.82,"carrier_name"),r("Company",S==null?void 0:S.name,"system",.78,"carrier_name"),r("Prior carrier",S==null?void 0:S.name,"system",.78,"carrier_name"),r("Policy number",v.policyNumber,"system",.9,"policy_number"),r("Policy no",v.policyNumber,"system",.9,"policy_number"),r("Policy #",v.policyNumber,"system",.9,"policy_number"),r("Current policy number",v.policyNumber,"system",.88,"policy_number"),r("Expiring policy number",v.policyNumber,"system",.86,"policy_number"),r("Effective date",St(v.effectiveDate),"system",.86,"effective_date"),r("Policy effective date",St(v.effectiveDate),"system",.86,"effective_date"),r("Eff date",St(v.effectiveDate),"system",.84,"effective_date"),r("Expiration date",St(v.renewalDate),"system",.86,"expiration_date"),r("Policy expiration date",St(v.renewalDate),"system",.86,"expiration_date"),r("Exp date",St(v.renewalDate),"system",.84,"expiration_date"),r("Policy term",C,"system",.84,"policy_term"),r("Premium",v.finalPremium||v.premiumEstimate?At(v.finalPremium??v.premiumEstimate??0):void 0,"system",.8,"premium"),(k=v.coverages)==null||k.forEach(q=>{r(q.name,q.limit?At(q.limit):q.description,"system",.78,"coverage"),/general liability/i.test(q.name)&&r("General liability limit",q.limit?At(q.limit):void 0,"system",.82,"coverage"),/auto/i.test(q.name)&&r("Automobile liability limit",q.limit?At(q.limit):void 0,"system",.82,"coverage"),/umbrella/i.test(q.name)&&r("Umbrella limit",q.limit?At(q.limit):void 0,"system",.82,"coverage"),/property|building/i.test(q.name)&&r("Coverage amount",q.limit?At(q.limit):void 0,"system",.8,"coverage"),q.deductible&&r("Deductible",At(q.deductible),"system",.8,"deductible")}),(O=v.participants)==null||O.forEach(q=>{q.participantType==="driver"&&r("Driver schedule",Rd(q),"system",.74),q.participantType==="operations_contact"&&r("Primary contact",Rd(q),"system",.76)}),(x=v.additionalInsureds)==null||x.forEach(q=>{q.holderType==="certificate_holder"&&r("Certificate holder",Di(q),"system",.82),(q.holderType==="mortgagee"||q.holderType==="lienholder")&&r("Mortgagee / lienholder",Di(q),"system",.82),r("Additional interest name",Di(q),"system",.72)}),($=v.beneficiaries)==null||$.forEach(q=>r("Beneficiary",Di(q),"system",.68))});const m=e.claims.map(v=>{const S=e.carriers.find(C=>C.id===v.carrierId);return[St(v.openedAt),S==null?void 0:S.name,v.externalClaimNumber,v.lossDescription,v.lossAmountUsd?At(v.lossAmountUsd):void 0,v.status].filter(
87Boolean).join(" - ")}).filter(Boolean).join("; ");return m&&(r("Loss history",m,"system",.86,"loss_history"),r("Claims history",m,"system",.86,"loss_history"),r("Prior losses",m,"system",.86,"loss_history")),t.sort((v,S)=>S.confidence-v.confidence)}function Cd(e,t,r){const n=Ie(t,e);return n?Er(n):r!=="public_record"}function F_(e,t){const r=We(e),n=t.filter(c=>j_(e,c));if(Va(e))return n.find(c=>fp(e,c))??null;const i=n.find(c=>We(c.label)===r);if(i)return i;const a=up(e).map(We),s=n.find(c=>a.includes(We(c.label)));return s||(U_(r)||!Y_(r)?null:n.find(c=>{const d=We(c.label);return d.includes(r)||r.includes(d)})??null)}function Sd(e){const t={},r=(n,i)=>{t[n]||(t[n]=i)};return e.forEach(n=>{if(!Q_(n))return;const i=n.value;switch(n.kind){case"agency_name":r(n.label,i),r("Agency",i),r("Agency name",i),r("Producer",i),r("Producer name",i);break;case"agency_address":r(n.label,i),r("Agency address",i),r("Producer address",i);break;case"agency_phone":r(n.label,i),r("Agency phone",i),r("Producer phone",i);break;case"agency_email":r(n.label,i),r("Agency email",i),r("Producer email",i);break;case"agency_website":r(n.label,i),r("Agency website",i),r("Producer website",i);break;case"agency_customer_id":r(n.label,i),r("Agency customer ID",i),r("Customer number",i);break;case"agency_contact_name":r(n.label,i),r("Producer contact",i),r("Producer contact name",i),r("Agency contact",i);break;case"insured_name":r(n.label,i),B_(n.label)?(r("Applicant name",i),r("Client name",i)):(r("Named insured",i),r("Insured",i),r("Business legal name",i),r("Legal business name",i));break;case"insured_mailing_address":r(n.label,i),r("Mailing address",i),r("Insured mailing address",i),r("Client address",i);break;case"insured_phone":r(n.label,i),r("Phone",i),r("Applicant phone",i),r("Insured phone",i);break;case"insured_email":r(n.label,i),r("Email",i),r("Contact email",i),r("Applicant email",i),r("Insured email",i);break;case"agency_fax":case"insured_fax":case"secondary_email":case"secondary_phone":case"business_website":case"entity_type":case"years_in_business":case"property_address":case"property_detail":case"carrier_name":case"policy_number":case"effective_date":case"expiration_date":case"policy_term":case"premium":case"coverage":case"deductible":case"revenue":case"payroll":case"fein":case"state":case"operations":case"vehicle":r(n.label,i);break}}),t}function B_(e){const t=We(e);return t==="applicant name"||t==="client name"||t==="primary contact"}function up(e){const t=We(e);return t.includes("fax")?["Fax","Agency fax","Producer fax","Contact fax","Applicant fax","Insured fax"]:t.includes("secondary")||t.includes("alternate")?t.includes("email")?["Secondary email","Alternate email"]:t.includes("phone")?["Secondary phone","Alternate phone"]:[]:t.includes("client name")||t.includes("applicant")||t.includes("named insured")||t.includes("name insured")||t.includes("insured name")||t==="insured"||t.endsWith(" insured")?t.includes("address")?["Applicant name and mailing address","Named insured and mailing address","Insured name and address","Applicant name","Named insured","Name insured","Insured name","Insured","Legal business name","Business legal name"]:["Applicant name","Named insured","Name insured","Insured name","Insured","Legal business name","Business legal name","Primary contact"]:t.includes("business legal name")?["Legal business name","Business legal name","Named insured","Applicant name"]:t.includes("agency")?t.includes("address")?["Agency address","Producer address"]:t.includes("phone")?["Agency phone","Producer phone"]:t.includes("email")?["Agency email","Producer email"]:t.includes("website")?["Agency website"]:t.includes("customer")||t.includes("code")?["Agency customer ID","Customer number"]:["Agency","Agency name","Producer","Producer name"]:t.includes("producer")?t.includes("address")?["Producer address","Agency address"]:t.includes("phone")?["Producer phone","Agency phone"]:t.includes("email")?["Producer email","Agency email"]:t.includes("website")?["Agency website"]:t.includes("contact")?["Producer contact"]:["Producer","Producer name","Agency","Agency name"]:t.includes("description of operations")?["Description of operations","Business operations","Operations","Products / services"]:t.includes("remark")||t.includes("explanation")?["Additional remarks","Remarks"]:t.includes("loss history")?["Loss history","Claims history","Prior losses"]:t.includes("property address")||t.includes("risk property")?["Property address","Risk / property address","Location","
87Locations","Garaging address"]:t.includes("mailing address")||t.includes("client address")?["Mailing address","Insured mailing address","Client address","Named insured and mailing address","Applicant name and mailing address"]:t.includes("phone")?["Phone","Applicant phone","Insured phone","Agency phone","Producer phone"]:t.includes("email")?["Contact email","Email","Applicant email","Insured email","Agency email","Producer email"]:t.includes("annual revenue")?["Annual revenue","Revenue","Commercial exposures"]:t.includes("annual payroll")?["Annual payroll","Payroll","Commercial exposures"]:t.includes("carrier")?["Carrier","Prior carrier"]:t.includes("fein")||t.includes("federal ein")||t.includes("tax identifier")?["FEIN","Federal EIN","Tax identifier","Federal employer ID"]:t.includes("policy")&&(t.includes("number")||t.includes("no"))?["Policy number","Policy no","Policy #","Current policy number","Expiring policy number"]:t.includes("effective")||t.includes("eff date")?["Effective date","Policy effective date","Eff date"]:t.includes("expiration")||t.includes("exp date")?["Expiration date","Policy expiration date","Exp date"]:t.includes("policy term")?["Policy term","Effective date","Expiration date","Policy number"]:t.includes("premium")?["Premium","Estimated exposure value"]:[]}function U_(e){return e.includes("fax")||e.includes("secondary")||e.includes("alternate")||e.includes("email")||e.includes("phone")||e.includes("address")||e.includes("name")||e.includes("insured")||e.includes("applicant")||e.includes("agency")||e.includes("producer")||e.includes("carrier")||e.includes("policy")||e.includes("code")}function hi(e,t){const r=We(e),n=ie(r,["agency","producer"]),i=ie(r,["insured","applicant","client","contact","named insured"]);return r.includes("fax")?n?"agency_fax":"insured_fax":ie(r,["secondary email","alternate email"])?"secondary_email":ie(r,["secondary phone","alternate phone"])?"secondary_phone":ie(r,["customer id","customer number","account number","agency customer"])?"agency_customer_id":n?r.includes("address")?"agency_address":r.includes("phone")?"agency_phone":r.includes("email")?"agency_email":r.includes("website")?"agency_website":r.includes("contact")?"agency_contact_name":"agency_name":ie(r,["carrier","insurance company","company","prior carrier","insurer"])?"carrier_name":ie(r,["entity type","legal entity","business type"])?"entity_type":r.includes("years in business")?"years_in_business":r.includes("policy term")?"policy_term":r.includes("policy")&&ie(r,["number","no"])?"policy_number":ie(r,["effective date","eff date"])?"effective_date":ie(r,["expiration date","exp date","renewal date"])?"expiration_date":ie(r,["fein","federal ein","tax identifier","employer id"])?"fein":r.includes("website")?"business_website":r==="state"?"state":ie(r,["revenue","gross sales","gross receipts"])?"revenue":r.includes("payroll")?"payroll":ie(r,["premium","stated value","estimated exposure value","coverage amount","building value"])?"premium":r.includes("deductible")?"deductible":ie(r,["coverage","limit","umbrella","liability"])?"coverage":ie(r,["vin","vehicle","garaging","year make model"])?"vehicle":ie(r,["property address","risk address","premises address","location"])?"property_address":r.includes("address")?t==="asset_detail"?"property_address":ie(r,["name","insured","applicant"])?"insured_name_address":"insured_mailing_address":ie(r,["description of operations","business operations","products","services","operations"])?"operations":ie(r,["loss","claim"])?"loss_history":ie(r,["remark","instruction","explanation"])?"remarks":ie(r,["document summary","documents on file"])?"document_summary":r.includes("phone")?"insured_phone":r.includes("email")?"insured_email":i||ie(r,["business legal name","legal business name","primary contact"])?r.includes("address")?"insured_name_address":"insured_name":t==="asset_detail"?"property_detail":"generic"}function V_(e,t){const r=We(e),n=t.kind,i=ie(r,["agency","producer"]),a=ie(r,["insured","applicant","client","named insured"]);return r.includes("fax")?i?n==="agency_fax":a||r.includes("contact")?n==="insured_fax":n==="agency_fax"||n==="insured_fax":ie(r,["secondary email","alternate email"])?n==="secondary_email":ie(r,["secondary phone","alternate phone"])?n==="secondary_phone":r.includes("email")?i?n==="agency_email":n==="insured_email":r.includes("phone")?i?n==="agency_phone":n==="insured_phone":r.includes("website")?i?n==="agency_website":n==="business_website":ie(r,["entity type","legal entity","business type"])?n==="entity_type":r.includes("years in business")?n==="years_in_business":ie(r,["customer id","customer number","account number","agency customer"])?n==="agency_customer_id":ie(r,["subcode","location code","classification code","class code"])&&n!=="generic"?!1:ie(r,["fein","federal ein","tax identifier","employer id"])?n==="fein":r.includes("address")?i?n==="agency_address":ie(r,["property","risk","premises","location","garaging"])?n==="property_address":ie(r,["name","insured","applicant"])&&n==="insured_name_address"||n==="insured_mailing_address":i?r.includes("contact")?n==="agency_contact_name":n==="agency_name":ie(r,["carrier","insurer","insurance company","prior carrier"])||r.includes("company")&&!ie(r,["business","legal"])?n==="carrier_name":r.includes("policy")&&ie(r,["number","no","#"])?n==="policy_number":ie(r,["effective date","eff date"])?n==="effective_date":ie(r,["expiration date","exp date","renewal date"])?n==="expiration_date":r.includes("policy term")?n==="policy_term":ie(r,["premium","estimated exposure value","stated value"])?n==="premium":ie(r,["annual revenue","gross sales","gross receipts","revenue"])?n==="revenue":r.includes("payroll")?n==="payroll":r.includes("deductible")?n==="deductible":ie(r,["coverage","limit","liability","umbrella","forms and endorsements"])?n==="coverage"||n==="premium":ie(r,["vin","vehicle","year make model","garaging address"])?n==="vehicle"||n==="property_address":ie(r,["property","risk","premises","location","occupancy","construction","roof","stories"])?n==="property_address"||n==="property_detail"||n==="premium":ie(r,["description of operations","business operations","products","services","operations"])?n==="operations":ie(r,["loss","claim"])?n==="loss_history":ie(r,["remark","instruction","explanation"])?n==="remarks"||n==="document_summary":ie(r,["insured","applicant","client name","business legal name","legal business name","primary contact"])?n==="insured_name":!hp(r)}function j_(e,t){return!t.value.trim()||t.kind==="remarks"||t.kind==="document_summary"||t.confidence<mp(t)?!1:Va(e)?fp(e,t):t.kind==="generic"&&!pp(e,t)?!1:V_(e,t)}function Q_(e){return!e.value.trim()||e.kind==="remarks"||e.kind==="document_summary"||e.kind==="generic"||e.kind==="loss_history"?!1:e.confidence>=mp(e)}function mp(e){return e.source==="questionnaire"?.92:e.source==="public_record"?.84:e.source==="asset_detail"?.82:.86}function pp(e,t){const r=We(e),n=We(t.label);return n===r?!0:up(e).map(We).includes(n)}function fp(e,t){return t.source==="questionnaire"&&pp(e,t)}function H_(e,t){const r={};return Object.entries(e).forEach(([n,i])=>{i.trim()&&(dp.has(n)||gp(n,"system",t))&&(r[n]=i)}),r}function gp(e,t,r){return Va(e)?t==="questionnaire"&&z_(e,r):!0}function z_(e,t){const r=We(e);return t.questions.some(n=>{var i;return(i=t.responses[n.id])!=null&&i.trim()?(n.acordFieldLabels??[]).some(a=>We(a)===r):!1})}function Va(e){const t=We(e);return t?ie(t,["remark","remarks","explanation","explain all yes","additional information","comment","note"])||/\b(any|does|do|has|have|is|are|was|were|will|can|should)\b/.test(t)&&/(\?|if so|identify|describe|explain|list|y n|yes no)/.test(t)?!0:ie(t,["hold harmless","mvr","motor vehicle record","driver recruiting","not covered by workers compensation","vehicles used by family members","vehicles owned but not scheduled","convictions","moving traffic violations","agent inspected vehicles"]):!1}function G_(e){if(e.length<=1)return!0;const t=e.map(r=>hi(r,"questionnaire"));return t.includes("generic")?!1:new Set(t).size===1}function Td(e,t){const r=W_(e),n=t.map(a=>{const s=K_(r,a);return s?{fieldLabel:a,fieldValue:s}:null}).filter(a=>a!==null);if(n.length>0||yp(e))return n;const i=t.find(a=>hi(a,"questionnaire")!=="generic")??t[0];return i?[{fieldLabel:i,fieldValue:e}]:[]}function yp(e){const t=e.trim();return t?/[,;\n]/.test(t)&&!/^\s*[^:]{2,90}:\s*.+$/m.test(t):!1}function W_(e){return e.split(/\r?\n|;\s+/).map(t=>t.trim()).map(t=>t.match(/^([^:]{2,90}):\s*(.+)$/)).filter(t=>!!(t!=null&&t[1])&&!!(t!=null&&t[2])).map(t=>({label:t[1].trim(),value:t[2].trim()})).filter(t=>!!t.label&&!!t.value)}function K_(e,t){if(e.length===0)return"";const r=We(t),n=e.find(({label:s})=>{const o=We(s);return o===r||r.includes(o)||o.includes(r)});if(n)return n.value;const i=hi(t,"questionnaire");if(i==="generic")return"";const a=e.find(({label:s})=>hi(s,"questionnaire")===i);return(a==null?void 0:a.value)??""}function Y_(e){return!hp(e)}function hp(e){return ie(e,["fax","secondary","alternate","email","phone","address","name","insured","applicant","agency","producer","carrier","insurer","policy","code","fein","tax","website","entity","years","business type"])}function ie(e,t){return t.some(r=>e.includes(r))}function J_(e,t){const r=e.replace(/\s+/g," ").trim(),n=Z_(t);if(r.length<=n)return{value:r};const i=r.slice(0,Math.max(0,n-3)).replace(/\s+\S*$/,"").trim(),a=i?`${i}...`:r.slice(0,n);return{value:a,overflow:r.slice(a.replace(/\.\.\.$/,"").length).trim()}}function Z_(e){const t=e.multiline?Math.max(1,Math.floor(e.height/1.8)):1,n=Math.floor(e.width*(e.kind==="checkbox"?.25:1.45))*t;return e.kind==="date"?Math.min(16,Math.max(8,n)):e.kind==="currency"||e.kind==="number"?Math.min(20,Math.max(8,n)):Math.max(10,Math.min(e.multiline?360:90,n))}function X_(e,t,r){const n=e.filter(i=>{var a;return i.required&&!((a=t[i.label])!=null&&a.trim())}).map(i=>i.label);return e.length>
870?Array.from(new Set(n)).filter(Boolean):Array.from(new Set([...n,...r])).filter(Boolean)}function kd(e){const t={};return Object.entries(e??{}).forEach(([r,n])=>{!dp.has(r)&&!Va(r)&&n.trim()&&(t[r]=n)}),t}function eA(e){const t=new Set;return e.filter(r=>{const n=`${r.targetField}|${r.value}|${r.source}`;return t.has(n)?!1:(t.add(n),!0)})}function Mo(e){return e==null?"":typeof e=="string"?e.trim():typeof e=="number"?Number.isFinite(e)?e.toLocaleString():"":typeof e=="boolean"?e?"Yes":"No":Array.isArray(e)?e.map(Mo).filter(Boolean).join("; "):typeof e=="object"?Object.entries(e).map(([t,r])=>`${tA(t)}: ${Mo(r)}`).filter(t=>!t.endsWith(": ")).join("; "):String(e).trim()}function At(e){return`$${Math.round(e).toLocaleString()}`}function St(e){if(!e)return"";const t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleDateString("en-US")}function Rd(e){return[e.name,e.relationship,e.status,e.licenseNumber?`License ${e.licenseNumber}`:void 0,e.dateOfBirth?`DOB ${St(e.dateOfBirth)}`:void 0,e.notes].filter(Boolean).join(" - ")}function Di(e){var t;return[e.name,e.relationship??((t=e.holderType)==null?void 0:t.replace(/_/g," ")),e.address,e.email,e.phone,e.notes].filter(Boolean).join(" - ")}function We(e){return e.toLowerCase().replace(/[^a-z0-9]+/g," ").trim()}function tA(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[_-]+/g," ").replace(/\s+/g," ").trim().replace(/^./,t=>t.toUpperCase())}const $c="Yes";function bp(e){const t=wp(e),r=new Map,n=new Map;t.objects.forEach(a=>{const s=Li(a.body,"T");s&&r.set(a.objectNumber,s);const o=_p(a.body,"Parent");o&&n.set(a.objectNumber,o.objectNumber)});const i=[];return t.objects.forEach(a=>{const s=r.get(a.objectNumber);if(!s)return;const o=CA(a.objectNumber,r,n),c=SA(a.body,"FT"),d=/\/Subtype\s*\/Widget\b/.test(a.body),m=!!c||/\/Kids\s*\[/.test(a.body)||d;!o||!m||i.push({objectNumber:a.objectNumber,generation:a.generation,name:o,partialName:s,fieldType:c,rect:kA(a.body,"Rect"),defaultAppearance:Li(a.body,"DA"),flags:TA(a.body,"Ff"),tooltip:Li(a.body,"TU"),mappingName:Li(a.body,"TM"),onState:c==="/Btn"?$o(a.body):void 0})}),i}function rA(e,t){const r={},n=[],i=[],a=new Map,s=(c,d)=>{const m=String((d==null?void 0:d.value)??"").trim();m&&(r[c.name]=Bo(m,c.name),n.push({sourceLabel:(d==null?void 0:d.sourceLabel)??"QuoteX field",targetField:c.name,value:r[c.name],source:(d==null?void 0:d.source)??"system",confidence:(d==null?void 0:d.confidence)??.75,reason:(d==null?void 0:d.reason)??"Matched by ACORD native field name"}))},o=(c,d)=>{d&&(r[c.name]=$c,n.push({sourceLabel:d.sourceLabel,targetField:c.name,value:r[c.name],source:d.source,confidence:d.confidence,reason:d.reason}))};return t.forEach(c=>{const d=or(c.partialName);if(c.fieldType==="/Btn"||/indicator\b/.test(d)){o(c,iA(c,e));return}const m=nA(c,e,a);m?s(c,m):lA(c)&&i.push(c.name)}),{values:r,mappings:n,missingFields:i,totalNativeFields:t.length,filledFieldCount:Object.keys(r).length}}function nA(e,t,r){const n=Fc(e);or(e.partialName);const i="Split a QuoteX address into the ACORD native address field",a=aA(e,t);if(a)return a;const s=sA(e,t,r);if(s)return s;if(!Ip(e)&&!vp(e)){if(/formcompletiondate|datecompleted|completiondate/.test(n))return{value:new Date().toLocaleDateString("en-US"),sourceLabel:"Mapping date",source:"system",confidence:.99,reason:"ACORD completion date"};if(/fax/.test(n))return se(t,["Agency fax","Producer fax","Contact fax","Applicant fax","Insured fax","Fax"],"Matched explicit fax number",.92,"contact");if(/(secondary|alternate).*email|email.*(secondary|alternate)/.test(n))return se(t,["Secondary email","Alternate email"],"Matched explicit secondary email",.92,"contact");if(/(secondary|alternate).*phone|phone.*(secondary|alternate)/.test(n))return se(t,["Secondary phone","Alternate phone"],"Matched explicit secondary phone",.92,"contact");if(/producermailingaddress|produceraddress/.test(n))return Rs(t,r,"agency",e.name,["Agency address","Producer address"],i,"Agency address","system");if(/producercontactpersonemailaddress|produceremailaddress|producermailaddress/.test(n))return se(t,["Agency email","Producer email"],"Matched producer email",.96,"system");if(/producercontactpersonphonenumber|producerphonenumber|producerphone/.test(n))return se(t,["Agency phone","Producer phone"],"Matched producer phone",.96,"system");if(/producercontactpersonfullname|producercontactfullname/.test(n))return se(t,["Producer contact","Producer contact name","Agency contact"],"Matched producer contact",.92,"system");if(/producerfullname|producername|produceragency/.test(n))return se(t,["Agency","Producer","Agency name","Producer name"],"Matched producer agency",.98,"system");if(/producercustomeridentifier|customeridentifier|customernumber|accountnumber/.test(n))return se(t,["Agency customer ID","Customer number"],"Matched agency customer identifier",.86,"contact");if(/insurerfullname|carrierfullname|insurancecompany|companyname|priorcarrier/.test(n))return se(t,["Carrier","Insurance carrier","Prior carrier","Company"],"Matched carrier name",.82,"system");if(/insurernaiccode|naiccode/.test(n))return se(t,["NAIC code","NAIC"],"Matched NAIC code",.78,"system");if(/policypolicynumberidentifier|policynumber|policyno|policyidentifier/.test(n))return se(t,["Policy number","Policy no","Policy #","Current policy number","Expiring policy number"],"Matched policy number",.9,"system");if(/policyeffectivedate|policystatuseffectivedate|effectivedate|effdate/.test(n))return se(t,["Effective date","Policy effective date","Eff date","Requested effective date"],"Matched policy effective date",.86,"system");if(/policyexpirationdate|expirationdate|expdate|renewaldate/.test(n))return se(t,["Expiration date","Policy expiration date","Exp date","Renewal date"],"Matched policy expiration date",.86,"system");if(/namedinsuredprimaryphonenumber|insuredphonenumber|applicantphonenumber|contactprimaryphonenumber|primaryphonenumber/.test(n))return se(t,["Phone","Primary phone","Applicant phone","Insured phone"],"Matched insured phone",.92,"contact");if(/namedinsuredcontactprimaryemailaddress|applicantemail|contactemail|insuredemail|emailaddress/.test(n))return se(t,["Contact email","Email","Applicant email","Insured email"],"Matched insured email",.92,"contact");if(/namedinsuredcontactfullname|applicantcontactfullname|contactfullname|primarycontact/.test(n))return se(t,["Primary contact","Applicant name","Client name","Named insured"],"Matched insured contact",.92,"contact");if(/namedinsuredfullname|applicantfullname|insuredfullname|firstnamedinsured|nameinsured|insuredname/.test(n))return se(t,["Business legal name","Legal business name","Named insured","Applicant name","Client name","Insured"],"Matched named insured",.96,"contact");if(/namedinsuredmailingaddress|applicantmailingaddress|insuredmailingaddress|mailingaddress/.test(n))return Rs(t,r,"insured",e.name,["Mailing address","Insured mailing address","Client address","Named insured and mailing address","Applicant name and mailing address"],i,"Mailing address","contact");if(/producer.*website|agency.*website/.test(n))return se(t,["Agency website","Producer website"],"Matched agency website",.86,"system");if(/websiteaddress|website/.test(n))return se(t,["Website","Business website","Applicant website","Insured website"],"Matched website",.82,"contact");if(/siccode/.test(n))return se(t,["SIC code","SIC"],"Matched SIC code",.8,"public_record");if(/naicscode/.test(n))return se(t,["NAICS code","NAICS"],"Matched NAICS code",.8,"public_record");if(/taxidentifier|federalemployer|fein|ein/.test(n))return se(t,["FEIN","Federal EIN","Tax identifier","Federal employer ID"],"Matched tax identifier",.88,"contact");if(/commercialstructurephysicaladdress|physicaladdress|risklocation|propertyaddress|locationaddress|premisesaddress|garagingaddress/.test(n))return Rs(t,r,"property",e.name,["Property address","Risk / property address","Location","Premises address","Risk address","Garaging address"],i,"Property address","asset_detail");if(/builtyear|yearbuilt|constructionyear/.test(n))return se(t,["Year built","Built year","Construction year"],"Matched property year built",.82,"asset_detail");
87if(/buildingarea|squarefootage|squarefeet|area/.test(n))return se(t,["Square footage","Building area","Area"],"Matched property square footage",.8,"asset_detail");if(/constructioncode|constructiontype|construction/.test(n))return se(t,["Construction type","Construction","Building construction"],"Matched construction type",.78,"asset_detail");if(/roofmaterial|rooftype|roof/.test(n))return se(t,["Roof type","Roof material","Roof"],"Matched roof detail",.78,"asset_detail");if(/storeycount|storycount|stories|numberofstories/.test(n))return se(t,["Stories","Number of stories","Storey count"],"Matched story count",.76,"asset_detail");if(/protectionclass/.test(n))return se(t,["Protection class"],"Matched protection class",.76,"public_record");if(/annualrevenue|grossreceipts|grosssales|annualgrosssalesamount|salesamount/.test(n))return se(t,["Annual revenue","Revenue","Gross sales"],"Matched revenue/exposure",.84,"questionnaire");if(/annualpayroll|payroll|remuneration/.test(n))return se(t,["Annual payroll","Payroll"],"Matched payroll",.84,"questionnaire");if(/fulltimeemployeecount|fulltimeemployees/.test(n))return se(t,["Full-time employee count","Employee count","Full-time employees"],"Matched employee count",.78,"questionnaire");if(/parttimeemployeecount|parttimeemployees/.test(n))return se(t,["Part-time employee count","Part-time employees"],"Matched part-time employee count",.76,"questionnaire");if(/operationsdescription|operationdescription|productdescription|businessdescription|descriptionofoperations|natureofbusiness/.test(n))return se(t,["Description of operations","Business operations","Products / services","Operations"],"Matched operations description",.88,"questionnaire");if(!/remarktext|remarks|remark|explanation/.test(n)){if(/generalliability.*aggregate.*limitamount|generalaggregatelimit/.test(n))return se(t,["General aggregate limit","General liability limit","Limits"],"Matched general aggregate limit",.82,"questionnaire");if(/eachoccurrence.*limitamount|eachoccurrencelimit/.test(n))return se(t,["Each occurrence limit","General liability limit","Limits"],"Matched each occurrence limit",.82,"questionnaire");if(/deductibleamount|deductible/.test(n))return se(t,["Deductible"],"Matched deductible",.8,"questionnaire");if(/premiumamount|totalpremium|premium/.test(n))return se(t,["Premium","Estimated exposure value"],"Matched premium/exposure value",.76,"system");if(/classification/.test(n))return se(t,["Classification","Description of operations","Business operations"],"Matched class description",.76,"questionnaire");if(/classcode/.test(n))return se(t,["Class code","General liability class code"],"Matched class code",.74,"questionnaire");if(/exposure/.test(n))return se(t,["Exposure","Annual revenue","Payroll","Estimated exposure value"],"Matched exposure basis",.74,"questionnaire");if(/commercialproperty.*limitamount|premises.*limitamount|blanketlimitamount|buildinglimit|businesspersonalproperty/.test(n))return se(t,["Building value","Business personal property","Coverage amount","Estimated exposure value","Stated value"],"Matched property limit/value",.8,"asset_detail");if(/vehicleidentificationnumber|vinnumber|vin/.test(n))return se(t,["VIN","Vehicle identification number"],"Matched vehicle VIN",.82,"asset_detail");if(/vehiclemodelyear|modelyear/.test(n))return se(t,["Vehicle year","Model year","Year"],"Matched vehicle year",.78,"asset_detail");if(/vehiclemanufacturer|vehiclemake|make/.test(n))return se(t,["Vehicle make","Make"],"Matched vehicle make",.78,"asset_detail");if(/vehiclemodel|model/.test(n))return se(t,["Vehicle model","Model"],"Matched vehicle model",.78,"asset_detail")}}}function iA(e,t){const r=Fc(e);if(Ip(e)||vp(e))return;const n=ht(t,["Entity type","Legal entity type","Business type"]),i=ht(t,["Business legal name","Legal business name","Named insured","Applicant name"]),a=`${n} ${i}`,s=(o,c,d,m="system",p=.86)=>c?{value:$c,sourceLabel:o,source:m,confidence:p,reason:d}:void 0;if(/limitedliabilitycompany|limitedliabilitycorporation|llc/.test(r))return s("Entity type",/\bllc\b|limited liability/i.test(a),"Matched LLC entity type");if(/subchapterscorporation|scorporation|subchapters/.test(r))return s("Entity type",/\bs[\s-]?corp|subchapter s/i.test(a),"Matched S corporation entity type");
87if(/corporation|corp/.test(r)&&!/limitedliability/.test(r))return s("Entity type",/\bcorp|corporation|inc\.?\b/i.test(a),"Matched corporation entity type");if(/partnership/.test(r))return s("Entity type",/partnership|partner/i.test(a),"Matched partnership entity type");if(/individual|soleproprietor/.test(r))return s("Entity type",/individual|sole proprietor/i.test(a),"Matched individual/sole proprietor entity type");if(/commercialproperty|propertycoverage|buildingcoverage/.test(r))return s("Property address",!!ht(t,["Property address","Risk / property address","Coverage amount","Building value","Stated value"]),"Property data exists for this ACORD section","asset_detail");if(/commercialgeneralliability|generalliability|occurrenceindicator/.test(r))return s("Description of operations",!!ht(t,["General liability limit","Description of operations","Business operations"]),"General liability data exists for this ACORD section","questionnaire");if(/businessauto|commercialvehicle|commercialauto|vehicle/.test(r))return s("Vehicle schedule",!!ht(t,["VIN","Vehicle schedule","Vehicle make","Vehicle model","Automobile liability limit"]),"Vehicle data exists for this ACORD section","asset_detail");if(/umbrella|excess/.test(r))return s("Umbrella limit",!!ht(t,["Umbrella limit","Excess limit","Limits"]),"Umbrella/excess data exists for this ACORD section","questionnaire");if(/nopriorlosses|nolosses|lossfree/.test(r))return s("Loss history",/no losses|no prior|none/i.test(ht(t,["Loss history","Claims history","Prior losses"])),"Loss history indicates no prior losses")}function aA(e,t){var i,a;const r=(i=t[e.name])==null?void 0:i.trim();if(r)return{value:r,sourceLabel:e.name,source:"questionnaire",confidence:.98,reason:"Matched exact native full field name"};const n=(a=t[e.partialName])==null?void 0:a.trim();if(n)return{value:n,sourceLabel:e.partialName,source:"questionnaire",confidence:.96,reason:"Matched exact native partial field name"}}function sA(e,t,r){if(cA(t)==="3")return oA(e,t,r)}function oA(e,t,r){const n=uA(e);if(!n)return;const i=c=>/agency|producer/i.test(c)||/carrier|policy|mapping/i.test(c)?"system":"contact",a=(c,d,m=.92)=>se(t,c,d,m,i(c[0])),s=(c,d,m,p,u)=>{var g,y;r.has(c)||r.set(c,Fo(ht(t,d)));const f=(y=(g=r.get(c))==null?void 0:g[m])==null?void 0:y.trim();if(f)return{value:f,sourceLabel:p,source:u,confidence:.92,reason:"Mapped ACORD 3 generic field by fixed PDF position"}},o=(c,d,m,p)=>{r.has(c)||r.set(c,Fo(ht(t,d)));const u=r.get(c),f=[u==null?void 0:u.city,[u==null?void 0:u.state,u==null?void 0:u.postalCode].filter(Boolean).join(" ")].filter(Boolean).join(", ");if(f)return{value:f,sourceLabel:m,source:p,confidence:.9,reason:"Mapped ACORD 3 generic field by fixed PDF position"}};switch(n){case 1:return a(["Mapping date"],"Mapped ACORD 3 date field",.7)??{value:new Date().toLocaleDateString("en-US"),sourceLabel:"Mapping date",source:"system",confidence:.92,reason:"ACORD 3 completion date"};case 2:return a(["Agency","Agency name","Producer","Producer name"],"Mapped ACORD 3 agency name");case 3:return s("agency",["Agency address","Producer address"],"lineOne","Agency address","system");case 4:return o("agency",["Agency address","Producer address"],"Agency address","system");case 5:return a(["Agency phone","Producer phone"],"Mapped ACORD 3 agency phone");case 7:case 10:return a(["Agency fax","Producer fax","Fax"],"Mapped ACORD 3 agency fax");case 9:return a(["Agency phone","Producer phone"],"Mapped ACORD 3 contact phone");case 11:return a(["Agency email","Producer email"],"Mapped ACORD 3 agency email");case 12:return a(["Agency customer ID","Customer number"],"Mapped ACORD 3 agency customer code",.82);case 15:return a(["Date of occurrence","Date of loss","Loss date"],"Mapped ACORD 3 loss date",.86);case 18:return a(["Carrier","Insurance carrier","Company"],"Mapped ACORD 3 carrier");case 19:return a(["NAIC code","NAIC"],"Mapped ACORD 3 NAIC code",.78);case 20:return a(["Policy number","Policy no","Policy #","Current policy number"],"Mapped ACORD 3 policy number");case 21:return a(["Business legal name","Legal business name","Named insured","Applicant name","Client name","Insured"],"Mapped ACORD 3 named insured");case 26:return s("insured",["Mailing address","Insured mailing address","Client address"],"lineOne","Mail
87ing address","contact");case 27:return s("insured",["Mailing address","Insured mailing address","Client address"],"lineTwo","Mailing address","contact");case 28:return s("insured",["Mailing address","Insured mailing address","Client address"],"city","Mailing address","contact");case 29:return s("insured",["Mailing address","Insured mailing address","Client address"],"state","Mailing address","contact");case 30:return s("insured",["Mailing address","Insured mailing address","Client address"],"postalCode","Mailing address","contact");case 31:return a(["Phone","Primary phone","Applicant phone","Insured phone"],"Mapped ACORD 3 insured phone");case 32:return a(["Contact email","Email","Applicant email","Insured email"],"Mapped ACORD 3 insured email");default:return}}function cA(e){var n;const r=[e["Source ACORD file"],e["Source ACORD template ID"],e["ACORD form number"],e["Source file"],e["Form name"]].filter(Boolean).join(" ").match(/\bacord[-_\s]?0?(\d{1,4})\b/i);return((n=r==null?void 0:r[1])==null?void 0:n.replace(/^0+/,""))??""}function lA(e){const t=Fc(e);return/producer|policy|insurer|carrier|namedinsured|applicant|mailingaddress|contact|commercialstructurephysicaladdress|commercialproperty|generalliability|businessinformation|taxidentifier|fein|effective|expiration|premium|limitamount|operationsdescription|descriptionofoperations/.test(t)}function Ip(e){const t=or(e.partialName);return/^(text|check)\d+$/.test(t)}function vp(e){const t=or(e.name),r=dA(e);return!r||r==="a"?!1:/namedinsured|mailingaddress|contact|phone|email|producer|commercialstructure|premises|driver|vehicle|additionalinterest|blanket|location|building/.test(t)}function dA(e){var r;const t=e.name.match(/_([A-Z])(?:\[\d+])?(?:\.|$)/i)??e.partialName.match(/_([A-Z])(?:\[\d+])?$/i);return(r=t==null?void 0:t[1])==null?void 0:r.toLowerCase()}function uA(e){const t=or(e.partialName).match(/^text(\d+)$/);if(!t)return;const r=Number(t[1]);return Number.isFinite(r)?r:void 0}function Fc(e){return[e.name,e.partialName,e.tooltip??"",e.mappingName??""].map(or).filter(Boolean).join(" ")}function se(e,t,r,n=.9,i="system"){for(const a of t){const s=ht(e,[a]);if(s)return{value:s,sourceLabel:a,source:i,confidence:n,reason:r}}}function Rs(e,t,r,n,i,a,s,o){const c=EA(e,t,r,n,i);if(c)return{value:c,sourceLabel:s,source:o,confidence:.9,reason:a}}function mA(e,t){const r=wp(e),n=bp(e),i=new Map(n.map(d=>[d.name,d])),a=new Map(n.map(d=>[d.partialName,d])),s=new Map,o=[];if(Object.entries(t).forEach(([d,m])=>{const p=i.get(d)??a.get(d);if(!p||!m.trim())return;const u=r.objectMap.get(p.objectNumber);if(!u)return;const f=p.fieldType==="/Btn";let g=f?hA(u.body,m):yA(u.body,Bo(m,p.name));if(!f&&p.rect){const y=r.maxObjectNumber+o.length+1;o.push(bA(y,p,Bo(m,p.name))),g=Nr(g,"AP",`<< /N ${y} 0 R >>`)}s.set(p.objectNumber,{...u,body:g})}),r.acroFormRef){const d=r.objectMap.get(r.acroFormRef.objectNumber);d&&s.set(d.objectNumber,{...d,body:Nr(d.body,"NeedAppearances","true")})}else if(r.rootRef){const d=Number(r.rootRef.split(/\s+/)[0]),m=Number.isFinite(d)?r.objectMap.get(d):void 0;if(m){const p=_A(m.body);p!==m.body&&s.set(m.objectNumber,{...m,body:p})}}const c=[...Array.from(s.values()),...o];return c.length===0?e:fA(e,r,c)}function FT(e){const t=e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength),r=new Blob([t],{type:"application/pdf"});return URL.createObjectURL(r)}function pA(e){const t=Cp(e),r=globalThis.Buffer;return`data:application/pdf;base64,${r?r.from(t,"binary").toString("base64"):btoa(t)}`}function wp(e){var u,f,g,y;const t=Cp(e),r=[],n=new Map,i=/(\d+)\s+(\d+)\s+obj\b([\s\S]*?)\bendobj/g;let a,s=0;for(;a=i.exec(t);){const h=Number(a[1]),w=Number(a[2]),T={objectNumber:h,generation:w,body:a[3].trim()};r.push(T),n.set(h,T),s=Math.max(s,h)}const o=Number(((u=t.match(/startxref\s+(\d+)\s+%%EOF\s*$/))==null?void 0:u[1])??0),d=((g=(((f=t.match(/trailer\s*<<(.*?)>>\s*startxref[\s\S]*?%%EOF\s*$/))==null?void 0:f[1])??"").match(/\/Root\s+(\d+\s+\d+\s+R)/))==null?void 0:g[1])??((y=t.match(/\/Root\s+(\d+\s+\d+\s+R)/))==null?void 0:y[1]),m=d?n.get(Number(d.split(/\s+/)[0])):void 0,p=m?_p(m.body,"AcroForm"):void 0;return{text:t,objects:r,objectMap:n,previousXrefOffset:o,rootRef:d,acroFormRef:p,maxObjectNumber:s}}function fA(e,t,r){let n=`
88`;const i=new Map,a=[...r].sort((d,m)=>d.objectNumber-m.objectNumber);a.forEach(d=>{i.set(d.objectNumber,e.length+Uo(n)),n+=`${d.objectNumber} ${d.generation} obj
89${d.body}
90endobj
91`});const s=e.length+Uo(n);n+=`xref
92`,gA(a).forEach(d=>{n+=`${d.start} ${d.objects.length}
93`,d.objects.forEach(m=>{const p=i.get(m.objectNumber)??0;n+=`${String(p).padStart(10,"0")} ${String(m.generation).padStart(5,"0")} n 
94`})}),n+=`trailer
95`,n+=`<< /Size ${Math.max(t.maxObjectNumber,...a.map(d=>d.objectNumber))+1}`,t.rootRef&&(n+=` /Root ${t.rootRef}`),t.previousXrefOffset&&(n+=` /Prev ${t.previousXrefOffset}`),n+=` >>
96`,n+=`startxref
97${s}
98%%EOF
99`;const o=xA(n),c=new Uint8Array(e.length+o.length);return c.set(e,0),c.set(o,e.length),c}function gA(e){const t=[];return e.forEach(r=>{const n=t[t.length-1];!n||n.start+n.objects.length!==r.objectNumber?t.push({start:r.objectNumber,objects:[r]}):n.objects.push(r)}),t}function yA(e,t){const r=Ap(t);return Nr(Nr(e,"V",r),"DV",r)}function hA(e,t){const r=/yes|true|checked|on/i.test(t)?$o(e):t.replace(/[^A-Za-z0-9_-]/g,"")||$o(e);return Nr(Nr(e,"V",`/${r}`),"AS",`/${r}`)}function $o(e){var n;const t=((n=e.match(/\/N\s*<<([\s\S]*?)>>/))==null?void 0:n[1])??"";return Array.from(t.matchAll(/\/([A-Za-z0-9_-]+)\s+\d+\s+\d+\s+R/g)).map(i=>i[1]).filter(i=>i.toLowerCase()!=="off")[0]??$c}function bA(e,t,r){const[n,i,a,s]=t.rect??[0,0,120,14],o=Math.max(1,a-n),c=Math.max(1,s-i),d=!!(t.flags&&t.flags&4096),m=IA(r,o,c,d),p=["<<","/Type /XObject","/Subtype /Form",`/BBox [0 0 ${tn(o)} ${tn(c)}]`,"/Resources <<","/Font << /F0 << /Type /Font /Subtype /Type1 /BaseFont /Helvetica >> >>",">>",`/Length ${Uo(m)}`,">>","stream",m,"endstream"].join(`
100`);return{objectNumber:e,generation:0,body:p}}function IA(e,t,r,n){const i=Math.min(2,Math.max(.75,t*.03)),a=Math.min(2,Math.max(.75,r*.15)),s=Math.max(4,Math.min(8,r-a*1.4)),o=Math.max(1,t-i*2),c=Math.max(1,r-a*2),d=vA(e,o,s),m=n?Ed(e,o,d):[e.replace(/\s+/g," ").trim()],p=1.15,u=Math.max(3.5,Math.min(d,c/Math.max(1,m.length)/p)),f=(n?Ed(e,o,u):m).slice(0,Math.max(1,Math.floor(c/Math.max(1,u*p)))),g=u*p,y=Math.max(u*.25,r-a-u);return["q","/Tx BMC","BT",`/F0 ${tn(u)} Tf`,"0 g",`${tn(i)} ${tn(y)} Td`,...f.flatMap((w,T)=>{const b=`${Ap(w)} Tj`;return T===0?[b]:[`0 -${tn(g)} Td`,b]}),"ET","EMC","Q"].join(`
101`)}function vA(e,t,r){const n=e.replace(/\s+/g," ").trim();if(!n)return r;const i=Math.max(1,n.length*.52);return Math.max(3.5,Math.min(r,t/i))}function Ed(e,t,r){const n=e.replace(/\r?\n/g," ").split(/\s+/).filter(Boolean),i=[];let a="";return n.forEach(s=>{const o=a?`${a} ${s}`:s;if(wA(o,r)<=t||!a){a=o;return}i.push(a),a=s}),a&&i.push(a),i.length>0?i:[e.trim()]}function wA(e,t){return e.length*t*.52}function tn(e){return Number.isInteger(e)?String(e):e.toFixed(3).replace(/0+$/,"").replace(/\.$/,"")}function _A(e){const t=e.indexOf("/AcroForm");if(t===-1)return e;const r=e.indexOf("<<",t);if(r===-1)return e;const n=AA(e,r);if(n===-1)return e;const i=e.slice(r,n+2),a=Nr(i,"NeedAppearances","true");return`${e.slice(0,r)}${a}${e.slice(n+2)}`}function AA(e,t){let r=0;for(let n=t;n<e.length-1;n+=1){const i=e.slice(n,n+2);if(i==="<<")r+=1,n+=1;else if(i===">>"){if(r-=1,r===0)return n;n+=1}}return-1}function Nr(e,t,r){const n=new RegExp(`/${t}\\s+(?:\\([^)]*\\)|/[A-Za-z0-9_-]+|true|false|null|\\d+\\s+\\d+\\s+R|\\[[\\s\\S]*?\\]|<<[\\s\\S]*?>>)`);if(n.test(e))return e.replace(n,`/${t} ${r}`);const i=e.lastIndexOf(">>");return i===-1?e:`${e.slice(0,i).trimEnd()}
102/${t} ${r}
103${e.slice(i)}`}function CA(e,t,r){const n=[],i=new Set;let a=e;for(;a&&!i.has(a);){i.add(a);const s=t.get(a);s&&n.unshift(s),a=r.get(a)}return n.join(".")}function Li(e,t){const r=e.match(new RegExp(`/${t}\\s*\\(((?:\\\\.|[^\\\\)])*)\\)`));return r?RA(r[1]):void 0}function SA(e,t){const r=e.match(new RegExp(`/${t}\\s*(/[A-Za-z0-9_-]+)`));return r==null?void 0:r[1]}function TA(e,t){const r=e.match(new RegExp(`/${t}\\s+(-?\\d+(?:\\.\\d+)?)`));return r?Number(r[1]):void 0}function kA(e,t){const r=e.match(new RegExp(`/${t}\\s*\\[([^\\]]+)\\]`));if(!r)return;const n=r[1].trim().split(/\s+/).map(Number).filter(i=>Number.isFinite(i));return n.length>=4?[n[0],n[1],n[2],n[3]]:void 0}function _p(e,t){const r=e.match(new RegExp(`/${t}\\s+(\\d+)\\s+(\\d+)\\s+R`));return r?{objectNumber:Number(r[1]),generation:Number(r[2])}:void 0}function Ap(e){return`(${e.replace(/\\/g,"\\\\").replace(/\(/g,"\\(").replace(/\)/g,"\\)").replace(/\r?\n/g,"\\r")})`}function RA(e){const t=e.replace(/\\([0-7]{1,3})/g,(r,n)=>String.fromCharCode(parseInt(n,8))).replace(/\\([\\()nrtbf])/g,(r,n)=>n==="n"?`
104`:n==="r"?"\r":n==="t"?"	":n==="b"?"\b":n==="f"?"\f":n);if(t.length>=2&&t.charCodeAt(0)===254&&t.charCodeAt(1)===255){let r="";for(let n=2;n+1<t.length;n+=2)r+=String.fromCharCode(t.charCodeAt(n)<<8|t.charCodeAt(n+1));return r}return t}function ht(e,t){var i;for(const a of t){const s=(i=e[a])==null?void 0:i.trim();if(s)return s}const r=t.map(xd),n=Object.entries(e).find(([a,s])=>s.trim()&&r.includes(xd(a)));return(n==null?void 0:n[1].trim())??""}function EA(e,t,r,n,i){t.has(r)||t.set(r,Fo(ht(e,i)));const a=t.get(r),s=or(n);return/lineone|streetaddress/.test(s)?a.lineOne:/linetwo/.test(s)?a.lineTwo:/cityname/.test(s)?a.
104city:/stateorprovincecode|statecode/.test(s)?a.state:/postalcode|zipcode/.test(s)?a.postalCode:[a.lineOne,a.lineTwo,a.city,a.state,a.postalCode].filter(Boolean).join(", ")}function Fo(e){var s;const t=e.split(",").map(o=>o.trim()).filter(Boolean),r=t[0]??e,n=t.length>=3?t[t.length-2]:"",a=(t.length>=2?t[t.length-1]:"").match(/\b([A-Z]{2})\s+(\d{5}(?:-\d{4})?)\b/i);return{lineOne:r,lineTwo:t.length>3?t.slice(1,-2).join(", "):"",city:n,state:((s=a==null?void 0:a[1])==null?void 0:s.toUpperCase())??"",postalCode:(a==null?void 0:a[2])??""}}function Bo(e,t){const r=or(t),n=/remark|description|operations|explanation|address/.test(r)?180:/email/.test(r)?70:/fullname|name/.test(r)?64:42;return e.length<=n?e:e.slice(0,n-1).replace(/\s+\S*$/,"").trim()||e.slice(0,n)}function or(e){return e.toLowerCase().replace(/\[[^\]]*]/g,"").replace(/[^a-z0-9]+/g,"")}function xd(e){return e.toLowerCase().replace(/[^a-z0-9]+/g," ").trim()}function Cp(e){let t="";for(let n=0;n<e.length;n+=32768)t+=String.fromCharCode(...e.subarray(n,n+32768));return t}function xA(e){const t=new Uint8Array(e.length);for(let r=0;r<e.length;r+=1)t[r]=e.charCodeAt(r)&255;return t}function Uo(e){return e.length}function PA(e,t){var r;return{updatedAt:t,updatedById:e==null?void 0:e.id,updatedByName:((r=e==null?void 0:e.name)==null?void 0:r.trim())||"Unknown editor",updatedByRole:(e==null?void 0:e.role)??"agent"}}function Pd(e,t,r,n){const i={...e.questionnaireResponseMeta??{}},a=e.questionnaireResponses??{};for(const[s,o]of Object.entries(t)){const c=i[s],d=(r==null?void 0:r.role)??"agent",m=a[s]===o,p=m&&(c==null?void 0:c.updatedByRole)==="ai"&&d!=="ai";m&&c&&!p||(i[s]=PA(r,n))}return i}function ve(e){return String(e??"").toLowerCase().replace(/&/g,"and").replace(/[^a-z0-9]+/g," ").trim()}function Ce(e){return ve(e).replace(/\s+/g,"")}function ee(e){return e==null?"":typeof e=="boolean"?e?"Yes":"No":String(e).trim()}function $r(e){return Ce(`${e.id} ${e.acordFieldKey??""} ${e.label} ${(e.acordFieldLabels??[]).join(" ")}`)}function Sp(e){return Ce(e)}function Yt(e){return e.includes("address")||e.includes("location")||e.includes("premises")||e.includes("garaging")||e.includes("mooring")||e.includes("risk")}function ai(e){return(e.includes("propertylocation")||e.includes("propertyaddresslocation")||e.includes("premises"))&&(e.includes("occupancy")||e.includes("description"))}function Tp(e){const t=Ce(e);return t?t.includes("email")?"email":t.includes("phone")||t.includes("telephone")?"phone":t.includes("website")||t.includes("url")?"website":t.includes("zipcode")||t.includes("postalcode")||t==="zip"?"zip":t==="city"||t.endsWith("city")?"city":t==="state"||t.endsWith("state")?"state":t.includes("naics")?"naics":t.includes("sic")?"sic":t.includes("dba")||t.includes("doingbusinessas")?"dba":t.includes("entitytype")||t.includes("businesstype")||t.includes("typeofbusiness")?"entityType":t.includes("businessdescription")||t.includes("operations")||t.includes("operationdescription")||t.includes("natureofbusiness")?"operations":t.includes("yearstarted")||t.includes("businessstarted")||t.includes("datebusinessstarted")||t.includes("yearbusinessstarted")?"yearStarted":t.includes("yearsinbusiness")||t.includes("timeinbusiness")?"yearsInBusiness":t.includes("yearbuilt")||t.includes("builtyear")?"yearBuilt":t.includes("squarefootage")||t.includes("livingarea")||t.includes("buildingarea")?"squareFootage":t.includes("roofmaterial")||t.includes("rooftype")||t.includes("roofcovering")||t.includes("roof")&&(t.includes("material")||t.includes("shape")||t.includes("pitch")||t.includes("skylight"))?"roofMaterial":t.includes("roofage")||t.includes("roofyear")?"roofAge":t.includes("constructiontype")||t.includes("construction")||t.includes("frameandexterior")||t.includes("exteriormaterial")||t.includes("siding")||t.includes("cladding")?"construction":t.includes("foundation")||t.includes("basement")||t.includes("crawlspace")?"foundation":t==="stories"||t.includes("numberofstories")||t.includes("storycount")||t.includes("structuretype")||t.includes("homestyle")?"stories":t==="units"||t.includes("numberofunits")||t.includes("unitcount")||t.includes("propertytype")||t.includes("hometype")||t.includes("dwellingtype")||t.includes("buildingtype")||t.includes("landuse")||t.includes("usecode")?"units":t.includes("heatingtype")||t.includes("heatingfuel")||t.includes("heatingcooling")||t==="hvac"?"heating":t.includes("centralac")||t.includes("centralair")||t.includes("airconditioning")?"centralAc":t.includes("occupancy")||t.includes("occupied")||t.includes("primaryuse")?"occupancy":t.includes("floodzone")||t.includes("femazone")?"floodZone":t.includes("distancetocoast")||t.includes("coastdistance")?"distanceToCoast":t.includes("lotsize")||t.includes("acreage")||t.includes("landarea")?"lotSize":t.includes("legalbusinessname")||t.includes("businesslegalname")||t.includes("businessnameasregistered")||t.includes("nameofinsured")||t.includes("namedinsured")||t.includes("insuredname")||t.includes("applicantname")||t.includes("businessname")?"businessName":t.includes("industrycode")||t.includes("primaryindustry")||t.includes("industry")?"naics":t.includes("estimatedvalue")||t.includes("appraisedvalue")||t.includes("agreedvalue")||t.includes("scheduledvalue")||t.includes("requestedamount")||t.includes("requestedlimit")||t.includes("propertyvalue")||t.includes("buildinglimit")?"value":Yt(t)?"address":null:null}function NA(e){return new Set(kn(e).map(Tp).filter(t=>t!==null))}function si(e,t){const r=kn(e),n=ve(t),i=Ce(t);if(r.some(s=>{const o=ve(s),c=Ce(s);return o===n||c===i}))return!0;const a=Tp(t);return a?NA(e).has(a):!1}function Ge(e){return/\d/.test(e)&&/\b(st|street|rd|road|ave|avenue|dr|drive|ln|lane|blvd|boulevard|ct|court|cir|circle|way|pkwy|parkway|hwy|highway|pl|place|terrace|ter|trail|trl|mi|fl|ga|sc|ny|ca|tx|il|oh|pa|zip)\b/i.test(e)}function qA(e){const t=Number(e.trim());return Number.isInteger(t)&&t>=1800&&t<=new Date().getFullYear()+2}function Es(e){return/^\$?\s*\d[\d,]*(?:\.\d+)?$/.test(e.trim())}function xs(e){return/\d/.test(e.trim())}function OA(e){return/\b(unknown|not public|not publicly|not found|no public|no information|no data|information unavailable|not provided|n\/a|not available|unconfirmed|requires|needed|verify|applicant|attestation|clue|loss runs?)\b/i.test(e)}function Bc(e){return/^(unknown|n\/a|none|not found|not public|no information|no data|information unavailable|not provided|not available|unconfirmed|requires)\b/i.test(e)||/\b(not found|not public|not publicly|no public|no information|no data|information unavailable|not provided|not available|unconfirmed|unable to confirm|unable to determine|requires applicant|requires client|requires insured|applicant attestation|clue|loss runs?)\b/i.test(e)}function An(e){const t=ee(e);
104if(!t)return!1;try{const r=new URL(t);if(r.protocol!=="http:"&&r.protocol!=="https:")return!1;const n=r.hostname.toLowerCase().replace(/^www\./,"");return!(/\b(?:anycity|yourcity|cityofyourcity)\b/i.test(n)||(n==="quotexinsurance.com"||n.endsWith(".quotexinsurance.com"))&&r.pathname.startsWith("/customer/questionnaire/"))}catch{return!1}}const DA=["zillow.com","realtor.com","redfin.com","trulia.com","homes.com","movoto.com","remax.com","coldwellbankerhomes.com"];function Uc(e){const t=ee(e);if(t)try{const r=new URL(t),n=r.hostname.toLowerCase().replace(/^www\./,"");return DA.some(i=>n===i||n.endsWith(`.${i}`))?r:void 0}catch{return}}function Vo(e){var u,f;const t=ee(e);if(!t)return;const r=t.split(",").map(g=>g.trim()).filter(Boolean),n=r[0]??t,i=(u=n.match(/\b(\d{1,6})\b/))==null?void 0:u[1];if(!i)return;const a=new Set(["north","south","east","west","northeast","northwest","southeast","southwest","street","road","avenue","drive","lane","boulevard","court","circle","way","parkway","highway","place","terrace","trail","route","unit","suite"]),s=n.toLowerCase().replace(/\b(st|rd|ave|dr|ln|blvd|ct|cir|pkwy|hwy|pl|ter|trl)\b/g," ").replace(/[^a-z0-9]+/g," ").trim().split(/\s+/).filter(g=>g.length>=3&&g!==i&&!a.has(g));if(s.length===0)return;const o=t.match(/(?:,|\s)\s*([A-Za-z]{2})\s+(\d{5})(?:-\d{4})?\s*$/),c=(f=o==null?void 0:o[1])==null?void 0:f.toLowerCase(),d=o==null?void 0:o[2],p=(r.length>=3?r.slice(1,-1).join(" "):r.length===2?r[1].replace(/\b[A-Za-z]{2}\s+\d{5}(?:-\d{4})?\s*$/,""):"").toLowerCase().replace(/[^a-z0-9]+/g," ").trim().split(/\s+/).filter(g=>g.length>=2);return{number:i,streetTokens:s,cityTokens:p,state:c,zip:d}}function jo(e,t){var i,a,s,o,c,d,m;if(!e)return[];const r=t?[t]:e.selectedAssetMappings??[],n=[(i=e.assetDetails)==null?void 0:i.propertyAddress,(a=e.assetDetails)==null?void 0:a.riskAddress,(s=e.assetDetails)==null?void 0:s.primaryResidenceAddress,(o=e.assetDetails)==null?void 0:o.address,(c=e.publicFields)==null?void 0:c.propertyAddress,(d=e.publicFields)==null?void 0:d.riskAddress,(m=e.publicFields)==null?void 0:m.address];return r.forEach(p=>{var u,f,g,y,h,w,T;n.push(p.address,(u=p.assetDetails)==null?void 0:u.propertyAddress,(f=p.assetDetails)==null?void 0:f.riskAddress,(g=p.assetDetails)==null?void 0:g.primaryResidenceAddress,(y=p.assetDetails)==null?void 0:y.address,(h=p.publicFields)==null?void 0:h.propertyAddress,(w=p.publicFields)==null?void 0:w.riskAddress,(T=p.publicFields)==null?void 0:T.address)}),Array.from(new Set(n.map(ee).filter(Boolean)))}function Mt(e,t,r){const n=ee(e);if(!n)return!1;let i;try{i=new URL(n)}catch{return!1}const a=Uc(e),s=`${i.pathname} ${i.search}`;let o=s;try{o=decodeURIComponent(s)}catch{}const c=o.toLowerCase().replace(/[^a-z0-9]+/g," ").trim(),d=/\b\d{1,6}\b.*\b(st|street|rd|road|ave|avenue|dr|drive|ln|lane|blvd|boulevard|ct|court|cir|circle|way|pkwy|parkway|hwy|highway|pl|place|ter|terrace|trl|trail)\b/.test(c);if(!a&&!d)return!0;const m=new Set(c.split(/\s+/).filter(Boolean));return jo(t,r).map(Vo).filter(p=>!!p).some(p=>m.has(p.number)&&p.streetTokens.every(u=>m.has(u))&&p.cityTokens.every(u=>m.has(u))&&(!p.state||m.has(p.state))&&(!p.zip||m.has(p.zip)))}function kp(e,t){if(!t||!/\bconstruction\s+(type|class)\b/i.test(e.label)||!Uc(t.sourceUrl))return t;const r="The source states property materials, but the carrier construction class must be confirmed before submission.";return{...t,verified:!1,allowDocumentAutofill:!1,reviewStatus:"needs_confirmation",reviewReason:t.reviewReason||r,notes:[t.notes,r].filter(Boolean).join(" ")}}function kt(e){const t=ve(`${e.label} ${e.acordFieldKey??""} ${(e.acordFieldLabels??[]).join(" ")}`);return!/\b(loss(?:es)?|claims?|incidents?|convictions?|violations?|mvr|bankruptcy|cancel|nonrenew|date of birth|dob|gender|marital|occupation|phone|email|preferred contact|current premium|current carrier|policy number|liability limit|discount|residents?|drivers?|licenses?|client name|applicant name|insured name|full name|occupancy|coverage|cov\s*[acef]|dwelling amount|replacement cost|deductible|pip|uninsured|medical payment|telematics|mileage|commute|purchase date|ownership|principal operator|occasional operator|effective date|policy term|dogs?|animals?|breed|lender|mortgagee|loan number|fein|tax id|ssn|social security)\b/.test(t)}function bi(e,t){if(!t||!new Set(["web_search","public_web","government_api","commercial_provider","imagery_vision"]).has(t.sourceKind))return!0;
104if(!kt(e))return!1;if(/\broof\b.*\b(last\s+)?(replaced|replacement|year|age)\b/i.test(e.label)){const n=[t.sourceLabel,t.sourceUrl,t.notes,t.reviewReason].filter(Boolean).join(" ");return/\b(permit|inspection|inspector|roof\s+(?:replacement|replaced|install(?:ed|ation)?|update(?:d)?))\b/i.test(n)}return!0}function Mi(e){return!!(e&&new Set(["web_search","public_web","government_api","commercial_provider","imagery_vision"]).has(e.sourceKind))}function Vc(e,t,r,n){const i=ee(t);if(!i)return!1;if(!r||r.updatedByRole!=="ai")return!0;if(!ar(e,i))return!1;const a=new Set(["web_search","public_web","government_api","commercial_provider","imagery_vision"]);return Uc(r.sourceUrl)&&!kt(e)||!bi(e,{sourceKind:r.sourceKind??"unknown",sourceLabel:r.sourceLabel??r.sourceName??"",sourceUrl:r.sourceUrl,notes:r.sourceNotes,reviewReason:r.reviewReason})?!1:a.has(String(r.sourceKind??""))?kt(e)&&An(r.sourceUrl)&&Mt(r.sourceUrl,n):!0}function ja(e){return/\b(likely|possibly|probably|appears|seems|may be|might be|could be|assumed|inferred|estimated|estimate only|approximately|approx\.?|unverified|needs? confirmation|subject to verification)\b/i.test(e)}function bt(e,t){var o,c,d;const r=ee(t);if(!r||!((o=e.options)!=null&&o.length))return;const n=ve(r),i=e.options.find(m=>ve(m)===n);if(i)return i;if(/\b(?:number of )?stories\b/i.test(e.label)){const m=(c=n.match(/\b(\d+(?:\.\d+)?)\s*(?:story|stories)?\b/))==null?void 0:c[1];if(m){if(Number(m)>=3){const g=e.options.filter(y=>/(?:\b3\s*\+|\b3\s*(?:or more|and over|plus)|\bthree\s*(?:or more|and over|plus))/i.test(y));if(g.length===1)return g[0]}const u=m,f=e.options.filter(g=>{const y=ve(g);return y===u||y.startsWith(`${u} `)});if(f.length===1)return f[0]}}if(/\b(?:number of )?units?\b/i.test(e.label)){const m={one:"1",single:"1",two:"2",duplex:"2",three:"3",triplex:"3",four:"4",fourplex:"4"},p=(d=n.match(/\b(\d+|one|single|two|duplex|three|triplex|four|fourplex)\b/))==null?void 0:d[1],u=p?m[p]??p:void 0;if(u){const f=e.options.filter(g=>ve(g).startsWith(`${u} `)||ve(g)===u);if(f.length===1)return f[0]}}const a=Nd(r);if(!a)return;const s=e.options.filter(m=>Nd(m)===a);return s.length===1?s[0]:void 0}function Qa(e,t){const r=bt(e,t);if(r)return r;const n=ee(t);if(e.kind!=="number")return n;const i=n.match(/^\s*\$?\s*(\d[\d,]*)(?:\.(\d+))?\s*(?:sq\.?\s*ft\.?|square\s*feet|years?)?\s*$/i);if(!i)return n;const a=i[1].replace(/,/g,"");return i[2]?`${a}.${i[2]}`:a}function Nd(e){const t=ee(e).toLowerCase().trim();if(!t)return;const r=t.replace(/&/g," and ").replace(/[^a-z0-9]+/g," ").trim(),n=r.replace(/\s+/g,"");if(/^(yes|y|true|1|on|present|installed|enabled|equipped)$/.test(r))return"boolean:yes";if(/^(no|n|false|0|off|none|absent|not present|not installed|not applicable|n a|disabled|unchecked)$/.test(r))return"boolean:no";const i={zero:"0",one:"1",single:"1",two:"2",double:"2",three:"3",triple:"3",four:"4",five:"5",six:"6"},a=r.match(/^(?:number of )?(\d+|zero|one|single|two|double|three|triple|four|five|six)(?:\s*(?:story|stories|unit|units))?$/);if(a)return`number:${i[a[1]]??a[1]}`;const o=[["property:single-family",/\b(single family|one family|detached home|detached house|singlefamily)\b/],["property:duplex",/\b(duplex|two family)\b/],["property:triplex",/\b(triplex|three family)\b/],["property:fourplex",/\b(fourplex|four family)\b/],["property:multi-family",/\b(multi family|multifamily)\b/],["property:condominium",/\b(condo|condominium)\b/],["property:townhouse",/\b(townhouse|townhome)\b/],["property:mobile-home",/\b(mobile home|manufactured home)\b/],["construction:frame",/\b(frame|wood frame)\b/],["construction:masonry-veneer",/\b(masonry veneer|brick veneer)\b/],["construction:masonry",/\b(?:masonry(?!\s+veneer)|concrete block|block construction)\b/],["exterior:brick",/\bbrick\b(?!\s+veneer)/],["exterior:stucco",/\bstucco\b/],["exterior:vinyl",/\bvinyl(?: siding)?\b/],["exterior:wood",/\bwood(?: siding)?\b/],["roof:asphalt-composition",/\b(asphalt|composition|architectural)\b.*\b(shingle|roof)?\b/],["roof:metal",/\bmetal(?: roof| roofing)?\b/],["roof:tile",/\b(tile|clay tile|concrete tile)(?: roof| roofing)?\b/],["roof:slate",/\bslate(?: roof| roofing)?\b/],["roof:flat",/\bflat(?: roof)?\b/],["roof-shape:gable",/\bgable\b/],["roof-shape:hip",/\bhip(?:ped)?\b/],["roof-shape:gambrel",/\bgambrel\b/],["roof-shape:mansard",/\bmansard\b/],["foundation:basement",/\bbasement\b/],["foundation:crawlspace",/\bcrawl\s*sp
104ace\b/],["foundation:slab",/\bslab(?: on grade)?\b/],["heating:electric",/\belectric(?: heat| heating| furnace)?\b/],["heating:gas",/\b(?:natural )?gas(?: heat| heating| furnace| forced air)?\b/],["heating:oil",/\boil(?: heat| heating| furnace)?\b/],["heating:propane",/\bpropane(?: heat| heating| furnace)?\b/],["alarm:central",/\bcentral(?: station)?(?: monitored)?\b/],["alarm:local",/\blocal(?: alarm)?\b/],["occupancy:primary",/\b(primary|owner occupied|principal residence)\b/],["occupancy:secondary",/\b(secondary|seasonal|vacation)\b/],["occupancy:rental",/\b(rental|tenant occupied|landlord)\b/]].filter(([,c])=>c.test(r));if(o.length===1)return o[0][0];if(/^[a-z0-9]{2,24}$/.test(n))return`literal:${n}`}function fn(e){const t=$r(e);return!Yt(t)||ai(t)?!1:!(t.includes("nameandmailingaddress")||t.includes("nameaddress")||t.includes("contactphoneemail")||t.includes("certificateholder")||t.includes("evidenceholder")||t.includes("additionalinterest"))}function Ha(e){return/\b(llc|l\.l\.c\.|inc|inc\.|corp|corporation|co\.|company|ltd|limited|pllc|llp|lp|holdings|group|partners|enterprises|ventures|services|logistics|management|agency|insurance|properties)\b/i.test(e)}function LA(e){const t=e.trim();return/[a-z]/i.test(t)&&t.replace(/[^a-z]/gi,"").length>=3&&!/^\d+$/.test(t.replace(/\D/g,""))&&!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t)&&!Ge(t)}function jc(e){const t=$r(e);return t.includes("legalbusinessname")||t.includes("businesslegalname")||t.includes("businessnameasregistered")}function qr(e,t,r){const n=$r(e),i=Sp(t);return Ge(r)&&!fn(e)&&!ai(n)&&!Qo(e)?!1:MA(e,t)?Yt(i)?!fn(e)&&!ai(n)&&!Qo(e)?!1:Ge(r):i.includes("email")?/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(r):i.includes("phone")?r.replace(/\D/g,"").length>=7:i.includes("fein")||i.includes("ein")||i.includes("tax")?r.replace(/\D/g,"").length>=9:i.includes("name")||i.includes("insured")||i.includes("applicant")||i.includes("business")?!Ge(r):!0:fn(e)?Yt(i)&&Ge(r):ai(n)?i.includes("propertylocation")||i.includes("propertyaddresslocation")?Ge(r):Yt(i)&&Ge(r)||i.includes("occupancy")||i.includes("description")||i.includes("construction")||i.includes("squarefootage")||i.includes("yearbuilt"):Yt(i)?!1:qp(e)?jc(e)&&!Ha(r)?!1:!Yt(i):Np(e)?/value|limit|amount|coverage|premium|revenue|payroll|sales/.test(i):n.includes("email")?i.includes("email"):n.includes("phone")?i.includes("phone"):n.includes("website")?i.includes("website")||i.includes("url"):n.includes("fein")||n.includes("federalein")?i.includes("fein")||i.includes("ein")||i.includes("tax"):!0}function Vt(e,t){var s;const r=ee(t);if(!r)return!1;if((s=e.options)!=null&&s.length)return!!bt(e,r);const n=$r(e),i=ve(`${e.label} ${(e.acordFieldLabels??[]).join(" ")}`),a=r.split(/\r?\n|;\s+/).map(o=>o.trim()).filter(o=>/^([^:]{2,90}):\s*(.+)$/.test(o));return n.includes("primarycontactphoneemailandmailingaddress")?a.length>0&&a.some(o=>/^Primary contact:\s+.+/i.test(o))&&a.some(o=>/^Phone:\s*[\d\s().+-]{7,}$/i.test(o))&&a.some(o=>/^Email:\s*[^\s@]+@[^\s@]+\.[^\s@]+$/i.test(o)):n.includes("businessidentity")||n.includes("legalbusinessnameentitytype")?a.some(o=>/^Legal business name:\s+.+/i.test(o)):n.includes("yearsataddress")||n.includes("monthsataddress")||n.includes("yearsatcurrentaddress")||n.includes("monthsatcurrentaddress")?/^\d+(?:\.\d+)?(?:\s*(?:years?|months?))?$/i.test(r.trim()):Ge(r)?/\b(operation|operations|product|products|service|services|revenue|payroll|employee|employees)\b/.test(i)?!1:fn(e)||ai(n)||Qo(e):n.includes("yearbuilt")||n.includes("roofyear")||n.includes("modelyear")||n.includes("yearstarted")?qA(r):n.includes("yearsinbusiness")||n.includes("roofage")||n.includes("squarefootage")||n.includes("livingarea")||n.includes("buildingarea")||n.includes("lotsize")||n.includes("numberofstories")||n.includes("stories")||n.includes("bedrooms")||n.includes("bathrooms")?Es(r)||xs(r):n.includes("occupancy")||n.includes("occupied")||n.includes("primaryuse")||n.includes("propertyuse")?/\b(primary|secondary|seasonal|vacation|rental|tenant|owner|occupied|vacant)\b/i.test(r):n.includes("constructiontype")||n.includes("construction")||n.includes("roofmaterial")||n.includes("rooftype")||n.includes("roof")&&(n.includes("material")||n.includes("shape")||n.includes("pitch")||n.includes("skylight"))||n.includes("floodzone")||n.includes("protectionclass")?!Ge(r)&&!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(r)&&r.length<=220:/\b(loss|claim|incident|conviction|violation|mvr|bankruptcy|cancel|nonrenew|audit|payroll|revenue|sales|fein|tax id|ssn|social security)\b/.test(i)?!OA(r):n.includes("estimatedvalue")||n.includes("appraisedvalue")||n.includes("agreedvalue")||n.includes("scheduledvalue")||n.includes("requestedamount")||n.includes("requestedlimit")||n.includes("exposurevalue")||n.includes("replacementcost")||n.includes("marketvalue")?Es(r)||xs(r):jc(e)&&!Ha(r)?!1:n.includes("email")?/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(r):n.includes("phone")?r.replace(/\D/g,"").length>=7:n.includes("fein")||n.includes("federalein")?r.replace(/\D/g,"").length>=9:!0}function ar(e,t){const r=ee(t);return!r||Bc(r)||ja(r)?!1:Vt(e,r)}function MA(e,t){const r=e.acordFieldLabels??[];if(r.length===0)return!1;const n=ve(t),i=Ce(t);return r.some(a=>{const s=ve(a),o=Ce(a);return s===n||o===i})}function ka(e,t,r){var o,c,d,m,p,u;const n=ee(t);if(!n)return!1;const i=Sp(e),a=Yt(i),s=[r==null?void 0:r.contactName,(o=r==null?void 0:r.publicFields)==null?void 0:o["Legal business name"],(c=r==null?void 0:r.publicFields)==null?void 0:c["Business legal name"],(d=r==null?void 0:r.publicFields)==null?void 0:d["Named insured"],(m=r==null?void 0:r.publicFields)==null?void 0:m["Name of insured"],(p=r==null?void 0:r.publicFields)==null?void 0:p["Applicant name"],(u=r==null?void 0:r.publicFields)==null?void 0:u["Owner of record"]].map(f=>
104ee(f).toLowerCase()).filter(Boolean);if(a){const f=n.toLowerCase();return s.some(g=>g===f)?!1:Ge(n)}return i.includes("email")?/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(n):i.includes("phone")?n.replace(/\D/g,"").length>=7:i.includes("fein")||i.includes("ein")||i.includes("tax")?n.replace(/\D/g,"").length>=9:!((i.includes("name")||i.includes("insured")||i.includes("applicant")||i.includes("business"))&&Ge(n))}function Rp(e,t,r,n){const i=ee(r);if(!i||!si(e,t))return null;const a=[t,...e.acordFieldLabels??[],e.acordFieldKey,e.label].map(o=>ee(o)).filter(Boolean),s=new Set;for(const o of a){const c=o.toLowerCase();if(!s.has(c)&&(s.add(c),ka(o,i,n)&&qr(e,o,i)))return o}return null}function Ep(e,t,r){if(!e)return;const n=e.sourceKind&&e.sourceKind!=="unknown"?e.sourceKind:"model_estimate",i=ee(e.sourceUrl),a=Math.max(.45,Math.min(1,Number(e.confidence)||.72));if($A(n)&&!i)return;const s=ee(e.rationale);return{fieldKey:t,sourceKind:n,sourceLabel:ee(e.sourceLabel)||"OpenAI questionnaire research",sourceUrl:i||void 0,confidence:a,verified:e.verified===!0,allowDocumentAutofill:!1,collectedAt:r,reviewStatus:e.conflictDetected?"conflict":e.reviewRequired||n==="imagery_vision"?n==="imagery_vision"?"advisory":"needs_confirmation":n==="web_search"||n==="public_web"?(e.corroboratingSourceCount??0)>=2?"corroborated":"needs_confirmation":e.verified?"verified":"needs_confirmation",reviewReason:e.reviewReason,corroboratingSourceCount:e.corroboratingSourceCount,supportingSources:e.supportingSources,conflictReason:e.conflictReason,notes:[s||"Editable questionnaire prefill from OpenAI research. Review before carrier submission.",i?`Source URL: ${i}`:""].filter(Boolean).join(" ")}}function $A(e){return e==="web_search"||e==="public_web"||e==="government_api"||e==="commercial_provider"||e==="imagery_vision"}function kn(e){return[e.id,e.acordFieldKey,e.label,...e.acordFieldLabels??[],e.id.split("-").pop()].map(t=>ee(t)).filter(Boolean)}function za(e,t){const r=t&&!new Set(["agent_seed","client_intake","carrier_api"]).has(t.sourceKind)&&An(t.sourceUrl)?t.sourceUrl:void 0;return{updatedAt:e,updatedById:"ai",updatedByName:"QuoteX AI",updatedByRole:"ai",sourceKind:(t==null?void 0:t.sourceKind)??"client_intake",sourceName:(t==null?void 0:t.sourceLabel)??"QuoteX system",sourceLabel:(t==null?void 0:t.sourceLabel)??"QuoteX system",sourceUrl:r,confidence:t==null?void 0:t.confidence,observedDate:t==null?void 0:t.observedDate,verified:t==null?void 0:t.verified,reviewStatus:t==null?void 0:t.reviewStatus,reviewReason:t==null?void 0:t.reviewReason,corroboratingSourceCount:t==null?void 0:t.corroboratingSourceCount,supportingSources:t==null?void 0:t.supportingSources,conflictReason:t==null?void 0:t.conflictReason,sourceNotes:t==null?void 0:t.notes}}function xp(e,t){const r=kn(e).map(n=>Ie(t,n)).find(n=>!!(n&&He(n)));if(r)return r;if(/\bdiving\s+board\b/i.test(e.label))return["swimmingPool","pool","hasPool"].map(n=>Ie(t,n)).find(n=>!!(n&&He(n)))}function Ra(e,t){if(!t)return;const r=kn(e);for(const n of r){if(!Object.prototype.hasOwnProperty.call(t,n))continue;const i=ee(t[n]);if(i)return{key:n,value:i}}for(const[n,i]of Object.entries(t)){if(!si(e,n))continue;const a=ee(i);if(a)return{key:n,value:a}}}function FA(e,t){if(!t)return!1;const r=kn(e).map(n=>Ie(t,n)).filter(n=>!!n);return r.length===0?!1:r.some(n=>n.sourceKind==="model_estimate")&&!r.some(n=>He(n))}function Pp(e){const t=$r(e);return t.includes("email")||t.includes("ifdifferent")?!1:t.includes("propertyaddress")||t.includes("riskaddress")||t.includes("primaryresidenceaddress")||t.includes("residenceaddress")||t.includes("locationaddress")||t.includes("propertylocation")||t.includes("premisesaddress")}function Qo(e){const t=ve(`${e.id} ${e.acordFieldKey??""} ${e.label} ${(e.acordFieldLabels??[]).join(" ")}`);return/\b(address|premises|garaging|mooring)\b/.test(t)||/\b(property|risk|insured|applicant|mailing|location)\s+location\b/.test(t)||Pp(e)}function Np(e){const t=ve(`${e.acordFieldKey??""} ${e.label} ${(e.acordFieldLabels??[]).join(" ")}`);if(/\b(coverage|cov a|cov c|cov e|cov f|dwelling amount|dwelling limit|deductible|liability|medical payments?|policy limit)\b/.test(t))return!1;const r=Ce(t);return r.includes("estimatedvalue")||r.includes("appraisedvalue")||r.includes("agreedvalue")||r.includes("scheduledvalue")||r.includes("requestedamount")||r.includes("requestedlimit")}function qp(e){const t=$r(e);return fn(e)?!1:t.includes("legalbusinessname")||t.includes("businesslegalname")||t.includes("businessnameasregistered")||t.includes("nameofinsured")||t.includes("insuredname")||t.includes("applicantname")}function mt(e,t){var i;for(const a of t){const s=ee((i=e.assetDetails)==null?void 0:i[a]);if(s)return s;const o=ee(e.publicFields[a]);if(o)return o}
104const r=t.map(Ce).filter(Boolean),n=[e.assetDetails,e.publicFields].filter(Boolean);for(const a of n)for(const[s,o]of Object.entries(a)){const c=Ce(s);if(!r.some(m=>c===m))continue;const d=ee(o);if(d)return d}}function _e(e,t){const r=ee(t);return r?`${e}: ${r}`:void 0}function Cr(e){const t=e.filter(r=>!!r);return t.length>0?t.join(`
105`):void 0}function BA(e,t){const r=$r(e),n=mt(t,["Legal business name (as registered)","Legal business name","Business legal name","Named insured","Name of insured","Applicant name","businessName"])??(t.businessName&&LA(t.businessName)?t.businessName:void 0)??(t.contactName&&Ha(t.contactName)?t.contactName:void 0),i=mt(t,["Property address","Risk address","Premises address","Location address","address","propertyAddress","riskAddress","primaryResidenceAddress"])??t.address,a=i&&Ge(i)?i:void 0,s=mt(t,["Business operations summary","Business operations","Description of operations","Business description","operationsDescription","productsServices"]),o=s&&!Ge(s)?s:void 0,c=mt(t,["Entity type","Business entity type","entityType"]),d=mt(t,["Federal EIN","FEIN","EIN","Tax ID","federalEin"]),m=mt(t,["Website","Business website","website"]),p=mt(t,["Years in business","Year established","yearEstablished"]),u=mt(t,["Primary industry / NAICS code","NAICS","SIC","naics"]),f=mt(t,["Operating states","State","States of operation","state"])??void 0,g=f&&!Ge(f)?f:void 0,y=mt(t,["Occupancy","occupancy"]),h=mt(t,["Description of premises","Property description","description"]),w=typeof t.estimatedValue=="number"&&Number.isFinite(t.estimatedValue)&&t.estimatedValue>0?`$${Math.round(t.estimatedValue).toLocaleString()}`:mt(t,["Estimated exposure value","Estimated value","Building value"]);if(fn(e))return a&&Ge(a)?a:void 0;if(r.includes("namedinsuredlegalnameandmailingaddress")||r.includes("insurednameaddress"))return Cr([_e("Named insured",n),_e("Mailing address",a)]);if(r.includes("businessidentity")||r.includes("legalbusinessnameentitytype"))return Cr([_e("Legal business name",n),_e("Entity type",c),_e("FEIN",d),_e("Website",m),_e("Years in business",p),_e("Primary industry / NAICS",u)]);if(r.includes("legalbusinessnameasregistered"))return n;if(r.includes("federalein"))return d;if(r.includes("yearestablished"))return p;if(r.includes("entitytype"))return c;if(r.includes("primaryindustry")||r.includes("naics"))return u;if(r.includes("businessoperationssummary")||r.includes("businessoperations"))return o;if(r.includes("operatingstates"))return g;if(r.includes("primarycontactphoneemailandmailingaddress"))return Cr([_e("Primary contact",t.contactName),_e("Phone",t.contactPhone),_e("Email",t.contactEmail),_e("Mailing address",a)]);if(r.includes("email")&&t.contactEmail&&/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t.contactEmail))return t.contactEmail.trim();if(r.includes("phone")&&t.contactPhone&&t.contactPhone.replace(/\D/g,"").length>=7)return t.contactPhone.trim();if(r.includes("propertylocation")||r.includes("propertyaddresslocationoccupancydescription"))return a&&!y&&!h?a:Cr([_e("Property address",a),_e("Occupancy",y),_e("Description",h)]);if(r.includes("buildingbusinesspersonalproperty")||r.includes("propertyvalues"))return w?`Estimated value / limit: ${w}`:void 0}function Or(e,t){if(!(!e||e.lineOfBusiness==="commercial"||e.assetType!=="luxury_vehicle"))return ee(t.acordFieldKey)||void 0}function rn(e,t){if(!e)return;const r=new Set(t.map(Ce).filter(Boolean));for(const[n,i]of Object.entries(e)){if(!r.has(Ce(n)))continue;const a=ee(i);if(a&&!Bc(a)&&!ja(a))return a}}function qd(e){const t=String(e??"").trim().split(/\s+/).filter(Boolean);if(t.length===0)return{};const r=/^(jr\.?|sr\.?|ii|iii|iv)$/i.test(t[t.length-1])?t.pop():void 0;return t.length===1?{first:t[0],suffix:r}:{first:t[0],middle:t.length>2?t.slice(1,-1).join(" "):void 0,last:t[t.length-1],suffix:r}}function Ho(e){const t=String(e??"").trim();if(!t)return{};const r=t.match(/^(.+?),\s*([^,]+?),\s*([A-Z]{2})\s+(\d{5}(?:-\d{4})?)$/i);return r?{street:r[1].trim(),city:r[2].trim(),state:r[3].toUpperCase(),zip:r[4]}:{}}function Ga(e,t){const r=e.selectedAssetMappings??[];if(r.length!==0)return r.find((n,i)=>t.id.endsWith(`__asset_${n.assetId??i}`))??r[0]}function UA(e,t,r){var B,F;const n=Or(e,t);if(!n)return;const i=vt(e),a=r.contactName??(i==null?void 0:i.name),s=qd(a),o=Ga(e,t),c=(o==null?void 0:o.assetId)??e.assetId,d=c?oe(l.list("assets"),e.tenantId).find(Y=>Y.id===c):void 0,m={...(d==null?void 0:d.details)??{},...r.assetDetails??{},...(o==null?void 0:o.assetDetails)??{}},p={...r.publicFields??{},...(o==null?void 0:o.publicFields)??{}},u={...r.publicFieldEvidence??{},...(o==null?void 0:o.publicFieldEvidence)??{}},f=(...Y)=>rn(m,[n,...Y])??(()=>{const X=rn(p,[n,...Y]);return X&&[n,...Y].map(Q=>Ie(u,Q)).find(Q=>Q&&He(Q))?X:void 0})(),g=i&&"mailingAddress"in i?ee(i.mailingAddress):void 0,y=rn(m,["garagingAddress","garageAddress"])??(o==null?void 0:o.address),h=rn(m,["currentResidenceAddress","residenceAddress","primaryResidenceAddress"])??r.address??(o==null?void 0:o.address)??y??g,w=Ho(h),T=Ho(y),b=!!(g&&h&&ve(g)===ve(h)),_=!!(y&&h&&ve(y)===ve(h)),v=oe(l.list("policies"),e.tenantId).filter(Y=>Y.customerId===e.customerId).filter(Y=>!(o!=null&&o.assetId)||Y.assetId===o.assetId).sort((Y,X)=>+(X.status==="bound")-+(Y.status==="bound"))[0],S=v?l.list("carriers").find(Y=>Y.id===v.carrierId):void 0,C=(B=v==null?void 0:v.participants)==null?void 0:B.find(Y=>(Y.participantType==="driver"||Y.participantType==="operator")&&(!(o!=null&&o.assetId)||!Y.assignedAssetId||Y.assignedAssetId===o.assetId)),k=qd((C==null?void 0:C.name)??a),O=(...Y)=>{var X;return(X=v==null?void 0:v.coverages)==null?void 0:X.find(j=>Y.some(Q=>Ce(j.name)===Ce(Q)))},x=(...Y)=>{var j;const X=O(...Y);
105if(X){if((j=X.description)!=null&&j.trim())return X.description.trim();if(typeof X.limit=="number"&&X.limit>0)return`$${X.limit.toLocaleString()}`;if(typeof X.deductible=="number"&&X.deductible>=0)return`$${X.deductible.toLocaleString()}`}},$=(...Y)=>{const X=f(...Y);if(X){if(/^(yes|true|1)$/i.test(X))return"Yes";if(/^(no|false|0)$/i.test(X))return"No"}},q={primaryFirstName:s.first,primaryMiddleInitial:(F=s.middle)==null?void 0:F.charAt(0),primaryLastName:s.last,primarySuffix:s.suffix,primaryDateOfBirth:f("primaryDateOfBirth","dateOfBirth","dob"),primarySsnLastFour:f("primarySsnLastFour","ssnLastFour"),primaryGender:f("primaryGender","gender"),primaryMaritalStatus:f("primaryMaritalStatus","maritalStatus"),primaryOccupation:f("primaryOccupation","occupation"),cellPhone:r.contactPhone??(i==null?void 0:i.phone),emailAddress:r.contactEmail??(i==null?void 0:i.email),currentStreetAddress:w.street,currentCity:w.city,currentState:w.state,currentZipCode:w.zip,mailingAddress:b?void 0:g,mailingSameAsCurrent:g&&h?b?"Yes":"No":void 0,alternateGarageStreet:_?void 0:T.street,alternateGarageCity:_?void 0:T.city,alternateGarageState:_?void 0:T.state,alternateGarageZip:_?void 0:T.zip,ratingState:e.state??w.state,targetEffectiveDate:(v==null?void 0:v.effectiveDate)??f("targetEffectiveDate","effectiveDate"),currentlyInsured:v?"Yes":$("currentlyInsured"),currentPremium:v!=null&&v.finalPremium&&v.finalPremium>0?String(v.finalPremium):v!=null&&v.premiumEstimate&&v.premiumEstimate>0?String(v.premiumEstimate):void 0,currentCarrier:S==null?void 0:S.name,currentPolicyExpirationDate:v==null?void 0:v.renewalDate,currentPolicyNumber:v==null?void 0:v.policyNumber,currentLiabilityLimits:x("Liability","Bodily Injury","Bodily Injury Liability"),driverFirstName:k.first,driverLastName:k.last,driverDateOfBirth:(C==null?void 0:C.dateOfBirth)??f("driverDateOfBirth","dateOfBirth","dob"),driverRelationshipToApplicant:C==null?void 0:C.relationship,driverStatus:C==null?void 0:C.status,driverLicenseState:(C==null?void 0:C.licenseState)??f("driverLicenseState","licenseState"),driverLicenseNumber:(C==null?void 0:C.licenseNumber)??f("driverLicenseNumber","licenseNumber"),driverLicenseStatus:f("driverLicenseStatus","licenseStatus"),vin:Bt(f("vin")??""),vehicleYear:f("vehicleYear","year"),vehicleMake:f("vehicleMake","make"),vehicleModel:f("vehicleModel","model"),vehicleTrim:f("vehicleTrim","trim","VIN-decoded trim","series"),vehicleBodyStyle:f("vehicleBodyStyle","bodyStyle","vehicleType","Body class"),vehiclePurchaseDate:f("vehiclePurchaseDate","purchaseDate"),vehicleOwnershipStatus:f("vehicleOwnershipStatus","ownershipStatus"),vehicleRegisteredState:f("vehicleRegisteredState","registeredState"),vehicleOriginalMsrp:f("vehicleOriginalMsrp","originalMsrp","msrp"),vehicleEngine:f("vehicleEngine","engine","Engine model","Engine configuration"),vehicleCylinders:f("vehicleCylinders","cylinders","engineCylinders","Engine cylinders","Cylinders"),vehicleDisplacement:f("vehicleDisplacement","displacement","displacementL","Engine displacement (L)","Displacement (L)","Displacement"),vehicleFuelType:f("vehicleFuelType","fuelType","Fuel type","Primary fuel type"),vehicleDriveType:f("vehicleDriveType","driveType","Drive type"),vehicleDoorCount:f("vehicleDoorCount","doorCount","doors","Doors"),principalOperator:(C==null?void 0:C.name)??f("principalOperator"),occasionalOperator:f("occasionalOperator"),vehicleUsage:f("vehicleUsage","usage","primaryUse"),oneWayCommuteMiles:f("oneWayCommuteMiles","commuteMiles"),daysDrivenPerWeek:f("daysDrivenPerWeek"),annualMileage:f("annualMileage","annualMiles","mileage"),vehicleGaraged:$("vehicleGaraged","garaged"),garageLocation:f("garageLocation")??(y&&h?_?"Residence":"Other":void 0),antiLockBrakes:$("antiLockBrakes","abs"),antiTheftDevice:$("antiTheftDevice","antiTheft"),airbags:$("airbags"),bodilyInjuryLimits:x("Bodily Injury","Bodily Injury Liability"),propertyDamageLimits:x("Property Damage","Property Damage Liability"),comprehensiveDeductible:x("Comprehensive"),collisionDeductible:x("Collision"),rentalReimbursement:x("Rental Reimbursement","Rental"),towingCoverage:
105x("Towing","Roadside Assistance"),fullGlassCoverage:x("Full Glass","Glass")};return ee(q[n]??f(n))||void 0}function Dr(e,t){if(!e||e.lineOfBusiness==="commercial"||e.assetType!=="coastal_home")return;const r=ve(t.label),n=ve(`${t.acordFieldKey??""} ${t.label} ${(t.acordFieldLabels??[]).join(" ")}`),i=Ce(n);if(/\b(client|applicant|insured)\s+(full\s+)?name\b/.test(r))return"clientFullName";if(/\bstreet\s+address\b/.test(r)||i.includes("streetaddress"))return"streetAddress";if(/\b(property|risk|residence)\s+address\b/.test(r))return"propertyAddress";if(r==="city"||/\b(property|risk|residence)\s+city\b/.test(r))return"city";if(r==="state"||/\b(property|risk|residence)\s+state\b/.test(r))return"state";if(/\b(zip|postal)\s*(code)?\b/.test(r))return"zipCode";if(/\b(policy|product)\s+type\b/.test(r))return"policyType";if(/\boccupancy\s*(type|status)?\b/.test(r)&&!/features?/.test(r))return"occupancyType";if(/\boccupancy\b/.test(r)&&/features?/.test(r))return"occupancyAndFeatures";if(/\byear\s+built\b|\bconstruction\s+year\b/.test(r))return"yearBuilt";if(/\bsquare\s*(footage|feet|ft)\b|\bliving\s+area\b/.test(r))return"squareFootage";if(/\broof\b.*\b(last\s+)?(replaced|replacement|year|age)\b/.test(r))return"roofYear";if(/\bconstruction\s+type\b/.test(r))return"constructionType";if(/\bfoundation\s+type\b/.test(r))return"foundationType";if(/\b(stories|number\s+of\s+stories)\b/.test(r))return"stories";if(/\bunits\b|\bnumber\s+of\s+units\b/.test(r))return"units";if(/\broof\s+(type|material|covering)\b/.test(r))return"roofType";if(/\bheating\s+(type|system|fuel)\b/.test(r))return"heatingType";if(/\bcentral\s+(ac|a\/c|air conditioning|air)\b/.test(r))return"centralAc";if(/\bdeadbolts?\b/.test(r))return"deadbolts";if(/\bdiving\s+board\b/.test(r))return"divingBoard";if(/\bbusiness\b.*\b(home|premises|property)\b|\bhome\s+business\b/.test(r))return"businessUse";if(/\bgated\s+community\b/.test(r))return"gatedCommunity";if(/\bdog\b.*\b(premises|property|home)\b|\bany\s+dogs?\b/.test(r))return"dogOnPremises";if(r==="breed"||/\bdog\s+breed\b/.test(r))return"dogBreed";if(/\bfully\s+fenced\b|\bfenced\s+(yard|property)\b/.test(r))return"fullyFenced";if(/\bfire\s+sprinkler\b/.test(r))return"fireSprinkler";if(/\bmortgag(ed|e)\b/.test(r)&&!/name|number|holder/.test(r))return"mortgaged";if(/\bswimming\s+pool\b|^pool$/.test(r))return"swimmingPool";if(/\btrampoline\b/.test(r))return"trampoline";if(/\bburglar\s+alarm\b|\bsecurity\s+alarm\b/.test(r))return"burglarAlarm";if(/\b(fire|smoke)\b.*\b(alarm|detector)\b/.test(r))return"fireSmokeAlarm";if(/\bfull[ -]?time\s+residents?\b|\bhousehold\s+residents?\b/.test(r))return"fullTimeResidents";if(/\bprior\s+(losses|claims)\b|\bloss\s+history\b|\bclaim\s+history\b/.test(r))return"priorLosses";if(/\b(loss|losses|claim|claims)\b/.test(r)&&/\b(past|last|within)\b.*\b5\b/.test(r))return"lossesPastFiveYears";if(/\bnumber\s+of\s+(losses|claims)\b|\b(loss|claim)\s+count\b/.test(r))return"lossCount";if(/\ball[ -]?peril\s+deductible\b|\bhome\s+deductible\b/.test(r))return"allPerilDeductible";if(/\bdwelling\b.*\b(cov(erage)?\s*a|amount|limit)\b|\bcoverage\s+a\b/.test(r))return"dwellingAmount";if(/\bpersonal\s+property\b|\bcoverage\s+c\b|\bcov\s*c\b/.test(r))return"personalProperty";if(/\bpersonal\s+liability\b|\bcoverage\s+e\b|\bcov\s*e\b/.test(r))return"personalLiability";if(/\bmedical\s+payments?\b|\bcoverage\s+f\b|\bcov\s*f\b/.test(r))return"medicalPayments";if(/\bcoverage\s+selections?\b|\bcoverage\s+summary\b/.test(r))return"coverageSelections";if(/\bproperty\s+information\b|\bproperty\s+details\b/.test(r))return"propertyInformation";if(/\b(lender|mortgagee)\s+name\b/.test(r))return"lenderName";if(/\b(loan|mortgage)\s+number\b/.test(r))return"loanNumber"}function VA(e,t,r){var Ye,Ja;const n=Dr(e,t);if(!n)return;const i=vt(e),a=Ga(e,t),s=(a==null?void 0:a.assetId)??e.assetId,o=s?oe(l.list("assets"),e.tenantId).find(te=>te.id===s):void 0,c={...(o==null?void 0:o.details)??{},...r.assetDetails??{},...(a==null?void 0:a.assetDetails)??{}},d=kt(t),m=d?{...r.publicFields??{},...(a==null?void 0:a.publicFields)??{}}:{},p=d?{...r.publicFieldEvidence??{},...(a==null?void 0:a.publicFieldEvidence)??{}}:{},u=(...te)=>{const ne=rn(c,te);if(ne){const ke=te.map(Re=>Ie(p,Re)).find(Boolean);if(!ke||He(ke)&&bi(t,ke)&&(!Mi(ke)||Mt(ke.sourceUrl,e,a)))return ne}return(()=>{const ke=rn(m,te);if(!ke)return;const Re=te.map(Be=>Ie(p,Be)).find(Be=>Be&&He(Be));return Re&&bi(t,Re)&&(!Mi(Re)||Mt(Re.sourceUrl,e,a))?ke:void 0})()},f=(...te)=>
105{const ne=new Set(te.map(Ce).filter(Boolean));for(const ke of[c,m])for(const[Re,Be]of Object.entries(ke)){if(!ne.has(Ce(Re)))continue;const Qt=ee(Be);if(!(!Qt||ja(Qt))){if(ke===m){const et=Ie(p,Re);if(!He(et)||Mi(et)&&!Mt(et==null?void 0:et.sourceUrl,e,a))continue}else{const et=Ie(p,Re);if(et&&(!He(et)||Mi(et)&&!Mt(et.sourceUrl,e,a)))continue}return Qt}}},g=(...te)=>{const ne=u(...te);if(ne){if(/^(yes|true|1|present|installed)$/i.test(ne))return"Yes";if(/^(no|false|0|none|not present)$/i.test(ne))return"No"}},y=(te,ne)=>{for(const ke of ne){const Re=ee(ke);if(!Re)continue;if(/^(none|no features?|not applicable|n\/a)$/i.test(Re))return"No";const Be=Re.match(new RegExp(`(?:^|[;,.\\n])\\s*(${te.source})\\s*[:=-]\\s*(yes|no|true|false|present|none)\\b`,"i"));if(Be)return/^(yes|true|present)$/i.test(Be[2])?"Yes":"No";if(new RegExp(`\\b(?:no|without|does not have|not equipped with)\\s+(?:an?\\s+)?(?:${te.source})\\b`,"i").test(Re))return"No";if(new RegExp(`\\b(?:has|with|includes?|equipped with)\\s+(?:an?\\s+)?(?:${te.source})\\b`,"i").test(Re)||te.test(Re))return"Yes"}},h=i&&"mailingAddress"in i?ee(i.mailingAddress):void 0,w=u("riskAddress","propertyAddress","primaryResidenceAddress","address")??(a==null?void 0:a.address)??r.address??h,T=Ho(w),_=oe(l.list("policies"),e.tenantId).filter(te=>te.customerId===e.customerId).filter(te=>!s||te.assetId===s).filter(te=>!["closed","declined","deposit_refunded"].includes(te.status)).sort((te,ne)=>+(ne.status==="bound")-+(te.status==="bound"))[0],A=(...te)=>{var ne;return(ne=_==null?void 0:_.coverages)==null?void 0:ne.find(ke=>te.some(Re=>Re.test(ke.name)))},v=te=>typeof te=="number"&&Number.isFinite(te)&&te>=0?`$${Math.round(te).toLocaleString()}`:void 0,S=(te,ne="limit")=>{var Be;if(!te)return;const ke=ne==="limit"?te.limit:te.deductible,Re=v(ke);return Re?(Be=t.options)!=null&&Be.length?Re:String(Math.round(ke??0)):ee(te.description)},C=A(/\bdwelling\b/i,/\bcoverage\s*a\b/i),k=A(/\bpersonal property\b/i,/\bcontents?\b/i,/\bcoverage\s*c\b/i),O=A(/\bpersonal liability\b/i,/^liability$/i,/\bcoverage\s*e\b/i),x=A(/\bmedical payments?\b/i,/\bmed pay\b/i,/\bcoverage\s*f\b/i),$=A(/\ball[ -]?peril\b/i,/\bdwelling\b/i,/\bhomeowners?\b/i),q=u("occupancy","occupancyType","propertyUse","primaryUse"),B=(()=>{if(q)return/tenant|rental/i.test(q)?"Tenant-Occupied Rental":/seasonal/i.test(q)?"Seasonal (< 6 months)":/secondary|vacation/i.test(q)?"Secondary/Vacation":/primary|owner occupied/i.test(q)?"Primary Residence":q})(),F=u("constructionType","construction","constructionClass","wallConstruction","exteriorConstruction","frameAndExterior","exteriorMaterial","exteriorMaterials","constructionMaterials","siding","cladding"),Y=u("foundationType","foundationDetails","foundation","basement","crawlSpace"),X=u("homeStyle","stories","numberOfStories","story","storyCount","structureType"),j=u("units","numberOfUnits","unitsWallHeight","propertyType","homeType","dwellingType","buildingType","landUse","useCode"),Q=u("roofMaterial","roofType","roofCovering","roof"),ae=u("heatingCoolingSystems","heatingCooling","hvac"),ue=u("electricalAndSafetySystems","electricalSafety","alarmSystems","protectiveDevices"),de=u("detachedStructuresAndRecreation","detachedStructures","poolTrampoline"),be=u("animalsAndLiabilityExposures","animals","liabilityExposures"),P=u("ownershipAndLien","ownershipLien","mortgageeInfo","loanDetails"),Z=f("lossHistory","losses","claims","claimsHistory"),le=((Ye=_==null?void 0:_.additionalInsureds)==null?void 0:Ye.find(te=>te.holderType==="mortgagee"))??((Ja=_==null?void 0:_.additionalInsureds)==null?void 0:Ja.find(te=>/mortgage|lender/i.test(`${te.relationship??""} ${te.notes??""}`))),Te=u("lenderName","mortgageeName","lienholderName")??ee(_==null?void 0:_.billingMortgagee)??(le==null?void 0:le.name),me=u("loanNumber","mortgageNumber","loanAccountNumber"),re=(()=>{const te=u("policyType","homePolicyType","productType");if(te)return te;if(/condo/i.test(q??""))return"Condo";if(/tenant|rental|dwelling fire/i.test(q??""))return"Dwelling Fire";if(e.assetType==="coastal_home")return"Homeowners"})(),ye=(()=>
105{if(Z)return/^(none|no|no losses?|no claims?|0)$/i.test(Z.trim())?"No":"Yes"})(),lr=(()=>{const ne=(u("lossCount","numberOfLosses","claimCount","numberOfClaims")??Z??"").match(/\b([0-9]+)\b/);if(!ne||Number(ne[1])<=0)return;const ke=Number(ne[1]);return ke>=3?"3+":String(ke)})(),En=(()=>{if(!X)return;if(/split/i.test(X))return"Split-level";const te=X.match(/\b(1\.5|1\.75|1|2|3)\b/);return te?Number(te[1])>=3?"3+":te[1]:X})(),jt=(()=>{if(!j)return;if(/single[ -]?family|one[ -]?family|detached (?:home|house)|residential single/i.test(j))return"1 (Single Family)";if(/duplex|two[ -]?family/i.test(j))return"2 (Duplex)";if(/triplex|three[ -]?family/i.test(j))return"3 (Triplex)";if(/fourplex|four[ -]?family/i.test(j))return"4 (Fourplex)";const te=j.match(/\b([1-4])\b/);return te?["","1 (Single Family)","2 (Duplex)","3 (Triplex)","4 (Fourplex)"][Number(te[1])]:j})(),je=(()=>{if(F)return/\b(brick|stone|masonry)\b/i.test(F)&&/\b(wood|vinyl|siding|frame)\b/i.test(F)||/brick veneer|masonry veneer/i.test(F)?"Masonry Veneer":/wood frame|\bframe\b/i.test(F)?"Frame":/masonry|concrete block|\bblock\b/i.test(F)?"Masonry":F})(),xt=g("swimmingPool","pool","hasPool")??y(/(?:swimming\s+)?pool/i,[de,be]),he=(()=>{if(Q)return/asphalt|composition|shingle/i.test(Q)?"Asphalt/Composition Shingle":/metal/i.test(Q)?"Metal":/slate/i.test(Q)?"Slate":/tile/i.test(Q)?"Tile":/flat|membrane|other/i.test(Q)?"Flat/Other":Q})(),ct=(()=>{var ke;const ne=u("heatingType","heatingFuel","heatType")??ae;if(ne)return/natural gas|\bgas\b/i.test(ne)?"Gas":/electric/i.test(ne)?"Electric":/propane/i.test(ne)?"Propane":/\boil\b/i.test(ne)?"Oil":(ke=t.options)!=null&&ke.includes("Other")?"Other":ne})(),Xe=[C?_e("Dwelling (Coverage A)",S(C)):void 0,k?_e("Personal property (Coverage C)",S(k)):void 0,O?_e("Personal liability (Coverage E)",S(O)):void 0,x?_e("Medical payments (Coverage F)",S(x)):void 0,$?_e("All-peril deductible",S($,"deductible")):void 0],Ur=[_e("Occupancy",q),_e("Year built",u("yearBuilt","builtYear","constructionYear")),_e("Square footage",u("squareFeet","squareFootage","sqft","livingArea")),_e("Construction",F),_e("Foundation",Y),_e("Stories",X),_e("Units",j),_e("Roof",Q)],Fe=[de,be,ue].filter(Boolean).join("; "),dr={clientFullName:r.contactName??(i==null?void 0:i.name),propertyAddress:w,streetAddress:T.street,city:T.city,state:T.state??e.state,zipCode:T.zip,policyType:re,occupancyType:B,occupancyAndFeatures:Cr([_e("Occupancy",q),_e("Features",Fe)]),yearBuilt:u("yearBuilt","builtYear","constructionYear","year_built"),squareFootage:u("squareFeet","squareFootage","sqft","livingArea","livingAreaSqFt"),roofYear:u("roofYear","roofLastReplaced","roofReplacementYear","roofAge"),constructionType:je,foundationType:Y,stories:En,units:jt,roofType:he,heatingType:ct,centralAc:g("centralAc","centralAir","airConditioning")??y(/central\s+(?:ac|a\/c|air conditioning|air)/i,[ae]),deadbolts:g("deadbolts","deadboltsAllExteriorDoors")??y(/deadbolts?/i,[ue]),divingBoard:g("divingBoard","hasDivingBoard")??y(/diving\s+board/i,[de,be])??(xt==="No"?"No":void 0),businessUse:g("businessUse","businessRunFromHome","homeBusiness")??y(/(?:home\s+business|business\s+(?:use|run from home))/i,[be]),gatedCommunity:g("gatedCommunity")??y(/gated\s+community/i,[ue,de]),dogOnPremises:g("dogOnPremises","hasDog","dogs")??y(/dogs?/i,[be]),dogBreed:u("dogBreed","breed"),fullyFenced:g("fullyFenced","fencedYard")??y(/(?:fully\s+)?fenced(?:\s+yard|\s+property)?/i,[be,de]),fireSprinkler:g("fireSprinkler","fireSprinklerSystem")??y(/fire\s+sprinklers?(?:\s+system)?/i,[ue]),mortgaged:g("mortgaged","hasMortgage")??(Te||P?"Yes":void 0),swimmingPool:xt,trampoline:g("trampoline","hasTrampoline")??y(/trampoline/i,[de,be]),burglarAlarm:u("burglarAlarm","securityAlarm")??(y(/(?:burglar|security)\s+alarm/i,[ue])==="Yes"?"Central Station Monitored":void 0),fireSmokeAlarm:u("fireSmokeAlarm","smokeAlarm","smokeDetectors")??(y(/(?:fire|smoke)\s+(?:alarm|detectors?)/i,[ue])==="Yes"?"Smoke Detectors Only":void 0),fullTimeResidents:u("fullTimeResidents","numberOfResidents","householdResidents"),lossesPastFiveYears:ye,lossCount:lr,priorLosses:ye==="No"?"No losses in the past 5 years":Z,allPerilDeductible:S($,"deductible")??u("allPerilDeductible","homeDeductible"),dwellingAmount:S(C)??u("dwellingAmount","coverageA","dwellingLimit"),personalProperty:S(k)??u("personalProperty","coverageC","personalPropertyLimit"),personalLiability:S(O)??u("personalLiability","coverageE","liabilityLimit"),medicalPayments:S(x)??u("medicalPayments","coverageF","medicalPaymentsLimit"),coverageSelections:Cr(Xe),propertyInformation:Cr(Ur),lenderName:Te,loanNumber:me};return ee(dr[n])||void 0}function zo(e,t){var o;
105if(Or(t.session,e)&&t.session)return UA(t.session,e,t);if(t.session&&Dr(t.session,e)){const c=VA(t.session,e,t);if(c)return c}const n=BA(e,t);if(n)return n;const i=Ra(e,t.assetDetails);if(i&&qr(e,i.key,i.value)){const c=Ie(t.publicFieldEvidence,i.key);return c&&!He(c)?void 0:i.value}const a=Ra(e,t.publicFields);if(a&&qr(e,a.key,a.value)&&He(Ie(t.publicFieldEvidence,a.key)))return a.value;const s=t.session&&jA(t.session,e);if(s)return s;if(t.address&&Pp(e)&&Ge(t.address))return t.address.trim();if((o=t.contactName)!=null&&o.trim()&&qp(e))return jc(e)&&!Ha(t.contactName)?void 0:t.contactName.trim();if(typeof t.estimatedValue=="number"&&Number.isFinite(t.estimatedValue)&&t.estimatedValue>0&&Np(e))return String(t.estimatedValue)}function jA(e,t){var o,c;if(!e.customerId&&!e.prospectId)return;const r=ve(t.label),n=Ce(t.acordFieldKey??""),i=2160*60*60*1e3,a=Date.now(),s=l.list("quotingSessions").filter(d=>{if(d.id===e.id||d.lineOfBusiness!==e.lineOfBusiness||!(e.customerId?d.customerId===e.customerId:d.prospectId===e.prospectId)||e.assetId&&d.assetId!==e.assetId||!e.assetId&&d.assetId)return!1;const p=Date.parse(d.replyReceivedAt??d.updatedAt??d.createdAt);return Number.isFinite(p)&&a-p<=i}).sort((d,m)=>d.updatedAt<m.updatedAt?1:-1);for(const d of s){const m=(d.questionnaireQuestions??[]).find(f=>{if(ve(f.label)===r)return!0;const g=Ce(f.acordFieldKey??"");return!!(n&&g===n)});if(!m)continue;const p=(o=d.questionnaireResponseMeta)==null?void 0:o[m.id];if(!p||p.updatedByRole==="ai")continue;const u=ee((c=d.questionnaireResponses)==null?void 0:c[m.id]);if(ar(t,u)&&Vt(t,u))return Qa(t,u)}}function Od(e,t){const r=[...t.map(n=>{var i;return(i=e.assetDetails)==null?void 0:i[n]}),...(e.selectedAssetMappings??[]).flatMap(n=>[...t.map(i=>{var a;return(a=n.assetDetails)==null?void 0:a[i]}),...t.map(i=>{var a;return(a=n.publicFields)==null?void 0:a[i]})])];return Array.from(new Set(r.map(n=>ee(n).toLowerCase()).filter(Boolean)))}function QA(e,t){if(e.number!==t.number||e.zip&&t.zip&&e.zip!==t.zip||e.state&&t.state&&e.state!==t.state)return!1;const r=new Set(e.streetTokens),n=new Set(t.streetTokens),i=e.streetTokens.filter(a=>n.has(a));if(i.length===0||i.length<Math.min(r.size,n.size))return!1;if(e.cityTokens.length>0&&t.cityTokens.length>0){const a=new Set(t.cityTokens);if(!e.cityTokens.some(s=>a.has(s)))return!1}return!0}function HA(e,t){const r=new Set([e.assetId,...(e.selectedAssetMappings??[]).map(d=>d.assetId)].filter(d=>!!d)),n=new Set([t.assetId,...(t.selectedAssetMappings??[]).map(d=>d.assetId)].filter(d=>!!d));if([...r].some(d=>n.has(d)))return!0;const i=["vin","hullId","hin","serialNumber","registrationNumber"],a=new Set(Od(e,i));if(Od(t,i).some(d=>a.has(d)))return!0;const o=jo(e).map(Vo).filter(d=>!!d),c=jo(t).map(Vo).filter(d=>!!d);return o.some(d=>c.some(m=>QA(d,m)))}function zA(e,t,r,n){if(ve(r.label)===ve(n.label))return!0;const i=Ce(r.acordFieldKey??""),a=Ce(n.acordFieldKey??"");if(i&&i===a)return!0;const s=Dr(e,r),o=Dr(t,n);if(s&&s===o)return!0;const c=Or(e,r),d=Or(t,n);return!!(c&&c===d)}function GA(e,t){var a,s;if(!e.customerId&&!e.prospectId)return;const r=4320*60*60*1e3,n=Date.now(),i=l.list("quotingSessions").filter(o=>{if(o.id===e.id||o.lineOfBusiness!==e.lineOfBusiness||!(e.customerId?o.customerId===e.customerId:o.prospectId===e.prospectId)||!HA(e,o))return!1;const d=Date.parse(o.personalCarrierQuestionMappingCompletedAt??o.updatedAt??o.createdAt);return Number.isFinite(d)&&n-d<=r}).sort((o,c)=>o.updatedAt<c.updatedAt?1:-1);for(const o of i){const c=(o.questionnaireQuestions??[]).find(u=>zA(e,o,t,u));if(!c)continue;const d=(a=o.questionnaireResponseMeta)==null?void 0:a[c.id];if(!d||d.updatedByRole!=="ai"||d.reviewStatus==="conflict"||d.conflictReason||new Set(["model_estimate","unknown"]).has(String(d.sourceKind??"")))continue;const m=(s=o.questionnaireResponses)==null?void 0:s[c.id],p=bt(t,m)??Qa(t,m);if(Vt(t,p)&&Vc(t,p,d,e))return{value:p,meta:{...d,updatedAt:new Date().toISOString(),sourceNotes:[d.sourceNotes,"Reused from a prior source-backed mapping for this exact client risk;
105 no new model decision was required."].filter(Boolean).join(" ")}}}}function Op(e){const t={},r={};e.questions.forEach(i=>{const a=zo(i,e);if(!a||!ar(i,a))return;const s=xp(i,e.publicFieldEvidence),o=new Set(["web_search","public_web","government_api","commercial_provider","imagery_vision"]).has((s==null?void 0:s.sourceKind)??"unknown");let c=s;if(o){const d=e.session?{...e.session,publicFields:{},publicFieldEvidence:{},selectedAssetMappings:(e.session.selectedAssetMappings??[]).map(f=>({...f,publicFields:{},publicFieldEvidence:{}}))}:void 0,m=zo(i,{...e,session:d,publicFields:{},publicFieldEvidence:{}}),p=bt(i,m)??ee(m),u=bt(i,a)??ee(a);if(p&&p===u&&!kt(i))c=void 0;else if(!kt(i)||!bi(i,s)||!An(s==null?void 0:s.sourceUrl)||!Mt(s==null?void 0:s.sourceUrl,e.session,e.session?Ga(e.session,i):void 0))return}t[i.id]=Qa(i,a),c=kp(i,c),r[i.id]=za(e.updatedAt,c)});const n=e.questions.filter(i=>{var a;return i.required&&!((a=t[i.id])!=null&&a.trim())}).map(i=>i.label);return{questionnaireResponses:Object.keys(t).length>0?t:void 0,questionnaireResponseMeta:Object.keys(r).length>0?r:void 0,missingFields:n}}function Ea(e){var g;const t=Op({session:e.session,questions:e.questions,contactName:e.contactName,contactEmail:e.contactEmail,contactPhone:e.contactPhone,businessName:e.businessName,address:e.address,estimatedValue:e.estimatedValue,assetDetails:e.assetDetails,publicFields:e.publicFields,publicFieldEvidence:e.publicFieldEvidence,updatedAt:e.updatedAt}),r=new Set(e.questions.map(y=>y.id)),n=new Map(e.questions.map(y=>[y.id,y])),i=t.questionnaireResponses??{},a=e.session.questionnaireResponseMeta??{},s=Object.fromEntries(Object.entries(e.session.questionnaireResponses??{}).filter(([y,h])=>{if(!r.has(y))return!1;const w=n.get(y);if(!w||!Vt(w,h))return!1;const T=a[y];if((T==null?void 0:T.updatedByRole)!=="ai")return!0;if(!Vc(w,h,T,e.session)||i[y])return!1;const b=ee(h);if(new Set(["agent_seed","client_intake"]).has(String((T==null?void 0:T.sourceKind)??""))){const A=zo(w,{...e,publicFields:{},publicFieldEvidence:{}}),v=bt(w,A)??ee(A),S=bt(w,b)??b;if(!v||v!==S)return!1}const _=Or(e.session,w);return _&&!He(Ie(e.publicFieldEvidence,_))||FA(w,e.publicFieldEvidence)||Bc(b)||ja(b)||!ar(w,b)?!1:!!(xp(w,e.publicFieldEvidence)||lf(T))})),o=new Set(Object.keys(s)),c=Object.fromEntries(Object.entries(e.session.questionnaireResponseMeta??{}).filter(([y])=>o.has(y))),d={...t.questionnaireResponses??{},...s},m={...t.questionnaireResponseMeta??{},...c};e.questions.forEach(y=>{if(ee(d[y.id]))return;const h=GA(e.session,y);h&&(d[y.id]=h.value,m[y.id]={...h.meta,updatedAt:e.updatedAt})});const p=e.questions.find(y=>Dr(e.session,y)==="swimmingPool"),u=e.questions.find(y=>Dr(e.session,y)==="divingBoard");if(p&&u&&!ee(d[u.id])&&bt(p,d[p.id])==="No"){const y=bt(u,"No")??"No";ar(u,y)&&(d[u.id]=y,m[u.id]={...m[p.id]??za(e.updatedAt),updatedAt:e.updatedAt,updatedById:"ai",updatedByName:"QuoteX AI",updatedByRole:"ai",sourceNotes:[(g=m[p.id])==null?void 0:g.sourceNotes,"Derived deterministically: a property without a swimming pool cannot have a pool diving board."].filter(Boolean).join(" ")})}const f=e.questions.filter(y=>{var h;return y.required&&!((h=d[y.id])!=null&&h.trim())}).map(y=>y.label);return{questionnaireResponses:d,questionnaireResponseMeta:m,missingFields:f}}function Dd(e){const t=new Set,r=[];return e.forEach(n=>{const i=ve(n.label);!i||t.has(i)||(t.add(i),r.push(n))}),r}function WA(e){const t=e.trim();if(!t)return"";if(/\s|\/|[()]/.test(t))return t;const r=t.replace(/[_-]+/g," ").replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().trim();return r?r.charAt(0).toUpperCase()+r.slice(1):t}function Dp(e){const t=(e.categories??[]).flatMap(Wm),r=t.length>0?(e.existingQuestions??[]).filter(s=>!!(s.sourceDocumentId||s.carrierId)):e.existingQuestions??[];if(t.length>0)return Dd([...t,...r]);const n=new Set(["categoryid","categorylabel","lineofbusiness","assetidentifier","assetid","contactname","customerid","prospectid"]),i=[...Object.keys(e.publicFields),...e.missingFields].filter(s=>!n.has(Ce(s))).map(WA).filter(Boolean),a=i.length>0?xm({assetType:e.assetType,missingFields:i}):[];return Dd([...a,...r])}function KA(e){const t=z.categories.listActiveForTenant(e.tenantId).filter(c=>c.lineOfBusiness==="personal"),r=z.categories.listActive().filter(c=>c.lineOfBusiness==="personal"),n=new Set([e.categoryId,...e.categoryIds??[],...(e.selectedAssetMappings??[]).map(c=>c.categoryId)].filter(c=>!!c)),i=new Set([e.categoryLabel,...e.categoryLabels??[],...(e.selectedAssetMappings??[]).map(c=>c.categoryLabel)].filter(c=>!!c).map(ve)),a=r.filter(c=>n.has(c.id)||i.has(ve(c.label)));if(a.length>0)return a;const s=t.find(c=>c.assetType===e.assetType);if(s)return[s];const o=r.find(c=>c.assetType===e.assetType);return o?[o]:[]}function Ps(e){const t=e.categoryId?z.categories.get(e.categoryId):void 0;if((t==null?void 0:t.lineOfBusiness)==="personal")return t;const r=ve(e.categoryLabel??""),n=z.categories.listActiveForTenant(e.tenantId).filter(a=>a.lineOfBusiness==="personal"),i=z.categories.listActive().filter(a=>a.lineOfBusiness==="personal");if(r){const a=[...n,...i].find(s=>ve(s.label)===r);if(a)return a}return n.find(a=>a.assetType===e.assetType)??i.find(a=>a.assetType===e.assetType)}function YA(e,t){const r=e.questionnaireQuestions??[],n=e.questionnaireResponses??{},i=e.questionnaireResponseMeta??{},a={...n},s={...i};return t.forEach(o=>{if(ee(a[o.id]))return;const c=Ce(o.acordFieldKey??""),d=ve(o.label),m=r.find(u=>{const f=Ce(u.acordFieldKey??"");return!!(c&&f===c||ve(u.label)===d)});if(!m)return;const p=ee(n[m.id]);!p||!Vt(o,p)||(a[o.id]=p,i[m.id]&&(s[o.id]=i[m.id]))}),{...e,questionnaireResponses:a,questionnaireResponseMeta:s}}function oi(e){var r,n,i,a;return[(r=e.assetDetails)==null?void 0:r.propertyAddress,(n=e.assetDetails)==null?void 0:n.riskAddress,(i=e.assetDetails)==null?void 0:i.primaryResidenceAddress,(a=e.assetDetails)==null?void 0:a.address,typeof e.publicFields.address=="str
105ing"?e.publicFields.address:void 0,...(e.selectedAssetMappings??[]).flatMap(s=>{var o,c,d,m;return[s.address,(o=s.assetDetails)==null?void 0:o.propertyAddress,(c=s.assetDetails)==null?void 0:c.riskAddress,(d=s.assetDetails)==null?void 0:d.primaryResidenceAddress,(m=s.assetDetails)==null?void 0:m.address]})].find(s=>!!(s!=null&&s.trim())&&Ge(s))}const Lp=16;function Mp(e){const t=e.quoteRequestId?l.list("quoteRequests").find(y=>y.id===e.quoteRequestId&&y.tenantId===e.tenantId&&y.customerId===e.customerId):void 0;if((t==null?void 0:t.customerQuestions)!==void 0&&!e.carrierQuestionDiscoveryCompletedAt||e.lineOfBusiness==="commercial")return e;if(e.carrierQuestionDiscoveryCompletedAt){const y=e.questionnaireQuestions??[],h=y.filter(x=>{const $=x.carrierProvenance;return Array.isArray($)&&$.length>0}).map(x=>x.section===Po?x:{...x,section:Po}),w=new Set(h.map(x=>x.id)),T=new Map(h.map(x=>[x.id,x])),b=Object.fromEntries(Object.entries(e.questionnaireResponses??{}).filter(([x,$])=>{var B;const q=T.get(x);return!!(w.has(x)&&q&&Vc(q,$,(B=e.questionnaireResponseMeta)==null?void 0:B[x],e))})),_=Object.fromEntries(Object.entries(e.questionnaireResponseMeta??{}).filter(([x])=>Object.prototype.hasOwnProperty.call(b,x)).map(([x,$])=>[x,$.updatedByRole==="ai"&&new Set(["agent_seed","client_intake","carrier_api"]).has(String($.sourceKind??""))?{...$,sourceUrl:void 0}:$])),A=Object.keys(e.questionnaireResponses??{}).some(x=>{var $,q;return w.has(x)&&((q=($=e.questionnaireResponseMeta)==null?void 0:$[x])==null?void 0:q.updatedByRole)==="ai"&&!Object.prototype.hasOwnProperty.call(b,x)}),v=!!(e.personalCarrierQuestionMappingCompletedAt&&e.personalCarrierQuestionMappingRecipeVersion!==Lp),S=!!(e.personalCarrierQuestionMappingCompletedAt&&(A||v)),C=h.length!==y.length||h.some((x,$)=>x!==y[$]),k=Object.keys(b).length!==Object.keys(e.questionnaireResponses??{}).filter(x=>w.has(x)).length||Object.entries(b).some(([x,$])=>{var q;return((q=e.questionnaireResponses)==null?void 0:q[x])!==$}),O=Object.entries(_).some(([x,$])=>{var q,B;return((B=(q=e.questionnaireResponseMeta)==null?void 0:q[x])==null?void 0:B.sourceUrl)!==$.sourceUrl});return!C&&!k&&!O&&!S?e:{...e,questionnaireQuestions:h,questionnaireResponses:b,questionnaireResponseMeta:_,personalAiMappingDeferredUntilCarrierQuestions:S?!0:e.personalAiMappingDeferredUntilCarrierQuestions,personalCarrierQuestionMappingCompletedAt:S?void 0:e.personalCarrierQuestionMappingCompletedAt,personalCarrierQuestionMappingRecipeVersion:S?void 0:e.personalCarrierQuestionMappingRecipeVersion,missingFields:h.filter(x=>x.required&&!(b[x.id]??"").trim()).map(x=>x.label)}}const r=KA(e),n=Dp({assetType:e.assetType,categories:r,publicFields:e.publicFields,missingFields:e.missingFields,existingQuestions:e.questionnaireQuestions});if(n.length===0)return e;const i=e.questionnaireQuestions??[],a=vt(e),s=YA(e,n),o=Ea({session:s,questions:n,contactName:a==null?void 0:a.name,contactEmail:a==null?void 0:a.email,contactPhone:a==null?void 0:a.phone,businessName:a&&"businessName"in a?a.businessName:void 0,address:oi(e),estimatedValue:e.estimatedValue,assetDetails:e.assetDetails,publicFields:e.publicFields,publicFieldEvidence:e.publicFieldEvidence,updatedAt:e.updatedAt}),c=o.questionnaireResponses,d=o.questionnaireResponseMeta,m=o.missingFields,p=e.questionnaireResponses??{},u=i.length===n.length&&n.every(y=>i.some(h=>h.id===y.id)),f=n.some(y=>ee(p[y.id])!==ee(c[y.id])),g=e.missingFields.length!==m.length||e.missingFields.some((y,h)=>y!==m[h]);return u&&!f&&!g?e:{...e,questionnaireQuestions:n,questionnaireResponses:c,questionnaireResponseMeta:d,missingFields:m}}const JA={timesheetFrequency:"weekly",dueWeekday:5,dueDayOfMonth:28,reminderTime:"09:00"};function Ns(e){return l.list("users").filter(t=>t.tenantId===e&&t.active&&nt(t.role)).map(t=>t.id)}function ZA(e){const t=oa(e);return`Your timesheet for ${Le.date(t.periodStart)} - ${Le.date(t.periodEnd)} is due ${Le.date(t.dueDate)} at ${e.reminderTime}.`}function Ld(e){return Number(e.reduce((t,r)=>t+Number(r.hours||0),0).toFixed(2))}function yt(e){const t=new Date(e);return t.setHours(0,0,0,0),t.toISOString()}function Dn(e,t){const r=new Date(e);return r.setDate(r.getDate()+t),r}function Md(e,t,r){return Math.min(r,new Date(e,t+1,0).getDate())}function oa(e,t=new Date){const r=new Date(t);if(r.setHours(0,0,0,0),e.timesheetFrequency==="monthly"){const m=new Date(r.getFullYear(),r.getMonth(),1),p=new Date(r.getFullYear(),r.getMonth()+1,0),u=new Date(r.getFullYear(),r.getMonth(),Md(r.getFullYear(),r.getMonth(),e.dueDayOfMonth));return{periodStart:yt(m),periodEnd:yt(p),dueDate:yt(u)}}if(e.timesheetFrequency==="semi_monthly"){const m=r.getDate()<=15,p=new Date(r.getFullYear(),r.getMonth(),m?1:16),u=m?new Date(r.getFullYear(),r.getMonth(),15):new Date(r.getFullYear(),r.getMonth()+1,0),f=m?new Date(r.getFullYear(),r.getMonth(),15):new Date(r.getFullYear(),r.getMonth(),Md(r.getFullYear(),r.getMonth(),e.dueDayOfMonth));return{periodStart:yt(p),periodEnd:yt(u),dueDate:yt(f)}}const n=(r.getDay()+6)%7,i=Dn(r,-n),a=e.timesheetFrequency==="bi_weekly"?2:1;let s=i;if(a===2){const m=new Date(2026,0,5);
105m.setHours(0,0,0,0),Math.floor((i.getTime()-m.getTime())/(7*864e5))%2!==0&&(s=Dn(i,-7))}const o=Dn(s,a*7-1),c=a===2?Dn(s,7):s,d=Dn(c,(e.dueWeekday+6)%7);return{periodStart:yt(s),periodEnd:yt(o),dueDate:yt(d)}}function XA(e,t=new Date){return new Date(yt(new Date(e))).getTime()<=new Date(yt(t)).getTime()}const $p="__quotex_forbidden_tenant__",Fp=new Set(["master_admin"]);function $d(e,t){if(e!=="master_admin")return;if(l.list("users").find(n=>$u(n)&&n.id!==t))throw new Error("master_admin_limit_reached")}function Bp(){const e=Rr();return!(e!=null&&e.tenantId)||Fp.has(e.role)?null:{tenantId:e.tenantId,userId:e.userId}}function eC(e){const t=Bp();return t?e==null?t.tenantId:e===t.tenantId?e:$p:e}function qs(e){const t=Bp();return!t||e===t.tenantId}const oe=(e,t)=>{const r=eC(t);return r===$p?[]:r==null?e:e.filter(n=>n.tenantId===r)};function Ln(e){return(e??"").trim().toLowerCase().replace(/\s+/g,"")}function tC(e){return e?nt(e.role)?"staff":e.role==="customer"?"customer":"unknown":"unknown"}function sr(e){return Array.from(new Set([e.assignedAgentId,...e.additionalAgentIds??[],e.assignedCsrId,...e.additionalCsrIds??[]].filter(t=>!!t)))}function $i(e,t){return!!t&&sr(e).includes(t)}function xa(e){return e?sr(e).filter(t=>{const r=l.list("users").find(n=>n.id===t&&n.tenantId===e.tenantId);return!!r&&r.active!==!1&&r.staffAccessStatus!=="banned"&&r.staffAccessStatus!=="deleted"&&kr(r.role)}):[]}function ca(e){return xa(e)[0]}function gn(e){const t=e.customerId?l.list("customers").find(r=>r.id===e.customerId&&r.tenantId===e.tenantId):e.prospectId?l.list("prospects").find(r=>r.id===e.prospectId&&r.tenantId===e.tenantId):void 0;return xa(t)}function rC(e){return gn(e)[0]}function Fi(e){return sr(e).length>0}function nC(e,t){const r=l.list("users").filter(i=>i.tenantId===e&&i.active!==!1&&i.role==="agent"&&i.staffAccessStatus!=="banned"&&i.staffAccessStatus!=="deleted"),n=r.filter(i=>i.lineOfBusiness===t);return(n.length>0?n:r.filter(i=>!i.lineOfBusiness)).sort((i,a)=>i.name.localeCompare(a.name))}function Go(e){return e.lineOfBusiness==="commercial"||e.lineOfBusiness==="personal"?e.lineOfBusiness:void 0}function iC(e,t,r){const n=s=>s.tenantId===t&&!s.archived&&Go(s)===r&&sr(s).includes(e),i=l.list("customers").filter(n).length,a=l.list("prospects").filter(s=>n(s)&&s.status!=="converted").length;return i+a}function Fd(e,t){var r;if(t)return(r=nC(e,t).map(n=>({agent:n,load:iC(n.id,e,t),createdAt:n.createdAt})).sort((n,i)=>n.load-i.load||n.createdAt.localeCompare(i.createdAt)||n.agent.name.localeCompare(i.agent.name))[0])==null?void 0:r.agent}function Os(e){const t=l.list("claims").some(n=>n.id!==e.id&&n.policyId===e.policyId&&n.status!=="closed"),r=e.status==="closed"&&!t?"claim_closed":"claim_opened";l.update("policies",e.policyId,{status:r})}function aC(e){const t=e.toLowerCase();return/(cancel|remove|drop|terminate)\s+(my\s+)?(policy|coverage)/.test(t)?"cancellation":/\b(limit|coverage)\b.*\b(increase|raise|bump|higher|more|decrease|lower|reduce)\b/.test(t)||/\b(increase|raise|bump|lower|reduce|decrease)\b.*\b(limit|coverage)\b/.test(t)||/\$\d/.test(t)&&/\b(limit|coverage)\b/.test(t)?"coverage_limit":/\b(add|additional named insured|named insured|spouse|husband|wife|driver|partner)\b/.test(t)?"named_insured":/\b(address|moved|moving|new home|garaging)\b/.test(t)?"address":/\b(usage|commute|pleasure|daily|business use)\b/.test(t)?"usage":/\bdeductible\b/.test(t)?"deductible":"general"}function Ds(e){switch(e){case"coverage_limit":return"coverage limit change";case"named_insured":return"add named insured / driver";case"address":return"address change";case"usage":return"usage change";case"deductible":return"deductible change";case"cancellation":return"cancellation request";case"general":return"general edit request"}}function sC(e,t){const r=t.length>140?`${t.slice(0,140)}…`:t;switch(e){case"coverage_limit":return"It looks like you'd like to adjust your coverage limit — I'll pull the current declarations and run new numbers with the carrier.";case"named_insured":return"It looks like you'd like to add a named insured or driver — I'll send over a short questionnaire so the carrier can underwrite the change.";case"address":return"It looks like there's an address change — I'll need a few details (move-in date, the new garaging address, and any updated alarm / mitigation info) to update the carrier file.";case"usage":return"It looks like you'd like to change how the asset is used — usage changes can affect both eligibility and rate, so I'll route this through the underwriter.";case"deductible":return"It looks like you'd like to adjust your deductible — I'll quote a couple of options so you can see how each one moves your premium.";case"cancellation":return"Heard you on the cancellation — before we file anything I want to make sure we explore alternatives (e.g. lowering coverage, switching carriers) so you're not leaving money on the table.";case"general":return`Here's what you shared: "${r}" — I'll review and circle back with what we need from you and what the carrier will require.`}}function oC(e){switch(e){case"coverage_limit":return["I'll review your current declarations and prepare a coverage comparison","Expect a follow-up within one business day with the new premium impact","If you have a target limit in mind, reply with the number so I can run that scenario too"];case"named_insured":return["I'll send a short underwriting form for the new person (DOB, license #, driving history if applicable)","We'll need a couple of business days for the carrier to approve the change","Coverage on the new person starts only after the carrier issues a confirmation"];case"address":return["Please confirm the new garaging address and move-in date","Send any updated wind-mitigation / 4-point / alarm certificates if you have them","I'll re-rate with the new ZIP and let you know if the premium moves"];case"usage":return["Confirm the new usage type (pleasure / commute / collector / commercial)","Estimate annual mileage if it's a vehicle, or hours-on-water if it's a vessel","I'll route to the carrier for re-underwriting — most usage changes turn around in 2–3 business days"];case"deductible":return["I'll quote your policy at the current deductible plus two alternates (e.g. $1k, $2.5k, $5k)","Reply with which option you'd like and I'll endorse it on the policy","Most endorsements take effect the day after carrier approval"];case"cancellation":return["Before we file, I'd like a quick call to walk through why — sometimes there's a different fit that keeps you covered","If you still want to cancel, I'll send the carrier's cancellation form for your signature","Any earned-but-unbilled premium gets refunded within 30 days of the effective cancellation date"];case"general":return["I'll review the specifics and reply with what we need from you","If documents are required from the carrier side, I'll attach them in the next message","Expect a follow-up within one business day"]}}function cC(e){const t=(e.body??"").toLowerCase(),r=e.topic;return["asap","urgent","emergency","right now","today","immediately","accident","crash","totaled","total loss","flood","fire","broken into","stolen","theft","hit b
105y","lawsuit","served","subpoena","lien","lapse","lapsed","uninsured","nsf","bounced","declined card","non payment","non-payment","non-renewed"].some(i=>t.includes(i))?{severity:"urgent",reason:"AI detected time-sensitive language (loss, lapse, or money-at-risk)."}:r==="cancellation_request"||e.classification==="cancellation"||r==="claim_filed"||r==="payment_issue"||r==="coverage_gap"?{severity:"urgent",reason:"Topic risks loss of coverage or money already at stake."}:r==="claim_status"||r==="renewal_approaching"||r==="coverage_change"||r==="endorsement_request"||r==="policy_edit_request"?{severity:"warning",reason:"Carrier-side change — review and turn around within the SLA."}:r==="document_upload"?{severity:"info",reason:"Document received. Review when convenient."}:{severity:"info",reason:"General request — no time-sensitive signals detected."}}function Bi(e){const t=e.match(/\b([A-Z]{2})\b/);return t==null?void 0:t[1]}function Mn(e){return Array.isArray(e)?e:e&&typeof e=="object"?Object.entries(e).map(([t,r],n)=>({id:`goal_legacy_${t}_${n}`,metric:t,target:Number((r==null?void 0:r.target)??0),period:(r==null?void 0:r.period)??"monthly",dueDate:r==null?void 0:r.dueDate,scope:"company",updatedAt:(r==null?void 0:r.updatedAt)??I()})):[]}function lC(e,t){const r=new Date(e).getTime(),n=t.pattern==="daily"?1:t.pattern==="weekly"?7:t.pattern==="biweekly"?14:t.pattern==="monthly"?30:Math.max(1,t.intervalDays??1),i=r+n*24*60*60*1e3;return t.endsAt&&i>new Date(t.endsAt).getTime()?null:new Date(i).toISOString()}function Bd(e,t,r,n,i){if(e!=="email"||t!=="outbound"||!n||i==="provider_sync")return r;const a=l.list("users").find(d=>d.id===n);if(!a)return r;const s=l.list("agencies").find(d=>d.id===a.tenantId),o=s!=null&&s.logoUrl?{name:`${s.name} logo`,dataUrl:s.logoUrl}:null,c=dw(a,o);return uw(r,c)}function Pe(e){var i,a;const t=(e??"").trim();if(!t)return"";const r=((i=t.match(/<([^>]+)>/))==null?void 0:i[1])??t;return(((a=r.match(/[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}/i))==null?void 0:a[0])??r).trim().toLowerCase()}function nn(e){if(!e)return{};const t=l.list("connectedMailboxes").find(i=>i.ownerType==="staff"&&i.userId===e);if(t)return{account:t.address,provider:t.provider,connectionId:t.id,status:t.status};const r=l.list("users").find(i=>i.id===e);if(!r)return{};const n=r.businessEmail??r.email;return{account:n,provider:r.mailProvider??rr(n),status:"needs_auth"}}function $n(e){const t=l.list("agencies").find(a=>a.id===e),r=Pe(t==null?void 0:t.contactEmail),n=l.list("connectedMailboxes").find(a=>a.tenantId===e&&a.ownerType==="agency_marketing"&&a.status!=="disabled"),i=Pe(n==null?void 0:n.address);return{fromName:(t==null?void 0:t.name.trim())||(n==null?void 0:n.displayName)||"Your Insurance Concierge",fromEmail:i||r||void 0,provider:(n==null?void 0:n.provider)??(i||r?rr(i||r):void 0),connectionId:n==null?void 0:n.id,status:(n==null?void 0:n.status)??(r?"needs_auth":void 0)}}function Jr(e){e&&l.update("connectedMailboxes",e,{lastSendAt:I(),updatedAt:I()})}function dC(e){const t=Pe(e.externalRecipientEmail);if(t)return[t];if(e.customerId){const r=l.list("customers").find(n=>n.id===e.customerId);return r!=null&&r.email?[Pe(r.email)]:[]}if(e.prospectId){const r=l.list("prospects").find(n=>n.id===e.prospectId);return r!=null&&r.email?[Pe(r.email)]:[]}if(e.carrierContactId){const r=l.list("carrierContacts").find(n=>n.id===e.carrierContactId);return r!=null&&r.email?[Pe(r.email)]:[]}return[]}function uC(e){var i,a;if(e.channel!=="email"||e.direction!=="outbound"||e.mailboxOrigin==="provider_sync")return null;const t=dC(e).filter(Boolean),r=I(),n=t.length>0?"queued":"failed";return{id:N("outbox"),tenantId:e.tenantId,communicationId:e.id,mailboxConnectionId:e.mailboxConnectionId,mailboxAccount:e.mailboxAccount,mailboxProvider:e.mailboxProvider,to:t,cc:e.cc,bcc:e.bcc,subject:e.subject,body:((i=e.bodyHtml)==null?void 0:i.trim())||e.body,bodyFormat:(a=e.bodyHtml)!=null&&a.trim()?"html":"plain",replyToMessageIdHeader:e.inReplyToHeader,references:e.references,externalThreadId:e.externalThreadId,attachments:e.attachments,replyContext:e.carrierContactId||e.carrierSubmissionId?{c
105ommunicationId:e.id,threadId:e.threadId,customerId:e.customerId,prospectId:e.prospectId,carrierContactId:e.carrierContactId,carrierSubmissionId:e.carrierSubmissionId}:void 0,idempotencyKey:`communication:${e.tenantId}:${e.id}`,status:n,attemptCount:0,lastError:n==="failed"?"No recipient email address was available.":void 0,createdAt:r,updatedAt:r,createdById:e.createdById}}function Sr(e,t,r){const n={deliveryStatus:t};r!=null&&r.externalMessageId&&(n.externalMessageId=r.externalMessageId),r!=null&&r.externalThreadId&&(n.externalThreadId=r.externalThreadId),r!=null&&r.externalUrl&&(n.externalUrl=r.externalUrl),r!=null&&r.connectionId&&(n.mailboxConnectionId=r.connectionId),r!=null&&r.mailboxAccount&&(n.mailboxAccount=r.mailboxAccount),(r==null?void 0:r.provider)==="google"&&(n.mailboxProvider="gmail"),(r==null?void 0:r.provider)==="microsoft"&&(n.mailboxProvider="outlook");const i=(r==null?void 0:r.rfc822MessageId)??(r==null?void 0:r.messageIdHeader);i&&(n.rfc822MessageId=i,n.messageIdHeader=i),l.update("communications",e.communicationId,n)}function mC(e){if(e.direction!=="outbound"||!e.externalMessageId)return;const t=l.list("mailboxOutbox").find(r=>r.tenantId===e.tenantId&&r.status!=="sent"&&(e.externalMessageId&&r.providerMessageId===e.externalMessageId||r.communicationId===e.id));t&&l.update("mailboxOutbox",t.id,{status:"sent",providerMessageId:e.externalMessageId,providerThreadId:e.externalThreadId,providerUrl:e.externalUrl,lastAttemptAt:I(),updatedAt:I()})}const Ui=new Set;function pC(e,t){if(!fC(e,t))return;const r=e.createdById?l.list("users").find(n=>n.id===e.createdById):void 0;if(!r&&!Mr().authorization){Wo(t.id,"Sign in again to send this email.");return}gC({tenantId:e.tenantId,user:r,jobId:t.id})}function fC(e,t){return typeof window>"u"||typeof fetch!="function"||e.channel!=="email"||e.direction!=="outbound"||e.mailboxOrigin==="provider_sync"?!1:t.status==="queued"&&t.to.length>0}async function gC(e){if(Ui.has(e.jobId))return;const t=l.list("mailboxOutbox").find(n=>n.id===e.jobId);if(!t||t.status==="sent"||t.status==="sending"||t.status==="cancelled")return;Ui.add(e.jobId);const r=yC(e.jobId);if(!r){Ui.delete(e.jobId);return}try{const n=await fetch(`${Rt()}/mailboxes/send`,{method:"POST",headers:Up(e.user,e.tenantId),body:JSON.stringify(bC(r,e.user))}),i=await n.json().catch(()=>null);if(!n.ok||!(i!=null&&i.ok)){const a=i&&"message"in i&&i.message||`Mailbox send failed with ${n.status} ${n.statusText}.`;Wo(e.jobId,a);return}hC(e.jobId,i.result)}catch(n){Wo(e.jobId,n instanceof Error?n.message:"Mailbox send failed.")}finally{Ui.delete(e.jobId)}}function yC(e){const t=l.list("mailboxOutbox").find(n=>n.id===e);if(!t||t.status==="sent"||t.status==="cancelled")return t??null;const r=l.update("mailboxOutbox",e,{status:"sending",attemptCount:t.attemptCount+1,lastAttemptAt:I(),lastError:void 0,updatedAt:I()});return r&&Sr(r,"sending"),r}function hC(e,t={}){const r=l.list("mailboxOutbox").find(i=>i.id===e);if(!r)return null;const n=l.update("mailboxOutbox",e,{status:"sent",providerMessageId:t.externalMessageId??r.providerMessageId,providerThreadId:t.externalThreadId??r.providerThreadId,providerUrl:t.externalUrl??r.providerUrl,lastAttemptAt:I(),lastError:void 0,updatedAt:I()});return n&&(Sr(n,"sent",t),Jr(n.mailboxConnectionId)),n}function Wo(e,t){if(!l.list("mailboxOutbox").find(i=>i.id===e))return null;const n=l.update("mailboxOutbox",e,{status:"failed",lastError:t,lastAttemptAt:I(),updatedAt:I()});return n&&(Sr(n,"failed"),n.mailboxConnectionId&&l.update("connectedMailboxes",n.mailboxConnectionId,{lastError:t,updatedAt:I()})),n}function bC(e,t){return{connectionId:e.mailboxConnectionId,senderMode:"staff",senderName:(t==null?void 0:t.name)||[t==null?void 0:t.firstName,t==null?void 0:t.lastName].filter(Boolean).join(" ")||void 0,to:e.to,cc:e.cc,bcc:e.bcc,subject:e.subject,text:e.bodyFormat==="html"?void 0:e.body,html:e.bodyFormat==="html"?e.body:void 0,replyTo:e.mailboxAccount,replyToMessageIdHeader:e.replyToMessageIdHeader,references:e.references,externalThreadId:e.externalThreadId,replyContext:e.replyContext,attachments:(e.attachments??[]).map(r=>({fileName:r.fileName,fileType:r.fileType,dataUrl:r.dataUrl}))}}function Up(e,t){const r={"content-type":"application/json",...Mr()};return e&&(r["x-user-id"]=e.id,r["x-user-role"]=e.role,r["x-tenant-id"]=t,e.branchId&&(r["x-branch-id"]=e.branchId)),r}const IC="[[quotex:marketing-email-body]]",vC="[[quotex:marketing-pamphlet]]",
105wC="[[quotex:marketing-pamphlet-data:",_C="]]";function AC(e){var a,s,o;const t=SC(e.emailBody,e.recipientName),r=e.pamphlet,n=ci([t.greeting,t.note,t.closing]),i=ci([RC(e.heroImageUrl,e.heroImageAlt||r.headline||"Campaign image"),r.eyebrow?`**${r.eyebrow.trim()}**`:"",r.headline?`# ${r.headline.trim()}`:"",(a=r.subheadline)==null?void 0:a.trim(),(s=r.intro)==null?void 0:s.trim(),r.highlightsTitle?`**${r.highlightsTitle.trim()}**`:"",kC(r.highlights),(o=r.ctaTitle)==null?void 0:o.trim(),`[${e.ctaLabel}](${e.href})`]);return ci([IC,n,CC({pamphlet:r,imageUrl:e.heroImageUrl,imageAlt:e.heroImageAlt||r.headline||"Campaign image",ctaHref:e.href,ctaLabel:e.ctaLabel,themeId:e.pamphletTheme,agency:e.agency,logoUrl:e.logoUrl}),vC,i])}function CC(e){return`${wC}${encodeURIComponent(JSON.stringify(e))}${_C}`}function SC(e,t){const r=`Hi ${Vp(t)||"there"},`,n=e.replace(/\r\n/g,`
106`).split(/\n{2,}/).map(o=>o.trim()).filter(Boolean);let i=r;n[0]&&/^hi\b[^,\n]*,/i.test(n[0])&&(i=n.shift()??r);let a="";const s=n[n.length-1];return s&&TC(s)&&(a=n.pop()??""),{greeting:i,note:n.join(`
107
108`).trim(),closing:a}}function TC(e){return/^(best|warm regards|regards|thank you|thanks|sincerely),?\b/i.test(e.trim())}function an(e,t){var a,s;const r=((a=t==null?void 0:t.name)==null?void 0:a.trim())||"there",n=Vp(r)||r,i=((s=t==null?void 0:t.email)==null?void 0:s.trim())||"";return e.replace(/\{\{\s*first_name\s*\}\}|\{\s*first_name\s*\}/gi,n).replace(/\{\{\s*firstName\s*\}\}|\{\s*firstName\s*\}/g,n).replace(/\{\{\s*name\s*\}\}|\{\s*name\s*\}/gi,r).replace(/\{\{\s*full_name\s*\}\}|\{\s*full_name\s*\}/gi,r).replace(/\{\{\s*email\s*\}\}|\{\s*email\s*\}/gi,i)}function Vp(e){const t=e==null?void 0:e.trim();return t?t.includes("@")?t.split("@")[0]||"":t.split(/\s+/)[0]||t:""}function kC(e){const t=(e??[]).map(r=>r.trim()).filter(Boolean);return t.length===0?"":t.map(r=>`- ${r}`).join(`
109`)}function RC(e,t="Campaign image"){const r=e==null?void 0:e.trim();return r?`![${EC(t)}](${r})`:""}function EC(e){return e.replace(/[\]\n\r]/g," ").replace(/\s{2,}/g," ").trim()||"Campaign image"}function ci(e){return e.map(t=>(t==null?void 0:t.trim())??"").filter(Boolean).join(`
110
111`)}async function xC(e){try{const t=await fetch(`${Rt()}/mailboxes/send`,{method:"POST",headers:Up(e.user,e.tenantId),body:JSON.stringify({connectionId:e.sender.status==="connected"?e.sender.connectionId:void 0,senderMode:"agency_marketing",senderName:e.sender.fromName,to:[e.to],cc:[],bcc:[],subject:e.subject,text:e.text,html:e.html,replyTo:e.sender.fromEmail})}),r=await t.json().catch(()=>null);return!t.ok||!(r!=null&&r.ok)?{ok:!1,message:r&&"message"in r&&r.message||`Campaign delivery failed with ${t.status} ${t.statusText}.`}:r}catch(t){return{ok:!1,message:t instanceof Error?t.message:"Campaign delivery failed."}}}function PC(e){const t=e.pamphlet,r=t?ci([t.eyebrow,t.headline,t.subheadline,t.intro,t.highlightsTitle,...(t.highlights??[]).map(a=>"- "+a),t.ctaTitle,e.ctaLabel+": "+e.href]):"",n=qC(e.heroImageUrl),i=t?Bm({pamphlet:t,imageUrl:n,imageAlt:e.heroImageAlt,ctaHref:e.href,ctaLabel:e.ctaLabel,themeId:e.pamphletTheme,agency:e.agency,logoUrl:e.logoUrl}):n?'<img src="'+Ko(n)+'" alt="'+Ko(e.heroImageAlt)+'" style="display:block;width:100%;max-width:680px;height:auto;" />':"";return{text:ci([r,e.emailBody]),html:'<div style="font-family:Arial,Helvetica,sans-serif;color:#171714;font-size:16px;line-height:1.55;max-width:680px;margin:0 auto;">'+i+'<div style="margin-top:28px;">'+NC(e.emailBody)+"</div></div>"}}function NC(e){return e.replace(/\r\n/g,`
112`).split(/\n{2,}/).map(t=>`<p style="margin:0 0 16px;">${Ko(t).replace(/\n/g,"<br />")}</p>`).join("")}function qC(e){const t=e==null?void 0:e.trim();if(t)try{const r=new URL(t,typeof window<"u"?window.location.origin:void 0);return r.protocol!=="https:"&&r.protocol!=="http:"?void 0:r.toString()}catch{return}}function Ko(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function OC(e){const t=e.customerId?l.list("customers").find(r=>r.id===e.customerId):e.prospectId?l.list("prospects").find(r=>r.id===e.prospectId):null;return!t||!Ud(e.content)&&!Ud(e.subject??"")?e:{...e,subject:e.subject?an(e.subject,t):e.subject,content:an(e.content,t)}}function Ud(e){return/\{\{?\s*(first_name|firstName|name|full_name|email)\s*\}?\}/i.test(e)}function yr(e,t){if(!e.tenantId||!nt(e.role))return null;const r=(e.businessEmail??e.email).trim().toLowerCase();if(!r)return null;const n=e.mailProvider??rr(r),i=`mailbox_staff_${e.id}`,a=l.list("connectedMailboxes").find(o=>o.id===i),s={tenantId:e.tenantId,ownerType:"staff",userId:e.id,address:r,provider:n,displayName:e.n
112ame,status:"needs_auth",authMode:"oauth",scopes:[],updatedAt:I(),updatedById:t};return a?l.update("connectedMailboxes",i,s):l.insert("connectedMailboxes",{...s,id:i})}function Ls(e,t){const r=e.contactEmail.trim().toLowerCase();if(!r)return null;const n=`mailbox_agency_marketing_${e.id}`,i=l.list("connectedMailboxes").find(s=>s.id===n),a={tenantId:e.id,ownerType:"agency_marketing",agencyId:e.id,address:r,provider:rr(r),displayName:`${e.name} Marketing`,status:"needs_auth",authMode:"oauth",scopes:[],updatedAt:I(),updatedById:t};return i?l.update("connectedMailboxes",n,a):l.insert("connectedMailboxes",{...a,id:n})}function jp(e,t){const r=Pe(t);if(!r)return null;const n=l.list("customers").find(s=>s.tenantId===e&&(Pe(s.email)===r||(s.additionalContacts??[]).some(o=>Pe(o.email)===r)));if(n)return{customerId:n.id};const i=l.list("prospects").find(s=>s.tenantId===e&&Pe(s.email)===r);if(i)return{prospectId:i.id};const a=l.list("carrierContacts").find(s=>s.tenantId===e&&Pe(s.email)===r);return a?{carrierContactId:a.id}:null}function DC(e,t){const r=new Set([t.inReplyToHeader,...t.references??[]].map(i=>Cn(i)).filter(Boolean)),n=l.list("communications").find(i=>i.tenantId!==e||i.channel!=="email"?!1:t.externalThreadId&&i.externalThreadId===t.externalThreadId?!0:[i.messageIdHeader,i.externalMessageId,i.inReplyToHeader,...i.references??[]].map(s=>Cn(s)).some(s=>s&&r.has(s)));return(n==null?void 0:n.threadId)??null}function Cn(e){return(e??"").trim().replace(/^<|>$/g,"").toLowerCase()}function Ms(e){if(!e.customerId&&!e.prospectId)return;if(e.direction==="inbound"&&e.channel==="email"){Hc(e);return}if(l.list("statusEvents").find(a=>a.communicationId===e.id))return;const r=e.channel==="email"?"Email":e.channel==="call"?"Call":e.channel==="note"?"Note":String(e.channel),n=e.direction==="outbound"?"sent":"received",i=e.subject?`: ${e.subject}`:"";l.insert("statusEvents",{id:N("se"),tenantId:e.tenantId,source:e.direction==="inbound"?"customer":"agent",message:`${r} ${n}${i}.`,visibility:e.channel==="note"?"internal":"customer_visible",customerId:e.customerId,prospectId:e.prospectId,communicationId:e.id,createdAt:e.createdAt||I(),createdById:e.createdById})}function pe(e){l.insert("audit",{id:N("audit"),tenantId:e.tenantId,actorId:e.actorId??"system",action:e.action,entityType:"task",entityId:e.taskId,metadata:e.metadata,createdAt:I()})}function Fr(e){const t=l.list("tasks").find(o=>o.tenantId===e.tenantId&&o.activityKey===e.activityKey&&!o.completedAt&&o.status!=="resolved");if(t)return t;const r=e.assignedToId?[]:gn({tenantId:e.tenantId,customerId:e.customerId,prospectId:e.prospectId}),n=e.assignedToId??r[0],i=e.additionalAssignedToIds??(!e.assignedToId&&r.length>1?r.slice(1):void 0),a=!!e.customerId||!!e.prospectId,s={id:N("task"),tenantId:e.tenantId,activityKey:e.activityKey,title:e.title,description:e.description,customerId:e.customerId,prospectId:e.prospectId,assetId:e.assetId,policyId:e.policyId,claimId:e.claimId,documentId:e.documentId,quoteSessionId:e.quoteSessionId,quoteRequestId:e.quoteRequestId,renewalId:e.renewalId,messageId:e.messageId,source:"ai_notification",topic:e.topic,severity:e.severity??"warning",severityReason:e.severityReason,status:"open",assignedToId:n,additionalAssignedToIds:i,awaitingManagerAssignment:e.awaitingManagerAssignment??(a&&!n?!0:void 0),createdById:e.createdById??"ai",createdAt:e.createdAt??I()};return l.insert("tasks",s),pe({tenantId:e.tenantId,actorId:e.createdById??"ai",action:e.auditAction??"task.created_from_trigger",taskId:s.id,metadata:{activityKey:e.activityKey,...e.auditMetadata??{}}}),s}function ft(e){const t=Cn(e.messageIdHeader??e.rfc822MessageId);if(t)return`message:${t}`;const r=Cn(e.externalMessageId);return r?`provider:${e.mailboxProvider??"unknown"}:${r}`:`communication:${e.id}`}function Qc(e){return`inbound-email:${ft(e)}`}function $s(e,t){return`inbound-notification:${ft(e)}:${t}`}function LC(e){let t=2166136261,r=2246822519;for(let n=0;n<e.length;n+=1){const i=e.charCodeAt(n);t=Math.imul(t^i,16777619),r=Math.imul(r^i,3266489917)}return`${(t>>>0).toString(36)}${(r>>>0).toString(36)}`}function MC(e,t){return`ain_event_${LC(`${e}:${t}`)}`}function sn(e,t){const r=l.list("aiNotifications").filter(a=>
112a.tenantId===e.tenantId&&a.eventKey===e.eventKey);let n=[...r].sort((a,s)=>{const o=+!!s.acknowledgedAt-+!!a.acknowledgedAt;return o!==0?o:a.createdAt.localeCompare(s.createdAt)})[0];if(!n&&t&&(n=l.list("aiNotifications").find(a=>a.tenantId===e.tenantId&&!a.eventKey&&t(a))),n){const a=n.eventKey===e.eventKey?n:l.update("aiNotifications",n.id,{eventKey:e.eventKey})??n,{acknowledgedAt:s,acknowledgedById:o,taskId:c,...d}=e,m=l.update("aiNotifications",a.id,d)??a;return r.filter(p=>p.id!==m.id).forEach(p=>l.remove("aiNotifications",p.id)),{notification:m,created:!1}}const i={...e,id:MC(e.tenantId,e.eventKey),createdAt:I()};return l.insert("aiNotifications",i),{notification:i,created:!0}}function Br(e){const t=ft(e);return l.list("communications").filter(r=>r.tenantId===e.tenantId&&r.direction==="inbound"&&r.channel==="email"&&ft(r)===t)}const $C=["aiActivityScannedAt","aiTriageDisposition","aiTriageTopic","aiTriageReason","aiTriageConfidence","aiTriageEvidence","aiTriageRequiresHumanReview","aiTriageVersion","aiServiceIntent","aiDraftMissingFields","aiReplyDraftId","aiActivityNotificationId","aiActivityTaskId"];function Vd(e){const t={};return $C.forEach(r=>{const n=e[r];n!==void 0&&Object.assign(t,{[r]:n})}),t}function Vi(e,t){return Br(e).map(r=>l.update("communications",r.id,t)).filter(r=>!!r)}function Qp(e){return[...e].sort((t,r)=>{const n=s=>{var o;return(s.externalUrl?8:0)+(s.externalMessageId?4:0)+(s.messageIdHeader||s.rfc822MessageId?2:0)+((((o=s.attachments)==null?void 0:o.length)??0)>0?1:0)},i=n(r)-n(t);if(i!==0)return i;const a=t.createdAt.localeCompare(r.createdAt);return a!==0?a:t.id.localeCompare(r.id)})[0]}function FC(e){const t=ft(e),r=new Set(Br(e).map(n=>n.id));return l.list("statusEvents").filter(n=>n.tenantId===e.tenantId&&(n.inboundEmailIdentity===t||!!n.communicationId&&r.has(n.communicationId)&&/^(?:email received|inbound email remark)\b/i.test(n.message)))}function Hc(e,t){var d,m,p,u;if(e.direction!=="inbound"||e.channel!=="email"||!e.customerId&&!e.prospectId)return;const r=Br(e),n=Qp(r)??e,i=ft(e),a=t??((d=Gc(zc(e)))==null?void 0:d.id)??n.aiActivityTaskId,s=((m=n.subject)==null?void 0:m.trim())||"(no subject)",o={tenantId:e.tenantId,source:"customer",message:`Inbound email remark: ${s}.`,visibility:"internal",customerId:n.customerId??((p=r.find(f=>f.customerId))==null?void 0:p.customerId),prospectId:n.prospectId??((u=r.find(f=>f.prospectId))==null?void 0:u.prospectId),communicationId:n.id,taskId:a,inboundEmailIdentity:i,createdAt:n.createdAt||e.createdAt||I(),createdById:n.createdById},c=FC(e).sort((f,g)=>{const y=w=>(w.inboundEmailIdentity?4:0)+(w.taskId?2:0)+(w.communicationId===n.id?1:0),h=y(g)-y(f);return h!==0?h:f.createdAt.localeCompare(g.createdAt)})[0];return c?l.update("statusEvents",c.id,o)??{...c,...o}:l.insert("statusEvents",{id:N("se"),...o})}function zc(e){const t=new Set(Br(e).map(n=>n.id)),r=Qc(e);return l.list("tasks").filter(n=>n.tenantId===e.tenantId&&(n.activityKey===r||!!n.messageId&&t.has(n.messageId)||!!n.originalMessageId&&t.has(n.originalMessageId)))}function Gc(e){return[...e].sort((t,r)=>{const n=!t.completedAt&&t.status!=="resolved"?0:1,i=!r.completedAt&&r.status!=="resolved"?0:1;if(n!==i)return n-i;const a=t.status==="in_progress"?0:1,s=r.status==="in_progress"?0:1;return a!==s?a-s:t.createdAt.localeCompare(r.createdAt)})[0]}function Pa(e,t){Br(e).forEach(r=>{r.aiActivityTaskId!==t&&l.update("communications",r.id,{aiActivityTaskId:t})}),Hc(e,t)}function BC(e,t){const r=new Map;l.list("communications").filter(n=>n.tenantId===e&&n.direction==="inbound"&&n.channel==="email").forEach(n=>{const i=ft(n),a=r.get(i)??[];a.push(n),r.set(i,a)}),r.forEach(n=>{const i=n[0],a=zc(i),s=Gc(a);if(Hc(i,s==null?void 0:s.id),a.length===0||!s)return;const o=Qc(i);s.activityKey!==o&&l.update("tasks",s.id,{activityKey:o}),Pa(i,s.id),a.filter(c=>c.id!==s.id&&!c.completedAt&&c.status!=="resolved").forEach(c=>{const d=I();l.update("tasks",c.id,{status:"resolved",completedAt:d,completedById:t??"system",resolutionNote:"Automatically consolidated with the single activity for this inbound email.",resolutionNoteAt:d}),pe({tenantId:e,actorId:t??"system",action:"task.resolved_duplicate_inbound_email",taskId:c.id,metadata:{canonicalTaskId:s.id,canonicalActivityKey:o}})})})}function la(e){const t=Qc(e.inbound),r=Gc(zc(e.inbound));if(r)return r.activityKey!==t&&l.update("tasks",r.id,{activityKey:t}),Pa(e.inbound,r.id),l.list("tasks").find(a=>a.id===r.id)??r;const n=Fr({tenantId:e.inbound.tenantId,activityKey:t,title:e.title,de
112scription:e.description,customerId:e.inbound.customerId,prospectId:e.inbound.prospectId,documentId:e.documentId,messageId:e.inbound.id,topic:e.topic,severity:e.severity,severityReason:e.severityReason,assignedToId:e.assignedToId,awaitingManagerAssignment:e.awaitingManagerAssignment,createdById:"ai",createdAt:e.inbound.createdAt,auditAction:e.auditAction,auditMetadata:{communicationId:e.inbound.id,emailIdentity:ft(e.inbound),...e.auditMetadata??{}}}),i=l.update("tasks",n.id,{aiSummary:e.aiSummary,originalMessageContent:e.originalMessageContent,originalMessageId:e.originalMessageId,aiReplyBody:e.aiReplyBody,aiReplySubject:e.aiReplySubject});return Pa(e.inbound,n.id),i??n}function Lr(e,t,r,n="task.resolved_by_trigger"){const i=new Set(t);l.list("tasks").filter(a=>a.tenantId===e&&!!a.activityKey&&i.has(a.activityKey)&&!a.completedAt&&a.status!=="resolved").forEach(a=>{l.update("tasks",a.id,{status:"resolved",completedAt:I(),completedById:r??"system"}),pe({tenantId:e,actorId:r??"system",action:n,taskId:a.id,metadata:{activityKey:a.activityKey}})})}function fe(e,t){const r=t.createdAt??I(),n=t.createdById??"ai",i=t.detail?`${t.message}
113
114${t.detail}`:t.message;l.insert("statusEvents",{id:N("se"),tenantId:e.tenantId,source:t.source??"ai",message:t.message,visibility:"internal",customerId:e.customerId,prospectId:e.prospectId,assetId:t.assetId??e.assetId,policyId:t.policyId,communicationId:t.communicationId,documentId:t.documentId,createdAt:r,createdById:n}),l.insert("notes",{id:N("note"),tenantId:e.tenantId,authorId:n,customerId:e.customerId,prospectId:e.prospectId,policyId:t.policyId,body:`AI quoting workflow: ${i}`,visibility:"internal",createdAt:r})}function Yo(e){if(e.customerId){const t=l.list("customers").find(r=>r.id===e.customerId);if(t)return{name:t.name,assignedAgentId:t.assignedAgentId,assignedCsrId:t.assignedCsrId}}if(e.prospectId){const t=l.list("prospects").find(r=>r.id===e.prospectId);if(t)return{name:t.name,assignedAgentId:t.assignedAgentId,assignedCsrId:t.assignedCsrId}}return{name:"Client"}}function Hp(e){var a;const t=gn({tenantId:e.tenantId,customerId:e.customerId,prospectId:e.prospectId});if(t.length>0)return t;const r=e.assignedAgentId?l.list("users").find(s=>s.id===e.assignedAgentId&&s.tenantId===e.tenantId):void 0;if(r&&r.active!==!1&&r.staffAccessStatus!=="banned"&&r.staffAccessStatus!=="deleted"&&kr(r.role))return[r.id];const n=e.quoteRequestId?(a=l.list("quoteRequests").find(s=>s.id===e.quoteRequestId&&s.tenantId===e.tenantId))==null?void 0:a.assignedAgentId:void 0;if(n){const s=l.list("users").find(o=>o.id===n&&o.tenantId===e.tenantId);if(s&&s.active!==!1&&s.staffAccessStatus!=="banned"&&s.staffAccessStatus!=="deleted"&&kr(s.role))return[s.id]}const i=l.list("users").find(s=>s.id===e.createdById);return i&&nt(i.role)?[i.id]:[]}function UC(e){return Hp(e)[0]}function zp(e,t){return`quote-session:${e}:${t}`}function VC(e,t){const[r,...n]=Hp(e);return Fr({tenantId:e.tenantId,activityKey:zp(e.id,t.milestone),title:t.title,description:t.description,customerId:e.customerId,prospectId:e.prospectId,assetId:e.assetId,quoteSessionId:e.id,quoteRequestId:e.quoteRequestId,topic:"other",severity:t.severity??"warning",severityReason:t.severityReason,assignedToId:r,additionalAssignedToIds:n.length>0?n:void 0,createdById:t.createdById??"ai",auditAction:t.auditAction??"task.created_from_quote_milestone",auditMetadata:{quoteSessionId:e.id,quoteRequestId:e.quoteRequestId,milestone:t.milestone}})}function Gp(e,t){return sn({tenantId:e.tenantId,eventKey:`quote-ready:${e.id}`,kind:"quote_ready",title:t.title,summary:t.summary,customerId:e.customerId,prospectId:e.prospectId,assetId:e.assetId,quoteSessionId:e.id,quoteRequestId:e.quoteRequestId,topic:"other",severity:t.severity??"warning",severityReason:t.severityReason,assignedToId:UC(e)},r=>r.kind==="quote_ready"&&r.quoteSessionId===e.id).notification}function Wp(e,t,r){Lr(e.tenantId,t.map(n=>zp(e.id,n)),"ai","task.resolved_by_quote_milestone")}function jC(e){var t;return!!((t=e.activityKey)!=null&&t.startsWith("quote-session:"))&&e.activityKey.endsWith(":quote_ready")}function QC(e){const t=e.lineOfBusiness==="commercial"?"commercial-lines":"personal-lines";switch(e.status){case"awaiting_reply":return`Quotex sent the ${t} questionnaire and is waiting for the client to respond.`;case"quoting":return`Quotex received the required information and is running the ${t} carrier quotes.`;case"complete":return`Quotex completed the ${t} quote flow and prepared the carrier ranking for review.`;
114case"gathering_info":default:return`The ${t} quote flow has started and is gathering the information needed for the next step.`}}function Ue(e,t){const r=new Set((t==null?void 0:t.taskIds)??[]),n=`quote-session:${e.id}:`,i=(t==null?void 0:t.actorId)??"ai",a=QC(e),s=e.quoteRequestId?l.list("quoteRequests").find(p=>p.id===e.quoteRequestId):void 0;s!=null&&s.recoveryTaskId&&r.add(s.recoveryTaskId);const o=l.list("tasks").filter(p=>{var u;return p.tenantId===e.tenantId&&!((u=p.activityKey)!=null&&u.startsWith(n))&&(r.has(p.id)||p.quoteSessionId===e.id||!!e.quoteRequestId&&p.quoteRequestId===e.quoteRequestId)}),c=o.length||(t==null?void 0:t.allowFallback)===!1?void 0:l.list("tasks").filter(p=>{if(p.tenantId!==e.tenantId||p.status==="resolved"||p.completedAt||p.quoteSessionId&&p.quoteSessionId!==e.id||!(e.customerId?p.customerId===e.customerId:e.prospectId?p.prospectId===e.prospectId:!1))return!1;const f=`${p.title} ${p.description??""} ${p.aiSummary??""}`;return p.expressQuoteFollowUp===!0||p.topic==="coverage_change"||/\bquot(?:e|ing)\b/i.test(f)}).sort((p,u)=>p.createdAt<u.createdAt?1:-1)[0],d=c?[...o,c]:o;let m=0;return d.forEach(p=>{if(p.status==="resolved"||p.completedAt)return;const u=I(),f=p.status==="in_progress",g=p.assetId??e.assetId;f&&p.description===a&&p.quoteSessionId===e.id&&p.assetId===g&&p.startedAt&&!p.snoozedUntil||(l.update("tasks",p.id,{description:a,quoteSessionId:e.id,assetId:g,status:"in_progress",startedAt:p.startedAt??u,startedById:p.startedById??i,snoozedUntil:void 0}),f||pe({tenantId:p.tenantId,actorId:i,action:e.lineOfBusiness==="personal"?"task.in_progress_by_personal_quote_automation":"task.in_progress_by_quote_flow",taskId:p.id,metadata:{quoteSessionId:e.id,quoteStatus:e.status}}),m+=1)}),m}function on(e){if(!e)return"System";if(e==="ai")return"AI";const t=l.list("users").find(r=>r.id===e);return(t==null?void 0:t.name)??"Staff"}function li(e){var t;return e?((t=l.list("carriers").find(r=>r.id===e))==null?void 0:t.name)??"Carrier":"Carrier"}function cr(e){return e?e.policyNumber?`Policy #${e.policyNumber}`:`Policy #${e.id.slice(-6).toUpperCase()}`:"policy"}function Rn(e){return ca(e)}function Kp(e){return e?l.list("customers").find(t=>t.id===e.customerId):void 0}function Fs(e,t){const r=`claim:${e.id}:open`;if(e.status==="closed")return Lr(e.tenantId,[r],t,"task.resolved_by_claim_close"),null;const n=l.list("customers").find(s=>s.id===e.customerId),i=l.list("policies").find(s=>s.id===e.policyId),a=l.list("carriers").find(s=>s.id===e.carrierId);return Fr({tenantId:e.tenantId,activityKey:r,title:`Open claim: ${(n==null?void 0:n.name)??"Client"}${i?` - ${cr(i)}`:""}`,description:`${(n==null?void 0:n.name)??"A client"} has an open claim with ${(a==null?void 0:a.name)??"the carrier"}. Track status, keep documents current, and close the activity when the claim is closed.`,customerId:e.customerId,policyId:e.policyId,claimId:e.id,topic:"claim_status",severity:e.status==="opened"?"urgent":"warning",severityReason:"Open claim requires staff monitoring until closed.",assignedToId:Rn(n),createdById:"ai",auditAction:"task.created_from_claim",auditMetadata:{claimId:e.id}})}function ji(e,t,r,n){const i=l.list("customers").find(p=>p.id===e.customerId),a=l.list("policies").find(p=>p.id===e.policyId),s=l.list("carriers").find(p=>p.id===e.carrierId),o=e.externalClaimNumber?`claim #${e.externalClaimNumber}`:"a claim",c=cr(a),d=(s==null?void 0:s.name)??"Carrier",m=t==="closed"?`${d} closed ${o} for ${c}. It is now included in previous loss runs.`:t==="opened"?`${d} reported ${o} for ${c}. The claim record was added to this client.`:t==="updated"?`${d} updated ${o} for ${c}${r?`: ${r}`:"."}`:`${d} claim check completed for ${c}${r?`: ${r}`:"."}`;l.insert("statusEvents",{id:N("se"),tenantId:e.tenantId,source:"system",message:m,visibility:"internal",customerId:e.customerId,assetId:a==null?void 0:a.assetId,policyId:e.policyId,claimId:e.id,createdAt:I(),createdById:n??"system"}),i&&t==="closed"&&l.insert("notes",{id:N("note"),tenantId:e.tenantId,authorId:n??"system",customerId:i.id,policyId:e.policyId,body:`${d} closed ${o}. This closed claim is now part of the client's previous loss runs.`,visibility:"internal",createdAt:I()})}function HC(e,t){const r=l.list("customers").find(s=>s.id===e.customerId),n=l.list("carriers").find(s=>s.id===e.carrierId),i=(n==null?void 0:n.name)??"Carrier",a=`${cr(e)} with ${i} was closed and moved to previous policies.`;l.insert("statusEvents",{id:N("se"),tenantId:e.tenantId,source:"system",message:a,visibility:"internal",customerId:e.customerId,assetId:e.assetId,policyId:e.id,createdAt:I(),createdById:t??"system"}),r&&l.insert("notes",{id:N("note"),tenantId:e.tenantId,authorId:t??"system",customerId:r.id,policyId:e.id,body:a,visibility:"internal",createdAt:I()})}function zC(e){const t=l.list("customers").find(n=>n.id===e.customerId),r=e.assetId?l.list("assets").find(n=>n.id===e.assetId):void 0;return Fr({tenantId:e.tenantId,activityKey:`claim-inquiry:${e.commId}`,title:`Claim inquiry: ${(t==null?void 0:t.name)??"Client"}`,description:`${(t==null?void 0:t.name)??"A client"} submitted a claim inquiry${r?` for ${r.label}`:""}. Review the message, contact the carrier if needed, and keep the client updated.`,customerId:e.customerId,assetId:e.assetId,messageId:e.commId,topic:"claim_filed",severity:"urgent",severityReason:"Customer submitted a claim-related request.",assignedToId:Rn(t),createdById:"ai",createdAt:e.createdAt,auditAction:"task.created_from_claim_inquiry",auditMetadata:{communicationId:e.commId}})}function BT(e,t){const r=new Set(t);for(const n of l.list("policies"))n.tenantId===e&&r.has(n.id)&&Yp(n)}function Yp(e,t){const r=`billing:${e.id}:past_due`,n=`billing:${e.id}:missing_info`;return Lr(e.tenantId,[r,n],t,"task.resolved_by_billing_update"),null}function Jo(e,t){const r=`non-renewal:${e.id}`;if(e.status!=="not_renewed")return Lr(e.tenantId,[r],t,"task.resolved_by_renewal_status"),null;const n=l.list("policies").find(o=>o.id===e.policyId),i=Kp(n),a=n?l.list("carriers").find(o=>o.id===n.carrierId):void 0,s=e.nonRenewalEffectiveDate??e.renewalDate;return Fr({tenantId:e.tenantId,activityKey:r,title:`Non-renewal: ${cr(n)}`,description:`${(a==null?void 0:a.name)??"Carrier"} issued a non-renewal for ${(i==null?void 0:i.name)??"the client"}${s?` effective ${Le.date(s)}`:""}. Reason: ${e.nonRenewalReason??"No reason recorded yet."} Review replacement options and contact the client.`,customerId:n==null?void 0:n.customerId,policyId:n==null?void 0:n.id,assetId:n==null?void 0:n.assetId,renewalId:e.id,topic:"renewal_approaching",severity:"urgent",severityReason:"Carrier non-renewal requires replacement-market action.",assignedToId:e.agentId??Rn(i),createdById:t??"ai",auditAction:"task.created_from_non_renewal",auditMetadata:{renewalId:e.id,policyId:e.policyId}})}const GC=["completed","cancelled"];function Bs(e,t){const r=i=>(i.lineOfBusiness??"personal")==="personal"?0:1,n=r(e)-r(t);return n!==0?n:e.sortOrder-t.sortOrder||e.label.localeCompare(t.label)}function WC(e){return l.list("carrierLinks").filter(t=>t.tenantId===e&&t.active).map(t=>t.carrierId)}function KC(e){return!1}function YC(e){if(e.status==="closed"||!KC(e.tenantId))return!1}function Wc(e){return l.list("renewals").filter(t=>t.policyId===e).sort((t,r)=>
114t.renewalDate<r.renewalDate?1:-1)[0]}function JC(e,t,r){const n=cr(t);return e==="policy_check"?`Carrier policy retrieval: ${n}`:e==="renewal_window"?`Carrier renewal check: ${n}`:e==="renewal_status_check"?`Carrier non-renewal check: ${n}`:e==="billing_check"?`Carrier billing check: ${n}`:e==="claim_check"?`Carrier claim check: ${n}`:e==="document_sync"?`Carrier document sync: ${n}`:e==="policy_placed"?`Carrier policy pickup: ${n}`:`${Vm(e)}: ${n}${r!=null&&r.renewalDate?` (${Le.date(r.renewalDate)})`:""}`}function Wt(e,t,r,n="ai"){const i=r?`${t}: ${r}`:t;l.insert("statusEvents",{id:N("se"),tenantId:e.tenantId,source:"system",message:i,visibility:"internal",customerId:e.customerId,assetId:e.assetId,policyId:e.policyId,createdAt:I(),createdById:n})}function Kc(e){var s;const t=e.policy;if(t&&!YC(t))return null;const r=e.carrierId??(t==null?void 0:t.carrierId);if(!r)return null;const n=e.customerId??(t==null?void 0:t.customerId),i=l.list("carrierRunnerJobs").find(o=>{var c;return o.tenantId!==e.tenantId||o.trigger!==e.trigger||o.carrierId!==r||(o.customerId??"")!==(n??"")||o.policyId!==(t==null?void 0:t.id)||(o.renewalId??"")!==(((c=e.renewal)==null?void 0:c.id)??"")?!1:!GC.includes(o.status)});if(i)return i;const a={id:N("runner_job"),tenantId:e.tenantId,carrierId:r,customerId:n,assetId:e.assetId??(t==null?void 0:t.assetId),policyId:t==null?void 0:t.id,renewalId:(s=e.renewal)==null?void 0:s.id,trigger:e.trigger,status:"queued",title:e.title??JC(e.trigger,t,e.renewal),reason:e.reason,scheduledFor:e.scheduledFor??I(),createdAt:I(),createdById:e.createdById??"ai",attempts:0};return l.insert("carrierRunnerJobs",a),Wt(a,"Carrier portal check queued",e.reason,e.createdById??"system"),a}function Us(e,t){return Kc({tenantId:e.tenantId,trigger:"policy_placed",policy:e,createdById:t??e.agentId??"ai",reason:"Policy was put in place. The carrier portal should be checked for bound policy data, available documents, billing path, and upcoming renewal date, then any changes should be staged for review."})}function ZC(e,t,r){return Kc({tenantId:e.tenantId,trigger:"renewal_window",policy:e,renewal:t,createdById:e.agentId??"ai",reason:`Policy renewal is within ${Um} days. The carrier portal should be checked for renewal terms, documents, billing changes, and non-renewal notices if present.`})}function Qi(e,t=I()){const r=Wc(e.id);return Tv(e,r,t)?ZC(e,r):null}function jd(e,t){var i;const r=e.customerId?l.list("customers").find(a=>a.id===e.customerId):void 0,n=l.list("agencies").find(a=>a.id===e.tenantId);return Fr({tenantId:e.tenantId,activityKey:`carrier-runner-exception:${e.id}`,title:`Carrier portal needs attention: ${e.title}`,description:t,customerId:e.customerId,policyId:e.policyId,assetId:e.assetId,topic:"other",severity:"warning",severityReason:"Carrier portal update needs staff review before continuing.",assignedToId:((i=n==null?void 0:n.carrierRunnerAuthorizedUserIds)==null?void 0:i[0])??Rn(r),createdById:"ai",auditAction:"task.created_from_carrier_runner_exception",auditMetadata:{runnerJobId:e.id,trigger:e.trigger}})}function XC(e,t,r){if(!e.policyId)return;const n=l.list("policies").find(o=>o.id===e.policyId);if(!n)return;l.update("policies",n.id,{renewalStatus:"not_renewed"});const a=(e.renewalId?l.list("renewals").find(o=>o.id===e.renewalId):Wc(n.id))??l.insert("renewals",{id:N("renewal"),tenantId:n.tenantId,policyId:n.id,renewalDate:n.renewalDate??I(),status:"not_renewed",agentId:n.agentId,createdAt:I()}),s=l.update("renewals",a.id,{status:"not_renewed",nonRenewalReason:t||a.nonRenewalReason||"Carrier posted a non-renewal notice.",nonRenewalNoticeDate:I(),nonRenewalEffectiveDate:a.nonRenewalEffectiveDate??n.renewalDate,nonRenewalCarrierReference:e.sourceReference??a.nonRenewalCarrierReference});s&&Jo(s,r??"ai")}function Jp(e){if(e.documentPayload)return e.documentPayload.documentName||e.documentPayload.fileName;switch(e.kind){case"policy_update":return Yc(e)?"renewal information":"policy information";case"edoc":return"document";case"billing_update":return"billing information";case"claim_update":return"claim information";case"commission_statement":return"commission statement"}}function Yc(e){var r,n;const t=[e.summary,(r=e.documentPayload)==null?void 0:r.documentName,(n=e.documentPayload)==null?void 0:n.fileName,e.sourceReference].filter(
114Boolean).join(" ");return/renewal|renewed|renew/i.test(t)}function eS(e){const t=li(e.carrierId),r=e.policyId?cr(l.list("policies").find(i=>i.id===e.policyId)):"this account",n=Jp(e);return Yc(e)?`${t} posted updated renewal information for ${r}: ${n}. It is ready for review.`:e.kind==="billing_update"?`${t} posted updated billing information for ${r}: ${n}. It is ready for review.`:e.kind==="edoc"?`${t} posted a new document for ${r}: ${n}. It is ready for review.`:e.kind==="claim_update"?`${t} posted a claim update for ${r}: ${n}. It is ready for review.`:`${t} posted updated carrier information for ${r}: ${n}. It is ready for review.`}function tS(e){const t=li(e.carrierId),r=e.policyId?cr(l.list("policies").find(i=>i.id===e.policyId)):"this account",n=Jp(e);return Yc(e)?`${t} renewal update filed for ${r}: ${n}.`:e.kind==="billing_update"?`${t} billing update filed for ${r}: ${n}.`:e.kind==="edoc"?`${t} document filed for ${r}: ${n}.`:e.kind==="claim_update"?`${t} claim update filed for ${r}: ${n}.`:`${t} update filed for ${r}: ${n}.`}function Zp(e,t,r="system",n){const i=I();l.insert("statusEvents",{id:N("se"),tenantId:e.tenantId,source:"system",message:t,visibility:"internal",customerId:e.customerId,assetId:e.assetId,policyId:e.policyId,documentId:n,createdAt:i,createdById:r}),(e.customerId||e.policyId)&&l.insert("notes",{id:N("note"),tenantId:e.tenantId,authorId:r,customerId:e.customerId,policyId:e.policyId,body:t,visibility:"internal",createdAt:i})}function rS(e,t){var n;const r={id:N("download"),tenantId:e.tenantId,carrierId:e.carrierId??"carrier_unknown",kind:t.kind,status:(((n=t.changes)==null?void 0:n.length)??0)>0||t.documentPayload?"matched":"unreviewed",source:"carrier_runner",sourceReference:t.sourceReference??e.sourceReference,receivedAt:I(),effectiveDate:t.effectiveDate,customerId:e.customerId,assetId:e.assetId,policyId:e.policyId,confidence:t.confidence??.92,summary:t.summary,changes:t.changes??[],documentPayload:t.documentPayload};return l.insert("carrierDownloads",r),Zp(r,eS(r),"system"),r}function Qd(e,t){const r=`document-review:${e.id}`;if(e.status!=="pending")return Lr(e.tenantId,[r],t,"task.resolved_by_document_status"),l.list("aiNotifications").filter(a=>a.tenantId===e.tenantId&&a.kind==="inbound_notice"&&a.documentId===e.id&&!a.acknowledgedAt).forEach(a=>l.update("aiNotifications",a.id,{acknowledgedAt:I(),acknowledgedById:t})),null;if(!e.customerId)return null;const n=l.list("users").find(a=>a.id===e.uploadedById);if((n==null?void 0:n.role)!=="customer")return null;const i=l.list("customers").find(a=>a.id===e.customerId);return Lr(e.tenantId,[r],t,"task.resolved_by_document_notice"),sn({tenantId:e.tenantId,eventKey:`document-review:${e.id}`,kind:"inbound_notice",title:`Document uploaded: ${e.fileName}`,summary:`${(i==null?void 0:i.name)??"A client"} uploaded ${e.fileName}.`,customerId:e.customerId,assetId:e.assetId,policyId:e.policyId,documentId:e.id,topic:"document_upload",severity:"info",severityReason:"Document upload notification; no owned activity was opened.",assignedToId:Rn(i)},a=>a.kind==="inbound_notice"&&a.documentId===e.id).notification}function nS(e,t){if(!e.renewalId)return;const r=l.list("renewals").find(i=>i.id===e.renewalId);if(!r)return;const n=l.list("tasks").find(i=>i.renewalId===r.id&&!i.completedAt);n&&(l.update("tasks",n.id,{status:"open",severity:"warning",severityReason:"Renewal document draft is ready for staff review.",aiSummary:`${e.fileName} is ready for review before publishing to the renewal term.`}),pe({tenantId:n.tenantId,actorId:t??"ai",action:"task.updated_from_renewal_document_draft",taskId:n.id,metadata:{documentId:e.id,renewalId:r.id}}))}function Hd(e){var r;if(e.status==="bound_on_carrier")return Lr(e.policy.tenantId,[`carrier-bind:${e.policy.id}`],e.actorId,"task.resolved_by_carrier_binding"),null;const t=Kp(e.policy);return Fr({tenantId:e.policy.tenantId,activityKey:`carrier-bind:${e.policy.id}`,title:`Carrier bind needs review: ${cr(e.policy)}`,description:`${e.carrier.name} policy implementation did not confirm as bound on the carrier side. ${(r=e.reasons)!=null&&r.length?e.reasons.join("; "):"Review the carrier portal and complete any remaining binding step."}`,customerId:e.policy.customerId,policyId:e.policy.id,assetId:e.policy.assetId,topic:"policy_edit_request",severity:e.status==="failed"?"urgent":"warning",severityReason:"Carrier-side binding requires staff verification.",assignedToId:Rn(t)??e.session.createdById,createdById:e.actorId??"ai",auditAction:"task.created_from_carrier_binding",auditMetadata:{sessionId:e.session.id,carrierId:e.carrier.id,status:e.status}})}function iS(e){const t=Pe(e.email);return l.list("prospects").filter(r=>r.tenantId===e.tenantId&&(r.customerId===e.id||!!t&&Pe(r.email)===t&&r.name.trim().toLowerCase()===e.name.trim().toLowerCase()))}function tt(e,t){return{id:e,...t}}function Zo(e){const t=[];e.assignedAgentId&&t.push(`agent ${on(e.assignedAgentId)}`);for(const r of e.additionalAgentIds??[])r!==e.assignedAgentId&&t.push(`co-owner ${on(r)}`);e.assignedCsrId&&t.push(`CSR ${on(e.assignedCsrId)}`);for(const r of e.additionalCsrIds??[])r!==e.assignedCsrId&&t.push(`CSR ${on(r)}`);return t.join(", ")}function Qr(e){const t=sr(e.before).join("|"),r=sr(e.after).join("|");if(t===r)return;const n=Zo(e.after);l.insert("statusEvents",{id:N("se"),tenantId:e.tenantId,source:"agent",message:`${on(e.byUserId)} ${t?"rerouted":"assigned"} ${e.contactName} to ${n||"no staff owner"}.`,visibility:"internal",customerId:e.kind==="client"?e.contactId:void 0,prospectId:e.kind==="prospect"?e.contactId:void 0,createdAt:I(),createdById:e.byUserId})}function Xp(e){return Le.titleCase(String(e).replace(/_/g," "))}function aS(e,t,r){return e.customerId===t||!!e.prospectId&&r.has(e.prospectId)}function sS(e){const t=l.list("customers").find(u=>u.id===e);if(!t)return[];const r=iS(t),n=new Set(r.map(u=>u.id)),i=l.list("policies").filter(u=>u.customerId===t.id),a=new Set(i.map(u=>u.id)),s=new Set(l.list("assets").filter(u=>u.customerId===t.id).map(u=>u.id)),o=[],c=u=>{u&&o.push(u)};l.list("statusEvents").forEach(u=>{(u.customerId===t.id||u.prospectId&&n.has(u.prospectId)||u.policyId&&a.has(u.policyId)||u.assetId&&s.has(u.assetId))&&o.push(u)});const d=(u,f)=>{const g=u.toLowerCase();return o.some(y=>y.message.toLowerCase().includes(g)&&(y.customerId===t.id||!!y.prospectId&&n.has(y.prospectId)||!!(f!=null&&f.assetId)&&y.assetId===f.assetId))};
114r.length===0&&c(tt(`history:client-created:${t.id}`,{tenantId:t.tenantId,source:"system",message:`Client profile created for ${t.name}.`,visibility:"internal",customerId:t.id,createdAt:t.createdAt})),r.forEach(u=>{c(tt(`history:prospect-created:${u.id}`,{tenantId:u.tenantId,source:"system",message:`Prospect profile created for ${u.name}. Status: ${Le.titleCase(u.status.replace(/_/g," "))}.`,visibility:"internal",customerId:t.id,prospectId:u.id,createdAt:u.createdAt}));const f=Zo(u);f&&c(tt(`history:prospect-routing:${u.id}`,{tenantId:u.tenantId,source:"agent",message:`Prospect routing on file: ${f}.`,visibility:"internal",customerId:t.id,prospectId:u.id,createdAt:u.createdAt,createdById:u.assignedAgentId}))});const m=Zo(t);m&&c(tt(`history:client-routing:${t.id}`,{tenantId:t.tenantId,source:"agent",message:`Current client routing on file: ${m}.`,visibility:"internal",customerId:t.id,createdAt:t.createdAt,createdById:t.assignedAgentId})),l.list("quoteRequests").filter(u=>u.customerId===t.id).forEach(u=>{const f=u.aiRecommendedCarrierId?li(u.aiRecommendedCarrierId):void 0,g=u.aiPremiumEstimateMin&&u.aiPremiumEstimateMax?` Estimated premium ${Le.money(u.aiPremiumEstimateMin)}-${Le.money(u.aiPremiumEstimateMax)}.`:"",y=u.missingDocuments.length?` Missing documents: ${u.missingDocuments.join(", ")}.`:"";c(tt(`history:quote-request:${u.id}`,{tenantId:u.tenantId,source:"ai",message:`Quote request opened for ${z.helpers.assetTypeLabel(u.assetType)}. Status: ${Xp(u.status)}.${f?` AI recommended ${f}.`:""}${g}${y}`,visibility:"internal",customerId:t.id,createdAt:u.createdAt,createdById:u.assignedAgentId??"ai"}))}),l.list("quotingSessions").filter(u=>aS(u,t.id,n)).forEach(u=>{var g,y;const f=z.helpers.assetTypeLabel(u.assetType);if(d("AI quoting workflow started",u)||c(tt(`history:quote-session-start:${u.id}`,{tenantId:u.tenantId,source:"ai",message:`AI quoting workflow started for ${u.lineOfBusiness??"personal"} ${f}.`,visibility:"internal",customerId:t.id,prospectId:u.prospectId,assetId:u.assetId,createdAt:u.createdAt,createdById:u.createdById})),u.questionnaireSentAt&&(d("questionnaire sent",u)||c(tt(`history:quote-questionnaire:${u.id}`,{tenantId:u.tenantId,source:"agent",message:`Quoting questionnaire sent to client with ${((g=u.questionnaireQuestions)==null?void 0:g.length)??0} question${(((y=u.questionnaireQuestions)==null?void 0:y.length)??0)===1?"":"s"}.`,visibility:"internal",customerId:t.id,prospectId:u.prospectId,communicationId:u.questionnaireMessageId,createdAt:u.questionnaireSentAt,createdById:u.createdById}))),u.replyReceivedAt&&(d("submitted quoting questionnaire",u)||c(tt(`history:quote-reply:${u.id}`,{tenantId:u.tenantId,source:"customer",message:"Client submitted quoting questionnaire responses; AI moved the workflow into carrier ranking.",visibility:"internal",customerId:t.id,prospectId:u.prospectId,createdAt:u.replyReceivedAt}))),(u.commercialCarrierSubmissions??[]).forEach(h=>{var b;const w=Wn(h),T=h.status==="application_sent"&&!h.sentAt;c(tt(`history:commercial-submission:${u.id}:${h.carrierId}`,{tenantId:u.tenantId,source:"ai",message:`Commercial application ${T?"prepared for":"sent to"} ${li(h.carrierId)}. Current carrier response: ${Le.titleCase(h.status.replace(/_/g," "))}.${(b=h.missingFields)!=null&&b.length?` Missing fields: ${h.missingFields.join(", ")}.`:""}`,visibility:"internal",customerId:t.id,prospectId:u.prospectId,assetId:u.assetId,communicationId:w,documentId:ac(h),createdAt:h.responseAt??h.sentAt??u.updatedAt??u.createdAt,createdById:w?u.createdById:"ai"}))}),u.quotes.length>0){const h=u.quotes[0];!d("AI carrier ranking",u)&&!d("AI ranked",u)&&c(tt(`history:quote-ranking:${u.id}`,{tenantId:u.tenantId,source:"ai",message:`AI carrier ranking generated ${u.quotes.length} option${u.quotes.length===1?"":"s"}. Top option: ${li(h.carrierId)} at ${Le.money(h.premium)} annual premium.`,visibility:"internal",customerId:t.id,prospectId:u.prospectId,assetId:u.assetId,createdAt:u.updatedAt,createdById:"ai"}))}}),l.list("tasks").filter(u=>u.customerId===t.id||!!u.prospectId&&n.has(u.prospectId)||!!u.policyId&&a.has(u.policyId)||!!u.assetId&&s.has(u.assetId)).forEac
114h(u=>{c(tt(`history:task-created:${u.id}`,{tenantId:u.tenantId,source:u.createdById==="ai"?"ai":"agent",message:`Activity created: ${u.title}${u.description?` - ${u.description}`:""}`,visibility:"internal",customerId:t.id,prospectId:u.prospectId,assetId:u.assetId,policyId:u.policyId,claimId:u.claimId,documentId:u.documentId,quoteSessionId:u.quoteSessionId,quoteRequestId:u.quoteRequestId,communicationId:u.messageId,renewalId:u.renewalId,createdAt:u.createdAt,createdById:u.createdById})),u.startedAt&&c(tt(`history:task-started:${u.id}`,{tenantId:u.tenantId,source:"agent",message:`Activity started: ${u.title}.`,visibility:"internal",customerId:t.id,prospectId:u.prospectId,assetId:u.assetId,policyId:u.policyId,claimId:u.claimId,documentId:u.documentId,quoteSessionId:u.quoteSessionId,quoteRequestId:u.quoteRequestId,createdAt:u.startedAt,createdById:u.startedById})),u.completedAt&&c(tt(`history:task-completed:${u.id}`,{tenantId:u.tenantId,source:"agent",message:`Activity resolved: ${u.title}.${u.resolutionNote?" Resolution note attached.":""}`,visibility:"internal",customerId:t.id,prospectId:u.prospectId,assetId:u.assetId,policyId:u.policyId,claimId:u.claimId,documentId:u.documentId,quoteSessionId:u.quoteSessionId,quoteRequestId:u.quoteRequestId,createdAt:u.completedAt,createdById:u.completedById}))}),l.list("communications").filter(u=>u.customerId===t.id||!!u.prospectId&&n.has(u.prospectId)).forEach(u=>{if(o.some(y=>y.communicationId===u.id))return;const g=u.channel==="email"?"Email":Le.titleCase(String(u.channel));c(tt(`history:communication:${u.id}`,{tenantId:u.tenantId,source:u.direction==="inbound"?"customer":"agent",message:`${g} ${u.direction==="inbound"?"received":"sent"}${u.subject?`: ${u.subject}`:""}.`,visibility:u.channel==="note"?"internal":"customer_visible",customerId:t.id,prospectId:u.prospectId,communicationId:u.id,createdAt:u.createdAt,createdById:u.createdById}))}),l.list("notes").filter(u=>u.customerId===t.id||!!u.prospectId&&n.has(u.prospectId)||!!u.policyId&&a.has(u.policyId)).forEach(u=>{o.some(g=>g.createdAt===u.createdAt&&g.message.includes(u.body.slice(0,80)))||c(tt(`history:note:${u.id}`,{tenantId:u.tenantId,source:u.authorId==="ai"?"ai":"agent",message:`Remark by ${on(u.authorId)}: ${u.body}`,visibility:u.visibility,customerId:t.id,prospectId:u.prospectId,policyId:u.policyId,attachments:u.attachments,createdAt:u.createdAt,createdById:u.authorId}))});const p=new Map;for(const u of o){const f=u.communicationId?l.list("communications").find(T=>T.id===u.communicationId):void 0,g=u.inboundEmailIdentity??((f==null?void 0:f.direction)==="inbound"&&f.channel==="email"?ft(f):void 0),y=!!g&&/^(?:email received|inbound email remark)\b/i.test(u.message),h=y?`inbound-email-remark|${u.tenantId}|${g}`:[u.id,u.message,u.createdAt,u.customerId??"",u.prospectId??"",u.communicationId??""].join("|"),w=p.get(h);if(!w){p.set(h,u);continue}if(y){const T=b=>(b.inboundEmailIdentity?4:0)+(b.taskId?2:0)+(b.message.startsWith("Inbound email remark:")?1:0);T(u)>T(w)&&p.set(h,u)}}return[...p.values()].sort((u,f)=>u.createdAt<f.createdAt?1:-1)}function Vs(e,t,r){const n=N("task"),i={id:n,tenantId:e.tenantId,title:`New prospect assigned: ${e.name}`,description:`${e.name} was routed to your queue. Make first contact, qualify the lead, and update the prospect status.`,prospectId:e.id,source:"ai_notification",activityKey:`routing_assignment:prospect:${e.id}:${t}`,severity:"warning",status:"open",topic:"other",aiSummary:e.aiSummary,assignedToId:t,createdById:r,createdAt:I()};l.insert("tasks",i),pe({tenantId:e.tenantId,actorId:r,action:"task.created_from_routing",taskId:n,metadata:{prospectId:e.id,toAgentId:t}})}function js(e,t,r){const n=N("task"),i={id:n,tenantId:e.tenantId,title:`New client assigned: ${e.name}`,description:`${e.name} was routed to your queue. Review their book, set up an intro call, and confirm their contact preferences.`,customerId:e.id,source:"ai_notification",activityKey:`routing_assignment:client:${e.id}:${t}`,severity:"warning",status:"open",topic:"other",assignedToId:t,createdById:r,createdAt:I()};l.insert("tasks",i),pe({tenantId:e.tenantId,actorId:r,action:"task.created_from_routing",taskId:n,metadata:{customerId:e.id,toAgentId:t}})}function oS(e,t){const r=e.filter(n=>n.channels.includes(t));return r.length===0?"":`Attached: ${r.map(n=>n.description??n.fileName).join(", ")}.`}function Xo(e=!1){return[{id:N("mar"),name:"New prospect intake outreach",enabled:e,trigger:"new_prospect",messageType:"quote_intake",channels:["email"],audience:"new_prospects",timing:"immediate",delayAmount:0,delayUnit:"minutes",senderMode:"assigned_agent",approvalMode:"draft_for_review",quietHoursStart:"20:00",quietHoursEnd:"08:00",maxPerContactPer30Days:3,stopOnReply:!0,includeAttachments:!0,prompt:"Concierge quote-intake outreach. Acknowledge the request, make the next step obvious, and invite a callback without sounding generic.",updatedAt:I()}]}function zd(e){const{agencyLogo:t,...r}=e,n=Array.isArray(r.autoMessageRules)?r.autoMessageRules:Xo(r.autoSendOnNewPros
114pect);return{...r,autoSendOnNewProspect:!1,attachments:(r.attachments??[]).map(i=>({...i,channels:["email"]})),autoMessageRules:n.map(i=>({...i,channels:["email"],enabled:!1,approvalMode:"draft_for_review"}))}}function Gd(e){return{policy_edit_request:"a policy edit request",coverage_change:"a coverage change",cancellation_request:"a cancellation request",claim_status:"a claim remark",claim_filed:"a claim filing",renewal_approaching:"an upcoming policy renewal",payment_issue:"a payment issue",document_upload:"a document upload",endorsement_request:"an endorsement request",coverage_gap:"a coverage gap",other:"their policy"}[e]??"their policy"}const cS={certificate_of_insurance:["proof_of_insurance"],insurance_id_card:["insurance_id_card"],declarations_page:["declarations_page"],policy_copy:["policy_document","policy_booklet"]},lS={certificate_of_insurance:/\b(certificate of insurance|proof of insurance|coi)\b/i,insurance_id_card:/\b(insurance id card|auto id card|vehicle id card|insurance card)\b/i,declarations_page:/\b(declarations? page|dec page)\b/i,policy_copy:/\b(policy document|policy booklet|full policy|policy copy)\b/i};function cn(e){return{certificate_of_insurance:"certificate of insurance",insurance_id_card:"insurance ID card",declarations_page:"declarations page",policy_copy:"policy copy",vehicle_quote_intake:"vehicle quote details"}[e]}function dS(e){const t=l.list("policies").filter(d=>d.tenantId===e.tenantId&&d.customerId===e.customerId),r=new Map(t.map(d=>[d.id,d])),n=new Set(["approved","bound","deposit_paid","renewal_upcoming","renewed","carrier_reviewing"]),i=l.list("documents").filter(d=>d.tenantId!==e.tenantId||d.status!=="approved"?!1:d.customerId===e.customerId||!!d.policyId&&r.has(d.policyId)),a=new Set(cS[e.intent]),s=i.filter(d=>a.has(String(d.type))),o=i.filter(d=>lS[e.intent].test(`${d.documentName??""} ${d.fileName??""}`));return[...s.length>0?s:o].sort((d,m)=>{var y,h;const p=d.policyId&&n.has((y=r.get(d.policyId))==null?void 0:y.status)?1:0,u=m.policyId&&n.has((h=r.get(m.policyId))==null?void 0:h.status)?1:0;if(p!==u)return u-p;const f=d.customerId===e.customerId?1:0,g=m.customerId===e.customerId?1:0;return f!==g?g-f:(m.uploadedAt??"").localeCompare(d.uploadedAt??"")})[0]}function uS(e,t){const r=t.trim().split(/\s+/)[0]||"there";return{certificate_of_insurance:`Hi ${r},
115
116I've attached the certificate of insurance you requested. Please review it and let me know if you need a certificate holder added or any other changes.
117
118Thank you,`,insurance_id_card:`Hi ${r},
119
120I've attached the insurance ID card you requested. Please review it and let me know if you need anything else.
121
122Thank you,`,declarations_page:`Hi ${r},
123
124I've attached the declarations page you requested. Please review it and let me know if you have any questions.
125
126Thank you,`,policy_copy:`Hi ${r},
127
128I've attached the policy copy you requested. Please review it and let me know if you need anything else.
129
130Thank you,`}[e]}function mS(e){var d;const t=new Set(Br(e.inbound).map(m=>m.id)),r=l.list("communications").find(m=>m.aiServiceIntent===e.intent&&!!m.aiDraftSourceCommunicationId&&t.has(m.aiDraftSourceCommunicationId));if(r)return r;const n=nn(e.assignedToId),i=((d=e.inbound.subject)==null?void 0:d.trim())||cn(e.intent),a=/^re:/i.test(i)?i:`Re: ${i}`,s=[...e.inbound.references??[],e.inbound.messageIdHeader,e.inbound.externalMessageId].filter(m=>!!m),o={id:N("att"),documentId:e.document.id,sourceDocumentId:e.document.id,fileName:e.document.fileName,fileType:e.document.fileType||"application/pdf",dataUrl:e.document.downloadUrl,storagePath:e.document.storagePath,description:e.document.documentName??cn(e.intent)},c={id:N("comm"),tenantId:e.inbound.tenantId,customerId:e.customer.id,channel:"email",direction:"outbound",subject:a,threadId:e.inbound.threadId??`thread_msg_${e.inbound.id}`,replyToId:e.inbound.id,mailboxOrigin:"app",mailboxAccount:n.account,mailboxProvider:n.provider,mailboxConnectionId:n.connectionId,deliveryStatus:"draft",externalThreadId:e.inbound.externalThreadId,inReplyToHeader:e.inbound.messageIdHeader??e.inbound.externalMessageId,references:s,to:e.customer.email?[e.customer.email]:void 0,body:uS(e.intent,e.customer.name),attachments:[o],aiDraftSourceCommunicationId:e.inbound.id,aiServiceIntent:e.intent,createdAt:I(),createdById:e.assignedToId};return l.insert("communications",c),c}function pS(e,t){const r=e.trim().split(/\s+/)[0]||"there",n=t.map(i=>i==="vin"?"- The vehicle's 17-character VIN":"- Whether the vehicle should be quoted on a personal or commercial policy");return`Hi ${r},
131
132I can get the vehicle quote started. Please send me:
133
134${n.join(`
135`)}
136
137Once I have ${t.length===1?"that detail":"those details"}, I can begin the quote.
138
139Thank you,`}function fS(e){var c;const t=new Set(Br(e.inbound).map(d=>d.id)),r=l.list("communications").find(d=>d.aiServiceIntent==="vehicle_quote_intake"&&!!d.aiDraftSourceCommunicationId&&t.has(d.aiDraftSourceCommunicationId));if(r)return r;const n=nn(e.assignedToId),i=((c=e.inbound.subject)==null?void 0:c.trim())||"Vehicle quote request",a=/^re:/i.test(i)?i:`Re: ${i}`,s=[...e.inbound.references??[],e.inbound.messageIdHeader,e.inbou
139nd.externalMessageId].filter(d=>!!d),o={id:N("comm"),tenantId:e.inbound.tenantId,customerId:e.inbound.customerId,prospectId:e.inbound.prospectId,channel:"email",direction:"outbound",subject:a,threadId:e.inbound.threadId??`thread_msg_${e.inbound.id}`,replyToId:e.inbound.id,mailboxOrigin:"app",mailboxAccount:n.account,mailboxProvider:n.provider,mailboxConnectionId:n.connectionId,deliveryStatus:"draft",externalThreadId:e.inbound.externalThreadId,inReplyToHeader:e.inbound.messageIdHeader??e.inbound.externalMessageId,references:s,to:e.contact.email?[e.contact.email]:void 0,body:pS(e.contact.name,e.questions),aiDraftSourceCommunicationId:e.inbound.id,aiServiceIntent:"vehicle_quote_intake",aiDraftMissingFields:e.questions,createdAt:I(),createdById:e.assignedToId};return l.insert("communications",o),o}function Wd(e){if(e.topic==="coverage_change"){const t=af(e.inbound);if(t){const r=l.update("tasks",t.id,{assignedToId:t.assignedToId??e.assignedToId,awaitingManagerAssignment:!(t.assignedToId??e.assignedToId)||void 0,aiReplyBody:e.draft.body,aiReplySubject:e.draft.subject})??t;return Pa(e.inbound,r.id),sf(e.inbound,r),r}}return la({inbound:e.inbound,title:e.title,description:e.description,documentId:e.documentId,topic:e.topic,severity:"warning",severityReason:e.severityReason,assignedToId:e.assignedToId,awaitingManagerAssignment:!e.assignedToId||void 0,aiSummary:e.description,originalMessageContent:e.inbound.body,originalMessageId:e.inbound.id,aiReplyBody:e.draft.body,aiReplySubject:e.draft.subject,actorId:e.actorId??"ai",auditAction:"task.created_from_inbound_draft_follow_up",auditMetadata:{draftMessageId:e.draft.id,topic:e.topic}})}function ef(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"").slice(0,48)}function Qs(e,t){const r=l.list("agencies").find(o=>o.id===e.tenantId),n=e.customerId?l.list("customers").find(o=>o.id===e.customerId):void 0,i=e.assetId?l.list("assets").find(o=>o.id===e.assetId):void 0,a=e.policyId?l.list("policies").find(o=>o.id===e.policyId):void 0,s=a!=null&&a.carrierId?l.list("carriers").find(o=>o.id===a.carrierId):void 0;return c_({fileName:e.fileName,documentTypeLabel:o_(String(e.type),e.documentName),documentName:e.documentName,visibilityLabel:e.visibility.replace(/_/g," "),statusLabel:e.status,agencyName:r==null?void 0:r.name,customerName:n==null?void 0:n.name,customerEmail:n==null?void 0:n.email,customerPhone:n==null?void 0:n.phone,assetLabel:i==null?void 0:i.label,assetValue:i!=null&&i.estimatedValue?Le.money(i.estimatedValue):void 0,policyNumber:a==null?void 0:a.policyNumber,carrierName:s==null?void 0:s.name,premium:a?Le.money(a.finalPremium??a.premiumEstimate??0):void 0,effectiveDate:a!=null&&a.effectiveDate?Le.date(a.effectiveDate):void 0,renewalDate:t!=null&&t.renewalDate?Le.date(t.renewalDate):a!=null&&a.renewalDate?Le.date(a.renewalDate):void 0,termYear:e.policyTermYear,originalFileName:t==null?void 0:t.originalFileName,lineOfBusiness:e.lineOfBusiness,sourceFiles:t==null?void 0:t.sourceFiles})}function Ii(e){const t=l.list("carrierLinks").filter(n=>n.tenantId===e&&n.active),r=new Set(t.map(n=>n.carrierId));return l.list("carriers").filter(n=>r.has(n.id)&&n.status==="active")}function ec(e){var i;const t=e.carrierResult,r=Date.parse((t==null?void 0:t.responseReceivedAt)??""),n=Date.parse((t==null?void 0:t.verifiedAt)??"");if(!t||!Number.isFinite(e.premium)||e.premium<=0||!((i=e.carrierReference)!=null&&i.trim())||Number(String(t.premiumValue).replace(/[$,\s]/g,""))!==e.premium||t.referenceValue.trim()!==e.carrierReference.trim()||!t.premiumSelector.trim()||!t.referenceSelector.trim()||t.recipeVersion!==2||!/^[A-Za-z0-9][A-Za-z0-9._:-]{0,159}$/.test(String(t.carrierRecordId??""))||!/^sha256:[a-f0-9]{64}$/.test(String(t.responseDigest??""))||!Number.isFinite(r)||!Number.isFinite(n)||n<r-1e3)return!1;try{const a=new URL(t.portalUrl),s=new URL(t.responseUrl??"");if(a.protocol!=="https:"||a.username||a.password||a.search||a.hash||s.protocol!=="https:"||s.username||s.password||s.search||s.hash||a.origin!==s.origin||a.pathname.split("/").filter(Boolean).at(-1)!==encodeURIComponent(t.carrierRecordId??"")||s.pathname.split("/").filter(
139Boolean).at(-1)!==encodeURIComponent(t.carrierRecordId??"")||!t.premiumSelector.startsWith(`api:${s.toString()}#`)||!t.referenceSelector.startsWith(`api:${s.toString()}#`))return!1;const o=t.premiumOptions??[],c=t.selectedTier?o.find(d=>d.label.toLowerCase()===t.selectedTier.toLowerCase()):void 0;return t.premiumBasis==="lowest_returned_option"?!t.selectedTier&&o.length>=2&&e.premium===Math.min(...o.map(d=>d.annualPremium)):t.premiumBasis==="single_returned_option"?o.length===1&&(c==null?void 0:c.annualPremium)===e.premium:["carrier_selected","carrier_default","carrier_recommended"].includes(t.premiumBasis??"")?(c==null?void 0:c.annualPremium)===e.premium:t.premiumBasis==="carrier_total"&&!t.selectedTier}catch{return!1}}function gS(e){if(e.lineOfBusiness==="commercial")return e;const t=e.quotes??[],r=t.filter(f=>f.source==="quotex_connect"&&f.apiStatus==="connected"&&ec(f));if(r.length===t.length)return e;const n=new Set(t.filter(f=>!r.includes(f)).map(f=>f.carrierId)),i=new Set(e.selectedCarrierIds??[]),a=[...n].filter(f=>i.has(f)),s=new Set(a),o=I(),c=new Set((e.carrierQuoteAttempts??[]).map(f=>f.carrierId)),d=[...(e.carrierQuoteAttempts??[]).map(f=>s.has(f.carrierId)?{...f,status:"queued",errorCode:"CONNECT_QUOTE_PROOF_UPGRADE_REQUIRED",message:"The stored quote did not include exact carrier-response proof. Waiting for a fresh Quotex Connect retrieval.",connectJobId:void 0,updatedAt:o}:f),...a.filter(f=>!c.has(f)).map(f=>{var g;return{carrierId:f,carrierName:((g=l.list("carriers").find(y=>y.id===f))==null?void 0:g.name)??"Carrier",status:"queued",errorCode:"CONNECT_QUOTE_PROOF_UPGRADE_REQUIRED",message:"The stored quote did not include exact carrier-response proof. Waiting for a fresh Quotex Connect retrieval.",updatedAt:o}})],m=e.status==="voided"?"voided":a.length>0?"quoting":r.length>0?"complete":"gathering_info",p=a.length>0?`Removed ${t.length-r.length} stored quote result${t.length-r.length===1?"":"s"} that could not be tied to an exact carrier response. Waiting for fresh verified retrieval through Quotex Connect 0.6.10 or later.`:r.length>0?`${r.length} exact carrier-response quote${r.length===1?" remains":"s remain"}; unverified stored results were removed.`:"Stored quote results could not be tied to exact carrier responses and were removed. Select a carrier and retrieve fresh verified quotes.",u={quotes:r,carrierQuoteAttempts:d,status:m,aiSummary:p,updatedAt:o};return l.update("quotingSessions",e.id,u),{...e,...u}}function yS(e,t){return(e.appetites??[]).find(r=>r.assetType===t&&(r.line??"personal")==="personal")}function hS(e,t){var d,m,p;const r=((d=e.quotingApi)==null?void 0:d.status)??"not_configured",n=(p=(m=e.quotingApi)==null?void 0:m.endpoint)==null?void 0:p.trim(),i=Pc(e),a=!!yS(e,t.assetType),s=!t.state||e.stateAvailability.includes(t.state),o=i.quoteApiStatus,c=[];return c.push(...i.blockingReasons),a||c.push(`no personal-lines appetite for ${t.assetType.replace(/_/g," ")}`),!s&&t.state&&c.push(`not licensed in ${t.state}`),{carrierId:e.id,carrierName:e.name,provider:i.providerLabel,endpoint:n??i.portalUrl,configuredStatus:r,quoteApiStatus:o,supportsAssetType:a,writesState:s,liveReady:i.liveReady&&a&&s,blockingReasons:c}}function bS(e){const t=new Date(e);return t.setFullYear(t.getFullYear()+1),t.toISOString()}function Hs(e){return ti(e)}const Kd=new Set;function vi(e){return e.details??{}}function Jc(e){return Bt(e.vin??e.vehicleVin??e.assetIdentifier)}function IS(e){if(e.type!=="luxury_vehicle")return!1;const t=vi(e),r=Jc(t);return!r||pi(r)?!1:!(t.year&&t.make&&t.model)}async function tc(e,t){const r=l.list("assets").find(p=>p.id===e);if(!r||r.type!=="luxury_vehicle")return r;const n=vi(r);if(n.customLabel||t&&r.label!==t)return r;const i=Jc(n);if(!i||pi(i))return r;const a=await Pb(i);if(!(((a==null?void 0:a.errorCode)??"")==="0"||((a==null?void 0:a.errorCode)??"")==="")||!(a!=null&&a.year)||!a.make||!a.model)return r;const o=l.list("assets").find(p=>p.id===e);if(!o)return;const c=vi(o);if(c.customLabel||t&&o.label!==t)return o;const d={...c,year:a.year,make:a.make,model:a.model,previousLabel:c.previousLabel??o.label,labelSource:"nhtsa_vin_decode"},m=ta(o.type,d);return m===o.label?o:l.update("assets",o.id,{label:m,details:d})??void 0}function vS(e,t){tc(e,t)}function Nt(e,t){if(!e)return"";for(const r of t){const n=e[r];if(n!=null&&String(n).trim())return String(n).trim();const i=Object.keys(e).find(s=>s.toLowerCase()===r.toLowerCase()),a=i?e[i]:void 0;if(a!=null&&String(a).trim())return String(a).trim()}return""}function zs(e){if(e.assetType!=="luxury_vehicle"||!e.assetId)return;const t=l.list("assets").find(g=>g.id===e.assetId);if(!t||t.type!=="luxury_vehicle")return;const r=e.publicFields??{},n=e.assetDetails??{},i=Nt(r,["Year / make / model","yearMakeModel"]),[a,s,...o]=i.split(/\s+/).filter(
139Boolean),c={...t.details??{},...n},d=Nt(r,["year","Model year","ModelYear"])||Nt(n,["year"]),m=Nt(r,["make","Make"])||Nt(n,["make"]),p=Nt(r,["model","Model"])||Nt(n,["model"]),u=Nt(r,["trim","VIN-decoded trim","series"])||Nt(n,["trim","series"]);d?c.year=d:a&&(c.year=a),m?c.make=m:s&&(c.make=s),p?c.model=p:o.length>0&&(c.model=o.join(" ")),u&&(c.trim=u);const f=Eo({type:"luxury_vehicle",details:c,categoryLabel:"Vehicle",fallbackLabel:t.label});z.assets.update(t.id,{label:f,details:c})}function Yd(e,t,r,n){const i=new Set(t);if(i.size===0)return[];const a=Object.values(n??{}).filter(s=>s.allowDocumentAutofill).length;return l.list("documents").filter(s=>i.has(s.id)&&(s.tenantId===e||vf(s))).map((s,o)=>{const c={templateId:s.id,fileName:s.fileName,documentName:s.documentName},d=Math.max(1,A_(c)),m=T_(c,{publicFields:r,publicFieldEvidence:n}),p=Math.min(d,Math.max(m,Math.min(a+o,d)));return{templateId:s.id,fileName:s.fileName,documentName:s.documentName,formNumber:ap(s),type:String(s.type),storagePath:s.storagePath,downloadUrl:s.downloadUrl,autoFilledFieldCount:p,missingFieldCount:Math.max(0,d-p)}})}function wS(e,t){return e.flatMap(r=>{var n;return C_(r,{contactName:t.contactName,agencyName:t.agencyName,estimatedValue:t.estimatedValue,publicFields:t.publicFields,publicFieldEvidence:t.publicFieldEvidence,assetDetails:t.assetDetails,knownFields:(n=t.knownFieldsByTemplateId)==null?void 0:n[r.templateId]})})}function _S(e,t){const r=e.name.replace(/[^a-z0-9]/gi,"").slice(0,4).toUpperCase().padEnd(4,"X"),n=t.id.slice(-6).toUpperCase();return`${r}-${n}`}function AS(e,t){const r=new Set(e.map(n=>n.id));return[...e,...t.filter(n=>r.has(n.id)?!1:(r.add(n.id),!0))]}function Gs(e){const t=e.questionnaireQuestions??[];return e.lineOfBusiness!=="commercial"?t:e.commercialSecondRoundSentAt&&!e.commercialSupplementalsCompletedAt?t.filter(r=>r.round==="second_round"):_i(e)?t.filter(r=>r.round==="second_round"):t.filter(r=>!r.carrierId&&r.round!=="second_round")}function CS(){const e=globalThis.crypto;if(!(e!=null&&e.getRandomValues))throw new Error("Secure questionnaire links are unavailable in this browser.");const t=new Uint8Array(24);return e.getRandomValues(t),Array.from(t,r=>r.toString(16).padStart(2,"0")).join("")}function SS(e,t){return e.replace(/(\/customer\/questionnaire\/)[^/?#]+/i,`$1${encodeURIComponent(t)}`)}function Ws(e){return String(e??"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function TS(e){const t=Ws(e.firstName),r=Ws(e.creatorName||e.agencyName),n=Ws(e.portalUrl),i=e.supplemental?"supplemental questionnaire":"quoting questionnaire",a=e.supplemental?"Complete supplemental questionnaire":"Complete questionnaire",s=e.supplemental?"Once submitted, the requested carrier supplementals will be updated for your agent.":"Once submitted, your agent can continue the quote process and review the available carrier options.",o=e.singleQuestionnaire?`${e.questionCount} carrier question${e.questionCount===1?"":"s"} retrieved from the selected carrier sites in one questionnaire`:`${e.questionCount} question${e.questionCount===1?"":"s"} across ${e.sectionCount} section${e.sectionCount===1?"":"s"}`;return`<!doctype html>
140<html>
141  <body style="margin:0;padding:0;background:#ffffff;color:#171714;font-family:Arial,Helvetica,sans-serif;">
142    <table role="presentation" width="100%" cellspacing="0" cellpadding="0" border="0" style="background:#ffffff;">
143      <tr>
144        <td align="left" style="padding:24px;">
145          <table role="presentation" width="100%" cellspacing="0" cellpadding="0" border="0" style="max-width:620px;">
146            <tr><td style="font-size:16px;line-height:1.6;padding-bottom:18px;">Hi ${t},</td></tr>
147            <tr><td style="font-size:16px;line-height:1.6;padding-bottom:20px;">We need a few additional details to continue your quote. Your ${i} has ${o}, with the information already on file pre-filled for you.</td></tr>
148            <tr>
149              <td style="padding:4px 0 24px;">
150                <table role="presentation" cellspacing="0" cellpadding="0" border="0">
151                  <tr>
152                    <td bgcolor="#11110f" style="border-radius:6px;">
153                      <a href="${n}" target="_blank" rel="noopener noreferrer" style="display:inline-block;background:#11110f;color:#ffffff;text-decoration:none;font-size:16px;font-weight:700;line-height:1;padding:16px 22px;border-radius:6px;">${a}</a>
154                    </td>
155                  </tr>
156                </table>
157              </td>
158            </tr>
159            <tr><td style="font-size:15px;line-height:1.6;padding-bottom:22px;color:#4f4d47;">${s}</td></tr>
160            <tr><td style="font-size:16px;line-height:1.5;">Best,<br>${r}</td></tr>
161          </table>
162        </td>
163      </tr>
164    </table>
165  </body>
166</html>`}function Ks(e,t){const r=e.updatedAt||e.createdAt,n=t.updatedAt||t.createdAt;return r!==n?r<n?1:-1:e.createdAt<t.createdAt?1:-1}const Hi=new Map;function kS(e){return e.customerId?`${e.tenantId}:customer:${e.customerId}`:e.prospectId?`${e.tenantId}:prospect:${e.prospectId}`:null}function RS(e){l.list("quotingSessions").filter(t=>t.tenantId===e.tenantId&&t.id!==e.supersededBySessionId&&!Gn(t)&&(e.customerId?t.customerId===e.customerId:t.prospectId===e.prospectId)&&Ta(t)).forEac
166h(t=>{l.update("quotingSessions",t.id,{status:"voided",voidedAt:e.voidedAt,voidedReason:"Superseded by a newly started quote flow.",supersededBySessionId:e.supersededBySessionId,updatedAt:e.voidedAt})})}function Hr(e){return e.mailboxOrigin!=="provider_sync"&&e.mailboxOrigin!=="inbound_relay"||e.customerId&&l.list("customers").some(t=>t.id===e.customerId&&t.tenantId===e.tenantId)||e.prospectId&&l.list("prospects").some(t=>t.id===e.prospectId&&t.tenantId===e.tenantId)||e.carrierContactId&&l.list("carrierContacts").some(t=>t.id===e.carrierContactId&&t.tenantId===e.tenantId)?!0:!!jp(e.tenantId,e.externalRecipientEmail??"")}function ES(e){return!e.aiActivityScannedAt}function Tt(e){return e.carrierImportActive!==!1}function zr(e){if(!e.policyId)return!0;const t=l.list("policies").find(r=>r.id===e.policyId);return!t||Tt(t)}const zi=new Map,xS=3,PS=5*6e4,Jd=3;function tf(e,t){return!!e.customerId&&e.customerId===t.customerId||!!e.prospectId&&e.prospectId===t.prospectId}function wi(e){return String(e??"").trim().toLowerCase().replace(/^(?:re|fw|fwd):\s*/g,"").replace(/\s+/g," ")}function rf(e,t){return e.tenantId!==t.tenantId||e.completedAt||e.status==="resolved"||!(!!t.customerId&&e.customerId===t.customerId||!!t.prospectId&&e.prospectId===t.prospectId)||e.topic!=="coverage_change"?!1:/\b(?:quote|vehicle|vin|auto|truck|property|home)\b/i.test(`${e.title}
167${e.description??""}
168${e.aiSummary??""}
169${e.originalMessageContent??""}`)}function nf(e,t){if(e.tenantId!==t.tenantId||!tf(e,t))return!1;if(e.id===t.id||e.threadId&&e.threadId===t.threadId||e.externalThreadId&&e.externalThreadId===t.externalThreadId||e.aiDraftSourceCommunicationId===t.id||t.aiDraftSourceCommunicationId===e.id||e.replyToId===t.id||t.replyToId===e.id)return!0;const r=new Set([t.messageIdHeader,t.externalMessageId,t.inReplyToHeader,...t.references??[]].map(s=>Cn(s)).filter(Boolean));if([e.messageIdHeader,e.externalMessageId,e.inReplyToHeader,...e.references??[]].map(s=>Cn(s)).some(s=>s&&r.has(s)))return!0;const i=wi(e.subject),a=wi(t.subject);return!!i&&i===a&&/\b(?:quote|vehicle|vin|auto|truck|property|home)\b/i.test(i)}function af(e){const t=l.list("communications").filter(c=>nf(c,e)),r=new Set(t.map(c=>c.id)),n=new Set(t.map(c=>c.aiActivityTaskId).filter(c=>!!c)),i=l.list("tasks").filter(c=>rf(c,e)),a=i.filter(c=>n.has(c.id)||r.has(c.messageId??"")||r.has(c.originalMessageId??"")).sort((c,d)=>{const m=c.id===e.aiActivityTaskId||c.messageId===e.id||c.originalMessageId===e.id,p=d.id===e.aiActivityTaskId||d.messageId===e.id||d.originalMessageId===e.id;return m!==p?m?-1:1:c.createdAt<d.createdAt?1:-1});if(a[0])return a[0];const s=new Set(l.list("quotingSessions").filter(c=>c.tenantId===e.tenantId&&(!e.customerId||c.customerId===e.customerId)&&(!e.prospectId||c.prospectId===e.prospectId)&&Ta(c)).map(c=>c.id)),o=i.filter(c=>s.has(c.quoteSessionId??"")).sort((c,d)=>c.createdAt<d.createdAt?1:-1);return o.length===1?o[0]:i.length===1?i[0]:void 0}function sf(e,t){const r=new Set(l.list("tasks").filter(n=>n.id!==t.id&&rf(n,e)&&(n.id===e.aiActivityTaskId||n.messageId===e.id||n.originalMessageId===e.id)).map(n=>n.id));l.list("communications").filter(n=>n.tenantId===e.tenantId&&(n.id===e.id||r.has(n.aiActivityTaskId??""))).forEach(n=>l.update("communications",n.id,{aiActivityTaskId:t.id})),l.list("statusEvents").filter(n=>r.has(n.taskId??"")).forEach(n=>l.update("statusEvents",n.id,{taskId:t.id})),r.forEach(n=>{const i=I();l.update("tasks",n,{status:"resolved",completedAt:i,completedById:"ai",resolutionNote:"Automatically consolidated with the existing activity for this quote request.",resolutionNoteAt:i}),pe({tenantId:e.tenantId,actorId:"ai",action:"task.resolved_duplicate_quote_reply",taskId:n,metadata:{canonicalTaskId:t.id,communicationId:e.id}})})}function Zd(e){const t=wi(e.subject),r=l.list("communications").filter(n=>n.tenantId===e.tenantId&&n.direction==="outbound"&&tf(n,e)&&n.createdAt<=e.createdAt&&(n.threadId===e.threadId||!!n.externalThreadId&&n.externalThreadId===e.externalThreadId||wi(n.subject)===t||/\b(?:quote|vin|vehicle|property address|asset id|hull id|hin)\b/i.test(`${n.subject??""}
170${n.body}`))).sort((n,i)=>n.createdAt<i.createdAt?1:-1)[0];return r?`${r.subject??""}
171${r.body}`:""}function of(e){const t=[`v${Jd}`,wi(e.subject),e.body.trim().replace(/\r\n/g,`
172`),e.customerId??"",e.prospectId??""].join("␟");let r=2166136261;for(let n=0;n<t.length;
172n+=1)r^=t.charCodeAt(n),r=Math.imul(r,16777619);return`v${Jd}:${t.length}:${(r>>>0).toString(36)}`}function NS(e){const t=of(e);if(e.aiQuoteAutomationInputSignature&&e.aiQuoteAutomationInputSignature!==t||!e.aiQuoteAutomationStatus||!e.aiQuoteAutomationInputSignature&&(e.aiQuoteAutomationStatus==="skipped"||e.aiQuoteAutomationStatus==="manual")||e.aiQuoteAutomationStatus==="skipped"&&e.aiTriageVersion!==bn)return!0;if(e.aiQuoteAutomationStatus==="failed")return(e.aiQuoteAutomationAttempts??0)<xS;if(e.aiQuoteAutomationStatus!=="pending")return!1;const r=Date.parse(e.aiQuoteAutomationProcessedAt??"");return!Number.isFinite(r)||Date.now()-r>PS}function qS(e){const t=new Set(l.list("communications").filter(i=>nf(i,e)).map(i=>i.id));t.add(e.id);const r=l.list("communications").filter(i=>i.tenantId===e.tenantId&&t.has(i.aiDraftSourceCommunicationId??"")&&i.aiServiceIntent==="vehicle_quote_intake"&&i.deliveryStatus==="draft"),n=new Set(r.map(i=>i.id));n.size!==0&&(l.list("aiNotifications").filter(i=>i.tenantId===e.tenantId&&(n.has(i.messageId??"")||t.has(i.communicationId??""))).forEach(i=>l.remove("aiNotifications",i.id)),r.forEach(i=>l.remove("communications",i.id)),t.forEach(i=>l.update("communications",i,{aiReplyDraftId:void 0,aiDraftMissingFields:void 0})))}function OS(e){return e.identifierKind==="vin"?{vin:e.identifier}:e.identifierKind==="address"?{propertyAddress:e.identifier,address:e.identifier}:e.identifierKind==="hin"?{hin:e.identifier}:{assetIdentifier:e.identifier}}function DS(e,t){const r=vi(e);return String(t==="vin"?r.vin??r.vehicleVin??r.assetIdentifier??"":t==="address"?r.propertyAddress??r.riskAddress??r.address??r.primaryResidenceAddress??"":t==="hin"?r.hin??r.hullId??r.hullIdentificationNumber??"":r.assetIdentifier??r.identifier??r.assetId??"")}function LS(e,t){return e.type!==t.assetType?!1:yd(t.identifierKind,DS(e,t.identifierKind))===yd(t.identifierKind,t.identifier)}function MS(e,t){const r=z.categories.listActiveForTenant(e).filter(i=>i.lineOfBusiness==="personal"&&i.assetType===t.assetType);if(r.length<=1)return r[0];const n=t.assetType==="luxury_vehicle"?/\b(?:auto|vehicle|car|truck)\b/i:t.assetType==="coastal_home"?/\b(?:home|house|property|dwelling)\b/i:t.assetType==="yacht"?/\b(?:boat|yacht|marine|watercraft)\b/i:t.assetType==="jewelry"?/\b(?:jewelry|valuable|collection)\b/i:/./;return r.find(i=>n.test(i.label))??r[0]}function $S(e){const t=l.list("aiNotifications").find(n=>n.tenantId===e.inbound.tenantId&&n.kind==="inbound_notice"&&n.quoteSessionId===e.session.id&&n.assetId===e.asset.id&&n.title===`Quote flow started - ${e.customer.name}`);if(t)return t;const r={id:N("ain"),tenantId:e.inbound.tenantId,kind:"inbound_notice",title:`Quote flow started - ${e.customer.name}`,summary:`Quotex received the requested ${e.asset.type==="luxury_vehicle"?"VIN":"asset identifier"} and automatically continued the personal-lines quote flow for ${e.asset.label}.`,customerId:e.customer.id,assetId:e.asset.id,quoteSessionId:e.session.id,communicationId:e.inbound.id,topic:"coverage_change",severity:"info",severityReason:"The client supplied the information needed to start or continue the personal-lines quote flow.",aiSummary:"The inbound reply was matched to the existing client, asset, activity, and quote flow.",originalMessageContent:e.inbound.body,originalMessageId:e.inbound.id,assignedToId:e.assignedToId,createdAt:I()};return l.insert("aiNotifications",r),r}function _i(e){if(e.commercialApplicationSentAt)return e.commercialApplicationSentAt;const t=Array.from(new Set((e.commercialCarrierSubmissions??[]).flatMap(n=>n.applicationMessageIds??[])));if(t.length>0){const n=new Map(l.list("communications").filter(s=>s.tenantId===e.tenantId).map(s=>[s.id,s])),i=t.every(s=>{var c;const o=(c=n.get(s))==null?void 0:c.deliveryStatus;return o==="sent"||o==="synced"}),a=(e.commercialCarrierSubmissions??[]).some(s=>!!s.sentAt&&(s.applicationMessageIds??[]).some(o=>t.includes(o)));if(!i&&!a)return}const r=(e.commercialCarrierSubmissions??[]).find(n=>{var i,a;return(((i=n.applicationMessageIds)==null?void 0:i.length)??0)>0||(((a=n.applicationDocumentIds)==null?void 0:a.length)??0)>0||n.status==="application_sent"||n.status==="awaiting_response"||n.status==="accepted"||n.status==="declined"||n.status==="needs_client_info"||n.status==="needs_supplemental"||n.status==="supplemental_sent"||n.status==="agent_review"});return(r==null?void 0:r.sentAt)??e.commercialSecondRoundSentAt??e.commercialSupplementalsCompletedAt}
172function Gr(e){let t=e.lineOfBusiness==="commercial"?e:Mp(e);if(t.lineOfBusiness!=="commercial")return gS(t);const r={},n=_i(t);n&&!t.commercialApplicationSentAt&&(r.commercialApplicationSentAt=n),n&&!t.commercialQuestionnairePreparedAt&&(r.commercialQuestionnairePreparedAt=n);const i=(t.questionnaireQuestions??[]).some(s=>!s.carrierId&&s.round!=="second_round"),a=(t.commercialAcordTemplates??[]).length>0;return!t.commercialQuestionnairePreparedAt&&i&&a&&(r.commercialQuestionnairePreparedAt=t.updatedAt??n??t.createdAt),t.commercialQuestionnairePreparedAt&&(t.questionnaireQuestions??[]).length===0&&!n&&(r.questionnaireQuestions=Wa(t)),n&&t.status==="gathering_info"&&(r.status="awaiting_reply"),t.quotes.length>0&&t.status==="gathering_info"&&(r.status=t.commercialSecondRoundSentAt&&!t.commercialSupplementalsCompletedAt?"awaiting_reply":"complete"),t.commercialSupplementalsCompletedAt&&t.quotes.length>0&&t.status!=="complete"&&(r.status="complete"),Object.keys(r).length>0?{...t,...r}:t}function Wa(e){const t=vt(e),r=l.list("agencies").find(a=>a.id===e.tenantId),n=e.commercialAcordTemplates??[],i=XS(n,e,{},"application");return cf(FS(e).concat(wS(n,{contactName:(t==null?void 0:t.name)??"Commercial applicant",agencyName:r==null?void 0:r.name,estimatedValue:e.estimatedValue,state:e.state,publicFields:e.publicFields,publicFieldEvidence:e.publicFieldEvidence,assetDetails:e.assetDetails,knownFieldsByTemplateId:i})),e.questionnaireResponses??{},e.questionnaireResponseMeta??{})}function FS(e){const t=vt(e);return Pm({contactName:(t==null?void 0:t.name)??"Commercial applicant",carrierList:[],knownPublicFields:e.publicFields}).filter(r=>!r.carrierId)}function cf(e,t,r){return e.filter(n=>!n.id.startsWith("base-")||BS(n)||!ee(t[n.id])?!0:!lf(r[n.id]))}function BS(e){return/\b(claim|claims|loss|losses)\b/i.test(`${e.id} ${e.label}`)}function lf(e){return!e||e.updatedByRole!=="ai"||e.reviewStatus==="conflict"||e.reviewStatus==="needs_confirmation"||e.reviewStatus==="advisory"||e.conflictReason?!1:e.verified?!0:new Set(["agent_seed","client_intake","validated_address","public_geocoder","government_api","commercial_provider","carrier_api"]).has(String(e.sourceKind??""))}function Fn(e,t){return e.filter(r=>{var n;return r.required&&!((n=t[r.id])!=null&&n.trim())}).map(r=>r.label)}function US(e){const t=[{label:`${e.name}: confirm cyber liability coverage carried separately`,kind:"select",options:["Yes","No","Pending quote"]},{label:`${e.name}: confirm operations outside the US`,kind:"select",options:["No","Canada/Mexico only","Worldwide"]}];return e.preferredAssetTypes.includes("luxury_vehicle")&&t.push({label:`${e.name}: fleet schedule - number of company-owned vehicles`,kind:"number"}),e.preferredAssetTypes.includes("coastal_home")&&t.push({label:`${e.name}: commercial property schedule - locations and square footage`,kind:"textarea"}),t.push({label:`${e.name}: pending or threatened litigation details`,kind:"textarea"}),t.slice(0,3)}function Xd(e){if((e.appetites??[]).some(r=>r.line==="commercial"))return!0;const t=[e.name,e.appetiteNotes,e.tendencyNotes,e.underwritingRules].filter(Boolean).join(" ").toLowerCase();return/\b(commercial|business|bop|workers|general liability|professional liability|fleet|company|main[-\s]?street|small[-\s]?commercial|farm)\b/.test(t)}function eu(e,t){return l.list("documents").filter(r=>r.tenantId===e&&r.carrierId===t&&r.lineOfBusiness==="commercial")}function Sn(e,t){return l.list("carrierContacts").filter(r=>r.tenantId===e&&r.carrierId===t&&r.position==="underwriter"&&!!r.email).sort((r,n)=>r.name.localeCompare(n.name))}function VS(e,t={}){const r=Ii(e.tenantId).filter(s=>Xd(s)||eu(e.tenantId,s.id).length>0||Sn(e.tenantId,s.id).length>0),n=kc({carriers:r,assetType:e.assetType,estimatedValue:e.estimatedValue||1e6,state:e.state,lineOfBusiness:"commercial"}).quotes,i=Math.min(.08,Object.values(t).filter(s=>s.trim()).length*.01),a=[];return n.forEach(s=>{const o=r.find(w=>w.id===s.carrierId);if(!o)return;const c=Sn(e.tenantId,o.id),d=eu(e.tenantId,o.id).length,m=Xd(o),p=Pc(o),u=p.provider==="carrier_portal_automation"&&p.hasPortalUrl&&p.quoteApiStatus!=="no_api",f=Math.min(1,s.score
172+(m?.18:0)+(u?.1:c.length>0?.08:-.06)+(d>0?.05:0)+i),g=c.length===1?`1 underwriter on file (${c[0].name})`:c.length>1?`${c.length} underwriters on file`:"no underwriter email on file",y=d>0?`${d} commercial document${d===1?"":"s"} on file`:"no commercial documents uploaded",h=u?`${p.providerLabel} can queue a secured background portal submission`:c.length>0?"underwriter email workflow is available":"no carrier submission connector on file";a.push({carrierId:o.id,carrierName:o.name,rank:0,score:f,fitReason:s.fitReason,hasCommercialAppetite:m,commercialDocumentCount:d,underwriterContacts:c,connectorLabel:u?p.providerLabel:void 0,automationAvailable:u,disabledReason:c.length===0&&!u?"Add an underwriter email or configure carrier portal automation before sending.":void 0,aiRationale:[m?"AI recognized commercial appetite from the carrier profile.":"AI found commercial readiness from agency documents or contacts.",g,y,h].join(" ")})}),a.sort((s,o)=>o.score-s.score||s.carrierName.localeCompare(o.carrierName)).map((s,o)=>({...s,rank:o+1}))}function vt(e){return e.customerId?oe(l.list("customers"),e.tenantId).find(t=>t.id===e.customerId)??null:e.prospectId?oe(l.list("prospects"),e.tenantId).find(t=>t.id===e.prospectId)??null:null}function df(e,t,r){var s;const n=t.replace(/[^a-z0-9]+/gi,"-").replace(/^-|-$/g,"").slice(0,42)||"Commercial-applicant",i=e.fileName.replace(/\.[^.]+$/,""),a=((s=e.fileName.match(/\.[^.]+$/))==null?void 0:s[0])??".pdf";return`${i}-${n}-${r==="application"?"completed":"supplemental-completed"}${a}`}function Ka(e,t,r){const n=vt(e),i=l.list("agencies").find(A=>A.id===e.tenantId),a=e.customerId??(n&&"customerId"in n?n.customerId:void 0),s=e.prospectId??(!a&&n?n.id:void 0),c=oe(l.list("assets"),e.tenantId).filter(A=>!!a&&A.customerId===a||!!e.assetId&&A.id===e.assetId),d=new Set(c.map(A=>A.id));e.assetId&&d.add(e.assetId);const m=oe(l.list("policies"),e.tenantId).filter(A=>!!a&&A.customerId===a||!!e.assetId&&A.assetId===e.assetId||d.has(A.assetId)),p=new Set(m.map(A=>A.id)),u=oe(l.list("claims"),e.tenantId).filter(A=>!!a&&A.customerId===a||!!A.policyId&&p.has(A.policyId)),f=new Set(u.map(A=>A.id)),g=oe(l.list("documents"),e.tenantId).filter(A=>!String(A.type).startsWith("completed_acord")&&(!!a&&A.customerId===a||!!e.assetId&&A.assetId===e.assetId||!!A.assetId&&d.has(A.assetId)||!!A.policyId&&p.has(A.policyId)||!!A.claimId&&f.has(A.claimId)||A.quoteRequestId===e.id)),y=oe(l.list("notes"),e.tenantId).filter(A=>!!a&&A.customerId===a||!!s&&A.prospectId===s||!!A.policyId&&p.has(A.policyId)),h=oe(l.list("communications"),e.tenantId).filter(A=>!!a&&A.customerId===a||!!s&&A.prospectId===s),w=new Set(m.map(A=>A.carrierId)),T=Ii(e.tenantId),b=l.list("carriers").filter(A=>A.status==="active"),_=[...T,...b.filter(A=>w.has(A.id))].filter((A,v,S)=>S.findIndex(C=>C.id===A.id)===v);return{agency:i,contact:n,assets:c,policies:m,carriers:_,claims:u,documents:g,notes:y,communications:h,session:e,questions:e.questionnaireQuestions??[],responses:jS(e,{...e.questionnaireResponses??{},...t}),templateDocument:r}}function jS(e,t){const r=new Map((e.questionnaireQuestions??[]).map(n=>[n.id,n]));return Object.fromEntries(Object.entries(t).filter(([n,i])=>{var c;if(!String(i??"").trim())return!1;const a=(c=e.questionnaireResponseMeta)==null?void 0:c[n];if((a==null?void 0:a.updatedByRole)!=="ai")return!0;const s=r.get(n);return s?[s.acordFieldKey,s.label,...s.acordFieldLabels??[]].filter(d=>!!(d!=null&&d.trim())).some(d=>Er(Ie(e.publicFieldEvidence,d))):!1}))}function Zc(e){if(e!=null){if(typeof e=="string"){const t=e.trim();return t?t.slice(0,500):void 0}if(typeof e=="number"&&Number.isFinite(e)||typeof e=="boolean")return e}}function qt(e,t){if(!e||typeof e!="object")return null;const r=e,n={};return t.forEach(i=>{const a=Zc(r[i]);a!==void 0&&(n[i]=a)}),Object.keys(n).length?n:null}function Bn(e,t=24){if(!e||typeof e!="object")return{};const r={};for(const[n,i]of Object.entries(e).slice(0,t)){const a=Zc(i);a!==void 0&&(r[n]=a)}return r}function tu(e,t=60){if(!e)return{};const r={};for(const[n,i]of Object.entries(e).slice(0,t))r[n]={fieldKey:i.fieldKey,sourceKind:i.sourceKind,sourceLabel:i.sourceLabel,...i.sourceUrl?{sourceUrl:i.sourceUrl}:{},confidence:i.confidence,verified:i.verified,allowDocumentAutofill:i.allowDocumentAutofill,...i.observedDate?{observedDate:i.observedDate}:{},...i.reviewStatus?{reviewStatus:i.reviewStatus}:{},...i.reviewReason?{reviewReason:i.reviewReason}:{},...i.conflictReason?{conflictReason:i.conflictReason}:{},...typeof i.corroboratingSourceCount=="number"?{corroboratingSourceCount:i.corroboratingSourceCount}:{},...i.notes?{notes:i.notes.slice(0,220)}:{}};return r}function rc(e,t,r){const n=Ka(e,t,r),i=n.contact;return{agency:qt(n.agency,["id","name","legalName","agencyName","address","phone","contactEmail","supportEmail","email","website"]),contact:qt(i,["id","name","businessName","email","phone","address","mailingAddress","operationsDescription","customerId"]),session:{id:e.id,lineOfBusiness:e.lineOfBusiness,assetType:e.assetType,categoryLabel:e.categoryLabel,estimatedValue:e.estimatedValue||void 0,state:e.state,assetDetails:Bn(e.assetDetails,30),publicFields:Bn(e.publicFields,60),publicFieldEvidence:tu(e.publicFieldEvidence,60),selectedAssets:(e.selectedAssetMappings??[]).map(a=>({assetId:a.assetId,label:a.label,assetType:a.assetType,address:a.address,estimatedValue:a.estimatedValue||void 0,assetDetails:Bn(a.assetDetails,30),publicFields:Bn(a.publicFields,60),publicFieldEvidence:tu(a.publicFieldEvidence,60),missingFields:a.missingFields.slice(0,60)}))},assets:n.assets.slice(0,12).map(a=>({id:a.id,label:a.label,assetType:a.type,estimatedValue:a.estimatedValue||void 0,details:Bn(a.details,30)})),policies:n.policies.slice(0,12).map(a=>({id:a.id,assetId:a.assetId,policyNumber:a.policyNumber,carrierId:a.carrierId,status:a.status,effectiveDate:a.effectiveDate,renew
172alDate:a.renewalDate,finalPremium:a.finalPremium,premiumEstimate:a.premiumEstimate,coverages:(a.coverages??[]).slice(0,18).map(s=>({name:s.name,limit:s.limit,deductible:s.deductible,description:s.description})),participants:(a.participants??[]).slice(0,18).map(s=>qt(s,["name","participantType","role","status","relationship","assignedAssetId","licenseNumber","licenseState","dateOfBirth","dob","phone","email"])),additionalInsureds:(a.additionalInsureds??[]).slice(0,18).map(s=>qt(s,["name","holderType","address","loanNumber","relationship"]))})),carriers:n.carriers.slice(0,24).map(a=>qt(a,["id","name","naic","status"])),claims:n.claims.slice(0,18).map(a=>qt(a,["id","externalClaimNumber","carrierId","policyId","openedAt","lossDescription","lossAmountUsd","status"])),documents:n.documents.slice(0,30).map(a=>qt(a,["id","documentName","fileName","type","status","uploadedAt"])),notes:n.notes.slice(0,12).map(a=>qt(a,["id","title","body","createdAt","source"])),communications:n.communications.slice(0,12).map(a=>qt(a,["id","subject","body","direction","channel","sentAt","createdAt"])),questions:n.questions.map(a=>({id:a.id,label:a.label,acordFieldLabels:a.acordFieldLabels??[]})),responses:Object.fromEntries(Object.entries(n.responses).map(([a,s])=>[a,Zc(s)]).filter(a=>a[1]!==void 0))}}function QS(e,t){const r=Ya(e,t),n=new Set;return(r.templateFieldLayout??[]).map(i=>{var a;return{label:((a=i.label)==null?void 0:a.trim())??"",required:i.required===!0,kind:i.kind??"text",page:i.page}}).filter(i=>{const a=i.label.toLowerCase();return!a||n.has(a)?!1:(n.add(a),!0)})}function HS(e){return nc(Wa(e))}function nc(e){return e.map(t=>({id:t.id,label:t.label,section:t.section,acordFieldLabels:t.acordFieldLabels??[],acordFieldKey:t.acordFieldKey,required:t.required===!0,kind:t.kind,options:t.options??[]}))}function ic(e){var o;const t=e==null?void 0:e.detail,r=(o=e==null?void 0:e.detail)==null?void 0:o.status,n=typeof(t==null?void 0:t.error)=="string"?t.error.trim():"",i=e instanceof Error?e.message:String(e??""),s=`${n} ${i}`.toLowerCase();return r===504||s.includes("function_invocation_timeout")||s.includes("timeout")||s.includes("abort")?"timeout":n||"provider_unavailable"}function ru(e){return{}}const zS=new Set(["currentStreetAddress","currentCity","currentState","currentZipCode","ratingState","ratingCounty","uspsValidated","vehicleYear","vehicleMake","vehicleModel","vehicleTrim","vehicleBodyStyle","vehicleOriginalMsrp","vehicleEngine","vehicleCylinders","vehicleDisplacement","vehicleFuelType","vehicleDriveType","vehicleDoorCount","antiLockBrakes","antiTheftDevice","airbags"]),GS=new Set(["web_search","public_web","public_geocoder","government_api","commercial_provider","imagery_vision"]);function Gi(e){return e==null?"":(typeof e=="string"||typeof e=="number"||typeof e=="boolean"?String(e):JSON.stringify(e)).toLowerCase().replace(/[^a-z0-9]+/g,"").trim()}function Wi(e){return e?(new Map([["carrier_api",50],["government_api",48],["validated_address",46],["public_geocoder",44],["commercial_provider",40],["agent_seed",38],["client_intake",38],["web_search",32],["public_web",28],["imagery_vision",20],["model_estimate",5],["unknown",0]]).get(e.sourceKind)??0)+(e.verified?10:0)+e.confidence:0}function WS(e,t,r,n){const i=`__asset_${t.assetId??r}`;return e.filter(a=>n===1||a.id.endsWith(i)||a.label.startsWith(`${t.label}: `)).map(a=>({id:a.id,key:a.acordFieldKey,label:a.label.startsWith(`${t.label}: `)?a.label.slice(t.label.length+2):a.label,inputType:a.kind,kind:a.kind,options:a.options,required:a.required,acordFieldKey:a.acordFieldKey,acordFieldLabels:a.acordFieldLabels}))}async function KS(e,t){const r=e.selectedAssetMappings??[];if(e.lineOfBusiness==="commercial"||r.length===0||t.length===0)return{selectedAssetMappings:r,publicFields:{...e.publicFields??{}},publicFieldEvidence:{...e.publicFieldEvidence??{}},conflictCount:0,enrichedFieldCount:0};let n=0,i=0;const a=await Promise.all(r.map(async(c,d)=>{var y,h,w,T;const m=WS(t,c,d,r.length);if(m.length===0)return c;const p=await Tc(c.assetType,{...c.assetDetails??{},...c.publicFields,assetId:c.assetId,address:c.address??((y=c.assetDetails)==null?void 0:y.riskAddress)??((
172h=c.assetDetails)==null?void 0:h.propertyAddress)??((w=e.assetDetails)==null?void 0:w.riskAddress)??((T=e.assetDetails)==null?void 0:T.propertyAddress),estimatedValue:c.estimatedValue||void 0},m),u={...c.publicFields},f={...c.publicFieldEvidence??{}},g=(b,_,A)=>{m.forEach(v=>{var B;const S=t.find(F=>F.id===v.id);if(!S||!si(S,b)||new Set(["web_search","public_web","government_api","commercial_provider","imagery_vision"]).has(A.sourceKind)&&(!kt(S)||!An(A.sourceUrl)||!Mt(A.sourceUrl,e,c)))return;const k=ee(_),O=bt(S,k)??((B=S.options)!=null&&B.length?"":k);if(!O||!Vt(S,O)||!ar(S,O))return;const x=u[S.id],$=bt(S,x)??ee(x),q=Ie(f,S.id);if(x!=null&&Gi($)!==Gi(O)&&(q==null?void 0:q.sourceKind)!=="model_estimate"){const F="Carrier-targeted research returned conflicting answers for this exact carrier question. Confirm it before submission.";f[S.id]={...q??A,fieldKey:S.id,allowDocumentAutofill:!1,verified:!1,reviewStatus:"conflict",reviewReason:F,conflictReason:F},n+=1;return}if(x==null||(q==null?void 0:q.sourceKind)==="model_estimate"||Wi(A)>=Wi(q)){u[S.id]=O,f[S.id]={...A,fieldKey:S.id};const F=Dr(e,S);F&&u[F]==null&&(u[F]=O,f[F]={...A,fieldKey:F})}})};for(const[b,_]of Object.entries(p.fields??{})){if(b==="imageryFindings")continue;const A=Ie(p.evidence,b);if(!A||!He(A))continue;const v=new Set(["web_search","public_web","government_api","commercial_provider","imagery_vision"]).has(A.sourceKind),S=m.map(q=>t.find(B=>B.id===q.id)).filter(q=>!!(q&&si(q,b)));if(v&&(!An(A.sourceUrl)||!Mt(A.sourceUrl,e,c)||!kt({label:b})||S.some(q=>!kt(q))))continue;const C=u[b],k=Ie(f,b);if(C!=null&&Gi(C)!==Gi(_)&&(k==null?void 0:k.sourceKind)!=="model_estimate"){const q=`Carrier-targeted research returned a value that conflicts with existing ${(k==null?void 0:k.sourceLabel)??"intake"} data. Confirm this field before carrier submission.`,B={...k??A,fieldKey:b,allowDocumentAutofill:!1,verified:!1,reviewStatus:"conflict",reviewReason:q,conflictReason:q,notes:[k==null?void 0:k.notes,A.notes,q].filter(Boolean).join(" ")};f[b]=B,m.forEach(F=>{const Y=t.find(X=>X.id===F.id);Y&&si(Y,b)&&(f[Y.id]={...B,fieldKey:Y.id})}),n+=1;continue}(C==null||(k==null?void 0:k.sourceKind)==="model_estimate"||Wi(A)>Wi(k))&&(u[b]=_,f[b]={...A,fieldKey:b},i+=1);const x=u[b],$=Ie(f,b);x!=null&&$&&He($)&&g(b,x,$)}return{...c,publicFields:u,publicFieldEvidence:f,missingFields:Array.from(new Set([...p.unavailableFields??[],...c.missingFields])).filter(b=>u[b]==null),aiSummary:[c.aiSummary,p.notes].filter(Boolean).join(" ")}})),s={...e.publicFields??{}},o={...e.publicFieldEvidence??{}};return a.forEach((c,d)=>{Object.entries(c.publicFields).forEach(([m,p])=>{var g;const u=r.length===1?m:`${c.label} - ${m}`;s[u]=p;const f=(g=c.publicFieldEvidence)==null?void 0:g[m];f&&(o[u]={...f,fieldKey:u})}),Object.entries(c.publicFieldEvidence??{}).forEach(([m,p])=>{if(!p.conflictReason)return;const u=r.length===1?m:`${c.label} - ${m}`;o[u]={...p,fieldKey:u},t.some(f=>f.id===m)&&(o[m]={...p,fieldKey:m})})}),{selectedAssetMappings:a,publicFields:s,publicFieldEvidence:o,conflictCount:n,enrichedFieldCount:i}}async function Ys(e,t=e.questionnaireQuestions??[],r=e.questionnaireResponses??{}){var j,Q,ae,ue,de,be,P,Z,le,Te,me;if(nc(t).length===0)return e;if(e.lineOfBusiness!=="commercial"&&e.personalCarrierQuestionMappingCompletedAt&&kw(e)){const re=ri(e,{questions:t,responses:e.questionnaireResponses??r,responseMeta:e.questionnaireResponseMeta,createdAt:((j=e.personalCarrierAnswerSet)==null?void 0:j.createdAt)??I()});if(((Q=re.personalCarrierAnswerSet)==null?void 0:Q.answerSetDigest)===((ae=e.personalCarrierAnswerSet)==null?void 0:ae.answerSetDigest)&&((ue=re.personalRiskFactDossier)==null?void 0:ue.dossierDigest)===((de=e.personalRiskFactDossier)==null?void 0:de.dossierDigest))return e}const i=new Set(e.carrierQuestionSuccessfulIds??[]),a=Array.from(new Set(e.selectedCarrierIds??[])),o=e.lineOfBusiness!=="commercial"&&a.length>0&&a.every(re=>i.has(re))?await KS(e,t):{selectedAssetMappings:e.selectedAssetMappings??[],publicFields:{...e.publicFields??{}},publicFieldEvidence:{...e.publicFieldEvidence??{}},conflictCount:0,enrichedFieldCount:0},c=e.lineOfBusiness!=="commercial"&&e.assetType==="luxury_vehicle",d=o.selectedAssetMappings,m=o.publicFields,p=o.publicFieldEvidence;let u={...e.questionnaireResponses??{}},f={...e.questionnaireResponseMeta??{}},g=0;const y=new Map;let h="",w,T;const b=vt(e),_=e.lineOfBusiness!=="commercial";if(_){const re=I(),ye=Ea({session:{...e,selectedAssetMappings:d,publicFields:m,publicFieldEvidence:p,questionnaireResponses:u,questionnaireResponseMeta:f},questions:t,contactName:b==null?void 0:b.name,contactEmail:b==null?void 0:b.email,contactPhone:b==null?void 0:b.phone,businessName:b&&"businessName"in b?b.businessName:void 0,address:oi(e),estimatedValue:e.estimatedValue,assetDetails:e.assetDetails,publicFields:m,publicFieldEvidence:p,updatedAt:re});u=ye.questionnaireResponses,f=ye.questionnaireResponseMeta}const A=t.filter(re=>!ee(u[re.id])),v=t.length-A.length;try{const re=await Aa({tenantId:e.tenantId,template:{documentName:e.lineOfBusiness==="commercial"?"Commercial questionnaire":"Personal lines questionnaire",fileName:e.lineOfBusiness==="commercial"?"commercial-questionnaire":"personal-lines-questionnaire",formNumber:e.lineOfBusiness==="commercial"?"Commercial intake":"Personal intake"},fields:nc(A),dossier:rc({...e,selectedAssetMappings:d,publicFields:m,publicFieldEvidence:p,questionnaireResponses:u,questionnaireResponseMeta:f},_?u:r),intent:"questionnaire_prefill"});h=re.summary,w=re.providerError,T=re.providerErrorCode;const ye=I(),lr=new Map(t.map(he=>[he.id,he])),En=new Map(t.map(he=>[Ce(Or(e,he)??""),he]).filter(([he])=>!!he)),jt={contactName:(be=vt(e))==null?void 0:be.name,publicFields:m,address:oi(e)},je=new Set,xt=(he,ct,Xe,Ur)=>{var il;const Fe=(Xe&&lr.has(Xe)?lr.get(Xe):void 0)??(c?En.get(Ce(he)):void 0);if(Xe&&!Fe||c&&!Fe)return!1;const dr=Fe?Or(e,Fe):void 0,Ye=Ie(re.publicFieldEvidence,he)??(Xe?Ie(re.publicFieldEvidence,Xe):void 0)??(Fe?Ep(Ur,he,ye):void 0);if([Ie(p,he),Xe?Ie(p,Xe):void 0,Fe?kn(Fe).map(Qe=>Ie(p,Qe)).find(Qe=>(Qe==null?void 0:Qe.reviewStatus)==="conflict"||!!(Qe!=null&&Qe.conflictReason)):void 0].find(Qe=>(Qe==null?void 0:Qe.reviewStatus)==="conflict"||!!(Qe!=null&&Qe.conflictReason))||c&&
172(!Ye||GS.has(Ye.sourceKind)&&(!dr||!zS.has(dr)))||!Ye||!He(Ye))return!1;const te=dr??(Fe?Rp(Fe,he,ct,jt)??(Vt(Fe,ct)?Fe.label:null):he);if(!te||!ka(te,ct,jt))return!1;const ne=Fe??t.find(Qe=>{const es=Ra(Qe,{[he]:ct});return es?qr(Qe,es.key,es.value):!1});if(!ne||new Set(["web_search","public_web","government_api","commercial_provider","imagery_vision"]).has(Ye.sourceKind)&&(!kt(ne)||!bi(ne,Ye)||!An(Ye.sourceUrl)||!Mt(Ye.sourceUrl,e,Fe?Ga(e,Fe):void 0)))return!1;const Re=!!(Xe&&Fe&&dr)&&Ce(dr??"")===Ce(he);if(Xe&&Fe&&!Re&&!qr(ne,te,ee(ct)))return!1;const Be=Qa(ne,ct);if(!Be||!ar(ne,Be))return!1;const Qt=ee(u[ne.id]),et=f[ne.id];if(Qt&&(et==null?void 0:et.updatedByRole)!=="ai")return!1;const Vr=Ie(p,te)??Ie(p,ne.label),Za=!!Qt&&((il=f[ne.id])==null?void 0:il.updatedByRole)==="ai"&&(Vr==null?void 0:Vr.sourceKind)==="model_estimate"&&Ye.sourceKind!=="model_estimate"&&He(Ye),rl=(Vr==null?void 0:Vr.sourceKind)==="model_estimate"&&Ye.sourceKind!=="model_estimate";if(Qt&&!Za)return!1;u[ne.id]=Be;const Xa=kp(ne,{...Ye,collectedAt:Ye.collectedAt||ye}),nl=za(ye,Xa);return f[ne.id]=nl,y.set(ne.id,{value:Be,meta:nl}),(!m[he]||Za||rl)&&(m[he]=Be,p[he]=Xa),Fe&&(!m[ne.label]||Za||rl||!He(Ie(p,ne.label)))&&(m[ne.label]=Be,p[ne.label]={...Xa,fieldKey:ne.label}),g+=1,je.add(he),!0};for(const he of re.mappings??[])xt(he.targetField,he.value,he.targetId,he);for(const[he,ct]of Object.entries(re.fields))je.has(he)||xt(he,ct)}catch(re){h=re instanceof Error?`OpenAI research could not complete: ${re.message}`:"OpenAI research could not complete.",w=re instanceof Error?re.message:"OpenAI research could not complete.",T=ic(re)}const S=I(),C=Ea({session:{...e,selectedAssetMappings:d,publicFields:m,publicFieldEvidence:p,questionnaireResponses:u,questionnaireResponseMeta:f,updatedAt:S},questions:t,contactName:b==null?void 0:b.name,contactEmail:b==null?void 0:b.email,contactPhone:b==null?void 0:b.phone,businessName:b&&"businessName"in b?b.businessName:void 0,address:oi({...e,publicFields:m}),estimatedValue:e.estimatedValue,assetDetails:e.assetDetails,publicFields:m,publicFieldEvidence:p,updatedAt:S});u=C.questionnaireResponses,f=C.questionnaireResponseMeta;for(const[re,ye]of y)u[re]=ye.value,f[re]=ye.meta;const k=t.filter(re=>{var ye;return!ee((ye=e.questionnaireResponses)==null?void 0:ye[re.id])&&!!ee(u[re.id])}).length,O=t.some(re=>{var ye;return ee((ye=e.questionnaireResponses)==null?void 0:ye[re.id])!==ee(u[re.id])}),x=t.filter(re=>{var ye;return re.required&&!((ye=u[re.id])!=null&&ye.trim())}).map(re=>re.label),$=e.missingFields.length!==x.length||e.missingFields.some((re,ye)=>re!==x[ye]),q=!!h&&!((P=e.aiSummary)!=null&&P.includes(h)),B=(e.aiProviderError??"")!==(w??"")||(e.aiProviderErrorCode??"")!==(T??""),F=ri({...e,selectedAssetMappings:d,publicFields:m,publicFieldEvidence:p,questionnaireQuestions:t,questionnaireResponses:u,questionnaireResponseMeta:f,missingFields:x},{questions:t,responses:u,responseMeta:f,createdAt:S}),Y=((Z=F.personalCarrierAnswerSet)==null?void 0:Z.answerSetDigest)!==((le=e.personalCarrierAnswerSet)==null?void 0:le.answerSetDigest)||((Te=F.personalRiskFactDossier)==null?void 0:Te.dossierDigest)!==((me=e.personalRiskFactDossier)==null?void 0:me.dossierDigest);if(console.info("[QuoteX questionnaire mapping coverage]",{questionCount:t.length,deterministicSeedCount:v,targetedEnrichmentCount:o.enrichedFieldCount,acceptedAiMappingCount:g,exactTransferCount:y.size,exactTransferMismatchCount:[...y].filter(([re,ye])=>u[re]!==ye.value).length,finalAnsweredCount:t.filter(re=>!!ee(u[re.id])).length,finalAddedCount:k,remainingRequiredCount:x.length,providerErrorCode:T??null}),!O&&!$&&g===0&&o.enrichedFieldCount===0&&o.conflictCount===0&&!q&&!B&&!Y)return e;const X=k>0?`OpenAI research prefilled ${k} editable questionnaire answer${k===1?"":"s"} for review.`:q?"OpenAI research did not add any editable questionnaire answers.":"";return l.update("quotingSessions",e.id,{selectedAssetMappings:d,publicFields:m,publicFieldEvidence:p,questionnaireResponses:u,questionnaireResponseMeta:f,missingFields:x,...F,aiSummary:[e.aiSummary,o.enrichedFieldCount>0?`Carrier-targeted research added ${o.enrichedFieldCount} source-backed value${o.enrichedFieldCount===1?"":"s"}.`:"",o.conflictCount>0?`${o.conflictCount} conflicting research result${o.conflictCount===1?" was":"s were"}
172 left unanswered for confirmation.`:"",X,h].filter(Boolean).join(" "),aiProviderError:w,aiProviderErrorCode:T,updatedAt:S})??{...e,selectedAssetMappings:d,publicFields:m,publicFieldEvidence:p,questionnaireResponses:u,questionnaireResponseMeta:f,missingFields:x,...F,aiProviderError:w,aiProviderErrorCode:T,updatedAt:S}}async function YS(e,t={}){const r=e.commercialAcordTemplates??[];if(e.lineOfBusiness!=="commercial")return e;const n=Wa(e),i=HS(e);if(r.length===0&&i.length===0)return e;const a={...e.publicFields??{}},s={...e.publicFieldEvidence??{}},o={...e.questionnaireResponses??{}},c={...e.questionnaireResponseMeta??{}},d=[];let m=0,p=0,u,f;const g=_=>{_.providerError&&(u=_.providerError,f=_.providerErrorCode||"provider_unavailable",_.summary&&d.push(_.summary))},y=(_,A)=>{const v=I(),S=new Map(A.map(x=>[x.id,x])),C=new Set,k={contactName:e.contactName,publicFields:a,address:e.address},O=(x,$,q,B)=>{var ue;const F=q&&S.has(q)?S.get(q):void 0,Y=Ie(_.publicFieldEvidence,x)??(F?Ep(B,x,v):void 0);if(!Y||!He(Y))return!1;const X=F?Rp(F,x,$,k)??(Vt(F,$)?F.label:null):x;if(!X||!ka(X,$,k))return!1;const j=F??A.find(de=>{const be=Ra(de,{[x]:$});return be?qr(de,be.key,be.value):!1});if(!j||q&&F&&!qr(j,X,ee($)))return!1;const Q=ee($);if(!Q||!ar(j,Q)||(ue=o[j.id])!=null&&ue.trim())return!1;o[j.id]=Q;const ae={...Y,collectedAt:Y.collectedAt||v};
172return c[j.id]=za(v,ae),a[x]||(a[x]=$,s[x]=ae),F&&(!a[j.label]||!He(Ie(s,j.label)))&&(a[j.label]=Q,s[j.label]={...ae,fieldKey:j.label}),p+=1,C.add(x),!0};for(const x of _.mappings??[])O(x.targetField,x.value,x.targetId,x);for(const[x,$]of Object.entries(_.fields))C.has(x)||O(x,$)},h=_=>{_.summary&&d.push(_.summary);const A={contactName:e.contactName,publicFields:a,address:e.address};for(const[v,S]of Object.entries(_.fields)){const C=Ie(_.publicFieldEvidence,v);if(!C||!Er(C)||!ka(v,S,A))continue;const k=Ie(s,v);a[v]&&k&&Er(k)||(a[v]=S,s[v]={...C,collectedAt:C.collectedAt||I()},m+=1)}};if(i.length>0)try{const _=await Aa({tenantId:e.tenantId,template:{documentName:"Commercial questionnaire",fileName:"commercial-questionnaire",formNumber:"Commercial intake"},fields:i,dossier:rc(e,t),intent:"questionnaire_prefill"});g(_),y(_,n),h(_)}catch(_){u=_ instanceof Error?_.message:"OpenAI research could not complete questionnaire prefill.",f=ic(_),d.push(`OpenAI research could not complete questionnaire prefill: ${u}`)}for(const _ of r){const A=l.list("documents").find(S=>S.id===_.templateId),v=QS(_,A);if(v.length!==0)try{const S=await Aa({tenantId:e.tenantId,template:{documentName:_.documentName,fileName:_.fileName,formNumber:_.formNumber},fields:v,dossier:rc(e,t,A)});g(S),h(S)}catch(S){u=S instanceof Error?S.message:"OpenAI-backed ACORD mapping could not complete.",f=ic(S),d.push(`OpenAI-backed ACORD mapping could not complete: ${u}`)}}const w=(e.aiProviderError??"")!==(u??"")||(e.aiProviderErrorCode??"")!==(f??"");if(m===0&&p===0&&!w)return e;const T=I(),b=Array.from(new Set(d)).slice(0,4);return l.update("quotingSessions",e.id,{publicFields:a,publicFieldEvidence:s,questionnaireResponses:o,questionnaireResponseMeta:c,aiSummary:[e.aiSummary,m>0?`Server-side ACORD AI mapping added ${m} verified document field${m===1?"":"s"}.`:"",p>0?`OpenAI research prefilled ${p} editable questionnaire answer${p===1?"":"s"} for review.`:"",...b].filter(Boolean).join(" "),aiProviderError:u,aiProviderErrorCode:f,updatedAt:T})??{...e,publicFields:a,publicFieldEvidence:s,questionnaireResponses:o,questionnaireResponseMeta:c,aiProviderError:u,aiProviderErrorCode:f,updatedAt:T}}function Xc(e,t,r,n){var d;const i=vt(t),a=l.list("documents").find(m=>m.id===e.templateId),s=Ya(e,a),o=(i==null?void 0:i.name)??"Commercial applicant",c=Mc({template:e,dossier:Ka(t,r,a),layout:s.templateFieldLayout});return{fields:{...c.fields,"Source ACORD template ID":e.templateId,"Source ACORD file":e.fileName,"Source ACORD layout fields":String(((d=s.templateFieldLayout)==null?void 0:d.length)??0),"Completed packet type":n==="application"?"Carrier application":"Carrier supplemental","Completed by":"Quotex AI fill workflow","Completed field count":String(c.mappings.length),"Missing field count":String(c.missingFieldLabels.length),"Missing fields":c.missingFieldLabels.join("; "),"AI dossier source count":String(c.audit.sourceCount),"AI candidate field count":String(c.audit.candidateCount),"AI fitted PDF field count":String(c.audit.fittedFieldCount),"AI overflow field count":String(c.audit.overflowFieldCount),"AI sources used":c.audit.sourcesUsed.join(", "),"AI source field counts":JS(c.audit.sourceFieldCounts),"ACORD PDF fill status":c.missingFieldLabels.length>0?"Partially filled from the full client dossier and questionnaire data":"Filled from the full client dossier and questionnaire data","Last filled at":I()},mappings:c.mappings,missingFieldLabels:c.missingFieldLabels,contactName:o,audit:c.audit}}function JS(e){return Object.entries(e).filter(([,t])=>t>0).map(([t,r])=>`${t.replace(/_/g," ")}: ${r}`).join("; ")}function Ya(e,t){const r=ip({fileName:(t==null?void 0:t.fileName)??e.fileName,fileType:(t==null?void 0:t.fileType)??"application/pdf",type:String((t==null?void 0:t.type)??e.type??"agency_template"),documentName:(t==null?void 0:t.documentName)??e.documentName,baseFields:t==null?void 0:t.templateFields});return{storagePath:(t==null?void 0:t.storagePath)??e.storagePath??`/acord/${e.fileName}`,downloadUrl:(t==null?void 0:t.downloadUrl)??e.downloadUrl??`/acord/${e.fileName}`,templateFieldLayout:t!=null&&t.templateFieldLayout&&t.templateFieldLayout.length>0?t.templateFieldLayout:r.templateFieldLayout,fillableDetection:(t==null?void 0:t.fillableDetection)??r.detection}}function ZS(e,t,r={},n="application"){const i=l.list("documents").find(s=>s.id===e.templateId),a=Ya(e,i);return Mc({template:e,dossier:Ka(t,r,i),layout:a.templateFieldLayout}).fields}function XS(e,t,r={},n="application"){return Object.fromEntries(e.map(i=>[i.templateId,ZS(i,t,r,n)]))}function uf(e,t,r,n){var c;const i=l.list("documents").find(d=>d.id===e.templateId),a=Ya(e,i),s=Xc(e,t,r,n),o=l.list("documents").find(d=>{var m;return d.tenantId===t.tenantId&&d.quoteRequestId===t.id&&d.type===(n==="application"?"completed_acord_application":"completed_acord_supplemental")&&((m=d.templateFields)==null?void 0:m["Source ACORD template ID"])===e.templateId});if(o){const d=((c=o.downloadUrl)==null?void 0:c.startsWith("data:application/pdf"))&&e0(o.templateFields,s.fields);return z.documents.update(o.id,{templateFields:d?{...s.fields,...t0(o.templateFields)}:s.fields,templateFieldLayout:a.templateFieldLayout,fillableDetection:a.fillableDetection,storagePath:d?o.storagePath:a.storagePath,downloadUrl:d?o.downloadUrl:a.downloadUrl,documentName:`Completed ${_n(e).title}`})??o}return z.documents.create({tenantId:t.tenantId,uploadedById:t.createdById,fileName:df(e,s.contactName,n),fileType:"application/pdf",documentName:`Completed ${_n(e).title}`,type:n==="application"?"completed_acord_application":"completed_acord_supplemental",visibility:"employee_only",status:"approved",customerId:t.customerId,quoteRequestId:t.id,lineOfBusiness:"commercial",templateFields:s.fields,templateFieldLayout:a.templateFieldLayout,fillableDetection:a.fillableDetection,storagePath:a.storagePath,downloadUrl:a.downloadUrl})}const mf=new Set(["Last filled at","Native PDF artifact","Native PDF field count","Native PDF filled field count","Native PDF missing field count"]);function e0(e,t){return nu(e).join(`
173`)===nu(t).join(`
174`)}function nu(e){return Object.entries(e??{}).filter(([t])=>!mf.has(t)).sort(([t],[r])=>t.localeCompare(r)).map(([t,r])=>`${t}=${r}`)}function t0(e){return Object.fromEntries(Object.entries(e??{}).filter(([t])=>mf.has(t)))}function r0(e,t={}){const r=e.commercialAcordTemplates;return!r||r.length===0?r:r.map(n=>{const i=Xc(n,e,t,"application");return{...n,autoFilledFieldCount:i.mappings.length,missingFieldCount:i.missingFieldLabels.length,sourceCount:i.audit.sourceCount,candidateCount:i.audit.candidateCount,fittedFieldCount:i.audit.fittedFieldCount,overflowFieldCount:i.audit.overflowFieldCount,sourcesUsed:i.audit.sourcesUsed,sourceFieldCounts:i.audit.sourceFieldCounts}})}function fr(e,t={},r="application"){if(e.lineOfBusiness!=="commercial")return e.commercialAcordTemplates;const n=e.commercialAcordTemplates;return!n||n.length===0?n:(n.forEach(i=>
174{uf(i,e,t,r)}),r0(e,t))}function pf(e,t,r={},n={}){return(e.commercialAcordTemplates??[]).map(a=>{var c;const s=Xc(a,e,r,t),o=n.persistCompletedDocuments?uf(a,e,r,t):null;return{id:`${t}_${(o==null?void 0:o.id)??a.templateId}`,documentId:(o==null?void 0:o.id)??a.templateId,sourceDocumentId:a.templateId,fileName:(o==null?void 0:o.fileName)??df(a,s.contactName,t),fileType:"application/pdf",storagePath:(o==null?void 0:o.storagePath)??a.storagePath,dataUrl:(c=o==null?void 0:o.downloadUrl)!=null&&c.startsWith("data:application/pdf")?o.downloadUrl:void 0,description:t==="application"?`Completed ${a.documentName||a.fileName} with ${s.mappings.length} mapped ACORD field value${s.mappings.length===1?"":"s"}.`:`Completed supplemental ${a.documentName||a.fileName} with ${s.mappings.length} mapped ACORD field value${s.mappings.length===1?"":"s"}.`,filledFieldCount:s.mappings.length,filledFields:s.fields,fieldMappings:s.mappings}})}function ff(e,t){const r=e.trim().split(/\s+/)[0]||"there",n=t==="application"?"completed ACORD application PDF(s)":"completed ACORD supplemental PDF(s)";return[`Hi ${r},`,"",`Please find attached the ${n}.`,"",t==="application"?"Please review the attached ACORD document(s) and let me know whether you can proceed or need any supplemental fields.":"Please review the attached ACORD supplemental document(s) and let me know whether anything else is needed.","","Thank you,"].join(`
175`)}function Wn(e){var t,r;return((t=e.supplementalMessageIds)==null?void 0:t[0])??((r=e.applicationMessageIds)==null?void 0:r[0])}function ac(e){var t,r;return((t=e.applicationDocumentIds)==null?void 0:t[0])??((r=e.supplementalDocumentIds)==null?void 0:r[0])}function Ke(e){return Array.from(new Set(e.filter(t=>!!t)))}function Ft(e,t){return`commercial-submission-${e.id}-${t}`}function n0(e,t,r){return`commercial:${e.tenantId}:${e.id}:${t}:${r}`}function i0(e){return new Set([...e.applicationThreadIds??[],...e.supplementalThreadIds??[]])}function a0(e){return new Set([...e.applicationExternalThreadIds??[],...e.supplementalExternalThreadIds??[]])}function s0(e){if(!e)return;const t=e.match(/\$?\s?([\d,]+(?:\.\d{2})?)/);if(!t)return;const r=Number(t[1].replace(/,/g,""));return Number.isFinite(r)&&r>0?Math.round(r):void 0}const Js=new Set;async function o0(e,t){var m;const r=new Map((e.attachments??[]).map(p=>[p.fileName.toLowerCase(),p.id])),n=await Rm({submission:{submissionId:t.submissionId,carrierId:t.carrierId,status:t.status,policyType:(m=t.quote)==null?void 0:m.policyType},email:{subject:e.subject,text:e.body,html:e.bodyHtml,attachments:(e.attachments??[]).map(p=>({id:p.id,fileName:p.fileName,fileType:p.fileType,description:p.description}))}}),i=I(),a=Ke([...(e.attachments??[]).filter(p=>/pdf|supplement|application|questionnaire|loss.?run/i.test(`${p.fileName} ${p.fileType} ${p.description??""}`)).map(p=>p.id),...n.supplementalAttachmentNames.map(p=>r.get(p.toLowerCase()))]),o=n.requiresAgentReview||n.confidence<.72?"agent_review":n.outcome==="declined"?"declined":n.outcome==="more_info_required"?a.length>0?"needs_supplemental":"needs_client_info":n.outcome==="accepted"||n.outcome==="quoted"?"accepted":"agent_review",c=s0(n.premiums[0]),d=n.requestedItems.length>0?n.requestedItems:o==="needs_supplemental"?(e.attachments??[]).filter(p=>a.includes(p.id)).map(p=>`Complete ${p.fileName}`):void 0;return{status:o,premiumEstimate:c,finalPremium:o==="accepted"?c:void 0,declinedReason:n.declineReason,underwriterNotes:Ke([...n.carrierNotes,...n.conditions,...n.nextSteps]).join(" "),missingFields:d,agentReviewReason:o==="agent_review"?n.agentReviewReason??"Carrier reply requires agent review before the workflow advances.":void 0,quote:{outcome:n.outcome,policyType:n.policyType,coverages:n.coverages,limits:n.limits,premiums:n.premiums,deductibles:n.deductibles,terms:n.terms,carrierNotes:n.carrierNotes,conditions:n.conditions,nextSteps:n.nextSteps,requestedItems:n.requestedItems,supplementalAttachmentIds:a,declineReason:n.declineReason,evidenceSnippets:n.evidenceSnippets,responseDeadline:n.responseDeadline,parsedAt:i,confidence:n.confidence}}}function c0(e,t){return(e.missingFields??[]).filter(r=>r.trim().length>0).map(r=>({id:`second-${e.carrierId}-${ef(r)}`,section:"Carrier supplemental details",label:r.replace(`${t}: `,""),kind:/details|describe|explain|summary|operations|litigation|locations|supplement/i.test(r)?"textarea":/number|count|employees|vehicles|sq ft|revenue|payroll|premium|limit/i.test(r)?"number":"text",required:!0,round:"second_round",carrierId:e.carrierId}))}function gf(e){return(e??"").trim().replace(/^<|>$/g,"").toLowerCase()}
175function iu(e){return(e??"").trim().replace(/^\s*((re|fw|fwd)\s*:\s*)+/i,"").replace(/\s+/g," ").toLowerCase()}function l0(e){const t=Ke([...e.applicationMessageIds??[],...e.supplementalMessageIds??[]]),r=l.list("communications").filter(n=>t.includes(n.id));return new Set(r.flatMap(n=>[n.rfc822MessageId,n.messageIdHeader,n.externalMessageId]).map(gf).filter(Boolean))}function yf(e,t,r){const n=t.submissionId??Ft(e,t.carrierId);if(r.carrierSubmissionId===n)return"carrier_submission_id";if(r.threadId&&i0(t).has(r.threadId))return"thread_id";if(r.externalThreadId&&a0(t).has(r.externalThreadId))return"external_thread_id";const i=l0(t);if(Ke([r.inReplyToHeader,...r.references??[]]).map(gf).some(d=>i.has(d)))return"rfc822_reply_chain";const s=!!(r.carrierContactId&&(t.underwriterContactIds??[]).includes(r.carrierContactId)),o=iu(r.subject);if(s&&o){const d=Ke([...t.applicationMessageIds??[],...t.supplementalMessageIds??[]]);if(l.list("communications").filter(p=>d.includes(p.id)).some(p=>iu(p.subject)===o))return"known_underwriter_subject"}return[r.subject??"",r.body].join(" ").toLowerCase().includes(n.toLowerCase())?"literal_submission_id":null}function Zs(e){if(e.direction!=="inbound")return e;const r=l.list("quotingSessions").filter(n=>{var i;return n.tenantId===e.tenantId&&n.lineOfBusiness==="commercial"&&(((i=n.commercialCarrierSubmissions)==null?void 0:i.length)??0)>0}).flatMap(n=>(n.commercialCarrierSubmissions??[]).flatMap(i=>yf(n,i,e)?[{session:n,submission:i}]:[]));if(r.length===1){const{session:n,submission:i}=r[0],a=i.submissionId??Ft(n,i.carrierId);return l.update("communications",e.id,{carrierSubmissionId:a})??e}return e}function d0(e,t){return t.tenantId!==e||t.direction!=="inbound"?[]:l.list("quotingSessions").filter(r=>{var n;return r.tenantId===e&&r.lineOfBusiness==="commercial"&&(((n=r.commercialCarrierSubmissions)==null?void 0:n.length)??0)>0}).flatMap(r=>(r.commercialCarrierSubmissions??[]).flatMap(n=>{const i=yf(r,n,t);return i?[{session:r,submission:n,reason:i}]:[]}))}function u0(e,t){return t.carrierContactId?l.list("quotingSessions").filter(r=>{var n;return r.tenantId===e&&r.lineOfBusiness==="commercial"&&(((n=r.commercialCarrierSubmissions)==null?void 0:n.length)??0)>0}).flatMap(r=>(r.commercialCarrierSubmissions??[]).filter(n=>(n.underwriterContactIds??[]).includes(t.carrierContactId??"")).map(n=>({session:r,submission:n,reason:"literal_submission_id"}))):[]}function m0(e,t){return`carrier_email_${e}_${t}`}function sc(e){const t=l.list("carrierEmailProcessing").find(i=>i.tenantId===e.tenantId&&i.communicationId===e.communicationId),r=I();if(t)return l.update("carrierEmailProcessing",t.id,{...e,updatedAt:r})??t;const n={...e,id:m0(e.tenantId,e.communicationId),createdAt:r,updatedAt:r};return l.insert("carrierEmailProcessing",n),n}function p0(e){if(e.dataUrl)return e.dataUrl;const t=e.documentId?l.list("documents").find(r=>r.id===e.documentId):void 0;return(t==null?void 0:t.downloadUrl)??(t==null?void 0:t.storagePath)??e.storagePath}async function f0(e){if(!e)return null;try{if(e.startsWith("data:")){const r=e.indexOf(",");if(r<0)return null;const n=e.slice(0,r),i=e.slice(r+1),a=n.includes(";base64")?globalThis.atob(i):decodeURIComponent(i);return Uint8Array.from(a,s=>s.charCodeAt(0))}if(!/^https?:\/\//i.test(e))return null;const t=await fetch(e);return t.ok?new Uint8Array(await t.arrayBuffer()):null}catch{return null}}async function g0(e){if(e.parsed.status!=="needs_supplemental"&&e.parsed.status!=="needs_client_info")return{documentIds:[],missingFields:[],auditNotes:[],resolvedLossRun:!1};const t=new Set(e.parsed.quote.supplementalAttachmentIds??[]),r=(e.communication.attachments??[]).filter(d=>d.fileType==="application/pdf"&&(t.size===0||t.has(d.id))),n=[],i=[],a=[],s=[...e.communication.attachments??[]],o=[...e.parsed.quote.requestedItems??[],...e.parsed.missingFields??[],e.communication.subject??""].join(" ");let c=!1;if(/\bloss[ -]?runs?\b/i.test(o)&&e.session.customerId){const{buildLossRunReport:d,lossRunAttachment:m}=await Lt(async()=>{const{buildLossRunReport:u,lossRunAttachment:f}=await import("./lossRuns-B1EYF6bw.js");return{buildLossRunReport:u,lossRunAttachment:f}},__vite__mapDeps([147,1,2,8])),p=d(e.session.customerId);if(p){const u=m(p),f=z.documents.create({tenantId:e.session.tenantId,uploadedById:e.session.createdById,fileName:u.fileName,fileType:u.fileType,documentName:u.description,type:"claim_document",visibility:"employee_only",status:"approved",customerId:e.session.customerId,quoteRequestId:e.session.id,lineOfBusiness:"commercial",storagePath:`generated://loss-run/${e.session.id}/${e.communication.id}`,templateFields:{"Source carrier email ID":e.communication.id,"Generated from recorded claims":String(p.rows.length),"Open claims":String(p.openCount),"Claims in review":String(p.inReviewCount),"Closed claims":String(p.closedCount),"Value sources":"QuoteX recorded claims, policies, carriers, and assets"}});n.push(f.id),c=!0,a.push(`${u.fileName}: generated from ${p.rows.length} recorded claim${p.rows.length===1?"":"s"}; staged for agent review.`)}}for(const d of r){const m=await f0(p0(d));if(!m){const b=`${d.fileName} needs manual handling because its PDF bytes were not available from the synced email.`;i.push(b),a.push(b);continue}let p;try{p=bp(m)}catch{p=[]}if(p.length===0){const b=ip({fileName:d.fileName,fileType:d.fileType,type:"carrier_supplemental"}),_=`${d.fileName} needs manual handling because no editable PDF fields were found (${b.detection.reason}).`;i.push(_),a.push(_);continue}const u={templateId:d.sourceDocumentId??d.documentId??d.id,fileName:d.fileName,documentName:d.description??d.fileName,type:"carrier_supplemental",autoFilledFieldCount:0,missingFieldCount:0},f=Mc({template:u,dossier:Ka(e.session,e.session.questionnaireResponses??{})}),g=rA(f.fields,p);if(g.filledFieldCount===0){const b=`${d.fileName} has editable fields, but Quotex found no verified values safe to insert.`;i.push(b,...g.missingFields),a.push(b);continue}const y=mA(m,g.values),h=pA(y),w=z.documents.create({tenantId:e.session.tenantId,uploadedById:e.session.createdById,fileName:d.fileName.replace(/\.pdf$/i,"-completed.pdf"),fileType:"application/pdf",documentName:`Completed carrier supplemental - ${d.fileName}`,type:"completed_carrier_supplemental",visibility:"employee_only",status:"approved",customerId:e.session.customerId,quoteRequestId:e.session.id,lineOfBusiness:"commercial",storagePath:`generated://carrier-supplemental/${e.communication.id}/${d.id}
175`,downloadUrl:h,templateFields:{...f.fields,"Source carrier email ID":e.communication.id,"Source attachment ID":d.id,"Filled field count":String(g.filledFieldCount),"Remaining blank field count":String(g.missingFields.length),"Value sources":Array.from(new Set(g.mappings.map(b=>b.source))).join(", ")}});n.push(w.id),i.push(...g.missingFields),a.push(`${d.fileName}: ${g.filledFieldCount} field${g.filledFieldCount===1?"":"s"} filled, ${g.missingFields.length} remaining.`);const T=s.findIndex(b=>b.id===d.id);T>=0&&(s[T]={...d,documentId:w.id,dataUrl:h,filledFieldCount:g.filledFieldCount,filledFields:f.fields,fieldMappings:g.mappings.map(b=>({sourceLabel:b.sourceLabel,targetField:b.targetField,value:b.value,source:b.source}))})}return n.length>0&&l.update("communications",e.communication.id,{attachments:s}),{documentIds:Ke(n),missingFields:Ke(i),auditNotes:a,resolvedLossRun:c}}function y0(e,t){const r=new Set(e.selectedCarrierIds??[]),n=r.size>0;return t.flatMap(a=>{var m;if(a.status!=="accepted"||n&&!r.has(a.carrierId))return[];const s=Number(a.finalPremium??a.premiumEstimate??0);if(!Number.isFinite(s)||s<=0)return[];const o=Math.max(0,Math.min(1,Number(((m=a.quote)==null?void 0:m.confidence)??a.parseConfidence??0))),c=Number(a.score),d=Number.isFinite(c)?c<=1?Math.round(c*100):Math.round(c):Math.round(o*100);return[{carrierId:a.carrierId,premium:s,confidence:o,score:d,fitReason:a.fitReason||a.aiRationale||"Quoted in a verified carrier email reply.",apiStatus:"connected",source:"carrier_email_reply",carrierReference:a.submissionId??Ft(e,a.carrierId)}]}).sort((a,s)=>s.score-a.score||a.premium-s.premium)}function h0(e,t){const r=new Set(e.selectedCarrierIds??[]),n=r.size>0?t.filter(i=>r.has(i.carrierId)):t;return n.length>0&&n.every(i=>new Set(["accepted","declined","send_failed"]).has(i.status))}async function au(e){const t=z.quoting.get(e.sessionId),r=l.list("communications").find(v=>v.id===e.communicationId&&v.tenantId===e.tenantId&&v.direction==="inbound");if(!t||t.tenantId!==e.tenantId||!r)return null;const n=t.commercialCarrierSubmissions??[],i=n.findIndex(v=>(v.submissionId??Ft(t,v.carrierId))===e.submissionId);if(i<0)return null;const a={...n[i],submissionId:e.submissionId};if((a.replyCommunicationIds??[]).includes(r.id))return t;const s=r.carrierSubmissionId===e.submissionId?r:l.update("communications",r.id,{carrierSubmissionId:e.submissionId})??r,o=await o0(s,a),c=l.list("carriers").find(v=>v.id===a.carrierId),d=I(),m=await g0({session:t,communication:s,parsed:o}),p=Ke([...(o.missingFields??[]).filter(v=>!(m.resolvedLossRun&&/\bloss[ -]?runs?\b/i.test(v))),...m.missingFields]),u={...a,status:o.status,responseAt:d,acceptedAt:o.status==="accepted"?d:a.acceptedAt,responseDeadline:o.quote.responseDeadline,replyCommunicationIds:Ke([...a.replyCommunicationIds??[],s.id]),quote:o.quote,parseConfidence:o.quote.confidence,premiumEstimate:o.premiumEstimate??a.premiumEstimate,finalPremium:o.finalPremium??a.finalPremium,declinedReason:o.declinedReason,underwriterNotes:o.underwriterNotes,missingFields:p,supplementalDocumentIds:Ke([...a.supplementalDocumentIds??[],...m.documentIds]),agentReviewReason:o.agentReviewReason,aiRationale:o.status==="agent_review"?o.agentReviewReason??"Carrier reply needs agent review before the workflow advances.":`Carrier reply parsed from inbound message ${s.id}; outcome ${o.quote.outcome}.`},f=n.map((v,S)=>S===i?u:v);let g=t.questionnaireQuestions??[];const y=new Set(t.missingFields??[]);p.length&&(p.forEach(v=>y.add(v)),g=AS(g,c0(u,(c==null?void 0:c.name)??"Carrier")));const h=f.some(v=>v.status==="needs_client_info"||v.status==="needs_supplemental"),w=f.some(v=>v.status==="agent_review"),T=f.filter(v=>v.status==="accepted"&&!!(v.finalPremium??v.premiumEstimate)).length,b=y0(t,f),_=h0(t,f),A=l.update("quotingSessions",t.id,{commercialCarrierSubmissions:f,questionnaireQuestions:g,missingFields:Array.from(y),quotes:b,status:h?"awaiting_reply":_?"complete":T>0?"quoting":t.status,aiSummary:w?"One or more carrier replies need agent review before Quotex advances the workflow.":h?"Carrier replies were parsed and supplemental missing fields are ready for agent review.":_&&T>0?`${T} verified carrier email quote${T===1?" is":"s are"} ready for ranking.`:T>0?`Carrier replies were parsed with ${T} quoted market${T===1?"":"s"} captured while Quotex waits for the remaining selected carriers.`:"Carrier replies were parsed and the workflow is waiting for more explicit carrier outcomes.",updatedAt:d});if(!A)return null;if(fe(A,{message:o.status==="agent_review"?`${(c==null?void 0:c.name)??"Carrier"} reply needs agent review.`:`${(c==null?void 0:c.name)??"Carrier"}
175 carrier reply captured.`,detail:o.status==="declined"?o.declinedReason??"Carrier declined without a stated reason.":o.status==="needs_client_info"||o.status==="needs_supplemental"?`${p.length} supplemental item${p.length===1?"":"s"} captured from the carrier reply.${m.auditNotes.length>0?` ${m.auditNotes.join(" ")}`:""}`:o.status==="accepted"?o.finalPremium?`Quoted premium captured from the carrier reply: ${Le.money(o.finalPremium)}.`:"Carrier reply indicates this market can proceed; no premium was stated.":o.agentReviewReason??"Carrier reply is ambiguous.",createdAt:d,createdById:"ai",communicationId:s.id}),sc({tenantId:e.tenantId,communicationId:s.id,outcome:"matched_processed",matchedSessionId:t.id,matchedSubmissionId:e.submissionId,matchReason:e.matchReason,classification:o.quote.outcome,parseConfidence:o.quote.confidence,processedAt:d}),!h&&!w&&_&&b.length>0&&t.status!=="complete"){const v=Yo(A);Wp(A,["supplemental_pending","quote_ready"]),Gp(A,{title:`${v.name} quote options ready`,summary:`${b.length} verified carrier email quote${b.length===1?" is":"s are"} ready for review.`,severity:"warning",severityReason:"Verified carrier email results are ready for agent review."}),fe(A,{message:`${b.length} verified carrier email quote${b.length===1?"":"s"} ready for ranking.`,detail:A.aiSummary,createdAt:d})}return A}function b0(e){const t=e.kind==="application"?"ACORD application packet":"ACORD supplemental packet",r=`${e.attachmentCount} PDF attachment${e.attachmentCount===1?"":"s"}`;l.insert("statusEvents",{id:N("se"),tenantId:e.session.tenantId,source:"agent",message:`${t} prepared for delivery to ${e.underwriter.name} at ${e.carrierName} with ${r}.`,visibility:"internal",customerId:e.session.customerId,prospectId:e.session.prospectId,assetId:e.session.assetId,communicationId:e.message.id,documentId:e.firstDocumentId,createdAt:e.message.createdAt,createdById:e.session.createdById})}function su(e,t,r,n,i,a,s="draft"){const o=vt(e),c=(o==null?void 0:o.name)??"Commercial applicant",d=pf(e,n,r,{persistCompletedDocuments:!0});return t.map(m=>{const p=m.submissionId??Ft(e,m.carrierId),u=n0(e,p,n);if(i&&!i.has(m.carrierId)||m.submissionMethod&&m.submissionMethod!=="underwriter_email")return m;const f=l.list("carriers").find(_=>_.id===m.carrierId),g=Sn(e.tenantId,m.carrierId),y=d,h=g.map(_=>{var S;const A=a==null?void 0:a.find(C=>C.carrierId===m.carrierId&&C.underwriterContactId===_.id&&C.kind===n),v=z.communications.create({tenantId:e.tenantId,carrierContactId:_.id,channel:"email",direction:"outbound",threadId:u,carrierSubmissionId:p,subject:(A==null?void 0:A.subject)??(n==="application"?`Commercial application package - ${c}`:`Commercial supplemental package - ${c}`),body:[(A==null?void 0:A.body)??ff(_.name,n),"",`Submission reference: ${p}`].join(`
176`),attachments:y,createdById:e.createdById,emailDeliveryMode:s});return b0({session:e,carrierName:(f==null?void 0:f.name)??"Carrier",underwriter:_,message:v,kind:n,attachmentCount:y.length,firstDocumentId:(S=y.find(C=>C.documentId))==null?void 0:S.documentId}),v}),w=h.map(_=>_.id),T=Ke(h.map(_=>_.threadId)),b=Ke(h.map(_=>_.externalThreadId));return{...m,submissionId:p,underwriterContactIds:Array.from(new Set([...m.underwriterContactIds??[],...g.map(_=>_.id)])),...n==="application"?{applicationDocumentIds:Array.from(new Set([...m.applicationDocumentIds??[],...y.map(_=>_.documentId).filter(Boolean)])),applicationMessageIds:Array.from(new Set([...m.applicationMessageIds??[],...w])),applicationThreadIds:Array.from(new Set([...m.applicationThreadIds??[],...T])),applicationExternalThreadIds:Array.from(new Set([...m.applicationExternalThreadIds??[],...b]))}:{supplementalDocumentIds:Array.from(new Set([...m.supplementalDocumentIds??[],...y.map(_=>_.documentId).filter(Boolean)])),supplementalMessageIds:Array.from(new Set([...m.supplementalMessageIds??[],...w])),supplementalThreadIds:Array.from(new Set([...m.supplementalThreadIds??[],...T])),supplementalExternalThreadIds:Array.from(new Set([...m.supplementalExternalThreadIds??[],...b]))}}})}function I0(e,t,r,n){const i=e.customerId?l.list("customers").find(o=>o.id===e.customerId):e.prospectId?l.list("prospects").find(o=>o.id===e.prospectId):null,a=(i==null?void 0:i.name)??"Commercial applicant",s=pf(e,r,t,{persist
176CompletedDocuments:!0});return n.flatMap(o=>{const c=l.list("carriers").find(d=>d.id===o);return Sn(e.tenantId,o).map(d=>({carrierId:o,carrierName:(c==null?void 0:c.name)??"Carrier",underwriterContactId:d.id,underwriterName:d.name,underwriterEmail:d.email??"",kind:r,subject:r==="application"?`Commercial application package - ${a}`:`Commercial supplemental package - ${a}`,body:ff(d.name,r),attachments:s}))})}function v0(e,t){const r=new Map((e.commercialCarrierSubmissions??[]).map(n=>[n.carrierId,n]));return t.map(n=>{const i=r.get(n.carrierId);return i?{...n,submissionId:i.submissionId??n.submissionId,submissionMethod:i.submissionMethod??n.submissionMethod,connectorLabel:i.connectorLabel??n.connectorLabel,automationJobId:i.automationJobId??n.automationJobId,automationTrace:i.automationTrace??n.automationTrace,underwriterContactIds:Array.from(new Set([...i.underwriterContactIds??[],...n.underwriterContactIds??[]])),applicationDocumentIds:Array.from(new Set([...i.applicationDocumentIds??[],...n.applicationDocumentIds??[]])),applicationMessageIds:Array.from(new Set([...i.applicationMessageIds??[],...n.applicationMessageIds??[]])),applicationThreadIds:Array.from(new Set([...i.applicationThreadIds??[],...n.applicationThreadIds??[]])),applicationExternalThreadIds:Array.from(new Set([...i.applicationExternalThreadIds??[],...n.applicationExternalThreadIds??[]])),supplementalMessageIds:Array.from(new Set([...i.supplementalMessageIds??[],...n.supplementalMessageIds??[]])),supplementalThreadIds:Array.from(new Set([...i.supplementalThreadIds??[],...n.supplementalThreadIds??[]])),supplementalExternalThreadIds:Array.from(new Set([...i.supplementalExternalThreadIds??[],...n.supplementalExternalThreadIds??[]])),replyCommunicationIds:Array.from(new Set([...i.replyCommunicationIds??[],...n.replyCommunicationIds??[]])),supplementalDocumentIds:Array.from(new Set([...i.supplementalDocumentIds??[],...n.supplementalDocumentIds??[]])),quote:i.quote??n.quote,premiumEstimate:i.premiumEstimate??n.premiumEstimate,finalPremium:i.finalPremium??n.finalPremium,underwriterNotes:i.underwriterNotes??n.underwriterNotes,parseConfidence:i.parseConfidence??n.parseConfidence,agentReviewReason:i.agentReviewReason??n.agentReviewReason}:n})}function w0(e,t,r,n,i=!1){const a=Ii(e.tenantId),s=kc({carriers:a,assetType:e.assetType,estimatedValue:e.estimatedValue||1e6,state:e.state,lineOfBusiness:"commercial"}).quotes,o=n!=null&&n.length?new Set(n):null,c=!!o&&i,d=o?s.filter(b=>o.has(b.carrierId)&&(!i||Sn(e.tenantId,b.carrierId).length>0)):s,m=d.filter((b,_)=>_<6&&b.score>=.35).slice(0,5),p=o?d:m.length>0?m:s.slice(0,3),u=l.list("documents").filter(b=>b.tenantId===e.tenantId&&b.lineOfBusiness==="commercial"&&b.carrierId),f=e.questionnaireQuestions??[],g=[],y=p.map((b,_)=>{const A=Ft(e,b.carrierId),v=a.find(j=>j.id===b.carrierId),S=u.filter(j=>j.carrierId===b.carrierId),C=v?Pc(v):null,k=Sn(e.tenantId,b.carrierId),O=c?"underwriter_email":(C==null?void 0:C.provider)==="carrier_portal_automation"&&C.hasPortalUrl?"carrier_portal_automation":k.length>0?"underwriter_email":"manual_workflow",x=O==="carrier_portal_automation"?(C==null?void 0:C.providerLabel)??"AI carrier portal runner":O==="underwriter_email"?"Underwriter email workflow":"Manual carrier workflow",$=O==="carrier_portal_automation"&&v?vw({carrier:v,session:{...e,questionnaireResponses:t},state:e.state,baseQuote:b}):void 0,q=O==="carrier_portal_automation"?$==null?void 0:$.jobId:void 0,B=f.filter(j=>
176j.carrierId===b.carrierId&&j.round==="second_round"),F=v?US(v):[],Y=e.commercialSecondRoundSentAt?B.filter(j=>!(t[j.id]??"").trim()).slice(0,2):F.slice(0,2),X=Y.length>0?Y.map(j=>j.label):[`${(v==null?void 0:v.name)??"Carrier"}: final carrier-specific supplemental details`];return _<=1||S.length>0||e.commercialSecondRoundSentAt&&Y.length===0?{submissionId:A,carrierId:b.carrierId,status:S.length>0&&_>1||e.commercialSecondRoundSentAt&&_>1?"supplemental_sent":"accepted",sentAt:r,responseAt:r,acceptedAt:r,score:b.score,fitReason:b.fitReason,supplementalDocumentIds:S.map(j=>j.id),submissionMethod:O,connectorLabel:x,automationJobId:q,automationTrace:$,aiRationale:_<=1?`AI appetite analysis ranked this carrier high enough to accept the application without more client data through ${x}.`:`AI found the carrier supplemental on file and auto-filled it before resubmitting through ${x}.`}:_<=3?(X.forEach(j=>{g.push({id:`second-${b.carrierId}-${ef(j)}`,section:"Second-round carrier supplementals",label:j.replace(`${(v==null?void 0:v.name)??""}: `,""),kind:/details|summary|operations|litigation|locations/i.test(j)?"textarea":/number|count|employees|vehicles|sq ft|revenue/i.test(j)?"number":"text",required:!0,round:"second_round",carrierId:b.carrierId})}),{submissionId:A,carrierId:b.carrierId,status:"needs_client_info",sentAt:r,responseAt:r,score:b.score,fitReason:b.fitReason,missingFields:X,submissionMethod:O,connectorLabel:x,automationJobId:q,automationTrace:$,aiRationale:`Carrier replied through ${x} with a supplemental request. AI could not complete every field from the file, so it queued a second client questionnaire.`}):{submissionId:A,carrierId:b.carrierId,status:"declined",sentAt:r,responseAt:r,score:b.score,fitReason:b.fitReason,submissionMethod:O,connectorLabel:x,automationJobId:q,automationTrace:$,declinedReason:"Carrier response did not accept the risk after appetite and application review.",aiRationale:"AI filtered this carrier out so the agent only sees markets willing to proceed."}}),h=new Map((e.commercialCarrierSubmissions??[]).map(b=>[b.carrierId,b])),w=_i(e)&&e.commercialSecondRoundSentAt?y.map(b=>{const _=h.get(b.carrierId);return _?_.status==="needs_client_info"?{...b,status:"supplemental_sent",responseAt:r,acceptedAt:r,missingFields:void 0,declinedReason:void 0,aiRationale:"Carrier supplemental information was completed and returned for underwriting review."}:_.status==="accepted"||_.status==="supplemental_sent"?{...b,status:_.status,responseAt:_.responseAt??b.responseAt??r,acceptedAt:_.acceptedAt??b.acceptedAt??r,missingFields:void 0}:_.status==="declined"?{...b,status:"declined",declinedReason:_.declinedReason??b.declinedReason,missingFields:void 0}:b:b}):y,T=w.filter(b=>b.status==="accepted"||b.status==="supplemental_sent").map(b=>b.carrierId);return{submissions:w,secondRoundQuestions:g,acceptedCarrierIds:T,submittedCarrierCount:p.length}}function _0(e){return e.map(t=>({...t,status:"awaiting_response",responseAt:void 0,acceptedAt:void 0,replyCommunicationIds:[],quote:void 0,premiumEstimate:void 0,finalPremium:void 0,underwriterNotes:void 0,parseConfidence:void 0,agentReviewReason:void 0,missingFields:void 0,declinedReason:void 0,aiRationale:`Application packet sent through ${t.connectorLabel??"carrier workflow"}. Awaiting the carrier response before AI classifies this market.`}))}const hf=new Set(["policyNumber","premiumEstimate","finalPremium","effectiveDate","renewalDate","status","renewalStatus","paymentFrequency","billingMethod","billingPayer","billingPayerName","billingStatus","billingAccountNumber","billingReference","billingFinanceCompany","billingMortgagee","billingLastVerifiedAt","billingNotes","nextPaymentDueDate","nextPaymentAmount"]);function A0(e){return e.reduce((t,r)=>{const n=r.field;return hf.has(n)?{...t,[n]:r.incomingValue}:t},{})}const C0=new Set(["tier","allowedUsers","allowedProspectsPerMonth","allowedAiMessagesPerMonth","allowedCarriers","websiteAppAddOn","softwarePlanTermMonths","softwarePlanStartedAt","softwarePlanRenewsAt"]),S0=new Set(["monthlyPriceOverrideUsd","monthlyPriceOverrideReason","monthlyPriceOverrideUpdatedAt"]),ou="Billing suspended because agency was deactivated in the master portal.",bf=["tier","softwareProduct","allowedUsers","allowedProspectsPerMonth","allowedAiMessagesPerMonth","allowedCarriers","websiteAppAddOn","softwarePlanTermMonths","softwarePlanStartedAt","softwarePlanRenewsAt","softwarePlanRenewalContractPacketId","softwarePlanRenewalContractSentAt","softwarePlanRenewalContractRecipientEmail","softwarePlanRenewalContractSignedAt","softwarePlanRenewalContractSignedByName","softwarePlanRenewalContractSignedByEmail","softwarePlanLastRenewedAt","monthlyPriceOverrideUsd","monthlyPriceOverrideReason","monthlyPriceOverrideUpdatedAt","stripeCustomerId","stripeSubscriptionId","stripeSubscriptionTermStartedAt","stripeSubscriptionTermEndsAt","stripeSubscriptionCancelAt"],T0=new Set(["website","websiteSlug","websiteEnabled","websiteHeadline","websiteIntro","portalBaseUrl","customerPortalUrl","quoteStartUrl","websiteAllowedDomains","websiteApiKeyEncrypted","websiteApiKeyPreview","websiteWebhookUrl","
176websiteWebhookSecretEncrypted","websiteWebhookSecretPreview","websiteAuthRedirects","websitePortalModules","websiteLastLeadAt","websiteLastSyncAt","websiteLastWebhookStatus","websiteLastWebhookMessage","websiteConnectionUpdatedAt"]),k0=new Set(["carrierRunnerEnabled","carrierRunnerStatus","carrierRunnerMode","carrierRunnerAgencyCode","carrierRunnerProfileId","carrierRunnerReceiverCode","carrierRunnerCredentialVaultRef","carrierRunnerMfaMode","carrierRunnerAuthorizedUserIds","carrierRunnerLinesOfBusiness","carrierRunnerFeeds","carrierRunnerCarrierIds","carrierRunnerReviewRule","carrierRunnerSchedule","carrierRunnerWorkingPath","carrierRunnerArchivePath","carrierRunnerFailureAlertEmails","carrierRunnerContactEmail","carrierRunnerContactPhone","carrierRunnerNotes","carrierRunnerLastTestAt","carrierRunnerLastTestStatus","carrierRunnerLastTestMessage","carrierRunnerLastSyncAt","carrierRunnerUpdatedAt"]),R0=new Set(["name","logoUrl","brandColor","contactEmail","phone","address","serviceAreas","active"]);function E0(e){return e.replace(/Usd$/,"").replace(/At$/,"").replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/^carrierRunner/i,"carrier runner").replace(/^ivans/i,"legacy download").replace(/^ai/i,"AI").replace(/^website/i,"website").toLowerCase()}function el(e={}){return Object.fromEntries(Object.entries(e).filter(([t])=>!/encrypted|secret|credential/i.test(t)).map(([t,r])=>Array.isArray(r)?[t,r.join(", ")]:typeof r=="string"||typeof r=="number"||typeof r=="boolean"||r===null?[t,r]:r===void 0?[t,null]:[t,String(r)]))}function x0(e){const t={},r=[];for(const n of bf){const i=e[n];i===void 0?r.push(n):t[n]=structuredClone(i)}return{capturedAt:I(),values:t,missingFields:r}}function P0(e){if(!e)return{};const t={},r=new Set(e.missingFields);for(const n of bf)r.has(n)?t[n]=void 0:Object.prototype.hasOwnProperty.call(e.values,n)&&(t[n]=structuredClone(e.values[n]));return t}function If(e){const t={...e,id:N("master_activity"),createdAt:e.createdAt??I(),metadata:el(e.metadata)};return l.insert("masterAgencyActivities",t),t}function Ae(e,t,r,n,i,a="master_portal",s="Master portal"){return If({agencyId:e.id,agencyName:e.name,kind:t,title:r,description:n,actorName:s,source:a,metadata:el(i)})}function N0(e,t){var n;const r=Pe(e.contactEmail);return r?z.communications.create({tenantId:e.id,externalRecipientName:e.name,externalRecipientEmail:r,externalRecipientRole:"Agency billing contact",channel:"email",direction:"outbound",subject:"Quotex agency access deactivated",body:[`Hi ${e.name},`,"","Your Quotex agency workspace has been deactivated by the master portal.","","Billing has been suspended effective immediately. Staff access, portal workflows, and connected agency services are paused until the account is reactivated.","","If this was unexpected, reply to this message or contact Quotex Insurance Support.","","Thank you,","Quotex Insurance"].join(`
177`),createdById:t??((n=l.list("users").find(i=>i.role==="master_admin"&&i.active))==null?void 0:n.id)??"master_portal"}):null}function q0(e,t){let r=0;for(const n of l.list("users")){if(n.tenantId!==e||!nt(n.role)||n.staffAccessStatus==="banned"||n.staffAccessStatus==="deleted")continue;const a=!n.active||n.staffAccessStatus!=="active"?l.update("users",n.id,{active:!0,staffAccessStatus:"active",staffAccessUpdatedAt:I(),staffAccessUpdatedById:t}):n;a&&(yr(a,t),r+=1)}return r}function O0(e,t){const r=Object.keys(t).filter(a=>!/encrypted|secret|credential/i.test(a));if(r.length===0)return null;const n=new Set(r),i=el({fields:r.map(E0).join(", "),...typeof t.monthlyPriceOverrideUsd=="number"?{monthlyPriceUsd:t.monthlyPriceOverrideUsd}:{},...typeof t.allowedUsers=="number"?{userSlots:t.allowedUsers}:{},...t.softwarePlanTermMonths?{termMonths:t.softwarePlanTermMonths}:{},...t.softwarePlanRenewsAt?{renewsAt:ln(t.softwarePlanRenewsAt)}:{},...t.carrierRunnerStatus?{runnerStatus:t.carrierRunnerStatus}:{},...t.websiteLastWebhookStatus?{websiteStatus:t.websiteLastWebhookStatus}:{}});if(n.has("active")&&t.active===!1)return{kind:"agency_deactivated",title:"Agency deactivated",description:`${e.name} was marked inactive in the master portal.`,metadata:i};if(r.some(a=>S0.has(a))){const a="monthlyPriceOverrideUsd"in t&&t.monthlyPriceOverrideUsd===void 0;return{kind:"agency_price_updated",title:a?"Manual monthly price removed":"Manual monthly price updated",description:a?`${e.name}'s manual monthly price override was cleared.`:`${e.name}
177's monthly price was manually adjusted${typeof t.monthlyPriceOverrideUsd=="number"?` to ${Le.money(t.monthlyPriceOverrideUsd)}`:""}.`,metadata:i}}return r.some(a=>C0.has(a))?{kind:"agency_plan_updated",title:"Agency plan updated",description:`${e.name}'s software plan, user slots, add-ons, or contract term changed.`,metadata:i}:r.some(a=>k0.has(a))?{kind:"agency_carrier_runner_updated",title:"Carrier download runner updated",description:`${e.name}'s carrier portal runner, MFA handling, feeds, credentials reference, or test status changed.`,metadata:i}:r.some(a=>T0.has(a))?{kind:"agency_website_connection_updated",title:"Website connection updated",description:`${e.name}'s website, client portal, API key, webhook, or redirect settings changed.`,metadata:i}:r.some(a=>R0.has(a))?{kind:"agency_updated",title:"Agency profile updated",description:`${e.name}'s profile, contact, logo, service area, or status settings changed.`,metadata:i}:{kind:"agency_updated",title:"Agency updated",description:`${e.name} was updated in the platform.`,metadata:i}}function D0(e,t){const r=O0(e,t);r&&Ae(e,r.kind,r.title,r.description,r.metadata)}const L0="quotex.demoRequests.v1";function gt(e,t=""){return typeof e=="string"?e.trim():t}function M0(e,t=!1){return typeof e=="boolean"?e:t}function cu(){if(typeof window>"u"||!window.localStorage)return;let e;try{e=JSON.parse(window.localStorage.getItem(L0)??"[]")}catch{e=[]}if(!Array.isArray(e)||e.length===0)return;const t=new Set(l.list("demoLeads").map(r=>r.id));for(const r of e){if(!r||typeof r!="object"||Array.isArray(r))continue;const n=r,i=gt(n.id)||N("demo_lead_legacy");if(t.has(i))continue;const a=gt(n.createdAt)||I(),s={id:i,firstName:gt(n.firstName),lastName:gt(n.lastName),businessEmail:gt(n.businessEmail),agencyName:gt(n.agencyName),role:gt(n.role),staffSize:gt(n.staffSize),phone:gt(n.phone)||void 0,interest:gt(n.interest,"Full Quotex software walkthrough"),notes:gt(n.notes)||void 0,marketingOptIn:M0(n.marketingOptIn,!0),source:"walkthrough_request",status:"new",createdAt:a,updatedAt:a};l.insert("demoLeads",s),t.add(i)}}function $0(e){if(e==="Personal lines")return"personal";if(e==="Commercial lines")return"commercial"}function F0(e,t){const r=e.replace(/[^a-z0-9]+/gi,"_").toLowerCase(),n=t.number.replace(/[^a-z0-9]+/gi,"_").toLowerCase();return`doc_acord_${r}_${n}`}function vf(e){var n;const t=`${e.storagePath??""} ${e.downloadUrl??""}`,r=`${e.fileName} ${e.documentName??""}`;return e.fileType==="application/pdf"&&/acord/i.test(r)&&(t.includes("/acord/")||String(((n=e.templateFields)==null?void 0:n["Bundled PDF"])??"").toLowerCase().includes("yes"))&&!e.customerId&&!e.assetId&&!e.policyId&&!e.claimId&&!e.carrierId&&!e.quoteRequestId}function B0(e){var n;const t=new Set(l.list("documents").filter(i=>i.tenantId===e&&vf(i)).map(i=>i.fileName)),r=((n=l.list("users").find(i=>i.tenantId===e&&(i.role==="manager"||i.role==="agent")))==null?void 0:n.id)??"system";Su.forEach(i=>{t.has(i.fileName)||(l.insert("documents",{id:F0(e,i),tenantId:e,uploadedById:r,fileName:i.fileName,fileType:"application/pdf",documentName:`ACORD ${i.number} - ${i.name}`,templateFields:{"ACORD form number":`ACORD ${i.number}`,"Form name":i.name,"Line / category":i.line,"Typical use":i.use,"Source file":i.sourceFileName,"Bundled PDF":"Yes - loaded from the agency-provided PDF set","Agency action":"Use this uploaded PDF as the agency template."},lineOfBusiness:$0(i.line),required:!1,type:"agency_template",visibility:"employee_only",status:"approved",storagePath:`/acord/${i.fileName}`,downloadUrl:`/acord/${i.fileName}`,agencyId:e,uploadedAt:I()}),t.add(i.fileName))})}const z={demoLeads:{list(){return cu(),l.list("demoLeads").sort((e,t)=>e.createdAt<t.createdAt?1:-1)},get(e){return cu(),l.list("demoLeads").find(t=>t.id===e)},create(e){const t=e.createdAt??I(),r={...e,id:e.id??N("demo_lead"),status:e.status??"new",createdAt:t,updatedAt:e.updatedAt??t};return l.insert("demoLeads",r),r},update(e,t){return l.update("demoLeads",e,{...t,updatedAt:I()})}},softwareSales:{list(){return l.list("softwareSales").sort((e,t)=>e.createdAt<t.createdAt?1:-1)}
177,get(e){return l.list("softwareSales").find(t=>t.id===e)},create(e){const t={...e,id:N("sale"),status:e.status??"checkout_pending",createdAt:I(),updatedAt:I()};return l.insert("softwareSales",t),t},update(e,t){return l.update("softwareSales",e,{...t,updatedAt:I()})},setStatus(e,t){return this.update(e,{status:t})}},masterAgencyActivities:{list(e={}){return l.list("masterAgencyActivities").filter(t=>!e.agencyId||t.agencyId===e.agencyId).filter(t=>!e.kind||t.kind===e.kind).sort((t,r)=>t.createdAt<r.createdAt?1:-1)},create(e){return If(e)}},importBatches:{list(e){return oe(l.list("importBatches"),e).sort((t,r)=>t.uploadedAt<r.uploadedAt?1:-1)},get(e){return l.list("importBatches").find(t=>t.id===e)},upsert(e){return this.get(e.id)?l.update("importBatches",e.id,{...e,updatedAt:I()}):(l.insert("importBatches",e),e)},update(e,t){return l.update("importBatches",e,{...t,updatedAt:I()})},remove(e){const t=this.get(e);return!t||t.status==="imported"?!1:l.remove("importBatches",e)},undo(e,t){const r=this.get(e),n=r==null?void 0:r.report;if(!r||!n||r.status!=="imported")return r??null;const i={users:0,customers:0,assets:0,policies:0,documents:0,notes:0,carriers:0,carrierLinks:0,statusEvents:0,renewals:0},a=(o,c,d)=>{c.forEach(m=>{const p=l.list(o).find(u=>u.id===m);!p||p.importBatchId!==e||l.remove(o,m)&&(i[d]+=1)})};a("policies",n.createdIds.policies,"policies"),a("assets",n.createdIds.assets,"assets"),a("documents",n.createdIds.documents,"documents"),a("notes",n.createdIds.notes,"notes"),a("statusEvents",n.createdIds.statusEvents,"statusEvents"),a("renewals",n.createdIds.renewals,"renewals"),a("carrierLinks",n.createdIds.carrierLinks,"carrierLinks"),a("carriers",n.createdIds.carriers,"carriers"),a("customers",n.createdIds.customers,"customers"),a("users",n.createdIds.users,"users");const s={undoneAt:I(),undoneById:t,removed:i};return this.update(e,{status:"undone",report:{...n,undo:s}})}},agencies:{list(){return l.list("agencies").filter(e=>qs(e.id))},get(e){if(qs(e))return l.list("agencies").find(t=>t.id===e)},byCode(e){const t=pt(e);if(t)return l.list("agencies").filter(r=>qs(r.id)).find(r=>xg(r,t))},maskedCode(e){return dl(e.agencyCodePreview)},revealCodeForMaster(e){const t=l.list("agencies").find(r=>r.id===e);return t?Yn(t):null},sendAgencyCode(e){const t=l.list("agencies").find(r=>r.id===e);return t?(Ae(t,"agency_code_sent","Agency code sent",`Encrypted agency sign-in code was prepared for ${t.contactEmail}.`,{recipient:t.contactEmail,codePreview:t.agencyCodePreview}),{agency:t,recipient:t.contactEmail,maskedCode:dl(t.agencyCodePreview),sentAt:I()}):null},create(e){const t=new Set(l.list("agencies").map(i=>Yn(i)??"").filter(Boolean)),r=so(e.name,t),n=Mu({...e,...ui(r),id:N("agency"),active:e.active??!0,createdAt:I()});return l.insert("agencies",n),Ls(n),Ae(n,"agency_created","Agency created",`${n.name} was added to the platform and issued an encrypted agency sign-in code.`,{codePreview:n.agencyCodePreview,userSlots:n.allowedUsers,termMonths:n.softwarePlanTermMonths??Jn(n),websiteAppAddOn:n.websiteAppAddOn??"none"}),n},update(e,t){const r=l.update("agencies",e,t);return r&&((t.contactEmail!==void 0||t.name!==void 0)&&Ls(r),D0(r,t)),r},sendRenewalContract(e){const t=l.list("agencies").find(n=>n.id===e);if(!t)return null;const r=l.update("agencies",e,{softwarePlanRenewalContractPacketId:N("agency_renewal_packet"),softwarePlanRenewalContractSentAt:I(),softwarePlanRenewalContractRecipientEmail:t.contactEmail,softwarePlanRenewalContractSignedAt:void 0,softwarePlanRenewalContractSignedByName:void 0,softwarePlanRenewalContractSignedByEmail:void 0});return r&&Ae(r,"agency_renewal_contract_sent","Renewal contract sent",`Software renewal contract was sent to ${r.softwarePlanRenewalContractRecipientEmail??r.contactEmail}.`,{recipient:r.softwarePlanRenewalContractRecipientEmail??r.contactEmail,packetId:r.softwarePlanRenewalContractPacketId??null,renewsAt:ln(uo(r))}),r},completeRenewalContractSignature(e){const t=l.list("agencies").find(m=>m.id===e);if(!t)return null;const r=ln(uo(t)),n=ln(I()),i=new Date(`${r}T12:00:00.000Z`).getTime(),a=new Date(`${n}T12:00:00.000Z`).getTime(),s=i>a?r:n,o=bc(s,Jn(t)),c=I(),d=l.update("agencies",e,{softwarePlanStartedAt:fa(s),softwarePlanRenewsAt:fa(o),softwarePlanRenewalContractSignedAt:c,softw
177arePlanRenewalContractSignedByName:t.name,softwarePlanRenewalContractSignedByEmail:t.softwarePlanRenewalContractRecipientEmail??t.contactEmail,softwarePlanLastRenewedAt:c});return d&&Ae(d,"agency_renewed","Agency renewed",`${d.name}'s signed renewal contract was registered and the term rolled forward.`,{signedBy:d.softwarePlanRenewalContractSignedByEmail??d.contactEmail,startedAt:s,renewsAt:o,termMonths:Jn(d)}),d},regenerateCode(e){const t=l.list("agencies").find(a=>a.id===e);if(!t)return{ok:!1,reason:"missing"};const r=l.list("agencies").filter(a=>a.id!==e).map(a=>Yn(a)??"").filter(Boolean),n=so(t.name,r),i=l.update("agencies",e,ui(n));return i&&Ae(i,"agency_code_changed","Agency code regenerated",`${i.name}'s encrypted agency sign-in code was regenerated.`,{codePreview:i.agencyCodePreview}),i?{ok:!0,agency:i}:{ok:!1,reason:"missing"}},revealWebsiteApiKeyForMaster(e){const t=l.list("agencies").find(r=>r.id===e);return t?Oy(t):null},revealWebsiteWebhookSecretForMaster(e){const t=l.list("agencies").find(r=>r.id===e);return t?Dy(t):null},regenerateWebsiteApiKey(e){if(!l.list("agencies").find(n=>n.id===e))return{ok:!1,reason:"missing"};const r=l.update("agencies",e,{...Du(ua("qtx_site")),websiteConnectionUpdatedAt:I()});return r&&Ae(r,"agency_website_connection_updated","Website API key regenerated",`${r.name}'s website API key was regenerated.`,{apiKeyPreview:r.websiteApiKeyPreview??null}),r?{ok:!0,agency:r}:{ok:!1,reason:"missing"}},regenerateWebsiteWebhookSecret(e){if(!l.list("agencies").find(n=>n.id===e))return{ok:!1,reason:"missing"};const r=l.update("agencies",e,{...Lu(ua("qtx_hook")),websiteConnectionUpdatedAt:I()});return r&&Ae(r,"agency_website_connection_updated","Website webhook secret regenerated",`${r.name}'s website webhook secret was regenerated.`,{webhookSecretPreview:r.websiteWebhookSecretPreview??null}),r?{ok:!0,agency:r}:{ok:!1,reason:"missing"}},checkWebsiteConnection(e){const t=l.list("agencies").find(i=>i.id===e);if(!t)return{ok:!1,reason:"missing"};const r=Ly(t),n=l.update("agencies",e,{websiteLastSyncAt:I(),websiteLastWebhookStatus:r.status,websiteLastWebhookMessage:r.message,websiteConnectionUpdatedAt:I()});return n&&Ae(n,"agency_website_connection_updated","Website connection checked",`${n.name}'s website connection was checked: ${r.message}`,{status:r.status}),n?{ok:!0,agency:n}:{ok:!1,reason:"missing"}},deactivate(e,t={}){const r=l.list("agencies").find(s=>s.id===e);if(!r)return null;if(!r.active)return r;const n=I(),i=x0(r),a=l.update("agencies",e,{active:!1,deactivationSnapshot:i,monthlyPriceOverrideUsd:0,monthlyPriceOverrideReason:ou,monthlyPriceOverrideUpdatedAt:n});if(a){const s=t.sendNotice===!1?null:N0(a,t.actorId);Ae(a,"agency_deactivated","Agency deactivated",`${a.name} was marked inactive in the master portal. Billing was suspended and the agency contact was notified.`,{billingStatus:"suspended",monthlyPriceUsd:0,snapshotCapturedAt:i.capturedAt,noticeRecipient:a.contactEmail,noticeCommunicationId:(s==null?void 0:s.id)??null,noticeDeliveryStatus:(s==null?void 0:s.deliveryStatus)??null})}return a},reactivate(e,t={}){const r=l.list("agencies").find(o=>o.id===e);if(!r)return null;const n=P0(r.deactivationSnapshot),i=!!r.deactivationSnapshot,a=!i&&r.monthlyPriceOverrideUsd===0&&r.monthlyPriceOverrideReason===ou,s=l.update("agencies",e,{...n,active:!0,deactivationSnapshot:void 0,...a?{monthlyPriceOverrideUsd:void 0,monthlyPriceOverrideReason:void 0,monthlyPriceOverrideUpdatedAt:void 0}:{}});if(s){const o=q0(s.id,t.actorId);l.syncNow(),Ae(s,"agency_plan_updated","Agency reactivated",`${s.name} was reactivated in the master portal.${i||a?" Billing resumed under the agency's saved plan.":""}`,{billingStatus:i||a?"resumed":"unchanged",monthlyPriceUsd:Ey(s),restoredFromSnapshot:i,restoredStaffCount:o})}return s},setTier(e,t){const r=l.update("agencies",e,{tier:t});return r&&Ae(r,"agency_plan_updated","Agency tier changed",`${r.name}'s tier was changed to ${t}.`,{tier:t}),r},addUserSlots(e,t){const r=l.list("agencies").find(a=>a.id===e);if(!r)return null;const n=Math.max(0,Math.min(500,Math.floor(t)));if(n===0)return r;const i=l.update("agencies",e,{allowedUsers:r.allowedUsers+n});return i&&Ae(i,"agency_plan_updated","User slots added",`${n} user slot${n===1?"":"s"} added to ${i.name}.`,{addedSlots:n,totalSlots:i.allowedUsers}),i},updateSubscriptionLimits(e,t){const r=l.list("agencies").find(s=>s.id===e);if(!r)return null;const n=gc[t.tier],i=l.list("users").filter(s=>s.tenantId===e&&(s.role==="agent"||s.role==="manager")).length,a=l.update("agencies",e,{tier:t.tier,allowedUsers:Math.max(i,Math.floor(t.allowedUsers)||0),allowedCarriers:Math.max(n.allowedCarriers,Math.floor(t.allowedCarriers)||0),allowedAiMessagesPerMonth:Math.max(n.allowedAiMessagesPerMonth,Math.floor(t.allowedAiMessagesPerMonth)||0),websiteAppAddOn:t.websiteAppAddOn??r.websiteAppAddOn??"none",allowedProspectsPerMonth:n.allowedProspectsPerMonth});return a&&Ae(a,"agency_plan_updated","Subscription limits updated",`${a.name}'s plan limits and add-ons were updated.`,{tier:a.tier,userSlots:a.allowedUsers,websiteAppAddOn:a.websiteAppAddOn??"none"}),a},addPerformanceGoal(e,t){const r=l.list("agencies").find(i=>i.id===e);if(!r)return null;const n={id:N("goal"),metric:t.metric,customMetricLabel:t.customMetricLabel,customMetricPrompt:t.customMetricPrompt,customMetricHelper:t.customMetricHelper,customMetricFormula:t.customMetricFormula,target:t.target,period:t.period,dueDate:t.dueDate,scope:t.scope,assigneeIds:t.scope==="personal"?t.assigneeIds??[]:void 0,updatedAt:I()};return l.update("agencies",e,{performanceGoals:[...Mn(r.performanceGoals),n]}),n},updatePerformanceGoal(e,t,r){const n=l.list("agencies").find(a=>a.id===e);if(!n)return null;const i=Mn(n.performanceGoals).map(a=>a.id===t?{...a,...r,assigneeIds:(r.scope??a.scope)==="personal"?r.assigneeIds??a.assigneeIds??[]:void 0,updatedAt:I()}:a);return l.update("agencies",e,{performanceGoals:i})},markGoalAchievementNotified(e,t){const r=l.list("agencies").find(i=>i.id===e);if(!r)return null;const n=(r.performanceGoals??[]).map(i=>i.id===t?{...i,achievedNotifiedAt:I()}:i);return l.update("agencies",e,{performanceGoals:n})},removePerformanceGoal(e,t){const r=l.list("agencies").find(n=>n.id===e);return r?l.update("agencies",e,{performanceGoals:Mn(r.performanceGoals).filter(n=>n.id!==t)}):null},archivePerformanceGoal(e,t,r){const n=l.list("agencies").find(s=>s.id===e);if(!n)return null;const i=Mn(n.performanceGoals).find(s=>s.id===t);if(!i)return n;const a={id:i.id,metric:i.metric,customMetricLabel:i.customMetricLabel,customMetricPrompt:i.customMetricPrompt,customMetricHelper:i.customMetricHelper,customMetricFormula:i.customMetricFormula,target:i.target,period:i.period,dueDate:i.dueDate,scope:i.scope,assigneeIds:i.assigneeIds,actual:r,met:r>=i.target,archivedAt:I()};return l.update("agencies",e,{performanceGoals:Mn(n.performanceGoals).filter(s=>s.id!==t),performanceGoalHistory:[a,...n.performanceGoalHistory??[]]})}
177,addPerformanceGoalRequest(e,t){const r=l.list("agencies").find(o=>o.id===e);if(!r)return null;const n={id:N("goalreq"),requestedById:t.requestedById,metric:t.metric,customMetricLabel:t.customMetricLabel,customMetricPrompt:t.customMetricPrompt,customMetricHelper:t.customMetricHelper,customMetricFormula:t.customMetricFormula,target:t.target,period:t.period,dueDate:t.dueDate,scope:t.scope,note:t.note,status:"pending",createdAt:I()};l.update("agencies",e,{performanceGoalRequests:[n,...r.performanceGoalRequests??[]]});const i=l.list("users").find(o=>o.id===t.requestedById),a=t.metric==="custom"?t.customMetricLabel??"Custom metric":t.metric==="premiumWritten"?"Premium written":t.metric==="newCustomers"?"New clients":t.metric==="newProspects"?"New prospects":t.metric==="activitiesResolved"?"Activities resolved":"Policies bound",s=t.metric==="premiumWritten"?Le.money(t.target):t.target.toLocaleString();return l.list("users").filter(o=>o.tenantId===e&&o.role==="manager"&&o.active).forEach(o=>{l.insert("aiNotifications",{id:N("ain"),tenantId:e,kind:"goal_request",title:`Performance goal request - ${(i==null?void 0:i.name)??"Agent"}`,summary:`${(i==null?void 0:i.name)??"An agent"} requested ${s} ${t.scope==="company"?"company-wide":"personal"} ${a.toLowerCase()} for this ${t.period}${t.dueDate?`, due ${Le.date(t.dueDate)}`:""}.`,assignedToId:o.id,severity:"info",topic:"other",goalRequestId:n.id,createdAt:I()})}),n},approvePerformanceGoalRequest(e,t,r){const n=l.list("agencies").find(o=>o.id===e);if(!n)return null;const i=(n.performanceGoalRequests??[]).find(o=>o.id===t);if(!i||i.status!=="pending")return null;const a=this.addPerformanceGoal(e,{metric:i.metric,customMetricLabel:i.customMetricLabel,customMetricPrompt:i.customMetricPrompt,customMetricHelper:i.customMetricHelper,customMetricFormula:i.customMetricFormula,target:i.target,period:i.period,dueDate:i.dueDate,scope:i.scope,assigneeIds:i.scope==="personal"?[i.requestedById]:void 0});if(!a)return null;const s=l.list("agencies").find(o=>o.id===e);return l.update("agencies",e,{performanceGoalRequests:((s==null?void 0:s.performanceGoalRequests)??[]).map(o=>o.id===t?{...o,status:"approved",reviewedAt:I(),reviewedById:r,createdGoalId:a.id}:o)}),l.list("aiNotifications").filter(o=>o.tenantId===e&&o.goalRequestId===t).forEach(o=>l.update("aiNotifications",o.id,{acknowledgedAt:I(),acknowledgedById:r})),a},rejectPerformanceGoalRequest(e,t,r){const n=l.list("agencies").find(a=>a.id===e);if(!n)return null;const i=l.update("agencies",e,{performanceGoalRequests:(n.performanceGoalRequests??[]).map(a=>a.id===t?{...a,status:"rejected",reviewedAt:I(),reviewedById:r}:a)});return l.list("aiNotifications").filter(a=>a.tenantId===e&&a.goalRequestId===t).forEach(a=>l.update("aiNotifications",a.id,{acknowledgedAt:I(),acknowledgedById:r})),i}},branches:{listByAgency(e){return l.list("branches").filter(t=>t.agencyId===e).sort((t,r)=>t.createdAt<r.createdAt?-1:1)},create(e){const t={id:N("branch"),agencyId:e.agencyId,name:e.name,address:e.address,city:e.city,state:e.state,zip:e.zip,phone:e.phone,createdAt:I()};l.insert("branches",t);const r=l.list("agencies").find(n=>n.id===t.agencyId);return r&&Ae(r,"agency_updated","Branch added",`${t.name} was added as a branch/location for ${r.name}.`,{branchName:t.name,city:t.city??null,state:t.state??null}),t},update(e,t){const r=l.update("branches",e,t);if(r){const n=l.list("agencies").find(i=>i.id===r.agencyId);n&&Ae(n,"agency_updated","Branch updated",`${r.name}'s branch/location details were updated for ${n.name}.`,{branchName:r.name,fields:Object.keys(t).join(", ")})}return r},remove(e){const t=l.list("branches").find(n=>n.id===e),r=l.remove("branches",e);if(r&&t){const n=l.list("agencies").find(i=>i.id===t.agencyId);n&&Ae(n,"agency_updated","Branch removed",`${t.name} was removed from ${n.name}'s branch/location list.`,{branchName:t.name})}return r}},users:{list(e){return oe(l.list("users"),e)},masterAccountExists(){return l.list("users").some($u)},masterByEmail(e){const t=e.trim().toLowerCase();return l.list("users").find(r=>r.role==="master_admin"&&r.email.toLowerCase()===t)},get(e){return l.list("users").find(t=>
177t.id===e)},byEmail(e){const t=e.toLowerCase();return l.list("users").find(r=>{var n;return r.email.toLowerCase()===t||((n=r.businessEmail)==null?void 0:n.toLowerCase())===t})},byUsername(e){const t=e.trim().toLowerCase();return l.list("users").find(r=>{var n;return((n=r.username)==null?void 0:n.toLowerCase())===t})},byIdentifier(e,t){const r=e.trim().toLowerCase(),n=i=>t===void 0||i.tenantId===t;return l.list("users").find(i=>{var a,s;return n(i)&&((((a=i.username)==null?void 0:a.toLowerCase())??"")===r||i.email.toLowerCase()===r||((s=i.businessEmail)==null?void 0:s.toLowerCase())===r)})},create(e){$d(e.role);const t={...e,id:N("user"),active:e.active??!0,staffAccessStatus:e.active===!1?e.staffAccessStatus??"deleted":e.staffAccessStatus??"active",createdAt:I()};if(l.insert("users",t),yr(t),t.tenantId&&nt(t.role)){const r=l.list("agencies").find(n=>n.id===t.tenantId);r&&Ae(r,"agency_user_updated","Staff user created",`${t.name} was added as ${Ht(t.role).toLowerCase()} for ${r.name}.`,{userName:t.name,role:Ht(t.role),email:t.businessEmail??t.email})}return t},update(e,t){t.role==="master_admin"&&$d("master_admin",e);const r=l.update("users",e,t);if(r&&(t.businessEmail!==void 0||t.email!==void 0||t.mailProvider!==void 0||t.name!==void 0||t.active!==void 0||t.staffAccessStatus!==void 0))if(r.active&&r.staffAccessStatus!=="banned"&&r.staffAccessStatus!=="deleted")yr(r,t.staffAccessUpdatedById);else{const n=l.list("connectedMailboxes").find(i=>i.ownerType==="staff"&&i.userId===r.id);n&&l.update("connectedMailboxes",n.id,{status:"disabled",updatedAt:I(),updatedById:t.staffAccessUpdatedById})}if(r!=null&&r.tenantId&&nt(r.role)){const n=l.list("agencies").find(i=>i.id===r.tenantId);n&&Ae(n,"agency_user_updated","Staff user updated",`${r.name}'s staff profile or access details changed for ${n.name}.`,{userName:r.name,role:Ht(r.role),fields:Object.keys(t).join(", ")})}return r},setStaffAccessStatus(e,t,r){const n=z.users.get(e);if(!n)return{ok:!1,reason:"not_found"};const i=t==="active",a=n.tenantId;if(!i&&n.role==="manager"&&a&&l.list("users").filter(c=>c.tenantId===a&&c.role==="manager"&&c.active&&c.id!==n.id).length===0)return{ok:!1,reason:"last_active_manager"};if(i&&a&&nt(n.role)){const o=z.agencies.get(a),c=l.list("users").filter(d=>d.tenantId===a&&d.active&&nt(d.role)&&d.id!==n.id).length;if(o&&c>=o.allowedUsers)return{ok:!1,reason:"seat_capacity"}}const s=l.update("users",e,{active:i,staffAccessStatus:t,staffAccessUpdatedAt:I(),staffAccessUpdatedById:r});if(s)if(i)yr(s,r);else{const o=l.list("connectedMailboxes").find(c=>c.ownerType==="staff"&&c.userId===s.id);o&&l.update("connectedMailboxes",o.id,{status:"disabled",updatedAt:I(),updatedById:r})}if(s!=null&&s.tenantId&&nt(s.role)){const o=l.list("agencies").find(c=>c.id===s.tenantId);o&&Ae(o,"agency_user_updated",i?"Staff user reactivated":"Staff user access changed",`${s.name}'s access status is now ${t}.`,{userName:s.name,role:Ht(s.role),status:t})}return s?{ok:!0,user:s}:{ok:!1,reason:"not_found"}},registerStaff(e){var d;const t=z.agencies.byCode(e.agencyCode);if(!t)return{ok:!1,reason:"agency_not_found"};if(!t.active)return{ok:!1,reason:"inactive_agency"};if(!nt(e.role))return{ok:!1,reason:"missing_fields"};const r=((d=e.branchId)==null?void 0:d.trim())||void 0;if(r&&!l.list("branches").some(m=>m.id===r&&m.agencyId===t.id))return{ok:!1,reason:"missing_fields"};const n=e.firstName.trim(),i=e.lastName.trim(),a=e.phone.trim(),s=e.businessEmail.trim().toLowerCase();return!n||!i||!a||!s?{ok:!1,reason:"missing_fields"}:e.password.length<8?{ok:!1,reason:"weak_password"}:z.users.byEmail(s)?{ok:!1,reason:"duplicate_email"}:kl(l.list("users"),t.id)>=t.allowedUsers?{ok:!1,reason:"slot_limit"}:{ok:!0,user:z.users.create({tenantId:t.id,role:e.role,firstName:n,lastName:i,name:`${n} ${i}`,email:s,businessEmail:s,mailProvider:rr(s),phone:a,branchId:r,passwordUpdatedAt:I(),profileCompleted:!0}),agency:t}},regeneratePassword(e){return null}
177,bulkProvision({tenantId:e,agencyName:t,tier:r}){const n=qg(r),i=l.list("users").filter(o=>o.tenantId===e),a=[],s=di(t);if(["agent","manager"].forEach(o=>{const c=o==="agent"?n.agent:n.manager,d=i.filter(m=>m.role===o).length;for(let m=d;m<c;m++){const p=m+1,u=ul(o,t,p),f={id:N("user"),tenantId:e,role:o,email:`${u}@${s}.example`,username:u,passwordUpdatedAt:I(),name:`${Ht(o)} #${p} - ${t}`,profileCompleted:!1,active:!0,createdAt:I()};l.insert("users",f),yr(f),a.push(f)}}),a.length>0){const o=l.list("agencies").find(c=>c.id===e);o&&Ae(o,"agency_user_updated","Staff placeholders provisioned",`${a.length} staff placeholder account${a.length===1?"":"s"} were provisioned for ${o.name}.`,{count:a.length})}return a},provisionMore({tenantId:e,role:t,count:r,agencyName:n}){if(!nt(t))return[];const i=l.list("agencies").find(f=>f.id===e),a=kl(l.list("users"),e),s=i?Math.max(0,i.allowedUsers-a):50,o=Math.max(1,Math.floor(r)||1),c=Math.max(0,Math.min(50,o,s));if(c===0)return[];const m=l.list("users").filter(f=>f.tenantId===e&&f.role===t).length+1,p=di(n),u=[];for(let f=0;f<c;f++){const g=m+f,y=ul(t,n,g),h={id:N("user"),tenantId:e,role:t,email:`${y}@${p}.example`,username:y,passwordUpdatedAt:I(),name:`${Ht(t)} #${g} - ${n}`,profileCompleted:!1,active:!0,createdAt:I()};l.insert("users",h),yr(h),u.push(h)}return u.length>0&&i&&Ae(i,"agency_user_updated","Staff placeholders provisioned",`${u.length} ${Ht(t).toLowerCase()} placeholder account${u.length===1?"":"s"} were provisioned for ${i.name}.`,{count:u.length,role:Ht(t)}),u}},mailboxes:{listByTenant(e){return oe(l.list("connectedMailboxes"),e)},get(e){return l.list("connectedMailboxes").find(t=>t.id===e)},staff(e){return l.list("connectedMailboxes").find(t=>t.ownerType==="staff"&&t.userId===e)},agencyMarketing(e){return l.list("connectedMailboxes").find(t=>t.tenantId===e&&t.ownerType==="agency_marketing"&&t.status!=="disabled")},cacheConnection(e){const t=l.list("connectedMailboxes").find(r=>r.id===e.id);return t?l.update("connectedMailboxes",t.id,{...e,updatedAt:e.updatedAt||I()})??e:(l.insert("connectedMailboxes",e),e)},resolveStaffSender(e){return nn(e)},resolveAgencyMarketingSender(e){return $n(e)},prepareStaffMailboxAuthorization(e,t){const r=l.list("users").find(n=>n.id===e);return r?yr(r,t):null},prepareAgencyMarketingMailboxAuthorization(e,t){const r=l.list("agencies").find(n=>n.id===e);return r?Ls(r,t):null},setStatus(e,t,r){return l.update("connectedMailboxes",e,{status:t,updatedAt:I(),updatedById:r})},productionRequirements(e){if(!e)return["Connect the mailbox through Google OAuth, Microsoft OAuth, or an approved IMAP/SMTP adapter."];if(e.authMode==="demo")return["Reconnect this mailbox through provider OAuth before live send/sync.","Store refresh tokens in the encrypted backend token vault.","Enable provider webhooks or scheduled sync for inbound and sent-mail mirroring."];const t=[];return e.tokenVaultRef||t.push("Add an encrypted token vault reference."),e.scopes.includes("send")||t.push("Grant send permission."),e.authMode!=="smtp_imap"&&!e.scopes.includes("read")&&!e.scopes.includes("sync")&&t.push("Grant read or sync permission for mailbox mirroring."),e.status!=="connected"&&t.push("Complete provider authorization."),t}},mailboxOutbox:{listByTenant(e){return oe(l.list("mailboxOutbox"),e).sort((t,r)=>t.createdAt<r.createdAt?1:-1)},get(e){return l.list("mailboxOutbox").find(t=>t.id===e)},markSending(e){const t=this.get(e);if(!t||t.status==="sent"||t.status==="cancelled")return t??null;const r=l.update("mailboxOutbox",e,{status:"sending",attemptCount:t.attemptCount+1,lastAttemptAt:I(),lastError:void 0,updatedAt:I()});return r&&Sr(r,"sending"),r},markSent(e,t={}){const r=this.get(e);if(!r)return null;const n=l.update("mailboxOutbox",e,{status:"sent",providerMessageId:t.externalMessageId??r.providerMessageId,providerThreadId:t.externalThreadId??r.providerThreadId,providerUrl:t.externalUrl??r.providerUrl,lastAttemptAt:I(),lastError:void 0,updatedAt:I()});return n&&(Sr(n,"sent",t),Jr(n.mailboxConnectionId)),n},markFailed(e,t,r){if(!this.get(e))return null;const i=l.update("mailboxOutbox",e,{status:"failed",lastError:t,nextAttemptAt:r,lastAttemptAt:I(),updatedAt:I()});return i&&(Sr(i,"failed"),i.mailboxConnectionId&&l.update("connectedMailboxes",i.mailboxConnectionId,{lastError:t,updatedAt:I()})),i},retryDue(e,t=I()){return this.listByTenant(e).filter(r=>(r.status==="queued"||r.status==="failed")&&(!r.nextAttemptAt||r.nextAttemptAt<=t))},cancel(e){const t=this.get(e);if(!t||t.status==="sent")return t??null;const r=l.update("mailboxOutbox",e,{status:"cancelled",updatedAt:I()});return r&&Sr(r,"failed"),r}},customers:{all(){return l.list("customers")},list(e,t){return oe(l.list("customers"),e).filter(n=>((t==null?void 0:t.includeArchived)||!n.archived)&&((t==null?void 0:t.includeSuperseded)||n.carrierImportActive!==!1))},listVisible(e,t,r){const n=this.list(e,r);return t?t.role==="master_admin"||t.role==="manager"||t.role==="agent"||t.role==="csr"?n:[]:[]},listOwned(e,t,r){const n=this.list(e,r);return t?t.role==="master_admin"?n:t.role==="agent"||t.role==="manager"||t.role==="csr"?n.filter(i=>$i(i,t.id)):[]:[]}
177,canSee(e,t){if(!e||!t)return!1;if(t.role==="master_admin")return!0;if(t.role==="manager"||t.role==="agent"||t.role==="csr"){const r=l.list("users").find(n=>n.id===t.id);return r?r.tenantId===e.tenantId:!0}return!1},fullHistory(e){return sS(e)},listArchived(e){return oe(l.list("customers"),e).filter(t=>t.archived)},get(e){return l.list("customers").find(t=>t.id===e)},byUserId(e){return l.list("customers").find(t=>t.userId===e)},create(e){const{skipAutoRoute:t,...r}=e,n=!Fi(r)&&!t?Fd(r.tenantId,Go(r)):void 0,i={...r,assignedAgentId:r.assignedAgentId??(n==null?void 0:n.id),id:N("customer"),createdAt:I()};return l.insert("customers",i),n&&(js(i,n.id,"ai"),Qr({tenantId:i.tenantId,kind:"client",contactId:i.id,contactName:i.name,before:{...i,assignedAgentId:void 0,additionalAgentIds:void 0,assignedCsrId:void 0},after:i,byUserId:"ai"})),i},update(e,t){return l.update("customers",e,t)},assignAgent(e,t,r){const n=l.list("customers").find(a=>a.id===e),i=l.update("customers",e,{assignedAgentId:t,routingDismissedAt:void 0,routingDismissedById:void 0});return i&&n&&!Fi(n)&&t&&js(i,t,r),n&&i&&Qr({tenantId:i.tenantId,kind:"client",contactId:i.id,contactName:i.name,before:n,after:i,byUserId:r}),i},assignAgents(e,t,r,n){if(t.length===0)return null;const i=l.list("customers").find(y=>y.id===e),a=t.map(y=>l.list("users").find(h=>h.id===y&&h.tenantId===(i==null?void 0:i.tenantId))).filter(y=>!!y&&kr(y.role));if(!i||a.length===0)return null;const s=new Set(sr(i)),o=a.filter(y=>y.role==="agent"||y.role==="manager");if(o.length===0)return null;const[c,...d]=o.map(y=>y.id),m=n?n.csrIds??(n.csrId?[n.csrId]:[]):[i.assignedCsrId,...i.additionalCsrIds??[]].filter(Boolean),p=Array.from(new Set(m.map(y=>{var h;return(h=l.list("users").find(w=>w.id===y&&w.tenantId===i.tenantId&&w.role==="csr"))==null?void 0:h.id}).filter(y=>!!y))),[u,...f]=p,g=l.update("customers",e,{assignedAgentId:c??i.assignedAgentId,additionalAgentIds:d.length>0?d:void 0,assignedCsrId:u,additionalCsrIds:f.length>0?f:void 0,routingDismissedAt:void 0,routingDismissedById:void 0});return g&&([...o.map(y=>y.id),...p].filter(y=>!!y&&!s.has(y)).forEach(y=>js(g,y,r)),Qr({tenantId:g.tenantId,kind:"client",contactId:g.id,contactName:g.name,before:i,after:g,byUserId:r})),g},archive(e){return l.update("customers",e,{archived:!0,archivedAt:I()})},unarchive(e){return l.update("customers",e,{archived:!1,archivedAt:void 0})}},assets:{listByCustomer(e){return l.list("assets").filter(t=>t.customerId===e)},listByTenant(e){return oe(l.list("assets"),e)},get(e){return l.list("assets").find(t=>t.id===e)},create(e){const t=Yl(e.details??{}),r=e.type==="luxury_vehicle"?Eo({type:e.type,details:t,fallbackLabel:e.label}):Ut(e.label),n={...e,label:r,details:t,id:N("asset"),createdAt:I()};return l.insert("assets",n),n},update(e,t){const r=l.list("assets").find(a=>a.id===e),n=t.details?Yl(t.details):void 0,i=r&&(t.label!==void 0||n)?r.type==="luxury_vehicle"?Eo({type:r.type,details:n??r.details??{},fallbackLabel:t.label??r.label}):Ut(t.label??r.label):t.label;return l.update("assets",e,{...t,...i!==void 0?{label:i}:{},...n?{details:n}:{}})},upgradeVehicleLabelFromVin(e,t){return tc(e,t)},backfillLabels(e){if(!e||Kd.has(e))return 0;Kd.add(e);const t=[];let r=0;return oe(l.list("assets"),e).forEach(n=>{const i=vi(n);if(i.customLabel||i.labelAutoFixedAt)return;const a=String(n.label??"").trim(),s=Jc(i),o=Bt(a);if(!(!a||gm(a)||s.length>0&&o===s))return;const d={...i,previousLabel:i.previousLabel??a,labelSource:"backfill_derive",labelAutoFixedAt:I()},m=ta(n.type,d),p=l.update("assets",n.id,{label:m,details:d});p&&(r+=1,t.length<100&&IS(p)&&t.push({id:p.id,label:p.label}))}),t.length>0&&(async()=>{for(const n of t)await tc(n.id,n.label)})(),r}},quotes:{listByCustomer(e){return l.list("quoteRequests").filter(t=>t.customerId===e)},listByTenant(e){return oe(l.list("quoteRequests"),e)},listIncompleteWorkflows(e){return this.listByTenant(e).filter(t=>t.status==="quote_started").sort((t,r)=>{const n=t.lastTouchedAt??t.createdAt,i=r.lastTouchedAt??r.createdAt;return n<i?1:-1})},get(e){return l.list("quoteRequests").find(t=>
177t.id===e)},create(e){const t={...e,id:N("quote"),createdAt:I()};return l.insert("quoteRequests",t),t},update(e,t){return l.update("quoteRequests",e,t)},findOpenIncomplete(e){return l.list("quoteRequests").find(t=>t.tenantId===e.tenantId&&t.customerId===e.customerId&&t.status==="quote_started"&&(e.categoryId?t.categoryId===e.categoryId:e.assetType?t.assetType===e.assetType:!0))},recordIncompleteWorkflow(e){const t=I(),r=l.list("customers").find(A=>A.id===e.customerId),n=xa(r),i=e.assignedAgentId??n[0],a=e.assignedAgentId?void 0:n.length>1?n.slice(1):void 0,s=e.contactName.trim()||(r==null?void 0:r.name)||"Customer",o=s.split(/\s+/)[0]||"there",c=e.categoryLabel??Xp("quote_started"),d=e.lineOfBusiness==="commercial"?"commercial":"personal",m=z.helpers.assetTypeLabel(e.assetType),p=e.currentStep.toLowerCase(),u=`${s} stopped mid-quote: ${c}`,f=`${s} started a ${c} ${d}-lines quote but stopped at ${p}. Follow up while the request is fresh.`,g=`Finish your ${c.toLowerCase()} quote`,y=[`Hi ${o},`,"",`I saw you started your ${c.toLowerCase()} quote and stopped around the ${p} section. I can help you finish it from here if anything was unclear.`,"",e.assetIdentifier?`I have the ${m.toLowerCase()} reference you entered as: ${e.assetIdentifier}.`:"Once you send the missing detail, I can move the quote forward with the right carrier options.","","Reply here or reopen the quote whenever you're ready and we'll keep it moving."].join(`
178`),h={...e.parsedData??{},lineOfBusiness:e.lineOfBusiness,categoryId:e.categoryId,categoryLabel:c,contactName:s,contactEmail:e.contactEmail,contactPhone:e.contactPhone,assetIdentifier:e.assetIdentifier,currentStep:e.currentStep,completionPercent:Math.max(0,Math.min(100,e.completionPercent))},w=this.findOpenIncomplete({tenantId:e.tenantId,customerId:e.customerId,categoryId:e.categoryId,assetType:e.assetType});let T=w==null?void 0:w.recoveryTaskId;if(T)l.update("tasks",T,{title:u,description:f,aiSummary:f,aiReplySubject:g,aiReplyBody:y,assignedToId:i,additionalAssignedToIds:a,awaitingManagerAssignment:!i,severityReason:`Customer quote is ${Math.max(0,Math.min(100,e.completionPercent))}% complete and stopped at ${e.currentStep}.`});else{const A={id:N("task"),tenantId:e.tenantId,title:u,description:f,customerId:e.customerId,source:"ai_notification",status:"open",topic:"policy_edit_request",severity:"warning",severityReason:`Customer quote is ${Math.max(0,Math.min(100,e.completionPercent))}% complete and stopped at ${e.currentStep}.`,aiSummary:f,aiReplySubject:g,aiReplyBody:y,assignedToId:i,additionalAssignedToIds:a,awaitingManagerAssignment:i?void 0:!0,createdById:e.createdById??"ai",expressQuoteFollowUp:!0,createdAt:t};l.insert("tasks",A),T=A.id,pe({tenantId:e.tenantId,actorId:e.createdById??"ai",action:"task.created_from_incomplete_quote",taskId:T,metadata:{customerId:e.customerId,categoryId:e.categoryId,currentStep:e.currentStep}})}const b={tenantId:e.tenantId,customerId:e.customerId,assetType:e.assetType,lineOfBusiness:e.lineOfBusiness,categoryId:e.categoryId,categoryLabel:c,rawDescription:`Incomplete customer quote (${d} lines): ${c}. Stopped at ${e.currentStep}.`,parsedData:h,missingDocuments:[],status:"quote_started",assignedAgentId:i,currentStep:e.currentStep,completionPercent:Math.max(0,Math.min(100,e.completionPercent)),lastTouchedAt:t,abandonedAt:t,recoveryTaskId:T,aiReplySubject:g,aiReplyBody:y};if(w)return l.update("quoteRequests",w.id,b)??w;const _={...b,id:N("quote"),createdAt:t};return l.insert("quoteRequests",_),l.insert("statusEvents",{id:N("se"),tenantId:e.tenantId,source:"system",message:`${s} started a ${c} quote and stopped at ${e.currentStep}.`,visibility:"internal",customerId:e.customerId,createdAt:t}),_},submitCustomerQuote(e){const t=this.findOpenIncomplete({tenantId:e.tenantId,customerId:e.customerId,categoryId:e.categoryId,assetType:e.assetType});return t?(t.recoveryTaskId&&(l.update("tasks",t.recoveryTaskId,{status:"resolved",completedAt:I(),completedById:"system"}),pe({tenantId:e.tenantId,actorId:"system",action:"task.resolved_by_quote_submission",taskId:t.recoveryTaskId,metadata:{quoteRequestId:t.id}})),l.update("quoteRequests",t.id,{...e,status:"submitted_to_agent",currentStep:"submitted to agent",completionPercent:100,lastTouchedAt:I(),submittedAt:I()})??t):this.create({...e,submittedAt:I()})}},policies:{listByCustomer(e,t={}){return l.list("policies").filter(r=>r.customerId===e&&(t.includeSuperseded||Tt(r)))},listActiveByCustomer(e){return this.listByCustomer(e).filter(t=>t.status!=="closed")},listPreviousByCustomer(e){return this.listByCustomer(e).filter(t=>t.status==="closed").sort((t,r)=>(t.closedAt??t.createdAt)<(r.closedAt??r.createdAt)?1:-1)},listByTenant(e,t={}){return oe(l.list("policies"),e).filter(r=>t.includeSuperseded||Tt(r))},listByAsset(e,t={}){return l.list("policies").filter(r=>r.assetId===e&&(t.includeSuperseded||Tt(r)))},get(e){return l.list("policies").find(t=>
178t.id===e)},create(e){const t={...e,id:N("policy"),createdAt:I()};if(l.insert("policies",t),l.list("policies").filter(n=>n.customerId===e.customerId&&n.id!==t.id).length===0){const n=l.list("prospects").find(i=>i.customerId===e.customerId);n&&n.status!=="converted"&&(l.update("prospects",n.id,{status:"converted"}),l.insert("statusEvents",{id:N("se"),tenantId:e.tenantId,source:"system",message:`${n.name} auto-converted to client (first policy bound).`,visibility:"internal",prospectId:n.id,customerId:e.customerId,createdAt:I()}))}return Us(t,e.agentId),Qi(t),t},update(e,t){const r=l.update("policies",e,t);return r&&((Object.keys(t).some(i=>hf.has(i)&&String(i).toLowerCase().includes("billing"))||"paymentFrequency"in t||"nextPaymentDueDate"in t||"nextPaymentAmount"in t)&&Yp(r,t.agentId??r.agentId??"ai"),(t.status==="bound"||t.status==="renewed")&&Us(r,t.agentId??r.agentId),("renewalDate"in t||"renewalStatus"in t||t.status==="renewal_upcoming")&&Qi(r)),r},close(e,t){const r=this.get(e);if(!r)return;if(r.status==="closed")return r;const n=l.update("policies",e,{status:"closed",closedAt:I(),closedById:t??"system"});return n&&HC(n,t??"system"),n??void 0},retrieveFromCarrier(e){return l.list("customers").find(r=>r.id===e.customerId&&r.tenantId===e.tenantId)?{checked:0,updated:0,jobIds:[],summary:"Carrier retrieval must run through the paired Quotex Connect browser. No policy data was changed."}:{checked:0,updated:0,jobIds:[],summary:"Client record could not be found."}},setStatus(e,t){return l.update("policies",e,{status:t})},requestEdit(e){const t=e.assetId?l.list("assets").find(g=>g.id===e.assetId):void 0,r=e.policyId?l.list("policies").find(g=>g.id===e.policyId):void 0,n=l.list("customers").find(g=>g.id===e.customerId),i=l.list("agencies").find(g=>g.id===e.tenantId),a=(t==null?void 0:t.label)??"an asset",s=(i==null?void 0:i.name)??"your agency",o=r!=null&&r.policyNumber?`Policy #${r.policyNumber}`:r?`Policy #${r.id.slice(-6).toUpperCase()}`:"policy pending",c=`Policy edit request — ${a}`,d=I(),m=N("comm");l.insert("communications",{id:m,tenantId:e.tenantId,customerId:e.customerId,channel:"email",direction:"inbound",subject:c,body:e.body,createdAt:d});const p=N("se");l.insert("statusEvents",{id:p,tenantId:e.tenantId,source:"customer",message:`Policy edit requested for ${a}. ${e.body}`,visibility:"customer_visible",customerId:e.customerId,assetId:e.assetId,policyId:r==null?void 0:r.id,createdAt:d});let u=null,f=null;if(n){const g=n.name.split(/\s+/)[0],y=n.assignedAgentId?l.list("users").find(O=>O.id===n.assignedAgentId):void 0,h=(y==null?void 0:y.name)??`your agent at ${s}`,w=y==null?void 0:y.email,T=aC(e.body),b=oC(T),_=sC(T,e.body),A=[`Hi ${g},`,"",`Thank you for sending over your request on ${a} (${o}). ${_}`,"","Here's what happens next:",...b.map(O=>`  • ${O}`),"","If anything above isn't quite what you meant, reply to this email and I'll adjust before we ping the carrier.","",`${h}${w?`
179${w}`:""}`,s].join(`
180`);u=N("msg"),l.insert("messages",{id:u,tenantId:e.tenantId,campaignId:"campaign_policy_edits",customerId:e.customerId,channel:"email",subject:`Re: ${c}`,content:A,deliveryStatus:"draft",createdAt:d}),l.insert("statusEvents",{id:N("se"),tenantId:e.tenantId,source:"ai",message:`AI drafted an acknowledgment to ${n.name} for staff review (${Ds(T)}).`,visibility:"internal",customerId:e.customerId,assetId:e.assetId,policyId:r==null?void 0:r.id,createdAt:d,marketingCampaignId:"campaign_policy_edits",marketingMessageId:u});const v=T==="cancellation"?"cancellation_request":T==="coverage_limit"||T==="deductible"?"coverage_change":T==="named_insured"||T==="address"||T==="usage"?"endorsement_request":"policy_edit_request",{severity:S,reason:C}=cC({topic:v,body:e.body,classification:T}),k=[`${n.name} submitted a ${Ds(T).toLowerCase()} request on ${a} (${o}).`,"The AI drafted an acknowledgment for review; your follow-up is to send it deliberately, confirm the change with the carrier, and close the loop."].join(" ");f=N("ain"),l.insert("aiNotifications",{id:f,tenantId:e.tenantId,kind:"policy_edit_reply",title:`Customer requested help with ${Gd(v)}. Review the draft, contact the carrier, and service the customer.`,summary:`${Ds(T)} on ${a}.`,customerId:e.customerId,assetId:e.assetId,policyId:r==null?void 0:r.id,messageId:u,communicationId:m,createdAt:d,topic:v,severity:S,severityReason:C,aiSummary:k,aiReplyBody:A,aiReplySubject:`Re: ${c}`,originalMessageContent:e.body,originalMessageId:m,assignedToId:n.assignedAgentId})}return{commId:m,statusEventId:p,sentEmailId:u,notificationId:f}}},deposits:{listByCustomer(e){return l.list("deposits").filter(t=>t.customerId===e)},listByPolicy(e){return l.list("deposits").filter(t=>t.policyId===e)},listByQuote(e){return l.list("deposits").filter(t=>t.quoteRequestId===e)},listByTenant(e){return oe(l.list("deposits"),e)},create(e){const t={...e,id:N("deposit"),createdAt:I()};return l.insert("deposits",t),t},update(e,t){return l.update("deposits",e,t)}},payments:{listByPolicy(e){return l.list("payments").filter(t=>t.policyId===e)},listByCustomer(e){return l.list("payments").filter(t=>t.customerId===e)}},accountingSettings:{get(e){const t=l.list("accountingSettings").find(n=>n.tenantId===e);if(t)return Array.isArray(t.timesheetRecipientIds)?t:l.update("accountingSettings",t.id,{timesheetRecipientIds:Ns(e),updatedAt:I()})??{...t,timesheetRecipientIds:Ns(e)};const r={id:N("acct_settings"),tenantId:e,...JA,timesheetRecipientIds:Ns(e),updatedAt:I()};return l.insert("accountingSettings",r),r},update(e,t,r){const n=this.get(e),a=l.update("accountingSettings",n.id,{...t,timesheetRecipientIds:Array.isArray(t.timesheetRecipientIds)?Array.from(new Set(t.timesheetRecipientIds)):n.timesheetRecipientIds,updatedAt:I(),updatedById:r})??n;return this.notifyTimesheetRecipients(e,r),a},notifyTimesheetRecipients(e,t){const r=this.get(e),n=ZA(r);return Array.from(new Set(r.timesheetRecipientIds)).filter(a=>{const s=l.list("users").find(o=>o.id===a);return!!s&&s.tenantId===e&&s.active}).map(a=>{const s=l.list("aiNotifications").find(c=>c.tenantId===e&&c.kind==="timesheet_due"&&c.assignedToId===a&&!c.acknowledgedAt&&c.summary===n);if(s)return s;const o={id:N("ain"),tenantId:e,kind:"timesheet_due",title:"Timesheet due",summary:n,assignedToId:a,severity:"info",topic:"other",createdAt:I()};return l.insert("aiNotifications",o),o})},currentPeriod(e){return oa(this.get(e))}},timesheets:{listByTenant(e){return oe(l.list("timesheets"),e).sort((t,r)=>(t.submittedAt??t.updatedAt)<(r.submittedAt??r.updatedAt)?1:-1)},listByUser(e,t){return this.listByTenant(e).filter(r=>r.userId===t)},get(e){return l.list("timesheets").find(t=>
180t.id===e)},ensureCurrent(e,t){const r=z.accountingSettings.get(e),n=oa(r),i=l.list("timesheets").find(o=>o.tenantId===e&&o.userId===t&&o.periodStart===n.periodStart&&o.periodEnd===n.periodEnd);if(i)return i;const a=I(),s={id:N("timesheet"),tenantId:e,userId:t,...n,status:"draft",entries:[],totalHours:0,createdAt:a,updatedAt:a};return l.insert("timesheets",s),s},saveDraft(e,t){const r=this.get(e);return!r||r.status==="approved"?r??null:l.update("timesheets",e,{entries:t.entries,notes:t.notes,totalHours:Ld(t.entries),status:r.status==="submitted"?"submitted":"draft",updatedAt:I()})},submit(e,t){const r=this.get(e);if(!r||r.status==="approved")return r??null;const n=I();return l.update("timesheets",e,{entries:t.entries,notes:t.notes,totalHours:Ld(t.entries),status:"submitted",submittedAt:n,updatedAt:n})},review(e,t,r,n){const i=I();return l.update("timesheets",e,{status:t,reviewedAt:i,reviewedById:r,managerNotes:n,updatedAt:i})},needsSubmissionToday(e,t){const r=z.accountingSettings.get(e),n=oa(r);if(!XA(n.dueDate))return!1;const i=l.list("timesheets").find(a=>a.tenantId===e&&a.userId===t&&a.periodStart===n.periodStart&&a.periodEnd===n.periodEnd);return!i||i.status==="draft"||i.status==="needs_revision"},pendingManagerCount(e){return this.listByTenant(e).filter(t=>t.status==="submitted").length}},hr:{listByTenant(e){return oe(l.list("hrSubmissions"),e).sort((t,r)=>t.submittedAt<r.submittedAt?1:-1)},listForUser(e,t){return this.listByTenant(e).filter(r=>r.submittedById===t)},get(e){return l.list("hrSubmissions").find(t=>t.id===e)},create(e){var n;const t=I(),r={id:N("hr"),tenantId:e.tenantId,kind:e.kind,anonymous:e.anonymous,submittedById:e.anonymous?void 0:e.submittedById,coworkerName:e.kind==="complaint"?(n=e.coworkerName)==null?void 0:n.trim():void 0,subject:e.subject.trim(),message:e.message.trim(),status:"new",submittedAt:t};return l.insert("hrSubmissions",r),r},updateStatus(e,t,r,n){return l.update("hrSubmissions",e,{status:t,reviewedById:r,reviewedAt:I(),managerNotes:n})},newCount(e){return this.listByTenant(e).filter(t=>t.status==="new").length}},prospects:{listByTenant(e,t){return oe(l.list("prospects"),e).filter(n=>!(!(t!=null&&t.includeArchived)&&n.archived||!(t!=null&&t.includeConverted)&&n.status==="converted"))},listVisible(e,t,r){const n=this.listByTenant(e,r);return t?t.role==="master_admin"||t.role==="manager"||t.role==="agent"||t.role==="csr"?n:[]:[]},listOwned(e,t,r){const n=this.listByTenant(e,r);return t?t.role==="master_admin"?n:t.role==="agent"||t.role==="manager"||t.role==="csr"?n.filter(i=>$i(i,t.id)):[]:[]},canSee(e,t){if(!e||!t)return!1;if(t.role==="master_admin")return!0;if(t.role==="manager"||t.role==="agent"||t.role==="csr"){const r=l.list("users").find(n=>n.id===t.id);return r?r.tenantId===e.tenantId:!0}return!1},listArchived(e){return oe(l.list("prospects"),e).filter(t=>t.archived)},get(e){return l.list("prospects").find(t=>t.id===e)},create(e){const{skipAutoRoute:t,...r}=e,n=!Fi(r)&&!t?Fd(r.tenantId,Go(r)):void 0,i={...r,assignedAgentId:r.assignedAgentId??(n==null?void 0:n.id),id:N("prospect"),createdAt:I()};return l.insert("prospects",i),n&&(Vs(i,n.id,"ai"),Qr({tenantId:i.tenantId,kind:"prospect",contactId:i.id,contactName:i.name,before:{...i,assignedAgentId:void 0,additionalAgentIds:void 0,assignedCsrId:void 0},after:i,byUserId:"ai"})),i},update(e,t){return l.update("prospects",e,t)},setStatus(e,t){if(t==="converted"){const r=l.list("prospects").find(n=>n.id===e);if(r&&!r.assignedAgentId)throw new Error("Cannot mark a prospect as converted until a manager assigns them to an agent. Use api.prospects.convert() once assigned.")}return l.update("prospects",e,{status:t})},assignAgent(e,t,r){const n=l.list("prospects").find(a=>a.id===e),i=l.update("prospects",e,{assignedAgentId:t,routingDismissedAt:void 0,routingDismissedById:void 0});return i&&n&&!Fi(n)&&t&&Vs(i,t,r),n&&i&&Qr({tenantId:i.tenantId,kind:"prospect",contactId:i.id,contactName:i.name,before:n,after:i,byUserId:r}),i},assignAgents(e,t,r,n){if(t.length===0)return null;const i=l.list("prospects").find(y=>y.id===e),a=t.map(y=>l.list("users").find(h=>h.id===y&&h.tenantId===(i==null?void 0:i.tenantId))).filter(y=>!!y&&kr(y.role));if(!i||a.length===0)return null;const s=new Set(sr(i)),o=a.filter(y=>y.role==="agent"||y.role==="manager");if(o.length===0)return null;const[c,...d]=o.map(y=>y.id),m=n?n.csrIds??(n.csrId?[n.csrId]:[]):[i.assignedCsrId,...i.additionalCsrIds??[]].filter(
180Boolean),p=Array.from(new Set(m.map(y=>{var h;return(h=l.list("users").find(w=>w.id===y&&w.tenantId===i.tenantId&&w.role==="csr"))==null?void 0:h.id}).filter(y=>!!y))),[u,...f]=p,g=l.update("prospects",e,{assignedAgentId:c??i.assignedAgentId,additionalAgentIds:d.length>0?d:void 0,assignedCsrId:u,additionalCsrIds:f.length>0?f:void 0,routingDismissedAt:void 0,routingDismissedById:void 0});return g&&([...o.map(y=>y.id),...p].filter(y=>!!y&&!s.has(y)).forEach(y=>Vs(g,y,r)),Qr({tenantId:g.tenantId,kind:"prospect",contactId:g.id,contactName:g.name,before:i,after:g,byUserId:r})),g},convert(e,t){const r=l.list("prospects").find(s=>s.id===e);if(!r)throw new Error("Prospect not found.");if(t!=null&&t.actorId){const s=l.list("users").find(o=>o.id===t.actorId);if(s){const o=s.role==="manager",c=s.role==="agent"&&(r.assignedAgentId===s.id||(r.additionalAgentIds??[]).includes(s.id));if(!o&&!c)throw new Error("Only managers and the prospect's assigned agents can convert this prospect to a client.")}}if(!r.assignedAgentId)throw new Error("A manager must assign this prospect to an agent (or themself) before they can be converted to a client.");if(r.customerId){const s=l.list("customers").find(c=>c.id===r.customerId),o=s?l.list("users").find(c=>c.id===s.userId):void 0;if(s&&o)return{prospect:r,customer:s,user:o,reusedExisting:!0}}const n=z.users.create({role:"customer",tenantId:r.tenantId,email:r.email,name:r.name,phone:r.phone}),i=z.customers.create({tenantId:r.tenantId,userId:n.id,name:r.name,email:r.email,phone:r.phone,marketingOptInEmail:!0,marketingOptInSms:!1,assignedAgentId:r.assignedAgentId,assignedCsrId:r.assignedCsrId,additionalAgentIds:r.additionalAgentIds&&r.additionalAgentIds.length>0?r.additionalAgentIds:void 0,additionalCsrIds:r.additionalCsrIds&&r.additionalCsrIds.length>0?r.additionalCsrIds:void 0}),a=l.update("prospects",r.id,{status:"converted",customerId:i.id});return l.list("statusEvents").forEach(s=>{s.prospectId===r.id&&!s.customerId&&l.update("statusEvents",s.id,{customerId:i.id})}),l.insert("statusEvents",{id:N("se"),tenantId:r.tenantId,source:"agent",message:`${r.name} converted from prospect to client (assigned to agent).`,visibility:"internal",prospectId:r.id,customerId:i.id,createdAt:I(),createdById:t==null?void 0:t.actorId}),{prospect:a,customer:i,user:n,reusedExisting:!1}},archive(e){return l.update("prospects",e,{archived:!0,archivedAt:I()})},unarchive(e){return l.update("prospects",e,{archived:!1,archivedAt:void 0})},revertToProspect(e,t){const r=l.list("prospects").find(a=>a.id===e);if(!r)throw new Error("Prospect not found.");if(t!=null&&t.actorId){const a=l.list("users").find(s=>s.id===t.actorId);if(a){const s=a.role==="manager",o=a.role==="agent"&&(r.assignedAgentId===a.id||(r.additionalAgentIds??[]).includes(a.id));if(!s&&!o)throw new Error("Only managers and the prospect's assigned agents can revert this back to a prospect.")}}if(!r.customerId)throw new Error("This prospect was never converted to a client.");const n=l.list("customers").find(a=>a.id===r.customerId);if(n){const a=new Set(["declined","deposit_refunded"]),s=l.list("policies").filter(o=>o.customerId===n.id&&!a.has(o.status));if(s.length>0)throw new Error(`Cannot revert — ${n.name} still has ${s.length} active polic${s.length===1?"y":"ies"}. Cancel or migrate those first.`);l.update("customers",n.id,{archived:!0,archivedAt:I()})}const i=l.update("prospects",r.id,{status:"nurturing",customerId:void 0});return l.insert("statusEvents",{id:N("se"),tenantId:r.tenantId,source:"agent",message:`${r.name} reverted from client back to prospect${n?" (client record archived)":""}.`,visibility:"internal",prospectId:r.id,customerId:n==null?void 0:n.id,createdAt:I(),createdById:t==null?void 0:t.actorId}),i}},carriers:{list(){return l.list("carriers")},directory(e){return kv(e?this.listForTenant(e):this.list())},listForTenant(e){const t=l.list("carrierLinks").filter(n=>n.tenantId===e&&n.active),r=new Set(t.map(n=>n.carrierId));return l.list("carriers").filter(n=>r.has(n.id))},get(e){return l.list("carriers").find(t=>t.id===e)},create(e){var r;const t={...e,id:((r=e.id)==null?void 0:r.trim())||N("carrier"),createdAt:I()};return l.insert("carriers",t),t},update(e,t){return l.update("carriers",e,t)},remove(e){return l.remove("carriers",e)},links(){return l.list("carrierLinks")},linkToAgency(e,t,r){const n=l.list("carrierLinks").find(o=>o.carrierId===e&&o.tenantId===t),i=l.list("agencies").find(o=>o.id===t),a=l.list("carriers").find(o=>o.id===e);if(n)return l.update("carrierLinks",n.id,{active:!0}),i&&a&&!n.active&&Ae(i,"agency_carrier_access_updated","Carrier enabled for agency",`${a.name} was enabled for ${i.name}.`,{carrier:a.name}),{...n,active:!0};
180const s={id:N("link"),carrierId:e,tenantId:t,active:!0,importBatchId:r==null?void 0:r.importBatchId,createdAt:I()};return l.insert("carrierLinks",s),i&&a&&Ae(i,"agency_carrier_access_updated","Carrier enabled for agency",`${a.name} was enabled for ${i.name}.`,{carrier:a.name}),s},unlinkFromAgency(e,t){const r=l.list("carrierLinks").find(n=>n.carrierId===e&&n.tenantId===t);if(r&&(l.update("carrierLinks",r.id,{active:!1}),r.active)){const n=l.list("agencies").find(a=>a.id===t),i=l.list("carriers").find(a=>a.id===e);n&&i&&Ae(n,"agency_carrier_access_updated","Carrier disabled for agency",`${i.name} was disabled for ${n.name}.`,{carrier:i.name})}}},carrierRunnerJobs:{listByTenant(e){return oe(l.list("carrierRunnerJobs"),e).sort((t,r)=>t.createdAt<r.createdAt?1:-1)},listOpen(e){return this.listByTenant(e).filter(Cv)},get(e){return l.list("carrierRunnerJobs").find(t=>t.id===e)},activeCarrierIds(e){return WC(e)},queueForPolicy(e,t,r,n){const i=l.list("policies").find(s=>s.id===e);if(!i)return null;const a=Wc(i.id);return Kc({tenantId:i.tenantId,trigger:t,policy:i,renewal:t==="renewal_window"||t==="renewal_status_check"?a:void 0,reason:r??`${Vm(t)} requested. Runner signs into the carrier portal with the approved agency credential vault, retrieves current policy, renewal, billing, claims, and document data, and stages any updates for review.`,createdById:n})},queuePolicyPlaced(e,t){const r=l.list("policies").find(n=>n.id===e);return r?Us(r,t):null},sweepRenewals(e,t=I()){return[]},start(e,t){const r=this.get(e);if(!r||["completed","cancelled"].includes(r.status))return r??null;const n=l.update("carrierRunnerJobs",e,{status:"running",startedAt:r.startedAt??I(),startedById:t??r.startedById??"ai",lastAttemptAt:I(),attempts:r.attempts+1});return n&&Wt(n,"Carrier portal check started","Retrieving current carrier record data.",t??"ai"),n},markNeedsMfa(e,t){if(!this.get(e))return null;const n=l.update("carrierRunnerJobs",e,{status:"needs_mfa",requiresMfa:!0,mfaRequestedAt:I(),errorMessage:t??"Carrier portal requested MFA before the runner could continue."});return n&&(Wt(n,"Carrier portal check paused for staff approval",n.errorMessage),jd(n,n.errorMessage??"Carrier portal requested MFA.")),n},approveMfa(e,t){if(!this.get(e))return null;const n=l.update("carrierRunnerJobs",e,{status:"queued",requiresMfa:!1,mfaApprovedById:t,errorMessage:void 0});return n&&Wt(n,"Carrier portal approval completed","Carrier portal check was released to continue.",t),n},complete(e,t={}){const r=this.get(e);if(!r||r.status==="cancelled")return r??null;let n;t.stageDownload&&(n=rS(r,{...t.stageDownload,sourceReference:t.sourceReference}).id);const i=t.outcome??(n?"policy_update_staged":"no_change"),a=t.summary??(n?"Carrier posted updates that were staged for staff review.":"Carrier portal was checked and no changes were found."),s=l.update("carrierRunnerJobs",e,{status:n?"staged_for_review":"completed",completedAt:n?void 0:I(),completedById:t.completedById??"ai",detectedOutcome:i,resultSummary:a,sourceReference:t.sourceReference??r.sourceReference,carrierDownloadId:n,errorMessage:void 0});return s&&(i==="non_renewal_detected"&&XC(s,a,t.completedById??"ai"),Wt(s,n?"Carrier posted updates":"Carrier portal check completed",a,t.completedById??"ai")),s},markStagedReviewed(e,t){if(!this.get(e))return null;const n=l.update("carrierRunnerJobs",e,{status:"completed",completedAt:I(),completedById:t});return n&&Wt(n,"Carrier update review completed","Staff completed review of the staged carrier update.",t),n},fail(e,t,r){if(!this.get(e))return null;const i=l.update("carrierRunnerJobs",e,{status:"failed",errorMessage:t,lastAttemptAt:I()});return i&&(Wt(i,"Carrier portal check failed",t,r??"ai"),jd(i,t)),i},cancel(e,t){const r=l.update("carrierRunnerJobs",e,{status:"cancelled",completedAt:I(),completedById:t??"system"});return r&&Wt(r,"Carrier portal check cancelled","Carrier portal check was cancelled before completion.",t??"system"),r}},carrierDownloads:{listByTenant(e){return oe(l.list("carrierDownloads"),e).sort((t,r)=>t.receivedAt<r.receivedAt?1:-1)},listOpen(e){return this.listByTenant(e).filter(t=>["unreviewed","matched","needs_review"].includes(t.status))},get(e){return l.list("carrierDownloads").find(t=>
180t.id===e)},approve(e,t){const r=this.get(e);if(!r||r.status==="approved")return r??null;const n=I(),i=r.policyId?l.list("policies").find(d=>d.id===r.policyId):void 0,a=A0(r.changes);i&&Object.keys(a).length>0&&l.update("policies",i.id,a);let s;r.documentPayload&&r.policyId&&r.customerId&&(s=z.documents.create({tenantId:r.tenantId,uploadedById:t,fileName:r.documentPayload.fileName,fileType:r.documentPayload.fileType,documentName:r.documentPayload.documentName,type:r.documentPayload.type,visibility:r.documentPayload.visibility,status:r.documentPayload.status??"approved",customerId:r.customerId,assetId:r.assetId,policyId:r.policyId}).id);const o=l.update("carrierDownloads",e,{status:"approved",appliedAt:n,appliedById:t}),c=l.list("carrierRunnerJobs").find(d=>d.carrierDownloadId===r.id&&d.status==="staged_for_review");return c&&l.update("carrierRunnerJobs",c.id,{status:"completed",completedAt:n,completedById:t}),Zp(r,tS(r),t,s),o},reject(e,t,r){const n=this.get(e);if(!n||n.status==="rejected")return n??null;const i=I(),a=l.update("carrierDownloads",e,{status:"rejected",rejectedAt:i,rejectedById:t,rejectionReason:(r==null?void 0:r.trim())||void 0});return l.insert("statusEvents",{id:N("se"),tenantId:n.tenantId,source:"system",message:`Carrier update rejected: ${n.summary}`,visibility:"internal",customerId:n.customerId,assetId:n.assetId,policyId:n.policyId,createdAt:i,createdById:t}),a}},carrierContacts:{listForTenant(e){return oe(l.list("carrierContacts"),e).sort((t,r)=>t.createdAt<r.createdAt?1:-1)},listForCarrier(e,t){return l.list("carrierContacts").filter(r=>r.tenantId===e&&r.carrierId===t).sort((r,n)=>r.createdAt<n.createdAt?1:-1)},get(e){return l.list("carrierContacts").find(t=>t.id===e)},create(e){const t={...e,id:N("ccontact"),createdAt:I()};return l.insert("carrierContacts",t),t},update(e,t){return l.update("carrierContacts",e,t)},remove(e){return l.remove("carrierContacts",e)}},categories:{list(){return l.list("categories").sort(Bs)},listActive(){return l.list("categories").filter(e=>e.active).sort(Bs)},listActiveForTenant(e){const t=l.list("categoryLinks").filter(n=>n.tenantId===e);if(t.length===0)return this.listActive();const r=new Set(t.filter(n=>n.active).map(n=>n.categoryId));return l.list("categories").filter(n=>n.active&&r.has(n.id)).sort(Bs)},get(e){return l.list("categories").find(t=>t.id===e)},create(e){const t={...e,id:N("cat"),createdAt:I()};return l.insert("categories",t),t},update(e,t){return l.update("categories",e,t)},remove(e){return l.list("categoryLinks").filter(t=>t.categoryId===e).forEach(t=>l.remove("categoryLinks",t.id)),l.remove("categories",e)},links(){return l.list("categoryLinks")},linkToAgency(e,t){const r=l.list("categoryLinks").find(s=>s.categoryId===e&&s.tenantId===t),n=l.list("agencies").find(s=>s.id===t),i=l.list("categories").find(s=>s.id===e);if(r)return l.update("categoryLinks",r.id,{active:!0}),n&&i&&!r.active&&Ae(n,"agency_category_access_updated","Insurance category enabled",`${i.label} was enabled for ${n.name}.`,{category:i.label}),{...r,active:!0};const a={id:N("catlink"),categoryId:e,tenantId:t,active:!0,createdAt:I()};return l.insert("categoryLinks",a),n&&i&&Ae(n,"agency_category_access_updated","Insurance category enabled",`${i.label} was enabled for ${n.name}.`,{category:i.label}),a},unlinkFromAgency(e,t){const r=l.list("categoryLinks").find(n=>n.categoryId===e&&n.tenantId===t);if(r&&(l.update("categoryLinks",r.id,{active:!1}),r.active)){const n=l.list("agencies").find(a=>a.id===t),i=l.list("categories").find(a=>a.id===e);n&&i&&Ae(n,"agency_category_access_updated","Insurance category disabled",`${i.label} was disabled for ${n.name}.`,{category:i.label})}}},documents:{listByEntity(e,t={}){return l.list("documents").filter(r=>(t.includeSuperseded||Tt(r))&&(t.includeSuperseded||zr(r))&&Object.entries(e).every(([n,i])=>!i||r[n]===i))},listByTenant(e,t={}){return oe(l.list("documents"),e).filter(r=>(t.includeSuperseded||Tt(r))&&(t.includeSuperseded||zr(r)))},get(e){return l.list("documents").find(t=>t.id===e)},create(e){var s;const t=I(),r={id:N("doc"),...e,status:e.status??"pending",storagePath:e.storagePath??`s3://placeholder/${e.tenantId}/${N("file")}/${e.fileName}`,downloadUrl:e.downloadUrl,uploadedAt:t,lastChangeAction:"uploaded",lastChangeAt:t};r.templateFields=Ts(e.templateFields)??Qs(r),l.insert("documents",r);const n=l.list("users").find(o=>o.id===e.uploadedById),i=(n==null?void 0:n.role)==="customer"?"uploaded":"shared",a=((s=e.documentName)==null?void 0:s.trim())||z.helpers.documentTypeLabel(String(e.type));return l.insert("statusEvents",{id:N("se"),tenantId:e.tenantId,source:(n==null?void 0:n.role)==="customer"?"customer":"agent",message:e.carrierMetadataOnly?`Verified carrier document record 
180imported: ${e.fileName} (${a}). File availability remains with the carrier portal.`:`Document ${i}: ${e.fileName} (${a}).`,visibility:e.visibility==="customer_visible"?"customer_visible":"internal",customerId:e.customerId,assetId:e.assetId,policyId:e.policyId,claimId:e.claimId,documentId:r.id,importBatchId:e.importBatchId,createdAt:I(),createdById:e.uploadedById}),Qd(r,e.uploadedById),r},update(e,t){const r=!t.lastChangeAction&&!t.lastChangeAt&&Object.keys(t).some(a=>!["needsRenewalUpdate","renewalForRenewalId","customerEsignSentAt","customerEsignSignedAt","esignCommunicationId","agentEsignAssignedToId","agentEsignSignedAt","agentEsignSignatureName","agentEsignSignatureFont","agentEsignSignatureSize","agentEsignTaskId"].includes(a)),n="templateFields"in t||"fileName"in t||"documentName"in t?"edited":"updated",i=l.update("documents",e,{...t,...r?{lastChangeAction:n,lastChangeAt:I()}:{}});return i&&"status"in t&&Qd(i),i},listTemplates(e){return B0(e),l.list("documents").filter(t=>t.tenantId===e&&!t.customerId&&!t.assetId&&!t.policyId&&!t.claimId&&!t.carrierId&&!t.quoteRequestId&&(t.type==="agency_template"||t.agencyId===e)).sort((t,r)=>t.uploadedAt<r.uploadedAt?1:-1)},applyTemplate(e,t){var n;const r=l.list("documents").find(i=>i.id===e);return r?this.create({tenantId:r.tenantId,uploadedById:t.uploadedById,fileName:((n=t.fileName)==null?void 0:n.trim())||r.fileName,fileType:r.fileType,type:t.type??r.type,visibility:t.visibility??"customer_visible",status:"approved",customerId:t.customerId,assetId:t.assetId,policyId:t.policyId,customerEsignRequired:r.customerEsignRequired,agentEsignRequired:r.agentEsignRequired,templateFields:t.templateFields}):null},autofillAcordForCustomer(e){const t=l.list("customers").find(y=>y.id===e.customerId&&y.tenantId===e.tenantId);if(!t||e.selectedAcordTemplateIds.length===0)return null;const r=l.list("assets").filter(y=>y.customerId===t.id&&y.tenantId===e.tenantId),n=r.find(y=>y.id===e.assetId)??r[0],i=n?Object.fromEntries(Object.entries(n.details??{}).map(([y,h])=>[y,h==null?"":String(h)])):{};t.mailingAddress&&!i.address&&(i.address=t.mailingAddress);const a=l.list("quotingSessions").filter(y=>y.tenantId===e.tenantId&&y.customerId===t.id&&y.lineOfBusiness==="commercial"&&!Gn(y)).sort((y,h)=>y.updatedAt<h.updatedAt?1:-1)[0],s=Array.from(new Set([...((a==null?void 0:a.commercialAcordTemplates)??[]).map(y=>y.templateId),...e.selectedAcordTemplateIds])),o=Yd(e.tenantId,s,(a==null?void 0:a.publicFields)??{},a==null?void 0:a.publicFieldEvidence),c=I(),d=!!a,m=a?l.update("quotingSessions",a.id,{assetId:a.assetId??(n==null?void 0:n.id),assetType:a.assetType??(n==null?void 0:n.type)??"other",estimatedValue:a.estimatedValue||(n==null?void 0:n.estimatedValue)||0,assetDetails:Object.keys(a.assetDetails??{}).length?a.assetDetails:i,commercialAcordTemplates:o,updatedAt:c})??a:{id:`quote_session_docs_${t.id}`,tenantId:e.tenantId,customerId:t.id,assetId:n==null?void 0:n.id,assetType:(n==null?void 0:n.type)??"other",estimatedValue:(n==null?void 0:n.estimatedValue)??0,assetDetails:i,state:t.mailingAddress?Bi(t.mailingAddress):Bi(Object.values(i).join(" ")),lineOfBusiness:"commercial",commercialAcordTemplates:o,questionnaireQuestions:[],questionnaireResponses:{},createdById:e.uploadedById,status:"gathering_info",publicFields:{},missingFields:[],quotes:[],aiSummary:"ACORD documents initialized from the client Documents card.",createdAt:c,updatedAt:c},p=fr(m,m.questionnaireResponses??{},"application"),u=p&&p.length>0?d?l.update("quotingSessions",m.id,{commercialAcordTemplates:p,updatedAt:I()})??m:{...m,commercialAcordTemplates:p,updatedAt:I()}:m,f=new Set(e.selectedAcordTemplateIds),g=l.list("documents").filter(y=>{var h;return y.tenantId===e.tenantId&&y.customerId===t.id&&y.quoteRequestId===u.id&&y.type==="completed_acord_application"&&f.has(((h=y.templateFields)==null?void 0:h["Source ACORD template ID"])??"")});return fe(u,{message:`AI autofilled ${g.length} ACORD document${g.length===1?"":"s"} from the client Documents card.`,detail:g.length?`Completed PDF${g.length===1?"":"s"} saved to this client's Documents card: ${g.map(y=>y.fileName).join(", ")}.`:"No completed ACORD documents were created because no selected template could be resolved.",createdAt:I(),createdById:e.uploadedById,source:"ai"}),{session:u,documents:g,templates:u.commercialAcordTemplates??o}},renewForPolicy(e,t){const r=l.list("policies").find(c=>c.id===e);if(!r)return[];const n=r.policyNumber??r.id.slice(-6).toUpperCase(),i=new Date,a=i.getFullYear().toString()+String(i.getMonth()+1).padStart(2,"0")+String(i.getDate()).padStart(2,"0"),o=[{type:"declarations_page",label:"Declarations"},{type:"insurance_id_card",label:"ID-Card"},{type:"proof_of_insurance",label:"Proof-of-Insurance"}].map(c=>this.create({tenantId:r.tenantId,uploadedById:t,fileName:`${n}-${c.label}-${a}.pdf`,fileType:"application/pdf",type:c.type,visibility:"customer_visible",status:"approved",customerId:r.customerId,assetId:r.assetId,policyId:r.id}));return l.insert("statusEvents",{id:N("se"),tenantId:r.tenantId,source:"agent",message:`Policy documents renewed for ${r.policyNumber?`Policy #${r.policyNumber}`:`Policy #${n}`} from current coverage — declarations page, insurance ID card, and proof of insurance regenerated.`,visibility:"customer_visible",customerId:r.customerId,assetId:r.assetId,policyId:r.id,createdAt:I(),createdById:t}),o},flagForRenewal(e,t){const r=l.list("renewals").find(u=>u.id===e);if(!r)return[];const n=l.list("policies").find(u=>u.id===r.policyId);if(!n)return[];const i=["declarations_page","insurance_id_card","proof_of_insurance","policy_document","endorsement_document"],a=l.list("documents").filter(u=>u.policyId===n.id&&i.includes(u.type)&&u.renewalId!==e&&!(u.needsRenewal
180Update&&u.renewalForRenewalId===e)),s=(()=>{const u=n.effectiveDate??n.renewalDate;if(!u)return;const f=new Date(u).getUTCFullYear();if(Number.isFinite(f))return n.effectiveDate?f:f-1})(),o=u=>u.policyTermYear??s??0,c=u=>a.some(f=>f.id!==u.id&&f.type===u.type&&!!f.publishedAt&&f.status!=="rejected"&&(f.supersedesId===u.id||o(f)>o(u))),d=new Map;a.filter(u=>u.status==="approved"&&!c(u)&&!(u.needsRenewalUpdate&&u.renewalForRenewalId===e)).sort((u,f)=>{const g=o(u),y=o(f);return g!==y?y-g:(u.publishedAt??u.uploadedAt)<(f.publishedAt??f.uploadedAt)?1:-1}).forEach(u=>{const f=String(u.type);d.has(f)||d.set(f,u)});const m=Array.from(d.values()),p=[];return m.forEach(u=>{const f=l.update("documents",u.id,{needsRenewalUpdate:!0,renewalForRenewalId:e});f&&p.push(f)}),p.length>0&&l.insert("statusEvents",{id:N("se"),tenantId:n.tenantId,source:"ai",message:`AI inspected the new renewal and flagged ${p.length} document${p.length===1?"":"s"} that need updating for the new term — open the policy's Documents card and click "Update for Renewal" on each.`,visibility:"internal",customerId:n.customerId,assetId:n.assetId,policyId:n.id,renewalId:r.id,createdAt:I(),createdById:t??"ai"}),p},draftRenewalUpdate(e,t,r){var g;const n=l.list("documents").find(y=>y.id===e),i=l.list("renewals").find(y=>y.id===t);if(!n||!i)return null;const a=l.list("documents").find(y=>y.supersedesId===n.id&&y.renewalId===t&&!y.publishedAt);if(a)return a;const s=i.renewalDate?new Date(i.renewalDate).getFullYear():new Date().getFullYear(),o=n.fileName.replace(/-\d{4}\.pdf$/i,"").replace(/\.[^.]+$/,""),c=((g=n.fileName.match(/\.[^.]+$/))==null?void 0:g[0])??".pdf",d=`${o}-${s}${c}`,m=this.create({tenantId:n.tenantId,uploadedById:r,fileName:d,fileType:n.fileType,type:n.type,visibility:n.visibility,status:"pending",customerId:n.customerId,assetId:n.assetId,policyId:n.policyId,templateFields:Qs({...n,fileName:d,status:"pending",policyTermYear:s},{originalFileName:n.fileName,renewalDate:i.renewalDate})}),u=l.update("documents",m.id,{renewalId:t,supersedesId:n.id,policyTermYear:s})??m;nS(u,r);const f=u.policyId?l.list("policies").find(y=>y.id===u.policyId):void 0;return l.insert("statusEvents",{id:N("se"),tenantId:u.tenantId,source:"agent",message:`${z.helpers.documentTypeLabel(String(u.type))} update staged for renewal review: ${u.fileName}${f!=null&&f.policyNumber?` (Policy #${f.policyNumber})`:""}.`,visibility:"internal",customerId:u.customerId,assetId:u.assetId,policyId:u.policyId,documentId:u.id,renewalId:t,createdAt:I(),createdById:r}),u},publishRenewalUpdate(e,t,r){const n=l.list("documents").find(c=>c.id===e);if(!n||!n.supersedesId||!n.renewalId)return null;const i=I(),a={status:"approved",publishedAt:i,lastChangeAction:"renewed",lastChangeAt:i};r!=null&&r.fileName&&r.fileName.trim()&&(a.fileName=r.fileName.trim()),r!=null&&r.templateFields&&(a.templateFields=Ts(r.templateFields));const s=l.update("documents",n.id,a);l.update("documents",n.supersedesId,{needsRenewalUpdate:!1,renewalForRenewalId:void 0});const o=n.policyId?l.list("policies").find(c=>c.id===n.policyId):void 0;return l.insert("statusEvents",{id:N("se"),tenantId:n.tenantId,source:"agent",message:`${z.helpers.documentTypeLabel(String(n.type))} updated and published for the ${n.policyTermYear??"new"}
180 renewal term${o!=null&&o.policyNumber?` (Policy #${o.policyNumber})`:""}.`,visibility:"customer_visible",customerId:n.customerId,assetId:n.assetId,policyId:n.policyId,documentId:n.id,renewalId:n.renewalId,createdAt:I(),createdById:t}),s},fillTemplateWithAi(e){var f,g;const t=l.list("documents").find(y=>y.id===e.templateId);if(!t)return null;const r=l.list("customers").find(y=>y.id===e.customerId),n=new Date,i=n.getFullYear().toString()+String(n.getMonth()+1).padStart(2,"0")+String(n.getDate()).padStart(2,"0"),a=((r==null?void 0:r.name)??"Client").replace(/[^a-z0-9]+/gi,"-").replace(/^-|-$/g,""),s=t.fileName.replace(/\.[^.]+$/,""),o=((f=t.fileName.match(/\.[^.]+$/))==null?void 0:f[0])??".pdf",c=((g=e.outputFileName)==null?void 0:g.trim())||`${s}-${a}-${i}-AI-filled${o}`,d=(e.sourceDocumentIds??[]).map(y=>{var h;return(h=l.list("documents").find(w=>w.id===y))==null?void 0:h.fileName}).filter(y=>!!y),m=(e.sourceFiles??[]).map(y=>y.fileName),p=this.create({tenantId:t.tenantId,uploadedById:e.uploadedById,fileName:c,fileType:t.fileType,type:e.type??t.type,visibility:"customer_visible",status:"approved",customerId:e.customerId,assetId:e.assetId,policyId:e.policyId,templateFields:Ts(e.templateFields)??Qs({...t,tenantId:t.tenantId,fileName:c,type:e.type??t.type,visibility:"customer_visible",status:"approved",customerId:e.customerId,assetId:e.assetId,policyId:e.policyId},{sourceFiles:[...d,...m]})}),u=[...d,...m].join(", ")||"no source files attached";return l.insert("statusEvents",{id:N("se"),tenantId:t.tenantId,source:"ai",message:`AI filled template "${t.fileName}" → ${c}. Sources: ${u}.`,visibility:"internal",customerId:e.customerId,assetId:e.assetId,policyId:e.policyId,documentId:p.id,createdAt:I(),createdById:e.uploadedById}),p},suggestMissingForCustomer(e){if(!l.list("customers").find(u=>u.id===e))return[];const r=l.list("assets").filter(u=>u.customerId===e),n=l.list("policies").filter(u=>u.customerId===e),i=l.list("documents").filter(u=>u.customerId===e),a=u=>{const f=(u==null?void 0:u.effectiveDate)??(u==null?void 0:u.renewalDate);if(!f)return;const g=new Date(f).getUTCFullYear();if(Number.isFinite(g))return u!=null&&u.effectiveDate?g:g-1},s=u=>u.policyId?n.find(f=>f.id===u.policyId):u.assetId?n.find(f=>f.assetId===u.assetId):void 0,o=u=>u.policyTermYear??a(s(u)),c=u=>{if(!u)return;const f=n.find(g=>g.id===u);return i.reduce((g,y)=>{const h=s(y);if((h==null?void 0:h.id)!==u)return g;const w=o(y);return w?g==null?w:Math.max(g,w):g},a(f))},d=u=>i.some(f=>{if(f.id===u.id||f.type!==u.type)return!1;const g=s(u),y=s(f);if((g==null?void 0:g.id)!==(y==null?void 0:y.id))return!1;const h=o(f),w=o(u);return!!f.publishedAt&&f.status!=="rejected"&&(f.supersedesId===u.id||!!h&&!!w&&h>w)}),m=i.filter(u=>{const f=s(u);if(!f)return!d(u);if(d(u))return!1;const g=o(u),y=c(f.id);return!g||!y||g>=y}),p={coastal_home:[{type:"declarations_page",reason:"Carrier dec page proves coverage and policy terms."},{type:"proof_of_insurance",reason:"Mortgagee usually requires a COI on file."},{type:"wind_mitigation",reason:"Required by every coastal-FL carrier for premium credit."},{type:"inspection_report",reason:"4-point inspection on homes 30+ years old."}],luxury_vehicle:[{type:"declarations_page",reason:"Carrier dec page."},{type:"insurance_id_card",reason:"DMV / lienholder requires the ID card on file."},{type:"proof_of_insurance",reason:"Standard COI for the lienholder."}],yacht:[{type:"declarations_page",reason:"Carrier dec page."},{type:"inspection_report",reason:"Marine survey required by every HNW carrier."},{type:"asset_information",reason:"Captain credentials + marina contract."}],jewelry:[{type:"appraisal",reason:"Carriers require an appraisal within 3 years for items > $25k."},{type:"asset_information",reason:"Photographs of each scheduled item."}],umbrella_liability:[{type:"declarations_page",reason:"Carrier dec page for the umbrella layer."}],full_portfolio:[{type:"declarations_page",reason:"Dec pages for every wrapped policy."}],other:[{type:"declarations_page",reason:"Carrier dec page."}]};return r.map(u=>{const f=n.find(w=>w.assetId===u.id),g=p[u.type]??[],y=new Set(m.filter(w=>w.assetId===u.id||f&&w.policyId===f.id||!w.assetId&&!w.policyId&&w.customerId===e).map(w=>w.type)),h=g.filter(w=>!y.has(w.type)).map(w=>({type:w.type,label:this.typeLabel(w.type),reason:w.reason}));return{assetId:u.id,assetLabel:u.label,assetType:u.type,policyId:f==null?void 0:f.id,missing:h}}).filter(u=>u.missing.length>0)},typeLabel(e){return z.helpers.documentTypeLabel(e)}},customDocumentTypes:{listForTenant(e){return oe(l.list("customDocumentTypes"),e).sort((t,r)=>t.sortOrder-r.sortOrder||t.label.localeCompare(r.label))},listActiveForTenant(e){return this.listForTenant(e).filter(t=>t.active)},create(e){const t=e.label.trim();if(!t)return{error:"invalid"};const r=t.toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"");if(!r)return{error:"invalid"};if(new Set(["driver_license","ssn_documentation","proof_of_insurance","asset_information","policy_document","declarations_page","insurance_id_card","policy_booklet","endorsement_document","deposit_receipt","payment_receipt","appraisal","wind_mitigation","inspection_report","carrier_appetite_guide","underwriting_manual","claim_document","cancellation_notice","carrier_correspondence","other"]).has(r))return{error:"reserved"};if(l.list("customDocumentTypes").find(s=>s.tenantId===e.tenantId&&s.slug===r))return{error:"duplicate"};const a={id:N("doctype"),tenantId:e.tenantId,slug:r,label:t,description:e.description,sortOrder:e.sortOrder??100,active:!0,createdAt:I()};return l.insert("customDocumentTypes",a),a},update(e,t){return l.update("customDocumentTypes",e,t)},remove(e){return l.remove("customDocumentTypes",e)}},status:{listFor(e){return l.list("statusEvents").filter(t=>Object.entries(e).every(([r,n])=>!n||t[r]===n)).sort((t,r)=>t.createdAt<r.createdAt?1:-1)},listByTenant(e,t){let r=oe(l.list("statusEvents"),e);return(t==null?void 0:t.internal)===!1&&(r=r.filter(n=>n.visibility==="customer_visible")),r.sort((n,i)=>n.createdAt<i.createdAt?1:-1)},create(e){const t={...e,id:N("se"),createdAt:e.createdAt??I()};return l.insert("statusEvents",t),t}},marketing:{listCampaigns(e){return oe(l.list("campaigns"),e)},listMessages(e){return oe(l.list("messages"),e).map(OC)},getConfig(e){const t=l.list("marketingConfigs").find(i=>i.tenantId===e);if(t)return zd(t);const r=l.list("agencies").find(i=>i.id===e),n={id:N("mcfg"),tenantId:e,messageStyle:"concierge",senderName:r?`${r.name} Concierge Team`:"Your Insurance Concierge",signOff:`Best,
181${(r==null?void 0:r.name)??"Your Insurance Concierge"}
181`,autoSendOnNewProspect:!1,followUpCadenceDays:3,autoMessageRules:Xo(!1),attachments:[],updatedAt:I()};return l.insert("marketingConfigs",n),n},updateConfig(e,t,r){const n=this.getConfig(e),{agencyLogo:i,...a}=t,s=l.update("marketingConfigs",n.id,{...a,updatedAt:I(),updatedById:r});return s?zd(s):n},addAttachment(e,t,r){const n=this.getConfig(e),i={...t,id:N("matt"),addedAt:I(),addedById:r};return this.updateConfig(e,{attachments:[...n.attachments,i]},r)},removeAttachment(e,t,r){const n=this.getConfig(e);return this.updateConfig(e,{attachments:n.attachments.filter(i=>i.id!==t)},r)},autoSendProspectOutreach(e){var f;const t=l.list("prospects").find(g=>g.id===e.prospectId);if(!t)return null;const r=this.getConfig(e.tenantId),n=$n(e.tenantId),i=r.autoMessageRules.find(g=>g.trigger==="new_prospect")??Xo(!1)[0],a=t.name.split(/\s+/)[0],s=t.assetType.replace(/_/g," "),o="email",c=i.includeAttachments?oS(r.attachments,o):"",d="draft",m=`${a}, next step on your ${s} quote`;let p=`${r.senderName}: Hi ${a} — ${r.messageStyle==="concise"?"ready to wrap up your quote?":"still happy to walk you through next steps on your "+s+" coverage."} Reply YES for a callback. Reply STOP to opt out.`;c&&r.attachments.some(g=>g.channels.includes(o))&&(p+=`
182(${r.attachments.filter(g=>g.channels.includes(o)).map(g=>g.description??g.fileName).join(", ")})`);const u={id:N("msg"),tenantId:e.tenantId,campaignId:((f=this.listCampaigns(e.tenantId)[0])==null?void 0:f.id)??"ad_hoc",prospectId:t.id,channel:o,subject:m,content:p,deliveryStatus:d,sentAt:void 0,nextScheduledAt:void 0,fromName:n.fromName,fromEmail:n.fromEmail,mailboxProvider:n.provider,mailboxConnectionId:n.connectionId,createdAt:I()};return l.insert("messages",u),l.insert("statusEvents",{id:N("se"),tenantId:e.tenantId,source:"ai",message:`AI drafted an email to ${t.name} via "${i.name}" for staff review (${r.messageStyle}
182 style${r.attachments.length?`, ${r.attachments.length} attachment${r.attachments.length===1?"":"s"}`:""}).`,visibility:"internal",prospectId:t.id,marketingMessageId:u.id,createdAt:I(),createdById:e.actorId}),u},async composeAiCampaign(e){var F,Y,X,j;const t=l.list("agencies").find(Q=>Q.id===e.tenantId),r=(t==null?void 0:t.name)??"your concierge agency",n=this.getConfig(e.tenantId),i=$n(e.tenantId);if(e.scheduledFor||e.recurrence&&e.recurrence!=="none")throw new Error("Automatic scheduling and recurring sends are disabled. Review the campaign and send it manually.");const a="none",s=["email"],o=void 0,c=e.actorId??((F=e.actor)==null?void 0:F.id),d=c?l.list("users").find(Q=>Q.id===c&&Q.tenantId===e.tenantId):void 0,m=d&&d.active!==!1&&["manager","agent","csr"].includes(d.role)?d:void 0,u=(e.actor&&e.actor.id===c&&e.actor.tenantId===e.tenantId&&e.actor.active!==!1&&["manager","agent","csr"].includes(e.actor.role)?e.actor:void 0)??m,f=ym({system:"marketing_ai",action:"launch_campaign",tenantScoped:!0,humanApproved:!!u,sendsOutboundMessage:!0,writesSystemOfRecord:!0,humanReviewed:!!u,usesOnlyProvidedFacts:!0});if(!f.allowed)throw new Error(`AI marketing campaign requires an approving staff user before launch (${[...f.blockedReasons,...f.warnings].join(", ")}).`);if(!u)throw new Error("AI marketing campaign requires an active agency staff user for delivery.");const g=new Set,y=new Set;e.includeAllClients?l.list("customers").filter(Q=>Q.tenantId===e.tenantId&&!Q.archived).forEach(Q=>g.add(Q.id)):(e.selectedCustomerIds??[]).forEach(Q=>g.add(Q)),e.includeAllProspects?l.list("prospects").filter(Q=>Q.tenantId===e.tenantId&&!Q.archived).forEach(Q=>y.add(Q.id)):(e.selectedProspectIds??[]).forEach(Q=>y.add(Q));const h=g.size+y.size;if(h===0)throw new Error("Choose at least one client or prospect before sending the campaign.");const w=this.createCampaign({tenantId:e.tenantId,name:e.name,channel:s[0],channels:s,audienceFilter:{includeAllClients:!!e.includeAllClients,includeAllProspects:!!e.includeAllProspects,customerIds:Array.from(g),prospectIds:Array.from(y),brief:e.brief,emailSubject:e.emailSubject,emailBody:e.emailBody,heroImageUrl:e.heroImageUrl,heroImageAlt:e.heroImageAlt,pamphlet:e.pamphlet,pamphletTheme:e.pamphletTheme,smartContactLinks:!0,attachments:e.attachments??[],messageStyle:n.messageStyle},status:"active",scheduledFor:void 0,recurrence:a,nextRunAt:void 0}),T="queued",b=I(),_=((Y=e.emailBody)==null?void 0:Y.trim())||e.brief.trim()||e.name,A=((X=e.emailSubject)==null?void 0:X.trim())||e.name.trim()||"Agency update",v=((j=e.ctaLabel)==null?void 0:j.trim())||$m,S=(Q,ae)=>{const ue=xo({origin:e.appOrigin,tenantId:e.tenantId,customerId:Q.customerId,prospectId:Q.prospectId}),de=an(_,ae);return e.pamphlet?AC({emailBody:de,pamphlet:e.pamphlet,heroImageUrl:e.heroImageUrl,heroImageAlt:e.heroImageAlt||e.name,href:ue,ctaLabel:v,recipientName:ae==null?void 0:ae.name,pamphletTheme:e.pamphletTheme,agency:t?{id:t.id,name:t.name,contactEmail:t.contactEmail,phone:t.phone,website:t.website,address:t.address}:void 0,logoUrl:t==null?void 0:t.logoUrl}):pv(fv(de,e.heroImageUrl,e.heroImageAlt||e.name),ue,v)},C=[];for(const Q of Array.from(g)){const ae=l.list("customers").find(de=>de.id===Q),ue={id:N("msg"),tenantId:e.tenantId,campaignId:w.id,customerId:Q,channel:"email",subject:an(A,ae),content:S({customerId:Q},ae),deliveryStatus:T,nextScheduledAt:o,fromName:i.fromName,fromEmail:i.fromEmail,mailboxProvider:i.provider,mailboxConnectionId:i.connectionId,createdAt:b};l.insert("messages",ue),C.push(ue.id)}for(const Q of Array.from(y)){const ae=l.list("prospects").find(de=>de.id===Q),ue={id:N("msg"),tenantId:e.tenantId,campaignId:w.id,prospectId:Q,channel:"email",subject:an(A,ae),content:S({prospectId:Q},ae),deliveryStatus:T,nextScheduledAt:o,fromName:i.fromName,fromEmail:i.fromEmail,mailboxProvider:i.provider,mailboxConnectionId:i.connectionId,createdAt:b};l.insert("messages",ue),C.push(ue.id)}let k=0,O=0;for(const Q of C){const ae=l.list("messages").find(Te=>Te.id===Q);if(!ae)continue;const ue=ae.customerId?l.list("customers").find(Te=>Te.id===ae.customerId):ae.prospectId?l.list("prospects").find(Te=>Te.id===ae.prospectId):void 0,de=Pe(ue==null?void 0:ue.email);if(!de){O+=1,l.update("messages",ae.id,{deliveryStatus:"failed",deliveryError:"No valid recipient email address was available."});continue}const be=xo({origin:e.appOrigin,tenantId:e.tenantId,customerId:ae.customerId,prospectId:ae.prospectId}),P=an(_,ue),Z=PC({emailBody:P,pamphlet:e.pamphlet,heroImageUrl:e.heroImageUrl,heroImageAlt:e.heroImageAlt||e.name,href:be,ctaLabel:v,pamphletTheme:e.pamphletTheme,agency:t?{id:t.id,name:t.name,contactEmail:t.contactEmail,phone:t.phone,website:t.website,address:t.address}:void 0,logoUrl:t==null?void 0:t.logoUrl}),le=await xC({tenantId:e.tenantId,user:u,sender:i,to:de,subject:ae.subject??A,text:Z.text,html:Z.html});le.ok?(k+=1,l.update("messages",ae.id,{deliveryStatus:"sent",sentAt:I(),providerMessageId:le.result.externalMessageId,deliveryError:void 0}),i.status==="connected"&&Jr(i.connectionId)):(O+=1,l.update("messages",ae.id,{deliveryStatus:"failed",deliveryError:le.message}))}const x="",$="",q="processed",B=s.map(Q=>Q.toUpperCase()).join(" + ");return l.insert("statusEvents",{id:N("se"),tenantId:e.tenantId,source:"ai",message:`AI campaign "${e.name}" ${q} (${B}, ${n.messageStyle}
182 style, ${h} recipient${h===1?"":"s"}${e.attachments&&e.attachments.length>0?`, ${e.attachments.length} attachment${e.attachments.length===1?"":"s"}`:""}). ${`${k} provider-accepted, ${O} failed. Recipient campaign receipts were updated from provider responses.`} Agency: ${r}.${x}${$}`,visibility:"internal",marketingCampaignId:w.id,createdAt:I(),createdById:u.id}),{campaign:w,messageCount:h,sentCount:k,failedCount:O}},messagesForProspect(e){return l.list("messages").filter(t=>t.prospectId===e)},createCampaign(e){const t={...e,id:N("camp"),createdAt:I()};return l.insert("campaigns",t),t},pauseCampaign(e){return l.update("campaigns",e,{status:"paused"})},resumeCampaign(e){return l.update("campaigns",e,{status:"active"})},deleteCampaign(e){return l.remove("campaigns",e)},queueMessage(e){const t=$n(e.tenantId),r={...e,fromName:e.fromName??t.fromName,fromEmail:e.fromEmail??t.fromEmail,mailboxProvider:e.mailboxProvider??t.provider,mailboxConnectionId:e.mailboxConnectionId??t.connectionId,id:N("msg"),deliveryStatus:"draft",createdAt:I()};return l.insert("messages",r),r},cancelMessage(e){var n;const t=l.list("messages").find(i=>i.id===e);if(!t)return null;const r=(n=t.subject)!=null&&n.startsWith("[cancelled]")?t.subject:`[cancelled] ${t.subject??""}`.trim();return l.update("messages",e,{deliveryStatus:"failed",subject:r})},requeueMessage(e){var n;const t=l.list("messages").find(i=>i.id===e);if(!t)return null;const r=((n=t.subject)==null?void 0:n.replace(/^\[cancelled\]\s*/i,"").trim())||void 0;return l.update("messages",e,{deliveryStatus:"draft",subject:r,sentAt:void 0})},updateMessage(e,t){return l.update("messages",e,t)},approveMessage(e){const t=l.list("messages").find(r=>r.id===e);return!t||t.deliveryStatus!=="draft"?null:l.update("messages",e,{deliveryStatus:"draft"})},discardDraft(e){const t=l.list("messages").find(r=>r.id===e);return!t||t.deliveryStatus!=="draft"?null:l.remove("messages",e)},deleteForContact(e){const t=l.list("messages").filter(r=>e.customerId&&r.customerId===e.customerId||e.prospectId&&r.prospectId===e.prospectId);return t.forEach(r=>l.remove("messages",r.id)),t.length},draftDocRequest(e){const t=e.missingDocuments.filter(p=>p&&p.trim());if(t.length===0)return null;const r=l.list("customers").find(p=>p.id===e.customerId),n=l.list("agencies").find(p=>p.id===e.tenantId),i=$n(e.tenantId),a=((r==null?void 0:r.name)??"there").split(/\s+/)[0],s=(n==null?void 0:n.name)??"your agency",o=t.map(p=>`  • ${p}`).join(`
183`),c=t.length===1?"One document needed to finalize your quote":`${t.length} documents needed to finalize your quote`,d=[`Hi ${a},`,"",`Thank you for starting a quote with ${s}. To complete the carrier review, we will need ${t.length===1?"one item":`the following ${t.length} items`} from you:`,"",o,"","You can upload these from your client portal under Documents, or reply to this email with attachments and we will handle the rest.","","Thank you,",s].join(`
184`);`${s}${t.length===1?t[0]:`${t.length} docs (${t.slice(0,2).join(", ")}${t.length>2?"…":""})`}${s}`;const m={id:N("msg"),tenantId:e.tenantId,campaignId:"campaign_doc_requests",customerId:e.customerId,channel:"email",subject:c,content:d,deliveryStatus:"draft",fromName:i.fromName,fromEmail:i.fromEmail,mailboxProvider:i.provider,mailboxConnectionId:i.connectionId,createdAt:I()};return l.insert("messages",m),l.insert("statusEvents",{id:N("se"),tenantId:e.tenantId,source:"ai",message:`Drafted ${t.length===1?"a document request":`${t.length} document requests`} for ${(r==null?void 0:r.name)??"customer"}: ${t.join(", ")}. Awaiting approval before send.`,visibility:"internal",customerId:e.customerId,createdAt:I(),marketingCampaignId:"campaign_doc_requests"}),{email:m}}},customMessages:{listByTenant(e){return oe(l.list("customMessages"),e).sort((t,r)=>t.createdAt<r.createdAt?1:-1)},get(e){return l.list("customMessages").find(t=>t.id===e)},resolveRecipients(e){const t=l.list("customers").filter(s=>s.tenantId===e.tenantId),r=l.list("prospects").filter(s=>s.tenantId===e.tenantId),n=e.filter;if(e.audience==="all_clients")return{customers:t,prospects:[]};if(e.audience==="all_prospects")return{customers:[],prospects:r};if(e.audience==="filter"&&n){const s=c=>n.audienceType!=="prospects",o=c=>!(n.audienceType==="clients"||n.assetType&&c.assetType!==n.assetType||n.prospectStatus&&c.status!==n.prospectStatus);return{customers:n.audienceType==="prospects"?[]:t.filter(s),prospects:n.audienceType==="clients"?[]:r.filter(o)}}const i=new Set(e.selectedCustomerIds??[]),a=new Set(e.selectedProspectIds??[]);return{customers:t.filter(s=>i.has(s.id)),prospects:r.filter(s=>a.has(s.id))}},create(e){if(e.scheduledFor||e.recurrence&&e.recurrence!=="none")throw new Error("Automatic scheduling and recurring sends are disabled. Review the message and send it manually.");const t="none",r=this.resolveRecipients({tenantId:e.tenantId,audience:e.audience,filter:e.filter,selectedCustomerIds:e.selectedCustomerIds,selectedProspectIds:e.selectedProspectIds}),n=r.customers.length+r.prospects.length,i="sent",a=Bd(e.channel,"outbound",e.body,e.createdById),s=nn(e.createdById),o=l.list("users").find(d=>d.id===e.createdById),c={id:N("cmsg"),tenantId:e.tenantId,createdById:e.createdById,channel:e.channel,subject:e.subject,body:a,fromName:o==null?void 0:o.name,from
184Email:s.account,mailboxProvider:s.provider,mailboxConnectionId:s.connectionId,attachments:e.attachments??[],audience:e.audience,filter:e.filter,selectedCustomerIds:e.selectedCustomerIds??[],selectedProspectIds:e.selectedProspectIds??[],scheduledFor:void 0,recurrence:t,status:i,recipientCount:n,sentCount:n,lastSentAt:I(),createdAt:I()};return l.insert("customMessages",c),Jr(s.connectionId),c},cancel(e){return l.update("customMessages",e,{status:"cancelled"})},pauseRecurring(e){return l.update("customMessages",e,{status:"recurring_paused"})},resumeRecurring(e){return l.update("customMessages",e,{status:"recurring_paused"})},remove(e){return l.remove("customMessages",e)},sendNow(e){const t=l.list("customMessages").find(r=>r.id===e);return t?(Jr(t.mailboxConnectionId),l.update("customMessages",e,{status:"sent",sentCount:t.recipientCount,lastSentAt:I()})):null}},renewals:{listByTenant(e,t={}){return oe(l.list("renewals"),e).filter(r=>t.includeSuperseded||Tt(r)&&zr(r))},listByPolicy(e,t={}){return l.list("renewals").filter(r=>r.policyId===e&&(t.includeSuperseded||Tt(r)&&zr(r)))},get(e){return l.list("renewals").find(t=>t.id===e)},create(e){const t={...e,id:N("renewal"),createdAt:I()};l.insert("renewals",t),this.spawnRenewalActivity(t),z.documents.flagForRenewal(t.id,t.agentId),Jo(t,t.agentId);const r=l.list("policies").find(n=>n.id===t.policyId);return r&&Qi(r),t},spawnRenewalActivity(e){if(e.status!=="upcoming")return null;const t=l.list("tasks").find(d=>d.renewalId===e.id);if(t)return t;const r=l.list("policies").find(d=>d.id===e.policyId);if(!r)return null;const n=l.list("customers").find(d=>d.id===r.customerId),i=l.list("assets").find(d=>d.id===r.assetId),a=e.agentId??(n==null?void 0:n.assignedAgentId),s=e.renewalDate?new Date(e.renewalDate).toLocaleDateString("en-US"):"soon",o=(i==null?void 0:i.label)??r.policyNumber??"policy",c={id:N("task"),tenantId:e.tenantId,title:`Renewal due — ${o}`,description:`${(n==null?void 0:n.name)??"This client"}'s ${o} renews ${s}. Review coverage, refresh appraisals if needed, and confirm the renewal with the carrier.`,customerId:r.customerId,policyId:r.id,assetId:r.assetId,renewalId:e.id,assignedToId:a,topic:"renewal_approaching",source:"ai_notification",status:"open",severity:"warning",severityReason:"Policy renewal is approaching.",createdById:"ai",createdAt:I()};return l.insert("tasks",c),pe({tenantId:e.tenantId,actorId:"ai",action:"task.created_from_renewal",taskId:c.id,metadata:{renewalId:e.id}}),c},ensureActivities(e){let t=0;return this.listByTenant(e).filter(r=>r.status==="upcoming").forEach(r=>{const n=l.list("tasks").length;this.spawnRenewalActivity(r),l.list("tasks").length>n&&(t+=1),z.documents.flagForRenewal(r.id)}),z.carrierRunnerJobs.sweepRenewals(e),t},update(e,t){const r=l.update("renewals",e,t);if(r&&("status"in t||"nonRenewalReason"in t||"nonRenewalEffectiveDate"in t||"replacementStrategy"in t)){Jo(r,r.agentId);const n=l.list("policies").find(i=>i.id===r.policyId);n&&Qi(n)}return r},markRenewed(e){return this.update(e,{status:"renewed"})},markNotDue(e){return this.update(e,{status:"not_due"})},sendReminder({renewalId:e,channel:t,sentById:r}){const n=l.list("renewals").find(c=>c.id===e);if(!n)return{reminderSent:!1,reason:"renewal_not_found"};const i=l.list("policies").find(c=>c.id===n.policyId);if(!i)return{reminderSent:!1,reason:"policy_not_found"};const a=n.renewalDate?new Date(n.renewalDate).toLocaleDateString("en-US"):"the upcoming date",s=`Renewal reminder — policy ${i.policyNumber??i.id} renews ${a}`,o=`This is a friendly reminder that your policy ${i.policyNumber??i.id} is up for renewal on ${a}. Reply to this message or contact your agent if you have any questions.`;return l.insert("communications",{id:N("comm"),tenantId:i.tenantId,customerId:i.customerId,channel:t,direction:"outbound",subject:s,body:o,createdById:r,createdAt:I()}),l.insert("statusEvents",{id:N("se"),tenantId:i.tenantId,source:"agent",message:`Renewal reminder email sent for policy ${i.policyNumber??i.id} (renews ${a}).`,visibility:"customer_visible",customerId:i.customerId,policyId:i.id,renewalId:n.id,createdAt:I(),createdById:r}),{reminderSent:!0}},sendNonRenewalSummary({renewalId:e,channel:t,sentById:r}){const n=l.list("renewals").find(p=>p.id===e);if(!n)return{reminderSent:!1,reason:"renewal_not_found"};const i=l.list("policies").find(p=>p.id===n.policyId);if(!i)return{reminderSent:!1,reason:"policy_not_found"};const a=l.list("carriers").find(p=>p.id===i.carrierId),s=n.nonRenewalEffectiveDate||n.renewalDate?new Date(n.nonRenewalEffectiveDate??n.renewalDate).toLocaleDateString("en-US"):"the non-renewal date",o=n.nonRenewalReason??"The carrier issued a non-renewal notice.",c=n.replacementStrategy?`
185
186Replacement plan: ${n.replacementStrategy}`:"",d=`Non-renewal notice summary — policy ${i.policyNumber??i.id}`,m=`We are documenting the carrier non-renewal for policy ${i.policyNumber??i.id} with ${(a==null?void 0:a.name)??"the current carrier"}. The non-renewal is effective ${s}.
187
188Reason: ${o}${c}
189
190Your agency team will help review replacement options before the effective date.`;return l.insert("communications",{id:N("comm"),tenantId:i.tenantId,customerId:i.customerId,channel:t,direction:"outbound",subject:d,body:m,createdById:r,createdAt:I()}),l.insert("statusEvents",{id:N("se"),tenantId:i.tenantId,source:"agent",message:`Non-renewal summary email sent for policy ${i.policyNumber??i.id} (effective ${s}).`,visibility:"customer_visible",customerId:i.customerId,policyId:i.id,renewalId:n.id,createdAt:I(),createdById:r}),{reminderSent:!0}}},claims:{listByCustomer(e,t={}){return l.list("claims").filter(r=>r.customerId===e&&(t.includeSuperseded||Tt(r))&&(t.includeSuperseded||zr(r)))},listByTenant(e,t={}){return oe(l.list("claims"),e).filter(r=>(t.includeSuperseded||Tt(r))&&(t.includeSuperseded||zr(r)))},get(e){return l.list("claims").find(t=>
190t.id===e)},create(e){const t={...e,id:N("claim"),openedAt:I()};return l.insert("claims",t),Os(t),Fs(t),ji(t,t.status==="closed"?"closed":"opened",void 0,"system"),t},update(e,t){const r=l.list("claims").find(i=>i.id===e),n=l.update("claims",e,t);return n&&t.status&&Os(n),n&&("status"in t||"closedAt"in t)&&Fs(n),n&&r&&(n.status==="closed"&&(r.status!=="closed"||!r.closedAt&&!!n.closedAt)?ji(n,"closed",void 0,t.closedAt?"system":void 0):(r.status!==n.status||r.externalClaimNumber!==n.externalClaimNumber||r.lossDescription!==n.lossDescription||r.lossAmountUsd!==n.lossAmountUsd)&&ji(n,"updated","claim details refreshed","system")),n},close(e,t){const r=l.list("claims").find(i=>i.id===e);if((r==null?void 0:r.status)==="closed")return r;const n=l.update("claims",e,{status:"closed",closedAt:I()});return n&&Os(n),n&&Fs(n),n&&ji(n,"closed",void 0,t??"system"),n},checkForCarrierClaims(e){const t=l.list("customers").find(r=>r.id===e.customerId);return!t||t.tenantId!==e.tenantId?{checked:0,created:0,updated:0,jobIds:[],summary:"Client record could not be found."}:{checked:0,created:0,updated:0,jobIds:[],summary:"Carrier claim retrieval must run through the paired Quotex Connect browser. No claim data was changed."}},draftClaimFollowUp(e){const t=l.list("customers").find(h=>h.id===e.customerId);if(!t)return null;const r=l.list("agencies").find(h=>h.id===e.tenantId),n=(r==null?void 0:r.name)??"your agency",i=e.assetId?l.list("assets").find(h=>h.id===e.assetId):void 0,a=e.policyId?l.list("policies").find(h=>h.id===e.policyId):void 0,s=a!=null&&a.policyNumber?`Policy #${a.policyNumber}`:a?`Policy #${a.id.slice(-6).toUpperCase()}`:"policy pending",o=(i==null?void 0:i.label)??"an asset",c=t.assignedAgentId?l.list("users").find(h=>h.id===t.assignedAgentId):void 0,d=(c==null?void 0:c.name)??`your agent at ${n}`,m=c==null?void 0:c.email,p=N("se");l.insert("statusEvents",{id:p,tenantId:e.tenantId,source:"ai",message:`${t.name} opened ${e.carrierName}'s claim intake for ${o} (${s}). AI staged a follow-up email — review in AI marketing.`,visibility:"internal",customerId:t.id,assetId:e.assetId,policyId:e.policyId,claimId:e.claimId,createdAt:I()});const u=`Following up on your claim with ${e.carrierName}`,g=[`Hi ${t.name.split(/\s+/)[0]},`,"",`I saw you started a claim with ${e.carrierName} on ${o} (${s}). I'm here to help you through it.`,"","What to expect next:",`  • ${e.carrierName} will reach out with a claim number — please forward it so we can track on our side.`,"  • Document the loss with photos and any relevant receipts. Upload anything to your client portal under Documents.","  • If the carrier asks for an inspection, we can coordinate.","",`Reply to this email or call ${n} anytime. I'll keep an eye on this through close.`,"",`${d}${m?`
191${m}`:""}`,n].join(`
192`),y=N("msg");return l.insert("messages",{id:y,tenantId:e.tenantId,campaignId:"campaign_claim_followups",customerId:t.id,channel:"email",subject:u,content:g,deliveryStatus:"draft",createdAt:I()}),{statusEventId:p,draftEmailId:y}},submitInquiry(e){const t=e.assetId?l.list("assets").find(c=>c.id===e.assetId):void 0,r=(t==null?void 0:t.label)??"an unspecified asset",n=`Claim inquiry — ${r}`,i=N("comm"),a=I();l.insert("communications",{id:i,tenantId:e.tenantId,customerId:e.customerId,channel:"email",direction:"inbound",subject:n,body:e.body,createdAt:a});const s=N("se");l.insert("statusEvents",{id:s,tenantId:e.tenantId,source:"customer",message:`Claim inquiry submitted for ${r}. ${e.body}`,visibility:"customer_visible",customerId:e.customerId,assetId:e.assetId,createdAt:a});const o=zC({tenantId:e.tenantId,customerId:e.customerId,assetId:e.assetId,body:e.body,commId:i,createdAt:a});return l.update("communications",i,{aiActivityScannedAt:a,aiActivityTaskId:o.id}),{commId:i,statusEventId:s}}},notes:{listByCustomer(e){return l.list("notes").filter(t=>t.customerId===e)},listByProspect(e){return l.list("notes").filter(t=>t.prospectId===e)},create(e){const t={...e,id:N("note"),createdAt:I()};if(l.insert("notes",t),e.customerId||e.prospectId){const r=l.list("users").find(n=>n.id===e.authorId);l.insert("statusEvents",{id:N("se"),tenantId:e.tenantId,source:"agent",message:`Note by ${(r==null?void 0:r.name)??"staff"}: ${t.body}`,visibility:e.visibility,customerId:e.customerId,prospectId:e.prospectId,attachments:t.attachments,importBatchId:e.importBatchId,createdAt:I(),createdById:e.authorId})}return t}},communications:{listByCustomer(e){return l.list("communications").filter(t=>t.customerId===e&&Hr(t)).sort((t,r)=>t.createdAt<r.createdAt?1:-1)},listByTenant(e){return oe(l.list("communications"),e).filter(Hr).sort((t,r)=>t.createdAt<r.createdAt?1:-1)},listPendingForTenant(e){return l.list("communications").filter(t=>t.tenantId===e&&Hr(t)&&t.direction==="inbound"&&!!t.customerId&&!t.resolvedAt).sort((t,r)=>t.createdAt<r.createdAt?1:-1)},listPendingForCustomer(e){return l.list("communications").filter(t=>t.customerId===e&&Hr(t)&&t.direction==="inbound"&&!t.resolvedAt).sort((t,r)=>t.createdAt<r.createdAt?1:-1)},markResolved(e,t){return l.update("communications",e,{resolvedAt:I(),resolvedById:t})},remove(e){return l.remove("communications",e)},markContactRead(e,t){const r=Pe(e.externalRecipientEmail),n=l.list("communications").filter(i=>i.direction==="inbound"&&!i.resolvedAt&&(e.customerId&&i.customerId===e.customerId||e.prospectId&&i.prospectId===e.prospectId||e.carrierContactId&&i.carrierContactId===e.carrierContactId||r&&Pe(i.externalRecipientEmail)===r));
192return n.forEach(i=>l.update("communications",i.id,{resolvedAt:I(),resolvedById:t})),n.length},deleteForContact(e){const t=Pe(e.externalRecipientEmail),r=l.list("communications").filter(n=>e.customerId&&n.customerId===e.customerId||e.prospectId&&n.prospectId===e.prospectId||e.carrierContactId&&n.carrierContactId===e.carrierContactId||t&&Pe(n.externalRecipientEmail)===t);return r.forEach(n=>l.remove("communications",n.id)),r.length},async automatePersonalQuoteReplies(e,t,r){const n=l.list("communications").filter(a=>a.tenantId===e&&a.direction==="inbound"&&a.createdById!=="ai"&&(!r||a.id===r)&&Hr(a)&&NS(a)).sort((a,s)=>a.createdAt<s.createdAt?1:-1).slice(0,25),i=[];for(const a of n){const s=of(a),o=a.customerId?l.list("customers").find(A=>A.id===a.customerId&&A.tenantId===e):void 0,c=a.prospectId?l.list("prospects").find(A=>A.id===a.prospectId&&A.tenantId===e):void 0,d=o??c,m=gd({subject:a.subject,body:a.body,priorQuoteContext:Zd(a),contactLine:d==null?void 0:d.lineOfBusiness});if(!m){l.update("communications",a.id,{aiQuoteAutomationStatus:"skipped",aiQuoteAutomationProcessedAt:I(),aiQuoteAutomationReason:"No quote identifier reply was detected.",aiQuoteAutomationInputSignature:s}),i.push({communicationId:a.id,status:"skipped"});continue}const p=I(),u=(a.aiQuoteAutomationAttempts??0)+1,f=l.list("tasks").find(A=>A.tenantId===e&&(A.id===a.aiActivityTaskId||A.messageId===a.id));let g=af(a)??f;g&&sf(a,g);const y=ca(d),h=t?l.list("users").find(A=>A.id===t&&A.tenantId===e&&A.active):void 0,w=l.list("users").find(A=>A.tenantId===e&&A.active&&ps(A.role)),T=y??(h==null?void 0:h.id)??(w==null?void 0:w.id),b=`${(d==null?void 0:d.name)??"Client"}: personal quote request`;g?g=l.update("tasks",g.id,{title:b,description:"Quotex received the requested asset identifier and is preparing the personal-lines quote flow.",assignedToId:g.assignedToId??T,awaitingManagerAssignment:!(g.assignedToId??T)||void 0})??g:(g={id:N("task"),tenantId:e,title:b,description:"Quotex received the requested asset identifier and is preparing the personal-lines quote flow.",customerId:a.customerId,prospectId:a.prospectId,messageId:a.id,source:"ai_notification",topic:"coverage_change",severity:"info",severityReason:"A client supplied the identifier needed to begin a personal-lines quote.",status:"open",assignedToId:T,awaitingManagerAssignment:!T||void 0,createdById:"ai",createdAt:p},l.insert("tasks",g)),l.update("communications",a.id,{aiQuoteAutomationStatus:"pending",aiQuoteAutomationProcessedAt:p,aiQuoteAutomationReason:"Personal-lines quote automation is in progress.",aiQuoteAutomationAttempts:u,aiQuoteAutomationInputSignature:s,aiActivityScannedAt:p,aiTriageDisposition:"activity",aiTriageTopic:"coverage_change",aiTriageReason:"The client supplied an asset identifier needed for a personal-lines quote.",aiTriageConfidence:"high",aiTriageEvidence:[`quote_identifier:${m.identifierKind}`],aiTriageRequiresHumanReview:!1,aiTriageVersion:bn,aiActivityTaskId:g.id}),qS(a);const _=(A,v,S,C)=>{const k=I();l.update("communications",a.id,{aiQuoteAutomationStatus:A,aiQuoteAutomationProcessedAt:k,aiQuoteAutomationReason:v,aiQuoteAutomationSessionId:S,aiQuoteAutomationAssetId:C,aiQuoteAutomationInputSignature:s});const O={description:v,quoteSessionId:S,assetId:C,assignedToId:(g==null?void 0:g.assignedToId)??T,awaitingManagerAssignment:!((g==null?void 0:g.assignedToId)??T)||void 0};if(g&&l.update("tasks",g.id,O),g&&S){const $=z.quoting.get(S);$&&Ue($,{taskIds:[g.id],actorId:"ai"})}const x={communicationId:a.id,status:A,sessionId:S,assetId:C};return i.push(x),x};if(m.line==="commercial"){_("manual","Commercial-lines automation is paused. Staff must review this request before starting its quote flow.");continue}if(m.line!=="personal"){_("manual","Quotex could not safely determine whether this request is personal or commercial, so staff review is required.");continue}if(!o){_("manual","This automatic personal-lines flow is available for client records. Staff must review this prospect request.");continue}if(!T){_("failed","The quote request is saved, but it needs an active staff owner before Quotex can start the flow.");continue}try{const A=OS(m),v=MS(e,m);let S=z.assets.listByCustomer(o.id).find(O=>LS(O,m));S||(S=z.assets.create({tenantId:e,customerId:o.id,type:m.assetType,label:ta(m.assetType,A),estimatedValue:0,details:A,status:"pending"}),m.identifierKind==="vin"&&z.assets.upgradeVehicleLabelFromVin(S.id,S.label));const C=await z.quoting.startSession({tenantId:e,customerId:o.id,assetId:S.id,assets:[{assetId:S.id,label:S.label,assetType:S.type,categoryId:v==null?void 0:v.id,categoryLabel:v==null?void 0:v.label,address:m.identifierKind==="address"?m.identifier:o.mailingAddress,estimatedValue:S.estimatedValue,assetDetails:A}],createdById:T,assetType:S.type,contactName:o.name,address:m.identifierKind==="address"?m.identifier:o.mailingAddress,estimatedValue:S.estimatedValue,assetDetails:A,categoryId:v==null?void 0:v.id,categoryLabel:v==null?void 0:v.label,categoryIds:v?[v.id]:void 0,categoryLabels:v?[v.label]:void 0,lineOfBusiness:"personal",selectedCarrierIds:[],deferPersonalAiMappingUntilCarrierQuestions:!0,activityTaskIds:[g.id],activityActorId:"ai",forceNew:!0});Ue(C,{taskIds:[g.id],actorId:"ai"}),$S({inbound:a,customer:o,asset:S,session:C,assignedToId:g.assignedToId??T});
192const k=z.quoting.get(C.id)??C;_("completed","Quotex started the personal-lines quote flow. Carrier selection is ready so AI mapping can use each selected carrier's verified questions.",k.id,S.id)}catch{_("failed","The personal-lines quote request is saved. Quotex will retry it automatically.")}}return i},async processInboundAutomation(e,t){const r=zi.get(e);if(r)return r;const n=(async()=>{const i=await z.communications.automatePersonalQuoteReplies(e,t),a=z.communications.sweepInboundForActivities(e,t);return{quoteAutomation:i,triage:a}})();zi.set(e,n);try{return await n}finally{zi.get(e)===n&&zi.delete(e)}},sweepInboundForActivities(e,t){var a;BC(e,t);const r=new Map;l.list("communications").filter(s=>s.tenantId===e&&s.direction==="inbound"&&s.createdById!=="ai").forEach(s=>{const o=ft(s),c=r.get(o)??[];c.push(s),r.set(o,c)});const n=[];r.forEach(s=>{const o=s.find(d=>!ES(d));if(o){Vi(o,Vd(o));return}const c=Qp(s);c&&n.push(c)});const i=[];for(const s of n){if(!Hr(s)){Vi(s,{aiActivityScannedAt:I(),aiTriageDisposition:"ignore",aiTriageTopic:"other",aiTriageReason:"Mailbox sender is not a tenant contact and was excluded from Quotex.",aiTriageConfidence:"high",aiTriageEvidence:["tenant_contact_match:none"],aiTriageRequiresHumanReview:!1,aiTriageVersion:bn});continue}const o=s.customerId?l.list("customers").find(h=>h.id===s.customerId):void 0,c=s.prospectId?l.list("prospects").find(h=>h.id===s.prospectId):void 0,d=o??c,m=gd({subject:s.subject,body:s.body,priorQuoteContext:Zd(s),contactLine:d==null?void 0:d.lineOfBusiness});if((m==null?void 0:m.line)==="personal")continue;const p=s.carrierContactId?l.list("carrierContacts").find(h=>h.id===s.carrierContactId):void 0,u=o?"client":c?"prospect":"carrier",f=Om({body:s.body,subject:s.subject,channel:typeof s.channel=="string"?s.channel:void 0,contactName:(o==null?void 0:o.name)??(c==null?void 0:c.name)??(p==null?void 0:p.name),contactKind:u}),g={aiActivityScannedAt:I(),aiTriageDisposition:f.disposition,aiTriageTopic:f.topic,aiTriageReason:f.reason,aiTriageConfidence:f.confidence,aiTriageEvidence:f.evidence,aiTriageRequiresHumanReview:f.requiresHumanReview,aiTriageVersion:f.version,aiServiceIntent:f.serviceIntent,aiDraftMissingFields:f.serviceQuestions};Vi(s,g);const y=ca(o??c);if(f.serviceIntent==="vehicle_quote_intake"){const h=f.serviceQuestions??[];if(!!d&&!!d.email&&!!y&&h.length>0){const T=fS({inbound:s,contact:d,assignedToId:y,questions:h}),b=h.map(v=>v==="vin"?"the VIN":"personal or commercial use").join(" and "),_=sn({tenantId:e,eventKey:$s(s,"vehicle-quote-draft"),kind:"inbound_notice",title:`Draft ready: vehicle quote details - ${d.name}`,summary:`Quotex prepared an unsent reply asking for ${b}. Review it before sending.`,customerId:s.customerId,prospectId:s.prospectId,messageId:T.id,communicationId:s.id,topic:"coverage_change",severity:"info",severityReason:"A vehicle quote request was missing required intake details, so Quotex prepared an unsent reply for staff review.",aiSummary:f.reason,originalMessageContent:s.body,originalMessageId:s.id,aiReplyBody:T.body,aiReplySubject:T.subject,assignedToId:y},v=>v.communicationId===s.id).notification,A=Wd({inbound:s,assignedToId:y,title:`${d.name}: vehicle quote request`,description:`${f.reason} Quotex prepared an unsent reply asking for ${b}. Keep this activity open until the requested quote intake is completed.`,topic:"coverage_change",severityReason:"The draft requests missing intake details but does not complete the client's quote request.",draft:T,actorId:t});g.aiTriageDisposition="activity",g.aiReplyDraftId=T.id,g.aiActivityNotificationId=_.id,g.aiActivityTaskId=A.id,i.push({communicationId:s.id,task:A,notification:_})}else{const T=d?d.email?y?"No missing quote-intake questions were identified.":"The contact does not have an active assigned staff owner.":"The contact does not have an email address on file.":"The sender is not linked to a client or prospect.",b=la({inbound:s,title:`${(d==null?void 0:d.name)??(p==null?void 0:p.name)??"Contact"}: vehicle quote request needs review`,description:`${f.reason} ${T}`,topic:"coverage_change",severity:"warning",severityReason:"Quotex could not safely prepare the quote-intake draft because required contact or ownership information was unavailable.",assignedToId:y,awaitingManagerAssignment:!y||void 0,auditAction:"task.created_from_inbound_quote_request",auditMetadata:{missingQuestions:h}});g.aiTriageDisposition="activity",g.aiActivityTaskId=b.id,i.push({communicationId:s.id,task:b})}}else if(f.serviceIntent){const h=o?dS({tenantId:e,customerId:o.id,intent:f.serviceIntent}):void 0;if(!!o&&!!o.email&&!!y&&!!h){const T=mS({inbound:s,customer:o,assignedToId:y,intent:f.serviceIntent,document:h}
192),b=sn({tenantId:e,eventKey:$s(s,`service-draft:${f.serviceIntent}`),kind:"inbound_notice",title:`Draft ready: ${cn(f.serviceIntent)} - ${o.name}`,summary:`Quotex prepared a reply and attached ${h.fileName}. Review it before sending.`,customerId:o.id,policyId:h.policyId,documentId:h.id,messageId:T.id,communicationId:s.id,topic:"document_upload",severity:"info",severityReason:"A verified customer document was attached to an unsent reply draft for staff review.",aiSummary:f.reason,originalMessageContent:s.body,originalMessageId:s.id,aiReplyBody:T.body,aiReplySubject:T.subject,assignedToId:y},A=>A.communicationId===s.id).notification,_=Wd({inbound:s,assignedToId:y,title:`${o.name}: ${cn(f.serviceIntent)} request`,description:`${f.reason} Quotex prepared an unsent reply with ${h.fileName} attached. Keep this activity open until the client's request is completed.`,topic:"document_upload",severityReason:"Preparing a draft does not confirm that the requested client service has been completed.",draft:T,documentId:h.id,actorId:t});g.aiTriageDisposition="activity",g.aiReplyDraftId=T.id,g.aiActivityNotificationId=b.id,g.aiActivityTaskId=_.id,i.push({communicationId:s.id,task:_,notification:b})}else{const T=o?o.email?y?`No approved ${cn(f.serviceIntent)} was found for this client.`:"The client does not have an active assigned staff owner.":"The client does not have an email address on file.":"The sender is not linked to a client.",b=la({inbound:s,title:`${(o==null?void 0:o.name)??(c==null?void 0:c.name)??(p==null?void 0:p.name)??"Contact"}: ${cn(f.serviceIntent)} request needs review`,description:`${f.reason} ${T}`,topic:"document_upload",severity:"warning",severityReason:"Quotex did not create a draft because a required verified record or owner was unavailable.",assignedToId:y,awaitingManagerAssignment:!y||void 0,auditAction:"task.created_from_inbound_service_request",auditMetadata:{serviceIntent:f.serviceIntent,documentFound:!!h}});g.aiTriageDisposition="activity",g.aiActivityTaskId=b.id,i.push({communicationId:s.id,task:b})}}else if(f.disposition==="activity"){const h=!y,w=la({inbound:s,title:f.title,description:f.reason,topic:f.topic,severity:f.severity,severityReason:"Auto-created by AI from an inbound message.",assignedToId:y,awaitingManagerAssignment:h||void 0,auditAction:"task.created_from_inbound",auditMetadata:{topic:f.topic}});g.aiActivityTaskId=w.id,i.push({communicationId:s.id,task:w})}else if(f.disposition==="notification"){const h=(a=l.list("users").find(b=>b.tenantId===e&&ps(b.role)&&b.active))==null?void 0:a.id,w=s.body.trim().replace(/\s+/g," "),T=sn({tenantId:e,eventKey:$s(s,"informational"),kind:"inbound_notice",title:`Notification: ${f.title}`,summary:w.length>120?`${w.slice(0,117)}...`:w||`Inbound ${Gd(f.topic)} update received.`,customerId:s.customerId,prospectId:s.prospectId,communicationId:s.id,topic:f.topic,severity:f.severity,severityReason:"Informational inbound message; no owned activity was opened.",originalMessageContent:s.body,originalMessageId:s.id,assignedToId:y??h},b=>b.communicationId===s.id).notification;g.aiActivityNotificationId=T.id,i.push({communicationId:s.id,notification:T})}Vi(s,g)}return i},create(e){const{emailDeliveryMode:t="draft",...r}=e,n=Bd(e.channel,e.direction,e.body,e.createdById,e.mailboxOrigin),i=e.channel==="email"&&e.direction==="outbound"?nn(e.createdById):{},a={...r,body:n,mailboxOrigin:e.mailboxOrigin??(e.channel==="email"&&e.direction==="outbound"?"app":void 0),mailboxAccount:e.mailboxAccount??i.account,mailboxProvider:e.mailboxProvider??i.provider,mailboxConnectionId:e.mailboxConnectionId??i.connectionId,id:N("comm"),createdAt:I()},s=t==="manual"?uC(a):null;s?(a.outboxJobId=s.id,a.deliveryStatus=s.status==="failed"?"failed":"queued"):a.channel==="email"&&a.mailboxOrigin==="provider_sync"?a.deliveryStatus=a.direction==="inbound"?"received":"synced":a.channel==="email"&&a.direction==="outbound"&&t==="portal_only"?a.deliveryStatus="synced":a.channel==="email"&&a.direction==="outbound"&&(a.deliveryStatus="draft"),l.insert("communications",a),s&&(l.insert("mailboxOutbox",s),pC(a,s));const o=a.direction==="inbound"?Zs(a):a;return Ms(o),o}},mailbox:{mirrorExternalEmail(e){const t=nn(e.mailboxUserId),r=e.mailboxAccount??t.account;if(!r)return null;const n=Pe(r),i=e.provider??t.provider??rr(r),a=Pe(e.from),s=[...e.to,...e.cc??[]].map(Pe).filter(
192Boolean),o=e.direction??(a===n?"outbound":"inbound"),c=o==="outbound"?s.find(w=>w!==n):a;if(!c)return null;const d=jp(e.tenantId,c);if(!d)return null;const m=d,p=l.list("communications").find(w=>w.tenantId===e.tenantId&&(w.externalMessageId===e.externalMessageId||!!e.messageIdHeader&&w.messageIdHeader===e.messageIdHeader)&&Pe(w.mailboxAccount)===n);if(p){const w=l.update("communications",p.id,{subject:e.subject??p.subject,body:e.body,bodyHtml:e.bodyHtml??p.bodyHtml,rawMimeRef:e.rawMimeRef??p.rawMimeRef,rfc822MessageId:e.rfc822MessageId??e.messageIdHeader??p.rfc822MessageId,messageIdHeader:e.messageIdHeader??p.messageIdHeader,inReplyToHeader:e.inReplyToHeader??p.inReplyToHeader,references:e.references??p.references,to:e.to,cc:e.cc,bcc:e.bcc,attachments:e.attachments??p.attachments,snippet:e.snippet??p.snippet,isRead:e.isRead??p.isRead,mailboxLabels:e.mailboxLabels??p.mailboxLabels,deliveryStatus:o==="inbound"?"received":"synced",externalThreadId:e.externalThreadId??p.externalThreadId,externalUrl:e.externalUrl??p.externalUrl,carrierSubmissionId:e.carrierSubmissionId??p.carrierSubmissionId})??p,T=o==="inbound"?Zs(w):w;return Ms(T),T}const u=DC(e.tenantId,{externalThreadId:e.externalThreadId,inReplyToHeader:e.inReplyToHeader,references:e.references}),f=(e.subject??"message").trim().toLowerCase().replace(/^re:\s*/i,"").replace(/\s+/g,"-").slice(0,64),g={id:N("comm"),tenantId:e.tenantId,...m,channel:"email",direction:o,subject:e.subject,threadId:u??(e.externalThreadId?`provider:${i}:${e.externalThreadId}`:`provider:${i}:${c}:${f}`),body:e.body,bodyHtml:e.bodyHtml,rawMimeRef:e.rawMimeRef,rfc822MessageId:e.rfc822MessageId??e.messageIdHeader,messageIdHeader:e.messageIdHeader,inReplyToHeader:e.inReplyToHeader,references:e.references,to:e.to,cc:e.cc,bcc:e.bcc,attachments:e.attachments,snippet:e.snippet,isRead:e.isRead,mailboxLabels:e.mailboxLabels,createdById:o==="outbound"?e.mailboxUserId:void 0,mailboxOrigin:"provider_sync",mailboxAccount:r,mailboxProvider:i,mailboxConnectionId:e.mailboxConnectionId??t.connectionId,deliveryStatus:o==="inbound"?"received":"synced",externalMessageId:e.externalMessageId,externalThreadId:e.externalThreadId,externalUrl:e.externalUrl,carrierSubmissionId:e.carrierSubmissionId,createdAt:e.sentAt??I()};if(o==="inbound"){const w=l.list("communications").find(T=>T.tenantId===g.tenantId&&T.direction==="inbound"&&T.channel==="email"&&ft(T)===ft(g));w&&Object.assign(g,Vd(w))}l.insert("communications",g);const y=e.mailboxConnectionId??t.connectionId;y&&l.update("connectedMailboxes",y,{lastSyncAt:I(),updatedAt:I()}),o==="outbound"&&(Jr(y),mC(g));const h=o==="inbound"?Zs(g):g;return Ms(h),h}},aiNotifications:{listByTenant(e){return oe(l.list("aiNotifications"),e).sort((t,r)=>t.createdAt<r.createdAt?1:-1)},listUnacked(e){return this.listByTenant(e).filter(t=>!t.acknowledgedAt)},acknowledge(e,t){const r=l.list("aiNotifications").find(o=>o.id===e);if(!r||r.acknowledgedAt||r.kind==="goal_request"||r.kind==="timesheet_due"||r.kind==="inbound_notice"||r.kind==="quote_ready")return null;const n=r.messageId??null,i=N("task"),a={id:i,tenantId:r.tenantId,title:r.title,description:r.summary,customerId:r.customerId,prospectId:r.prospectId,assetId:r.assetId,policyId:r.policyId,messageId:r.messageId,source:"ai_notification",sourceNotificationId:r.id,topic:r.topic,severity:r.severity??"warning",severityReason:r.severityReason,status:"open",aiSummary:r.aiSummary,originalMessageContent:r.originalMessageContent,originalMessageId:r.originalMessageId,aiReplyBody:r.aiReplyBody,aiReplySubject:r.aiReplySubject,assignedToId:r.assignedToId,createdById:t,createdAt:I()};l.insert("tasks",a),pe({tenantId:r.tenantId,actorId:t,action:"task.created_from_notification",taskId:i,metadata:{notificationId:r.id,sentMessageId:n}});const s=l.update("aiNotifications",e,{acknowledgedAt:I(),acknowledgedById:t,taskId:i});return s?{notification:s,task:a,sentMessageId:n}:null},dismiss(e,t){const r=l.list("aiNotifications").find(n=>n.id===e);return!r||r.acknowledgedAt?null:l.update("aiNotifications",e,{acknowledgedAt:I(),acknowledgedById:t})},remove(e){return l.remove("aiNotifications",e)},autoPromote(e,t){const r=this.listUnacked(e).filter(i=>i.kind==="policy_edit_reply");let n=0;for(const i of r)this.acknowledge(i.id,t)&&(n+=1);return n}
192,create(e){if(e.eventKey)return sn({...e,eventKey:e.eventKey}).notification;const t={...e,id:N("ain"),createdAt:I()};return l.insert("aiNotifications",t),t}},routing:{hasAssignedOwner(e,t){const r=e==="client"?l.list("customers").find(n=>n.id===t):l.list("prospects").find(n=>n.id===t);return!!ca(r)},isDismissed(e,t){const r=e==="client"?l.list("customers").find(n=>n.id===t):l.list("prospects").find(n=>n.id===t);return!!(r!=null&&r.routingDismissedAt)},dismiss(e,t,r){const n={routingDismissedAt:I(),routingDismissedById:r};return e==="client"?l.update("customers",t,n):l.update("prospects",t,n)},remove(e,t,r){l.list("tasks").filter(i=>(e==="client"?i.customerId===t:i.prospectId===t)&&(!!i.routeRequestKind||i.awaitingManagerAssignment)).forEach(i=>l.remove("tasks",i.id));const n={routingDismissedAt:I(),routingDismissedById:r};return e==="client"?l.update("customers",t,n):l.update("prospects",t,n)},restore(e,t){const r={routingDismissedAt:void 0,routingDismissedById:void 0};return e==="client"?l.update("customers",t,r):l.update("prospects",t,r)},reconcileAccountWorkOwnership(e){let t=0;return l.list("tasks").filter(r=>r.tenantId===e&&!r.completedAt&&r.status!=="resolved"&&!r.routeRequestKind&&(!!r.customerId||!!r.prospectId)).forEach(r=>{const n=gn({tenantId:e,customerId:r.customerId,prospectId:r.prospectId}),[i,...a]=n;!i||!(!r.assignedToId||r.awaitingManagerAssignment||r.source==="ai_notification")||r.assignedToId===i&&!r.awaitingManagerAssignment||(l.update("tasks",r.id,{assignedToId:i,additionalAssignedToIds:a.length>0?a:void 0,awaitingManagerAssignment:!1}),t+=1)}),l.list("aiNotifications").filter(r=>r.tenantId===e&&!r.acknowledgedAt&&(!!r.customerId||!!r.prospectId)).forEach(r=>{const n=rC({tenantId:e,customerId:r.customerId,prospectId:r.prospectId});!n||r.assignedToId===n||(l.update("aiNotifications",r.id,{assignedToId:n}),t+=1)}),t},findOpenContactRouteRequest(e,t){return l.list("tasks").find(r=>r.completedAt||r.status==="resolved"||!r.awaitingManagerAssignment||r.routeRequestKind!==e?!1:e==="client"?r.customerId===t:r.prospectId===t)},requestContactRoute(e){this.restore(e.kind,e.targetId);const t=this.findOpenContactRouteRequest(e.kind,e.targetId);if(t)return t;const r=Array.from(new Set(e.requestedAgentIds.filter(Boolean)));if(r.length===0)throw new Error("Select who this should be routed to before submitting the request.");const n=e.kind==="client"?l.list("customers").find(p=>p.id===e.targetId):l.list("prospects").find(p=>p.id===e.targetId);if(!n||n.tenantId!==e.tenantId)throw new Error(`${e.kind==="client"?"Client":"Prospect"} not found.`);const i=l.list("users").find(p=>p.id===e.actorId),a=r.map(p=>l.list("users").find(u=>u.id===p&&u.tenantId===e.tenantId)).filter(p=>!!p&&kr(p.role));if(a.length===0)throw new Error("Select a valid agency member before submitting the route request.");const s=e.mode==="route"?"Route":"Reroute",o=e.kind==="client"?"client":"prospect",c=a.map(p=>p.name).join(", "),d=I(),m={id:N("task"),tenantId:e.tenantId,title:`${s} ${o} requested: ${n.name}`,description:`${(i==null?void 0:i.name)??"A staff member"} requested that a manager ${e.mode} ${n.name} to ${c}. Review and confirm the owner from the Routing card to complete the request.`,customerId:e.kind==="client"?n.id:void 0,prospectId:e.kind==="prospect"?n.id:void 0,source:"manual",status:"open",severity:"warning",topic:"other",awaitingManagerAssignment:!0,routeRequestKind:e.kind,routeRequestMode:e.mode,routeRequestToAgentIds:a.map(p=>p.id),routeRequestedAt:d,routeRequestedById:e.actorId,createdById:e.actorId,createdAt:d};return l.insert("tasks",m),pe({tenantId:e.tenantId,actorId:e.actorId,action:"contact.route_requested",taskId:m.id,metadata:{kind:e.kind,targetId:e.targetId,mode:e.mode,requestedAgentIds:a.map(p=>p.id)}}),m},completeContactRouteRequest(e,t,r,n){const i=l.list("tasks").find(d=>d.id===e),a=Array.from(new Set(t.filter(Boolean)));if(!i||a.length===0||!i.routeRequestKind)return null;if(i.routeRequestKind==="client"){if(!i.customerId)return null;z.customers.assignAgents(i.customerId,a,r,n)}else{if(!i.prospectId)return null;z.prospects.assignAgents(i.prospectId,a,r,n)}const[s,...o]=a,c=l.update("tasks",e,{assignedToId:s,additionalAssignedToIds:o.length>0?o:void 0,awaitingManagerAssignment:!1,status:"resolved",completedAt:I(),completedById:r});return pe({tenantId:i.tenantId,actorId:r,action:"contact.route_request_completed",taskId:e,metadata:{kind:i.routeRequestKind,mode:i.routeRequestMode,toAgentIds:a}}),c}},tasks:{isResolved(e){return!!e.completedAt||e.status==="resolved"},get(e){return l.list("tasks").find(t=>
192t.id===e)},listByTenant(e){return oe(l.list("tasks"),e).filter(t=>!jC(t)).sort((t,r)=>{const n=t.priorityRank??0,i=r.priorityRank??0;if(n!==i)return i-n;const a=t.queuePosition,s=r.queuePosition;if(a!=null||s!=null){const o=a??Number.MAX_SAFE_INTEGER,c=s??Number.MAX_SAFE_INTEGER;if(o!==c)return o-c}return t.createdAt<r.createdAt?1:-1})},listOpen(e){const t=Date.now();return this.listByTenant(e).filter(r=>!(this.isResolved(r)||r.snoozedUntil&&new Date(r.snoozedUntil).getTime()>t))},listSnoozed(e){const t=Date.now();return this.listByTenant(e).filter(r=>!this.isResolved(r)&&r.snoozedUntil&&new Date(r.snoozedUntil).getTime()>t)},listCompleted(e){return this.listByTenant(e).filter(t=>this.isResolved(t))},statusOf(e){return this.isResolved(e)?"resolved":e.snoozedUntil&&new Date(e.snoozedUntil).getTime()>Date.now()?"snoozed":e.status==="in_progress"?"in_progress":"open"},hasOutboundTouchpoint(e){if(this.history(e.id).some(i=>i.action==="task.replied"))return!0;const r=new Date(e.createdAt).getTime();return l.list("communications").filter(i=>i.direction!=="outbound"||i.createdById==="ai"?!1:!!(e.customerId&&i.customerId===e.customerId||e.prospectId&&i.prospectId===e.prospectId)).some(i=>new Date(i.createdAt).getTime()>=r)},hasSentQuestionnaire(e){return this.history(e.id).some(t=>t.action==="task.questionnaire_sent")},pendingEsignDocs(e){return e.customerId?l.list("documents").filter(t=>t.customerId===e.customerId&&!!t.customerEsignRequired&&!t.customerEsignSentAt&&!t.customerEsignSignedAt):[]},hasSentEsignDocs(e){return e.customerId?this.pendingEsignDocs(e).length===0||this.history(e.id).some(t=>t.action==="task.esign_docs_sent"):!0},resolutionCheck(e){const t=Nm({topic:e.topic,title:e.title,description:e.description});if(t.kind==="none"||!e.customerId)return{required:!1,detected:!0,classification:t,reasoning:""};const r=new Date(e.createdAt).getTime(),n=o=>!!o&&new Date(o).getTime()>=r,i=e.customerId;let a=!1;switch(t.kind){case"asset_added":a=l.list("assets").some(o=>o.customerId===i&&n(o.createdAt));break;case"policy_changed":{const o=l.list("policies").some(d=>d.customerId===i&&n(d.createdAt)),c=l.list("statusEvents").some(d=>d.customerId===i&&!!d.policyId&&n(d.createdAt)&&/edit/i.test(d.message));a=o||c;break}case"document_added":a=l.list("documents").some(o=>o.customerId===i&&n(o.uploadedAt));break;case"claim_filed":a=l.list("claims").some(o=>o.customerId===i&&n(o.openedAt));break}const s=a?`AI detected ${t.evidence}.`:`AI has not yet detected ${t.evidence}. ${t.expectation}`;return{required:!0,detected:a,classification:t,reasoning:s}},checklistFor(e){const t=[];if(t.push({label:"Activity started",detail:"Click 'Start activity' once you begin working it so the team knows it's actively owned. This does not send a customer message.",done:!!e.startedAt||this.statusOf(e)==="in_progress"||!!e.completedAt}),e.customerId){t.push({label:"Questionnaire sent to the customer",detail:"Review the intake questions, then use the send action. This step clears once the manual send is audited.",done:this.hasSentQuestionnaire(e)});const n=l.list("documents").filter(i=>i.customerId===e.customerId&&!!i.customerEsignRequired&&!i.customerEsignSentAt&&!i.customerEsignSignedAt).length;t.push({label:"Documents requiring e-sign sent",detail:n>0?`${n} document${n===1?"":"s"} need the customer's e-signature. Review them, then use the e-sign send action.`:"No documents are waiting on the customer's e-signature.",done:this.hasSentEsignDocs(e)})}const r=this.resolutionCheck(e);if(r.required&&t.push({label:r.classification.label,detail:r.reasoning,done:r.detected}),e.renewalId){const n=l.list("documents"),i=l.list("renewals").find(p=>p.id===e.renewalId),a=i?l.list("policies").find(p=>p.id===i.policyId):void 0,s=(()=>{const p=(a==null?void 0:a.effectiveDate)??(a==null?void 0:a.renewalDate);if(!p)return;const u=new Date(p).getUTCFullYear();if(Number.isFinite(u))return a!=null&&a.effectiveDate?u:u-1})(),o=p=>p.policyTermYear??s??0,c=p=>n.some(u=>u.policyId===p.policyId&&u.id!==p.id&&u.type===p.type&&!!u.publishedAt&&u.status!=="rejected"&&(u.supersedesId===p.id||o(u)>o(p))),d=p=>n.filter(u=>u.policyId===p.policyId&&u.type===p.type).reduce((u,f)=>{const g=o(f);return u==null?g:Math.max(u,g)},null),m=n.filter(p=>
192{if(p.renewalForRenewalId!==e.renewalId||!p.needsRenewalUpdate||c(p))return!1;const u=o(p),f=d(p);return!f||u>=f});m.length>0&&t.push({label:"Renewal documents updated",detail:`${m.length} document${m.length===1?"":"s"} still need to be updated for the new renewal term. Click "Update for Renewal" on each in the policy's Documents card, preview, then Publish.`,done:!1})}return t},sendQuestionnaire(e,t,r={}){const n=l.list("tasks").find(s=>s.id===e);if(!n||!n.customerId)return null;if(r.automated||this.hasSentQuestionnaire(n))return n;const i=n.aiReplySubject??"A few questions to finalize your coverage",a=n.aiReplyBody??`Hi,
193
194To move your coverage forward we need a few details:
195
1961. Confirm the asset(s) you'd like covered
1972. Any prior claims in the last 5 years
1983. Current coverage / carrier (if any)
1994. Anything else we should know about the risk
200
201Reply right to this thread and we'll get carrier quotes back to you the same day.`;return z.communications.create({tenantId:n.tenantId,customerId:n.customerId,channel:"email",direction:"outbound",subject:i,body:a,createdById:t,emailDeliveryMode:"manual"}),pe({tenantId:n.tenantId,actorId:t,action:"task.questionnaire_sent",taskId:e,metadata:{automated:!!r.automated}}),l.list("tasks").find(s=>s.id===e)??null},sendEsignDocuments(e,t,r={}){const n=l.list("tasks").find(s=>s.id===e);if(!n||!n.customerId)return null;if(r.automated)return n;const i=l.list("customers").find(s=>s.id===n.customerId),a=this.pendingEsignDocs(n);if(a.length===0&&this.history(n.id).some(s=>s.action==="task.esign_docs_sent"))return n;if(a.length>0&&i){const s=i.name.split(/\s+/)[0],o=a.map(u=>`  • ${u.fileName}`).join(`
202`),c=a.length===1?"A document is ready for your e-signature":`${a.length} documents are ready for your e-signature`,d=[`Hi ${s},`,"","Please e-sign the following from your client portal (Documents → E-sign):","",o,"","Once signed, the executed copy is filed to your account automatically — no upload needed."].join(`
203`),m=z.communications.create({tenantId:n.tenantId,customerId:n.customerId,channel:"email",direction:"outbound",subject:c,body:d,createdById:t,emailDeliveryMode:"manual"}),p=I();a.forEach(u=>l.update("documents",u.id,{customerEsignSentAt:p,esignCommunicationId:m.id}))}return pe({tenantId:n.tenantId,actorId:t,action:"task.esign_docs_sent",taskId:e,metadata:{automated:!!r.automated,documentCount:a.length}}),l.list("tasks").find(s=>s.id===e)??null},ensureAutopilot(e,t){return l.list("tasks").find(n=>n.id===e)??null},canResolve(e){if(e.overrideGrantedAt)return{allowed:!0,missingSteps:0};const r=this.checklistFor(e).filter(n=>!n.done).length;return{allowed:r===0,missingSteps:r}},requestManagerOverride(e,t,r){const n=l.list("tasks").find(m=>m.id===e);if(!n)return{task:null,notificationId:null};const i=I(),a=l.update("tasks",e,{overrideRequestedAt:i,overrideRequestedById:t,overrideReason:r}),s=l.list("users").find(m=>m.id===t),o=n.customerId?l.list("customers").find(m=>m.id===n.customerId):null,c=N("ain"),d=[`${(s==null?void 0:s.name)??"An agent"} is asking to resolve the activity "${n.title}" before all AI checklist items are complete${o?` for ${o.name}`:""}.`,r?`Reason: ${r}`:null].filter(Boolean).join(" ");return l.insert("aiNotifications",{id:c,tenantId:n.tenantId,kind:"override_request",title:"Agent requested manager override on activity",summary:d,customerId:n.customerId,prospectId:n.prospectId,assetId:n.assetId,policyId:n.policyId,taskId:e,createdAt:i,severity:"urgent",topic:"other",aiSummary:d}),pe({tenantId:n.tenantId,actorId:t,action:"task.override_requested",taskId:e,metadata:{reason:r,notificationId:c}}),{task:a,notificationId:c}},requestReassign(e,t,r,n){const i=l.list("tasks").find(u=>u.id===e);if(!i)return{task:null,notificationId:null};const a=I(),s=l.update("tasks",e,{reassignRequestedAt:a,reassignRequestedById:t,reassignRequestToId:r,reassignReason:n}),o=l.list("users").find(u=>u.id===t),c=l.list("users").find(u=>u.id===r),d=i.customerId?l.list("customers").find(u=>u.id===i.customerId):null,m=N("ain"),p=[`${(o==null?void 0:o.name)??"An agent"} is asking to reassign the activity "${i.title}"${d?` for ${d.name}`:""} to ${(c==null?void 0:c.name)??"another agent"}.`,n?`Reason: ${n}
203`:null].filter(Boolean).join(" ");return l.insert("aiNotifications",{id:m,tenantId:i.tenantId,kind:"reassign_request",title:"Agent requested a reassignment",summary:p,customerId:i.customerId,prospectId:i.prospectId,assetId:i.assetId,policyId:i.policyId,taskId:e,createdAt:a,severity:"warning",topic:"other",aiSummary:p}),pe({tenantId:i.tenantId,actorId:t,action:"task.reassign_requested",taskId:e,metadata:{toAgentId:r,reason:n,notificationId:m}}),{task:s,notificationId:m}},grantManagerOverride(e,t){const r=l.list("tasks").find(i=>i.id===e);if(!r)return null;const n=l.update("tasks",e,{overrideGrantedAt:I(),overrideGrantedById:t});return pe({tenantId:r.tenantId,actorId:t,action:"task.override_granted",taskId:e}),n},canCreateActivityFor(e,t){if(ps(e.role)||e.role==="master_admin")return!0;if(e.role!=="agent"&&e.role!=="csr")return!1;if(t.customerId){const r=l.list("customers").find(n=>n.id===t.customerId);return r?$i(r,e.id):!1}if(t.prospectId){const r=l.list("prospects").find(n=>n.id===t.prospectId);return r?$i(r,e.id):!1}return!0},create(e){if(e.createdById&&(e.customerId||e.prospectId)){const a=l.list("users").find(s=>s.id===e.createdById);if(a&&(a.role==="agent"||a.role==="csr")&&!this.canCreateActivityFor({id:a.id,role:a.role},{customerId:e.customerId,prospectId:e.prospectId}))throw new Error("Agents can only create activities for clients or prospects assigned to them.")}const t=e.assignedToId?[]:gn({tenantId:e.tenantId,customerId:e.customerId,prospectId:e.prospectId}),r=e.assignedToId??t[0],n=!!e.customerId||!!e.prospectId,i={id:N("task"),tenantId:e.tenantId,title:e.title,description:e.description,customerId:e.customerId,prospectId:e.prospectId,policyId:e.policyId,assignedToId:r,additionalAssignedToIds:!e.assignedToId&&t.length>1?t.slice(1):void 0,topic:e.topic,source:"manual",status:"open",severity:e.severity??"info",severityReason:e.severityReason,awaitingManagerAssignment:e.awaitingManagerAssignment??(n&&!r?!0:void 0),renewalId:e.renewalId,createdById:e.createdById,createdAt:I()};return l.insert("tasks",i),pe({tenantId:e.tenantId,actorId:e.createdById,action:"task.created",taskId:i.id}),i},markInProgress(e,t){const r=l.list("tasks").find(s=>s.id===e);if(!r||this.isResolved(r))return null;r.startedAt;const n=r.startedAt??I(),i=r.startedById??t,a=l.update("tasks",e,{status:"in_progress",snoozedUntil:void 0,startedAt:n,startedById:i});return pe({tenantId:r.tenantId,actorId:t,action:"task.in_progress",taskId:e}),l.list("tasks").find(s=>s.id===e)??a},markComplete(e,t,r={}){var c;const n=l.list("tasks").find(d=>d.id===e);if(!n||this.isResolved(n))return null;const i=I(),a=(c=r.resolutionNote)==null?void 0:c.trim();let s;a&&(n.customerId||n.prospectId)&&(s=z.notes.create({tenantId:n.tenantId,authorId:t??"system",customerId:n.customerId,prospectId:n.prospectId,policyId:n.policyId,visibility:"internal",body:`Activity closed out with agent note attached: ${n.title}
204
205${a}`}).id);const o=l.update("tasks",e,{completedAt:i,completedById:t,status:"resolved",snoozedUntil:void 0,resolutionNote:a||void 0,resolutionNoteId:s,resolutionNoteAt:a?i:void 0});return pe({tenantId:n.tenantId,actorId:t,action:"task.resolved",taskId:e,metadata:a?{resolutionNoteId:s,resolutionNote:a}:void 0}),o},reopen(e,t){const r=l.list("tasks").find(i=>i.id===e);if(!r)return null;const n=l.update("tasks",e,{completedAt:void 0,completedById:void 0,status:"open"});return pe({tenantId:r.tenantId,actorId:t,action:"task.reopened",taskId:e}),n},snooze(e,t,r){const n=l.list("tasks").find(s=>s.id===e);if(!n||this.isResolved(n))return null;const i=new Date(Date.now()+t*24*60*60*1e3).toISOString(),a=l.update("tasks",e,{status:"snoozed",snoozedUntil:i});return pe({tenantId:n.tenantId,actorId:r,action:"task.snoozed",taskId:e,metadata:{days:t,until:i}}),a},assign(e,t,r){const n=l.list("tasks").find(c=>c.id===e);if(!n)return null;const i=Array.from(new Set((Array.isArray(t)?t:t?[t]:[]).filter(Boolean))),[a,...s]=i,o=l.update("tasks",e,{assignedToId:a,additionalAssignedToIds:s.length>0?s:void 0,awaitingManagerAssignment:!1,reassignRequestedAt:void 0,reassignRequestedById:void 0,reassignRequestToId:void 0,reassignReason:void 0});return pe({tenantId:n.tenantId,actorId:r,action:"task.reassigned",taskId:e,metadata:{toAgentId:a??null,toAgentIds:i}}),o},logView(e,t){const r=l.list("tasks").find(n=>n.id===e);r&&pe({tenantId:r.tenantId,actorId:t,action:"task.viewed",taskId:e})},logReply(e,t,r){const n=l.list("tasks").find(i=>i.id===e);n&&(pe({tenantId:n.tenantId,actorId:t,action:"task.replied",taskId:e,metadata:r}),n.expressQuoteFollowUp&&!n.completedAt&&l.update("tasks",e,{status:"resolved",completedAt:I(),completedById:t}))},createExpressQuoteFollowUp(e){const t=N("task"),r=e.assignedToId?[]:gn({tenantId:e.tenantId,customerId:e.customerId}),n=e.assignedToId??r[0],i={id:t,tenantId:e.tenantId,title:e.title,de
205scription:e.description,quoteRequestId:e.quoteRequestId,quoteSessionId:e.quoteSessionId,customerId:e.customerId,source:"ai_notification",severity:e.severity??"warning",severityReason:e.severityReason,status:"open",topic:"policy_edit_request",aiSummary:e.aiSummary,aiReplyBody:e.aiReplyBody,aiReplySubject:e.aiReplySubject,assignedToId:n,additionalAssignedToIds:!e.assignedToId&&r.length>1?r.slice(1):void 0,awaitingManagerAssignment:n?void 0:!0,createdById:e.createdById,expressQuoteFollowUp:!0,createdAt:I()};return l.insert("tasks",i),pe({tenantId:e.tenantId,actorId:e.createdById,action:"task.created_from_express_quote",taskId:t}),i},logManagerOverride(e,t,r){const n=l.list("tasks").find(i=>i.id===e);n&&pe({tenantId:n.tenantId,actorId:t,action:"task.manager_override",taskId:e,metadata:r})},history(e){return l.list("audit").filter(t=>t.entityType==="task"&&t.entityId===e).sort((t,r)=>t.createdAt<r.createdAt?1:-1)},deleteActivity(e,t){const r=l.list("tasks").find(n=>n.id===e);return r?(l.insert("statusEvents",{id:N("se"),tenantId:r.tenantId,source:t?"agent":"system",message:"Activity deleted",visibility:"internal",customerId:r.customerId,prospectId:r.prospectId,assetId:r.assetId,policyId:r.policyId,claimId:r.claimId,documentId:r.documentId,quoteSessionId:r.quoteSessionId,quoteRequestId:r.quoteRequestId,createdAt:I(),createdById:t}),pe({tenantId:r.tenantId,actorId:t,action:"task.deleted",taskId:r.id,metadata:{title:r.title}}
205),l.remove("tasks",e)):!1},dismissFromDashboard(e,t){const r=l.list("tasks").find(i=>i.id===e);if(!r||!t)return null;const n=new Set(r.dashboardDismissedByUserIds??[]);return n.add(t),l.update("tasks",e,{dashboardDismissedByUserIds:[...n]})},remove(e){return l.remove("tasks",e)},setSeverity(e,t,r){const n=l.update("tasks",e,{severity:t,severityChangedAt:I(),severityChangedById:r});return n&&pe({tenantId:n.tenantId,actorId:r,action:"task.severity_changed",taskId:e,metadata:{severity:t}}),n},setDueAt(e,t,r){const n=l.update("tasks",e,{dueAt:t,dueAtChangedAt:I(),dueAtChangedById:r});return n&&pe({tenantId:n.tenantId,actorId:r,action:t?"task.due_date_set":"task.due_date_cleared",taskId:e,metadata:{dueAt:t}}),n},reorderQueue(e,t,r){const n=Array.from(new Set(e)),i=l.list("tasks"),a=n.map(d=>i.find(m=>m.id===d)).filter(d=>!!d),s=a.find(d=>d.id===t);if(!s||a.length<2||a.some(d=>d.tenantId!==s.tenantId))return a;const o=I(),c=a.map((d,m)=>l.update("tasks",d.id,{queuePosition:m+1,queueChangedAt:o,queueChangedById:r,priorityRank:0,priorityChangedAt:o,priorityChangedById:r})).filter(d=>!!d);return pe({tenantId:s.tenantId,actorId:r,action:"task.reordered_queue",taskId:t,metadata:{orderedIds:n}}),c},moveInBoard(e,t,r,n){const i=l.list("tasks").find(u=>u.id===e);if(!i||this.isResolved(i))return[];const a=Array.from(new Set([...r,e])),s=a.map(u=>l.list("tasks").find(f=>f.id===u)).filter(u=>!!u&&u.tenantId===i.tenantId);if(!s.some(u=>u.id===e))return[];const o=this.statusOf(i),c=I(),d=t==="in_progress"?i.startedAt??c:i.startedAt,m=t==="in_progress"?i.startedById??n:i.startedById,p=s.map((u,f)=>l.update("tasks",u.id,{...u.id===e?{status:t,snoozedUntil:void 0,startedAt:d,startedById:m}:{},queuePosition:f+1,queueChangedAt:c,queueChangedById:n,priorityRank:0,priorityChangedAt:c,priorityChangedById:n})).filter(u=>!!u);return pe({tenantId:i.tenantId,actorId:n,action:"task.board_moved",taskId:e,metadata:{fromStatus:o,toStatus:t,orderedIds:a}}),p},moveToFront(e,t){const r=l.list("tasks").find(s=>s.id===e);if(!r)return null;const n=l.list("tasks").filter(s=>s.tenantId===r.tenantId&&s.queuePosition!=null).reduce((s,o)=>Math.min(s,o.queuePosition??s),0),i=I(),a=l.update("tasks",e,{priorityRank:1,queuePosition:n-1,queueChangedAt:i,queueChangedById:t,priorityChangedAt:i,priorityChangedById:t});return a&&pe({tenantId:a.tenantId,actorId:t,action:"task.moved_to_front",taskId:e}),a},moveToBack(e,t){const r=l.list("tasks").find(s=>s.id===e);if(!r)return null;const n=l.list("tasks").filter(s=>s.tenantId===r.tenantId&&s.queuePosition!=null).reduce((s,o)=>Math.max(s,o.queuePosition??s),0),i=I(),a=l.update("tasks",e,{priorityRank:-1,queuePosition:n+1,queueChangedAt:i,queueChangedById:t,priorityChangedAt:i,priorityChangedById:t});return a&&pe({tenantId:a.tenantId,actorId:t,action:"task.moved_to_back",taskId:e}),a},clearPriority(e,t){const r=I(),n=l.update("tasks",e,{priorityRank:0,queuePosition:void 0,queueChangedAt:r,queueChangedById:t,priorityChangedAt:r,priorityChangedById:t});return n&&pe({tenantId:n.tenantId,actorId:t,action:"task.priority_cleared",taskId:e}),n}},reminders:{create(e){const t={id:N("rem"),tenantId:e.tenantId,userId:e.userId,scope:e.scope??"personal",taskId:e.taskId,calendarEventId:e.calendarEventId,title:e.title,remindAt:e.remindAt,note:e.note,importance:e.importance??"info",recurrence:e.recurrence,recurrenceSourceId:e.recurrenceSourceId,createdAt:I()};return l.insert("reminders",t),t},setImportance(e,t){return l.update("reminders",e,{importance:t})},createBatch(e){return Array.from(new Set(e.userIds)).map(t=>this.create({tenantId:e.tenantId,userId:t,remindAt:e.remindAt,title:e.title,note:e.note,importance:e.importance,scope:"company",recurrence:e.recurrence}))},listForUser(e,t){return l.list("reminders").filter(r=>r.tenantId===e&&r.userId===t&&!r.dismissedAt).sort((r,n)=>r.remindAt<n.remindAt?-1:1)},listDismissedForUser(e,t){return l.list("reminders").filter(r=>r.tenantId===e&&r.userId===t&&!!r.dismissedAt).sort((r,n)=>(r.dismissedAt??"")<(n.dismissedAt??"")?1:-1)},listForTask(e,t){return l.list("reminders").filter(r=>r.taskId===e&&r.userId===t&&!r.dismissedAt).sort((r,n)=>r.remindAt<n.remindAt?-1:1)},listForCalendarEvent(e,t){return l.list("reminders").filter(r=>r.calendarEventId===e&&r.userId===t&&!r.dismissedAt).sort((r,n)=>r.remindAt<n.remindAt?-1:1)}
205,dismiss(e){const t=l.update("reminders",e,{dismissedAt:I()});if(!t||!t.recurrence)return t;const r=lC(t.remindAt,t.recurrence);return r&&this.create({tenantId:t.tenantId,userId:t.userId,taskId:t.taskId,calendarEventId:t.calendarEventId,remindAt:r,title:t.title,note:t.note,importance:t.importance,scope:t.scope,recurrence:t.recurrence,recurrenceSourceId:t.recurrenceSourceId??t.id}),t},restore(e){return l.update("reminders",e,{dismissedAt:void 0})},remove(e){return l.remove("reminders",e)}},calendarEvents:{listForUser(e,t){return l.list("calendarEvents").filter(r=>{var n;return r.tenantId===e&&(r.userId===t||((n=r.attendeeStatuses)==null?void 0:n.some(i=>i.userId===t&&i.status==="accepted")))}).sort((r,n)=>r.startsAt<n.startsAt?-1:1)},listPendingRequestsForUser(e,t){return l.list("calendarEvents").filter(r=>{var n;return r.tenantId===e&&r.kind==="meeting"&&((n=r.attendeeStatuses)==null?void 0:n.some(i=>i.userId===t&&i.status==="pending"))}).sort((r,n)=>r.startsAt<n.startsAt?-1:1)},pendingRequestCount(e,t){return this.listPendingRequestsForUser(e,t).length},get(e){return l.list("calendarEvents").find(t=>t.id===e)},create(e){const t=I(),r={...e,id:N("cal"),createdAt:t,updatedAt:t};return l.insert("calendarEvents",r),r},requestMeeting(e){const t=Array.from(new Set(e.attendeeIds)).filter(r=>r!==e.userId);return this.create({tenantId:e.tenantId,userId:e.userId,kind:"meeting",organizerId:e.organizerId??e.userId,attendeeStatuses:t.map(r=>({userId:r,status:"pending"})),title:e.title,description:e.description,startsAt:e.startsAt,endsAt:e.endsAt,importance:e.importance,location:e.location})},respondToMeeting(e,t,r){const n=this.get(e);if(!n||n.kind!=="meeting")return null;const i=n.attendeeStatuses??[];return i.some(a=>a.userId===t)?l.update("calendarEvents",e,{attendeeStatuses:i.map(a=>a.userId===t?{...a,status:r,respondedAt:I()}:a),updatedAt:I()}):null},acceptMeeting(e,t){return this.respondToMeeting(e,t,"accepted")},declineMeeting(e,t){return this.respondToMeeting(e,t,"declined")},update(e,t){return l.update("calendarEvents",e,{...t,updatedAt:I()})},remove(e){return l.remove("calendarEvents",e)}},internalMessages:{listThreadsForUser(e,t){return l.list("internalThreads").filter(r=>r.tenantId===e&&r.participantIds.includes(t)).sort((r,n)=>r.lastMessageAt<n.lastMessageAt?1:-1)},listMessages(e){return l.list("internalMessages").filter(t=>t.threadId===e).sort((t,r)=>t.createdAt<r.createdAt?-1:1)},openThread(e){const t=Array.from(new Set(e.participantIds)).sort(),r=l.list("internalThreads").find(i=>i.tenantId===e.tenantId&&i.participantIds.length===t.length&&i.participantIds.every((a,s)=>a===t[s]));if(r)return r;const n={id:N("thread"),tenantId:e.tenantId,participantIds:t,topic:e.topic,createdById:e.createdById,createdAt:I(),lastMessageAt:I()};return l.insert("internalThreads",n),n},send(e){const t={id:N("imsg"),tenantId:e.tenantId,threadId:e.threadId,fromUserId:e.fromUserId,body:e.body,urgency:e.urgency,readBy:[e.fromUserId],createdAt:I()};return l.insert("internalMessages",t),l.update("internalThreads",e.threadId,{lastMessageAt:t.createdAt}),t},markRead(e,t){l.list("internalMessages").filter(n=>n.threadId===e).forEach(n=>{n.readBy.includes(t)||l.update("internalMessages",n.id,{readBy:[...n.readBy,t]})})},remove(e){const t=l.list("internalMessages").find(n=>n.id===e);if(!t||!l.remove("internalMessages",e))return!1;const r=l.list("internalMessages").filter(n=>n.threadId===t.threadId).sort((n,i)=>n.createdAt<i.createdAt?1:-1);return r[0]?l.update("internalThreads",t.threadId,{lastMessageAt:r[0].createdAt}):l.remove("internalThreads",t.threadId),!0},deleteThread(e){l.list("internalMessages").filter(t=>t.threadId===e).forEach(t=>l.remove("internalMessages",t.id)),l.list("messagePins").filter(t=>t.kind==="internal"&&t.refId===e).forEach(t=>l.remove("messagePins",t.id)),l.list("messageMutes").filter(t=>t.kind==="internal"&&t.refId===e).forEach(t=>l.remove("messageMutes",t.id)),l.remove("internalThreads",e)},unreadCountForUser(e,t){const r=new Set(l.list("messageMutes").filter(i=>i.tenantId===e&&i.userId===t&&i.kind==="internal").map(i=>i.refId)),n=new Set(l.list("internalThreads").filter(i=>i.tenantId===e&&i.participantIds.includes(t)&&!r.has(i.id)).map(i=>i.id));return l.list("internalMessages").filter(i=>n.has(i.threadId)&&i.fromUserId!==t&&!i.readBy.includes(t)).length},unreadThreadsForUser(e,t){const r=this.listThreadsForUser(e,t),n=[];for(const i of r){if(z.messageMutes.isMuted(e,t,"internal",i.id))continue;
205const s=this.listMessages(i.id).filter(o=>o.fromUserId!==t&&!o.readBy.includes(t));s.length!==0&&n.push({thread:i,latest:s[s.length-1]})}return n}},quoting:{get(e){const t=l.list("quotingSessions").find(r=>r.id===e);return t?Gr(t):void 0},listByTenant(e){return oe(l.list("quotingSessions"),e).map(Gr).sort((t,r)=>t.updatedAt<r.updatedAt?1:-1)},reconcileActivities(e,t="ai"){return oe(l.list("quotingSessions"),e).filter(r=>!Gn(r)&&Ta(r)).map(Gr).reduce((r,n)=>r+Ue(n,{actorId:t}),0)},getForProspect(e){const t=l.list("quotingSessions").filter(r=>r.prospectId===e).sort(Ks)[0];return t?Gr(t):void 0},getForCustomer(e){const t=l.list("quotingSessions").filter(r=>r.customerId===e&&!Gn(r)).sort(Ks)[0];return t?Gr(t):void 0},diagnosePersonalLinesCarrierApis(e){const t=Ii(e.tenantId).map(r=>hS(r,e));return{tenantId:e.tenantId,assetType:e.assetType,state:e.state,linkedActiveCarrierCount:t.length,liveReadyCount:t.filter(r=>r.liveReady).length,simulatedCount:t.filter(r=>r.quoteApiStatus==="simulated").length,missingApiCount:t.filter(r=>r.quoteApiStatus==="no_api").length,errorCount:t.filter(r=>r.configuredStatus==="error").length,blockedCount:t.filter(r=>r.blockingReasons.length>0).length,rows:t}},upsertCustomerIntakeSession(e){var ae,ue,de,be;const t=l.list("customers").find(P=>P.id===e.customerId),r=l.list("quoteRequests").find(P=>P.id===e.quoteRequestId),n=Rr();if(!t||t.tenantId!==e.tenantId||!r||r.tenantId!==e.tenantId||r.customerId!==e.customerId||n!=null&&n.tenantId&&!Fp.has(n.role)&&n.tenantId!==e.tenantId||(n==null?void 0:n.role)==="customer"&&t.userId!==n.userId)throw new Error("This quote request is not available for this customer.");const i=l.list("quotingSessions").filter(P=>P.quoteRequestId===e.quoteRequestId);if(i.some(P=>P.tenantId!==e.tenantId||P.customerId!==e.customerId))throw new Error("This quote request is linked to a different customer.");const a=i[0],s=l.list("carrierLinks").filter(P=>P.tenantId===e.tenantId),c=(n==null?void 0:n.role)==="customer"&&n.tenantId===e.tenantId&&s.length===0?l.list("carriers").filter(P=>P.status==="active"):Ii(e.tenantId),d=new Set(c.map(P=>P.id));if((ae=e.selectedCarrierIds)!=null&&ae.some(P=>!d.has(P)))throw new Error("Select carriers available through this agency.");const m=Array.from(new Set(e.selectedCarrierIds??(a==null?void 0:a.selectedCarrierIds)??r.selectedCarrierIds??[])).filter(P=>d.has(P)),p=new Set(m),u=(de=(ue=e.assetDetails)==null?void 0:ue.state)==null?void 0:de.trim().toUpperCase(),f=u&&/^[A-Z]{2}$/.test(u)?u:a==null?void 0:a.state,g=I(),y=e.categoryId?z.categories.get(e.categoryId):void 0,h=y?Wm(y):[],w=e.customerQuestions??r.customerQuestions,T=new Set,b=w===void 0?h:w.map(P=>{var Z,le,Te;if(!((Z=P.id)!=null&&Z.trim())||!((le=P.label)!=null&&le.trim())||T.has(P.id)||!["text","textarea","select","number"].includes(P.kind)||P.carrierId&&!p.has(P.carrierId))throw new Error("The selected carrier questionnaire must be refreshed.");return T.add(P.id),{id:P.id,label:P.label,section:P.section||"Quote questions",kind:P.kind,required:P.required===!0,options:P.kind==="select"?(Te=P.options)==null?void 0:Te.filter(me=>typeof me=="string"):void 0,carrierId:P.carrierId,acordFieldKey:P.acordFieldKey}}),_=new Set(b.map(P=>P.id)),A=e.questionnaireAnswers??{},v=e.questionnaireResponsesById??{},S=Object.fromEntries(b.map(P=>{var Te,me;const Z=P.acordFieldKey??P.id.replace(`category-${e.categoryId}-`,""),le=String(v[P.id]??A[Z]??((Te=a==null?void 0:a.questionnaireResponses)==null?void 0:Te[P.id])??((me=r.questionnaireResponsesById)==null?void 0:me[P.id])??"").trim();return w===void 0&&le&&!Vt(P,le)?null:le?[P.id,le]:null}).filter(P=>!!P)),C=Object.fromEntries(Object.keys(S).map(P=>{var re;const Z=b.find(ye=>ye.id===P),le=Z.acordFieldKey??Z.id.replace(`category-${e.categoryId}-`,""),me=!(Object.prototype.hasOwnProperty.call(v,P)||Object.prototype.hasOwnProperty.call(A,le))&&((re=a==null?void 0:a.questionnaireResponseMeta)==null?void 0:re[P]);return[P,me||{updatedAt:g,updatedById:e.customerId,updatedByName:e.contactName||"Customer",updatedByRole:"customer",sourceKind:"client_intake",sourceLabel:"Customer questionnaire answer",verified:!1}]})),k=Object.fromEntries(Object.entries((a==null?void 0:a.questionnaireResponses)??{}).filter(([P])=>!_.has(P))),O=Object.fromEntries(Object.entries((a==null?void 0:a.questionnaireResponseMeta)??{}).filter(([P])=>!_.has(P))),x={...k,...S},$={...O,...C},q=w!==void 0?{carrierQuestionDiscoveryStartedAt:void 0,carrierQuestionDiscoveryCompletedAt:void 0,carrierQuestionDiscoveryDeviceId:void 0,carrierQuestionRequestedIds:void 0,carrierQuestionSuccessfulIds:void 0,carrierQuestionAttempts:void 0,carrierSelectionConfirmedAt:void 0,personalQuestionnairePreparedAt:void 0,personalAiMappingDeferredUntilCarrierQuestions:e.lineOfBusiness!=="commercial",personalCarrierQuestionMappingCompletedAt:void 0,personalCarrierQuestionMappingRecipeVersion:void 0,personalRiskFactDossier:void 0,personalCarrierAnswerSet:void 0,carrierQuestionBaseQuestions:void 0,carrierQuoteAttempts:void 0,quotes:[]}:{},B=b.filter(P=>P.required&&!x[P.id]).map(P=>P.label),F={...(a==null?void 0:a.publicFields)??{},...e.assetDetails??{},contactName:e.contactName,categoryId:e.categoryId,categoryLabel:e.categoryLabel,lineOfBusiness:e.lineOfBusiness,assetIdentifier:((be=e.assetDetails)==null?void 0:be.assetIdentifier)??e.address??(a==null?void 0:a.publicFields.assetIdentifier),address:e.address},Y={...(a==null?void 0:a.publicFieldEvidence)??{},...e.publicFieldEvidence??{}};Object.entries(e.assetDetails??{}
205).forEach(([P,Z])=>{var le;!Z||(le=e.publicFieldEvidence)!=null&&le[P]||Y[P]&&String((a==null?void 0:a.publicFields[P])??"")===Z||(Y[P]={fieldKey:P,sourceKind:"client_intake",sourceLabel:"Client quote intake",confidence:.88,verified:!1,allowDocumentAutofill:!1,reviewStatus:"needs_confirmation",collectedAt:g,notes:"Customer-provided value; not independently verified."})});const X={...q,state:f,quoteRequestId:e.quoteRequestId,categoryId:e.categoryId,categoryLabel:e.categoryLabel,customerId:e.customerId,selectedCarrierIds:m,assignedAgentId:e.assignedAgentId??(a==null?void 0:a.assignedAgentId),assetType:e.assetType,estimatedValue:e.estimatedValue??(a==null?void 0:a.estimatedValue)??0,assetDetails:e.assetDetails??(a==null?void 0:a.assetDetails),lineOfBusiness:e.lineOfBusiness,publicFields:F,publicFieldEvidence:Y,missingFields:B,questionnaireQuestions:b,questionnaireResponses:x,questionnaireResponseMeta:$,status:"gathering_info",updatedAt:g};let j;if(a)j=l.update("quotingSessions",a.id,X)??a;else{j={...q,state:f,id:N("quote_session"),tenantId:e.tenantId,quoteRequestId:e.quoteRequestId,categoryId:e.categoryId,categoryLabel:e.categoryLabel,customerId:e.customerId,selectedCarrierIds:m,assignedAgentId:e.assignedAgentId,assetType:e.assetType,estimatedValue:e.estimatedValue??0,assetDetails:e.assetDetails,lineOfBusiness:e.lineOfBusiness,createdById:e.createdById,status:"gathering_info",publicFields:F,publicFieldEvidence:Y,missingFields:B,questionnaireQuestions:b,questionnaireResponses:x,questionnaireResponseMeta:$,quotes:[],aiSummary:`${e.contactName} started a ${e.categoryLabel??Hs(e.assetType)} quote from the client portal.`,createdAt:g,updatedAt:g},l.insert("quotingSessions",j);const P=[`Customer started quote flow: ${e.categoryLabel??Hs(e.assetType)}.`,e.status==="submitted_to_agent"?"Status: submitted to agent.":"Status: started in client portal.",e.address?`Search key: ${e.address}.`:"",`${b.length} tailored intake question${b.length===1?"":"s"} loaded into the agent quoting workspace.`].filter(Boolean).join(" ");l.insert("notes",{id:N("note"),tenantId:e.tenantId,authorId:"ai",customerId:e.customerId,body:P,visibility:"internal",createdAt:g}),l.insert("statusEvents",{id:N("se"),tenantId:e.tenantId,source:"ai",message:`Note by QuoteX AI: ${P}`,visibility:"internal",customerId:e.customerId,createdAt:g,createdById:"ai"})}l.update("quoteRequests",e.quoteRequestId,{quoteSessionId:j.id,selectedCarrierIds:m,...w!==void 0?{customerQuestions:b}:{},questionnaireResponsesById:S});const Q=r.recoveryTaskId?l.list("tasks").find(P=>P.id===r.recoveryTaskId&&P.tenantId===e.tenantId&&P.customerId===e.customerId):void 0;return Q&&l.update("tasks",Q.id,{quoteRequestId:e.quoteRequestId,quoteSessionId:j.id}),Ue(j,{taskIds:Q?[Q.id]:void 0,actorId:e.createdById}),j},async startSession(e){var a;const t=kS(e),r=!e.forceNew&&t?l.list("quotingSessions").filter(s=>s.tenantId===e.tenantId&&!Gn(s)&&(e.customerId?s.customerId===e.customerId:s.prospectId===e.prospectId)&&Ta(s)).sort(Ks)[0]:void 0;if(r){let s=Gr(r);if(s.lineOfBusiness!=="commercial"){const o=Mp(s);o!==s&&(s=l.update("quotingSessions",s.id,{questionnaireQuestions:o.questionnaireQuestions,questionnaireResponses:o.questionnaireResponses,questionnaireResponseMeta:o.questionnaireResponseMeta,missingFields:o.missingFields,updatedAt:I()})??o),s.personalAiMappingDeferredUntilCarrierQuestions||(s=await Ys(s,s.questionnaireQuestions??[],s.questionnaireResponses??{}))}return Ue(s,{taskIds:e.activityTaskIds,actorId:e.activityActorId??e.createdById,allowFallback:!e.forceNew||!!((a=e.activityTaskIds)!=null&&a.length)}),s}const n=t?Hi.get(t):void 0;if(n)return n;const i=(async()=>{var ae,ue,de,be;const{aiPreparePublicFields:s,aiInferLineOfBusiness:o}=await Lt(async()=>{const{aiPreparePublicFields:P,aiInferLineOfBusiness:Z}=await Promise.resolve().then(()=>Wl);return{aiPreparePublicFields:P,aiInferLineOfBusiness:Z}},void 0),c=e.assets&&e.assets.length>0?e.assets:[{assetId:e.assetId,label:ti(e.assetType),assetType:e.assetType,categoryId:e.categoryId,categoryLabel:e.categoryLabel,address:e.address,estimatedValue:e.estimatedValue,assetDetails:e.assetDetails}],d=new Map;
205c.forEach(P=>{const Z=P.label.trim()||ti(P.assetType);d.set(Z,(d.get(Z)??0)+1)});const m=[];for(const[P,Z]of c.entries()){const le=Z.label.trim()||ti(Z.assetType),Te=(d.get(le)??0)>1?`${le} (${P+1})`:le,me=await s({assetType:Z.assetType,prospectName:e.contactName,address:Z.address,estimatedValue:Z.estimatedValue,assetDetails:Z.assetDetails,rngSeed:`${e.prospectId??e.customerId??""}-${Z.assetType}-${Z.assetId??P}`,deferExternalEnrichment:e.lineOfBusiness==="personal"&&e.deferPersonalAiMappingUntilCarrierQuestions===!0});m.push({assetId:Z.assetId,label:Te,assetType:Z.assetType,categoryId:Z.categoryId??(Z.assetType===e.assetType?e.categoryId:void 0),categoryLabel:Z.categoryLabel??(Z.assetType===e.assetType?e.categoryLabel:void 0),address:Z.address,estimatedValue:Z.estimatedValue??0,assetDetails:Z.assetDetails,publicFields:me.publicFields,publicFieldEvidence:me.publicFieldEvidence,missingFields:me.missingFields,aiSummary:me.summary})}const p=m[0],u=m.length>1,f={},g={},y=[];m.forEach((P,Z)=>{Z===0&&(Object.assign(f,P.publicFields),Object.assign(g,P.publicFieldEvidence??{})),Object.entries(P.publicFields).forEach(([le,Te])=>{var ye;if(!u)return;const me=`${P.label} - ${le}`;f[me]=Te;const re=(ye=P.publicFieldEvidence)==null?void 0:ye[le];re&&(g[me]={...re,fieldKey:me})}),P.missingFields.forEach(le=>{y.push(u?`${P.label}: ${le}`:le)})});const h=e.lineOfBusiness??o({contactName:e.contactName,assetType:e.assetType,estimatedValue:e.estimatedValue}),w=m.map(P=>P.address?Bi(P.address):P.assetDetails?Bi(Object.values(P.assetDetails).join(" ")):void 0).find(Boolean),T=N("quote_session"),b=I();let _,A,v,S=y;const C=(e.categoryIds??[]).map(P=>z.categories.get(P)).filter(P=>!!P);h==="personal"&&m.forEach(P=>{const Z=C.find(le=>le.assetType===P.assetType)??Ps({tenantId:e.tenantId,assetType:P.assetType,categoryId:P.categoryId,categoryLabel:P.categoryLabel});Z&&(P.categoryId=Z.id,P.categoryLabel=Z.label)});const k=(e.categoryId?z.categories.get(e.categoryId):C[0])??(h==="personal"?Ps({tenantId:e.tenantId,assetType:p.assetType,categoryId:p.categoryId,categoryLabel:p.categoryLabel}):void 0),O=Array.from(new Set([...e.categoryIds??[],e.categoryId,...m.map(P=>P.categoryId)].filter(P=>!!P))),x=Array.from(new Set([...e.categoryLabels??[],e.categoryLabel,...m.map(P=>P.categoryLabel)].filter(P=>!!P))),$=p.assetDetails??{},q={...h==="personal"?ru():{},...$};u&&m.forEach(P=>{Object.entries(P.assetDetails??{}).forEach(([Z,le])=>{le.trim()&&(q[`${P.label} - ${Z}`]=le)})});const B=h==="commercial"?Yd(e.tenantId,e.selectedAcordTemplateIds??[],f,g):void 0;if(h==="commercial")_=[];else{const P=[],Z={},le={},Te=[];m.forEach((me,re)=>{const ye=me.categoryId?z.categories.get(me.categoryId):C.find(je=>je.assetType===me.assetType)??Ps({tenantId:e.tenantId,assetType:me.assetType,categoryLabel:me.categoryLabel})??k,lr=Dp({assetType:me.assetType,categories:ye?[ye]:void 0,publicFields:me.publicFields,missingFields:me.missingFields}),En={...ru(),...me.assetDetails??{}},jt=Op({questions:lr,contactName:e.contactName,contactEmail:void 0,contactPhone:void 0,businessName:void 0,address:me.address,estimatedValue:me.estimatedValue,assetDetails:En,publicFields:me.publicFields,publicFieldEvidence:me.publicFieldEvidence,updatedAt:b});lr.forEach(je=>{var Xe,Ur;const xt=u?`${je.id}__asset_${me.assetId??re}`:je.id;P.push(u?{...je,id:xt,section:`${me.label} - ${je.section}`,label:`${me.label}: ${je.label}`}:je);const he=(Xe=jt.questionnaireResponses)==null?void 0:Xe[je.id];he&&(Z[xt]=he);const ct=(Ur=jt.questionnaireResponseMeta)==null?void 0:Ur[je.id];ct&&(le[xt]=ct)}),jt.missingFields.forEach(je=>{Te.push(u?`${me.label}: ${je}`:je)})}),_=P,A=Object.keys(Z).length>0?Z:void 0,v=Object.keys(le).length>0?le:void 0,S=Te}const F={id:T,tenantId:e.tenantId,categoryId:e.categoryId??p.categoryId,categoryLabel:e.categoryLabel??p.categoryLabel,categoryIds:O.length>0?O:void 0,categoryLabels:x.length>0?x:void 0,prospectId:e.prospectId,customerId:e.customerId,assetId:p.assetId,selectedAssetMappings:m,assetType:p.assetType,estimatedValue:m.reduce((P,Z)=>P+Z.estimatedValue,0)||p.estimatedValue,assetDetails:q,state:w,lineOfBusiness:h,commercialAcordTemplates:B,selectedCarrierIds:Array.from(new Set(e.selectedCarrierIds??[])),personalAiMappingDeferredUntilCarrierQuestions:h==="personal"&&e.deferPersonalAiMappingUntilCarrierQuestions?!0:void 0,carrierSelectionReadyAt:h==="personal"&&e.deferPersonalAiMappingUntilCarrierQuestions?b
205:void 0,carrierQuoteAttempts:(e.selectedCarrierIds??[]).map(P=>{const Z=l.list("carriers").find(le=>le.id===P);return{carrierId:P,carrierName:(Z==null?void 0:Z.name)??"Selected carrier",status:"pending",message:"Waiting for quote retrieval to begin.",updatedAt:b}}),createdById:e.createdById,status:"gathering_info",publicFields:f,publicFieldEvidence:g,missingFields:S,questionnaireQuestions:_,questionnaireResponses:A,questionnaireResponseMeta:v,quotes:[],aiSummary:h==="personal"&&e.deferPersonalAiMappingUntilCarrierQuestions?`Quote setup prepared for ${m.length} selected asset${m.length===1?"":"s"}. Choose carriers so AI mapping can use their verified question sets.`:m.length===1?p.aiSummary:`AI mapping completed for all ${m.length} selected assets. ${m.map(P=>`${P.label}: ${P.aiSummary}`).join(" ")}`,createdAt:b,updatedAt:b};RS({tenantId:e.tenantId,customerId:e.customerId,prospectId:e.prospectId,supersededBySessionId:T,voidedAt:b}),l.insert("quotingSessions",F);const Y=h==="commercial"||e.deferPersonalAiMappingUntilCarrierQuestions?F:await Ys(F,F.questionnaireQuestions??[],F.questionnaireResponses??{}),X=fr(Y,{},"application"),j=X?l.update("quotingSessions",Y.id,{commercialAcordTemplates:X})??Y:Y;zs(j);const Q=((ae=j.selectedAssetMappings)==null?void 0:ae.reduce((P,Z)=>P+Object.keys(Z.publicFields).length,0))??Object.keys(j.publicFields).length;return fe(j,{message:`AI quoting workflow started for ${j.lineOfBusiness==="commercial"?"commercial":"personal"} ${Hs(j.assetType)}.`,detail:[`Public-record enrichment completed for ${((ue=j.selectedAssetMappings)==null?void 0:ue.length)??1} selected asset${(((de=j.selectedAssetMappings)==null?void 0:de.length)??1)===1?"":"s"}, with ${Q} field${Q===1?"":"s"} prepared.`,j.missingFields.length>0?`Missing fields queued for questionnaire: ${j.missingFields.join(", ")}.`:"No missing client fields were found; carrier ranking can begin immediately.",X&&X.length>0?`${X.length} selected ACORD PDF${X.length===1?"":"s"} initialized as filled application document${X.length===1?"":"s"} from currently available data.`:""].filter(Boolean).join(" "),createdAt:j.createdAt,createdById:e.createdById}),Ue(j,{taskIds:e.activityTaskIds,actorId:e.activityActorId??e.createdById,allowFallback:!e.forceNew||!!((be=e.activityTaskIds)!=null&&be.length)}),j})();t&&Hi.set(t,i);try{return await i}finally{t&&Hi.get(t)===i&&Hi.delete(t)}},async runAcordAiMapping(e){var i,a;const t=this.get(e);if(!t)return null;if(t.lineOfBusiness!=="commercial"){const s=new Set(t.carrierQuestionSuccessfulIds??[]),o=[...new Set(t.selectedCarrierIds??[])];if(!(!!t.carrierQuestionDiscoveryCompletedAt&&o.length>0&&o.every(u=>s.has(u))))return t;const d=await Ys(t,t.questionnaireQuestions??[],t.questionnaireResponses??{});zs(d);const m=I(),p=l.update("quotingSessions",d.id,{personalAiMappingDeferredUntilCarrierQuestions:void 0,personalCarrierQuestionMappingCompletedAt:m,personalCarrierQuestionMappingRecipeVersion:Lp,updatedAt:m})??d;return fe(p,{message:"AI mapped the selected carriers' verified question set.",detail:`${((i=p.questionnaireQuestions)==null?void 0:i.length)??0} carrier-verified question${(((a=p.questionnaireQuestions)==null?void 0:a.length)??0)===1?" was":"s were"} reviewed for evidence-backed prefill; uncertain values were left for confirmation.`,createdAt:m,createdById:t.createdById}),p}const r=await YS(t,t.questionnaireResponses??{}),n=fr(r,r.questionnaireResponses??{},"application");return zs(r),n?l.update("quotingSessions",r.id,{commercialAcordTemplates:n,updatedAt:I()})??r:r},prepareCommercialQuestionnaire(e){const t=this.get(e);if(!t||t.lineOfBusiness!=="commercial")return t??null;const r=I(),n=fr(t,t.questionnaireResponses??{},"application"),i={...t,commercialAcordTemplates:n??t.commercialAcordTemplates},a=Wa(i),s=vt(i),o=Ea({session:i,questions:a,contactName:s==null?void 0:s.name,contactEmail:s==null?void 0:s.email,contactPhone:s==null?void 0:s.phone,businessName:s&&"businessName"in s?s.businessName:void 0,address:oi(i),estimatedValue:i.estimatedValue,assetDetails:i.assetDetails,publicFields:i.publicFields,publicFieldEvidence:i.publicFieldEvidence,updatedAt:r}),c=cf(a,o.questionnaireResponses,o.questionnaireResponseMeta),d=Fn(c,o.questionnaireResponses),m=l.update("quotingSessions",e,{commercialAcordTemplates:i.
205commercialAcordTemplates,questionnaireQuestions:c,questionnaireResponses:o.questionnaireResponses,questionnaireResponseMeta:o.questionnaireResponseMeta,missingFields:d,commercialQuestionnairePreparedAt:t.commercialQuestionnairePreparedAt??r,status:"gathering_info",updatedAt:r});if(m){const u=(m.commercialAcordTemplates??[]).reduce((f,g)=>f+(g.missingFieldCount??0),0);fe(m,{message:"AI generated the commercial questionnaire from the ACORD fill audit.",detail:`${c.length} question${c.length===1?"":"s"} prepared from ${u} remaining ACORD field${u===1?"":"s"} and commercial intake requirements.`,createdAt:r,createdById:t.createdById})}return m},preparePersonalQuestionnaire(e){const t=this.get(e);if(!t||t.lineOfBusiness==="commercial")return t??null;if(t.personalAiMappingDeferredUntilCarrierQuestions||t.personalQuestionnairePreparedAt&&t.carrierQuestionBaseQuestions)return t;const r=t.personalQuestionnairePreparedAt??I(),n=t.questionnaireQuestions??[],i=t.questionnaireResponses??{},a=n.filter(o=>o.required&&!(i[o.id]??"").trim()).map(o=>o.label),s=l.update("quotingSessions",e,{questionnaireQuestions:n,carrierQuestionBaseQuestions:t.carrierQuestionBaseQuestions??n.map(o=>({...o})),personalQuestionnairePreparedAt:r,carrierSelectionReadyAt:t.carrierSelectionReadyAt??r,missingFields:a,status:"gathering_info",updatedAt:r});if(s){const o=n.filter(c=>(i[c.id]??"").trim()).length;fe(s,{message:"AI prepared the personal-lines questionnaire from the mapping review.",detail:`${n.length} question${n.length===1?"":"s"} are ready for staff review; ${o} already ${o===1?"has":"have"} a saved value.`,createdAt:r,createdById:t.createdById}),Ue(s,{actorId:"ai"})}return s},updateQuestionnaireQuestions(e,t,r){var p;const n=this.get(e);if(!n)return null;if(n.lineOfBusiness!=="commercial"&&n.carrierQuestionDiscoveryCompletedAt)return n;const i=I(),a=t.map(u=>({...u,id:u.id||N("qq"),section:u.section.trim()||"General",label:u.label.trim(),options:u.kind==="select"?(u.options??[]).map(f=>f.trim()).filter(Boolean):void 0,required:!!u.required})).filter(u=>u.label.length>0),s=new Set(a.map(u=>u.id)),o=Object.fromEntries(Object.entries(n.questionnaireResponses??{}).filter(([u])=>s.has(u))),c=Object.fromEntries(Object.entries(n.questionnaireResponseMeta??{}).filter(([u])=>s.has(u))),d=a.filter(u=>u.required&&!(o[u.id]??"").trim()).map(u=>u.label),m=l.update("quotingSessions",e,{questionnaireQuestions:a,questionnaireResponses:o,questionnaireResponseMeta:c,missingFields:d,updatedAt:i});if(m){const u=((p=r==null?void 0:r.name)==null?void 0:p.trim())||"Agent",f=Gs(m).length;fe(m,{message:`${u} updated the quoting questionnaire.`,detail:`${f} active question${f===1?"":"s"} are now in the client questionnaire; removed-question answers were cleared from the quote file.`,createdAt:i,createdById:(r==null?void 0:r.id)??m.createdById,source:(r==null?void 0:r.role)==="customer"?"customer":"agent"})}return m},sendPortalLink(e,t){var k;const r=this.get(e),n=(r==null?void 0:r.lineOfBusiness)==="commercial"&&Gs(r).length===0?this.prepareCommercialQuestionnaire(e)??r:r;if(!n)return null;if(n.lineOfBusiness!=="commercial"&&(!n.carrierQuestionDiscoveryCompletedAt||(((k=n.carrierQuestionSuccessfulIds)==null?void 0:k.length)??0)===0))return n;const i=l.list("agencies").find(O=>O.id===n.tenantId),a=(i==null?void 0:i.name)??"your agency",s=l.list("users").find(O=>O.id===n.createdById),o=n.customerId?l.list("customers").find(O=>O.id===n.customerId):n.prospectId?l.list("prospects").find(O=>O.id===n.prospectId):null,c=((o==null?void 0:o.name)??"Friend").split(/\s+/)[0],d=Gs(n),m=new Set(d.map(O=>O.section)).size,p=d.length,u=n.lineOfBusiness==="commercial"&&!!n.commercialSecondRoundSentAt&&!n.commercialSupplementalsCompletedAt,f=n.questionnaireAccessToken??CS(),g=n.questionnaireAccessTokenCreatedAt??I(),y=SS(t,f),h=u?"Action needed: complete supplemental carrier questions":n.lineOfBusiness==="commercial"?"Action needed: complete your commercial quoting questionnaire":"Action needed: complete your quoting questionnaire",w=n.lineOfBusiness==="commercial"?`${p} questions across ${m} sections`:`${p} carrier questions retrieved from the selected carrier sites in one questionnaire`,T=[`Hi ${c}
205,`,"",`To run firm quotes for you, we need a few additional details. I've put together a short questionnaire (${w} — pre-filled with what we already have on file).`,"","Open and complete the questionnaire here:",y,"","Once you submit, our AI runs the answers through every carrier we work with and I'll follow up with the top recommendations.","",s!=null&&s.name?`Best,
206${s.name}`:`Best,
207${a}`].join(`
208`),b=[`Hi ${c},`,"",`A few carriers reviewed the commercial application and asked for supplemental form details that are not already on file. I put those follow-up questions into one short supplemental questionnaire (${p} questions across ${m} sections).`,"","Open and complete the supplemental questions here:",y,"","Once you submit, Quotex completes the requested carrier supplementals, sends the information back to those markets, and updates the accepted-carrier ranking for your agent.","",s!=null&&s.name?`Best,
209${s.name}`:`Best,
210${a}`].join(`
211`),_=u?b:T,A=TS({firstName:c,creatorName:s==null?void 0:s.name,agencyName:a,portalUrl:y,questionCount:p,sectionCount:m,supplemental:u,singleQuestionnaire:n.lineOfBusiness!=="commercial"});n.questionnaireAccessToken||l.update("quotingSessions",e,{questionnaireAccessToken:f,questionnaireAccessTokenCreatedAt:g,updatedAt:I()});const v=z.communications.create({tenantId:n.tenantId,customerId:n.customerId,prospectId:n.prospectId,channel:"email",direction:"outbound",subject:h,body:_,bodyHtml:A,createdById:n.createdById,emailDeliveryMode:"manual"}),S=I(),C=l.update("quotingSessions",e,{questionnaireMessageId:v.id,questionnaireDraft:`Subject: ${h}
212
213${_}`,questionnaireSentAt:S,questionnaireAccessToken:f,questionnaireAccessTokenCreatedAt:g,status:"awaiting_reply",updatedAt:S});return C&&(fe(C,{message:u?`AI supplemental questionnaire sent to ${(o==null?void 0:o.name)??"client/prospect"} through the portal.`:`AI quoting questionnaire sent to ${(o==null?void 0:o.name)??"client/prospect"} through the portal.`,detail:u?`${p} supplemental carrier question${p===1?"":"s"} across ${m} section${m===1?"":"s"} are awaiting reply.`:n.lineOfBusiness!=="commercial"?`${p} carrier question${p===1?"":"s"} from the selected carrier sites are awaiting reply in one questionnaire.`:`${p} question${p===1?"":"s"} across ${m} section${m===1?"":"s"} are awaiting reply.`,createdAt:S,createdById:n.createdById,communicationId:v.id,source:"agent"}),Ue(C,{actorId:"ai"})),C},saveQuestionnaireResponses(e,t,r){var u;const n=this.get(e);if(!n)return null;const i=I(),a={...n.questionnaireResponses??{},...t},o=n.lineOfBusiness!=="commercial"&&Object.entries(t).some(([f,g])=>{var y;return(((y=n.questionnaireResponses)==null?void 0:y[f])??"")!==g})?{carrierQuoteAttempts:[],quotes:[],missingFields:Fn(n.questionnaireQuestions??[],a),status:"gathering_info"}:{},c=Pd(n,t,r,i),d=ri({...n,questionnaireResponses:a,questionnaireResponseMeta:c},{responses:a,responseMeta:c,createdAt:i}),m=l.update("quotingSessions",e,{questionnaireResponses:{...a},questionnaireResponseMeta:c,...d,...o,updatedAt:i});let p=m;if((m==null?void 0:m.lineOfBusiness)==="commercial"){const f=fr(m,{},_i(m)&&m.commercialSecondRoundSentAt?"supplemental":"application");f&&(p=l.update("quotingSessions",e,{commercialAcordTemplates:f,updatedAt:i})??m)}if(p&&Object.keys(t).length>0){const f=((u=r==null?void 0:r.name)==null?void 0:u.trim())||"Agent",g=(r==null?void 0:r.role)==="customer"?"customer":(r==null?void 0:r.role)==="ai"?"ai":"agent",y=p.commercialAcordTemplates??[],h=y.reduce((T,b)=>T+(b.autoFilledFieldCount??0),0),w=y.reduce((T,b)=>T+(b.missingFieldCount??0),0);fe(p,{message:`${f} saved ${Object.keys(t).length} quoting questionnaire answer${Object.keys(t).length===1?"":"s"}; ACORD packet refreshed.`,detail:y.length>0?`${y.length} ACORD document${y.length===1?"":"s"} updated. ${h} field${h===1?"":"s"} currently filled; ${w} field${w===1?"":"s"} still need review.`:"The saved draft is now available for the quoting workflow.",createdAt:i,createdById:(r==null?void 0:r.id)??p.createdById,source:g})}return p},recommendCommercialCarriers(e,t){const r=this.get(e);return r?VS(r,t):[]},previewCommercialCarrierEmails(e,t,r,n){const i=this.get(e);if(!i)return[];const a=fr(i,t,r),s=a&&a.length>0?{...i,commercialAcordTemplates:a}:i,o=n??(r==="supplemental"?(s.commercialCarrierSubmissions??[]).filter(c=>c.status==="needs_client_info"||c.status==="needs_supplemental").map(c=>c.carrierId):[]);return I0(s,t,r,o)},listCarrierEmailProcessing(e,t){return l.list("carrierEmailProcessing").filter(r=>r.tenantId===e&&(!t||r.outcome===t)).sort((r,n)=>r.processedAt<n.processedAt?1:-1)},async processInboundCarrierCommunications(e,t={}){const r=t.communicationIds?new Set(t.communicationIds):null,n=new Map(this.listCarrierEmailProcessing(e).map(c=>[c.communicationId,c])),i=l.list("communications").filter(c=>{const d=n.get(c.id),m=!!t.sessionId&&(d==null?void 0:d.outcome)==="ignored";return c.tenantId===e&&c.direction==="inbound"&&(!r||r.has(c.id))&&
213(t.force||!d||m)}).sort((c,d)=>c.createdAt>d.createdAt?1:-1);let a=0,s=0,o=0;for(const c of i){const d=d0(e,c),m=d.filter(f=>!t.sessionId||f.session.id===t.sessionId),p=n.get(c.id);if(t.sessionId&&d.length>0&&m.length===0)continue;if(m.length===1){const f=m[0],g=f.submission.submissionId??Ft(f.session,f.submission.carrierId),y=`${e}:${c.id}`;if(Js.has(y))continue;Js.add(y);let h=null;try{h=await au({tenantId:e,sessionId:f.session.id,submissionId:g,communicationId:c.id,matchReason:f.reason})}finally{Js.delete(y)}if(h){a+=1;continue}}const u=m.length>1?m:u0(e,c).filter(f=>!t.sessionId||f.session.id===t.sessionId);if(u.length>0){sc({tenantId:e,communicationId:c.id,outcome:"manual_review",candidateSubmissionIds:Ke(u.map(f=>f.submission.submissionId??Ft(f.session,f.submission.carrierId))),matchReason:m.length>1?"multiple_deterministic_matches":"known_underwriter_without_deterministic_identifier",processedAt:I(),reprocessedFrom:p==null?void 0:p.id}),s+=1;continue}t.sessionId||(sc({tenantId:e,communicationId:c.id,outcome:"ignored",matchReason:"not_a_deterministically_matched_carrier_reply",processedAt:I(),reprocessedFrom:p==null?void 0:p.id}),o+=1)}return{processed:a,review:s,ignored:o}},async assignCarrierEmailProcessing(e){const t=l.list("carrierEmailProcessing").find(a=>a.id===e.processingId),r=this.get(e.sessionId);return!t||!r||r.tenantId!==t.tenantId||!(r.commercialCarrierSubmissions??[]).find(a=>(a.submissionId??Ft(r,a.carrierId))===e.submissionId)||!await au({tenantId:t.tenantId,sessionId:r.id,submissionId:e.submissionId,communicationId:t.communicationId,matchReason:"agent_assigned_manual_review"})?null:l.update("carrierEmailProcessing",t.id,{outcome:"matched_processed",matchedSessionId:r.id,matchedSubmissionId:e.submissionId,matchReason:"agent_assigned_manual_review",assignedById:e.assignedById,reprocessedFrom:t.id,processedAt:I(),updatedAt:I()})??null},async readCommercialCarrierResponses(e){const t=this.get(e);return!t||t.lineOfBusiness!=="commercial"?t??null:(await this.processInboundCarrierCommunications(t.tenantId,{sessionId:e}),this.get(e)??null)},confirmCommercialCarrierDelivery(e,t){const r=this.get(e);if(!r||r.lineOfBusiness!=="commercial")return r??null;const n=r.commercialCarrierSubmissions??[],i=Ke(n.flatMap(m=>t==="application"?m.applicationMessageIds??[]:m.supplementalMessageIds??[]));if(i.length===0)return r;const a=new Map(l.list("communications").filter(m=>m.tenantId===r.tenantId).map(m=>[m.id,m]));if(!i.every(m=>{var u;const p=(u=a.get(m))==null?void 0:u.deliveryStatus;return p==="sent"||p==="synced"}))return null;const o=I(),c=n.map(m=>{const p=t==="application"?m.applicationMessageIds??[]:m.supplementalMessageIds??[];
213if(!p.some(f=>i.includes(f)))return m;const u=Ke(p.map(f=>{var g;return(g=a.get(f))==null?void 0:g.externalThreadId}));return{...m,status:t==="application"?"awaiting_response":"supplemental_sent",sentAt:o,deliveryFailureReason:void 0,...t==="application"?{applicationExternalThreadIds:Ke([...m.applicationExternalThreadIds??[],...u])}:{supplementalExternalThreadIds:Ke([...m.supplementalExternalThreadIds??[],...u])}}}),d=l.update("quotingSessions",e,{commercialCarrierSubmissions:c,...t==="application"?{commercialApplicationSentAt:o}:{commercialSupplementalsCompletedAt:o},status:"awaiting_reply",aiSummary:t==="application"?"The connected mailbox confirmed delivery of the carrier application packet. Quotex is awaiting carrier replies.":"The connected mailbox confirmed delivery of the carrier supplemental packet. Quotex is awaiting carrier replies.",updatedAt:o});return d&&fe(d,{message:t==="application"?"Carrier application delivery confirmed.":"Carrier supplemental delivery confirmed.",detail:`${i.length} email${i.length===1?"":"s"} confirmed by the connected mailbox provider.`,createdAt:o,createdById:r.createdById,communicationId:i[0]}),d??r},markCommercialCarrierDeliveryFailed(e,t,r){const n=this.get(e);if(!n||n.lineOfBusiness!=="commercial")return n??null;const i=I(),a=(r==null?void 0:r.trim())||"The connected mailbox did not confirm delivery. Review the mailbox connection and retry.",s=(n.commercialCarrierSubmissions??[]).map(c=>{const d=t==="application"?c.applicationMessageIds??[]:c.supplementalMessageIds??[];return d.length===0||d.every(p=>{var f;const u=(f=l.list("communications").find(g=>g.id===p))==null?void 0:f.deliveryStatus;return u==="sent"||u==="synced"})?c:{...c,status:"send_failed",deliveryFailureReason:a,responseAt:void 0,acceptedAt:void 0,aiRationale:"Carrier delivery was not confirmed. The packet remains available for retry."}}),o=l.update("quotingSessions",e,{commercialCarrierSubmissions:s,...t==="application"?{commercialApplicationSentAt:void 0}:{commercialSupplementalsCompletedAt:void 0},status:t==="application"?"gathering_info":"awaiting_reply",aiSummary:"Carrier delivery was not confirmed. No carrier response is recorded; the packet is ready to retry.",updatedAt:i});return o&&fe(o,{message:"Carrier email delivery needs attention.",detail:"The provider did not confirm delivery. The workflow was returned to a retryable state.",createdAt:i,createdById:n.createdById}),o??n},submitQuestionnaireResponses(e,t,r,n){var y,h;const i=this.get(e);if(!i)return null;const a=I(),s={...i.questionnaireResponses??{},...t},o=Pd(i,t,r,a);if(i.lineOfBusiness==="commercial"){const w=_i(i),T={...i,commercialApplicationSentAt:w,questionnaireResponses:s,questionnaireResponseMeta:o,updatedAt:a},b=fr(T,{},w?"supplemental":"application"),_=i.prospectId?l.list("prospects").find(F=>F.id===i.prospectId):i.customerId?l.list("customers").find(F=>F.id===i.customerId):null,A=n==null?void 0:n.selectedCommercialCarrierIds,v=!!A&&(((y=n==null?void 0:n.commercialCarrierEmailDrafts)==null?void 0:y.length)??0)>0,S=A??(w?(i.commercialCarrierSubmissions??[]).map(F=>F.carrierId):void 0);if((r==null?void 0:r.role)==="customer"&&!w&&!(A!=null&&A.length)){const F=Object.values(s).filter(X=>X.trim()).length,Y=l.update("quotingSessions",e,{questionnaireResponses:s,questionnaireResponseMeta:o,commercialAcordTemplates:b??i.commercialAcordTemplates,replyReceivedAt:a,missingFields:[],aiSummary:`${(_==null?void 0:_.name)??"Client"} completed the commercial questionnaire. The ACORD package is ready for agent review before selecting carriers.`,status:"gathering_info",updatedAt:a});return fe(i,{message:`${(_==null?void 0:_.name)??"Client"} completed the commercial quoting questionnaire.`,detail:`${F} answer${F===1?"":"s"} saved. Carrier send is waiting for agent review and selected markets.`,createdAt:a,createdById:r.id??"customer"}),Y}const C=w0({...T,commercialAcordTemplates:b??T.commercialAcordTemplates},s,a,S,v);if(!w){const F=S==null?void 0:S.map(de=>{const be=l.list("carriers").find(P=>P.id===de);return{carrierId:de,carrierName:(be==null?void 0:be.name)??"Selected carrier",status:"pending",message:"Application sent; awaiting a verified carrier response.",updatedAt:a}}),Y=n!=null&&n.awaitLiveMailboxDelivery?C.submissions.map(de=>({...de,status:"application_sent",sentAt:void 0,deliveryFailureReason:void 0,responseAt:void 0,acceptedAt:void 0,aiRationale:"The application packet is prepared and waiting for confirmation from the connected mailbox provider."})):_0(C.submissions),X=su(i,Y,s,"application",void 0,n==null?void 0:n.commercialCarrierEmailDrafts,n!=null&&n.awaitLiveMailboxDelivery?"manual":"draft"),j=X.reduce((de,be)=>{var P;return de+(((P=be.applicationMessageIds)==null?void 0:P.length)??0)},0),Q=X.filter(de=>de.submissionMethod==="carrier_portal_automation").length,ae=X.find(de=>Wn(de));fe(i,{message:`Commercial application packet ${n!=null&&n.awaitLiveMailboxDelivery?"prepared for":"sent to"} ${C.submittedCarrierCount} carrier${C.submittedCarrierCount===1?"":"s"}${n!=null&&n.awaitLiveMailboxDelivery?"; waiting for mailbox delivery confirmation.":"; awaiting carrier responses."}`,detail:`${Q} portal automation job${Q===1?"":"s"} queued. ${j} underwriter email${j===1?"":"s"} created. Carrier outcomes will be classified only after an inbou
213nd reply is received and matched to the submission.`,createdAt:a,createdById:i.createdById,communicationId:ae?Wn(ae):void 0,documentId:ae?ac(ae):void 0});const ue=l.update("quotingSessions",e,{questionnaireResponses:s,questionnaireResponseMeta:o,commercialAcordTemplates:b??i.commercialAcordTemplates,commercialCarrierSubmissions:X,selectedCarrierIds:S??i.selectedCarrierIds,carrierQuoteAttempts:F??i.carrierQuoteAttempts,commercialApplicationSentAt:n!=null&&n.awaitLiveMailboxDelivery?void 0:a,missingFields:[],aiSummary:n!=null&&n.awaitLiveMailboxDelivery?`The completed ACORD application packet is prepared for ${C.submittedCarrierCount} appetite-matched carrier${C.submittedCarrierCount===1?"":"s"}. The workflow will advance only after the connected mailbox confirms delivery.`:`AI sent the completed ACORD application packet to ${C.submittedCarrierCount} appetite-matched carrier${C.submittedCarrierCount===1?"":"s"}. The workflow is awaiting real inbound carrier replies before any market is accepted, declined, or sent to review.`,status:n!=null&&n.awaitLiveMailboxDelivery?i.status:"quoting",updatedAt:a});return n!=null&&n.awaitLiveMailboxDelivery&&j>0||this.processInboundCarrierCommunications(i.tenantId,{sessionId:e}),ue}const k=w?i.commercialCarrierSubmissions??[]:v0(i,C.submissions);(i.questionnaireQuestions??[]).filter(F=>F.round==="second_round"&&F.carrierId&&(i.commercialCarrierSubmissions??[]).some(Y=>Y.carrierId===F.carrierId&&(Y.status==="needs_client_info"||Y.status==="needs_supplemental")));const O=new Set((i.commercialCarrierSubmissions??[]).filter(F=>F.status==="needs_client_info"||F.status==="needs_supplemental").map(F=>F.carrierId));if(O.size===0)return l.update("quotingSessions",e,{questionnaireResponses:s,questionnaireResponseMeta:o,commercialAcordTemplates:b??i.commercialAcordTemplates,replyReceivedAt:a,status:i.status==="complete"?"complete":"quoting",commercialCarrierSubmissions:i.commercialCarrierSubmissions??k,commercialApplicationSentAt:w??i.commercialApplicationSentAt??a,commercialSupplementalsCompletedAt:a,missingFields:[],aiSummary:"No carrier supplemental request is pending. The workflow is still waiting for matched inbound carrier replies before ranking any market.",updatedAt:a});const $=(w?su({...i,commercialApplicationSentAt:w,commercialCarrierSubmissions:k},k,s,"supplemental",O,n==null?void 0:n.commercialCarrierEmailDrafts,n!=null&&n.awaitLiveMailboxDelivery?"manual":"draft"):k).map(F=>O.has(F.carrierId)?n!=null&&n.awaitLiveMailboxDelivery?{...F,sentAt:void 0,deliveryFailureReason:void 0,aiRationale:"The carrier supplemental package is prepared and waiting for confirmation from the connected mailbox provider."}:{...F,status:"supplemental_sent",missingFields:void 0,acceptedAt:void 0,aiRationale:"Carrier supplemental package was sent. Awaiting the carrier's inbound response before AI classifies this market."}:F),q=l.update("quotingSessions",e,{questionnaireResponses:s,questionnaireResponseMeta:o,commercialAcordTemplates:b??i.commercialAcordTemplates,replyReceivedAt:a,status:"quoting",commercialCarrierSubmissions:$,commercialApplicationSentAt:w??a,commercialSupplementalsCompletedAt:n!=null&&n.awaitLiveMailboxDelivery?void 0:a,missingFields:[],aiSummary:n!=null&&n.awaitLiveMailboxDelivery?"The carrier-requested supplemental package is prepared. The workflow will advance only after the connected mailbox confirms delivery.":"AI sent the carrier-requested supplemental package. The workflow is awaiting matched inbound carrier replies before ranking any market.",updatedAt:a}),B=$.find(F=>Wn(F));return fe(i,{message:`${(_==null?void 0:_.name)??"Client"} completed commercial supplemental details; the carrier package was ${n!=null&&n.awaitLiveMailboxDelivery?"prepared for delivery":"sent"}.`,detail:n!=null&&n.awaitLiveMailboxDelivery?"The workflow is waiting for mailbox delivery confirmation.":"Carrier responses will be classified only after a matched inbound reply is received.",createdAt:a,communicationId:B?Wn(B):void 0,documentId:B?ac(B):void 0}),q}const c=new Set(i.carrierQuestionSuccessfulIds??[]),d=[...new Set(((h=i.selectedCarrierIds)!=null&&h.length?i.selectedCarrierIds:i.carrierQuestionSuccessfulIds??[]).filter(w=>c.has(w)))],m=ri({...i,questionnaireResponses:s,questionnaireResponseMeta:o,selectedCarrierIds:d},{responses:s,responseMeta:o,createdAt:a}),p={...i,questionnaireResponses:s,questionnaireResponseMeta:o,selectedCarrierIds:d,...m},u=d.map(w=>({carrierId:w,transfer:md({carrierId:w,session:p})})).filter(({transfer:w})=>!w.application);if(u.length>0){const w=new Set(u.flatMap(({transfer:v})=>v.blockingQuestionIds)),T=(i.questionnaireQuestions??[]).filter(v=>w.has(v.id)).map(v=>v.label),b=u.flatMap(({transfer:v})=>v.blockingIssueCount>v.blockingQuestionIds.length?v.missingCarrierFields:[]),_=[...new Set([...T,...b])],A=l.update("quotingSessions",e,{questionnaireResponses:s,questionnaireResponseMeta:o,...m,replyReceivedAt:a,selectedCarrierIds:d,carrierQuoteAttempts:[],quotes:[],missingFields:_,status:"gathering_info",aiSummary:`${_.length||1} carrier application answer${(_.length||1)===1?" needs":"s need"} correction before quote retrieval can begin.`,updatedAt:a});return A&&Ue(A,{actorId:(r==null?void 0:r.id)??"ai"}),A}const f=l.update("quotingSessions",e,{questionnaireResponses:s,questionnaireResponseMeta:o,...m,replyReceivedAt:a,carrierSelectionReadyAt:i.carrierSelectionReadyAt??a,carrierSelectionConfirmedAt:d.length>
2130?i.carrierSelectionConfirmedAt??a:void 0,selectedCarrierIds:d,carrierQuoteAttempts:[],quotes:[],status:d.length>0?"quoting":"gathering_info",updatedAt:a});f&&Ue(f,{actorId:"ai"});const g=i.prospectId?l.list("prospects").find(w=>w.id===i.prospectId):i.customerId?l.list("customers").find(w=>w.id===i.customerId):null;return fe(f??i,{message:`${(g==null?void 0:g.name)??"Client"} submitted ${Object.keys(t).length} questionnaire response${Object.keys(t).length===1?"":"s"}; ${d.length>0?"verified carrier quote retrieval started.":"no verified carrier is available for quote retrieval."}`,detail:d.length>0?`Only the ${d.length} carrier${d.length===1?"":"s"} that returned verified portal questions can receive this quote request.`:"The workflow remains paused because none of the selected carriers returned a verified questionnaire.",createdAt:a,createdById:(r==null?void 0:r.id)??"ai"}),d.length>0?this.runQuotes(e):f},async draftQuestionnaire(e){const t=this.get(e);if(!t)return null;const r=l.list("agencies").find(p=>p.id===t.tenantId),n=l.list("users").find(p=>p.id===t.createdById),i=t.prospectId?l.list("prospects").find(p=>p.id===t.prospectId):t.customerId?l.list("customers").find(p=>p.id===t.customerId):null,a=(i==null?void 0:i.name)??"Friend",{aiDraftQuestionnaire:s}=await Lt(async()=>{const{aiDraftQuestionnaire:p}=await Promise.resolve().then(()=>Wl);return{aiDraftQuestionnaire:p}},void 0),{subject:o,body:c}=s({prospectName:a,agencyName:(r==null?void 0:r.name)??"your agency",agentName:n==null?void 0:n.name,missingFields:t.missingFields}),d=I(),m=l.update("quotingSessions",e,{questionnaireDraft:`Subject: ${o}
214
215${c}`,updatedAt:d});return m&&fe(m,{message:"AI drafted the quoting questionnaire for staff review.",detail:`${t.missingFields.length} missing field${t.missingFields.length===1?"":"s"} were converted into client questions.`,createdAt:d}),m},sendQuestionnaire(e){var c;const t=this.get(e);if(!t||!t.questionnaireDraft)return null;if(t.lineOfBusiness!=="commercial"&&(!t.carrierQuestionDiscoveryCompletedAt||(((c=t.carrierQuestionSuccessfulIds)==null?void 0:c.length)??0)===0))return t;const r=t.questionnaireDraft.match(/^Subject:\s*(.+)/),n=(r==null?void 0:r[1])??"A few details to finalize your quote",i=t.questionnaireDraft.replace(/^Subject:.*\n\n/,""),a=z.communications.create({tenantId:t.tenantId,customerId:t.customerId,prospectId:t.prospectId,channel:"email",direction:"outbound",subject:n,body:i,createdById:t.createdById,emailDeliveryMode:"manual"}),s=I(),o=l.update("quotingSessions",e,{questionnaireMessageId:a.id,questionnaireSentAt:s,status:"awaiting_reply",updatedAt:s});return o&&(fe(o,{message:"AI quoting questionnaire sent; workflow is awaiting client reply.",detail:`Outbound message ${a.id} is attached to this quoting session.`,createdAt:s,createdById:t.createdById}),Ue(o,{actorId:"ai"})),o},markReplyReceivedAndQuote(e){var i;const t=this.get(e);if(!t)return null;const r=I();if(t.lineOfBusiness!=="commercial"){const a=new Set(t.carrierQuestionSuccessfulIds??[]),s=[...new Set(((i=t.selectedCarrierIds)!=null&&i.length?t.selectedCarrierIds:t.carrierQuestionSuccessfulIds??[]).filter(c=>a.has(c)))],o=l.update("quotingSessions",e,{replyReceivedAt:r,carrierSelectionReadyAt:t.carrierSelectionReadyAt??r,carrierSelectionConfirmedAt:s.length>0?t.carrierSelectionConfirmedAt??r:void 0,selectedCarrierIds:s,carrierQuoteAttempts:[],quotes:[],status:s.length>0?"quoting":"gathering_info",updatedAt:r});return o&&Ue(o,{actorId:"ai"}),fe(o??t,{message:s.length>0?"Client information is ready; verified carrier quote retrieval started.":"Client information is ready, but no verified carrier can be started.",detail:s.length>0?"Only carriers that successfully returned verified portal questions are included.":"Return to carrier selection and retrieve at least one verified carrier questionnaire.",createdAt:r}),s.length>0?this.runQuotes(e):o}const n=l.update("quotingSessions",e,{replyReceivedAt:r,status:"quoting",updatedAt:r});return n&&Ue(n,{actorId:"ai"}),fe(n??t,{message:"Client reply received; AI carrier ranking started.",detail:"The workflow moved from awaiting reply to quoting.",createdAt:r}),this.runQuotes(e)},updateSelectedCarriers(e,t){const r=this.get(e);if(!r)throw new Error("Quoting session not found.");if(r.status==="voided")throw new Error("This quote flow was replaced by a newer quote flow.");const n=z.carriers.listForTenant(r.tenantId),i=new Set(n.map(m=>m.id)),a=[...new Set(t.filter(m=>i.has(m)))],s=new Map(n.map(m=>[m.id,m])),o=I(),c=a.map(m=>{var p;return{carrierId:m,carrierName:((p=s.get(m))==null?void 0:p.name)??"Carrier",status:"pending",message:"Selected for this quote flow.",updatedAt:o}}),d=l.update("quotingSessions",e,{selectedCarrierIds:a,carrierQuoteAttempts:c,quotes:[],carrierSelectionReadyAt:r.carrierSelectionReadyAt??o,carrierSelectionConfirmedAt:a.length>0?o:void 0,status:"gathering_info",updatedAt:o});return Ue(d,{actorId:"ai"}),d},runQuotes(e,t){var y,h,w,T;let r=this.get(e);if(!r)throw new Error("Quoting session not found.");if(r.status==="voided")throw new Error("This quote flow was replaced by a newer quote flow.");if(r.lineOfBusiness!=="commercial"){const b=ri(r,{createdAt:I()});(((y=b.personalCarrierAnswerSet)==null?void 0:y.answerSetDigest)!==((h=r.personalCarrierAnswerSet)==null?void 0:h.answerSetDigest)||((w=b.personalRiskFactDossier)==null?void 0:w.dossierDigest)!==((T=r.personalRiskFactDossier)==null?void 0:T.dossierDigest))&&(r=l.update("quotingSessions",e,{...b,updatedAt:I()})??r)}const n=z.carriers.listForTenant(r.tenantId),i=new Set(n.map(b=>b.id)),a=new Map(n.map(b=>[b.id,b])),s=new Set(r.carrierQuestionSuccessfulIds??[]),o=[...new Set(r.selectedCarrierIds??[])].filter(b=>r.lineOfBusiness==="commercial"||s.has(b)),c=new Set(o),d=I();if(r.lineOfBusiness!=="commercial"&&o.length>0){const b=o.map(_=>md({carrierId:_,session:r})).filter(_=>!_.application);if(b.length>0){const _=new Set(b.flatMap(k=>k.blockingQuestionIds)),A=(r.questionnaireQuestions??[]).filter(k=>_.has(k.id)).map(k=>k.label),v=b.flatMap(k=>k.blockingIssueCount>k.blockingQuestionIds.length?k.missingCarrierFields:[]),S=[...new Set([...A,...v])],C=l.update("quotingSessions",e,{quotes:[],carrierQuoteAttempts:[],missingFields:S,aiSummary:`${S.length||1} carrier application answer${(S.length||1)===1?" needs":"s need"} correction before quote retrieval can begin.`,status:"gathering_info",updatedAt:d});return Ue(C,{actorId:"ai"}),C}}const m=o.map(b=>{var v;const _=a.get(b);return!_||!i.has(b)?{carrierId:b,carrierName:(_==null?void 0:_.name)??"Carrier",status:"failed",errorCode:"CARRIER_NOT_LINKED",message:"This carrier is not linked to the agency.",updatedAt:d}:((v=_.quotingAutomation)==null?void 0:v.agentPortalUrl)??_.agentPortalUrl??_.billingPortalUrl??_.claimsUrl?{carrierId:b,carrierName:_.n
215ame,status:"queued",message:"Waiting for Quotex Connect.",updatedAt:d}:{carrierId:b,carrierName:_.name,status:"failed",errorCode:"CONNECT_PORTAL_UNAVAILABLE",message:"This carrier does not have a configured Quotex Connect portal.",updatedAt:d}}),p=(t==null?void 0:t.status)==="awaiting_reply"?(r.quotes??[]).filter(b=>{var _;return c.has(b.carrierId)&&i.has(b.carrierId)&&b.source==="quotex_connect"&&b.apiStatus==="connected"&&Number.isFinite(b.premium)&&b.premium>0&&!!((_=b.carrierReference)!=null&&_.trim())&&ec(b)}):[],u=m.some(b=>b.status==="queued"),f=o.length===0?"Select at least one carrier before retrieving quotes.":u?`Waiting for verified results from ${m.length} selected carrier${m.length===1?"":"s"} through Quotex Connect.`:"None of the selected carriers can be started. Review each carrier result.",g=l.update("quotingSessions",e,{quotes:p,carrierQuoteAttempts:m,aiSummary:f,status:(t==null?void 0:t.status)==="awaiting_reply"?"awaiting_reply":o.length===0||!u?"gathering_info":"quoting",updatedAt:d});if(Ue(g,{actorId:"ai"}),fe(g,{message:"Carrier quote retrieval assigned to Quotex Connect.",detail:f,createdAt:d}),g.status==="awaiting_reply"){const b=Yo(g);VC(g,{milestone:"supplemental_pending",title:`${b.name} supplemental questionnaire pending`,description:`${b.name}'s accepted markets are partially ranked, but at least one carrier requested supplemental details before it can be included in the final quote review.`,severity:"warning",severityReason:"Carrier response required a second-round supplemental questionnaire."})}return g},beginCarrierQuestionDiscovery(e,t){const r=this.get(e);if(!r)throw new Error("Quoting session not found.");if(r.status==="voided")throw new Error("This quote flow was replaced by a newer quote flow.");if(r.lineOfBusiness==="commercial")throw new Error("Carrier question discovery is only available for personal lines.");const n=t.deviceId.trim();if(!n)throw new Error("Choose the paired Quotex Connect device.");const i=z.carriers.listForTenant(r.tenantId).filter(g=>g.status==="active"),a=new Map(i.map(g=>[g.id,g])),s=[...new Set(t.carrierIds.filter(g=>a.has(g)))];if(s.length===0)throw new Error("Select at least one Connect-ready carrier.");const o=I(),c=(r.carrierQuestionBaseQuestions??r.questionnaireQuestions??[]).map(g=>({...g})),d=new Set(c.map(g=>g.id)),m=Object.fromEntries(Object.entries(r.questionnaireResponses??{}).filter(([g])=>d.has(g))),p=Object.fromEntries(Object.entries(r.questionnaireResponseMeta??{}).filter(([g])=>d.has(g))),u=s.map(g=>{var y;return{carrierId:g,carrierName:((y=a.get(g))==null?void 0:y.name)??"Carrier",status:"pending",message:"Waiting for Quotex Connect to retrieve this carrier's questions.",updatedAt:o}}),f=l.update("quotingSessions",e,{questionnaireQuestions:c,questionnaireResponses:m,questionnaireResponseMeta:p,carrierQuestionBaseQuestions:c,personalQuestionnairePreparedAt:void 0,personalAiMappingDeferredUntilCarrierQuestions:!0,personalCarrierQuestionMappingCompletedAt:void 0,personalCarrierQuestionMappingRecipeVersion:void 0,carrierQuestionDiscoveryStartedAt:o,carrierQuestionDiscoveryCompletedAt:void 0,carrierQuestionDiscoveryDeviceId:n,carrierQuestionRequestedIds:s,carrierQuestionSuccessfulIds:[],carrierQuestionAttempts:u,selectedCarrierIds:s,carrierSelectionReadyAt:r.carrierSelectionReadyAt??o,carrierSelectionConfirmedAt:o,carrierQuoteAttempts:[],quotes:[],missingFields:Fn(c,m),status:"gathering_info",updatedAt:o});if(!f)throw new Error("Carrier question discovery could not be saved.");return fe(f,{message:`Carrier questionnaire retrieval started for ${s.length} carrier${s.length===1?"":"s"}.`,detail:"Quotex Connect is reading the selected carrier portals before the combined client questionnaire is shown.",createdAt:o,createdById:r.createdById}),Ue(f,{actorId:"ai"}),f},syncCarrierQuestionDiscovery(e,t){const r=this.get(e);if(!r)throw new Error("Quoting session not found.");if(r.status==="voided"||JSON.stringify(r.carrierQuestionAttempts??[])===JSON.stringify(t))return r;const n=I();return l.update("quotingSessions",e,{carrierQuestionAttempts:t,updatedAt:n})??r},completeCarrierQuestionDiscovery(e,t){const r=this.get(e);if(!r)throw new Error("Quoting session not found.");if(r.status==="voided"||r.carrierQuestionDiscoveryCompletedAt)return r;const n=new Set(r.carrierQuestionRequestedIds??[]),i=t.carrierResults.filter(f=>n.has(f.carrierId)),a=r.carrierQuestionBaseQuestions??r.questionnaireQuestions??[],s=$v({existingQuestions:a,existingResponses:r.questionnaireResponses,carrierResults:i}),o=new Set(s.rejectedCarrierResults.map(f=>f.carrierId)),c=[...new Set(i.map(f=>f.carrierId).filter(f=>!o.has(f)))],d=[...new Set(r.carrierQuestionRequestedIds??[])],m=I(),p=Object.fromEntries(Object.entries(s.responseSourceIds).flatMap(([f,g])=>{var h;const y=(h=r.questionnaireResponseMeta)==null?void 0:h[g];return y?[[f,y]]:[]})),u=l.update("quotingSessions",e,{questionnaireQuestions:s.questions,questionnaireResponses:s.responses,questionnaireResponseMeta:p,personalQuestionnairePreparedAt:void 0,personalAiMappingDeferredUntilCarrierQuestions:!0,personalCarrierQuestionMappingCompletedAt:void 0,personalCarrierQuestionMappingRecipeVersion:void 0,carrierQuestionDiscoveryCompletedAt:m,carrierQuestionSuccessfulIds:c,carrierQuestionAttempts:t.attempts,selectedCarrierIds:d,carrierSelectionConfirmedAt:d.length>0?r.carrierSelectionConfirmedAt??m:void 0,missingFields:Fn(s.questions,s.responses),aiSummary:c.length>0?`Built the carrier-only AI mapping target from ${c.length} verified carrier portal${c.length===1?"":"s"}. Every questionnaire field has carrier-page evidence, and AI mapping is ready to run against this exact question set.`:"No selected carrier returned a verified questionnaire. Review the carrier results and try again.",status:"gathering_info",updatedAt:m});if(!u)throw new Error("The combined carrier questionnaire could not be saved.");return fe(u,{message:c.length>0?"Verified carrier-only questions were combined for AI mapping.":"Carrier question retrieval finished without a verified questionnaire.",detail:c.length>0?`${c.length} selected carrier${c.length===1?"":"s"} succeeded. Equivalent carrier questions were combined, per-question portal provenance was preserved, and no intake-template questions were added.`:"No carrier was allowed to advance to questionnaire or quote retrieval.",createdAt:m,createdById:r.createdById}),Ue(u,{actorId:"ai"}),u},syncVerifiedConnectQuotes(e,t,r){var y;const n=this.get(e);if(!n)throw new Error("Quoting session not found.");if(n.status==="voided")return n;const i=new Set(l.list("carrierLinks").filter(h=>h.tenantId===n.tenantId&&h.active).map(h=>h.carrierId)),a=new Set(n.selectedCarrierIds??[]),s=new Map;for(const h of t)!a.has(h.carrierId)||!i.has(h.carrierId)||h.source!=="quotex_connect"||h.apiStatus!=="connected"||!Number.isFinite(h.premium)||h.premium<=0||!((y=h.carrierReference)!=null&&y.trim())||!ec(h)||s.set(h.carrierId,h);const o=[...s.values()].sort((h,w)=>w.score-h.score||h.premium-w.premium),c=(r==null?void 0:r.allFinished)===!0&&o.length>0,d=(r==null?void 0:r.allFinished)===!0&&o.length===0,m=n.status==="awaiting_reply"&&!c?"awaiting_reply":c?"complete":"quoting",p=o.length>0?`${o.length} verified carrier portal quote${o.length===1?"":"s"} received through Quotex Connect.`:d?"Quote retrieval finished without a verified carrier quote. Review each selected carrier result.":"Waiting for verified carrier portal results from Quotex Connect.";if(n.status===m&&n.aiSummary===p&&JSON.stringify(n.quotes??[])===JSON.stringify(o)&&JSON.stringify(n.carrierQuoteAttempts??[])===JSON.stringify((r==null?void 0:r.attempts)??n.carrierQuoteAttempts??[]))return n;const f=I(),g=l.update("quotingSessions",e,{quotes:o,carrierQuoteAttempts:(r==null?void 0:r.attempts)??n.carrierQuoteAttempts,aiSummary:p,status:m,updatedAt:f});if(Ue(g,{actorId:"ai"}),c&&o.length>0&&n.status!=="complete"){const h=Yo(g);Wp(g,["supplemental_pending","quote_ready"]),Gp(g,{title:`${h.name} quote options ready`,summary:`${o.length} verified carrier portal quote${o.length===1?" is":"s are"} ready for review.`,severity:"warning",severityReason:"Verified carrier portal results are ready for agent review."}),fe(g,{message:`Quotex Connect returned ${o.length} verified carrier quote${o.length===1?"":"s"}
215.`,detail:p,createdAt:f})}return g},implementPolicy(e){var _,A,v,S;const t=this.get(e.sessionId);if(!t)throw new Error("Quoting session not found.");const r=t.quotes.find(C=>C.carrierId===e.carrierId);if(!r)throw new Error("Carrier quote not found on this session.");if((_=r.implementation)!=null&&_.policyId){const C=l.list("policies").find(k=>{var O;return k.id===((O=r.implementation)==null?void 0:O.policyId)});if(C)return{session:t,policy:C,carrierPortalUrl:r.implementation.carrierPortalUrl,carrierReference:r.implementation.carrierReference,mode:r.implementation.mode,bindingTrace:r.implementation.bindingTrace}}const n=l.list("carriers").find(C=>C.id===e.carrierId);if(!n)throw new Error("Carrier not found.");const i=t.prospectId?l.list("prospects").find(C=>C.id===t.prospectId):void 0,a=t.customerId??(i==null?void 0:i.customerId);if(!a)throw new Error("Convert this prospect to a client before implementing a carrier policy.");if(!l.list("customers").find(C=>C.id===a))throw new Error("Customer record not found.");let o=t.assetId?l.list("assets").find(C=>C.id===t.assetId):void 0;if(o)o.status!=="insured"&&l.update("assets",o.id,{status:"insured"});else{const C=String(((A=t.assetDetails)==null?void 0:A.address)??"").trim(),k=String(t.publicFields["Property address"]??"").trim(),O={...t.assetDetails??{},address:C||k},x=ta(t.assetType,O);o=z.assets.create({tenantId:t.tenantId,customerId:a,type:t.assetType,label:x,estimatedValue:t.estimatedValue||0,details:{...t.assetDetails??{},publicFields:t.publicFields,createdFromQuotingSessionId:t.id},status:"insured"}),vS(o.id,o.label)}const c=I(),d=l.list("policies").find(C=>C.customerId===a&&C.assetId===o.id&&C.carrierId===n.id&&C.status==="bound"),m=(d==null?void 0:d.policyNumber)??_S(n,t),p=((v=r.providerTrace)!=null&&v.liveReady,n.agentPortalUrl),f=((S=r.providerTrace)==null?void 0:S.executionId)??`${m}-${c.slice(0,10).replace(/-/g,"")}`,g={tenantId:t.tenantId,customerId:a,assetId:o.id,carrierId:n.id,policyNumber:m,premiumEstimate:r.premium,finalPremium:r.premium,effectiveDate:c,renewalDate:bS(c),status:"bound",renewalStatus:"not_due",agentId:e.implementedById,department:t.lineOfBusiness==="commercial"?"commercial":"personal",paymentFrequency:"annual",billingMethod:"direct_bill",billingPayer:"client",billingStatus:"current",billingReference:f,billingLastVerifiedAt:c};let y=d?l.update("policies",d.id,g):z.policies.create(g);const h=rp({carrier:n,session:t,quote:r,policy:y,implementedById:e.implementedById}),w=h.status==="bound_on_carrier"?"live_api":"manual_workflow";y=l.update("policies",y.id,{carrierBindingStatus:h.status,carrierBindingReference:h.carrierReference,carrierBindingMode:w,carrierBindingTrace:h,billingReference:h.carrierReference,billingNotes:h.status==="bound_on_carrier"?`Registered on carrier side through ${h.providerLabel}.`:`Quotex policy record created. Carrier-side registration requires ${h.providerLabel}; ${h.blockingReasons.join("; ")||"live binding confirmation pending"}.`}),Hd({session:t,policy:y,carrier:n,status:h.status,reasons:h.blockingReasons,actorId:e.implementedById});const T=t.quotes.map(C=>C.carrierId===e.carrierId?{...C,implementation:{status:"implemented",policyId:y.id,carrierReference:h.carrierReference,carrierPortalUrl:p,implementedAt:c,implementedById:e.implementedById,mode:w,bindingTrace:h}}:C),b=l.update("quotingSessions",t.id,{quotes:T,updatedAt:c});return fe({...t,customerId:a,assetId:o.id},{message:`${n.name} quote implemented as Policy #${m} (${w==="live_api"?"carrier registered":"carrier binding pending/manual"}). Carrier reference ${h.carrierReference}.`,detail:`Policy ${y.id} and billing record fields were created from quoting session ${t.id}.`,createdAt:c,createdById:e.implementedById,policyId:y.id,assetId:o.id}),{session:b,policy:y,carrierPortalUrl:p,carrierReference:h.carrierReference,mode:w,bindingTrace:h}},async implementPolicyWithCarrierBind(e){const t=this.implementPolicy(e),r=this.get(e.sessionId)??t.session,n=r.quotes.find(d=>d.carrierId===e.carrierId),i=l.list("carriers").find(d=>d.id===e.carrierId);if(!n||!i)return t;const a=await Jw({carrier:i,session:r,quote:n,policy:t.policy,implementedById:e.implementedById}),s=a.status==="bound_on_carrier"?"live_api":"manual_workflow",o=l.update("policies",t.policy.id,{carrierBindingStatus:a.status,carrierBindingReference:a.carrierReference,carrierBindingMode:s,carrierBindingTrace:a,billingReference:a.carrierReference,billingNotes:a.status==="bound_on_carrier"?`Registered on carrier side through ${a.providerLabel}.`:`Quotex policy record created. Carrier-side registration requires ${a.providerLabel}; ${a.blockingReasons.join("; ")||"live binding confirmation pending"}.`})??t.policy;Hd({session:r,policy:o,carrier:i,status:a.status,reasons:a.blockingReasons,actorId:e.implementedById});const c=l.update("quotingSessions",r.id,{quotes:r.quotes.map(d=>d.carrierId===e.carrierId&&d.implementation?{...d,implementation:{...d.implementation,mode:s,carrierReference:a.carrierReference,bindingTrace:a}}:d),updatedAt:I()})??r;return a.status==="bound_on_carrier"&&fe({...r,customerId:o.customerId,assetId:o.assetId},{message:`${i.name} confirmed carrier-side registration for Policy #${o.policyNumber??o.id}. Carrier reference ${a.carrierReference}
215.`,detail:`${a.providerLabel} returned a bound-on-carrier confirmation for quoting session ${r.id}.`,createdById:e.implementedById,policyId:o.id,assetId:o.assetId}),{session:c,policy:o,carrierPortalUrl:t.carrierPortalUrl,carrierReference:a.carrierReference,mode:s,bindingTrace:a}},stepBack(e){const t=this.get(e);if(!t)return null;const r=I(),n={updatedAt:r};if(t.lineOfBusiness==="commercial"){if(t.commercialSecondRoundSentAt||t.commercialSupplementalsCompletedAt){const a=(t.questionnaireQuestions??[]).filter(o=>o.round!=="second_round"),s=l.update("quotingSessions",e,{...n,questionnaireQuestions:a,questionnaireMessageId:void 0,questionnaireDraft:void 0,questionnaireSentAt:void 0,replyReceivedAt:void 0,commercialSecondRoundSentAt:void 0,commercialSupplementalsCompletedAt:void 0,missingFields:[],quotes:[],status:"quoting",aiSummary:"AI moved back to carrier response review before sending supplementals."});return s&&fe(s,{message:"Commercial quote workflow moved back one step.",detail:"The supplemental send step was reopened so staff can review carrier follow-up handling again.",createdAt:r,createdById:t.createdById,source:"agent"}),s}if(t.commercialApplicationSentAt||(t.commercialCarrierSubmissions??[]).length>0){const a=l.update("quotingSessions",e,{...n,commercialApplicationSentAt:void 0,commercialCarrierSubmissions:[],questionnaireMessageId:void 0,questionnaireDraft:void 0,questionnaireSentAt:void 0,replyReceivedAt:void 0,quotes:[],status:"gathering_info",aiSummary:"AI moved back to application review before carrier submission."});return a&&fe(a,{message:"Commercial quote workflow moved back one step.",detail:"The carrier send step was reopened so staff can review the ACORD packet and questionnaire answers again.",createdAt:r,createdById:t.createdById,source:"agent"}),a}if(t.commercialQuestionnairePreparedAt||(t.questionnaireQuestions??[]).length>0){const a=l.update("quotingSessions",e,{...n,commercialQuestionnairePreparedAt:void 0,questionnaireQuestions:[],questionnaireMessageId:void 0,questionnaireDraft:void 0,questionnaireSentAt:void 0,replyReceivedAt:void 0,missingFields:[],quotes:[],status:"gathering_info",aiSummary:"AI moved back to the ACORD mapping review before generating the questionnaire."});return a&&fe(a,{message:"Commercial quote workflow moved back one step.",detail:"The commercial questionnaire step was reopened so the AI can regenerate it from the latest ACORD fill audit.",createdAt:r,createdById:t.createdById,source:"agent"}),a}return fe(t,{message:"Commercial quote workflow moved back to setup.",detail:"The initial AI mapping session was closed so staff can adjust policy type or ACORD document selection.",createdAt:r,createdById:t.createdById,source:"agent"}),l.remove("quotingSessions",e),null}if(t.status==="quoting"||t.status==="complete"||t.quotes.length>0||(t.carrierQuoteAttempts??[]).some(a=>a.status!=="pending")){const a=l.update("quotingSessions",e,{...n,quotes:[],carrierQuoteAttempts:[],replyReceivedAt:void 0,personalQuestionnairePreparedAt:t.personalQuestionnairePreparedAt??r,status:"awaiting_reply",aiSummary:"Questionnaire review reopened before carrier quote retrieval."});return a&&fe(a,{message:"Personal quote workflow moved back to questionnaire review.",detail:"The current carrier quote attempt was closed so every answer can be reviewed before a new retrieval starts.",createdAt:r,createdById:t.createdById,source:"agent"}),a}if(t.status==="complete"||t.quotes.length>0)return l.update("quotingSessions",e,{...n,quotes:[],status:t.questionnaireSentAt?"awaiting_reply":"gathering_info",aiSummary:"AI moved back before quote ranking."});if(t.status==="awaiting_reply"||t.questionnaireSentAt)return l.update("quotingSessions",e,{...n,questionnaireMessageId:void 0,questionnaireDraft:void 0,questionnaireSentAt:void 0,replyReceivedAt:void 0,status:"gathering_info",aiSummary:"AI moved back before sending the questionnaire."});if(t.personalQuestionnairePreparedAt){const a=l.update("quotingSessions",e,{...n,personalQuestionnairePreparedAt:void 0,status:"gathering_info",aiSummary:"AI moved back to the personal-lines mapping review."});return a&&fe(a,{message:"Personal quote workflow moved back one step.",detail:"The questionnaire review step was reopened so staff can inspect the AI mapping again.",createdAt:r,createdById:t.createdById,source:"agent"}),a}if(t.carrierQuestionDiscoveryCompletedAt){const a=(t.carrierQuestionBaseQuestions??(t.questionnaireQuestions??[]).filter(m=>!m.carrierId)).map(m=>({...m})),s=new Set(a.map(m=>m.id)),o=Object.fromEntries(Object.entries(t.questionnaireResponses??{}).filter(([m])=>s.has(m))),c=Object.fromEntries(Object.entries(t.questionnaireResponseMeta??{}).filter(([m])=>s.has(m))),d=l.update("quotingSessions",e,{...n,questionnaireQuestions:a,questionnaireResponses:o,questionnaireResponseMeta:c,missingFields:Fn(a,o),carrierQuestionDiscoveryStartedAt:void 0,carrierQuestionDiscoveryCompletedAt:void 0,carrierQuestionDiscoveryDeviceId:void 0,carrierQuestionRequestedIds:void 0,carrierQuestionSuccessfulIds:void 0,carrierQuestionAttempts:[],carrierSelectionConfirmedAt:void 0,personalAiMappingDeferredUntilCarrierQuestions:!0,personalCarrierQuestionMappingCompletedAt:void 0,personalCarrierQuestionMappingRecipeVersion:void 0,status:"gathering_info",aiSummary:"Carrier selection reopened. AI mapping will run again after the updated carrier question set is verified."});return d&&fe(d,{message:"Personal quote workflow moved back to carrier selection.",detail:"Carrier-only questions and their AI mapping were cleared so the next selection can build a fresh verified question set.",createdAt:r,createdById:t.createdById,source:"agent"}),d}return t.carrierSelectionReadyAt?(fe(t,{message:"Personal quote workflow moved back to setup.",detail:"The pre-mapping session was closed so staff can adjust the asset or policy line before choosing carriers.",createdAt:r,createdById:t.createdById,source:"agent"}),l.remove("quotingSessions",e),null):t},reset(e){const t=this.get(e);t&&fe(t,{message:"AI quoting workflow was reset by staff.",detail:"The prior quoting session was discarded so the agent can restart with updated line, asset, or intake details.",createdById:t.createdById}),l.remove("quotingSessions",e)}},messagePins:{MAX_PINS:5,listForUser(e,t){return l.list("messagePins").filter(r=>r.tenantId===e&&r.userId===t).sort((r,n)=>r.pinnedAt<n.pinnedAt?-1:1)},isPinned(e,t,r,n){return l.list("messagePins").find(i=>i.tenantId===e&&i.userId===t&&i.kind===r&&i.refId===n)},pin(e){const t=this.isPinned(e.tenantId,e.userId,e.kind,e.refId);if(t)return t;if(this.listForUser(e.tenantId,e.userId).length>=this.MAX_PINS)throw new Error(`You already have ${this.MAX_PINS} pinned threads. Unpin one before pinning another.`);const n={id:N("pin"),tenantId:e.tenantId,userId:e.userId,kind:e.kind,refId:e.refId,pinnedAt:I()};return l.insert("messagePins",n),n},unpin(e,t,r,n){const i=this.isPinned(e,t,r,n);i&&l.remove("messagePins",i.id)},countForUser(e,t){return this.listForUser(e,t).length}},messageMutes:{isMuted(e,t,r,n){return l.list("messageMutes").find(i=>i.tenantId===e&&i.userId===t&&i.kind===r&&i.refId===n)},mute(e){const t=this.isMuted(e.tenantId,e.userId,e.kind,e.refId);if(t)return t;const r={id:N("mute"),tenantId:e.tenantId,userId:e.userId,kind:e.kind,refId:e.refId,mutedAt:I()};return l.insert("messageMutes",r),r},unmute(e,t,r,n){const i=this.isMuted(e,t,r,n);i&&l.remove("messageMutes",i.id)},toggle(e){this.isMuted(e.tenantId,e.userId,e.kind,e.refId)?this.unmute(e.tenantId,e.userId,e.kind,e.refId):this.mute(e)}},messageReports:{listByTenant(e){return oe(l.list("messageReports"),e).sort((t,r)=>t.reportedAt<r.reportedAt?1:-1)},listOpen(e){return this.listByTenant(e).filter(t=>t.status==="open")},report(e){const t=e.reason.trim()||"Reported from message settings.",r={id:N("msg_report"),tenantId:e.tenantId,userId:e.userId,kind:e.kind,refId:e.refId,reason:t,status:"open",reportedAt:I()};return l.insert("messageReports",r),l.insert("audit",{id:N("audit"),tenantId:e.tenantId,actorId:e.userId,action:"message.reported",entityType:`message_${e.kind}`,entityId:e.refId,metadata:{reason:t},createdAt:r.reportedAt}),r},markReviewed(e,t){const r=l.update("messageReports",e,{status:"reviewed"});return r&&l.insert("audit",{id:N("audit"),tenantId:r.tenantId,actorId:t,action:"message_report.reviewed",entityType:`message_${r.kind}`,entityId:r.refId,metadata:{reportId:e},createdAt:I()}),r??void 0}},messageBlocks:{isBlocked(e,t,r,n){return l.list("messageBlocks").find(i=>i.tenantId===e&&i.userId===t&&i.kind===r&&i.refId===n)},block(e){const t=this.isBlocked(e.tenantId,e.userId,e.kind,e.refId);if(t)return t;const r={id:N("msg_block"),tenantId:e.tenantId,userId:e.userId,kind:e.kind,refId:e.refId,blockedAt:I()};return l.insert("messageBlocks",r),z.messageMutes.mute(e),l.insert("audit",{id:N("audit"),tenantId:e.tenantId,actorId:e.userId,action:"message.blocked",entityType:`message_${e.kind}`,entityId:e.refId,createdAt:r.blockedAt}),r},unblock(e,t,r,n){const i=this.isBlocked(e,t,r,n);
215i&&l.remove("messageBlocks",i.id),l.insert("audit",{id:N("audit"),tenantId:e,actorId:t,action:"message.unblocked",entityType:`message_${r}`,entityId:n,createdAt:I()})},toggle(e){this.isBlocked(e.tenantId,e.userId,e.kind,e.refId)?this.unblock(e.tenantId,e.userId,e.kind,e.refId):this.block(e)}},security:{normalizeIpAddress(e){return Ln(e)},listIncidents(e){return oe(l.list("securityIncidents"),e).sort((t,r)=>t.createdAt<r.createdAt?1:-1)},listOpenIncidents(e){return this.listIncidents(e).filter(t=>t.status==="open")},listBans(e,t=!1){return oe(l.list("securityBans"),e).filter(r=>!t||r.active).sort((r,n)=>r.createdAt<n.createdAt?1:-1)},getActiveBanForUser(e,t){return l.list("securityBans").find(r=>r.tenantId===e&&r.active&&r.kind==="user"&&r.userId===t)},getActiveBanForIp(e,t){const r=Ln(t);if(r)return l.list("securityBans").find(n=>n.tenantId===e&&n.active&&n.kind==="ip"&&Ln(n.ipAddress)===r)},accessBlockFor(e){if(e.tenantId){if(e.userId){const t=this.getActiveBanForUser(e.tenantId,e.userId);if(t)return t}return this.getActiveBanForIp(e.tenantId,e.ipAddress)}},flag(e){var a,s;const t=z.users.get(e.reportedById),r=e.subjectUserId?z.users.get(e.subjectUserId):void 0,n=I(),i={id:N("sec_incident"),tenantId:e.tenantId,reportedById:e.reportedById,reportedByName:t==null?void 0:t.name,subjectKind:e.subjectKind??tC(r),subjectUserId:e.subjectUserId,subjectLabel:((a=e.subjectLabel)==null?void 0:a.trim())||(r==null?void 0:r.name)||((s=e.ipAddress)==null?void 0:s.trim())||"Unknown subject",ipAddress:Ln(e.ipAddress)||void 0,severity:e.severity??"medium",reason:e.reason.trim()||"Suspicious behavior flagged for review.",status:"open",createdAt:n};return l.insert("securityIncidents",i),l.insert("audit",{id:N("audit"),tenantId:e.tenantId,actorId:e.reportedById,action:"security.incident_flagged",entityType:"security_incident",entityId:i.id,metadata:{severity:i.severity,subjectKind:i.subjectKind,subjectUserId:i.subjectUserId,ipAddress:i.ipAddress,reason:i.reason},createdAt:n}),i},updateIncidentStatus(e,t,r){const n=l.update("securityIncidents",e,{status:t,reviewedAt:I(),reviewedById:r});return n&&l.insert("audit",{id:N("audit"),tenantId:n.tenantId,actorId:r,action:`security.incident_${t}`,entityType:"security_incident",entityId:e,createdAt:I()}),n??void 0},banUser(e){const t=z.users.get(e.userId);if(!t||t.tenantId!==e.tenantId)return null;const r=this.getActiveBanForUser(e.tenantId,e.userId);if(r)return r;const n=z.users.get(e.createdById),i=I(),a={id:N("sec_ban"),tenantId:e.tenantId,kind:"user",userId:e.userId,subjectLabel:t.name,reason:e.reason.trim()||"User banned by agency security control.",createdById:e.createdById,createdByName:n==null?void 0:n.name,incidentId:e.incidentId,active:!0,createdAt:i};return l.insert("securityBans",a),z.users.update(e.userId,{active:!1,staffAccessStatus:"banned",staffAccessUpdatedAt:i,staffAccessUpdatedById:e.createdById}),e.incidentId&&l.update("securityIncidents",e.incidentId,{resultingBanId:a.id,status:"reviewed",reviewedAt:i,reviewedById:e.createdById}),l.insert("audit",{id:N("audit"),tenantId:e.tenantId,actorId:e.createdById,action:"security.user_banned",entityType:"user",entityId:e.userId,metadata:{banId:a.id,reason:a.reason,incidentId:e.incidentId},createdAt:i}),a},banIp(e){const t=Ln(e.ipAddress);if(!t)return null;const r=this.getActiveBanForIp(e.tenantId,t);if(r)return r;const n=z.users.get(e.createdById),i=I(),a={id:N("sec_ban"),tenantId:e.tenantId,kind:"ip",ipAddress:t,subjectLabel:t,reason:e.reason.trim()||"IP address banned by agency security control.",createdById:e.createdById,createdByName:n==null?void 0:n.name,incidentId:e.incidentId,active:!0,createdAt:i};return l.insert("securityBans",a),e.incidentId&&l.update("securityIncidents",e.incidentId,{resultingBanId:a.id,status:"reviewed",reviewedAt:i,reviewedById:e.createdById}),l.insert("audit",{id:N("audit"),tenantId:e.tenantId,actorId:e.createdById,action:"security.ip_banned",entityType:"ip_address",entityId:t,metadata:{banId:a.id,reason:a.reason,incidentId:e.incidentId},createdAt:i}),a},revokeBan(e,t){if(!l.list("securityBans").find(i=>i.id===e))return;const n=l.update("securityBans",e,{active:!1,revokedAt:I(),revokedById:t});return n&&l.insert("audit",{id:N("audit"),tenantId:n.tenantId,actorId:t,action:"security.ban_revoked",entityType:n.kind==="user"?"user":"ip_address",entityId:n.userId??n.ipAddress??e,metadata:{banId:e,reason:n.reason},createdAt:I()}),n??void 0}},esign:{listAwaitingCustomerSignature(e){return l.list("documents").filter(t=>t.tenantId===e&&!!t.customerEsignRequired&&!!t.customerEsignSentAt&&!t.customerEsignSignedAt).sort((t,r)=>t.customerEsignSentAt<r.customerEsignSentAt?1:-1)},listAwaitingAgentSignature(e){return l.list("documents").filter(t=>t.tenantId===e&&!!t.agentEsignRequired&&!t.agentEsignSignedAt).sort((t,r)=>t.uploadedAt<r.uploadedAt?1:-1)},setRequirements(e,t){const r={...t};return t.customerEsignRequired===!1&&(r.customerEsignSentAt=void 0,r.customerEsignSignedAt=void 0,r.esignCommunicationId=void 0),t.agentEsignRequired===!1&&(r.agentEsignSignedAt=void 0,r.agentEsignTaskId=void 0,r.agentEsignAssignedToId=void 0),l.update("documents",e,r)},seedRenewalPackets(e,t){const r=l.list("renewals").filter(i=>i.tenantId===e&&i.status==="upcoming"),n=[];return r.forEach(i=>
215{const a=l.list("policies").find(m=>m.id===i.policyId);if(!a)return;const s=l.list("customers").find(m=>m.id===a.customerId);if(!s||l.list("documents").filter(m=>m.policyId===a.id).some(m=>m.customerEsignRequired&&!m.customerEsignSignedAt))return;const d={id:N("doc"),tenantId:e,uploadedById:t??"ai",fileName:`${(a.policyNumber??"Policy").toString()}-renewal-packet.pdf`,fileType:"application/pdf",type:"endorsement_document",visibility:"customer_visible",status:"approved",storagePath:`synthetic/${a.id}/renewal-packet.pdf`,customerId:s.id,policyId:a.id,uploadedAt:I(),customerEsignRequired:!0};l.insert("documents",d),n.push(d)}),n},autoSendCustomerPackets(e,t,r){return{sent:[]}},autoCreateAgentEsignTasks(e,t){const r=l.list("documents").filter(i=>i.tenantId===e&&!!i.agentEsignRequired&&!i.agentEsignSignedAt&&!i.agentEsignTaskId),n=[];return r.forEach(i=>{const a=i.customerId?l.list("customers").find(m=>m.id===i.customerId):null,s=i.agentEsignAssignedToId?[]:xa(a),o=i.agentEsignAssignedToId??s[0],c=N("task"),d={id:c,tenantId:e,title:`E-sign required: ${i.fileName}`,description:a?`${a.name}'s record needs your signature on ${i.fileName}.`:`${i.fileName} needs your signature to move forward.`,customerId:i.customerId,source:"ai_notification",severity:"warning",severityReason:"Document waiting on agent e-signature.",status:"open",assignedToId:o,additionalAssignedToIds:!i.agentEsignAssignedToId&&s.length>1?s.slice(1):void 0,awaitingManagerAssignment:o?void 0:!0,createdById:t,createdAt:I()};l.insert("tasks",d),l.update("documents",i.id,{agentEsignTaskId:c}),n.push({task:d,document:i})}),{created:n}},runAll(e,t,r){const n=this.seedRenewalPackets(e,t),{sent:i}=this.autoSendCustomerPackets(e,t,r),{created:a}=this.autoCreateAgentEsignTasks(e,t);return{seeded:n,customerSent:i,agentTasks:a}},markCustomerSigned(e){return null},markAgentSigned(e,t){const r=l.list("documents").find(s=>s.id===e);if(!r)return null;const n=t?l.list("users").find(s=>s.id===t):null,i=n==null?void 0:n.electronicSignature,a=l.update("documents",e,{agentEsignSignedAt:I(),agentEsignSignatureName:i==null?void 0:i.name,agentEsignSignatureFont:i==null?void 0:i.fontFamily,agentEsignSignatureSize:i==null?void 0:i.fontSize});return a&&n&&l.insert("statusEvents",{id:N("se"),tenantId:r.tenantId,source:"agent",message:`${n.name} e-signed ${r.fileName}; saved electronic signature was applied to the document record.`,visibility:"internal",customerId:r.customerId,assetId:r.assetId,policyId:r.policyId,claimId:r.claimId,documentId:r.id,createdAt:a.agentEsignSignedAt??I(),createdById:n.id}),r.agentEsignTaskId&&l.update("tasks",r.agentEsignTaskId,{status:"resolved",completedAt:I(),completedById:t}),a},applySavedAgentSignature(e,t){var n,i;const r=l.list("users").find(a=>a.id===t);return(i=(n=r==null?void 0:r.electronicSignature)==null?void 0:n.name)!=null&&i.trim()?this.markAgentSigned(e,t):null},applySavedAgentSignatureToPending(e,t){var i,a;const r=l.list("users").find(s=>s.id===t);return(a=(i=r==null?void 0:r.electronicSignature)==null?void 0:i.name)!=null&&a.trim()?l.list("documents").filter(s=>s.tenantId===e&&!!s.agentEsignRequired&&!s.agentEsignSignedAt&&(!s.agentEsignAssignedToId||s.agentEsignAssignedToId===t)).map(s=>this.markAgentSigned(s.id,t)).filter(s=>!!s):[]}},helpers:{assetTypeLabel(e){return{coastal_home:"Coastal Home",luxury_vehicle:"Luxury Vehicle",yacht:"Yacht",jewelry:"Jewelry",umbrella_liability:"Umbrella Liability",full_portfolio:"Full Portfolio",other:"Other"}[e]},clientCodeFor(e){return e?e.clientCode?e.clientCode:`CL-${e.id.slice(-6).toUpperCase()}`:"—"},departmentLabel(e){return((e==null?void 0:e.department)??"personal")==="commercial"?"Commercial Lines":"Personal Lines"},documentTypeLabel(e){return{driver_license:"Driver's license",ssn_documentation:"SSN documentation",proof_of_insurance:"Proof of insurance",asset_information:"Asset information",policy_document:"Policy document",declarations_page:"Declarations page",insurance_id_card:"Insurance ID card",policy_booklet:"Policy booklet / forms",endorsement_document:"Endorsement document",deposit_receipt:"Deposit receipt",payment_receipt:"Payment receipt",appraisal:"Appraisal",wind_mitigation:"Wind mitigation",inspection_report:"Inspection report",carrier_appetite_guide:"Carrier appetite guide",underwriting_manual:"Underwriting manual",claim_document:"Claim document",cancellation_notice:"Cancellation / lapse notice",carrier_correspondence:"Carrier correspondence",agency_template:"Agency template / form",other:"Other"}[e]??e.replace(/_/g," ")},documentDisplayName(e){var t;return((t=e.documentName)==null?void 0:t.trim())||z.helpers.documentTypeLabel(e.type)},paymentFrequencyLabel(e){return e?{monthly:"Monthly",quarterly:"Quarterly",semi_annual:"Semi-annual",annual:"Annual"}[e]??e:"—"},logDocumentDownload(e){l.insert("statusEvents",{id:N("se"),tenantId:e.tenantId,source:e.actorRole==="customer"?"customer":"system",message:`Document downloaded${e.fileName?`: ${e.fileName}`:""} by ${e.actorRole??"user"}${e.actorId?` (${e.actorId})`:""}.`,visibility:"internal",customerId:e.customerId,policyId:e.policyId,assetId:e.assetId,documentId:e.documentId,createdAt:I(),createdById:e.actorId}),l.insert("audit",{id:N("audit"),tenantId:e.tenantId,actorId:e.actorId??"anonymous",action:"document.download",entityType:"document",entityId:e.documentId,metadata:{f
215ileName:e.fileName,customerId:e.customerId,policyId:e.policyId},createdAt:I()})}}};function Ai(e){if(!e)return null;const t=e.trim().toLowerCase();if(!t)return null;try{const r=/^https?:\/\//.test(t)?t:`https://${t}`;return new URL(r).hostname.replace(/^www\./,"")}catch{return t.replace(/^https?:\/\//,"").replace(/^www\./,"").split("/")[0]||null}}function wf(e){var t;return((t=e.websiteSlug)==null?void 0:t.trim())||di(e.name)}function U0(e,t){const r=Ai(t)??(t==null?void 0:t.trim().toLowerCase());return r?e.find(n=>{const i=wf(n).toLowerCase(),a=Ai(n.website);return n.id.toLowerCase()===r||i===r||a===r})??null:null}function V0(e,t={}){var a;const r=(a=t.agencyId)==null?void 0:a.trim();if(r){const s=e.filter(o=>o.id===r);return{isBound:!0,agencyId:r,agency:s.length===1&&s[0].active?s[0]:null}}const n=Ai(t.host),i=n?e.filter(s=>Ai(s.website)===n):[];return i.length>0?{isBound:!0,agencyId:i.length===1?i[0].id:null,agency:i.length===1&&i[0].active?i[0]:null}:{isBound:!1,agencyId:null,agency:null}}function UT(e){var a,s,o,c,d,m;const t=wf(e),r=`agency=${encodeURIComponent(e.id)}`,n=pg()??e.portalBaseUrl??"",i=p=>{const u=p.includes("?")?`${p}&${r}`:`${p}?${r}`;return n?gg(n,u):u};return{agencyId:e.id,agencyName:e.name,slug:t,brandColor:e.brandColor||"#0d0c09",logoUrl:e.logoUrl||void 0,websiteHost:Ai(e.website)??void 0,contactEmail:e.contactEmail,phone:e.phone,address:e.address,serviceAreas:e.serviceAreas,headline:((a=e.websiteHeadline)==null?void 0:a.trim())||`${e.name} private client insurance`,intro:((s=e.websiteIntro)==null?void 0:s.trim())||`A branded client experience for high-value homes, vehicles, yachts, jewelry, and portfolio coverage in ${e.serviceAreas.join(", ")||"your state"}.`,quoteStartUrl:((o=e.quoteStartUrl)==null?void 0:o.trim())||"/quote/start",customerPortalUrl:((c=e.customerPortalUrl)==null?void 0:c.trim())||"/login",customerLoginUrl:((d=e.customerPortalUrl)==null?void 0:d.trim())||"/login",employeeLoginUrl:i("/employee/login"),masterLoginUrl:i("/master/login"),allowedDomains:(m=e.websiteAllowedDomains)!=null&&m.length?ga(e.websiteAllowedDomains):ga(e.website),portalModules:{...Ou,...e.websitePortalModules??{}}}}function _f(){return V0(z.agencies.list(),{agencyId:mg(),host:fg()})}const Af=ce.createContext(null),oc="quotex.tenantId.v1";function j0(){var a;const e=z.agencies.list(),t=_f();if(t.isBound)return t.agencyId;const r=typeof window<"u"?new URLSearchParams(window.location.search):null,n=r==null?void 0:r.get("agency"),i=U0(e,n);if(i!=null&&i.active)return i.id;if(typeof window<"u")try{const s=window.localStorage.getItem(oc);if(e.some(o=>o.id===s&&o.active))return s}catch{}return((a=e.find(s=>s.active))==null?void 0:a.id)??null}function Q0({children:e}){const{user:t}=Wh(),[r,n]=ce.useState(0),[i,a]=ce.useState(()=>j0());ce.useEffect(()=>Ph(()=>n(m=>m+1)),[]);const s=_f(),o=t==null?s.isBound?s.agencyId:i:t.role==="master_admin"?i:t.tenantId??null,c=ce.useMemo(()=>!t&&s.isBound?s.agency:o?z.agencies.get(o)??null:null,[o,r,t,s.isBound,s.agency]),d=m=>{if(!(t&&t.role!=="master_admin")&&!(!t&&s.isBound)&&(a(m),!(typeof window>"u")))try{m?window.localStorage.setItem(oc,m):window.localStorage.removeItem(oc)}catch{}};return J.jsx(Af.Provider,{value:{agency:c,setAgencyId:d},children:e})}function VT(){const e=ce.useContext(Af);if(!e)throw new Error("useTenant must be inside TenantProvider");return e}const tl=ce.createContext(null);function H0({children:e}){const[t,r]=ce.useState(!1),[n,i]=ce.useState({}),a=ce.useCallback(o=>{i(o??{}),r(!0)},[]),s=ce.useMemo(()=>({show:a}),[a]);return J.jsxs(tl.Provider,{value:s,children:[e,t&&J.jsx("div",{className:"fixed inset-0 z-[100] flex items-center justify-center bg-ink-900/50 p-4 backdrop-blur-sm",children:J.jsxs("div",{className:"w-full max-w-md rounded-lg border border-ink-100 bg-white shadow-luxe",children:[J.jsxs("div",{className:"hairline flex items-start justify-between px-5 py-4",children:[J.jsxs("div",{className:"flex items-center gap-2 text-gold-700",children:[J.jsx(kf,{className:"h-4 w-4"}),J.jsx("span",{className:"text-xs font-medium uppercase tracking-wider",children:"Integration unavailable"})]}),J.jsx("button",{type:"button",onClick:()=>r(!1),className:"text-ink-400 hover:text-ink-800",children:J.jsx(Ef,{className:"h-4 w-4"})})]}),J.jsxs("div",{className:"p-5",children:[J.jsx("h3",{className:"font-display text-lg",children:n.title??"This action needs an active integration"}),J.jsx("p",{className:"mt-2 text-sm leading-relaxed text-ink-600",children:n.body??`${n.feature?`"${n.feature}" `:"This feature "}requires a configured backend integration before it can run.`}),J.jsx("div",{className:"mt-5 flex justify-end",children:J.jsx("button",{type:"button",onClick:()=>r(!1),className:"btn-primary",children:"Got it"})})]})]})})]})}function jT(){const e=ce.useContext(tl);if(!e)throw new Error("useIntegrationNotice must be inside IntegrationNoticeProvider");return e.show}function QT(){var e;return((e=ce.useContext(tl))==null?void 0:e.show)??null}const z0={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1,VITE_AI_MODE:"server",VITE_API_BASE_URL:"/api",VITE_STATE_SYNC_ID:"default",VITE_STATE_SYNC_MODE:"supabase",VITE_VERCEL_DEPLOYMENT_ID:"dpl_F2uor5XT6WbCD6wQePTVkunvMZhq",VITE_VERCEL_ENV:"production",VITE_VERCEL_GIT_COMMIT_AUTHOR_LOGIN:"",VITE_VERCEL_GIT_COMMIT_AUTHOR_NAME:"barhoumfak24-hash",V
215ITE_VERCEL_GIT_COMMIT_MESSAGE:"Restore evidence-backed AI mapping completeness",VITE_VERCEL_GIT_COMMIT_REF:"codex/full-page-quote-flow",VITE_VERCEL_GIT_COMMIT_SHA:"0823d0042f218e01ecb18b834d364b43144d6484",VITE_VERCEL_GIT_PREVIOUS_SHA:"",VITE_VERCEL_GIT_PROVIDER:"github",VITE_VERCEL_GIT_PULL_REQUEST_ID:"",VITE_VERCEL_GIT_REPO_ID:"",VITE_VERCEL_GIT_REPO_OWNER:"barhoumfak24-hash",VITE_VERCEL_GIT_REPO_SLUG:"codex-quotex",VITE_VERCEL_OBSERVABILITY_CLIENT_CONFIG:'{"analytics":{"scriptSrc":"49897bef4da1095c/script.js","viewEndpoint":"49897bef4da1095c/view","eventEndpoint":"49897bef4da1095c/event","sessionEndpoint":"49897bef4da1095c/session"},"speedInsights":{"scriptSrc":"c1c2a871a5e4c1f5/script.js","endpoint":"c1c2a871a5e4c1f5/vitals"}}',VITE_VERCEL_PROJECT_ID:"prj_OAwowzIJBezI6pDFxpMTyLpQC8xD",VITE_VERCEL_PROJECT_PRODUCTION_URL:"quotexinsurance.com",VITE_VERCEL_TARGET_ENV:"production",VITE_VERCEL_URL:"quotexinsurance-2w14272cc-barhoumfak24-7816s-projects.vercel.app"};let lu=!1;function G0(){if(!lu){lu=!0;try{const e=z0??{},t={build:{sha:"0823d0042f218e01ecb18b834d364b43144d6484",time:"2026-09-22T19:21:27.034Z"},env:{VITE_GOOGLE_PLACES_API_KEY:!!e.VITE_GOOGLE_PLACES_API_KEY,VITE_GOOGLE_MAPS_API_KEY:!!e.VITE_GOOGLE_MAPS_API_KEY,VITE_SMARTY_WEBSITE_KEY:!!e.VITE_SMARTY_WEBSITE_KEY,VITE_MAPBOX_TOKEN:!!e.VITE_MAPBOX_TOKEN},serverProbe:"GET /api/__diag"};console.info("%c[quotex diagnostic] env + build summary","color:#a07a3b;font-weight:600",t)}catch(e){console.warn("[quotex diagnostic] failed",e)}}}Of();G0();function W0(){return J.jsx(H0,{children:J.jsx(Fh,{children:J.jsx(Q0,{children:J.jsx(og,{})})})})}const HT=Object.freeze(Object.defineProperty({__proto__:null,default:W0},Symbol.toStringTag,{value:"Module"}));export{xT as $,ps as A,Et as B,ll as C,eT as D,Qf as E,yT as F,Ne as G,dc as H,Po as I,CT as J,bs as K,Z0 as L,My as M,Ie as N,He as O,Tc as P,uu as Q,Rf as R,Kt as S,gc as T,OT as U,TT as V,Iy as W,Ef as X,ET as Y,RT as Z,kT as _,VT as a,Jn as a$,fT as a0,pT as a1,Dm as a2,AT as a3,MT as a4,md as a5,mg as a6,Ou as a7,l_ as a8,d_ as a9,Rc as aA,Eo as aB,gm as aC,ta as aD,Xw as aE,Wm as aF,Tw as aG,dw as aH,ri as aI,_T as aJ,wT as aK,uc as aL,vT as aM,$a as aN,Cb as aO,pi as aP,Ub as aQ,Kb as aR,PI as aS,NT as aT,DT as aU,PT as aV,qT as aW,LT as aX,fa as aY,bc as aZ,uT as a_,bp as aa,rA as ab,mA as ac,pA as ad,FT as ae,ip as af,QT as ag,nT as ah,Fm as ai,pn as aj,wv as ak,_v as al,Nn as am,Mm as an,UT as ao,ym as ap,c_ as aq,o_ as ar,rT as as,hT as at,jT as au,cw as av,Bt as aw,hs as ax,$T as ay,NI as az,Xs as b,uo as b0,hc as b1,yc as b2,xy as b3,oT as b4,Ty as b5,ky as b6,Ry as b7,Ey as b8,by as b9,qy as ba,ln as bb,cT as bc,ga as bd,Nu as be,Cy as bf,lT as bg,$I as bh,Yn as bi,Pu as bj,sT as bk,vy as bl,Ay as bm,pg as bn,gg as bo,xu as bp,_y as bq,pc as br,fc as bs,aT as bt,qu as bu,dT as bv,iT as bw,BT as bx,HT as by,Rr as c,Kf as d,z as e,Ol as f,_f as g,bT as h,nt as i,Ph as j,Le as k,X0 as l,ST as m,IT as n,lv as o,Mr as p,Rt as q,U0 as r,Ht as s,tT as t,Wh as u,rr as v,mT as w,yl as x,gT as y,l as z};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.