1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/PDFViewer-DOH1dV1t.js","assets/vendor-react-DYmgHJpk.js","assets/vendor-react-DuVyg4w3.css","assets/pdfjsConfig-Iu1HnvrH.js","assets/vendor-pdf-Dczrl2Xi.js","assets/vendor-pdf-QCQEGvBO.css","assets/shared-runtime-7lE7-_Rt.js","assets/HugeRTEditor-CDWUYL7I.js","assets/vendor-editor-DWye3-rQ.js","assets/vendor-editor-BC40p4z4.css","assets/HugeRTEditor-BSj6E_eK.css","assets/MarkdownEditorCore-DGVYijaK.js","assets/MarkdownEditorCore-raKBbvsc.css"])))=>i.map(i=>d[i]); 2var sl=Object.defineProperty;var il=(e,n,t)=>n in e?sl(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t;var Ls=(e,n,t)=>il(e,typeof n!="symbol"?n+"":n,t);import{r as d,j as a,g as We,h as pn,i as es,k as ol,u as aa,F as An,l as N,m as rl,n as g,B as O,q as ke,v as w,w as ll,I as nt,X as gn,x as Ji,y as H,z as U,E as cl,H as P,J as zn,K as tt,L as Rt,M as Pe,N as he,P as ha,Q as ne,U as C,V as dl,W as ya,Y as se,A as Ue,_ as ul,$ as ml,a0 as Zi,p as Ht,e as eo,a1 as pl,a2 as J,a3 as as,a4 as ns,a5 as me,a6 as Za,a7 as Qa,a8 as gl,a9 as ao,aa as hl,ab as El,ac as ka,ad as za,ae as yn,af as fl,ag as Ds,ah as bl,ai as ce,aj as Tl,ak as vl,al as no,am as to,an as xl,ao as Sl,ap as so,aq as _l,ar as st,as as Cl,T as W,at as ea,S as ee,au as Ne,C as it,av as Nl,aw as Al,ax as yl,ay as Ca,az as oe,aA as Il,aB as jl,aC as ot,aD as rt,aE as qt,aF as Ms,aG as vn,aH as lt,aI as io,aJ as Ps,aK as ze,aL as Rl,aM as ct,aN as ws,aO as Ol,aP as oo,aQ as be,aR as Ll,aS as dt,aT as Dl,aU as ts,aV as ro,aW as lo,aX as Ml,aY as $e,aZ as co,a_ as xn,b as ss,a$ as Le,b0 as is,b1 as uo,b2 as Me,b3 as ut,b4 as xe,b5 as Pl,b6 as mo,b7 as na,b8 as os,b9 as po,ba as mt,bb as ve,bc as fa,bd as Ce,be as Fa,bf as ja,bg as go,bh as hn,bi as ho,bj as Fs,bk as wl,bl as Fl,bm as Ul,bn as Us,bo as ks,bp as rs,d as Ie,bq as Eo,br as Ua,bs as fo,bt as bo,bu as kl,bv as En,bw as zl,bx as $l,by as ls,bz as Hl,bA as zs,bB as pt,bC as To,bD as vo,bE as we,bF as ql,bG as $s,bH as Bl,bI as Kl,bJ as cs,bK as Yl,bL as xo,bM as Vl,bN as Gl,bO as Wl,bP as Xl,bQ as Ql,bR as Jl,bS as Zl,bT as ec,bU as ac,bV as nc,bW as tc,bX as sc,bY as ic,bZ as oc,b_ as rc,b$ as lc,c0 as cc,c1 as dc,c2 as uc,c3 as mc,c4 as pc,c5 as gc,c6 as hc,c7 as Ec,c8 as fc,c9 as bc,ca as Tc,cb as vc,cc as xc,cd as Sc,ce as _c,cf as So,cg as Cc,ch as _o,ci as Nc,cj as Ac,ck as yc,cl as Ic,cm as jc,cn as Rc,co as Oc,cp as Lc,cq as Dc,cr as Mc,cs as Pc,ct as wc,cu as Fc,cv as Uc,cw as kc,cx as Co,cy as zc,cz as $c,cA as No,cB as Hc,cC as qc,cD as Hs,cE as Bc,cF as Kc,cG as Yc,cH as ae,cI as Ot}from"./vendor-react-DYmgHJpk.js";import{r as cn,a as A,b as ds,u as Ao,c as qs,d as Lt,g as Bs,s as Vc,i as Gc,e as Ks,f as Wc,h as Xc,j as Ys,k as Qc,l as Jc,m as Te,n as fn,t as Zc,o as ed,p as Ia,M as $n,q as yo,v as Pn,w as us,x as Hn,y as ad,z as nd,A as td,B as sd,C as id,D as od,E as rd,F as ld,S as Ha,L as qn,G as cd}from"./shared-runtime-7lE7-_Rt.js";function In(e,n){const t=typeof e=="string"?e:String(e);if(n.length===0)return t;const s=n.map(i=>i instanceof Error?i.stack??i.message:dd(i)).join(" ");return`${t} ${s}`}function dd(e){if(e==null||typeof e!="object")return String(e);try{return JSON.stringify(e)}catch{return String(e)}}function ud(e){for(const n of e)if(n instanceof Error)return n}function Vs(e,n){const t=[e,...n];for(const s of t)if(s&&typeof s=="object"&&s.apiLoggingHandled===!0)return!0;return!1}const Re={debug(e,...n){},info(e,...n){cn.info(In(e,n))},warn(e,...n){Vs(e,n)||cn.warning(In(e,n))},error(e,...n){if(Vs(e,n))return;const t=ud(n);t?cn.error(In(e,n),t):cn.error(In(e,n))}};class md extends d.Component{constructor(t){super(t);Ls(this,"handleRetry",()=>{this.setState({hasError:!1,error:void 0})});this.state={hasError:!1}}static getDerivedStateFromError(t){return{hasError:!0,error:t}}componentDidCatch(t,s){var i,o;Re.error("ErrorBoundary caught an error:",t,s),(o=(i=this.props).onError)==null||o.call(i,t,s)}render(){return this.state.hasError?this.props.fallback?this.props.fallback:a.jsxs("div",{style:{padding:"20px",maxWidth:"600px",margin:"40px auto",backgroundColor:"#fff5f5",border:"1px solid #ff6b6b",borderRadius:"8px",fontFamily:"system-ui, -apple-system, sans-serif"},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",marginBottom:"16
2px"},children:[a.jsx(We,{size:24,color:"#ff6b6b",style:{marginRight:"12px"}}),a.jsx("h2",{style:{margin:0,color:"#c92a2a",fontSize:"18px"},children:"Algo salió mal"})]}),a.jsx("p",{style:{marginBottom:"16px",color:"#333",fontSize:"14px"},children:"Se produjo un error inesperado. Por favor, intenta recargar la página."}),!1,a.jsxs("button",{onClick:this.handleRetry,style:{padding:"8px 16px",backgroundColor:"#228be6",color:"white",border:"none",borderRadius:"4px",cursor:"pointer",fontSize:"14px",display:"flex",alignItems:"center",gap:"8px"},children:[a.jsx(pn,{size:16}),"Reintentar"]})]}):this.props.children}}const pa={LOGIN:"login",ADMIN:"admin",API:"api",TENANT:"tenant"},pd=Object.values(pa);function gd(e){return typeof e=="string"&&pd.includes(e)}function hd(e){if(typeof e!="object"||e===null)return!1;const n=e;return gd(n.appType)&&(n.tenant===null||typeof n.tenant=="object")&&typeof n.branding=="object"&&n.branding!==null&&(n.user===null||typeof n.user=="object")}const Ed=()=>({login:"login.drovify.com,staging-login.drovify.com".split(",").map(s=>s.trim()),admin:"admin.drovify.com,staging-admin.drovify.com".split(",").map(s=>s.trim()),api:"api.drovify.com,staging-api.drovify.com".split(",").map(s=>s.trim())}),fd=e=>e.replace(/\.localhost$/,""),Io=()=>{if(typeof window>"u")return pa.TENANT;const e=fd(window.location.hostname),n=Ed();return n.login.includes(e)?pa.LOGIN:n.admin.includes(e)?pa.ADMIN:n.api.includes(e)?pa.API:pa.TENANT},gx=()=>Io()===pa.LOGIN,Sn=es.isNativePlatform();es.getPlatform();const Gs={IOS:"ios",ANDROID:"android"},bd=()=>{const e=es.getPlatform();return e==="ios"?Gs.IOS:e==="android"?Gs.ANDROID:null},hx=async()=>{if(!Sn)return!1;try{return(await ol.requestPermissions({permissions:["camera"]})).camera==="granted"}catch(e){return Re.error("Error requesting camera permissions:",e),!1}};function Td(e,n=!1){d.useEffect(()=>{if(!e||n)return;e.name&&!document.title.includes(" - ")&&(document.title=e.name);const t=e.icons;t.favicon96&&qa("favicon-96","icon",t.favicon96,{type:"image/png",sizes:"96x96"}),t.favicon32&&qa("favicon-32","icon",t.favicon32,{type:"image/png",sizes:"32x32"}),t.faviconIco&&qa("favicon-ico","shortcut icon",t.faviconIco),t.appleTouchIcon&&qa("apple-touch-icon","apple-touch-icon",t.appleTouchIcon,{sizes:"180x180"}),t.webAppIcon192&&qa("pwa-icon-192","icon",t.webAppIcon192,{type:"image/png",sizes:"192x192"}),t.webAppIcon512&&qa("pwa-icon-512","icon",t.webAppIcon512,{type:"image/png",sizes:"512x512"}),vd("apple-title","apple-mobile-web-app-title",e.name)},[e,n])}function qa(e,n,t,s={}){let i=document.getElementById(e);i||(i=document.createElement("link"),i.id=e,document.head.appendChild(i)),i.rel=n,i.href=t,Object.entries(s).forEach(([o,r])=>{i.setAttribute(o,r)})}function vd(e,n,t){let s=document.getElementById(e);s||(s=document.createElement("meta"),s.id=e,document.head.appendChild(s)),s.name=n,s.content=t}const xd={favicon96:"/favicon-96x96.png",favicon32:"/favicon-32x32.png",faviconIco:"/favicon.ico",appleTouchIcon:"/apple-touch-icon.png",webAppIcon192:"/web-app-manifest-192x192.png",webAppIcon512:"/web-app-manifest-512x512.png"},Sd={name:"Drovify",loginLogo:"/login-logo.png",headerLogo:"/header-logo.png",icons:xd},jo=d.createContext(void 0);function Ex({children:e}){const[n,t]=d.useState({appType:Io(),tenant:null,branding:Sd,user:null,loading:!0,error:null,refetch:async()=>{}}),s=d.useRef(null),i=d.useCallback(async()=>{if(s.current)return s.current;const r=o();s.current=r;try{await r}finally{s.current=null}},[]);async function o(){try{t(c=>({...c,loading:!0,error:null}));const r=await A("/info");if(!hd(r))throw new Error("Invalid response from /info endpoint");if(!Sn){if(r.appType===pa.API){window.location.href="https://login.drovify.com";return}if(r.appType===pa.TENANT&&r.tenant===null){window.location.href="https://drovify.com";return}}t(c=>({...c,appType:r.appType,tenant:r.tenant,branding:r.branding,user:r.user,loading:!1,error:null}))}catch(r){const c=r,l=c.message||"Failed to load app info";if(c.status===403){ds(),window.location.pathname!=="/login"&&(window.location.href="/login");return}Re.error("Error loading app info:",r),t(m=>({...m,loading:!1,error:l}))}}return Td(n.branding,n.loading),d.useEffect(()=>{t(r=>({...r,refetch:i}))},[i]),d.useEffect(()=>{i();const r=()=>{i()},c=l=>{l.key==="jwt_token"&&i()};return window.addEventListener("auth-changed",r),window.addEventListener("tenant-updated",r),window.addEventListener("storage",c),()=>{window.removeEventListener("auth-changed",r),window.removeEventListener("tenant-updated",r),window.removeEventListener("storage",c)}},[i]),a.jsx(jo.Provider,{value:n,children:e})}function en(){const e=d.useContext(jo);if(e===void 0)throw new Error("useApp must be used within an AppProvider");return e}const _d={ORDERS:"orders",ONLINE_ENROLLMENTS:"online-enrollments"},Cd="identifier",Nd="from",Ad="returnTo",Ws=e=>e?`?${new URLSearchParams({[Cd]:e}).toString()}`:"",yd=e=>e!=null?`?enrollment=${e}`:"",$={login:e=>`/login${Ws(e)}`,forgotPassword:e=>`/forgot-password${Ws(e)}`,student:(e,n)=>`/students/${e}${yd(n)}`,studentEdit:e=>`/students/${e}/edit`,studentEnrollmentNew:e=>`/students/${e}/enrollments/new`,courses:()=>"/courses",course:e=>`/courses/${e}`,courseSession:(e,n)=>`/courses/${e}/sessions/${n}`,practice:e=>`/practice/${e}`,practiceEvaluation:e=>`/practice/${e}/evaluation`,simulationResult:e=>`/practice/${e}/simulation/result`,section:e=>`/sections/${e}`,legalEntity:e=>`/legal-entities/${e}`,legalEntityNew:()=>"/legal-entities/new",salesDocumentEdit:e=>`/sales/${e}/edit`,salesDocumentsTab:(e,n)=>{const t=new URLSearchParams(n).toString();return`/sales/${e}${t?`?${t}`:""}`},salesDocumentPreview:(e,n)=>{const t=new URLSearchParams({preview:"true",salesDocumentId:String(e)});return n!=null&&n.approve&&t.set("approve","true"),`/sales?${t.toString()}`},documentTemplateEdit:e=>`/document-templates/${e}/edit`,tariffs:()=>"/tariffs",tariffNew:(e,n)=>{const t=new URLSearchParams;e!=null&&t.set(Nd,String(e)),n&&t.set(Ad,n);const s=t.toString();return s?`/tariffs/new?${s}`:"/tariffs/new"},tariffEdit:e=>`/tariffs/${e}/edit`,chat:e=>e!=null?`/chat?conversationId=${e}
2`:"/chat",content:e=>`/content/${e}`,contentItem:(e,n)=>`/content/${e}/${n}`,settings:(e,n)=>{const t=new URLSearchParams;e&&t.set("tab",e);for(const[i,o]of Object.entries(n??{}))t.set(i,o);const s=t.toString();return s?`/settings?${s}`:"/settings"},auesSettings:()=>"/settings/integrations/aues",redsysGateways:()=>"/settings/integrations/redsys",holdedConceptLinks:e=>e!=null?`/concepts/holded?connection=${e}`:"/concepts/holded",publicBranding:()=>"/settings/public-branding",onlineEnrollment:()=>"/settings/online-enrollment",user:e=>`/users/${e}`,instructor:e=>`/instructors/${e}`,track:e=>`/tracks/${e}`,trackEdit:e=>`/tracks/${e}/edit`,exam:e=>`/exams/${e}`,exams:()=>"/exams",examsTramitaciones:()=>"/exams?tab=tramitaciones",tenant:e=>`/tenants/${e}`,tenantCopyData:e=>`/tenants/${e}/copy-data`,tenantReferrals:e=>`/tenants/${e}?tab=referidos`,referralProgram:()=>"/referral-program",platformReferrals:()=>"/referrals",examPresentation:e=>`/dgt-presentations/${e}`,announcementEdit:e=>`/announcements/${e}/edit`,enrollmentPractices:e=>`/enrollments/${e}/practices`,enrollmentEdit:e=>`/enrollments/${e}/edit`,enrollmentFinancialOverview:e=>`/enrollments/${e}/financial-overview`,balanceTopUp:(e,n)=>`/balance/top-up?enrollmentId=${e}&balanceType=${n}`,timeTrackingEmployee:(e,n)=>{const t=new URLSearchParams;(n==null?void 0:n.month)!=null&&t.set("month",String(n.month)),(n==null?void 0:n.year)!=null&&t.set("year",String(n.year));const s=t.toString();return`/time-tracking/employee/${e}${s?`?${s}`:""}`},agenda:e=>{const n=new URLSearchParams;(e==null?void 0:e.date)!=null&&n.set("date",String(e.date)),(e==null?void 0:e.view)!=null&&n.set("view",String(e.view)),(e==null?void 0:e.instructor)!=null&&n.set("instructor",String(e.instructor)),(e==null?void 0:e.openReservation)!=null&&n.set("openReservation",String(e.openReservation));const t=n.toString();return`/agenda${t?`?${t}`:""}`},studentCalendar:e=>{const n=new URLSearchParams;(e==null?void 0:e.date)!=null&&n.set("date",String(e.date)),(e==null?void 0:e.openReservation)!=null&&n.set("openReservation",String(e.openReservation));const t=n.toString();return`/calendar${t?`?${t}`:""}`},simulationCriteria:e=>e!=null?`/simulation-criteria/${e}`:"/simulation-criteria",knowledgeFragmentList:()=>"/knowledge-base/fragments",knowledgeFragment:e=>`/knowledge-base/fragments/${e}`,knowledgeFragmentNew:()=>"/knowledge-base/fragments/new",helpCategoryList:()=>"/knowledge-base/categories",helpArticleList:()=>"/knowledge-base/articles",helpArticle:e=>`/knowledge-base/articles/${e}`,helpArticleNew:()=>"/knowledge-base/articles/new",chatbotConversations:()=>"/chatbot/conversations",chatbotConversation:e=>`/chatbot/conversations/${e}`,onlineOrders:e=>e?`/online-orders?tab=${e}`:"/online-orders",notificationPreferences:()=>"/notification-preferences",scheduledTasks:()=>"/tools/scheduled-tasks",scheduledTask:e=>`/tools/scheduled-tasks/${e}`,insightReports:()=>"/tools/insights",capturedEmails:()=>"/tools/emails",livePresence:()=>"/presence",authorizationRequests:()=>"/authorizations",academy:()=>"/academy",academyCategory:e=>`/academy/category/${e}`,academyArticle:(e,n)=>`/academy/article/${e}${n==null||n===""?"":`#${n}`}`},le={PracticeReservationCreated:"practice_reservation_created",PracticeReservationsBatchConfirmed:"practice_reservations_batch_confirmed",PracticeReservationModified:"practice_reservation_modified",CancellationRequestResolved:"cancellation_request_resolved",PracticeReminder:"practice_reminder",ChargeCreated:"charge_created",ExamEnrolled:"exam_enrolled",ExamResultCreated:"exam_result_created",DocumentSignatureRequired:"document_signature_required",CourseEnrolled:"course_enrolled",CourseEnrollmentResolved:"course_enrollment_resolved",CourseSessionReminder:"course_session_reminder",PracticeCompleted:"practice_completed",MessageReceived:"message_received",InstructorMessageReceived:"instructor_message_received",InstructorReservationCreated:"instructor_reservation_created",InstructorReservationsBatchConfirmed:"instructor_reservations_batch_confirmed",InstructorReservationModified:"instructor_reservation_modified",Instru
2ctorReservationCancelled:"instructor_reservation_cancelled",InstructorCancellationRequested:"instructor_cancellation_requested",StaffReservationCancelled:"staff_reservation_cancelled",StaffCancellationRequested:"staff_cancellation_requested",StaffOnlineEnrollmentCreated:"staff_online_enrollment_created",StaffOnlineEnrollmentNeedsAttention:"staff_online_enrollment_needs_attention",AuthorizationRequested:"authorization_requested",AuthorizationResolved:"authorization_resolved"},Id={[le.ChargeCreated]:"/my-payments",[le.ExamEnrolled]:"/exams/upcoming",[le.ExamResultCreated]:"/exams/results",[le.DocumentSignatureRequired]:"/documentation",[le.CourseEnrolled]:"/calendar",[le.CourseEnrollmentResolved]:"/calendar",[le.PracticeCompleted]:"/practices/history",[le.AuthorizationRequested]:$.authorizationRequests(),[le.AuthorizationResolved]:$.authorizationRequests()};function Ba(e){return typeof e=="number"?String(e):typeof e=="string"&&e.length>0?e:void 0}function Ro(e,n){const t=Ba(n.startDate),s=Ba(n.reservationId),i=Ba(n.conversationId),o=Ba(n.instructorId);switch(e){case le.PracticeReservationCreated:case le.PracticeReservationsBatchConfirmed:case le.PracticeReservationModified:case le.CancellationRequestResolved:case le.PracticeReminder:return $.studentCalendar({date:t,openReservation:s});case le.CourseSessionReminder:return $.studentCalendar({date:t});case le.MessageReceived:case le.InstructorMessageReceived:return $.chat(i);case le.InstructorReservationCreated:case le.InstructorReservationsBatchConfirmed:case le.InstructorReservationModified:case le.InstructorReservationCancelled:case le.InstructorCancellationRequested:return $.agenda({date:t,openReservation:s});case le.StaffReservationCancelled:case le.StaffCancellationRequested:return $.agenda({date:t,instructor:o,openReservation:s});case le.StaffOnlineEnrollmentCreated:{const r=Ba(n.studentId);return r?$.student(r,Ba(n.enrollmentId)):null}case le.StaffOnlineEnrollmentNeedsAttention:return $.onlineOrders(_d.ONLINE_ENROLLMENTS);default:return Id[e]??null}}function jd(){const{user:e,loading:n,refetch:t}=en(),s=e?{uuid:e.uuid,name:e.name,username:e.username,profileImage:e.profileImage,roles:e.roles,isImpersonating:e.isImpersonating,isFirstTimeLogin:e.isFirstTimeLogin}:null;return{user:s,isAuthenticated:!!s,isUnauthenticated:!s&&!n,loading:n,refetchMe:t,logout:async()=>{const o=Lo();if(o){try{await Ao(o)}catch(r){Re.warn("Failed to unregister push notification token:",r)}Do()}ds()}}}const Rd=500,ms="fcm_token",Bt=()=>{try{return localStorage.getItem(ms)}catch{return null}},jn=e=>{try{localStorage.setItem(ms,e)}catch(n){Re.debug("localStorage unavailable",n)}},Oo=()=>{try{localStorage.removeItem(ms)}catch(e){Re.debug("localStorage unavailable",e)}},Lo=()=>Bt(),Do=()=>Oo(),fx=()=>{const e=aa(),{isAuthenticated:n}=jd(),t=d.useRef(!1),s=d.useRef(!1),i=d.useRef(e),o=d.useRef(n),[r,c]=d.useState({token:null,isRegistered:!1,error:null,permissionStatus:"unknown"});d.useEffect(()=>{i.current=e},[e]),d.useEffect(()=>{const m=o.current;o.current=n,m&&!n&&(s.current=!1,Oo(),c(u=>({...u,isRegistered:!1,token:null})))},[n]);const l=d.useCallback(m=>{if(!(m!=null&&m.type)||typeof m.type!="string")return;const u=Ro(m.type,m);u&&setTimeout(()=>{i.current(u)},Rd)},[]);return d.useEffect(()=>{const m=bd();if(!Sn||!m||!n||t.current)return;let u=null,p=null,x=!1;return(async()=>{try{const f=(await An.requestPermissions()).receive==="granted";if(!f||x){f||c(S=>({...S,permissionStatus:"denied"}));return}c(S=>({...S,permissionStatus:"granted"}));const{token:b}=await An.getToken();if(x)return;const v=Bt();if(c(S=>({...S,token:b,error:null})),!s.current)try{v&&v!==b?await qs(v,b,m):await Lt(b,m),jn(b),s.current=!0,c(S=>({...S,isRegistered:!0}))}catch(S){c(y=>({...y,error:S instanceof Error?S.message:"Failed to register token"}))}if(p=await An.addListener("tokenReceived",async S=>{const y=S.token,_=Bt();if(_&&_!==y)try{await qs(_,y,m),jn(y),c(T=>({...T,token:y}))}catch(T){Re.debug("Token refresh failed, attempting re-registration",T);try{await Lt(y,m),jn(y),c(j=>({...j,token:y}))}catch(j){Re.debug("Push token registration failed",j)}}else if(!_)try{await Lt(y,m),jn(y),c(T=>({...T,token:y}))}catch(T){Re.debug("Push token registration failed",T)}}),u=await An.addListener("notificationActionPerformed",S=>{const{notification:y}=S;y!=null&&y.data&&l(y.data)}),x){u==null||u.remove(),p==null||p.remove();return}t.current=!0}catch(E){c(f=>({...f,error:E instanceof Error?E.message:"Unknown error"}))}})(),()=>{x=!0,u==null||u.remove(),p==null||p.remove(),t.current=!1}},[l,n]),r},Mo=d.createContext(void 0);function bx({children:e}){const{user:n,loading:t,refetch:s}
2=en(),[i,o]=d.useState(Bs),[r,c]=d.useState(null);d.useEffect(()=>{const f=new URLSearchParams(window.location.search),b=f.get("token");if(b){Vc(b),f.delete("token");const v=window.location.pathname+(f.toString()?`?${f.toString()}`:"");window.history.replaceState({},"",v)}},[]);const l=d.useMemo(()=>n?{uuid:n.uuid,name:n.name,firstName:n.firstName,username:n.username,email:n.email,profileImage:n.profileImage,roles:n.roles,isImpersonating:n.isImpersonating,isPlatformImpersonation:n.isPlatformImpersonation,isFirstTimeLogin:n.isFirstTimeLogin,permissions:n.permissions??[],displayName:n.displayName??null}:null,[n]),m=l!==null;d.useEffect(()=>{Gc(l?{id:l.uuid,username:l.email}:null)},[l==null?void 0:l.uuid,l==null?void 0:l.email]);const u=d.useCallback(()=>{Ks(),o(Bs()),s()},[s]),p=d.useCallback(async()=>{const f=Lo();f&&(await Ao(f).catch(()=>{}),Do()),o(!1),Wc(),Ks(),await A("/realtime/logout",{method:"POST"}).catch(()=>{}),ds()},[]),x=d.useCallback(async(f,b)=>{if(!r){c({direction:"impersonate",targetName:b});try{const{token:v}=await Xc(f);Ys(v)}catch(v){throw c(null),Re.error("Error starting impersonation:",v),v}}},[r]),h=d.useCallback(async()=>{if(!r){c({direction:"exit"});try{const{token:f}=await Qc();Ys(f)}catch(f){Re.error("Error exiting impersonation:",f),window.location.replace("/")}}},[r]),E=d.useMemo(()=>({user:l,isAuthenticated:m,roles:(l==null?void 0:l.roles)??[],isImpersonating:(l==null?void 0:l.isImpersonating)??!1,isPlatformImpersonation:(l==null?void 0:l.isPlatformImpersonation)??!1,identitySwitch:r,isFirstTimeLogin:(l==null?void 0:l.isFirstTimeLogin)??!1,email:(l==null?void 0:l.email)??"",loggedInWithUsername:i,login:u,logout:p,impersonate:x,exitImpersonation:h,refetchMe:s,loading:t}),[l,m,r,i,u,p,x,h,s,t]);return a.jsx(Mo.Provider,{value:E,children:e})}function an(){const e=d.useContext(Mo);if(!e)throw new Error("useAuthContext must be used inside an AuthProvider");return e}const Od=26;function Xs({icon:e,title:n,description:t,action:s,children:i}){return a.jsxs(N,{align:"center",gap:"xs",py:48,px:"md",ta:"center",children:[a.jsx(rl,{size:64,radius:"xl",variant:"light",color:"gray",mb:"xs",children:a.jsx(e,{size:Od})}),a.jsx(g,{fw:700,size:"lg",children:n}),t&&a.jsx(g,{size:"sm",c:"dimmed",maw:"46ch",children:t}),s&&a.jsx(O,{mt:"md",onClick:s.onClick,leftSection:s.leftSection,children:s.label}),i]})}function qe({width:e}){return a.jsx(ke,{height:"0.7em",width:e,radius:"sm",style:{display:"inline-block",verticalAlign:"middle"}})}function Ld(e){return w({queryKey:["scope-context"],queryFn:()=>A("/admin/scope-context"),enabled:(e==null?void 0:e.enabled)??!0,staleTime:5*6e4})}function Tx(e){return w({queryKey:["scope-context","writable-divisions"],queryFn:async()=>((await A("/admin/scope-context")).options??[]).map(t=>({id:t.id,name:t.name})),enabled:!0,staleTime:5*6e4})}var Ma=(e=>(e.Student="ROLE_STUDENT",e.Instructor="ROLE_INSTRUCTOR",e.Staff="ROLE_STAFF",e.Support="ROLE_SUPPORT",e.PlatformAdmin="ROLE_PLATFORM_ADMIN",e))(Ma||{});const Dd="PUBLIC_CSS_REJECTED",Po={PARSE_ERROR:"no se puede leer: revisa llaves, dos puntos y puntos y coma, y que ninguna regla esté anidada dentro de otra",TOO_LARGE:"el CSS supera los 20 KB",IMPORT_NOT_ALLOWED:"@import no está permitido",AT_RULE_NOT_ALLOWED:"@charset, @namespace y @font-face no están permitidos",URL_NOT_ALLOWED:"solo se admiten imágenes incrustadas (data:image/png, jpeg, webp o gif)",EXPRESSION_NOT_ALLOWED:"expression, behavior, -moz-binding y javascript: no están permitidos"};function Md(e){if(typeof e!="object"||e===null)return!1;const n=e;return typeof n.line=="number"&&typeof n.reason=="string"&&n.reason in Po}function wo(e){const n=e.violations;return Array.isArray(n)?n.filter(Md):[]}function vx(e){var t;const n=(t=e==null?void 0:e.response)==null?void 0:t.data;return(n==null?void 0:n.code)===Dd&&n.context?wo(n.context):[]}const Pd="PUBLIC_BRANDING_INVALID",wd="desconocido",Fo={primaryColor:"Color principal",backgroundColor:"Color de fondo",fontFamily:"TipografÃa",radius:"Redondeo",websiteUrl:"Web de la autoescuela",websiteLinkLabel:"Texto del enlace a la web",contactPhone:"Teléfono de contacto",contactEmail:"Email de contacto"};function Uo(e){return typeof e=="string"&&e in Fo}function Fd(e){return Uo(e)?Fo[e]:wd}function xx(e){var t,s;const n=(t=e==null?void 0:e.response)==null?void 0:t.data;return(n==null?void 0:n.code)!==Pd?null:Uo((s=n.context)==null?void 0:s.field)?n.context.field:null}const Ud="expectedFingerprint";function Qs(e){const n=e.fieldErrors;return typeof n=="object"&&n!==null&&Ud in n}function Kt(e){const n=new Date(`${e}T00:00:00`);if(Number.isNaN(n.getTime()))return e;const t=n.toLocaleDateString("es-ES",{weekday:"long"}),s=n.toLocaleDateString("es-ES",{day:"numeric",month:"long"});return`${t} ${s}`}function kd(e){return typeof e=="object"&&e!==null&&"date"in e&&"start"in e&&"end"in e}function zd(e){return`${Kt(e.date)} de ${e.start} a ${e.end}`}function $d(e){return e.length<=1?e.join(""):`${e.slice(0,-1).join(", ")} y ${e[e.length-1]}`}
2const Xe={EMPTY:"empty",NOT_PEM:"not_pem",INVALID_CREDENTIALS:"invalid_credentials",INVALID_X509:"invalid_x509",UNPARSEABLE:"unparseable",EXPIRED:"expired",NOT_YET_VALID:"not_yet_valid",UNREADABLE_CONTENT:"unreadable_content",UNREADABLE_PKCS12:"unreadable_pkcs12"},Hd="Certificado no válido",qd={[Xe.EXPIRED]:"Certificado caducado",[Xe.NOT_YET_VALID]:"Certificado aún no válido"};function Bd(e){return qd[String(e.reason??"")]??Hd}function Kd(e){const n=e.expiredOn,t=e.validFrom;switch(e.reason){case Xe.EXPIRED:return typeof n=="string"?`El certificado caducó el ${fn(n)}. Solicita uno nuevo y vuelve a añadirlo.`:"El certificado ha caducado. Solicita uno nuevo y vuelve a añadirlo.";case Xe.NOT_YET_VALID:return typeof t=="string"?`Este certificado no es válido hasta el ${fn(t)}.`:"Este certificado todavÃa no es válido.";case Xe.UNREADABLE_PKCS12:return"No se pudo abrir el archivo .p12 o .pfx. Suele ser la contraseña: compruébala y ten en cuenta que el archivo puede no tener ninguna.";case Xe.INVALID_CREDENTIALS:return"La contraseña no abre la clave privada del certificado. RevÃsala e inténtalo de nuevo.";case Xe.UNREADABLE_CONTENT:case Xe.EMPTY:return"El archivo llegó vacÃo o dañado. Vuelve a exportarlo desde su origen y súbelo otra vez.";
2case Xe.NOT_PEM:case Xe.INVALID_X509:case Xe.UNPARSEABLE:return"El archivo no contiene un certificado que podamos leer. Debe ser el certificado con su clave privada, en formato .pem, .p12 o .pfx.";default:return"No se pudo procesar el certificado. Revisa que el archivo y la contraseña sean correctos."}}const Yd={AEOL_CREDENTIAL_NOT_FOUND:{buildMessage:()=>"No hay credenciales de AEOL configuradas para esta sección.",buildTitle:()=>"Sin credenciales de AEOL",variant:"destructive"},AEOL_DOMAIN_NOT_CONFIGURED:{buildMessage:()=>"El dominio de AEOL no está configurado. RevÃsalo en los ajustes de integraciones.",buildTitle:()=>"Dominio sin configurar",variant:"destructive"},AEOL_TOKEN_INVALID_OR_EXPIRED:{buildMessage:()=>"El enlace de acceso a AEOL ya no es válido. Vuelve a generarlo.",buildTitle:()=>"Enlace caducado",variant:"destructive"},AUTHORIZATION_MODULE_DISABLED:{buildMessage:()=>"Las solicitudes de autorización no están activadas en tu autoescuela. Si crees que deberÃan estarlo, escrÃbenos desde Ayuda y soporte.",buildTitle:()=>"Funcionalidad no activada",variant:"warning"},AUTHORIZATION_CANCEL_NOT_ALLOWED:{buildMessage:()=>"Solo quien creó la solicitud puede cancelarla.",buildTitle:()=>"No permitido",variant:"destructive"},AUTHORIZATION_FORCED_FAILURE:{buildMessage:()=>"Un administrador ha marcado esta solicitud como fallida.",buildTitle:()=>"Solicitud marcada como fallida",variant:"destructive"},AUTHORIZATION_REJECTION_REASON_REQUIRED:{buildMessage:()=>"Indica un motivo para rechazar la solicitud.",buildTitle:()=>"Motivo obligatorio",variant:"warning"},AUTHORIZATION_REQUEST_ALREADY_PENDING:{buildMessage:()=>"Ya hay una solicitud de autorización abierta para esto.",buildTitle:()=>"Solicitud ya abierta",variant:"warning"},AUTHORIZATION_REQUEST_ALREADY_RESOLVED:{buildMessage:()=>"Esta solicitud de autorización ya se ha resuelto. Recarga la página para ver su estado actual.",buildTitle:()=>"Solicitud ya resuelta",variant:"warning"},AUTHORIZATION_REQUEST_NOT_FOUND:{buildMessage:()=>"La solicitud de autorización que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Solicitud no encontrada",variant:"destructive"},AUTHORIZATION_REQUESTER_NO_LONGER_ALLOWED:{buildMessage:()=>"Quien solicitó esto ya no tiene permiso para llevarlo a cabo. La solicitud ha quedado marcada como fallida.",buildTitle:()=>"Permiso revocado",variant:"destructive"},AUTHORIZATION_RESOLVE_NOT_ALLOWED:{buildMessage:()=>"No tienes autorización para resolver esta solicitud.",buildTitle:()=>"No permitido",variant:"destructive"},AUTHORIZATION_SELF_RESOLUTION:{buildMessage:()=>"No puedes autorizar ni rechazar tu propia solicitud.",buildTitle:()=>"No permitido",variant:"destructive"},OPERATION_NOT_AUTHORIZED:{buildMessage:()=>"No tienes autorización para realizar esta acción.",buildTitle:()=>"No autorizado",variant:"destructive"},BIOMETRIC_ENTRY_ALREADY_CAPTURED:{buildMessage:()=>"La entrada de esta práctica ya se ha verificado.",buildTitle:()=>"Entrada ya verificada",variant:"warning"},BIOMETRIC_EXIT_ALREADY_CAPTURED:{buildMessage:()=>"La salida de esta práctica ya se ha verificado.",buildTitle:()=>"Salida ya verificada",variant:"warning"},BIOMETRIC_NOT_STARTED:{buildMessage:()=>"TodavÃa no se ha verificado la entrada de esta práctica.",buildTitle:()=>"Entrada sin verificar",variant:"destructive"},CANNOT_EDIT_SYSTEM_TEMPLATE:{buildMessage:()=>"Los roles del sistema no se pueden modificar. DuplÃcalo para crear uno propio.",buildTitle:()=>"Rol del sistema",variant:"destructive"},PERMISSION_MODE_NOT_AUTHORIZABLE:{buildMessage:()=>"Este permiso no admite el modo «con autorización».",buildTitle:()=>"Modo no disponible",variant:"destructive"},DEFAULT_TARIFF_NOT_FOUND:{buildMessage:()=>"La sección no tiene una tarifa por defecto configurada.",buildTitle:()=>"Sin tarifa por defecto",variant:"destructive"},EXPORT_NOT_CANCELLABLE:{buildMessage:()=>"La exportación ya no se puede cancelar.",buildTitle:()=>"Exportación no cancelable",variant:"warning"},EXPORT_NOT_COMPLETED:{buildMessage:()=>"La exportación todavÃa no ha terminado. Espera a que acabe para descargarla.",buildTitle:()=>"Exportación en curso",variant:"warning"},INVALID_BASE64:{buildMessage:()=>"La imagen enviada no se ha podido leer. Vuelve a seleccionarla.",buildTitle:()=>"Imagen no válida",variant:"destructive"},INVALID_COURSE_TYPE:{buildMessage:()=>"El tipo de curso no es válido.",buildTitle:()=>"Tipo de curso no válido",variant:"destructive"},INVALID_EXPORT_TYPE:{buildMessage:()=>"El tipo de exportación no es válido.",buildTitle:()=>"Exportación no válida",variant:"destructive"},INVALID_IMAGE_FORMAT:{buildMessage:()=>"El formato de la imagen no está admitido. Usa JPG o PNG.",buildTitle:()=>"Formato no admitido",variant:"destructive"},MISSING_IMAGE:{buildMessage:()=>"No se ha enviado ninguna imagen.",buildTitle:()=>"Falta la imagen",variant:"destructive"},NOTIFICATION_ACCESS_DENIED:{buildMessage:()=>"No tienes permiso para ver esta notificación.",buildTitle:()=>"Sin permiso",variant:"destructive"},NO_SUPPORT_USER_FOR_TENANT:{buildMessage:()=>"La organización no tiene un usuario de soporte con el que entrar.",buildTitle:()=>"Sin usuario de soporte",variant:"destructive"},SALES_DOCUMENT_ISSUE_DATE_HAS_WARNINGS:{buildMessage:()=>"Revisa la fecha de emisión antes de continuar.",buildTitle:()=>"Comprueba la fecha de emisión",variant:"destructive"},SALES_DOCUMENT_ISSUE_DATE_MUST_BE_TODAY:{buildMessage:()=>"Esta serie está conectada a Verifactu o TicketBAI, asà que la factura
2se emite con la fecha de hoy.",buildTitle:()=>"La fecha debe ser la de hoy",variant:"destructive"},QUOTA_LIMIT_NOT_RAISED:{buildMessage:()=>"El nuevo lÃmite tiene que ser mayor que el actual. Desde aquà solo puedes ampliarlo; para reducirlo, escrÃbenos.",buildTitle:()=>"El lÃmite no se ha ampliado",variant:"destructive"},RECALCULATE_BALANCE_NOT_ALLOWED:{buildMessage:()=>"No tienes permiso para recalcular el saldo.",buildTitle:()=>"Sin permiso",variant:"destructive"},RESERVATION_HAS_NO_PRACTICE:{buildMessage:()=>"La reserva no tiene una práctica asociada que deshacer.",buildTitle:()=>"Sin práctica",variant:"destructive"},ROLE_NOT_AVAILABLE_IN_DIVISION:{buildMessage:()=>"El rol seleccionado no está disponible en esa división.",buildTitle:()=>"Rol no disponible",variant:"destructive"},ROLE_NOT_FOUND:{buildMessage:()=>"El rol seleccionado ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Rol no encontrado",variant:"destructive"},SCOPE_OVERRIDE_INVALID_FORMAT:{buildMessage:()=>"El ámbito seleccionado no es válido. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Ãmbito no válido",variant:"destructive"},SCOPE_OVERRIDE_NOT_ALLOWED:{buildMessage:()=>"No puedes trabajar sobre ese ámbito.",buildTitle:()=>"Ãmbito no permitido",variant:"destructive"},SEARCH_QUERY_TOO_SHORT:{buildMessage:()=>"Escribe al menos tres caracteres para buscar.",buildTitle:()=>"Búsqueda demasiado corta",variant:"warning"},CREDENTIAL_TOKEN_NOT_USABLE:{buildMessage:()=>"Este enlace ha caducado o ya se ha usado. Pide uno nuevo.",buildTitle:()=>"Enlace no válido",variant:"destructive"},MEDIA_DRAFT_TOKEN_EXPIRED:{buildMessage:()=>"El enlace para subir la foto ha caducado. Pide uno nuevo desde la ficha del alumno.",buildTitle:()=>"Enlace caducado",variant:"destructive"},RESERVATION_HAS_WARNINGS:{buildMessage:()=>"La reserva tiene avisos. RevÃsalos antes de confirmarla.",buildTitle:()=>"La reserva tiene avisos",variant:"warning"},ACCESS_DENIED:{buildMessage:()=>"No tienes permiso para hacer esto.",buildTitle:()=>"Sin permiso",variant:"destructive"},BAD_REQUEST:{buildMessage:()=>"La petición no es válida. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Petición no válida",variant:"destructive"},CONFLICT:{buildMessage:()=>"La operación choca con el estado actual de los datos. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Conflicto con los datos",variant:"destructive"},METHOD_NOT_ALLOWED:{buildMessage:()=>"La operación no está permitida en este recurso.",buildTitle:()=>"Operación no permitida",variant:"destructive"},RESERVATION_VALIDATION_FAILED:{buildMessage:()=>"La reserva no cumple alguna condición. Revisa los avisos que se muestran.",buildTitle:()=>"Reserva no válida",variant:"destructive"},TOO_MANY_REQUESTS:{buildMessage:()=>"Has hecho demasiadas peticiones seguidas. Espera unos segundos e inténtalo de nuevo.",buildTitle:()=>"Demasiadas peticiones",variant:"warning"},UNAUTHENTICATED:{buildMessage:()=>"Tu sesión ha caducado. Vuelve a iniciar sesión.",buildTitle:()=>"Sesión caducada",variant:"destructive"},UNPROCESSABLE_ENTITY:{buildMessage:()=>"Los datos enviados no son válidos. RevÃsalos e inténtalo de nuevo.",buildTitle:()=>"Datos no válidos",variant:"destructive"},CHARGE_CANCELLED:{buildMessage:()=>"El cargo está anulado, asà que ya no se puede modificar.",buildTitle:()=>"Cargo anulado",variant:"destructive"},CHARGE_INVOICED_CANNOT_CHANGE_TAX:{buildMessage:()=>"El cargo ya está facturado, asà que no se le puede cambiar el IVA.",buildTitle:()=>"Cargo facturado",variant:"destructive"},CHARGE_SIGN_FLIPPED:{buildMessage:()=>"No puedes cambiar el signo de un cargo. Anúlalo y crea uno nuevo.",buildTitle:()=>"Signo no modificable",variant:"destructive"},CHARGE_TOTAL_BELOW_INVOICED:{buildMessage:()=>"El nuevo total es menor que el importe ya facturado del cargo.",buildTitle:()=>"Total por debajo de lo facturado",variant:"destructive"},CHARGE_TOTAL_BELOW_PAID:{buildMessage:()=>"El nuevo total es menor que el importe ya cobrado del cargo.",buildTitle:()=>"Total por debajo de lo cobrado",variant:"destructive"},ENROLLMENT_CREATION_ERROR:{buildMessage:()=>"No hemos podido crear la matrÃcula. Revisa los datos e inténtalo de nuevo.",buildTitle:()=>"No se ha podido crear la matrÃcula",variant:"destructive"},ENROLLMENT_UPDATE_ERROR:{buildMessage:()=>"No hemos podido guardar los cambios de la matrÃcula. Revisa los datos e inténtalo de nuevo.",buildTitle:()=>"No se han podido guardar los cambios",variant:"destructive"},LICENSE_NOT_ALLOWED_FOR_EXAM:{buildMessage:()=>"El permiso del alumno no está admitido en este examen.",buildTitle:()=>"Permiso no admitido",variant:"destructive"},OWNED_LICENSE_ALREADY_EXISTS:{buildMessage:()=>"El alumno ya tiene registrado ese permiso en vigor.",buildTitle:()=>"Permiso ya registrado",variant:"destructive"},CAP_COURSE_HAS_ATTENDED_SESSIONS:{buildMessage:()=>"El curso CAP tiene sesiones con asistencia registrada, asà que ya no se puede modificar.",buildTitle:()=>"El curso tiene asistencias",variant:"destructive"},CAP_SESSION_HAS_ATTENDED_RECORDS:{buildMessage:()=>"La sesión tiene asistencias registradas, asà que ya no se puede modificar.",buildTitle:()=>"La sesión tiene asistencias",variant:"destructive"},CAP_SESSION_OUTSIDE_COURSE_DATES:{buildMessage:()=>"La sesión queda fuera de las fechas del curso. Ajusta la fecha o amplÃa el periodo del curso.",buildTitle:()=>"Sesión fuera del curso",variant:"destructive"},CASH_CLOSURE_ADJUSTMENT_REVERSAL_REQUIRED:{buildMessage:()=>"Para deshacer este ajuste hay que registrar primero su reverso.",buildTitle:()=>"Falta el reverso del ajuste",variant:"destructive"},CASH_CLOSURE_DRAIN_DESTINATION_NOT_CONFIGURED:{buildMessage:()=>"La cuenta no tiene configurado un destino de retirada. Configúralo en los ajustes de tesorerÃa.",buildTitle:()=>
2"Sin destino de retirada",variant:"destructive"},CASH_CLOSURE_FORCE_OVERLAP_NOT_ALLOWED:{buildMessage:()=>"No puedes forzar un cierre que se solapa con otro ya registrado.",buildTitle:()=>"Cierres solapados",variant:"destructive"},CASH_CLOSURE_INVALIDATION_REASON_REQUIRED:{buildMessage:()=>"Para invalidar un cierre tienes que indicar el motivo.",buildTitle:()=>"Falta el motivo",variant:"destructive"},CASH_CLOSURE_PERIOD_OVERRIDE_NOT_ALLOWED:{buildMessage:()=>"No tienes permiso para cambiar el periodo de este cierre.",buildTitle:()=>"Periodo no modificable",variant:"destructive"},CASH_CLOSURE_PERIOD_OVERRIDE_REASON_REQUIRED:{buildMessage:()=>"Para cambiar el periodo del cierre tienes que indicar el motivo.",buildTitle:()=>"Falta el motivo",variant:"destructive"},TREASURY_TRANSFER_SAME_ACCOUNT:{buildMessage:()=>"El origen y el destino del traspaso son la misma cuenta. Elige cuentas distintas.",buildTitle:()=>"Cuentas iguales",variant:"destructive"},API_KEY_NOT_FOUND:{buildMessage:()=>"La clave de API que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Clave de API no encontrada",variant:"destructive"},CALENDAR_BLOCKED_RANGE_NOT_FOUND:{buildMessage:()=>"El bloqueo de calendario que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Bloqueo no encontrado",variant:"destructive"},CAP_CENTER_NOT_FOUND:{buildMessage:()=>"El centro CAP que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Centro CAP no encontrado",variant:"destructive"},CAP_COURSE_ENROLLMENT_NOT_FOUND:{buildMessage:()=>"La inscripción al curso CAP que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Inscripción no encontrada",variant:"destructive"},CAP_COURSE_NOT_FOUND:{buildMessage:()=>"El curso CAP que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Curso CAP no encontrado",variant:"destructive"},CAP_SESSION_NOT_FOUND:{buildMessage:()=>"La sesión del curso CAP que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Sesión no encontrada",variant:"destructive"},CAPTURED_EMAIL_NOT_FOUND:{buildMessage:()=>"Ese correo ya no existe. Se borran a los 30 dÃas.",buildTitle:()=>"Correo no encontrado",variant:"destructive"},CLASSROOM_NOT_FOUND:{buildMessage:()=>"El aula que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Aula no encontrada",variant:"destructive"},CONCEPT_NOT_FOUND:{buildMessage:()=>"El concepto que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Concepto no encontrado",variant:"destructive"},CONTENT_LICENSE_NOT_FOUND:{buildMessage:()=>"El permiso asociado al contenido que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Permiso no encontrado",variant:"destructive"},CONTENT_NOT_FOUND:{buildMessage:()=>"El contenido que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Contenido no encontrado",variant:"destructive"},CONVERSATION_NOT_FOUND:{buildMessage:()=>"La conversación que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Conversación no encontrada",variant:"destructive"},COURSE_ENROLLMENT_NOT_FOUND:{buildMessage:()=>"La inscripción al curso que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Inscripción no encontrada",variant:"destructive"},COURSE_NOT_FOUND:{buildMessage:()=>"El curso que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Curso no encontrado",variant:"destructive"},COURSE_SESSION_ATTENDANCE_NOT_FOUND:{buildMessage:()=>"La asistencia a la sesión que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Asistencia no encontrada",variant:"destructive"},COURSE_SESSION_NOT_FOUND:{buildMessage:()=>"La sesión del curso que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Sesión no encontrada",variant:"destructive"},DIVISION_NOT_FOUND:{buildMessage:()=>"La división que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"División no encontrada",variant:"destructive"},DOCUMENT_SERIES_NOT_FOUND:{buildMessage:()=>"La serie documental que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Serie no encontrada",variant:"destructive"},ENROLLMENT_NOT_FOUND:{buildMessage:()=>"La matrÃcula que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"MatrÃcula no encontrada",variant:"destructive"},EXAM_ATTENDANCE_NOT_FOUND:{buildMessage:()=>"La convocatoria del alumno que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Convocatoria no encontrada",variant:"destructive"},EXAM_ATTENDANCE_REQUEST_NOT_FOUND:{buildMessage:()=>"La solicitud de convocatoria que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Solicitud no encontrada",variant:"destructive"},EXAM_NOT_FOUND:{buildMessage:()=>"El examen que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Examen no encontrado",variant:"destructive"},EXAM_PRESENTATION_ITEM_NOT_FOUND:{buildMessage:()=>"El item de la presentación que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Item no encontrado",variant:"destructive"},EXAM_PRESENTATION_NOT_FOUND:{buildMessage:()=>"La lista de tramitación que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Lista no encontrada",variant:"destructive"},EXAM_RESULT_SYNC_LOG_NOT_FOUND:{buildMessage:()=>"El registro de sincronización de resultados que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Registro no encontrado",variant:"destructive"},EXAM_TYPE_NOT_FOUND:{buildMessage:()=>"El tipo de examen que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Tipo de examen no encontrado",variant:"destructive"},FEE_GROUP_NOT_FOUND:{buildMessage:()=>"El grupo de tasas que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Grupo de tasas no encontrado",variant:"destructive"},FISCAL_SUBMISSION_NOT_FOUND:{buildMessage:()=>"El envÃo fiscal que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"EnvÃo no encontrado",variant:"destructive"},HELP_ARTICLE_IMAGE_NOT_FOUND:{buildMessage:()=>"La imagen del artÃculo que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Imagen no encontrada",variant:"destructive"},HELP_ARTICLE_NOT_FOUND:{buildMessage:()=>"El artÃculo de ayuda que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"ArtÃculo no encontrado",variant:"destructive"},HELP_CATEGORY_NOT_FOUND:{buildMessage:()=>"La categorÃa de ayuda que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"CategorÃa no encontrada",variant:"destructive"},INSTRUCTOR_NOT_FOUND:{buildMessage:()=>"El profesor que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Profesor no encontrado",variant:"destructive"},INVALID_ID:{buildMessage:()=>"El enlace que has seguido no es válido. Vuelve atrás e inténtalo de nuevo.",buildTitle:()=>"Enlace no válido",variant:"destructive"},LEGAL_ENTITY_NOT_FOUND:{buildMessage:()=>"La entidad legal que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Entidad legal no encontrada",variant:"destructive"},LICENSE_NOT_FOUND:{buildMessage:()=>"El permiso que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Permiso no encontrado",variant:"destructive"},MESSAGE_NOT_FOUND:{buildMessage:()=>"El mensaje que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Mensaje no encontrado",variant:"destructive"},OAUTH_CONNECTION_NOT_FOUND:{buildMessage:()=>"La conexión que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Conexión no encontrada",variant:"destructive"},PHASE_NOT_FOUND:{buildMessage:()=>"La fase que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Fase no encontrada",variant:"destructive"},PLATFORM_ADMIN_NOT_FOUND:{buildMessage:()=>"El administrador de plataforma que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Administrador no encontrado",variant:"destructive"},PRACTICE_ALREADY_STARTED:{buildMessage:()=>"Esta práctica ya se habÃa iniciado. Recarga la página para ver su estado actual.",buildTitle:()=>"La práctica ya estaba iniciada",variant:"warning"},PRACTICE_EVALUATION_NOT_FOUND:{buildMessage:()=>"La evaluación de la práctica que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Evaluación no encontrada",variant:"destructive"},PRACTICE_NOT_FOUND:{buildMessage:()=>"La práctica que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Práctica no encontrada",variant:"destructive"},RECORD_NOT_FOUND:{buildMessage:()=>"El expediente que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Expediente no encontrado",variant:"destructive"},RESERVATION_NOT_FOUND:{buildMessage:()=>"La reserva que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Reserva no encontrada",variant:"destructive"},SALES_DOCUMENT_LINE_NOT_FOUND:{buildMessage:()=>"La lÃnea del documento que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"LÃnea no encontrada",variant:"destructive"},STAFF_NOT_FOUND:{buildMessage:()=>"El empleado que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Empleado no encontrado",variant:"destructive"},STUDENT_DOCUMENT_NOT_FOUND:{buildMessage:()=>"El documento del alumno que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Documento no encontrado",variant:"destructive"},STUDENT_DOCUMENT_SIGNATURE_REQUEST_NOT_FOUND:{buildMessage:()=>"La solicitud de firma que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Solicitud no encontrada",variant:"destructive"},STUDENT_NOT_FOUND:{buildMessage:()=>"El alumno que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Alumno no encontrado",variant:"destructive"},TARIFF_LINE_NOT_FOUND:{buildMessage:()=>"La lÃnea de la tarifa que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"LÃnea no encontrada",variant:"destructive"},TARIFF_NOT_FOUND:{buildMessage:()=>"La tarifa que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Tarifa no encontrada",variant:"destructive"},TENANT_NOT_FOUND:{buildMessage:()=>"La organización que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Organización no encontrada",variant:"destructive"},TENANT_SUBSCRIPTION_INFO_NOT_FOUND:{buildMessage:()=>"La información de suscripción que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Suscripción no encontrada",variant:"destructive"},USER_NOT_FOUND:{buildMessage:()=>"El usuario que buscas ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Usuario no encontrado",variant:"destructive"},ATTENDANCE_METHOD_MISMATCH:{buildMessage:()=>
2"El método de asistencia no coincide con el que tiene configurado la sesión. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Método de asistencia incorrecto",variant:"destructive"},ATTENDANCE_UNDO_NOT_ALLOWED_FOR_CAP:{buildMessage:()=>"La asistencia de un curso CAP no se puede deshacer una vez registrada.",buildTitle:()=>"No se puede deshacer",variant:"warning"},BIOMETRIC_MISMATCH:{buildMessage:()=>"El rostro no coincide con el del alumno. Inténtalo de nuevo con mejor iluminación y mirando a la cámara.",buildTitle:()=>"No hemos podido verificar la identidad",variant:"destructive"},BIOMETRIC_REFERENCE_NOT_FOUND:{buildMessage:()=>"El alumno todavÃa no tiene una foto de referencia registrada. RegÃstrala antes de verificar su identidad.",buildTitle:()=>"Sin foto de referencia",variant:"destructive"},COURSE_SESSION_CONFLICTS:{buildMessage:()=>"Las sesiones que intentas guardar se solapan con otras ya programadas. Revisa los conflictos y ajusta los horarios.",buildTitle:()=>"Sesiones en conflicto",variant:"destructive"},DIVISION_CROSS_TENANT:{buildMessage:()=>"La división seleccionada pertenece a otra organización.",buildTitle:()=>"División no válida",variant:"destructive"},DIVISION_CYCLE:{buildMessage:()=>"No puedes colgar una división de sà misma ni de una de sus descendientes.",buildTitle:()=>"JerarquÃa no válida",variant:"destructive"},DIVISION_HAS_DEPENDENCIES:{buildMessage:()=>"La división tiene secciones o divisiones dentro. VacÃala antes de eliminarla.",buildTitle:()=>"La división no está vacÃa",variant:"destructive"},DIVISION_MAX_DEPTH:{buildMessage:()=>"Has alcanzado el número máximo de niveles de divisiones anidadas.",buildTitle:()=>"Demasiados niveles",variant:"destructive"},FACIAL_RECOGNITION_ERROR:{buildMessage:()=>"No hemos podido procesar la imagen. Comprueba que se ve el rostro completo e inténtalo de nuevo.",buildTitle:()=>"Error al procesar la imagen",variant:"destructive"},INVALID_CREDENTIALS:{buildMessage:()=>"El correo o la contraseña no son correctos.",buildTitle:()=>"No hemos podido iniciar sesión",variant:"destructive"},INVALID_LEGAL_ENTITY_FOR_SECTION:{buildMessage:()=>"La entidad legal seleccionada no está disponible para esta sección.",buildTitle:()=>"Entidad legal no válida",variant:"destructive"},LEGAL_ENTITY_DIVISION_CONFLICTS_WITH_SECTIONS:{buildMessage:()=>"La división que has elegido para la entidad legal deja fuera a secciones que ya la están usando. Cámbiales la entidad legal antes de mover esta.",buildTitle:()=>"Hay secciones que dependen de esta entidad legal",variant:"destructive"},LICENSE_HAS_REFERENCES:{buildMessage:()=>"El permiso está en uso por matrÃculas, tarifas o cursos, asà que no se puede eliminar.",buildTitle:()=>"El permiso está en uso",variant:"destructive"},NO_PUSH_NOTIFICATION_TOKENS:{buildMessage:()=>"El destinatario no tiene ningún dispositivo con notificaciones activadas.",buildTitle:()=>"Sin dispositivos que avisar",variant:"warning"},SECTION_NOT_FOUND:{buildMessage:()=>"La sección seleccionada ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Sección no encontrada",variant:"destructive"},SECTION_NOT_IN_DIVISION_SUBTREE:{buildMessage:()=>"La sección seleccionada no pertenece a la división elegida.",buildTitle:()=>"Sección fuera de la división",variant:"destructive"},INTERNAL_ERROR:{buildMessage:e=>{const n=typeof e.requestId=="string"?e.requestId.slice(0,8):null;return n===null?"Ha ocurrido un error inesperado en el servidor. Inténtalo de nuevo en unos minutos.":`Ha ocurrido un error inesperado en el servidor. Inténtalo de nuevo en unos minutos. Si vuelve a pasar, dile a soporte la referencia ${n}.`},buildTitle:()=>"Error del servidor",variant:"destructive"},SCOPE_NODES_REQUIRED:{buildMessage:()=>"Tienes que seleccionar al menos un ámbito (división o sección).",buildTitle:()=>"Selecciona un ámbito",variant:"destructive"},SCOPE_NODES_INVALID_FOR_TARGET:{buildMessage:()=>"El ámbito seleccionado no es válido para el destino de esta operación. Revisa las divisiones o secciones elegidas e inténtalo de nuevo.",buildTitle:()=>"Ãmbito no válido",variant:"destructive"},PAYMENT_METHOD_NOT_FOUND:{buildMessage:()=>"El método de pago seleccionado ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Método de pago no encontrado",variant:"destructive"},FINANCIAL_ACCOUNT_NOT_FOUND:{buildMessage:()=>
2"La cuenta seleccionada ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Cuenta no encontrada",variant:"destructive"},LOGIN_CLOSED_WITHOUT_ACTIVE_ENROLLMENT:{buildMessage:()=>"El acceso de este alumno se ha cerrado porque ya no tiene matrÃculas activas. Un administrador puede reactivarlo desde su ficha.",buildTitle:()=>"Acceso cerrado",variant:"destructive"},LOGIN_DISABLED:{buildMessage:()=>"El acceso de este usuario está deshabilitado. Un administrador puede reactivarlo desde su ficha.",buildTitle:()=>"Acceso deshabilitado",variant:"destructive"},INVALID_2FA_CODE:{buildMessage:()=>"El código de verificación no es válido o ha caducado. Comprueba el código en tu aplicación e inténtalo de nuevo.",buildTitle:()=>"Código no válido",variant:"destructive"},AEOL_INVALID_DOMAIN:{buildMessage:()=>"El dominio introducido no es válido. Debe terminar en .aeolservice.es (por ejemplo, tuautoescuela.aeolservice.es).",buildTitle:()=>"Dominio no válido",variant:"destructive"},PUBLIC_BRANDING_INVALID:{buildMessage:e=>`El valor de «${Fd(e.field)}» no es válido. RevÃsalo y vuelve a guardar.`,buildTitle:()=>"Marca no válida",variant:"destructive"},PUBLIC_CSS_REJECTED:{buildMessage:e=>{const n=wo(e);return n.length===0?"El CSS no se ha guardado porque contiene reglas no admitidas.":n.length===1?`El CSS no se ha guardado: en la lÃnea ${n[0].line}, ${Po[n[0].reason]}.`:`El CSS no se ha guardado: tiene ${n.length} problemas. Los tienes listados junto al editor.`},buildTitle:()=>"CSS no admitido",variant:"destructive"},INSTRUCTOR_SCOPE_EDIT_FORBIDDEN:{buildMessage:()=>"No puedes editar el ámbito de este profesor porque está asignado a divisiones o secciones fuera de tu autoridad. Si has acotado tu vista a una división, restáurala a tu vista completa e inténtalo de nuevo.",buildTitle:()=>"Sin permiso para editar el ámbito",variant:"destructive"},EVENT_RELEASE_LOOP_LIMIT:{buildMessage:()=>"La operación se ha cancelado por completo porque el sistema no ha podido terminar de procesar sus efectos internos. No se ha guardado nada. Vuelve a intentarlo y avisa a soporte si se repite.",buildTitle:()=>"Operación cancelada",variant:"destructive"},INVALID_PAYLOAD:{buildMessage:e=>{const n=e.violations;return Array.isArray(n)&&n.length>0?n.map(t=>String(t.message??"")).filter(Boolean).join(" "):"Revisa los datos del formulario: hay campos incompletos o con un formato que no podemos leer."},buildTitle:()=>"Datos incompletos",variant:"destructive"},DNI_SCAN_NO_DATA:{buildMessage:()=>"No hemos podido leer los datos del DNI. Sube una foto más nÃtida del reverso e inténtalo de nuevo.",buildTitle:()=>"DNI no legible",variant:"warning"},SIGNATURE_REQUEST_ALREADY_EXISTS:{buildMessage:()=>"Este documento ya se ha enviado a firmar.",buildTitle:()=>"Ya enviado a firmar",variant:"warning"},SIGNATURE_ALREADY_EXISTS:{buildMessage:()=>"Este documento ya está firmado.",buildTitle:()=>"Documento ya firmado",variant:"warning"},INVALID_DOCUMENT_SERIES_PATTERN:{buildMessage:e=>String(e.detail??"El patrón de la serie no es válido."),buildTitle:()=>"Patrón no válido",variant:"destructive"},UNKNOWN_SETTING_KEY:{buildMessage:e=>`El ajuste «${String(e.settingKey??"desconocido")}» ya no existe. Recarga la página de configuración e inténtalo de nuevo.`,buildTitle:()=>"Ajuste desconocido",variant:"destructive"},INVALID_SETTING_VALUE:{buildMessage:e=>`El valor indicado para el ajuste «${String(e.settingKey??"desconocido")}» no es válido.`,buildTitle:()=>"Valor no válido",variant:"destructive"},PDF_NOT_READY:{buildMessage:()=>"La factura todavÃa se está generando. Espera unos segundos y vuelve a intentarlo.",buildTitle:()=>"Factura no disponible aún",variant:"warning"},SCOPE_ACCESS_DENIED:{buildMessage:()=>"No tienes acceso a este recurso desde tu ámbito actual. Si has acotado tu vista a una división, restáurala a tu vista completa e inténtalo de nuevo.",buildTitle:()=>"Fuera de tu ámbito",variant:"destructive"},ONLINE_ORDER_INVOICING_RULES_EMPTY:{buildMessage:()=>"Añade al menos una regla, o usa «Volver al heredado» para heredar la configuración del padre.",buildTitle:()=>"Sin reglas",variant:"destructive"},ONLINE_ORDER_INVOICING_RULE_DUPLICATED:{buildMessage:()=>"Hay dos reglas para la misma sección. Deja una sola regla por sección y una sola para «Todas las secciones».",buildTitle:()=>"Regla repetida",variant:"destructive"},ONLINE_ORDER_INVOICING_RULE_SECTION_OUT_OF_SCOPE:{buildMessage:()=>"Una de las secciones no pertenece a tu división ni a sus divisiones hijas.",buildTitle:()=>"Sección fuera de tu división",variant:"destructive"},ONLINE_ORDER_INVOICING_RULE_SERIES_NOT_INVOICE:{buildMessage:()=>"La serie elegida no es una serie de facturas. Elige una serie de facturas.",buildTitle:()=>"Serie no válida",variant:"destructive"},ONLINE_ORDER_INVOICING_RULE_DISABLED_MUST_BE_ALONE:{buildMessage:()=>"Para desactivar la facturación automática deja una sola regla para «Todas las secciones» apagada.",buildTitle:()=>"Regla desactivada con otras reglas",variant:"destructive"},TENANT_MODULE_NOT_ENABLED:{buildMessage:()=>"Esta funcionalidad no está activada en tu autoescuela. Si crees que deberÃa estarlo, escrÃbenos desde Ayuda y soporte.",buildTitle:()=>"Funcionalidad no activada",variant:"warning"},REFERRER_NOT_FOUND:{buildMessage:()=>"TodavÃa no te has unido al programa. Obtén tu enlace primero e inténtalo de nuevo.",buildTitle:()=>"Aún no estás en el programa",variant:"warning"},REFERRAL_ALREADY_ATTRIBUTED:{buildMessage:()=>"Esa autoescuela ya tiene una recomendación pendiente o pagada. Solo cuenta la primera que se registra.",buildTitle:()=>"Autoescuela ya atribuida",variant:"warning"},REFERRAL_SELF_TENANT:{buildMessage:()=>"Un referidor no puede recomendar su propia autoescuela.",buildTitle:()=>"Autoescuela no válida",variant:"destructive"},REFERRAL_INVALID_TRANSITION:{buildMessage:()=>"Solo una recomendación pendiente de pago se puede marcar como pagada o cancelar.",buildTitle:()=>"Cambio de estado no permitido",variant:"warning"},REFERRER_NOT_IN_TENANT:{buildMessage:()=>"El referidor elegido no pertenece a esta autoescuela. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Referidor no válido",variant:"destructive"},REFERRAL_NOT_FOUND:{buildMessage:()=>"La recomendación ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Recomendación no encontrada",variant:"destructive"},SCOPE_DIVISION_OUTSIDE_AUTHORITY:{buildMessage:()=>"No puedes asignar el ámbito a una división sobre la que no tienes autoridad. Si has acotado tu vista a una división, restáurala a tu vista completa e inténtalo de nuevo.",buildTitle:()=>"División fuera de tu autoridad",variant:"destructive"},SCOPE_SECTION_OUTSIDE_AUTHORITY:{buildMessage:()=>"No puedes asignar el ámbito a una sección sobre la que no tienes autoridad. Si has acotado tu vista a una división, restáurala a tu vista completa e inténtalo de nuevo.",buildTitle:()=>"Sección fuera de tu autoridad",variant:"destructive"},MISSING_TAX_IDENTIFIER:{buildMessage:e=>{const{customerName:n,isCompany:t}=e;
2return`${t?"La empresa":"El cliente"} "${n}" no tiene ${t?"NIF":"DNI/NIE"} asignado`},buildTitle:()=>"Falta el identificador fiscal",variant:"destructive",showModal:!0},INSUFFICIENT_BALANCE:{buildMessage:()=>"Saldo insuficiente para completar la operación",buildTitle:()=>"Saldo insuficiente",variant:"destructive",shouldShowModal:!0},RESERVATION_NOT_A_DRAFT:{buildMessage:()=>"Esta práctica ya no está en borrador. Recarga la agenda para ver su estado actual.",buildTitle:()=>"Ya no es un borrador",variant:"destructive"},RESERVATION_NOT_EDITABLE:{buildMessage:()=>"Esta práctica ya no se puede modificar. Recarga la agenda para ver su estado actual.",buildTitle:()=>"Práctica no modificable",variant:"destructive"},VEHICLE_ALREADY_BOOKED:{buildMessage:e=>`El vehÃculo "${e.vehicleName}" ya está asignado a otra práctica`,buildTitle:()=>"VehÃculo no disponible",variant:"destructive",shouldShowModal:!0},ENROLLMENT_CODE_ALREADY_EXISTS:{buildMessage:e=>{const{code:n}=e;return`El código ${n} ya está en uso por otra matrÃcula`},variant:"destructive"},PENDING_EXAM_ATTENDANCE_EXISTS:{buildMessage:()=>"Este alumno está convocado con resultado pendiente en un examen",buildTitle:()=>"Convocatoria pendiente",variant:"warning"},INVOICE_ALLOCATION_INVALID:{buildMessage:e=>{const{entityType:n}=e;return`La asignación de ${n==="charge"?"cargo":"pago"} no es válida`},variant:"destructive"},SECTION_ENROLLMENT_PREFIX_EXISTS:{buildMessage:()=>"Ya existe una sección con este prefijo de matrÃcula. Por favor, elige otro número.",variant:"destructive"},SECTION_NAME_EXISTS:{buildMessage:()=>"Ya existe una sección con este nombre. Por favor, elige otro nombre.",variant:"destructive"},SALES_DOCUMENT_ALREADY_ISSUED:{buildMessage:()=>"Este documento ya ha sido emitido y no puede ser modificado.",variant:"destructive"},DUPLICATE_EXAM_ATTENDANCE:{buildMessage:()=>"Este alumno ya está programado para este examen con el mismo permiso y tipo de examen.",buildTitle:()=>"Alumno ya convocado",variant:"destructive"},RESERVATION_CANNOT_BE_CANCELLED:{buildMessage:()=>"Esta práctica ya no se puede cancelar desde la app. Ponte en contacto con tu autoescuela.",buildTitle:()=>"No se puede cancelar",variant:"warning"},RESERVATION_NOT_CANCELLABLE:{buildMessage:()=>"Esta práctica ya no se puede cancelar: está cancelada o ya tiene una clase registrada.",buildTitle:()=>"No se puede cancelar",variant:"warning"},SLOTS_UNAVAILABLE:{buildMessage:()=>"Algunos de los horarios seleccionados ya no están disponibles",buildTitle:()=>"Horarios no disponibles",variant:"destructive",shouldShowModal:!0},ENROLLMENT_TARIFF_REQUIRED:{buildMessage:()=>"La tarifa es obligatoria para todas las matrÃculas",buildTitle:()=>"Tarifa requerida",variant:"destructive"},TARIFF_NOT_AVAILABLE_IN_SCOPE:{buildMessage:()=>"Esta tarifa no está disponible en tu ámbito. Puedes mantener la tarifa actual de la matrÃcula o elegir una de tu ámbito.",buildTitle:()=>"Tarifa fuera de tu ámbito",variant:"destructive"},TARIFF_NOT_VALID_ON_DATE:{buildMessage:()=>"Esta tarifa no está vigente en esa fecha. Puedes mantener la tarifa actual de la matrÃcula o elegir una vigente.",buildTitle:()=>"Tarifa no vigente",variant:"destructive"},TARIFF_WITHOUT_ENROLLMENT_PRICE_NOT_SELLABLE:{buildMessage:()=>"Para vender esta tarifa por internet, tiene que cobrar algo al matricular. Añade un importe con el cargo automático de matrÃcula.",buildTitle:()=>"No se puede vender por internet",variant:"destructive"},TREASURY_MOVEMENT_INVALID_REASON:{buildMessage:()=>"Motivo de movimiento no válido",variant:"destructive"},TREASURY_MOVEMENT_NOTES_REQUIRED:{buildMessage:()=>"El motivo es obligatorio para este tipo de movimiento",variant:"destructive"},CASH_CLOSURE_ACCOUNT_NOT_ENABLED:{buildMessage:()=>"Esta cuenta no tiene el cierre de caja habilitado",variant:"destructive"},CASH_CLOSURE_NOT_FOUND:{buildMessage:()=>"Cierre no encontrado",variant:"destructive"},CASH_CLOSURE_ADJUSTMENT_REASON_REQUIRED:{buildMessage:()=>"Debes indicar el motivo de la diferencia",variant:"destructive"},PAYMENT_DATE_IN_CLOSED_PERIOD:{buildMessage:()=>
2"La fecha seleccionada está dentro de un cierre de caja. Elige otra fecha o pide a un superadministrador que anule el cierre para continuar.",buildTitle:()=>"Ese dÃa ya está cerrado",variant:"destructive",shouldShowModal:!0},PAYMENTS_FULLY_PREPAID:{buildMessage:()=>"Los cobros seleccionados son Ãntegramente a cuenta: no tienen ningún cargo asignado que facturar. Asigna primero los cobros a sus cargos o factura desde los cargos.",buildTitle:()=>"Nada que facturar",variant:"warning"},PAYMENT_ALREADY_INVOICED:{buildMessage:e=>`El cobro ${e.paymentCode??""} ya está facturado en su totalidad.`.replace(" "," "),buildTitle:()=>"Cobro ya facturado",variant:"warning"},ENROLLMENT_NOT_FINISHED:{buildMessage:()=>"La matrÃcula sigue activa: solo se pueden reabrir matrÃculas finalizadas o abandonadas.",buildTitle:()=>"No se puede reabrir",variant:"warning"},FIELD_VALIDATION_ERROR:{buildMessage:e=>Qs(e)?"La vista previa ha caducado. Vuelve a abrirla.":"Algunos datos del formulario no son válidos. Revisa los campos marcados.",buildTitle:e=>Qs(e)?"Vista previa caducada":"Datos no válidos",variant:"destructive"},PASSWORD_POLICY_NOT_MET:{buildMessage:e=>`La contraseña debe tener al menos ${String(e.minLength)} caracteres.`,buildTitle:()=>"Contraseña demasiado corta",variant:"destructive"},PAYMENT_DATE_IN_FUTURE:{buildMessage:()=>"No se pueden registrar cobros con fecha futura. Selecciona la fecha de hoy o una fecha anterior.",buildTitle:()=>"Fecha no válida",variant:"destructive"},DEFAULT_DOCUMENT_SERIES_NOT_FOUND:{buildMessage:e=>`No hay una serie de documentos predeterminada configurada para "${e.documentTypeName}" en la sección "${e.sectionName}". Configúrala en Configuración > Series de numeración.`,buildTitle:()=>"Serie de documentos no configurada",variant:"destructive"},LICENSE_HAS_NO_PRACTICE_TYPES:{buildMessage:e=>`El permiso ${String(e.licenseName)} no tiene prácticas de destreza ni de circulación, asà que no tiene ficha de clases prácticas.`,buildTitle:()=>"Permiso sin prácticas",variant:"warning"},FISCAL_SUBMISSION_ERROR:{buildMessage:e=>e.detail||"Error al enviar los datos fiscales. Revisa la configuración fiscal y los datos del cliente.",buildTitle:()=>"Error en el sistema fiscal",variant:"destructive",showModal:!0},NO_STUDENTS_FOR_DOCUMENT:{buildMessage:()=>"No hay alumnos que cumplan los criterios para generar este documento.",buildTitle:()=>"Sin alumnos",variant:"info",showModal:!0},EMAIL_ALREADY_EXISTS:{buildMessage:e=>{const t={student:"alumno",instructor:"profesor",administrator:"administrador"}[e.existingUserType]??"usuario";return e.existingDivisionName?`Este email ya está en uso por un ${t} en ${e.existingDivisionName}. Usa otro email o pide al staff de ${e.existingDivisionName} que cambie el email de ese ${t} allÃ.`:`Ya existe un ${t} con el email ${e.email}. Usa otro email para este registro.`},buildTitle:()=>"Email en uso",variant:"destructive"},ID_CARD_NUMBER_ALREADY_EXISTS:{buildMessage:e=>e.existingStudentName?`Ya existe un alumno con este documento de identidad: ${e.existingStudentName}.`:"Ya existe un alumno con este documento de identidad.",buildTitle:()=>"Documento de identidad en uso",variant:"destructive"},ID_CARD_IMAGE_INVALID_TYPE:{buildMessage:()=>"El archivo no es una imagen válida. Sube una foto del documento en JPEG, PNG o WebP.",buildTitle:()=>"Imagen no válida",variant:"destructive"},DOCUMENT_SERIES_NUMBERS_LOCKED:{buildMessage:()=>"Esta serie ya ha emitido documentos, asà que su numeración no se puede cambiar.",buildTitle:()=>"Numeración bloqueada",variant:"destructive"},ROLE_IN_USE:{buildMessage:e=>{const n=Number(e.assignedUsers??0);return`${n} ${n===1?"usuario lo tiene":"usuarios lo tienen"} asignado. Cámbiales el rol antes de eliminarlo.`},buildTitle:()=>"El rol está en uso",variant:"destructive"},CANNOT_DELETE_SYSTEM_TEMPLATE:{buildMessage:()=>"Los roles predeterminados no se pueden eliminar. Clónalo si necesitas una variante propia.",buildTitle:()=>"Rol predeterminado",variant:"destructive"},TRACK_CAPACITY_EXCEEDED:{buildMessage:e=>{const n=String(e.trackName??""),t=String(e.incomingLicenseName??""),s=String(e.start??""),i=String(e.end??"");return`La pista "${n}" no tiene espacio libre entre ${Te(s,"HH:mm")} y ${Te(i,"HH:mm")} para una práctica de ${t}.`},buildTitle:()=>"Pista sin espacio en este horario",variant:"destructive"},TRACK_LICENSE_MAX_EXCEEDED:{buildMessage:e=>{const n=String(e.trackName??""),t=String(e.licenseName??""),s=Number(e.maxSimultaneous??0),i=Number(e.currentCount??0),o=String(e.start??""),r=String(e.end??"");return`La pista "${n}" admite hasta ${s} ${s===1?"práctica":"prácticas"} ${s===1?"simultánea":"simultáneas"} de ${t} y ya hay ${i} entre ${Te(o,"HH:mm")} y ${Te(r,"HH:mm")}.`},buildTitle:()=>"LÃmite por permiso alcanzado en esta pista",variant:"destructive"},TRACK_LICENSE_NOT_CONFIGURED:{buildMessage:e=>{const n=String(e.trackName??""),t=String(e.licenseName??"");return`La pista "${n}" no está configurada para el permiso ${t}.`},buildTitle:()=>"Permiso no admitido en esta pista",variant:"destructive"},TRACK_NOT_ALLOWED_FOR_PRACTICE_TYPE:{buildMessage:()=>
2"Solo se puede asignar pista en prácticas de destreza. Quita la pista para esta práctica.",buildTitle:()=>"Pista no aplicable a esta práctica",variant:"destructive"},FEE_CODE_ALREADY_EXISTS:{buildMessage:()=>"Ya existe una tasa con ese código. Selecciónala desde el listado o introduce un código distinto.",buildTitle:()=>"Código de tasa duplicado",variant:"destructive",shouldShowModal:!0},FEE_NOT_AVAILABLE:{buildMessage:()=>"La tasa seleccionada ya ha sido asignada a otro expediente. Cierra este aviso para refrescar el listado y elige otra.",buildTitle:()=>"Tasa no disponible",variant:"destructive",shouldShowModal:!0},FEE_TYPE_MISMATCH:{buildMessage:()=>"La tasa seleccionada no corresponde al tipo esperado para este expediente.",buildTitle:()=>"Tasa incompatible",variant:"destructive"},FEE_ASSIGNED_TO_ANOTHER_STUDENT:{buildMessage:()=>"La tasa seleccionada pertenece a otro alumno. Elige una tasa libre o una asignada a este alumno.",buildTitle:()=>"Tasa de otro alumno",variant:"destructive",shouldShowModal:!0},FEE_ALREADY_USED_BY_RECORD:{buildMessage:()=>"La tasa seleccionada ya está vinculada a otro expediente. Cada tasa solo puede respaldar un expediente.",buildTitle:()=>"Tasa ya utilizada",variant:"destructive",shouldShowModal:!0},INSTRUCTOR_PRIMARY_VEHICLE_NOT_IN_ASSIGNMENT:{buildMessage:e=>{const n=String(e.vehiclePlate??""),t=String(e.licenseName??"");return`El vehÃculo con matrÃcula ${n} marcado como principal para ${t} no está en la lista de vehÃculos asignados al profesor.`},buildTitle:()=>"VehÃculo principal no asignado",variant:"destructive"},INSTRUCTOR_PRIMARY_VEHICLE_LICENSE_MISMATCH:{buildMessage:e=>{const n=String(e.vehiclePlate??""),t=String(e.licenseName??"");return`El vehÃculo "${n}" no es compatible con el permiso ${t}.`},buildTitle:()=>"VehÃculo incompatible con el permiso",variant:"destructive"},INSTRUCTOR_PRIMARY_VEHICLE_MISSING_FOR_LICENSE:{buildMessage:e=>`Falta marcar un vehÃculo principal para el permiso ${String(e.licenseName??"")}.`,buildTitle:()=>"Falta principal",variant:"destructive"},AGENDA_FAVORITE_INVALID_ID:{buildMessage:()=>"No se ha podido marcar como favorito porque el identificador no es válido.",buildTitle:()=>"Identificador inválido",variant:"destructive"},AGENDA_FAVORITE_RESOURCE_NOT_FOUND:{buildMessage:()=>"El recurso ya no existe o ha sido archivado.",buildTitle:()=>"Recurso no disponible",variant:"destructive"},INVALID_JSON:{buildMessage:()=>"Los datos enviados no son válidos",buildTitle:()=>"Error de validación",variant:"destructive"},SIMULATION_NOT_ACTIVE:{buildMessage:()=>"El simulacro no está activo para esta práctica.",buildTitle:()=>"Simulacro no activo",variant:"destructive"},SIMULATION_ITEM_NOT_FOUND:{buildMessage:()=>"No se encontró el apartado del simulacro.",buildTitle:()=>"Apartado no encontrado",variant:"destructive"},ONLINE_PAYMENT_DISABLED:{buildMessage:()=>"El pago online no está disponible en esta autoescuela.",buildTitle:()=>"Pago online desactivado",variant:"destructive"},EMAIL_ALREADY_IN_USE:{buildMessage:()=>"Este email ya está en uso por otro usuario",buildTitle:()=>"Email en uso",variant:"destructive"},INSTRUCTOR_EMAIL_CONFLICT:{buildMessage:()=>"El email del profesor ya existe en la autoescuela de destino. Empareja ese profesor con el existente en lugar de copiarlo.",buildTitle:()=>"Email de profesor duplicado",variant:"destructive"},INVALID_GROUP_BY:{buildMessage:()=>"Modo de agrupación inválido.",buildTitle:()=>"Modo de agrupación inválido",variant:"destructive"},FEE_NOT_FOUND:{buildMessage:()=>"No se encontró ninguna tasa con ese código",buildTitle:()=>"No encontrada",variant:"destructive"},SALES_DOCUMENT_SERIES_TYPE_MISMATCH:{buildMessage:()=>"La serie seleccionada no corresponde al tipo de documento esperado.",buildTitle:()=>"Serie incompatible",variant:"destructive"},CREDIT_NOTE_SERIES_LEGAL_ENTITY_MISMATCH:{buildMessage:()=>"La serie de la factura rectificativa debe pertenecer a la misma sociedad que la factura original.",buildTitle:()=>"Serie de otra sociedad",variant:"destructive"},CREDIT_NOTE_LINE_NOT_FROM_ORIGINAL:{buildMessage:()=>"Las lÃneas de una rectificativa deben corresponder a cargos de la factura original. No se pueden añadir lÃneas nuevas.",buildTitle:()=>"LÃnea no rectificable",variant:"destructive"},CREDIT_NOTE_LINE_MUST_REDUCE_INVOICED:{buildMessage:()=>"Las lÃneas de una rectificativa solo pueden reducir el importe facturado, nunca ampliarlo.",buildTitle:()=>"Importe no válido",variant:"destructive"},CREDIT_NOTE_LINE_EXCEEDS_ORIGINAL_LINE:{buildMessage:()=>"Una lÃnea de la rectificativa supera el importe de la lÃnea original de la factura.",buildTitle:()=>"Importe excedido",variant:"destructive"},CREDIT_NOTE_LINE_EXCEEDS_INVOICED:{buildMessage:()=>"La rectificativa supera el importe facturado que queda por rectificar (puede haber rectificativas anteriores).",buildTitle:()=>"Importe excedido",variant:"destructive"},TARIFF_LINE_NOT_APPLICABLE:{buildMessage:()=>
2"Alguna de las opciones seleccionadas no pertenece a la tarifa del alumno",buildTitle:()=>"Bono no válido",variant:"destructive"},FEE_GROUP_HAS_ASSIGNED_FEES:{buildMessage:()=>"El grupo tiene tasas asignadas a alumnos",buildTitle:()=>"No se puede anular",variant:"destructive"},FEE_IS_ASSIGNED:{buildMessage:()=>"La tasa está asignada a un alumno",buildTitle:()=>"No se puede eliminar",variant:"destructive"},NO_OPEN_RECORD:{buildMessage:()=>"El alumno no tiene un expediente abierto para este permiso",buildTitle:()=>"Sin expediente abierto",variant:"destructive"},RECORD_HAS_EXAM_ATTENDANCES:{buildMessage:()=>"El expediente tiene convocatorias asociadas.",buildTitle:()=>"No se puede eliminar",variant:"destructive"},RECORD_HAS_PRESENTATION_ITEMS:{buildMessage:()=>"El expediente está incluido en una lista de tramitación.",buildTitle:()=>"No se puede eliminar",variant:"destructive"},RECORD_EXPEDIENTE_LOCKED_BY_CONVOCATORIAS:{buildMessage:()=>"El expediente tiene convocatorias consumidas: eso implica que ya está abierto en DGT.",buildTitle:()=>"No se puede desmarcar",variant:"destructive"},DUPLICATE_EXAM_ATTENDANCE_REQUEST:{buildMessage:()=>"Ya has solicitado apuntarte a este examen",buildTitle:()=>"Solicitud duplicada",variant:"destructive"},PENDING_EXAM_ATTENDANCE_REQUEST_EXISTS:{buildMessage:()=>"Ya tienes una solicitud pendiente para este tipo de examen",buildTitle:()=>"Solicitud pendiente",variant:"warning"},INSCRIPTIONS_CLOSED:{buildMessage:()=>"El periodo de inscripciones para este examen ha finalizado",buildTitle:()=>"Inscripciones cerradas",variant:"destructive"},LICENSE_HAS_NO_FEE_TYPE:{buildMessage:()=>"El sistema de expedientes no está disponible para este permiso.",buildTitle:()=>"Permiso no soportado",variant:"destructive"},COURSE_CAPACITY_EXCEEDED:{buildMessage:()=>"El curso ha alcanzado su capacidad máxima.",buildTitle:()=>"Curso completo",variant:"destructive"},COURSE_HOURS_EXCEEDED:{buildMessage:()=>"Las sesiones planificadas superan las horas totales del curso.",buildTitle:()=>"Horas del curso superadas",variant:"destructive"},COURSE_FULL:{buildMessage:()=>"Este curso no tiene plazas disponibles.",buildTitle:()=>"Curso completo",variant:"destructive"},COURSE_HOST_SECTION_ONLY:{buildMessage:()=>"Este curso solo lo administra la sección que lo organiza. Desde la tuya puedes consultarlo y matricular alumnos, pero no modificarlo ni eliminarlo.",buildTitle:()=>"Curso de otra sección",variant:"destructive"},COURSE_NOT_AVAILABLE_FOR_ENROLLMENT_SECTION:{buildMessage:()=>"El alumno y el curso pertenecen a secciones distintas. Elige un alumno de la sección del curso, o un curso de la sección del alumno.",buildTitle:()=>"Secciones distintas",variant:"destructive"},COURSE_HAS_ONLINE_CHECKOUTS_IN_PROGRESS:{buildMessage:()=>"Tiene pedidos online sin terminar.",buildTitle:()=>"No se puede borrar",variant:"destructive"},COURSE_NO_LONGER_AVAILABLE:{buildMessage:()=>"El curso ya no admite inscripciones.",buildTitle:()=>"Curso ya no disponible",variant:"destructive"},COURSE_NOT_OFFERED_ONLINE:{buildMessage:()=>"Ese curso no se ofrece en la matriculación online.",buildTitle:()=>"Curso no disponible",variant:"destructive"},STUDENT_ALREADY_ENROLLED:{buildMessage:()=>"El alumno ya está inscrito en este curso.",buildTitle:()=>"Ya inscrito",variant:"destructive"},CONVERSATION_ALREADY_EXISTS:{buildMessage:()=>"Ya tienes una conversación abierta con este contacto.",buildTitle:()=>"Conversación existente",variant:"destructive"},CHAT_PARTICIPANT_UNAVAILABLE:{buildMessage:()=>"Este usuario ya no está disponible en el chat.",buildTitle:()=>"Usuario no disponible",variant:"destructive"},CHAT_CONVERSATION_NOT_ALLOWED:{buildMessage:()=>"No puedes iniciar una conversación con este usuario.",buildTitle:()=>"Conversación no permitida",variant:"destructive"},EMPTY_CHAT_MESSAGE:{buildMessage:()=>"Escribe un mensaje o adjunta una imagen antes de enviar.",buildTitle:()=>"Mensaje vacÃo",variant:"destructive"},SCHEDULED_TASK_NOT_FOUND:{buildMessage:()=>"La tarea programada ya no existe. Recarga la página.",buildTitle:()=>"Tarea no encontrada",variant:"destructive"},SCHEDULED_TASK_ALREADY_RUNNING:{buildMessage:()=>"Espera a que termine la ejecución en curso.",buildTitle:()=>"La tarea se está ejecutando",variant:"destructive"},SCHEDULED_TASK_UNKNOWN_HANDLER:{buildMessage:()=>"Ese comando no está disponible para programar. Elige uno de la lista.",buildTitle:()=>"Comando no programable",variant:"destructive"},SCHEDULED_TASK_INVALID_CRON:{buildMessage:()=>'Revisa la expresión: debe tener cinco campos, por ejemplo "*/30 * * * *".',buildTitle:()=>"Expresión cron inválida",variant:"destructive"},SCHEDULED_TASK_INVALID_LOG_STATUS:{buildMessage:()=>"El estado por el que intentas filtrar no existe.",buildTitle:()=>"Filtro no válido",variant:"destructive"},SCHEDULED_TASK_NAME_ALREADY_EXISTS:{buildMessage:()=>"Ya existe una tarea programada con ese nombre.",buildTitle:()=>"Nombre duplicado",variant:"destructive"},STUDENT_HAS_NO_ACTIVE_ENROLLMENT:{buildMessage:()=>"Necesitas una matrÃcula activa en este centro para inscribirte al curso.",buildTitle:()=>"MatrÃcula requerida",variant:"destructive"},CAP_COURSE_REQUIRES_CODE:{buildMessage:()=>"Los cursos CAP necesitan un código DGT para poder generar el TXT de fichajes.",buildTitle:()=>"Código del curso requerido",variant:"destructive"},INVALID_ATTENDANCE_METHOD_FOR_COURSE_TYPE:{buildMessage:()=>"El método de verificación seleccionado no está permitido para este tipo de curso.",buildTitle:()=>"Método de verificación no válido",variant:"destructive"},QUICK_COURSE_LICENSE_PHASES_REQUIRED:{buildMessage:()=>"Debes seleccionar al menos un permiso para el curso.",buildTitle:()=>"Faltan permisos",variant:"destructive"},COPY_NOT_ALLOWED_FOR_PLANNED_COURSE:{buildMessage:()=>
2"No se puede copiar una sesión de un curso planificado.",buildTitle:()=>"Acción no permitida",variant:"destructive"},PLANNED_COURSE_SESSION_NOT_MUTABLE_FROM_CALENDAR:{buildMessage:()=>"Las sesiones de cursos planificados deben modificarse desde la página del curso.",buildTitle:()=>"Acción no permitida",variant:"destructive"},ALLOCATION_PERMISSION_DENIED:{buildMessage:()=>"No tienes permiso para modificar las asignaciones de este documento.",buildTitle:()=>"Sin permisos",variant:"destructive"},ALLOCATION_PAYMENT_SUM_OVER:{buildMessage:()=>"La suma de las asignaciones supera el importe del pago.",buildTitle:()=>"Importe excedido",variant:"destructive"},ALLOCATION_INVOICE_OVER_TOTAL:{buildMessage:()=>"La suma de las asignaciones supera el total de la factura.",buildTitle:()=>"Importe excedido",variant:"destructive"},ALLOCATION_CHARGE_OVER_TOTAL:{buildMessage:()=>"La asignación supera el total del cargo.",buildTitle:()=>"Importe excedido",variant:"destructive"},ALLOCATION_DOCUMENT_NOT_EDITABLE:{buildMessage:()=>"Este documento está cancelado o anulado y no se puede modificar.",buildTitle:()=>"Documento no editable",variant:"destructive"},ALLOCATION_AMOUNT_MUST_BE_NON_ZERO:{buildMessage:()=>"El importe de la asignación no puede ser cero.",buildTitle:()=>"Importe inválido",variant:"destructive"},ALLOCATION_AMOUNT_SIGN_MISMATCH:{buildMessage:()=>"El signo del importe no coincide con el del documento.",buildTitle:()=>"Signo incorrecto",variant:"destructive"},ALLOCATION_TARGET_INVALID_TYPE:{buildMessage:()=>"El cargo seleccionado no se puede asignar a este documento.",buildTitle:()=>"Cargo no válido",variant:"destructive"},ALLOCATION_TARGET_NOT_FOUND:{buildMessage:()=>"No se ha encontrado el cargo seleccionado.",buildTitle:()=>"Cargo no encontrado",variant:"destructive"},ALLOCATION_TARGET_CANCELLED:{buildMessage:()=>"No se puede asignar a un cargo cancelado.",buildTitle:()=>"Cargo cancelado",variant:"destructive"},ALLOCATION_TARGET_OUT_OF_SCOPE:{buildMessage:()=>"El cargo no pertenece al alumno o empresa de este documento.",buildTitle:()=>"Cargo fuera de ámbito",variant:"destructive"},ADVANCE_INVOICED_CANNOT_REASSIGN:{buildMessage:()=>"Este dinero a cuenta ya está facturado. Rectifica la factura del anticipo para poder moverlo.",buildTitle:()=>"Anticipo facturado",variant:"destructive"},BALANCE_MINIMUM_VIOLATION:{buildMessage:()=>"Esta operación dejarÃa el saldo de prácticas por debajo del mÃnimo permitido.",buildTitle:()=>"Saldo mÃnimo alcanzado",variant:"destructive"},CHARGE_SKIP_BALANCE_SYNC_NOT_ALLOWED:{buildMessage:()=>"La autoescuela no tiene activada la opción de crear, anular o modificar cargos sin actualizar saldo de prácticas.",buildTitle:()=>"Operación no permitida",variant:"destructive"},REQUIRED_PAYMENT_MISSING:{buildMessage:e=>{const n=e.concepts??[],t=e.missingAmount,s=t===void 0?"":` Falta por cobrar ${Jc(t)}.`;return`Estos conceptos deben cobrarse en el mismo acto: ${n.join(", ")}.${s}`},buildTitle:()=>"Falta el cobro",variant:"destructive"},COLLECTION_SOURCE_MISSING:{buildMessage:()=>"Falta el método de pago, la cuenta o la sección de cobro. RevÃsalos e inténtalo de nuevo.",buildTitle:()=>"Faltan datos del cobro",variant:"destructive"},CHARGE_PLAN_CHANGED:{buildMessage:()=>"Los importes han cambiado desde la vista previa. Vuelve a revisarla.",buildTitle:()=>"La vista previa ha caducado",variant:"destructive"},ONLINE_CHECKOUT_AMOUNT_MISMATCH:{buildMessage:()=>"El importe pagado no coincide con los cargos de la matrÃcula. RevÃsala a mano antes de volver a intentarlo.",buildTitle:()=>"El importe no cuadra",variant:"destructive"},ONLINE_CHECKOUT_NOT_NEEDING_ATTENTION:{buildMessage:()=>"Esta matriculación online ya no está pendiente de revisar. Recarga la lista.",buildTitle:()=>"Ya se ha revisado",variant:"warning"},ONLINE_CHECKOUT_RESOLUTION_NOTE_REQUIRED:{buildMessage:()=>"Cuando el motivo es «Otro», la nota es lo único que deja constancia de qué pasó con el dinero.",buildTitle:()=>"Falta la nota",variant:"warning"},ONLINE_CHECKOUT_NOT_FOUND:{buildMessage:()=>"No encontramos esta matriculación online. Revisa el enlace o vuelve a empezar desde nuestra web.",buildTitle:()=>"MatrÃcula no encontrada",variant:"destructive"},ONLINE_CHECKOUT_IDENTIFICATION_REQUIRED:{buildMessage:()=>"Ya tienes una cuenta con nosotros. Entra con tu contraseña para terminar tu matrÃcula. Aún no te hemos cobrado nada.",buildTitle:()=>"Ya tienes cuenta",variant:"info"},ONLINE_CHECKOUT_INCOMPLETE_STUDENT_PROFILE:{buildMessage:()=>"Nos faltan datos tuyos para poder matricularte por internet. Llámanos o escrÃbenos y lo completamos. Aún no te hemos cobrado nada.",buildTitle:()=>"Nos faltan datos tuyos",variant:"warning"},ONLINE_CHECKOUT_ACCOUNT_UNAVAILABLE:{buildMessage:()=>"No podemos completar tu matrÃcula por internet. Llámanos o escrÃbenos y lo resolvemos. Aún no te hemos cobrado nada.",buildTitle:()=>"Necesitamos hablar contigo",variant:"destructive"},ONLINE_CHECKOUT_COURSE_REQUIRED:{buildMessage:()=>
2"Esta tarifa exige elegir un curso.",buildTitle:()=>"Falta el curso",variant:"destructive"},TARIFF_NOT_PURCHASABLE_ONLINE:{buildMessage:()=>"Esta tarifa ya no se puede contratar por internet. Vuelve a la página de matriculación online y elige otra, o llámanos.",buildTitle:()=>"Tarifa no disponible",variant:"destructive"},SECTION_NOT_PURCHASABLE_ONLINE:{buildMessage:()=>"Esta sección no vende esta tarifa por internet. Vuelve a la página de matriculación online y elige otra sección.",buildTitle:()=>"Sección no disponible",variant:"destructive"},LEGAL_REPRESENTATIVE_REQUIRED:{buildMessage:()=>"Eres menor de edad, asà que necesitamos los datos de tu padre, madre o tutor legal para poder matricularte.",buildTitle:()=>"Faltan los datos del tutor legal",variant:"destructive"},LEGAL_TERMS_NOT_ACCEPTED:{buildMessage:()=>"Tienes que aceptar las condiciones del servicio y la polÃtica de privacidad. Si han cambiado mientras rellenabas el formulario, recarga la página y vuelve a leerlas.",buildTitle:()=>"Condiciones sin aceptar",variant:"destructive"},UNKNOWN_COLLECTION_LINE:{buildMessage:()=>"Los cargos han cambiado desde que abriste la pantalla. Vuelve a abrirla para marcar lo que se cobra.",buildTitle:()=>"Selección de cobro caducada",variant:"destructive"},CHARGE_SKIP_REQUIRED_PAYMENT_NOT_ALLOWED:{buildMessage:()=>"No tienes permiso para cargar un concepto de cobro obligatorio al cargar sin cobrarlo.",buildTitle:()=>"Operación no permitida",variant:"destructive"},PAYMENT_NOT_FOUND:{buildMessage:()=>"No se ha encontrado el pago indicado.",buildTitle:()=>"Pago no encontrado",variant:"destructive"},SALES_DOCUMENT_NOT_FOUND:{buildMessage:()=>"No se ha encontrado el documento de venta indicado.",buildTitle:()=>"Documento no encontrado",variant:"destructive"},COLLECTION_SECTION_NOT_FOUND:{buildMessage:()=>"La sección de cobro indicada no existe.",buildTitle:()=>"Sección no encontrada",variant:"destructive"},FINANCIAL_ACCOUNT_NOT_VALID_FOR_COLLECTION:{buildMessage:()=>"La cuenta seleccionada no admite este método de pago en la sección de cobro.",buildTitle:()=>"Cuenta no válida",variant:"destructive"},STAFF_DEFAULT_SECTION_REQUIRED:{buildMessage:()=>"Debes marcar una sección como principal.",buildTitle:()=>"Sección principal requerida",variant:"destructive"},DEPENDENCY_VALIDATION_FAILED:{buildMessage:()=>"Hay entidades que dependen de otras que no se han incluido en la copia.",buildTitle:()=>"Dependencias no satisfechas",variant:"destructive"},TPV_DRAIN_DESTINATION_REQUIRED:{buildMessage:()=>"Selecciona una cuenta de tipo Banco donde se liquidará el TPV.",buildTitle:()=>"Falta la cuenta de liquidación",variant:"destructive"},TPV_DRAIN_DESTINATION_MUST_BE_BANK:{buildMessage:()=>"La cuenta de liquidación de un TPV debe ser una cuenta de tipo Banco.",buildTitle:()=>"Cuenta de liquidación inválida",variant:"destructive"},INVALID_DISCOUNT_RATE:{buildMessage:()=>"El descuento debe estar entre 0% y 100%. Revisa las lÃneas de la tarifa e inténtalo de nuevo.",buildTitle:()=>"Descuento no válido",variant:"destructive"},CONCEPT_IN_USE:{buildMessage:e=>{const{conceptName:n,tariffLineCount:t,chargeCount:s,salesDocumentLineCount:i}=e,o=[t?`${t} ${t===1?"lÃnea de tarifa":"lÃneas de tarifa"}`:null,s?`${s} ${s===1?"cargo":"cargos"}`:null,i?`${i} ${i===1?"lÃnea de factura":"lÃneas de factura"}`:null].filter(Boolean),r=o.length>0?` Se usa en ${o.join(", ")}.`:"";return`El concepto "${n}" no se puede eliminar porque está en uso.${r} ArchÃvalo para retirarlo del catálogo sin afectar a lo que ya lo usa.`},buildTitle:()=>"Concepto en uso",variant:"destructive"},DISCOUNT_NOT_ALLOWED_FOR_FEES:{buildMessage:()=>"Las tasas no admiten descuento. Quita el descuento del concepto de tasa e inténtalo de nuevo.",buildTitle:()=>"Descuento no permitido",variant:"destructive"},INVALID_DRAIN_DESTINATION_CLOSEABLE_ACCOUNT:{buildMessage:()=>"La cuenta destino no puede ser una caja ni un TPV.",buildTitle:()=>"Destino no válido",variant:"destructive"},INVALID_DRAIN_DESTINATION_SELF:{buildMessage:()=>"Una cuenta no puede transferir su saldo a sà misma.",buildTitle:()=>"Destino no válido",variant:"destructive"},RECORD_NOT_IN_SAME_ENROLLMENT:{buildMessage:()=>"El expediente seleccionado no pertenece a la matrÃcula del examen.",buildTitle:()=>"Expediente no válido",variant:"destructive"},ADVANCE_INVALID_INPUT:{buildMessage:()=>"Selecciona al menos un origen y un destino.",buildTitle:()=>"No se puede aplicar dinero a cuenta",variant:"destructive"},ADVANCE_CHARGE_NOT_FOUND:{buildMessage:()=>"No se encontró alguno de los cargos seleccionados.",buildTitle:()=>"Cargo no encontrado",variant:"destructive"},ADVANCE_SOURCES_NOT_AVAILABLE:{buildMessage:()=>"Alguno de los orÃgenes seleccionados ya no tiene dinero a cuenta disponible.",buildTitle:()=>
2"Dinero a cuenta no disponible",variant:"destructive"},ADVANCE_TARGET_INVALID:{buildMessage:()=>"Alguno de los destinos seleccionados ya no es un cargo pendiente.",buildTitle:()=>"Cargo no válido",variant:"destructive"},ADVANCE_CROSS_ENROLLMENT_NOT_ALLOWED:{buildMessage:()=>"El dinero a cuenta solo se puede usar dentro de la misma matrÃcula.",buildTitle:()=>"Operación no permitida",variant:"destructive"},ADVANCE_VAT_MISMATCH:{buildMessage:()=>"Este dinero a cuenta ya está facturado con otro tipo de IVA y solo puede aplicarse a cargos con el mismo IVA.",buildTitle:()=>"IVA incompatible",variant:"destructive"},ADVANCE_CONCEPT_RECLASSIFY_FORBIDDEN:{buildMessage:()=>"No se puede cambiar el concepto de un anticipo ya facturado. Rectifica la factura primero.",buildTitle:()=>"Anticipo ya facturado",variant:"destructive"},PAYMENT_CONCEPT_AND_ALLOCATIONS_EXCLUSIVE:{buildMessage:()=>"Un cobro no puede asignar cargos y un concepto a cuenta a la vez. Usa cobros separados.",buildTitle:()=>"Operación no válida",variant:"destructive"},TARIFF_LINE_NOT_FOUND_FOR_CONCEPT:{buildMessage:()=>"El concepto seleccionado no está en la tarifa de esta matrÃcula.",buildTitle:()=>"Concepto sin tarifa",variant:"destructive"},ENROLLMENT_HAS_NO_TARIFF:{buildMessage:()=>"Esta matrÃcula no tiene una tarifa asignada.",buildTitle:()=>"MatrÃcula sin tarifa",variant:"destructive"},CONCEPT_REQUIRED_FOR_RECLASSIFY:{buildMessage:()=>"Debes indicar un concepto para reclasificar el anticipo.",buildTitle:()=>"Concepto requerido",variant:"destructive"},CHARGE_NOT_ADVANCE:{buildMessage:()=>"Solo se puede reclasificar el concepto de un cobro a cuenta.",buildTitle:()=>"Operación no válida",variant:"destructive"},ADVANCE_NO_AMOUNT_APPLIED:{buildMessage:()=>"No se ha podido aplicar ningún importe.",buildTitle:()=>"Sin importe aplicado",variant:"destructive"},DOCUMENT_TEMPLATE_SCOPE_REQUIRED:{buildMessage:()=>"Selecciona al menos un nodo en 'Dónde aplica' antes de guardar la plantilla.",buildTitle:()=>"Falta el ámbito",variant:"destructive"},FINANCIAL_ACCOUNT_SCOPE_REQUIRED:{buildMessage:()=>"Selecciona al menos un nodo en 'Dónde aplica' antes de guardar la cuenta.",buildTitle:()=>"Falta el ámbito",variant:"destructive"},CONCEPT_SCOPE_REQUIRED:{buildMessage:()=>"Selecciona al menos un nodo en 'Dónde aplica' antes de guardar el concepto.",buildTitle:()=>"Falta el ámbito",variant:"destructive"},MEETING_POINT_SCOPE_REQUIRED:{buildMessage:()=>"Selecciona al menos un nodo en 'Dónde aplica' antes de guardar el punto de encuentro.",buildTitle:()=>"Falta el ámbito",variant:"destructive"},PAYMENT_METHOD_SCOPE_REQUIRED:{buildMessage:()=>"Selecciona al menos un nodo en 'Dónde aplica' antes de guardar el método de pago.",buildTitle:()=>"Falta el ámbito",variant:"destructive"},AUES_DGT_VALIDATION_ERROR:{buildMessage:()=>"Revisa los datos de tu autoescuela y certificado.",buildTitle:()=>"DGT rechazó la petición",variant:"destructive"},AUES_NOT_CONFIGURED:{buildMessage:()=>"Guarda primero un certificado y entorno antes de probar la conexión.",buildTitle:()=>"AUES no configurado",variant:"destructive"},AUES_CONNECTION_FAILED:{buildMessage:()=>"Comprueba conectividad de red y vuelve a intentarlo.",buildTitle:()=>"No se pudo conectar con DGT",variant:"destructive"},AUES_DGT_BUSINESS_ERROR:{buildMessage:()=>"DGT ha rechazado por estado del expediente. Revisa el detalle.",buildTitle:()=>"DGT no admite la solicitud",variant:"destructive"},AUES_OPERATION_FAILED:{buildMessage:()=>"La llamada al WS de DGT falló inesperadamente.",buildTitle:()=>"Error en operación AUES",variant:"destructive"},AUES_TRANSFER_FAILED:{buildMessage:()=>"No se pudo trasladar el expediente. DGT rechazó la solicitud.",buildTitle:()=>"Traslado rechazado por DGT",variant:"destructive"},INVALID_AUES_CERTIFICATE:{buildMessage:e=>Kd(e),buildTitle:e=>Bd(e),variant:"destructive"},AUES_RETAKE_NOT_ALLOWED:{buildMessage:()=>"Este alumno es repetidor y esta jefatura solo usa AUES para abrir expediente. Gestiónalo manualmente (ODS).",buildTitle:()=>"Repetidor no permitido",variant:"destructive"},AUES_EXAM_TYPE_DISABLED:{buildMessage:()=>"Esta prueba no usa AUES en esta autoescuela.",buildTitle:()=>"Prueba no habilitada",variant:"destructive"},AUES_TRAMITAR_INLINE_NOT_SOLICITUD_ONLY:{buildMessage:()=>"La tramitación rápida solo está disponible cuando AUES está en modo solo-solicitud para este tipo de prueba.",buildTitle:()=>"No disponible para este examen",variant:"destructive"},EXAM_PRESENTATION_ENROLLMENT_IN_OTHER_DRAFT:{buildMessage:()=>"Este alumno ya está en otra tramitación activa del mismo tipo.",buildTitle:()=>"Alumno ya en otra tramitación",variant:"destructive"},EXAM_PRESENTATION_NO_FREE_FEE:{buildMessage:()=>"No quedan tasas disponibles en el pool. Añade más o cambia a asignación manual.",buildTitle:()=>"Sin tasas libres",variant:"destructive"},EXAM_PRESENTATION_ITEM_NOT_READY:{buildMessage:()=>"Tiene datos o validaciones pendientes.",buildTitle:()=>"Alumno no está listo",variant:"destructive"},EXAM_PRESENTATION_ITEM_MISSING_EXPEDIENTE:{buildMessage:()=>"No puedes tramitar mientras haya alumnos sin un expediente abierto y válido.",buildTitle:()=>"Falta expediente",variant:"destructive"},EXAM_PRESENTATION_RECORD_ALREADY_OPEN:{buildMessage:()=>"Este alumno ya tiene un expediente abierto y válido para este permiso.",buildTitle:()=>"Expediente ya abierto",variant:"destructive"},EXAM_PRESENTATION_ITEM_ALREADY_SUBMITTED:{buildMessage:()=>"Este alumno ya está tramitado en DGT; no se puede eliminar, devolver a borrador ni re-comprobar.",buildTitle:()=>"No se puede modificar",variant:"destructive"}
2,EXAM_PRESENTATION_NOT_EMPTY:{buildMessage:()=>"No se puede eliminar la lista porque tiene alumnos. QuÃtalos primero de la lista.",buildTitle:()=>"La lista no está vacÃa",variant:"destructive"},EXAM_NOT_EMPTY:{buildMessage:()=>"No se puede eliminar el examen porque no está vacÃo: tiene alumnos convocados, solicitudes o una tramitación DGT vinculada.",buildTitle:()=>"El examen no está vacÃo",variant:"destructive"},AUES_ITEM_ALREADY_SUBMITTED:{buildMessage:()=>"Esta solicitud ya se envió a la DGT; no hay nada que confirmar.",buildTitle:()=>"No se puede modificar",variant:"destructive"},AUES_RECORD_REQUIRED:{buildMessage:()=>"El alumno no tiene expediente en Drovify. Créalo primero (con «Tasa tramitada en DGT» marcada).",buildTitle:()=>"Sin expediente abierto",variant:"destructive"},SIMULATED_CITA_ITEM_NOT_FOUND:{buildMessage:()=>"Alguna de las solicitudes seleccionadas ya no está pendiente o no pertenece a un tenant con AUES simulado activo.",buildTitle:()=>"Cita no encontrada",variant:"destructive"},EXAM_AUES_MANAGED:{buildMessage:()=>"Este examen lo gestiona AUES automáticamente y no se puede crear, editar, mover ni borrar a mano.",buildTitle:()=>"Examen gestionado por AUES",variant:"destructive"},EXAM_QUOTA_EXCEEDS_DGT:{buildMessage:()=>"No puedes asignar más plazas de las otorgadas por la DGT en esta categorÃa. Reduce el reparto o aumenta los minutos DGT.",buildTitle:()=>"Cupo DGT superado",variant:"destructive"},ENROLLMENT_CODE_CONFLICT_IN_SECTION:{buildMessage:()=>"Ya existe una matrÃcula con este código en la sección de destino. Cambia el código antes de mover la matrÃcula.",buildTitle:()=>"Código en uso",variant:"destructive"},REFUND_EXCEEDS_REFUNDABLE_AMOUNT:{buildMessage:()=>"El importe de la devolución supera lo que queda por devolver en esta rectificativa.",buildTitle:()=>"Devolución excede el importe pendiente",variant:"destructive"},COMPENSATION_NOT_AVAILABLE:{buildMessage:()=>"Solo se pueden compensar rectificativas emitidas y vinculadas a una factura.",buildTitle:()=>"Compensación no disponible",variant:"destructive"},NOTHING_TO_COMPENSATE:{buildMessage:()=>"No hay importe compensable: todo lo rectificado está cobrado o ya compensado.",buildTitle:()=>"Nada que compensar",variant:"warning"},COMPENSATION_NOT_FOUND:{buildMessage:()=>"Esta rectificativa no tiene compensaciones que deshacer.",buildTitle:()=>"Sin compensaciones",variant:"warning"},REFUND_SIGN_MISMATCH:{buildMessage:()=>"El signo del importe no coincide con el pendiente de devolución del cargo.",buildTitle:()=>"Signo incorrecto",variant:"destructive"},CHARGE_HAS_LIVE_INVOICED_AMOUNT:{buildMessage:()=>"No se puede anular el cargo porque aún está facturado. Emite una factura rectificativa que lo netee y vuelve a intentarlo.",buildTitle:()=>"Cargo con importe facturado",variant:"destructive"},INVALID_LICENSE_CODE:{buildMessage:()=>"Uno de los códigos de licencia indicados no existe.",buildTitle:()=>"Código de licencia inválido",variant:"destructive"},UNOFFICIAL_LICENSE_ALWAYS_EXCLUDED:{buildMessage:()=>"Los permisos no oficiales nunca entran en el libro de registro.",buildTitle:()=>"Permiso no oficial",variant:"warning"},EXAM_SIMULATION_CRITERIA_CLAVE_NOT_FOUND:{buildMessage:()=>"Una de las claves referenciadas por los Ãtems no pertenece a este simulacro.",buildTitle:()=>"Clave no encontrada",variant:"destructive"},INVALID_SIMULATION_CRITERIA_PAYLOAD:{buildMessage:()=>"El formulario contiene datos incorrectos. Revisa que los campos obligatorios no estén vacÃos y que la gravedad sea válida.",buildTitle:()=>"Datos inválidos",variant:"destructive"},SIMULATION_SEVERITY_REQUIRED:{buildMessage:()=>"Debes indicar la gravedad de la falta.",buildTitle:()=>"Gravedad requerida",variant:"destructive"},EXAM_SIMULATION_CRITERIA_NOT_FOUND:{buildMessage:()=>"No se ha encontrado el cuadro de criterios.",buildTitle:()=>"Cuadro no encontrado",variant:"destructive"},CHATBOT_CONVERSATION_NOT_FOUND:{buildMessage:()=>"No se ha encontrado la conversación del chatbot.",buildTitle:()=>"Conversación no encontrada",variant:"destructive"},INSIGHT_REGENERATION_ALREADY_PENDING:{buildMessage:()=>"Ese tenant ya tiene una regeneración en cola. Espera a que termine.",buildTitle:()=>"Regeneración en curso",variant:"info"},INSIGHT_REPORT_NOT_FOUND:{buildMessage:()=>"Ese informe ya no existe. Recarga la lista.",buildTitle:()=>"Informe no encontrado",variant:"destructive"},INSIGHT_CODE_UNKNOWN:{buildMessage:()=>"Ese aviso ya no está en el informe de hoy. Recarga la página.",buildTitle:()=>"Aviso no encontrado",variant:"destructive"},INSIGHT_PREVIEW_FAILED:{buildMessage:e=>`La IA no ha producido un informe válido: ${String(e.reason??"motivo desconocido")}`,buildTitle:()=>"Vista previa fallida",variant:"warning"},KB_FRAGMENT_NOT_FOUND:{buildMessage:()=>"No se ha encontrado la entrada de conocimiento del chatbot.",buildTitle:()=>"Entrada no encontrada",variant:"destructive"},KB_IMPORT_INVALID_BUNDLE:{buildMessage:()=>"El archivo de importación no es válido o tiene una versión no soportada.",buildTitle:()=>"Importación inválida",variant:"destructive"},KB_IMPORT_MISSING_CATEGORY:{buildMessage:()=>"El archivo de importación tiene artÃculos cuya categorÃa no viaja en el bundle. Vuelve a exportarlo completo.",buildTitle:()=>"Faltan categorÃas",variant:"destructive"},KB_ARTICLE_SLUG_TAKEN:{buildMessage:()=>"Ya existe un artÃculo con ese identificador (slug). Elige otro.",buildTitle:()=>"Identificador en uso",variant:"destructive"},KB_CATEGORY_SLUG_TAKEN:{buildMessage:()=>"Ya existe una categorÃa con ese identificador (slug). Elige otro.",buildTitle:()=>"Identificador en uso",variant:"destructive"},KB_CATEGORY_HAS_ARTICLES:{buildMessage:()=>"La categorÃa tiene artÃculos. Muévelos a otra categorÃa antes de eliminarla.",buildTitle:()=>"CategorÃa con artÃculos",variant:"destructive"},KB_IMAGE_INVALID_TYPE:{buildMessage:()=>"Formato de imagen no admitido (usa PNG, JPG, GIF o WEBP).",buildTitle:()=>"Imagen no válida",variant:"destructive"},KB_IMAGE_TOO_LARGE:{buildMessage:()=>"La imagen supera el tamaño máximo (2 MB).",buildTitle:()=>"Imagen demasiado grande",variant:"destructive"},CHAT_ATTACHMENT_INVALID_TYPE:{buildMessage:()=>"Solo se pueden adjuntar imágenes (PNG, JPG, WebP o GIF).",buildTitle:()=>"Formato no admitido",variant:"destructive"},CHAT_ATTACHMENT_TOO_LARGE:{buildMessage:()=>"La imagen supera el tamaño máximo (5 MB).",buildTitle:()=>"Imagen demasiado grande",variant:"destructive"},CHAT_ATTACHMENT_REQUIRES_ESCALATION:{buildMessage:()=>"Solo se pueden adjuntar imágenes cuando la conversación está atendida por una persona del equipo.",buildTitle:()=>"TodavÃa no puedes adjuntar",variant:"destructive"},NO_FILE_UPLOADED:{buildMessage:()=>"No se ha adjuntado ningún archivo.",buildTitle:()=>"Falta el archivo",variant:"destructive"},EXAM_TYPE_MISMATCH:{buildMessage:()=>"El tipo de prueba no coincide con el tipo del examen.",buildTitle:()=>"Tipo de prueba incorrecto",variant:"destructive"},EXAM_INSTRUCTOR_SCHEDULE_ALREADY_EXISTS:{buildMessage:()=>"Este profesor ya tiene un horario asignado en el examen.",buildTitle:()=>"Profesor ya asignado",variant:"destructive"},EXAM_INSTRUCTOR_SCHEDULE_NOT_REMOVABLE:{buildMessage:()=>"Solo se pueden quitar profesores añadidos manualmente al examen.",buildTitle:()=>"No se puede quitar el profesor",variant:"destructive"},EXAM_SECTION_UNRESOLVED:{buildMessage:()=>"No se pudo resolver la sección del examen para añadir el profesor. Contacta con soporte.",buildTitle:()=>"No se pudo determinar la sección",variant:"destructive"},WORK_SHIFT_NOT_FOUND:{buildMessage:()=>"El turno indicado no existe o ha sido eliminado.",buildTitle:()=>"Turno no encontrado",variant:"destructive"},WORK_SHIFT_INVALID_TARGET_USER:{buildMessage:()=>"Solo se pueden crear turnos para profesores o personal.",buildTitle:()=>"Usuario no válido",variant:"destructive"},WORK_SHIFT_INVALID_RANGE:{buildMessage:()=>"La hora de fin debe ser posterior a la de inicio.",buildTitle:()=>"Rango inválido",variant:"destructive"},WORK_SHIFT_OVERLAP:{buildMessage:e=>{const t=(Array.isArray(e.conflicts)?e.conflicts:[]).filter(kd);if(t.length===0)return"La franja se solapa con otra franja existente de este empleado. Ajusta el horario o edita la franja existente.";const[s]=t;return t.length===1?`Ya hay una franja el ${Kt(s.date)}, de ${s.start} a ${s.end}. Cambia la hora o edita esa franja.`:t.every(r=>r.start===s.start&&r.end===s.end)?`Ya hay una franja el ${Kt(s.date)}, de ${s.start} a ${s.end}, y se repite las semanas siguientes. Cambia la hora o edita esa franja.`:`Ya hay franjas que se cruzan: ${$d(t.map(zd))}. Cambia la hora o edÃtalas.`},buildTitle:()=>"Franjas solapadas",variant:"destructive"},WORK_SHIFT_NOT_RESETTABLE:{buildMessage:()=>"Este turno no proviene de un patrón recurrente, asà que no tiene un valor por defecto al que volver.",buildTitle:()=>"No se puede restablecer",variant:"destructive"},BIZUM_PAYMENT_METHOD_REQUIRED:{buildMessage:()=>"Selecciona el método de pago con el que registrar los cobros Bizum",buildTitle:()=>"Falta método de pago Bizum",variant:"destructive"},REDSYS_GATEWAY_ASSIGNMENT_REQUIRED:{buildMessage:()=>"Selecciona al menos una división o sección donde usar la pasarela",buildTitle:()=>
2"Sin destino",variant:"destructive"},REDSYS_GATEWAY_DESTINATION_ALREADY_ASSIGNED:{buildMessage:()=>"Ese destino ya tiene una pasarela asignada. QuÃtala primero de la otra pasarela.",buildTitle:()=>"Destino ya asignado",variant:"destructive"},REDSYS_GATEWAY_NOT_FOUND:{buildMessage:()=>"La pasarela ya no existe. Recarga la página.",buildTitle:()=>"Pasarela no encontrada",variant:"destructive"},REDSYS_GATEWAY_PAYMENT_METHOD_NOT_CONFIGURED:{buildMessage:()=>"La pasarela no tiene configurado el método de cobro de esa forma de pago. Configúralo y vuelve a intentarlo.",buildTitle:()=>"Pasarela sin método de cobro",variant:"destructive"},REDSYS_GATEWAY_TARGET_OUT_OF_SCOPE:{buildMessage:()=>"No puedes asignar la pasarela a un destino fuera de tu división",buildTitle:()=>"Destino fuera de tu ámbito",variant:"destructive"},AUES_CREDENTIAL_ASSIGNMENT_REQUIRED:{buildMessage:()=>"Selecciona al menos una división o sección donde usar el certificado",buildTitle:()=>"Sin destino",variant:"destructive"},AUES_CREDENTIAL_DESTINATION_ALREADY_ASSIGNED:{buildMessage:()=>"Ese destino ya tiene un certificado asignado. QuÃtalo primero del otro certificado.",buildTitle:()=>"Destino ya asignado",variant:"destructive"},AUES_CREDENTIAL_NOT_FOUND:{buildMessage:()=>"El certificado ya no existe. Recarga la página.",buildTitle:()=>"Certificado no encontrado",variant:"destructive"},AUES_CREDENTIAL_TARGET_OUT_OF_SCOPE:{buildMessage:()=>"No puedes asignar el certificado a un destino fuera de tu división",buildTitle:()=>"Destino fuera de tu ámbito",variant:"destructive"},AUES_CREDENTIAL_DOI_REQUIRED:{buildMessage:()=>"No hemos podido leerlo del certificado. EscrÃbelo en el campo que aparece en el formulario.",buildTitle:()=>"DNI no detectado",variant:"destructive"},AUES_CREDENTIAL_CERTIFICATE_CONTENT_REQUIRED:{buildMessage:()=>"Sube de nuevo el certificado para cambiar su contraseña o formato",buildTitle:()=>"Falta el certificado",variant:"destructive"},AUES_CREDENTIAL_NO_SECTION_IN_SCOPE:{buildMessage:()=>"Este certificado no cubre la sección seleccionada. Elige una sección incluida en su cobertura.",buildTitle:()=>"Sección fuera de cobertura",variant:"destructive"},REDSYS_KEY_REQUIRED:{buildMessage:()=>"Introduce la clave SHA-512 de la pasarela para crearla",buildTitle:()=>"Clave requerida",variant:"destructive"},HOLDED_API_KEY_REQUIRED:{buildMessage:()=>"Escribe la API key de Holded",buildTitle:()=>"Falta la API key",variant:"destructive"},HOLDED_AUTH_INVALID:{buildMessage:()=>"Holded no acepta esa API key. Cópiala de nuevo desde Holded (Configuración â Desarrolladores).",buildTitle:()=>"API key no válida",variant:"destructive"},HOLDED_CONNECTION_ALREADY_EXISTS:{buildMessage:()=>"Esa sociedad ya tiene una conexión con Holded. EdÃtala en lugar de crear otra.",buildTitle:()=>"Conexión ya existente",variant:"destructive"},HOLDED_CONNECTION_NOT_FOUND:{buildMessage:()=>"La conexión con Holded ya no existe. Recarga la página.",buildTitle:()=>"Conexión no encontrada",variant:"destructive"},HOLDED_CONNECTION_REQUIRED:{buildMessage:()=>"La sociedad de la serie no tiene una conexión activa con Holded.",buildTitle:()=>"Sin conexión con Holded",variant:"destructive"},HOLDED_DOCUMENT_SYNC_NOT_FOUND:{buildMessage:()=>"El envÃo a Holded ya no existe. Recarga la página.",buildTitle:()=>"EnvÃo no encontrado",variant:"destructive"},HOLDED_DOCUMENT_SYNC_NOT_RETRYABLE:{buildMessage:()=>"Este envÃo ya está en marcha o se completó. Espera unos minutos antes de reintentarlo.",buildTitle:()=>"No se puede reintentar",variant:"warning"},HOLDED_DOCUMENT_TYPE_NOT_SUPPORTED:{buildMessage:()=>"Solo se envÃan a Holded las series de facturas.",buildTitle:()=>"Tipo de serie no admitido",variant:"destructive"},HOLDED_NUMBERING_SERIES_NOT_FOUND:{buildMessage:()=>"La serie elegida ya no existe en Holded. Elige otra.",buildTitle:()=>"Serie de Holded no encontrada",variant:"destructive"},HOLDED_NUMBERING_SERIES_REQUIRED:{buildMessage:()=>"Elige la serie de Holded con la que se enviarán los documentos.",buildTitle:()=>"Falta la serie de Holded",variant:"destructive"},HOLDED_REJECTED:{buildMessage:()=>"Holded ha rechazado la petición.",buildTitle:()=>"Error de Holded",variant:"destructive"},HOLDED_UNAVAILABLE:{buildMessage:()=>"Holded no responde. Inténtalo de nuevo en unos minutos.",buildTitle:()=>
2"Holded no disponible",variant:"destructive"},NOTIFICATION_NOT_FOUND:{buildMessage:()=>"La notificación ya no existe.",buildTitle:()=>"Notificación no encontrada",variant:"destructive"},NOTIFICATION_TYPE_NOT_STAFF:{buildMessage:()=>"Este tipo de notificación no admite configuración por secciones.",buildTitle:()=>"Tipo no válido",variant:"destructive"},SECTION_NOT_IN_SCOPE:{buildMessage:()=>"No puedes suscribirte a una sección fuera de tu ámbito.",buildTitle:()=>"Sección no disponible",variant:"destructive"},API_KEY_SCOPE_REQUIRED:{buildMessage:()=>"Selecciona al menos una división para el ámbito de la clave.",buildTitle:()=>"Ãmbito requerido",variant:"destructive"},API_KEY_SCOPE_NOT_ALLOWED:{buildMessage:()=>"El ámbito elegido incluye divisiones fuera de tu alcance.",buildTitle:()=>"Ãmbito no permitido",variant:"destructive"},API_KEY_ALREADY_REVOKED:{buildMessage:()=>"Esta API key ya estaba revocada. Recarga la página.",buildTitle:()=>"API key ya revocada",variant:"destructive"},EXTERNAL_API_MODULE_DISABLED:{buildMessage:()=>"El módulo de API de Drovify no está activo para tu autoescuela.",buildTitle:()=>"Módulo no activo",variant:"destructive"},ENROLLMENT_NOT_ACTIVE:{buildMessage:()=>"La matrÃcula no está activa. Solo se puede cambiar el permiso de matrÃculas activas.",buildTitle:()=>"MatrÃcula no activa",variant:"destructive",shouldShowModal:!0},ENROLLMENT_LICENSE_SAME:{buildMessage:()=>"El permiso elegido es el que ya tiene la matrÃcula.",buildTitle:()=>"Mismo permiso",variant:"destructive",shouldShowModal:!0},ENROLLMENT_RECORD_ALREADY_FILED_WITH_DGT:{buildMessage:()=>"El expediente abierto ya se tramitó en la DGT, asà que el cambio no llegarÃa allÃ. Cierra ese expediente y abre uno nuevo con el permiso correcto.",buildTitle:()=>"Expediente ya tramitado",variant:"destructive",shouldShowModal:!0},ENROLLMENT_HAS_FUTURE_EXAM_ATTENDANCES:{buildMessage:()=>"El alumno está apuntado a convocatorias de examen futuras con el permiso actual. QuÃtalo de esas convocatorias antes de cambiar el permiso.",buildTitle:()=>"Convocatorias futuras",variant:"destructive",shouldShowModal:!0},TARIFF_LICENSE_MISMATCH:{buildMessage:()=>"La tarifa elegida no pertenece al permiso de destino.",buildTitle:()=>"Tarifa no válida",variant:"destructive",shouldShowModal:!0},LICENSE_HAS_NO_PRACTICE_PHASES:{buildMessage:()=>"Hay prácticas futuras y el permiso de destino no tiene fases prácticas a las que convertirlas.",buildTitle:()=>"Sin fases prácticas",variant:"destructive",shouldShowModal:!0},OWNED_LICENSE_DATE_REQUIRED:{buildMessage:()=>"Indica la fecha de obtención del permiso que posee.",buildTitle:()=>"Fecha requerida",variant:"destructive"},OWNED_LICENSE_NOT_FOUND:{buildMessage:()=>"El permiso en posesión ya no existe. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Permiso no encontrado",variant:"destructive"},TENANT_DUMP_EXPIRED:{buildMessage:()=>"El dump ha caducado. Genera uno nuevo para poder descargarlo.",buildTitle:()=>"Dump caducado",variant:"destructive"},DASHBOARD_INVALID_FILTER:{buildMessage:()=>"Alguno de los filtros del panel no es válido. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Filtro no válido",variant:"destructive"},DASHBOARD_INVALID_PARAMETER:{buildMessage:()=>"Alguno de los parámetros de la petición no es válido. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Parámetro no válido",variant:"destructive"},TOP_UP_OPTIONS_INVALID_PARAMETER:{buildMessage:()=>"No se han podido cargar las opciones de recarga: la matrÃcula o el tipo de saldo no son válidos. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Opciones de recarga no disponibles",variant:"destructive"},NOT_FOUND:{buildMessage:()=>"El recurso ya no existe o no tienes acceso a él. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"No encontrado",variant:"destructive"},WORKDAY_SEQUENCE_NOT_CHRONOLOGICAL:{buildMessage:()=>"Las horas deben ir en orden ascendente. Revisa los registros de la jornada.",buildTitle:()=>"Orden de horas no válido",variant:"destructive"},WORKDAY_INVALID_TIME_FORMAT:{buildMessage:()=>"Alguna hora no es válida. Usa el formato HH:MM.",buildTitle:()=>"Hora no válida",variant:"destructive"},WORKDAY_INVALID_ENTRY_TYPE:{buildMessage:()=>"Alguno de los registros tiene un tipo desconocido. Recarga la página e inténtalo de nuevo.",buildTitle:()=>"Tipo de registro desconocido",variant:"destructive"},WORKDAY_DUPLICATE_CLOCK_IN:{buildMessage:()=>"Hay dos entradas seguidas sin salida entre ellas.",buildTitle:()=>"Entrada duplicada",variant:"destructive"},WORKDAY_DUPLICATE_BREAK_START:{buildMessage:()=>"Hay dos inicios de pausa seguidos sin fin de pausa entre ellos.",buildTitle:()=>"Inicio de pausa duplicado",variant:"destructive"},WORKDAY_BREAK_WITHOUT_CLOCK_IN:{buildMessage:()=>"La pausa empieza antes de que haya una entrada.",buildTitle:()=>"Pausa sin entrada",variant:"destructive"},WORKDAY_BREAK_END_WITHOUT_START:{buildMessage:()=>"Hay un fin de pausa sin su inicio correspondiente.",buildTitle:()=>"Fin de pausa sin inicio",variant:"destructive"},WORKDAY_CLOCK_OUT_WITHOUT_CLOCK_IN:{buildMessage:()=>"Hay una salida sin entrada previa.",buildTitle:()=>"Salida sin entrada",variant:"destructive"},WORKDAY_UNCLOSED_BREAK:{buildMessage:()=>
2"La pausa no se ha cerrado antes de la salida. Añade el fin de pausa.",buildTitle:()=>"Pausa sin cerrar",variant:"destructive"},CLOCK_ACTION_OUT_OF_ORDER:{buildMessage:()=>"La jornada ya tiene fichajes posteriores a esta hora, asà que no se puede registrar ahora. Pide a tu responsable que revise el dÃa.",buildTitle:()=>"Fichaje fuera de orden",variant:"destructive"},TIME_TRACKING_ADMIN_ACCESS_DENIED:{buildMessage:()=>"No tienes permiso para gestionar el control horario.",buildTitle:()=>"Sin permiso",variant:"destructive"},TIME_TRACKING_MODULE_NOT_ENABLED:{buildMessage:()=>"El módulo de control horario no está activo en esta autoescuela.",buildTitle:()=>"Módulo no activo",variant:"destructive"},TIME_TRACKING_NOT_ENABLED_FOR_USER:{buildMessage:()=>"Este usuario no tiene el control horario habilitado.",buildTitle:()=>"Control horario no habilitado",variant:"destructive"},TIME_ENTRY_NOT_FOUND:{buildMessage:()=>"El registro de fichaje ya no existe. Recarga la página.",buildTitle:()=>"Registro no encontrado",variant:"destructive"},CORRECTION_NOT_FOUND:{buildMessage:()=>"La solicitud de corrección ya no existe. Recarga la página.",buildTitle:()=>"Solicitud no encontrada",variant:"destructive"},CORRECTION_ALREADY_RESOLVED:{buildMessage:()=>"Esta solicitud ya ha sido resuelta. Recarga la página.",buildTitle:()=>"Solicitud ya resuelta",variant:"destructive"},WORKDAY_CORRECTION_ALREADY_PENDING:{buildMessage:()=>"Ya tienes una solicitud pendiente para este dÃa. Cancélala antes de enviar otra.",buildTitle:()=>"Solicitud pendiente",variant:"destructive"},WORKDAY_CORRECTION_STALE:{buildMessage:()=>"La jornada ha cambiado desde que se envió la solicitud. Recházala y pide al empleado que la vuelva a enviar.",buildTitle:()=>"Solicitud desactualizada",variant:"destructive"},WORKDAY_CORRECTION_NOT_OWNED:{buildMessage:()=>"Solo puedes cancelar tus propias solicitudes.",buildTitle:()=>"No autorizado",variant:"destructive"},WORKDAY_CORRECTION_FUTURE_DATE:{buildMessage:()=>"No se puede corregir una jornada que todavÃa no ha ocurrido.",buildTitle:()=>"Fecha no válida",variant:"destructive"},ALREADY_CLOCKED_IN:{buildMessage:()=>"Ya has fichado la entrada. Recarga la página para ver tu estado actual.",buildTitle:()=>"Ya fichado",variant:"destructive"},NOT_CLOCKED_IN:{buildMessage:()=>"TodavÃa no has fichado la entrada.",buildTitle:()=>"Sin fichar",variant:"destructive"},ALREADY_ON_BREAK:{buildMessage:()=>"Ya tienes una pausa iniciada.",buildTitle:()=>"Pausa ya iniciada",variant:"destructive"},NOT_ON_BREAK:{buildMessage:()=>"No tienes ninguna pausa activa.",buildTitle:()=>"Sin pausa activa",variant:"destructive"},SHIFT_ALREADY_FINISHED:{buildMessage:()=>"Ya has finalizado la jornada de hoy.",buildTitle:()=>"Jornada finalizada",variant:"destructive"},NO_ACTIVE_ENTRY_TO_VOID:{buildMessage:()=>"No hay ningún registro activo que anular.",buildTitle:()=>"Nada que anular",variant:"destructive"},VOID_ENTRY_MISMATCH:{buildMessage:()=>"El registro que intentas anular ya no coincide con el último fichaje. Recarga la página.",buildTitle:()=>"No se puede anular",variant:"destructive"},OAUTH_INVALID_REDIRECT_URI:{buildMessage:()=>"La URL de redirección de la aplicación no está permitida.",buildTitle:()=>"Redirección no permitida",variant:"destructive"},OAUTH_SERVER_ERROR:{buildMessage:()=>"No se ha podido completar la autorización OAuth. Inténtalo de nuevo en unos segundos.",buildTitle:()=>"Error de autorización",variant:"destructive"},TENANT_IMPORT_DISABLED:{buildMessage:()=>"El import de tenants no está habilitado en este entorno.",buildTitle:()=>"Función no disponible",variant:"destructive"},TENANT_IMPORT_INVALID_FILE:{buildMessage:()=>"El archivo no es un volcado portátil de Drovify, o su cabecera está incompleta. Genéralo desde la pestaña de volcados.",buildTitle:()=>"Archivo no válido",variant:"destructive"},TENANT_IMPORT_TENANT_EXISTS:{buildMessage:()=>"Ese tenant ya existe en este entorno. El import nunca sobrescribe: púrgalo primero con app:tenant:purge.",buildTitle:()=>"El tenant ya existe",variant:"destructive"},TENANT_IMPORT_DOMAIN_TAKEN:{buildMessage:()=>"Ese dominio ya lo usa otro tenant. Elige uno libre.",buildTitle:()=>"Dominio ocupado",variant:"destructive"}
2,TENANT_IMPORT_SCHEMA_BEHIND:{buildMessage:()=>"El volcado viene de un entorno más nuevo que este. Despliega este entorno antes de importar.",buildTitle:()=>"Esquema desactualizado",variant:"destructive"},TENANT_IMPORT_MISSING_SHARED_REFERENCE:{buildMessage:()=>"El volcado referencia usuarios o catálogos que no existen en este entorno. Revisa el detalle del error.",buildTitle:()=>"Faltan referencias",variant:"destructive"},TENANT_IMPORT_ALREADY_RUNNING:{buildMessage:()=>"Ya hay un import de tenant en curso. Espera a que termine antes de subir otro fichero.",buildTitle:()=>"Import en curso",variant:"destructive"},TENANT_IMPORT_JOB_NOT_PENDING:{buildMessage:()=>"Este import ya se ha puesto en marcha y no se puede reiniciar.",buildTitle:()=>"Import ya iniciado",variant:"destructive"}},Vd={UNKNOWN_ERROR:{buildMessage:()=>"Ha ocurrido un error inesperado",buildTitle:()=>"Error",variant:"destructive"},CONTENT_UPLOAD_FAILED:{buildMessage:()=>"No se ha podido subir el archivo al almacenamiento. Inténtalo de nuevo.",buildTitle:()=>"Subida incompleta",variant:"destructive"},INTERNAL_SERVER_ERROR:{buildMessage:()=>"Ha ocurrido un error en el servidor",buildTitle:()=>"Error del servidor",variant:"destructive"},already_in_target_exam:{buildMessage:()=>"La convocatoria ya estaba en el examen de destino.",buildTitle:()=>"Ya está en el examen",variant:"destructive"},exam_attendance_has_result:{buildMessage:()=>"La convocatoria ya tiene un resultado registrado.",buildTitle:()=>"No se puede mover",variant:"destructive"},target_exam_license_not_allowed:{buildMessage:()=>"El examen de destino no admite el permiso de esta convocatoria.",buildTitle:()=>"Permiso no permitido",variant:"destructive"},target_exam_type_mismatch:{buildMessage:()=>"Solo puedes mover asistencias a un examen del mismo tipo.",buildTitle:()=>"Tipo de examen incompatible",variant:"destructive"},BULK_DEBT_WRITE_OFF_INVALID_CONFIG:{buildMessage:()=>"La configuración de la limpieza de deuda no es válida. Revisa el motivo y, si incluyes deuda facturada, la fecha de emisión.",buildTitle:()=>"Configuración no válida",variant:"destructive"}};function Yt(e){return Yd[e]??Vd[e]??null}const Gd=1500,Wd=5e3,Rn={success:{title:"Operación completada",description:"La operación se ha realizado correctamente",variant:"success"},error:{title:"Error"},warning:{title:"Advertencia",description:"Ten en cuenta esta advertencia",variant:"warning"},info:{title:"Información",description:"Información importante",variant:"info"}},Xd=(e="info")=>{switch(e){case"success":return{icon:d.createElement(Ji,{size:20}),color:"#16a34a",iconStyle:{backgroundColor:"#dcfce7",color:"#16a34a"}};case"destructive":return{icon:d.createElement(gn,{size:20}),color:"#dc2626",iconStyle:{backgroundColor:"#fee2e2",color:"#dc2626"}};case"warning":return{icon:d.createElement(We,{size:20}),color:"#d97706",iconStyle:{backgroundColor:"#fed7aa",color:"#d97706"}};case"info":return{icon:d.createElement(nt,{size:20}),color:"#2563eb",iconStyle:{backgroundColor:"#dbeafe",color:"#2563eb"}}}},Qd="UNKNOWN_ERROR";function F(){const e=o=>{const r=Xd(o.variant);ll.show({title:o.title,message:o.description,icon:r.icon,color:r.color,autoClose:o.autoClose!==void 0?o.autoClose:o.variant==="success"?Gd:Wd,styles:{icon:r.iconStyle},classNames:{root:"matdash-toast notification-toast"}})};return{showToast:e,showErrorToast:o=>{var c;const r=Yt(o)??Yt(Qd);r&&e({title:((c=r.buildTitle)==null?void 0:c.call(r,{}))??Rn.error.title,description:r.buildMessage({}),variant:r.variant??"destructive"})},showSuccessToast:o=>{e({...Rn.success,...o})},showWarningToast:o=>{e({...Rn.warning,...o})},showInfoToast:o=>{e({...Rn.info,...o})}}}const Dt="Ha ocurrido un error inesperado. Por favor, inténtalo de nuevo.",Jd="CHARGE_PLAN_CHANGED",Zd="CREDENTIAL_TOKEN_NOT_USABLE";function gt(e){var o,r;if(!ht(e))return{message:Dt,variant:"destructive"};const n=(o=e.response)==null?void 0:o.data;if(!n)return{message:Dt,variant:"destructive"};const t=n.code,s={...n.context??{},requestId:e.requestId},i=s.fieldErrors;if(t){const c=Yt(t);if(c)return{message:c.buildMessage(s),title:(r=c.buildTitle)==null?void 0:r.call(c,s),code:t,context:s,variant:c.variant||"destructive",showModal:c.showModal||c.shouldShowModal,shouldShowModal:c.showModal||c.shouldShowModal,fieldErrors:i};cn.error("Unregistered API error code",{errorCode:t,httpStatus:e.status,endpoint:e.endpoint,responseBody:n})}return{message:Dt,code:t,context:s,variant:"destructive",fieldErrors:i}}function ht(e){var n;return typeof e=="object"&&e!==null&&"response"in e&&typeof((n=e.response)==null?void 0:n.data)=="object"}function Sx(e){var n,t;return ht(e)?((t=(n=e.response)==null?void 0:n.data)==null?void 0:t.code)==="FIELD_VALIDATION_ERROR":!1}function _x(e){var n,t;return ht(e)?((t=(n=e.response)==null?void 0:n.data)==null?void 0:t.code)===Jd:!1}function Cx(e){var n,t;return ht(e)?((t=(n=e.response)==null?void 0:n.data)==null?void 0:t.code)===Zd:!1}function Q(){const{showToast:e}=F();return{handleError:(s,i)=>{const o=gt(s);return o.shouldShowModal||e({title:o.title||i||"Error",description:o.message,variant:o.variant||"destructive"}),o},handleSuccess:(s,i="Hecho")=>{e({title:i,description:s,variant:"success"})}}}const ra={all:["platform-announcement"],lists:()=>[...ra.all,"list"],list:e=>[...ra.lists(),e??null],details:()=>[...ra.all,"detail"],detail:e=>[...ra.details(),e],reads:e=>[...ra.all,"reads",e]};
2function _n(e,n){e.invalidateQueries({queryKey:ra.lists()}),n&&e.invalidateQueries({queryKey:ra.detail(n)})}function eu(e){const n=e?`?status=${e}`:"";return w({queryKey:ra.list(e),queryFn:()=>A(`/platform-admin/announcements${n}`)})}function au(e){return w({queryKey:ra.detail(e),queryFn:()=>A(`/platform-admin/announcements/${e}`),enabled:!!e})}function nu(e){return w({queryKey:ra.reads(e),queryFn:()=>A(`/platform-admin/announcements/${e}/reads`),enabled:!!e})}function tu(){const e=H(),{showSuccessToast:n}=F(),{handleError:t}=Q();return U({mutationFn:s=>A("/platform-admin/announcements",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)}),onSuccess:()=>{_n(e),n({title:"Hecho",description:"Novedad creada"})},onError:s=>t(s)})}function su(){const e=H(),{showSuccessToast:n}=F(),{handleError:t}=Q();return U({mutationFn:({id:s,...i})=>A(`/platform-admin/announcements/${s}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)}),onSuccess:(s,i)=>{_n(e,i.id),n({title:"Hecho",description:"Novedad actualizada"})},onError:s=>t(s)})}function iu(){const e=H(),{showSuccessToast:n}=F(),{handleError:t}=Q();return U({mutationFn:s=>A(`/platform-admin/announcements/${s}/publish`,{method:"POST"}),onSuccess:(s,i)=>{_n(e,i),n({title:"Hecho",description:"Novedad publicada"})},onError:s=>t(s)})}function ou(){const e=H(),{showSuccessToast:n}=F(),{handleError:t}=Q();return U({mutationFn:s=>A(`/platform-admin/announcements/${s}/archive`,{method:"POST"}),onSuccess:(s,i)=>{_n(e,i),n({title:"Hecho",description:"Novedad archivada"})},onError:s=>t(s)})}function ru(){const e=H(),{showSuccessToast:n}=F(),{handleError:t}=Q();return U({mutationFn:s=>A(`/platform-admin/announcements/${s}/unarchive`,{method:"POST"}),onSuccess:(s,i)=>{_n(e,i),n({title:"Hecho",description:"Novedad desarchivada"})},onError:s=>t(s)})}const ps=["chatbot-conversations"];function lu(e){return w({queryKey:[...ps,e],queryFn:()=>{const n=new URLSearchParams;e!=null&&e.outcome&&n.set("outcome",e.outcome),e!=null&&e.tenantSlug&&n.set("tenant_slug",e.tenantSlug),e!=null&&e.search&&n.set("search",e.search),(e==null?void 0:e.page)!=null&&n.set("page",String(e.page)),(e==null?void 0:e.limit)!=null&&n.set("limit",String(e.limit));const t=n.toString();return A(`/platform-admin/chatbot/conversations${t?`?${t}`:""}`)}})}function ko(e){e.invalidateQueries({queryKey:ps})}function cu(e){return w({queryKey:[...ps,e],queryFn:()=>A(`/platform-admin/chatbot/conversations/${e}`),enabled:e!=null})}const Aa={all:["tenant"],modules:e=>[...Aa.all,"modules",e],subscriptionInfo:()=>[...Aa.all,"subscription-info"],documents:()=>[...Aa.all,"documents"]},zo=["image/png","image/jpeg","image/webp","image/gif"],du=zo.join(","),uu=5*1024*1024,mu="La imagen supera el tamaño máximo (5 MB).",pu="Solo se pueden adjuntar imágenes (PNG, JPG, WebP o GIF).";function gu(e){return zo.includes(e.type)?e.size>uu?mu:null:pu}const Qe={USER:"user",ASSISTANT:"assistant",OPERATOR:"operator",TOOL:"tool"},Pa={all:["notification"],lists:()=>[...Pa.all,"list"],list:e=>[...Pa.lists(),"infinite",e],unreadCount:()=>[...Pa.all,"unread-count"]};function $o(e){e.invalidateQueries({queryKey:Pa.lists()}),e.invalidateQueries({queryKey:Pa.unreadCount()})}const hu=320;function Eu({children:e}){return a.jsx(he,{my:6,style:{border:"1px solid var(--mantine-color-gray-3)",borderRadius:"var(--mantine-radius-sm)",overflow:"hidden"},children:a.jsx(P.ScrollContainer,{minWidth:hu,type:"scrollarea",children:a.jsx(P,{fz:"xs",verticalSpacing:4,horizontalSpacing:6,withRowBorders:!0,withColumnBorders:!0,striped:!0,children:e})})})}function fu({href:e,children:n}){return e!=null&&e.startsWith("/")?a.jsx(ha,{component:ne,to:e,size:"sm",children:n}):a.jsx(ha,{href:e,size:"sm",target:"_blank",rel:"noreferrer",children:n})}function bu({content:e}){return a.jsx(cl,{options:{forceBlock:!0,overrides:{p:{component:g,props:{size:"sm",style:{margin:"0 0 6px"}}},span:{component:g,props:{size:"sm",component:"span"}},h1:{component:Pe,props:{order:5,mt:6,mb:2}},h2:{component:Pe,props:{order:6,mt:6,mb:2}},h3:{component:Pe,props:{order:6,mt:4,mb:2}},ul:{component:Rt,props:{size:"sm",spacing:2,style:{margin:"2px 0 6px"}}},ol:{component:Rt,props:{size:"sm",spacing:2,type:"ordered",style:{margin:"2px 0 6px"}}},li:{component:Rt.Item},hr:{component:tt,props:{my:8}},a:{component:fu},img:{component:zn,props:{radius:"sm",my:6,maw:"100%",fit:"contain"}},table:{component:Eu},thead:{component:P.Thead,props:{style:{backgroundColor:"var(--mantine-color-gray-0)"}}},tbody:{component:P.Tbody},tr:{component:P.Tr},th:{component:P.Th},td:{component:P.Td},code:{props:{style:{background:"var(--mantine-color-gray-2)",borderRadius:4,padding:"1px 4px",fontSize:"0.85em"}}
2}}},children:e})}function Tu({url:e,purged:n}){const[t,s]=d.useState(!1);return e==null?n!==!0?null:a.jsxs(C,{gap:6,mt:6,children:[a.jsx(dl,{size:14,color:"currentColor"}),a.jsx(g,{size:"xs",c:"dimmed",children:"Imagen caducada"})]}):a.jsxs(a.Fragment,{children:[a.jsx(ya,{onClick:()=>s(!0),mt:6,display:"block",children:a.jsx(zn,{src:e,alt:"Imagen adjunta",radius:"md",mah:240,fit:"contain"})}),a.jsx(se,{opened:t,onClose:()=>s(!1),size:"xl",centered:!0,title:"Imagen adjunta",children:a.jsx(zn,{src:e,alt:"Imagen adjunta",fit:"contain"})})]})}const dn={HEADER:{MAIN:"var(--mantine-color-header-9)"},TEXT:{PRIMARY:"#e2e8f0"},LINK:"var(--app-color-link)"},gs=d.forwardRef(function({children:n,href:t,to:s,target:i,onClick:o,...r},c){const l={c:dn.LINK,fw:500,underline:"never",onClick:o,...r};return s?a.jsx(ha,{ref:c,component:ne,to:s,target:i,...l,children:n}):t?a.jsx(ha,{ref:c,href:t,target:i,...l,children:n}):a.jsx(ha,{ref:c,component:"button",type:"button",...l,children:n})});function Ho(){const{user:e}=an(),n=(e==null?void 0:e.permissions)??[];return{hasPermission:(...i)=>i.every(o=>n.includes(o)),hasAnyPermission:(...i)=>i.some(o=>n.includes(o))}}const vu="tenant_modules_cache:";function qo(){return`${vu}${window.location.hostname}`}function xu(){const e=localStorage.getItem(qo());if(e)try{return JSON.parse(e)}catch{return}}function Et(){const{isAuthenticated:e}=an(),{data:n}=w({queryKey:Aa.modules(window.location.hostname),queryFn:async()=>{const t=await A("/tenant/modules");return localStorage.setItem(qo(),JSON.stringify(t.enabledModules)),t},enabled:e,staleTime:0,refetchOnMount:"always",initialData:e?(()=>{const t=xu();if(t)return{enabledModules:t}})():void 0,initialDataUpdatedAt:0});return{enabledModules:(n==null?void 0:n.enabledModules)??[],isModuleEnabled:t=>{var s;return((s=n==null?void 0:n.enabledModules)==null?void 0:s.includes(t))??!1},isResolved:n!==void 0}}const ft={CAP_MODULE:"cap_module",DEMO_BANNER:"demo_banner",SUBSCRIPTION_BANNER:"subscription_banner",ONLINE_PAYMENTS:"online_payments",AEOL_TESTS:"aeol_tests",PAYMENT_FAILED_BANNER:"payment_failed_banner",TIME_TRACKING:"time_tracking",HOLDED:"holded",PENDING_DOCUMENT_SIGNATURE:"pending_document_signature",DROVIFY_SUSPENDED:"drovify_suspended",TRACK_OCCUPANCY:"track_occupancy",ALLOCATION_SELF_SERVICE:"allocation_self_service",SALES_SUMMARY:"sales_summary",EXTERNAL_API:"external_api",DEBT_CLEANUP:"debt_cleanup",REFERRAL_PROGRAM:"referral_program",ONLINE_ENROLLMENT:"online_enrollment",AUTHORIZATION_REQUESTS:"authorization_requests",EXAM_READINESS:"exam_readiness"};function Su(){const{isModuleEnabled:e}=Et();return e(ft.DEMO_BANNER)?a.jsx(he,{style:{pointerEvents:"none"},children:a.jsx(Ue,{icon:a.jsx(nt,{size:16}),color:"orange",title:"Estás usando el modo demo. Algunas funciones están deshabilitadas en esta versión de prueba.",style:{borderRadius:0,border:"none",boxShadow:"var(--app-elevation-raised)",fontSize:"14px",fontWeight:500,textAlign:"center",padding:"8px 16px",backgroundColor:"rgba(74, 144, 226, 0.0)",borderBottom:"1px solid rgba(74, 144, 226, 0.2)"}})}):null}function _u(){var i;const{isModuleEnabled:e}=Et(),{user:n}=en(),t=(i=n==null?void 0:n.roles)==null?void 0:i.includes(Ma.Staff);return e(ft.PAYMENT_FAILED_BANNER)&&!!t?a.jsx(he,{children:a.jsx(Ue,{icon:a.jsx(We,{size:16}),color:"red",title:"El recibo de tu última cuota ha sido devuelto. Por favor, ponte en contacto con Drovify para evitar la suspensión del servicio.",style:{borderRadius:0,border:"none",boxShadow:"var(--app-elevation-raised)",fontSize:"14px",fontWeight:500,textAlign:"center",padding:"8px 16px",borderBottom:"1px solid rgba(220, 38, 38, 0.3)"}})}):null}const Bo={DASHBOARD_VIEW_FINANCIAL_STATS:"DASHBOARD.VIEW_FINANCIAL_STATS",STUDENT_EXPORT:"STUDENT.EXPORT",ENROLLMENT_EXPORT:"ENROLLMENT.EXPORT",ENROLLMENT_BULK_MANAGE:"ENROLLMENT.BULK_MANAGE",ENROLLMENT_REGISTRATION_BOOK:"ENROLLMENT.REGISTRATION_BOOK",ENROLLMENT_CHANGE_SECTION:"ENROLLMENT.CHANGE_SECTION",ENROLLMENT_CHANGE_LICENSE:"ENROLLMENT.CHANGE_LICENSE",ENROLLMENT_REOPEN:"ENROLLMENT.REOPEN",AUES_SUBMIT_TRANSFER_AUTHORIZE:"AUES.SUBMIT_TRANSFER_AUTHORIZE",FINANCIAL_BALANCE_EXPORT:"FINANCIAL_BALANCE.EXPORT",PRACTICE_EXPORT:"PRACTICE.EXPORT",PRACTICE_UNDO:"PRACTICE.UNDO",EXAM_CORRECT_RESULT:"EXAM.CORRECT_RESULT",EXAM_MOVE_TO_RECORD:"EXAM.MOVE_TO_RECORD",BALANCE_TOP_UP_EXPORT:"BALANCE_TOP_UP.EXPORT",BALANCE_FORCE_BELOW_MIN:"BALANCE.FORCE_BELOW_MIN",CHARGE_LIST:"CHARGE.LIST",CHARGE_EXPORT:"CHARGE.EXPORT",CHARGE_SKIP_BALANCE_SYNC:"CHARGE.SKIP_BALANCE_SYNC",CHARGE_SKIP_BALANCE_SYNC_ON_CREATE:"CHARGE.SKIP_BALANCE_SYNC_ON_CREATE",CHARGE_SKIP_REQUIRED_PAYMENT:"CHARGE.SKIP_REQUIRED_PAYMENT",PAYMENT_LIST:"PAYMENT.LIST",PAYMENT_EXPORT:"PAYMENT.EXPORT",PAYMENT_CANCEL_AUTHORIZE:"PAYMENT.CANCEL_AUTHORIZE",ONLINE_ORDER_LIST:"ONLINE_ORDER.LIST",INVOICE_LIST:"INVOICE.LIST",INVOICE_VOID:"INVOICE.VOID",ALLOCATION_MANAGE:"ALLOCATION.MANAGE",TREASURY_LIST:"TREASURY.LIST",TREASURY_EXPORT:"TREASURY.EXPORT",TREASURY_CASH_REGISTER:"TREASURY.CASH_REGISTER",TREASURY_CREATE_MOVEMENT:"TREASURY.CREATE_MOVEMENT",TREASURY_CLOSE_CASH:"TREASURY.CLOSE_CASH",TREASURY_CHECK:"TREASURY.CHECK",FINANCIAL_ACCOUNT_MANAGE:"FINANCIAL_ACCOUNT.MANAGE",ANALYTICS_ECONOMIC_SUMMARY:"ANALYTICS.ECONOMIC_SUMMARY",ANALYTICS_PAYMENTS_SUMMARY:"ANALYTICS.PAYMENTS_SUMMARY",ANALYTICS_INSTRUCTORS:"ANALYTICS.INSTRUCTORS",SETTINGS_MANAGE:"SETTINGS.MANAGE",ROLE_MANAGE:"ROLE.MANAGE",IMPERSONATE_STUDENT:"IMPERSONATE.STUDENT",IMPERSONATE_INSTRUCTOR:"IMPERSONATE.INSTRUCTOR",IMPERSONATE_STAFF:"IMPERSONATE.STAFF",TIME_TRACKING_MANAGE:"TIME_TRACKING.MANAGE",WORK_SHIFT_MANAGE_INSTRUCTORS:"WORK_SHIFT.MANAGE_INSTRUCTORS",TENANT_DOCUMENT_VIEW:"TENANT_DOCUMENT.VIEW",TENANT_DOCUMENT_SIGN:"TENANT_DOCUMENT.SIGN"},Cu=(e=!0)=>w({queryKey:Aa.documents(),queryFn:async()=>A("/administrator/tenant-documents"),enabled:e}),Nx=()=>{const e=H(),{showSuccessToast:n}=F();return U({mutationFn:async t=>{await A(`/administrator/tenant-documents/${t}/sign`,{method:"POST"})},onSuccess:()=>
2{e.invalidateQueries({queryKey:Aa.documents()}),n({title:"Documento firmado",description:"El documento ha sido firmado correctamente"})}})},Ax=()=>async e=>(await A(`/administrator/tenant-documents/${e}/download`)).url;function Nu(){const{isModuleEnabled:e}=Et(),{hasPermission:n}=Ho(),t=n(Bo.TENANT_DOCUMENT_VIEW),s=e(ft.PENDING_DOCUMENT_SIGNATURE)&&t,{data:i,isLoading:o}=Cu(s),r=(i==null?void 0:i.filter(l=>l.requiresAcceptance&&!l.isSigned))??[];if(!s||o||r.length===0)return null;const c=r[0].id;return a.jsx(he,{children:a.jsx(Ue,{icon:a.jsx(ul,{size:16}),color:"orange",title:a.jsxs(a.Fragment,{children:["Tienes ",r.length===1?"un documento pendiente":`${r.length} documentos pendientes`," de firma."," ",a.jsx(ha,{component:ne,to:$.settings("subscription",{signDocId:c}),fw:600,size:"sm",children:"Revisar documentos â"})]}),style:{borderRadius:0,border:"none",boxShadow:"var(--app-elevation-raised)",fontSize:"14px",fontWeight:500,textAlign:"center",padding:"8px 16px",borderBottom:"1px solid rgba(230, 120, 0, 0.3)"}})})}const Au=(e=!0)=>w({queryKey:Aa.subscriptionInfo(),queryFn:async()=>await A("/administrator/tenant-subscription-info"),enabled:e}),yx=()=>{const e=H(),{showSuccessToast:n}=F();return U({mutationFn:async t=>{await A("/administrator/tenant-subscription-info",{method:"PUT",body:JSON.stringify(t)})},onSuccess:()=>{e.invalidateQueries({queryKey:Aa.subscriptionInfo()}),n({title:"Datos guardados",description:"La información de suscripción se ha actualizado correctamente"})}})};function yu(){const{isModuleEnabled:e}=Et(),{hasPermission:n}=Ho(),t=n(Bo.SETTINGS_MANAGE),s=e(ft.SUBSCRIPTION_BANNER)&&t,{data:i,isLoading:o}=Au(s),r=!(i!=null&&i.id)||!(i!=null&&i.companyName);return!s||o||!r?null:a.jsx(he,{children:a.jsx(Ue,{icon:a.jsx(We,{size:16}),color:"orange",title:a.jsxs(a.Fragment,{children:["Configura tus datos de facturación para activar tu suscripción."," ",a.jsx(ha,{component:ne,to:"/settings?tab=subscription",fw:600,size:"sm",children:"Completar datos â"})]}),style:{borderRadius:0,border:"none",boxShadow:"var(--app-elevation-raised)",fontSize:"14px",fontWeight:500,textAlign:"center",padding:"8px 16px",borderBottom:"1px solid rgba(230, 120, 0, 0.3)"}})})}const Iu=()=>a.jsx("div",{className:"flex flex-col items-center",children:a.jsx("div",{className:"animate-pulse",children:a.jsx("div",{className:"w-16 h-8 sm:w-24 sm:h-12 md:w-28 md:h-14 bg-gray-200 rounded-lg"})})});function Ko(){const{branding:e,loading:n}=en(),[t,s]=d.useState(!1);if(d.useEffect(()=>{s(!1)},[e.headerLogo]),n)return a.jsx(Iu,{});const i=!e.headerLogo||t;return a.jsx("div",{className:"flex flex-col items-center",children:i?e.name&&a.jsx("h1",{className:"text-sm sm:text-lg font-semibold text-white",children:e.name}):a.jsx("img",{src:e.headerLogo??void 0,alt:e.name,className:"h-10 object-contain",onError:()=>s(!0)})})}function Ix(e,n="dd/MM/yyyy"){if(!e)return"-";try{let t;if(typeof e=="object"&&e.date&&e.timezone)t=Ht(e.date);else if(typeof e=="string")t=Ht(e);else if(e instanceof Date)t=e;else return Re.warn("Unknown date format:",e),"-";return isNaN(t.getTime())?"-":Zi(t,n,{locale:eo})}catch(t){return Re.warn("Error formatting date:",e,t),"-"}}function ju(e){if(!e)return"Nunca";try{const n=new Date(e);return ml(n,new Date,{locale:"es"})}catch{return"Nunca"}}function jx(e){if(!e)return"Nunca";try{const n=new Date(e);return Zi(n,"yyyy-MM-dd HH:mm")}catch{return"Nunca"}}const Ru=20,Ou=300*1e3;function Lu(e="all"){return pl({queryKey:Pa.list(e),queryFn:({pageParam:n=1})=>A(`/notifications?page=${n}&limit=${Ru}${e==="unread"?"&unreadOnly=1":""}`),getNextPageParam:n=>{const t=Math.ceil(n.total/n.limit);return n.page<t?n.page+1:void 0},initialPageParam:1})}function Yo(){return w({queryKey:Pa.unreadCount(),queryFn:()=>A("/notifications/unread-count"),refetchInterval:Ou})}function Du(){const e=H(),{showErrorToast:n}=F();return U({mutationFn:t=>A(`/notifications/${t}/read`,{method:"POST"}),onSuccess:()=>$o(e),onError:t=>n(t.code??"UNKNOWN_ERROR")})}function Mu(){const e=H(),{showErrorToast:n}=F();return U({mutationFn:()=>A("/notifications/read-all",{method:"POST"}),onSuccess:()=>$o(e),onError:t=>n(t.code??"UNKNOWN_ERROR")})}const Js=99,Vo=e=>e>Js?`${Js}+`:String(e),Pu=80,wu=[{value:"all",label:"Todas"},{value:"unread",label:"No leÃdas"}];function Fu({onClose:e}
2){const n=aa(),t=d.useRef(null),[s,i]=d.useState("all"),{data:o}=Yo(),r=(o==null?void 0:o.unreadCount)??0,{data:c,isLoading:l,fetchNextPage:m,hasNextPage:u,isFetchingNextPage:p}=Lu(s),x=Du(),h=Mu(),E=(c==null?void 0:c.pages.flatMap(S=>S.items))??[],f=({y:S})=>{const y=t.current;if(!y)return;y.scrollHeight-y.clientHeight-S<Pu&&u&&!p&&m()},b=S=>{S.readAt||x.mutate(S.id);const y=Ro(S.type,S.data??{});y&&n(y),e()},v=()=>{n($.notificationPreferences()),e()};return a.jsxs(a.Fragment,{children:[a.jsxs(C,{justify:"space-between",px:"md",pt:"sm",children:[a.jsx(g,{fw:700,size:"sm",children:"Notificaciones"}),a.jsxs(C,{gap:4,children:[r>0&&a.jsx(O,{variant:"subtle",size:"compact-xs",color:"brand",loading:h.isPending,onClick:()=>h.mutate(),children:"Marcar todas como leÃdas"}),a.jsx(J,{variant:"subtle",color:"gray",size:"sm",onClick:v,"aria-label":"Configurar notificaciones",children:a.jsx(as,{size:15})})]})]}),a.jsx(C,{gap:6,px:"md",pt:10,pb:"sm",role:"tablist",style:{borderBottom:"1px solid #eef1f6"},children:wu.map(S=>a.jsxs(ya,{onClick:()=>i(S.value),role:"tab","aria-selected":s===S.value,style:{padding:"4px 13px",borderRadius:999,fontSize:12.5,fontWeight:600,transition:"background-color 150ms ease, color 150ms ease",backgroundColor:s===S.value?"#162135":"#edf1f7",color:s===S.value?"#ffffff":"#3d4a63"},children:[S.label,S.value==="unread"&&r>0?` · ${Vo(r)}`:""]},S.value))}),a.jsx(ns.Autosize,{mah:420,viewportRef:t,onScrollPositionChange:f,children:l?a.jsx(C,{justify:"center",py:"lg",children:a.jsx(me,{size:"sm",color:"brand"})}):E.length===0?a.jsx(g,{size:"sm",c:"dimmed",ta:"center",py:"lg",children:s==="unread"?"No tienes notificaciones sin leer":"No tienes notificaciones"}):a.jsxs(N,{gap:0,children:[E.map(S=>a.jsxs(ya,{onClick:()=>b(S),px:"md",py:"sm",style:{display:"flex",gap:10,borderBottom:"1px solid #f2f5f9",backgroundColor:S.readAt?void 0:"#f2fbfa"},children:[a.jsx("span",{style:{flex:"0 0 8px",width:8,height:8,marginTop:6,borderRadius:"50%",backgroundColor:S.readAt?"transparent":"var(--mantine-color-brand-filled)"}}),a.jsxs(N,{gap:2,style:{flex:1,minWidth:0},children:[a.jsx(g,{fw:600,size:"sm",children:S.title}),a.jsx(g,{size:"sm",c:"dimmed",children:S.body})]}),a.jsx(g,{size:"xs",c:"dimmed",style:{flexShrink:0,whiteSpace:"nowrap"},children:ju(S.createdAt)})]},S.id)),p&&a.jsx(C,{justify:"center",py:"sm",children:a.jsx(me,{size:"xs",color:"brand"})})]})})]})}function Uu(){const[e,{close:n,toggle:t}]=Za(!1),{data:s}=Yo(),i=(s==null?void 0:s.unreadCount)??0;return a.jsxs(Qa,{opened:e,onChange:o=>{o||n()},width:400,position:"bottom-end",shadow:"md",radius:"md",withinPortal:!0,children:[a.jsx(Qa.Target,{children:a.jsx(gl,{disabled:i===0,label:Vo(i),color:"brand",size:16,offset:4,styles:{indicator:{color:dn.HEADER.MAIN}},children:a.jsx(J,{variant:"subtle",color:"white",size:44,onClick:t,"aria-label":"Notificaciones",children:a.jsx(ao,{size:18})})})}),a.jsx(Qa.Dropdown,{p:0,style:{overflow:"hidden"},children:a.jsx(Fu,{onClose:n})})]})}const hs=d.createContext(null);function ku({children:e}){const[n,t]=d.useState(0),s=d.useCallback(()=>{t(r=>r+1)},[]),i=d.useCallback(()=>{t(r=>Math.max(0,r-1))},[]),o=d.useMemo(()=>({enabled:n===0,disable:s,enable:i}),[n,s,i]);return a.jsx(hs.Provider,{value:o,children:e})}function zu(){var e;return((e=d.useContext(hs))==null?void 0:e.enabled)??!0}function Rx(){const e=d.useContext(hs);d.useEffect(()=>{if(e)return e.disable(),()=>e.enable()},[e])}function $u({children:e}){const n=H(),t=zu(),s=d.useCallback(async()=>{await n.invalidateQueries()},[n]);return Sn?a.jsx(hl,{isPullable:t,onRefresh:s,pullingContent:a.jsx(me,{size:"sm"}),refreshingContent:a.jsx(me,{size:"sm"}),children:e}):a.jsx(a.Fragment,{children:e})}function Hu({children:e,...n}){return a.jsx(El,{...n,children:e})}const Zs={fullWidth:!1},Go=d.createContext(void 0);function qu({children:e}){const[n,t]=d.useState(Zs),s=d.useCallback(r=>{t(c=>({...c,...r}))},[]),i=d.useCallback(()=>{t(Zs)},[]),o=d.useMemo(()=>({config:n,setLayoutConfig:s,resetLayoutConfig:i}),[n,s,i]);return a.jsx(Go.Provider,{value:o,children:e})}function Wo(){const e=d.useContext(Go);if(e===void 0)throw new Error("useLayout must be used within a LayoutProvider");return e}const Xo="drovify-sidebar-collapsed",Qo=d.createContext(void 0);function Bu(){try{return localStorage.getItem(Xo)==="true"}catch{return!1}}function Ku({children:e}
2){const[n,t]=d.useState(Bu),[s,i]=d.useState(!1),o=d.useCallback(()=>{t(l=>{const m=!l;try{localStorage.setItem(Xo,String(m))}catch(u){Re.debug("localStorage unavailable",u)}return m}),i(!1)},[]),r=d.useCallback(l=>{i(l)},[]),c=d.useMemo(()=>({isCollapsed:n,toggleSidebar:o,isHovered:s,setHovered:r}),[n,o,s,r]);return a.jsx(Qo.Provider,{value:c,children:e})}function Yu(){const e=d.useContext(Qo);if(e===void 0)throw new Error("useSidebar must be used within a SidebarProvider");return e}const Bn={BLOCK_GAP:"10px",MENU_ITEMS:"2px",CHILD_ITEMS:"1px",BORDER_RADIUS:{PARENT:8,CHILD:6}},On={WIDTH:65,EXPANDED_WIDTH:240,TOGGLE_SIZE:28},Vu="#334155",ue={container:{backgroundColor:dn.HEADER.MAIN,color:dn.TEXT.PRIMARY},border:{borderBottom:`1px solid ${Vu}`},navLink:{root:{borderRadius:Bn.BORDER_RADIUS.PARENT,color:dn.TEXT.PRIMARY,padding:"5px 12px 5px 15px"},label:{fontSize:14,fontWeight:500,color:"inherit"},section:{color:"#cbd5e1"}},navLinkChild:{root:{borderRadius:Bn.BORDER_RADIUS.CHILD,color:"#c8d3e1",padding:"5px 12px"},label:{fontSize:14,fontWeight:400,color:"inherit"}},layout:{scrollArea:{flex:1}}},Ox={toggleButton:{backgroundColor:"rgba(78, 205, 196, 0.1)",color:"#94a3b8",border:"none","&:hover":{backgroundColor:"rgba(78, 205, 196, 0.2)"}}},Gu=e=>({display:"flex",flexDirection:"column",gap:e||Bn.MENU_ITEMS}),Lx=e=>({display:"flex",flexDirection:"column",gap:e||Bn.CHILD_ITEMS});function Wu({SidebarComponent:e}){const{config:n}=Wo(),{tenant:t}=en(),[s,{toggle:i,close:o}]=Za(),{isCollapsed:r,isHovered:c}=Yu(),l=ka(),m=za(`(min-width: ${l.breakpoints.md})`,!1,{getInitialValueInEffect:!1}),u=r&&m,p=u&&c,x=d.useCallback(()=>{o()},[o]),h=e;return a.jsx(Hu,{attribute:"class",defaultTheme:"light",children:a.jsxs(yn,{header:{height:{base:"calc(60px + env(safe-area-inset-top, 0px))",md:0}},navbar:{width:p?On.EXPANDED_WIDTH:u?On.WIDTH:On.EXPANDED_WIDTH,breakpoint:"md",collapsed:{mobile:!s,desktop:!1}},padding:0,classNames:{navbar:u?`sidebar-collapsed${c?"":" sidebar-rail"}`:""},styles:{main:{backgroundColor:"var(--app-color-canvas)",color:"var(--foreground)",fontFamily:"var(--font-sans)",minHeight:"100dvh",paddingBottom:"env(safe-area-inset-bottom, 0px)",isolation:"isolate",...u?{paddingInlineStart:`calc(${On.WIDTH}px + var(--app-shell-padding))`}:{}},header:{backgroundColor:"var(--mantine-color-header-9)",borderBottom:"1px solid rgb(71 85 105)",paddingTop:"env(safe-area-inset-top, 0px)"},navbar:{borderInlineEnd:"none",overflow:"hidden",...p?{zIndex:200,boxShadow:"var(--app-elevation-modal)"}:{}}},children:[a.jsx(yn.Header,{hiddenFrom:"md",children:a.jsxs(he,{h:"100%",px:"md",className:"grid grid-cols-[1fr_auto_1fr] items-center",children:[a.jsx(fl,{opened:s,onClick:i,size:"sm",w:44,h:44,color:"white","aria-label":"Toggle sidebar",className:"justify-self-start"}),a.jsx(Ko,{}),a.jsx("div",{className:"justify-self-end",children:a.jsx(Uu,{})})]})}),a.jsx(yn.Navbar,{children:a.jsx(h,{onMobileClose:x})}),a.jsx(yn.Main,{children:a.jsx(ku,{children:a.jsxs($u,{children:[t&&a.jsx(_u,{}),t&&a.jsx(Su,{}),t&&a.jsx(yu,{}),t&&a.jsx(Nu,{}),n.fullWidth?a.jsx(Ds,{}):a.jsx(bl,{size:"xl",px:{base:"sm",sm:"md",lg:"xl"},py:{base:"sm",sm:"md"},children:a.jsx(Ds,{})})]})})})]})})}function Xu({SidebarComponent:e}){return a.jsx(Ku,{children:a.jsx(qu,{children:a.jsx(Wu,{SidebarComponent:e})})})}const Qu=({onLogout:e,showPreferences:n=!0})=>{var E,f;const{user:t,isImpersonating:s,isPlatformImpersonation:i,exitImpersonation:o,logout:r}=an(),c=aa(),l=((E=t==null?void 0:t.roles)==null?void 0:E[0])===Ma.Staff,{data:m}=Ld({enabled:l}),u=(m==null?void 0:m.rbacRoles)??[],p=()=>{r(),c("/login"),e==null||e()},x=async()=>{await o()},h=b=>b?b.split(" ").map(v=>v.charAt(0)).join("").toUpperCase().slice(0,2):"U";return a.jsxs(ce,{position:"bottom",shadow:"md",withArrow:!0,children:[a.jsx(ce.Target,{children:a.jsxs(ya,{className:"sidebar-account-btn",style:{width:"100%",padding:"16px",display:"flex",alignItems:"center",gap:"12px",transition:"background-color 0.2s",borderRadius:"8px"},children:[a.jsx(Tl,{src:t==null?void 0:t.profileImage,alt:"Profile",size:34,color:"brand",styles:{placeholder:{color:"var(--mantine-color-brand-4)"}}
2,style:{border:"2px solid #475569",flexShrink:0},children:h(t==null?void 0:t.name)}),a.jsxs(he,{className:"sidebar-hide-collapsed",style:{flex:1,minWidth:0},children:[a.jsx(g,{size:"sm",fw:500,c:"white",truncate:!0,children:(t==null?void 0:t.name)||"Usuario"}),a.jsx(g,{size:"xs",color:"#94a3b8",truncate:!0,children:t==null?void 0:t.username})]})]})}),a.jsxs(ce.Dropdown,{children:[s&&!i&&a.jsx(ce.Item,{leftSection:a.jsx(vl,{size:16}),onClick:x,children:"Salir de suplantación"}),l&&u.length>0&&a.jsxs(a.Fragment,{children:[a.jsx(ce.Label,{children:"Tu acceso"}),u.map((b,v)=>a.jsx(ce.Item,{leftSection:a.jsx(no,{size:16}),disabled:!0,children:a.jsxs(N,{gap:2,children:[a.jsx(g,{size:"sm",fw:500,children:b.name}),a.jsxs(g,{size:"xs",c:"dimmed",children:["en ",b.sectionName??b.divisionName]})]})},`${b.name}-${b.divisionName}-${v}`)),a.jsx(ce.Divider,{})]}),n&&a.jsx(ce.Item,{leftSection:a.jsx(as,{size:16}),component:ne,to:"/account",children:"Preferencias"}),((f=t==null?void 0:t.roles)==null?void 0:f.some(b=>b===Ma.Staff||b===Ma.Instructor))&&a.jsx(ce.Item,{leftSection:a.jsx(to,{size:16}),component:ne,to:"/announcements",children:"Novedades"}),a.jsx(ce.Item,{leftSection:a.jsx(xl,{size:16}),onClick:p,color:"red",children:"Cerrar sesión"})]})]})},Ju=["_blank","_parent"];function Zu({announcement:e,opened:n,onClose:t}){const s=aa();if(!e)return null;const i=o=>{if(o.defaultPrevented||o.button!==0||o.metaKey||o.ctrlKey||o.shiftKey||o.altKey)return;const r=o.target.closest("a"),c=r==null?void 0:r.getAttribute("href");if(!r||!c||Ju.includes(r.target))return;const l=new URL(c,window.location.href);l.origin===window.location.origin&&(o.preventDefault(),t(),s(`${l.pathname}${l.search}${l.hash}`))};return a.jsxs(se,{opened:n,onClose:t,title:e.title,size:1040,children:[a.jsx(g,{size:"sm",c:"dimmed",mb:"md",children:new Date(e.publishedAt).toLocaleDateString("es-ES",{year:"numeric",month:"long",day:"numeric"})}),a.jsx(Sl,{children:a.jsx("div",{onClick:i,dangerouslySetInnerHTML:{__html:e.body}})})]})}const em={charge:"charge",payment:"payment",invoice:"invoice"},Jo=0,am=5,nm=6,tm=7;function Dx(e){return em[e]}function sm(e){return`var(--mantine-color-${e}-${Jo})`}function Mx(e){return`var(--mantine-color-${e}-${am})`}function Px(e){return`var(--mantine-color-${e}-${nm})`}function im(e){return`var(--mantine-color-${e}-${tm})`}function om(e){return`var(--mantine-color-${e}-${Jo+2})`}const Zo=d.createContext("canvas");function Ja({surface:e,children:n}){return a.jsx(Zo.Provider,{value:e,children:n})}function rm(){return d.useContext(Zo)}const lm={fontSize:"24px",fontWeight:700,lineHeight:1.2,color:"var(--mantine-color-text)"},ei=24,cm={display:"flex",flexWrap:"wrap",alignItems:"center",justifyContent:"space-between",columnGap:16,rowGap:12},dm={flex:"1 1 auto",minWidth:0},um={flex:"0 1 auto",maxWidth:"100%"},mm={color:"var(--mantine-color-text)",fontWeight:700,fontSize:"17px"},pm={fontSize:"12px",fontWeight:600,color:"var(--mantine-color-dimmed)",marginBottom:2},gm={margin:0,fontSize:"16px",fontWeight:700,letterSpacing:"-0.02em",color:"var(--mantine-color-text)"},Kn={brand:"brand",success:"good",warning:"fair",info:"info",error:"poor"},Yn={"teal-light":"charge","violet-light":"invoice"};function hm(e){if(e in Kn){const n=Kn[e];return{backgroundColor:ed(n),borderColor:Zc(n)}}if(e in Yn){const n=Yn[e];return{backgroundColor:sm(n),borderColor:om(n)}}return{backgroundColor:"#ffffff",borderColor:"var(--app-color-card-border)"}}function Em(e){return e in Kn?{backgroundColor:"#ffffff",color:Ia(Kn[e])}:e in Yn?{backgroundColor:"#ffffff",color:im(Yn[e])}:{backgroundColor:"#f3f4f6",color:"#6b7280"}}function X({children:e,variant:n="default",icon:t,pretitle:s,title:i,titleLevel:o="heading",titleAddon:r,subtitle:c,subtitleAddon:l,action:m,withBorder:u,style:p,...x}){const h=ka(),E=hm(n),f=rm()==="paper",b=u??f,v=za(`(max-width: ${h.breakpoints.md})`,!1,{getInitialValueInEffect:!1}),S=t&&a.jsx("div",{style:{padding:"12px",borderRadius:"8px",display:"flex",alignItems:"center",justifyContent:"center",...Em(n)},children:t}),y=s&&a.jsx(g,{style:pm,children:s}),_=i&&a.jsxs(C,{gap:"sm",align:"center",wrap:"nowrap",mb:c&&!v?4
2:0,children:[o==="label"?a.jsx(g,{component:"h4",style:gm,children:i}):a.jsx(Pe,{order:4,style:mm,children:i}),r]}),T=c&&a.jsx(g,{style:{color:"var(--mantine-color-dimmed)",fontSize:"var(--app-fz-caption)"},children:c}),j=T&&l?a.jsxs(C,{gap:6,wrap:"nowrap",children:[T,l]}):T,L=m&&a.jsx("div",{style:{flexShrink:0},children:m});return a.jsxs(so,{padding:v?"sm":"xl",style:{backgroundColor:E.backgroundColor,border:b?`1px solid ${E.borderColor}`:"none",...p},...x,children:[(t||s||i||r||c||m)&&(v?a.jsxs("div",{style:{...cm,marginBottom:e?ei:0},children:[a.jsxs("div",{style:dm,children:[y,a.jsxs(C,{align:"center",style:{minWidth:0},children:[S,_]}),j]}),m&&a.jsx("div",{style:um,children:m})]}):a.jsxs(C,{mb:e?ei:0,align:c?"flex-start":"center",justify:"space-between",wrap:"nowrap",children:[a.jsxs(C,{align:c?"flex-start":"center",style:{flex:1,minWidth:0},children:[S,a.jsxs("div",{style:{flex:1,minWidth:0},children:[y,_,j]})]}),L]})),a.jsx(Ja,{surface:"paper",children:e})]})}function Na({title:e,value:n,valueAddon:t,subtitle:s,icon:i,variant:o="default",isPlaceholder:r,...c}){return a.jsx(X,{variant:o,...c,children:a.jsxs("div",{children:[a.jsx(g,{size:"sm",mb:4,style:{color:"#444951",fontWeight:700},children:r?a.jsx(qe,{width:72}):e}),a.jsxs(C,{gap:"xs",align:"baseline",wrap:"nowrap",mb:s||r?4:0,children:[a.jsx(g,{style:lm,children:r?a.jsx(qe,{width:104}):n}),r?null:t]}),r&&(s??a.jsx(g,{size:"sm",children:a.jsx(qe,{width:88})})),!r&&s&&(typeof s=="string"?a.jsx(g,{size:"sm",style:{color:"#646870"},children:s}):a.jsx("div",{children:s}))]})})}function wx({title:e,description:n,action:t}){return a.jsxs(C,{justify:"space-between",mb:"md",children:[a.jsxs("div",{children:[a.jsx(Pe,{order:3,children:e}),n&&a.jsx(g,{c:"dimmed",size:"sm",children:n})]}),t]})}const Ga={all:["academy"],overview:()=>[...Ga.all,"overview"],category:e=>[...Ga.all,"category",e],article:e=>[...Ga.all,"article",e],search:e=>[...Ga.all,"search",e],publishedIndex:()=>[...Ga.all,"article-index"]},fm=600*1e3;function bm(){const{roles:e}=an();return w({queryKey:Ga.publishedIndex(),queryFn:()=>A("/administrator/academy/article-index"),enabled:e.includes(Ma.Staff),staleTime:fm})}const Tm="_link_8nurx_1",vm="_arrow_8nurx_11",ai={link:Tm,arrow:vm},xm=14;function Sm({slug:e,topic:n,size:t="sm"}){const{data:s}=bm();return s!=null&&s.slugs.includes(e)?a.jsxs(ha,{component:ne,to:$.academyArticle(e),size:t,className:ai.link,children:["Aprende más sobre ",n," ",a.jsx(_l,{size:xm,className:ai.arrow})]}):null}const ni={width:34,height:34,borderRadius:"var(--mantine-radius-md)",flexShrink:0,display:"flex",alignItems:"center",justifyContent:"center",background:"var(--mantine-color-white)",border:"1px solid var(--app-color-card-border)",color:"var(--mantine-color-text)"},_m=19;function Cm({label:e,onClick:n,to:t,icon:s}){const i=s??a.jsx(st,{size:_m});return t?a.jsx(ya,{component:ne,to:t,"aria-label":e,style:ni,children:i}):a.jsx(ya,{onClick:n,"aria-label":e,style:ni,children:i})}function de({title:e,description:n,children:t,actionButton:s,backButton:i,searchComponent:o,helpArticle:r,fill:c=!1}){const l=ka(),{config:m}=Wo(),u=za(`(max-width: ${l.breakpoints.sm})`,!1,{getInitialValueInEffect:!1}),p=e||n||s||i||r,x=o,h=i&&(u?a.jsx(Cm,{label:i.label,to:i.to,onClick:i.onClick,icon:i.icon}):i.to?a.jsx(O,{variant:"subtle",size:"sm",leftSection:i.icon,component:ne,to:i.to,children:i.label}):a.jsx(O,{variant:"subtle",size:"sm",leftSection:i.icon,onClick:i.onClick,children:i.label})),E=e&&a.jsx(Pe,{order:u?3:1,size:u?void 0:"h2",style:{marginBottom:0,minWidth:0,...u&&{fontSize:18,lineHeight:1.25}},children:e}),f=r&&a.jsx(Sm,{...r}),b=(n||f)&&a.jsxs(g,{c:"gray.6",size:"sm",style:{marginTop:u?0:"4px",lineHeight:u?1.4:1.5},children:[n,n&&f&&" ",f]}),v=s&&(s.component?s.component:s.to?a.jsx(O,{color:s.color||"brand",variant:s.variant,leftSection:s.icon,loading:s.loading,size:u?"sm":"md",disabled:s.disabled,fullWidth:u,component:ne,to:s.to,style:{flexShrink:0},children:s.label}):a.jsx(O,{color:s.color||"brand",variant:s.variant,leftSection:s.icon,loading:s.loading,size:u?"sm":"md",disabled:s.disabled,fullWidth:u,onClick:s.onClick,style:{flexShrink:0},children:s.label})),S=p&&(u?a.jsxs(N,{gap:"sm",children:[(e||i)&&a.jsxs(C,{gap:10,align:"center",wrap:"nowrap",style:{minWidth:0},children:[h,E]}),b,s&&a.jsx("div",{className:"page-header-actions",style:{width:"100%"},children:v})]}):a.jsxs(C,{justify:"space-between",align:"flex-start",wrap:"nowrap",gap:"md",children:[a.jsxs(N,{gap:0,style:{minWidth:0,flex:1},children:[(e||i)&&a.jsxs(C,{gap:"sm",align:"center",wrap:"wrap",style:{minWidth:0},children:[h,E]}),b]}),s&&a.jsx("div",{className:"page-header-actions",children:v})]}));return a.jsxs(N,{gap:u?"sm":"md",className:c?"page-layout-fill":void 0,style:{...m.fullWidth&&{paddingTop:u?"var(--mantine-spacing-sm)":"var(--mantine-spacing-md)",paddingLeft:u?"var(--mantine-spacing-sm)":"var(--mantine-spacing-xl)",paddingRight:u?"var(--mantine-spacing-sm)":"var(--mantine-spacing-xl)",paddingBottom:u?"var(--mantine-spacing-sm)":"var(--mantine-spacing-md)"}},children:[S,x&&a.jsx("div",{style:{marginBottom:"var(--mantine-spacing-lg)"},children:o}),a.jsx(md,{children:c?a.jsx(he,{style:{flex:1,minHeight:0,display:"flex",flexDirection:"column"},children:t}):t})]})}function ti(e){return e.normalize("NFD").replace(/[\u0300-\u036f]/g,"")}function si(e,n){return ti(e.toLowerCase()).includes(ti(n.toLowerCase()))}function Fx(e){const n=e.trim().split(/\s+/);return n.length===1?n[0]:`${n[0]} ${n[1].charAt(0)}.`}function Ux(e){return e?e.split(" ").slice(0,2).map(n=>n[0]).join("").toUpperCase():"?"}class Mt extends Cl.Component{constructor(n){super(n),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(n,t){Re.error("PowerfulSelect Error:",n,t)}render(){return this.state.hasError?this.props.fallback||a.jsx(g,{c:"red",size:"sm",children:"Error loading options. Please try refreshing the page."}):this.props.children}}function kx({data:e,value:n,onChange:t,searchOptions:s=null,createNewOptions:i=null,expandedOptions:o=null,loading:r=!1,renderOption:c,filterFunction:l,...m}){const u=d.useMemo(()=>e.map(_=>({..._,disabled:!!_.disabled})),[e]),p=d.useMemo(()=>i?[...u,{value:"__CREATE_NEW__",label:i.label||"Crear nuevo",disabled:!1}]:u,[u,i]),x=d.useMemo(()=>{const _=p.find(T=>T.value===n);return(_==null?void 0:_.label)||""},[p,n]),h=_=>{var T;if(_==="__CREATE_NEW__"){(T=i==null?void 0:i.onOpenModal)==null||T.call(i);return}t(_)},E=(_,T)=>{var j,L;if(_.value==="__CREATE_NEW__"){const q=(i==null?void 0:i.icon)||a.jsx(Ne,{}),ie=d.isValidElement(q)?d.cloneElement(q,{...q.props,size:((j=q.props)==null?void 0:j.size)||16,style:{marginRight:8,...(L=q.props)==null?void 0:L.style}}):q;return a.jsxs("div",{style:{display:"flex",alignItems:"center",fontWeight:500,color:"var(--mantine-color-brand-7)"},children:[ie,String(_.label||"Create New")]})}return c?c({option:_}):a.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%"},children:[a.jsx("span",{children:String(_.label||_.value||"Unknown")}),T&&a.jsx(Ji,{size:16,style:{color:"var(--mantine-color-brand-7)",flexShrink:0}})]})},[f,b]=d.useState(""),v=d.useMemo(()=>
2{if(!(o!=null&&o.enabled)||!f)return p;const _=l||((T,j)=>{const L=j.toLowerCase();return Object.values(T).some(q=>typeof q=="string"&&si(q,L))});return p.filter(T=>_(T,f))},[p,f,o==null?void 0:o.enabled,l]),S=d.useMemo(()=>{if(!(o!=null&&o.enabled))return 200;if(o.height)return o.height;const _=o.visibleItems||8,T=o.itemHeight||36;return _*T},[o]);if(o!=null&&o.enabled)return a.jsxs(Mt,{children:[a.jsxs(N,{gap:"xs",children:[(s==null?void 0:s.enabled)&&a.jsx(W,{placeholder:s.placeholder||"Buscar...",value:f,onChange:_=>{var T;b(_.currentTarget.value),(T=s.onSearchChange)==null||T.call(s,_.currentTarget.value)},leftSection:a.jsx(ea,{size:16}),size:m.size}),a.jsx(he,{style:{backgroundColor:"#ffffff",border:"1px solid var(--app-color-card-border)",borderRadius:"12px",overflow:"hidden",boxShadow:"var(--app-elevation-raised)"},children:a.jsx(ns,{h:S,children:a.jsxs("div",{children:[v.map((_,T)=>{const j=_.value===n,L=T===v.length-1;return a.jsx("div",{style:{padding:"12px 16px",cursor:_.disabled?"not-allowed":"pointer",backgroundColor:j?"#eff6ff":"#ffffff",color:_.disabled?"#9ca3af":j?"#1d4ed8":"#374151",borderBottom:L?"none":"1px solid #f3f4f6",fontSize:"14px",fontWeight:j?"500":"400",display:"flex",alignItems:"center",justifyContent:"space-between",transition:"all 0.15s ease-in-out",position:"relative"},onClick:()=>{_.disabled||h(_.value)},onMouseEnter:q=>{!_.disabled&&!j&&(q.currentTarget.style.backgroundColor="#f9fafb")},onMouseLeave:q=>{!_.disabled&&!j&&(q.currentTarget.style.backgroundColor="#ffffff")},children:E(_,j)},_.value)}),v.length===0&&a.jsx("div",{style:{padding:"20px 16px",textAlign:"center",color:"var(--mantine-color-dimmed)",fontSize:"14px",backgroundColor:"#ffffff"},children:r?"Cargando...":"No se encontraron opciones"})]})})})]}),i==null?void 0:i.modal]});if(!(s!=null&&s.enabled))return a.jsxs(Mt,{children:[a.jsx(ee,{...m,data:p,value:n||null,onChange:h,allowDeselect:!1,renderOption:({option:_})=>{try{return!_||typeof _!="object"?a.jsx("div",{children:"Invalid option"}):_.value==="__CREATE_NEW__"?a.jsxs("div",{style:{display:"flex",alignItems:"center",fontWeight:500,color:"var(--mantine-color-blue-6)"},children:[(i==null?void 0:i.icon)||a.jsx(Ne,{size:16,style:{marginRight:8}}),String(_.label||"Create New")]}):c?c({option:_}):a.jsx("div",{children:String(_.label||_.value||"Unknown")})}catch(T){return Re.warn("PowerfulSelect renderOption error:",T,{option:_}),a.jsx("div",{children:"Error rendering option"})}}}),i==null?void 0:i.modal]});const y=_=>{var T,j;_===x?(T=s==null?void 0:s.onSearchChange)==null||T.call(s,""):(j=s==null?void 0:s.onSearchChange)==null||j.call(s,_)};return a.jsxs(Mt,{children:[a.jsx(ee,{...m,data:p,value:n||null,onChange:h,searchable:!0,allowDeselect:!1,onSearchChange:y,comboboxProps:{width:300,position:"bottom-start",...m.comboboxProps},filter:({options:_,search:T})=>{if(!T)return _;const j=l||((L,q)=>{const ie=q.toLowerCase();return Object.values(L).some(D=>
2typeof D=="string"&&si(D,ie))});return _.filter(L=>"group"in L?L.items.some(q=>j(q,T)):L.value==="__CREATE_NEW__"?!0:j(L,T))},renderOption:({option:_})=>{try{if(!_||typeof _!="object")return a.jsx("div",{children:"Invalid option"});const T=_.value===n;return E(_,T)}catch(T){return Re.warn("PowerfulSelect renderOption error:",T,{option:_}),a.jsx("div",{children:"Error rendering option"})}}}),i==null?void 0:i.modal]})}function zx({bundles:e,loading:n=!1,onSelect:t}){return n||e.length===0?null:a.jsxs(ce,{position:"bottom-end",shadow:"md",withinPortal:!0,children:[a.jsx(ce.Target,{children:a.jsx(ya,{type:"button",children:a.jsxs(g,{size:"sm",fw:700,c:"brand",style:{display:"inline-flex",alignItems:"center",gap:4},children:["Selección rápida",a.jsx(it,{size:14,color:"currentColor","aria-hidden":"true"})]})})}),a.jsx(ce.Dropdown,{children:e.map(s=>a.jsx(ce.Item,{onClick:()=>t(s),children:s.name},s.name))})]})}const Nm={primary:{color:"brand",variant:"filled"},secondary:{color:"brand",variant:"outline"},danger:{color:"red",variant:"filled"},success:{color:"green",variant:"filled"}};function ge({variant:e="primary",icon:n,children:t,...s}){const i=Nm[e];return a.jsx(O,{...i,leftSection:n,...s,children:t})}const bt="circulacion",Cn="destreza",er={[bt]:"Circulación",[Cn]:"Destreza"};function $x(e){return e?er[e]??e:null}async function Am({blob:e,filename:n}){const t=await Im(e),s=await Nl.writeFile({path:n,data:t,directory:Al.Cache});await yl.share({title:n,url:s.uri})}function ym({blob:e,filename:n}){const t=window.URL.createObjectURL(e),s=document.createElement("a");s.href=t,s.download=n,document.body.appendChild(s),s.click(),s.remove(),window.URL.revokeObjectURL(t)}async function ar(e){Sn?await Am(e):ym(e)}async function Hx(e,n){const s=await(await fetch(e)).blob();await ar({blob:s,filename:n})}function Im(e){return new Promise((n,t)=>{const s=new FileReader;s.onloadend=()=>{const o=s.result.split(",")[1];n(o)},s.onerror=t,s.readAsDataURL(e)})}const ba={fontVariantNumeric:"tabular-nums",whiteSpace:"nowrap"},jm={fontWeight:700},Rm="es-ES";function Om({value:e,tone:n,showPositiveSign:t=!1,primary:s=!1,style:i}){const o=e instanceof $n?e:$n.fromNumber(e,2),r=!o.isZero()&&n?Ia(n):void 0;return a.jsx(g,{size:"sm",style:{...ba,...s?jm:null,color:r,...i},children:o.formatForDisplay(Rm,t)})}const ii="md",Lm={fontSize:10,fontWeight:600,letterSpacing:"0.03em"};function Se({tone:e,quiet:n=!1,size:t=ii,children:s,...i}){const o=yo(e,n),r=t===ii?{...o,root:{...o.root,...Lm}}:o;return a.jsx(Ca,{size:t,variant:"light",styles:r,...i,children:s})}function oi(e,n,t){e.metaKey||e.ctrlKey||e.button===1?window.open(n,"_blank"):t(n)}function ri(e){var t;const n=e.target;return!!((t=n==null?void 0:n.closest)!=null&&t.call(n,"a"))}function Dm(e,n,t,s,i=!1){const{rowClickPath:o,onRowClick:r,rowClickEnabled:c}=t;if(!o&&!r)return n;const l=!i&&(c?c(e.original):!0),{style:m,...u}=n;return{...u,onClick:l?h=>{ri(h)||(o?oi(h,o(e),s):r==null||r(e.original))}:void 0,onAuxClick:l&&o?h=>{h.button!==1||ri(h)||oi(h,o(e),s)}:void 0,style:{cursor:l?"pointer":"default",...m}}}const bn=300;function Mm({value:e,placeholder:n="-",to:t}){return e?a.jsx(oe,{label:e,openDelay:bn,withArrow:!0,withinPortal:!0,children:t?a.jsx(gs,{to:t,size:"sm",truncate:!0,children:e}):a.jsx(g,{size:"sm",truncate:!0,children:e})}):a.jsx(g,{size:"sm",c:"dimmed",children:n})}function Pm({tone:e,label:n}){return a.jsx(oe,{label:n,openDelay:bn,withArrow:!0,withinPortal:!0,children:a.jsx("div",{style:{minWidth:0,maxWidth:"100%",display:"inline-flex"},children:a.jsx(Se,{tone:e,maw:"100%",children:n})})})}const wm="dd/MM/yyyy, HH:mm",Fm="dd/MM/yyyy";function Um(e,n,t){return e?n==="date"?fn(e):Pn(e,t?wm:Fm):null}const Ra=(e,n)=>{const t={...n?{align:n}:{},...e!==void 0?{className:`max-w-[${e}px]`}:{}};return Object.keys(t).length?{mantineTableHeadCellProps:t,mantineTableBodyCellProps:t,mantineTableFooterCellProps:t}:{}},Be=({min:e,max:n,align:t})=>({size:e,minSize:e,grow:!0,...Ra(n,t)}),km={date:Be({min:100,max:140}),section:Be({min:120,max:160}),customer:Be({min:140,max:220})},nr="stacked";function nn(e,n){if(e)return n?{accessorKey:e,id:n}:{accessorKey:e};
2if(n)return{id:n};throw new Error("Column factories require either accessorKey or id")}function z({header:e,value:n,accessorKey:t,id:s,min:i=160,max:o,grow:r=!0,align:c,link:l}){const m=i;return{...nn(t,s),header:e,size:m,minSize:m,grow:r,...Ra(o,c),Cell:({row:u})=>a.jsx(Mm,{value:n(u.original),to:l==null?void 0:l(u.original)})}}function Ze({header:e,value:n,min:t,accessorKey:s,id:i,placeholder:o="-",emptyLabel:r,align:c}){const l=t;return{...nn(s,i),header:e,size:l,minSize:l,...Ra(void 0,c),Cell:({row:m})=>{const u=n(m.original);return u?a.jsx(g,{size:"sm",style:ba,children:u}):r?a.jsx(g,{size:"sm",children:r}):a.jsx(g,{size:"sm",c:"dimmed",children:o})}}}function qx({header:e,primary:n,accessorKey:t,id:s,secondary:i,link:o,tooltip:r,action:c,secondaryAdornment:l,min:m=180,max:u,grow:p=!0,emptyPlaceholder:x="-",align:h}){const E=m;return{...nn(t,s),header:e,size:E,minSize:E,grow:p,meta:{rowShape:nr},...Ra(u,h),Cell:({row:f})=>{const b=n(f.original),v=i==null?void 0:i(f.original),S=o==null?void 0:o(f.original),y=r?r(f.original):b,_=c==null?void 0:c(f.original),T=l==null?void 0:l(f.original);return a.jsxs(C,{gap:0,wrap:"nowrap",style:{minWidth:0},children:[a.jsxs(N,{gap:0,style:{flex:1,minWidth:0},children:[b?S?a.jsx(oe,{label:y,openDelay:bn,withArrow:!0,withinPortal:!0,children:a.jsx(gs,{to:S,size:"sm",truncate:!0,children:b})}):y?a.jsx(oe,{label:y,openDelay:bn,withArrow:!0,withinPortal:!0,children:a.jsx(g,{size:"sm",truncate:!0,children:b})}):a.jsx(g,{size:"sm",truncate:!0,children:b}):a.jsx(g,{size:"sm",c:"dimmed",children:x}),(v||T)&&a.jsxs(C,{gap:4,wrap:"nowrap",style:{minWidth:0},children:[v&&a.jsx(g,{size:"xs",c:"dimmed",truncate:!0,children:v}),T&&a.jsx("div",{style:{flexShrink:0,display:"flex"},children:T})]})]}),_&&a.jsx("div",{style:{flexShrink:0,display:"flex"},children:_})]})}}}function tr({header:e,value:n,accessorKey:t,id:s,tone:i,showPositiveSign:o,primary:r,min:c,max:l,footer:m,placeholder:u="-"}){return{...nn(t,s),header:e,size:c,minSize:c,grow:!0,...Ra(l,"right"),Cell:({row:p})=>{const x=n(p.original);return x==null?a.jsx(g,{size:"sm",c:"dimmed",children:u}):a.jsx(Om,{value:x,tone:i==null?void 0:i(p.original),showPositiveSign:o,primary:r})},...m?{Footer:()=>a.jsx(zm,{content:m()})}:{}}}function zm({content:e}){return e==null?null:a.jsx(g,{size:"sm",fw:700,style:ba,children:e})}function Ea({header:e,value:n,accessorKey:t,id:s,kind:i="date",withTime:o=!1,min:r,max:c,placeholder:l="-",emptyLabel:m}){const u=r===void 0?km.date:{size:r,minSize:r,grow:!0,...Ra(c)};return{...nn(t,s),header:e,...u,Cell:({row:p})=>{const x=Um(n(p.original),i,o);return x?a.jsx(g,{size:"sm",style:ba,children:x}):m?a.jsx(g,{size:"sm",children:m}):a.jsx(g,{size:"sm",c:"dimmed",children:l})}}}function De({header:e,accessorKey:n,id:t,min:s,max:i,tone:o,label:r,cell:c}){if(!c&&!(o&&r))throw new Error("statusColumn requires either cell or both tone and label");return{...nn(n,t),header:e,size:s,minSize:s,...Ra(i),Cell:({row:l})=>c?c(l.original):a.jsx(Pm,{tone:o(l.original),label:r(l.original)})}}const $m={single:36,stacked:47},li=5,ci=5,di=(e,n)=>{if(!n)return e;if(!e||typeof e=="function"||typeof n=="function")return n;const t=e,s=n;return{...t,...s,style:{...t.style,...s.style}}},Hm=16;function qm(e){return(e??[]).some(t=>{const s=t.meta;return(s==null?void 0:s.rowShape)===nr})?"stacked":"single"}const Bm="xs",sr="Filtrarâ¦",Km={root:{borderBottom:"none",minWidth:0,width:"100%"},wrapper:{minWidth:0},input:{fontWeight:400,fontSize:"var(--mantine-font-size-xs)",minWidth:0}},ui={variant:"filled",size:Bm,placeholder:sr,styles:Km},Pt=e=>{const n=typeof e=="object"&&e!==null?e:{};return{...ui,...n,styles:{...ui.styles,...n.styles??{}}}},Ym={IconArrowAutofitContent:()=>a.jsx(ws,{size:16}),IconArrowsSort:()=>a.jsx(ws,{size:16}),IconBoxMultiple:()=>a.jsx(Ps,{size:16}),IconChevronDown:()=>a.jsx(it,{size:16}),IconChevronLeft:()=>a.jsx(st,{size:16}),IconChevronRight:()=>a.jsx(ct,{size:16}),IconChevronsDown:()=>a.jsx(Rl,{size:16}),IconCircleX:()=>a.jsx(gn,{size:16}),IconClearAll:()=>a.jsx(ze,{size:16}),IconColumns:()=>a.jsx(Ps,{size:16}),IconDeviceFloppy:()=>a.jsx(io,{size:16}),IconEdit:()=>a.jsx(lt,{size:16}),IconEyeOff:()=>a.jsx(vn,{size:16}),IconFilter:()=>a.jsx(Ms,{size:16}),IconFilterOff:()=>a.jsx(Ms,{size:16}),IconPinned:()=>a.jsx(qt,{size:16}),IconPinnedOff:()=>a.jsx(qt,{size:16}),IconSearch:()=>a.jsx(ea,{size:16}),IconSearchOff:()=>a.jsx(ea,{size:16}),IconSortAscending:()=>a.jsx(rt,{size:16}),IconSortDescending:()=>a.jsx(ot,{size:16}),IconX:()=>a.jsx(gn,{size:16})},Vm=()=>
2{const[e,n]=d.useState(!1);return d.useEffect(()=>{const t=()=>{n(window.innerWidth<=768)};return t(),window.addEventListener("resize",t),()=>window.removeEventListener("resize",t)},[]),e},_e=e=>{var _;const n=Vm(),t=aa(),{rowClickPath:s,onRowClick:i,rowClickEnabled:o,initialState:r,mantineTableBodyRowProps:c,mantineFilterSelectProps:l,mantineFilterTextInputProps:m,mantineFilterDateInputProps:u,mantineTableBodyCellProps:p,displayColumnDefOptions:x,...h}=e,E=qm(h.columns),f={density:"xs",pagination:{pageIndex:0,pageSize:25},...r,columnPinning:{...r==null?void 0:r.columnPinning,right:Array.from(new Set([...((_=r==null?void 0:r.columnPinning)==null?void 0:_.right)??[],"mrt-row-actions"]))}},v={...{"mrt-row-actions":{header:"",mantineTableBodyCellProps:{align:"center",onClick:T=>T.stopPropagation(),style:{paddingTop:0,paddingBottom:0,verticalAlign:"middle",lineHeight:1}},mantineTableHeadCellProps:{align:"center"},size:50,grow:!1},"mrt-row-select":{size:40,grow:!1,mantineTableBodyCellProps:{onClick:T=>T.stopPropagation()}}}};for(const[T,j]of Object.entries(x??{})){const L=v[T]??{};v[T]={...L,...j,mantineTableBodyCellProps:di(L.mantineTableBodyCellProps,j==null?void 0:j.mantineTableBodyCellProps),mantineTableHeadCellProps:di(L.mantineTableHeadCellProps,j==null?void 0:j.mantineTableHeadCellProps)}}const S=T=>typeof c=="function"?c(T):c??{},y=s||i||c?T=>{const{isLoading:j,showSkeletons:L}=T.table.getState();return Dm(T.row,S(T),{rowClickPath:s,onRowClick:i,rowClickEnabled:o},t,!!(j||L))}:void 0;return Il({autoResetPageIndex:!1,defaultColumn:{maxSize:1e3,minSize:40,size:100,grow:!1},layoutMode:"grid",enableColumnActions:!1,enableDensityToggle:!1,enableFullScreenToggle:!1,enableHiding:!1,enableColumnPinning:!0,icons:Ym,mantinePaginationProps:{rowsPerPageOptions:["25","100","400"],size:n?"xs":"sm"},mantineBottomToolbarProps:{style:{...n&&{padding:"0",minHeight:"auto",flexWrap:"wrap",fontSize:"1px"}}},mantinePaperProps:{p:"0",radius:"md",shadow:"0",withBorder:!1},mantineProgressProps:{value:100,style:{display:"block",visibility:"visible"}},mantineTableProps:{align:"center"},mantineSkeletonProps:{height:Hm},mantineTableHeadCellProps:{style:{padding:5}},mantineTableFooterCellProps:{style:{paddingTop:16,paddingBottom:16,paddingLeft:5,paddingRight:5}},mantineLoadingOverlayProps:{style:{position:"absolute",top:0,left:0,right:0,bottom:0,zIndex:10}},paginationDisplayMode:"default",enablePagination:!0,enableBottomToolbar:!0,enableTopToolbar:!1,renderToolbarInternalActions:()=>a.jsx(a.Fragment,{}),positionActionsColumn:"last",...h,displayColumnDefOptions:v,mantineTableBodyCellProps:T=>{const j=(typeof p=="function"?p(T):p)??{},{style:L,...q}=j;return{...q,style:{height:$m[E],paddingTop:li,paddingBottom:li,paddingLeft:ci,paddingRight:ci,verticalAlign:"middle",...L}}},mantineTableBodyRowProps:y,initialState:f,mantineFilterSelectProps:Pt(l),mantineFilterTextInputProps:Pt(m),mantineFilterDateInputProps:Pt(u),localization:{...jl,...h.localization??{}}})},Bx={INVOICE:"invoice",INVOICE_BY_PAYMENTS:"invoice_by_payments",ENROLLMENT_ASSIGN_TARIFF:"enrollment_assign_tariff",ENROLLMENT_ASSIGN_INSTRUCTOR:"enrollment_assign_instructor",ENROLLMENT_FINISH:"enrollment_finish",ENROLLMENT_ABANDON:"enrollment_abandon",EXAM_ATTENDANCE_MOVE:"exam_attendance_move",SALES_DOCUMENT_ISSUE:"sales_document_issue",SALES_DOCUMENT_DELETE:"sales_document_delete",SALES_DOCUMENT_VOID:"sales_document_void",ENROLLMENT_DEBT_WRITE_OFF:"enrollment_debt_write_off"},Kx={PENDING:"pending",PROCESSING:"processing",COMPLETED:"completed",COMPLETED_WITH_ERRORS:"completed_with_errors",FAILED:"failed"},Yx={SUCCESS:"success",FAILED:"failed"},_a={SELECTED:"SELECTED",FILTERED:"FILTERED"},Vx={ENROLLMENT:"enrollment",BILLING_CUSTOMER:"billing_customer",STUDENT:"student"},Gx={NOT_CONFIRMED:"ISSUE_DATE_NOT_CONFIRMED",MUST_BE_TODAY:"ISSUE_DATE_MUST_BE_TODAY"},Wx={LICENSE_MISMATCH:"LICENSE_MISMATCH",ENROLLMENT_NOT_FOUND:"ENROLLMENT_NOT_FOUND",TARIFF_NOT_FOUND:"TARIFF_NOT_FOUND",TARIFF_ARCHIVED:"TARIFF_ARCHIVED",TARIFF_NOT_VALID_ON_DATE:"TARIFF_NOT_VALID_ON_DATE",INSTRUCTOR_NOT_FOUND:"INSTRUCTOR_NOT_FOUND",INSTRUCTOR_SECTION_MISMATCH:"INSTRUCTOR_SECTION_MISMATCH",INSTRUCTOR_LICENSE_MISMATCH:"INSTRUCTOR_LICENSE_MISMATCH",INSTRUCTOR_ALREADY_ASSIGNED:"INSTRUCTOR_ALREADY_ASSIGNED",ENROLLMENT_ALREADY_FINISHED:"ENROLLMENT_ALREADY_FINISHED"},Xx={EXAM_ATTENDANCE_NOT_FOUND:"exam_attendance_not_found",TARGET_EXAM_NOT_FOUND:"target_exam_not_found",ATTENDANCE_HAS_RESULT:"exam_attendance_has_result",TARGET_EXAM_LICENSE_NOT_ALLOWED:"target_exam_license_not_allowed",ALREADY_IN_TARGET_EXAM:"already_in_target_exam"},Qx={INVALID_CONFIG:"BULK_DEBT_WRITE_OFF_INVALID_CONFIG",ENROLLMENT_NOT_FOUND:"BULK_DEBT_WRITE_OFF_ENROLLMENT_NOT_FOUND",NO_DEBT_CHARGES:"BULK_DEBT_WRITE_OFF_NO_DEBT_CHARGES",CREDIT_NOTE_ROUNDING_MISMATCH:"BULK_DEBT_WRITE_OFF_CREDIT_NOTE_ROUNDING_MISMATCH"};
2function Gm(){const[e,n]=d.useState(_a.SELECTED),[t,s]=d.useState(new Set),[i,o]=d.useState(new Set),[r,c]=d.useState(null),l=e===_a.FILTERED,m=d.useCallback(S=>{l?o(y=>{const _=new Set(y);return _.has(S)?_.delete(S):_.add(S),_}):s(y=>{const _=new Set(y);return _.has(S)?_.delete(S):_.add(S),_})},[l]),u=d.useCallback(S=>{s(y=>{const _=new Set(y);return S.forEach(T=>_.add(T)),_})},[]),p=d.useCallback(()=>{l?(n(_a.SELECTED),o(new Set),c(null),s(new Set)):s(new Set)},[l]),x=d.useCallback(S=>{n(_a.FILTERED),c(S),o(new Set),s(new Set)},[]),h=d.useCallback(()=>{n(_a.SELECTED),c(null),o(new Set)},[]),E=d.useCallback(()=>{n(_a.SELECTED),s(new Set),o(new Set),c(null)},[]),f=d.useCallback(S=>l?!i.has(S):t.has(S),[l,t,i]),b=d.useMemo(()=>l&&r!==null?r-i.size:t.size,[l,r,i.size,t.size]),v=d.useCallback(S=>l?{mode:_a.FILTERED,filters:S,excludedIds:i.size>0?Array.from(i):void 0}:{mode:_a.SELECTED,entityIds:Array.from(t)},[l,t,i]);return{mode:e,selectedIds:t,excludedIds:i,totalMatchingCount:r,isFilteredMode:l,toggleRow:m,selectPage:u,deselectPage:p,enterFilteredMode:x,exitFilteredMode:h,clearSelection:E,isRowSelected:f,effectiveSelectedCount:b,getPayload:v}}function Tn({children:e,style:n,className:t}){return a.jsx(Ol,{defer:!0,element:"div",style:n,className:t,children:e})}function Wm({onMobileClose:e}){const n=oo(),t=ka(),s=za(`(min-width: ${t.breakpoints.md})`,!1,{getInitialValueInEffect:!1});return d.useEffect(()=>{e==null||e()},[n.pathname,e]),a.jsxs(N,{h:"100%",gap:0,style:ue.container,children:[s&&a.jsx(he,{p:"md",style:ue.border,children:a.jsx(Ko,{})}),a.jsx(he,{style:ue.border,children:a.jsx(Qu,{onLogout:e})}),a.jsx(ns,{style:ue.layout.scrollArea,p:"md",children:a.jsxs(he,{style:Gu(),children:[a.jsx(be,{label:"Tenants",leftSection:a.jsx(Ll,{className:"mr-2 h-4 w-4"}),component:ne,to:"/",active:n.pathname==="/",styles:ue.navLink}),a.jsx(be,{label:"En directo",leftSection:a.jsx(dt,{className:"mr-2 h-4 w-4"}),component:ne,to:$.livePresence(),active:n.pathname.startsWith($.livePresence()),styles:ue.navLink}),a.jsx(be,{label:"Referidos",leftSection:a.jsx(Dl,{className:"mr-2 h-4 w-4"}),component:ne,to:$.platformReferrals(),active:n.pathname.startsWith("/referrals"),styles:ue.navLink}),a.jsxs(be,{label:"Base de conocimiento",leftSection:a.jsx(ts,{className:"mr-2 h-4 w-4"}),defaultOpened:n.pathname.startsWith("/knowledge-base"),styles:ue.navLink,children:[a.jsx(be,{label:"ArtÃculos",component:ne,to:$.helpArticleList(),active:n.pathname.startsWith("/knowledge-base/articles"),styles:ue.navLink}),a.jsx(be,{label:"CategorÃas",component:ne,to:$.helpCategoryList(),active:n.pathname.startsWith("/knowledge-base/categories"),styles:ue.navLink}),a.jsx(be,{label:"Fragmentos",component:ne,to:$.knowledgeFragmentList(),active:n.pathname.startsWith("/knowledge-base/fragments"),styles:ue.navLink})]}),a.jsx(be,{label:"Chatbot",leftSection:a.jsx(ro,{className:"mr-2 h-4 w-4"}),defaultOpened:n.pathname.startsWith("/chatbot"),styles:ue.navLink,children:a.jsx(be,{label:"Conversaciones",component:ne,to:"/chatbot/conversations",active:n.pathname.startsWith("/chatbot/conversations"),styles:ue.navLink})}),a.jsxs(be,{label:"Contenido",leftSection:a.jsx(lo,{className:"mr-2 h-4 w-4"}),defaultOpened:n.pathname.startsWith("/announcements")||n.pathname==="/documents"||n.pathname.startsWith("/simulation-criteria"),styles:ue.navLink,children:[a.jsx(be,{label:"Novedades",component:ne,to:"/announcements",active:n.pathname.startsWith("/announcements"),styles:ue.navLink}),a.jsx(be,{label:"Documentos",component:ne,to:"/documents",active:n.pathname==="/documents",styles:ue.navLink}),a.jsx(be,{label:"Simulacros",component:ne,to:"/simulation-criteria",active:n.pathname.startsWith("/simulation-criteria"),styles:ue.navLink})]}),a.jsxs(be,{label:"Herramientas",leftSection:a.jsx(Ml,{className:"mr-2 h-4 w-4"}),defaultOpened:n.pathname.startsWith("/tools"),styles:ue.navLink,children:[a.jsx(be,{label:"Allocation Manager",component:ne,to:"/tools/allocation-manager",active:n.pathname==="/tools/allocation-manager",styles:ue.navLink}),a.jsx(be,{label:"DGT Sync",component:ne,to:"/tools/dgt-sync",active:n.pathname==="/tools/dgt-sync",styles:ue.navLink}),a.jsx(be,{label:"AUES Call Log",component:ne,to:"/tools/aues-logs",active:n.pathname==="/tools/aues-logs",styles:ue.navLink}),a.jsx(be,{label:"AUES simulado",component:ne,to:"/tools/aues-simulado",active:n.pathname==="/tools/aues-simulado",styles:ue.navLink}),a.jsx(be,{label:"Tareas programadas",component:ne,to:"/tools/scheduled-tasks",active:n.pathname.startsWith("/tools/scheduled-tasks"),styles:ue.navLink}),a.jsx(be,{label:"Insights",component:ne,to:$.insightReports(),active:n.pathname.startsWith("/tools/insights"),styles:ue.navLink}),a.jsx(be,{label:"Correos",component:ne,to:$.capturedEmails(),active:n.pathname.startsWith("/tools/emails"),styles:ue.navLink})]})]})})]})}function Ta(){return w({queryKey:["platform-admin","tenants"],queryFn:()=>A("/platform-admin/tenants")})}function ir(e,n){const t=window.location.port?`:${window.location.port}`:"";return`${window.location.protocol}//${e}${t}${n}`}const Xm="/api/auth/set-token",mi="/";function Nn(){const{showErrorToast:e}=F();return U({mutationFn:n=>{const t=typeof n=="string"?n:n.tenantId,s=typeof n=="string"?void 0:n.userId;return A(`/platform-admin/impersonate-tenant/${t}`,{method:"POST",body:s?JSON.stringify({userId:s}):void 0})},onSuccess:(n,t)=>{const s=typeof t=="string"?mi:t.redirect??mi,i=`${ir(n.tenantDomain,Xm)}?redirect=${encodeURIComponent(s)}`,o=document.createElement("form");o.method="POST",o.action=i,o.target="_blank",o.style.display="none";const r=document.createElement("input");r.type="hidden",r.name="token",r.value=n.token,o.appendChild(r),document.body.appendChild(o),o.submit()},onError:()=>{e("IMPERSONATION_FAILED")}})}function Qm(){const e=H();return U({mutationFn:n=>A("/platform-admin/tenants",{method:"POST",body:JSON.stringify(n)}),onSuccess:()=>
2{e.invalidateQueries({queryKey:["platform-admin","tenants"]})}})}const Jm={infrastructure:"Creando infraestructura...",sections:"Creando secciones...",contract:"Creando contrato...","concepts-tariffs":"Creando tarifas...",vehicles:"Creando vehÃculos...",instructors:"Creando profesores...",students:"Creando alumnos y matrÃculas...",balances:"Recalculando balances..."},Zm=["completed","failed"];function ep(e){var s,i,o,r,c;const n=w({queryKey:["platform-admin","tenant-seed-jobs",e],queryFn:()=>A(`/platform-admin/tenant-seed-jobs/${e}`),enabled:e!==null,refetchInterval:l=>{var u;const m=(u=l.state.data)==null?void 0:u.status;return m&&Zm.includes(m)?!1:1e3}}),t=(s=n.data)!=null&&s.currentStep?Jm[n.data.currentStep]??n.data.currentStep:null;return{...n,stepLabel:t,isCompleted:((i=n.data)==null?void 0:i.status)==="completed",isFailed:((o=n.data)==null?void 0:o.status)==="failed",isSeeding:((r=n.data)==null?void 0:r.status)==="pending"||((c=n.data)==null?void 0:c.status)==="processing"}}function ap({opened:e,onClose:n}){var b;const{showSuccessToast:t,showErrorToast:s}=F(),{handleError:i}=Q(),o=Qm(),[r,c]=d.useState(null),l=ep(r),m=d.useRef(!1),u=r!==null&&!l.isCompleted&&!l.isFailed,p=$e({initialValues:{domain:"",name:"",seedDemoData:!1,studentCount:50,sectionCount:8,instructorCount:14},validate:{domain:v=>v.trim().length===0?"El dominio es obligatorio":null,name:v=>v.trim().length===0?"El nombre es obligatorio":null}});d.useEffect(()=>{l.isCompleted&&!m.current&&(m.current=!0,t({title:"Tenant creado",description:"El tenant y los datos de demo se han creado correctamente."}),x())},[l.isCompleted,t]),d.useEffect(()=>{l.isFailed&&!m.current&&(m.current=!0,s("UNKNOWN_ERROR"))},[l.isFailed,s]),d.useEffect(()=>{e||(m.current=!1)},[e]);const x=()=>{p.reset(),c(null),m.current=!1,n()},h=()=>{u||x()},E=p.onSubmit(v=>{o.mutate({domain:v.domain,name:v.name,seedDemoData:v.seedDemoData,...v.seedDemoData&&{studentCount:v.studentCount,sectionCount:v.sectionCount,instructorCount:v.instructorCount}},{onSuccess:S=>{S.seedJobId?c(S.seedJobId):(t({title:"Tenant creado",description:"El tenant se ha creado correctamente."}),x())},onError:S=>i(S)})}),f=r!==null;return a.jsx(se,{opened:e,onClose:h,title:"Crear tenant",closeOnClickOutside:!u,closeOnEscape:!u,withCloseButton:!u,children:f?a.jsx(N,{align:"center",py:"xl",gap:"md",children:l.isFailed?a.jsxs(a.Fragment,{children:[a.jsx(Ue,{icon:a.jsx(co,{size:16}),color:"red",title:"Error",children:((b=l.data)==null?void 0:b.errorMessage)??"Ha ocurrido un error durante la generación de datos."}),a.jsx(O,{variant:"subtle",onClick:x,children:"Cerrar"})]}):a.jsxs(a.Fragment,{children:[a.jsx(me,{size:"lg"}),a.jsx(g,{fw:500,children:"Generando datos de demo..."}),l.stepLabel&&a.jsx(g,{size:"sm",c:"dimmed",children:l.stepLabel})]})}):a.jsx("form",{onSubmit:E,children:a.jsxs(N,{children:[a.jsx(W,{label:"Nombre",placeholder:"Mi autoescuela",...p.getInputProps("name")}),a.jsx(W,{label:"Dominio",placeholder:"miautoescuela",...p.getInputProps("domain")}),a.jsx(xn,{label:"Incluir datos de demo",...p.getInputProps("seedDemoData",{type:"checkbox"})}),a.jsx(ss,{in:p.values.seedDemoData,children:a.jsxs(N,{gap:"sm",children:[a.jsx(Le,{label:"Número de alumnos",min:1,max:200,...p.getInputProps("studentCount")}),a.jsx(Le,{label:"Número de secciones",min:1,max:20,...p.getInputProps("sectionCount")}),a.jsx(Le,{label:"Número de profesores",min:2,max:30,...p.getInputProps("instructorCount")})]})}),a.jsxs(C,{justify:"flex-end",mt:"md",children:[a.jsx(O,{variant:"subtle",onClick:h,children:"Cancelar"}),a.jsx(O,{type:"submit",loading:o.isPending,children:"Crear"})]})]})})})}const wn={all:["tenant-import"],list:()=>[...wn.all,"list"]},np={downloading:"Descargando el volcado...",validating:"Validando el volcado...",loading:"Cargando datos...",verifying:"Verificando recuentos...",finishing:"Rematando el import..."},tp=["pending","processing"],sp=1e3;function ip(e){return tp.includes(e.status)}function op(e){return e?np[e]??e:null}function rp(){var o;const e=H(),{showToast:n,showSuccessToast:t}=F(),s=w({queryKey:wn.list(),queryFn:()=>A("/platform-admin/tenant-imports"),refetchInterval:r=>{var l;return(((l=r.state.data)==null?void 0:l.jobs)??[]).some(ip)?sp:!1}}),i=U({mutationFn:async r=>{const{importJobId:c,uploadUrl:l}=await A("/platform-admin/tenant-imports/upload-url",{method:"POST"}),m=await fetch(l,{method:"PUT",body:r.file});if(!m.ok){const u=new Error("El fichero no se pudo subir a S3.");throw u.status=m.status,u.response={data:{code:"TENANT_IMPORT_UPLOAD_FAILED"}},u.code="TENANT_IMPORT_UPLOAD_FAILED",u}return A("/platform-admin/tenant-imports",{method:"POST",body:JSON.stringify({importJobId:c,targetDomain:r.targetDomain,targetName:r.targetName,cutOutbound:r.cutOutbound})})},onSuccess:()=>
2{e.invalidateQueries({queryKey:wn.list()}),t({title:"Import en marcha",description:"Te avisaremos cuando termine."})},onError:r=>{e.invalidateQueries({queryKey:wn.list()});const c=gt(r);n({title:c.title??"No se pudo iniciar el import",description:c.message,variant:c.variant??"destructive"})}});return{jobs:((o=s.data)==null?void 0:o.jobs)??[],isLoading:s.isLoading,startImport:r=>i.mutate(r),isStarting:i.isPending}}function lp(e){return e.status==="processing"||e.status==="pending"&&e.targetDomain!==""}function cp(e){return e.targetDomain===""&&e.targetName===""?"Sin iniciar":`${e.targetName} (${e.targetDomain})`}const dp={pending:"info",processing:"info",completed:"good",failed:"poor"},up={pending:"En curso",processing:"En curso",completed:"Completado",failed:"Fallido"};function mp({status:e}){return a.jsx(Se,{tone:dp[e],children:up[e]})}function pp(){const{jobs:e,isLoading:n,startImport:t,isStarting:s}=rp(),i=e.find(lp)??null,o=$e({initialValues:{file:null,targetDomain:"",targetName:"",cutOutbound:!0},validate:{file:c=>c===null?"Selecciona el volcado .sql.gz":null,targetDomain:c=>c.trim().length===0?"El dominio es obligatorio":null,targetName:c=>c.trim().length===0?"El nombre es obligatorio":null}}),r=o.onSubmit(c=>{c.file&&t({file:c.file,targetDomain:c.targetDomain,targetName:c.targetName,cutOutbound:c.cutOutbound})});return a.jsxs(N,{gap:"md",children:[a.jsx("form",{onSubmit:r,children:a.jsxs(N,{gap:"sm",children:[a.jsx(is,{label:"Volcado del tenant",placeholder:"tenant.sql.gz",accept:".gz",leftSection:a.jsx(uo,{size:16}),clearable:!0,...o.getInputProps("file")}),a.jsx(W,{label:"Dominio",placeholder:"miautoescuela",...o.getInputProps("targetDomain")}),a.jsx(W,{label:"Nombre",placeholder:"Mi autoescuela",...o.getInputProps("targetName")}),a.jsx(Me,{label:"Cortar salidas al exterior",...o.getInputProps("cutOutbound",{type:"checkbox"})}),a.jsx(C,{children:a.jsx(O,{type:"submit",loading:s,disabled:i!==null,children:"Importar"})})]})}),!n&&e.length>0&&a.jsx(N,{gap:"xs",children:e.map(c=>a.jsxs(N,{gap:4,children:[a.jsxs(C,{gap:"sm",wrap:"nowrap",children:[a.jsx(g,{size:"sm",children:Te(c.createdAt,"dd/MM/yyyy HH:mm")}),a.jsx(g,{size:"sm",fw:500,children:cp(c)}),a.jsx(mp,{status:c.status}),(c.status==="pending"||c.status==="processing")&&a.jsxs(C,{gap:"xs",wrap:"nowrap",children:[a.jsx(me,{size:"xs"}),a.jsx(g,{size:"xs",c:"dimmed",children:op(c.currentStep)??"Preparando..."})]})]}),c.status==="failed"&&a.jsx(g,{size:"xs",c:"red",children:c.errorMessage??"El import ha fallado"})]},c.importJobId))})]})}function gp(){const[e,n]=d.useState(""),{data:t,isLoading:s}=Ta(),i=Nn(),[o,{open:r,close:c}]=Za(!1),l=d.useMemo(()=>{if(!t)return[];if(!e.trim())return t;const p=e.toLowerCase();return t.filter(x=>x.name.toLowerCase().includes(p)||x.domain.toLowerCase().includes(p))},[t,e]),m=d.useMemo(()=>[{...z({accessorKey:"name",header:"Nombre",value:p=>p.name,link:p=>$.tenant(p.id),min:250}),enableColumnFilter:!1,enableSorting:!1},{...z({accessorKey:"domain",header:"Dominio",value:p=>p.domain,min:250}),enableColumnFilter:!1,enableSorting:!1}],[]),u=_e({columns:m,data:l,enableRowActions:!0,enableTopToolbar:!1,displayColumnDefOptions:{"mrt-row-actions":{size:130}},renderRowActions:({row:p})=>a.jsx(O,{size:"xs",variant:"light",leftSection:a.jsx(ut,{size:14}),loading:i.isPending,onClick:x=>{x.stopPropagation(),i.mutate(p.original.id)},children:"Suplantar"}),rowClickPath:p=>$.tenant(p.original.id),initialState:{pagination:{pageIndex:0,pageSize:400}},state:{isLoading:s},enableColumnFilters:!1});return a.jsxs(de,{title:"Tenants",actionButton:{label:"Crear tenant",onClick:r,icon:a.jsx(Ne,{size:16})},searchComponent:a.jsx(W,{placeholder:"Buscar por nombre o dominio...",value:e,onChange:p=>n(p.currentTarget.value),size:"xl",radius:"lg",leftSection:a.jsx(ea,{}),styles:{input:{backgroundColor:"white"}}}),children:[a.jsx(X,{children:a.jsx(xe,{table:u})}),a.jsx(X,{title:"Importar tenant",subtitle:"Sube el volcado .sql.gz de un tenant para crearlo en este entorno.",children:a.jsx(pp,{})}),a.jsx(ap,{opened:o,onClose:c})]})}const or=e=>["platform",e,"division-tree"];
2function Tt(e,n){e.invalidateQueries({queryKey:or(n)})}function rr(e){return w({queryKey:or(e),queryFn:()=>A(`/platform-admin/tenants/${e}/divisions/tree`),enabled:!!e,staleTime:6e4})}function hp(e){const n=H(),{showSuccessToast:t,showToast:s}=F();return U({mutationFn:i=>A(`/platform-admin/tenants/${e}/divisions`,{method:"POST",body:JSON.stringify(i)}),onSuccess:()=>{Tt(n,e),t({description:"División creada correctamente"})},onError:i=>{s({title:"Error al crear la división",description:i.message||"No se ha podido crear la división",variant:"destructive"})}})}function Ep(e){const n=H(),{showSuccessToast:t,showToast:s}=F();return U({mutationFn:({id:i,name:o,containsStudents:r})=>A(`/platform-admin/tenants/${e}/divisions/${i}`,{method:"PUT",body:JSON.stringify({name:o,containsStudents:r})}),onSuccess:()=>{Tt(n,e),t({description:"División actualizada correctamente"})},onError:i=>{s({title:"Error al actualizar la división",description:i.message||"No se ha podido actualizar la división",variant:"destructive"})}})}function fp(e){const n=H(),{showSuccessToast:t,showToast:s}=F();return U({mutationFn:({id:i,newParentId:o})=>A(`/platform-admin/tenants/${e}/divisions/${i}/move`,{method:"PUT",body:JSON.stringify({newParentId:o})}),onSuccess:()=>{Tt(n,e),t({description:"División movida correctamente"})},onError:i=>{const o=i.code;if(o==="DIVISION_CYCLE"){s({title:"Movimiento no permitido",description:"No se puede mover la división dentro de sà misma o de uno de sus descendientes",variant:"destructive"});return}if(o==="DIVISION_MAX_DEPTH"){s({title:"Profundidad máxima alcanzada",description:"No se puede mover la división porque se superarÃa la profundidad máxima permitida",variant:"destructive"});return}if(o==="DIVISION_CROSS_TENANT"){s({title:"Movimiento no permitido",description:"No se puede mover la división a otra organización",variant:"destructive"});return}s({title:"Error al mover la división",description:i.message||"No se ha podido mover la división",variant:"destructive"})}})}function bp(e){const n=H(),{showSuccessToast:t,showToast:s}=F();return U({mutationFn:({id:i})=>A(`/platform-admin/tenants/${e}/divisions/${i}`,{method:"DELETE"}),onSuccess:()=>{Tt(n,e),t({description:"División archivada correctamente"})},onError:i=>{if(i.code==="DIVISION_HAS_DEPENDENCIES"){s({title:"No se puede archivar",description:"No se puede archivar: la división tiene secciones o subdivisiones activas",variant:"destructive"});return}s({title:"Error al archivar la división",description:i.message||"No se ha podido archivar la división",variant:"destructive"})}})}function pi(e){const{mode:n,tenantId:t,opened:s,onClose:i}=e,[o,r]=d.useState(""),[c,l]=d.useState(!1),m=hp(t),u=Ep(t),p=n==="edit"?e.division.id:null,x=n==="edit"?e.division.name:"",h=n==="edit"?e.division.containsStudents:!1;d.useEffect(()=>{s&&(r(x),l(h))},[s,n,p,x,h]);const E=o.trim(),f=m.isPending||u.isPending,b=n==="create"||E!==e.division.name||c!==e.division.containsStudents,v=E.length>0&&!f&&b,S=()=>{if(v){if(n==="create"){m.mutate({parentId:e.parentId,name:E},{onSuccess:()=>i()});return}u.mutate({id:e.division.id,name:E,containsStudents:c},{onSuccess:()=>i()})}},y=n==="create"?"Crear división":"Editar división",_=n==="create"?"Crear":"Guardar";return a.jsx(se,{opened:s,onClose:i,title:y,centered:!0,children:a.jsxs(N,{children:[a.jsx(W,{label:"Nombre de la división",placeholder:"Ej. Zona norte",value:o,onChange:T=>r(T.currentTarget.value),onKeyDown:T=>{T.key==="Enter"&&(T.preventDefault(),S())},autoFocus:!0,required:!0}),n==="edit"&&a.jsxs(N,{gap:4,children:[a.jsx(Me,{label:"Contenedor de alumnos",checked:c,onChange:T=>l(T.currentTarget.checked)}),a.jsx(g,{size:"xs",c:"dimmed",children:"Los alumnos de las secciones de esta división se anclan aquÃ. Los alumnos ya existentes no se re-ubican; solo afecta a los nuevos."})]}),a.jsxs(C,{justify:"flex-end",children:[a.jsx(O,{variant:"subtle",onClick:i,disabled:f,children:"Cancelar"}),a.jsx(O,{onClick:S,loading:f,disabled:!v,children:_})]})]})})}const Ln="__ROOT__";function Tp(e){const n=new Set,t=s=>{n.add(s.id);for(const i of s.children)t(i)};return t(e),n}function lr(e,n,t){const s=[];for(const i of e){if(n.has(i.id))continue;const o=t?`${t} / ${i.name}`:i.name;s.push({value:i.id,label:o}),s.push(...lr(i.children,n,o))}return s}function vp({tenantId:e,division:n,opened:t,onClose:s}
2){const i=rr(e),o=fp(e),[r,c]=d.useState(null);d.useEffect(()=>{t&&c(n.parentId??Ln)},[t,n.id,n.parentId]);const l=d.useMemo(()=>Tp(n),[n]),m=d.useMemo(()=>{if(!i.data)return[];const f=lr(i.data.divisions,l,"");return[{value:Ln,label:"Convertir en raÃz"},...f]},[i.data,l]),u=n.parentId??Ln,p=r===u,x=o.isPending,h=r!==null&&!p&&!x,E=()=>{if(!h)return;const f=r===Ln?null:r;o.mutate({id:n.id,newParentId:f},{onSuccess:()=>s()})};return a.jsx(se,{opened:t,onClose:s,title:`Mover "${n.name}"`,centered:!0,children:a.jsxs(N,{children:[a.jsx(g,{size:"sm",c:"dimmed",children:"Selecciona el nuevo padre de la división. Se ocultan la propia división y sus descendientes."}),a.jsx(ee,{label:"Nuevo padre",placeholder:"Selecciona una opción",data:m,value:r,onChange:c,searchable:!0,nothingFoundMessage:"Sin coincidencias"}),a.jsxs(C,{justify:"flex-end",children:[a.jsx(O,{variant:"subtle",onClick:s,disabled:x,children:"Cancelar"}),a.jsx(O,{onClick:E,loading:x,disabled:!h,children:"Mover"})]})]})})}function cr({division:e,depth:n,onCreateChild:t,onEdit:s,onMove:i,onArchive:o}){const r=n*16;return a.jsxs(N,{gap:4,children:[a.jsx(he,{style:{paddingLeft:r},children:a.jsxs(C,{justify:"space-between",wrap:"nowrap",children:[a.jsxs(C,{gap:"xs",wrap:"nowrap",children:[a.jsx(g,{size:"sm",fw:500,children:e.name}),e.containsStudents&&a.jsx(Se,{tone:"brand",quiet:!0,children:"Contenedor de alumnos"})]}),a.jsxs(C,{gap:4,wrap:"nowrap",children:[a.jsx(oe,{label:"Crear subdivisión",withArrow:!0,children:a.jsx(J,{variant:"subtle",color:"gray",onClick:()=>t(e.id),"aria-label":"Crear subdivisión",children:a.jsx(Ne,{size:16})})}),a.jsx(oe,{label:"Editar",withArrow:!0,children:a.jsx(J,{variant:"subtle",color:"gray",onClick:()=>s(e),"aria-label":"Editar",children:a.jsx(lt,{size:16})})}),a.jsx(oe,{label:"Mover",withArrow:!0,children:a.jsx(J,{variant:"subtle",color:"gray",onClick:()=>i(e),"aria-label":"Mover",children:a.jsx(Pl,{size:16})})}),a.jsx(oe,{label:"Archivar",withArrow:!0,children:a.jsx(J,{variant:"subtle",color:"red",onClick:()=>o(e),"aria-label":"Archivar",children:a.jsx(mo,{size:16})})})]})]})}),e.children.map(c=>a.jsx(cr,{division:c,depth:n+1,onCreateChild:t,onEdit:s,onMove:i,onArchive:o},c.id))]})}function xp({tenantId:e}){const{data:n,isLoading:t,isError:s}=rr(e),i=bp(e),[o,r]=d.useState({open:!1}),[c,l]=d.useState({open:!1}),[m,u]=d.useState({open:!1});if(t)return a.jsxs(C,{gap:"xs",children:[a.jsx(me,{size:"sm"}),a.jsx(g,{size:"sm",children:"Cargando divisiones..."})]});if(s||!n)return a.jsx(Ue,{color:"red",title:"Error",children:"No se han podido cargar las divisiones."});const p=n.divisions.length===1&&n.divisions[0].children.length===0,x=h=>{na.openConfirmModal({title:"Archivar división",centered:!0,children:a.jsxs(g,{size:"sm",children:["¿Seguro que quieres archivar la división ",a.jsx("strong",{children:h.name}),"? Solo puedes archivar divisiones sin secciones ni subdivisiones activas."]}),labels:{confirm:"Archivar",cancel:"Cancelar"},confirmProps:{color:"red"},onConfirm:()=>i.mutate({id:h.id})})};return a.jsxs(N,{gap:"md",children:[a.jsx(C,{justify:"flex-end",children:a.jsx(O,{leftSection:a.jsx(Ne,{size:16}),onClick:()=>r({open:!0,parentId:null}),children:"Crear raÃz"})}),p&&a.jsx(Ue,{color:"blue",title:"Empieza a organizar tu autoescuela",children:"Aún no has organizado tu árbol. Crea divisiones hijas para empezar."}),a.jsx(N,{gap:"xs",children:n.divisions.map(h=>a.jsx(cr,{division:h,depth:0,onCreateChild:E=>r({open:!0,parentId:E}),onEdit:E=>l({open:!0,division:{id:E.id,name:E.name,containsStudents:E.containsStudents}}),onMove:E=>u({open:!0,division:E}),onArchive:x},h.id))}),o.open&&a.jsx(pi,{mode:"create",tenantId:e,parentId:o.parentId,opened:o.open,onClose:()=>r({open:!1})}),c.open&&a.jsx(pi,{mode:"edit",tenantId:e,division:c.division,opened:c.open,onClose:()=>l({open:!1})}),m.open&&a.jsx(vp,{tenantId:e,division:m.division,opened:m.open,onClose:()=>u({open:!1})})]})}function dr(e,n){n?e.invalidateQueries({queryKey:["platform-tenant-documents",n]}):e.invalidateQueries({queryKey:["platform-documents"]})}const Sp=()=>w({queryKey:["platform-documents"],queryFn:()=>A("/platform-admin/documents")}),_p=e=>w({queryKey:["platform-tenant-documents",e],queryFn:()=>A(`/platform-admin/tenants/${e}/documents`),enabled:!!e}),Cp=e=>{const n=H(),{showSuccessToast:t}=F(),{handleError:s}=Q(),i=e?`/platform-admin/tenants/${e}/documents`:"/platform-admin/documents";return U({mutationFn:o=>A(i,{method:"POST",body:o}),onSuccess:()=>{dr(n,e),t({title:"Hecho",description:"Documento creado"})},onError:o=>s(o)})},ur=e=>{const n=H(),{showSuccessToast:t}=F(),{handleError:s}=Q();return U({mutationFn:i=>{const o=e?`/platform-admin/tenants/${e}/documents/${i}`:`/platform-admin/documents/${i}`;return A(o,{method:"DELETE"})},onSuccess:()=>{dr(n,e),t({title:"Hecho",description:"Documento eliminado"})},onError:i=>s(i)})},mr=e=>async n=>{const t=e?`/platform-admin/tenants/${e}/documents/${n}/download`:`/platform-admin/documents/${n}/download`;return(await A(t)).url},Np=[{value:"contract",label:"Contrato"},{value:"responsible-declaration",label:"Declaración responsable"},{value:"invoice",label:"Factura"}];function pr({opened:e,onClose:n,tenantId:t}){const s=Cp(t??void 0),i=$e({initialValues:{file:null,title:"",type:null,requiresAcceptance:!1,effectiveDate:null},validate:{file:c=>
2c?null:"El archivo es obligatorio",title:c=>c.trim()?null:"El tÃtulo es obligatorio",type:c=>c?null:"El tipo es obligatorio"}}),o=c=>{const l=new FormData;l.append("file",c.file),l.append("title",c.title),l.append("type",c.type),l.append("requiresAcceptance",c.requiresAcceptance?"1":"0"),c.effectiveDate&&l.append("effectiveDate",c.effectiveDate),s.mutate(l,{onSuccess:()=>{i.reset(),n()}})},r=()=>{i.reset(),n()};return a.jsx(se,{opened:e,onClose:r,title:"Nuevo documento",centered:!0,radius:"xl",children:a.jsx("form",{onSubmit:i.onSubmit(o),children:a.jsxs(N,{gap:"md",children:[a.jsx(is,{label:"Archivo PDF",placeholder:"Selecciona un archivo",accept:"application/pdf",required:!0,...i.getInputProps("file")}),a.jsx(W,{label:"TÃtulo",placeholder:"Nombre del documento",required:!0,...i.getInputProps("title")}),a.jsx(ee,{label:"Tipo",placeholder:"Selecciona un tipo",data:Np,required:!0,...i.getInputProps("type")}),a.jsx(os,{label:"Fecha de vigencia",placeholder:"Selecciona una fecha",clearable:!0,valueFormat:"DD/MM/YYYY",locale:"es",dateParser:us,...i.getInputProps("effectiveDate")}),a.jsx(xn,{label:"Requiere aceptación",...i.getInputProps("requiresAcceptance",{type:"checkbox"})}),a.jsxs(C,{justify:"flex-end",children:[a.jsx(O,{variant:"subtle",onClick:r,children:"Cancelar"}),a.jsx(O,{type:"submit",color:"brand",radius:"xl",loading:s.isPending,children:"Crear"})]})]})})})}function gr({actions:e}){const n=e.filter(t=>!t.hidden);return n.length===0?null:a.jsx(N,{gap:4,align:"left",children:n.map(t=>t.to?a.jsx(ce.Item,{leftSection:t.icon,disabled:t.disabled,color:t.color,component:ne,to:t.to,onClick:s=>s.stopPropagation(),children:t.label},t.id):a.jsx(ce.Item,{leftSection:t.icon,disabled:t.disabled,color:t.color,onClick:s=>{var i;s.stopPropagation(),(i=t.onClick)==null||i.call(t)},children:t.label},t.id))})}const Ap=e=>({id:"view",label:"Ver",icon:a.jsx(vn,{size:16}),...typeof e=="string"?{to:e}:{onClick:e}}),Jx=e=>({id:"edit",label:"Editar",icon:a.jsx(lt,{size:16}),onClick:e}),yp=e=>({id:"delete",label:"Eliminar",icon:a.jsx(ze,{size:16}),color:"red",onClick:e}),Zx=e=>({id:"duplicate",label:"Duplicar",icon:a.jsx(po,{size:16}),onClick:e}),Ip=(e,n,t,s)=>({id:e,label:n,onClick:t,...s}),jp=d.lazy(()=>mt(()=>import("./PDFViewer-DOH1dV1t.js"),__vite__mapDeps([0,1,2,3,4,5,6])).then(e=>({default:e.PDFViewer}))),Rp={contract:"Contrato","responsible-declaration":"Declaración responsable",invoice:"Factura"},Op={contract:"info","responsible-declaration":"alert",invoice:"good"};function hr({documents:e,isLoading:n,showSignatureStatus:t,onDownload:s,onDelete:i,isDeleting:o}){const[r,c]=d.useState(null),[l,m]=d.useState(null),[u,p]=d.useState(null),x=async b=>{m(b);const v=await s(b);c(v),m(null)},h=()=>{u&&(i(u),p(null))},E=d.useMemo(()=>{const b=[z({accessorKey:"title",header:"TÃtulo",value:v=>v.title,min:220}),De({accessorKey:"type",header:"Tipo",min:160,tone:v=>Op[v.type]??"neutral",label:v=>Rp[v.type]??v.type}),{...Ze({accessorKey:"version",header:"Versión",value:v=>String(v.version),min:90,align:"center"})},{...z({accessorKey:"effectiveDate",header:"Fecha vigencia",value:v=>v.effectiveDate?new Date(v.effectiveDate).toLocaleDateString("es-ES"):null,min:130,grow:!1})},De({accessorKey:"requiresAcceptance",header:"Requiere firma",min:140,tone:v=>v.requiresAcceptance?"brand":"neutral",label:v=>v.requiresAcceptance?"SÃ":"No"})];return t&&b.push({...De({accessorKey:"isSigned",header:"Firma",min:120,cell:v=>{const S=v;return S.requiresAcceptance?a.jsx(Se,{tone:S.isSigned?"good":"poor",children:S.isSigned?"Firmado":"Pendiente"}):a.jsx(g,{size:"sm",c:"dimmed",children:"â"})}})}),b},[t]),f=_e({columns:E,data:e,onRowClick:b=>x(b.id),enableRowActions:!0,renderRowActionMenuItems:({row:b})=>a.jsx(gr,{actions:[{id:"view",label:l===b.original.id?"Cargando...":"Ver",icon:l===b.original.id?a.jsx(me,{size:14}):a.jsx(vn,{size:16}),onClick:()=>x(b.original.id),color:"blue"},{id:"delete",label:"Eliminar",icon:a.jsx(ze,{size:16}),onClick:()=>p(b.original.id),color:"red"}]}),rowCount:e.length,state:{isLoading:n,showLoadingOverlay:o}});return a.jsxs(a.Fragment,{children:[a.jsx(X,{children:a.jsx(xe,{table:f})}),a.jsx(se,{opened:!!r,onClose:()=>c(null),title:"Vista del documento",size:"xl",centered:!0,radius:"xl",styles:{body:{height:600,display:"flex",flexDirection:"column"}},children:r&&a.jsx(d.Suspense,{fallback:null,children:a.jsx(jp,{url:r})})}),a.jsx(se,{opened:!!u,onClose:()=>p(null),title:"Eliminar documento",centered:!0,radius:"xl",children:a.jsxs(N,{gap:"md",children:[a.jsx(g,{children:"¿Estás seguro de que quieres eliminar este documento? Esta acción no se puede deshacer."}),a.jsxs(C,{justify:"flex-end",children:[a.jsx(O,{variant:"subtle",onClick:()=>p(null),children:"Cancelar"}),a.jsx(O,{color:"red",radius:"xl",loading:o,onClick:h,children:"Eliminar"})]})]})})]})}function Lp({tenantId:e}){const[n,t]=d.useState(!1),{data:s=[],isLoading:i}=_p(e),o=ur(e),r=mr(e);return a.jsxs(a.Fragment,{children:[a.jsx(C,{justify:"flex-end",mb:"md",children:a.jsx(O,{color:"brand",radius:"xl",leftSection:a.jsx(Ne,{size:16}),onClick:()=>t(!0),children:"Nuevo documento"})}),a.jsx(hr,{documents:s,isLoading:i,showSignatureStatus:!0,onDownload:r,onDelete:c=>o.mutate(c),isDeleting:o.isPending}),a.jsx(pr,{opened:n,onClose:()=>t(!1),tenantId:e})]})}function Dp(e){return w({queryKey:["platform-admin","verifacti",e],queryFn:()=>A(`/platform-admin/tenants/${e}/verifacti`)})}function Mp(e){return w({queryKey:["platform-admin","legal-entities",e],queryFn:()=>A(`/platform-admin/tenants/${e}/legal-entities`)})}function Pp(e){const n=H(),{showSuccessToast:t,showToast:s}=F();return U({mutationFn:i=>A(`/platform-admin/tenants/${e}/verifacti`,{method:"PUT",body:JSON.stringify(i)}),onSuccess:()=>{n.invalidateQueries({queryKey:["platform-admin","verifacti",e]}),n.invalidateQueries({queryKey:["platform-admin","legal-entities",e]}),t({description:"Configuración de Verifacti actualizada"})},onError:i=>{s({title:"Error",description:i.message||"Error al configurar Verifacti",variant:"destructive"})}})}function wp({isOpen:e,onClose:n,onSave:t,legalEntityName:s,existingSystem:i,isNewEntry:o}
2){const[r,c]=d.useState(i||""),[l,m]=d.useState(""),u=()=>{t(l||null,r),m(""),n()},p=r&&(o?l.length>0:!0);return a.jsx(se,{opened:e,onClose:n,title:`Configurar Verifacti â ${s}`,centered:!0,children:a.jsxs(N,{gap:"md",children:[a.jsx(ee,{label:"Sistema fiscal",placeholder:"Selecciona un sistema",value:r,onChange:x=>c(x||""),data:[{value:"verifactu",label:"Verifactu"},{value:"ticketbai",label:"TicketBAI"}],required:!0}),a.jsx(W,{label:"API Key",placeholder:o?"Introduce la API key":"Dejar vacÃo para mantener la clave actual",value:l,onChange:x=>m(x.target.value),required:o}),a.jsxs(C,{justify:"flex-end",children:[a.jsx(O,{variant:"subtle",onClick:n,children:"Cancelar"}),a.jsx(O,{onClick:u,disabled:!p,children:"Guardar"})]})]})})}const Fp={fontSize:10,fontWeight:600,letterSpacing:"0.03em"};function tn({children:e,...n}){const t=yo("neutral",!0);return a.jsx(Ca,{variant:"light",styles:{...t,root:{...t.root,...Fp}},...n,children:e})}function Up({tenantId:e}){const{data:n,isLoading:t}=Mp(e),{data:s,isLoading:i}=Dp(e),o=Pp(e),[r,c]=d.useState(!1),[l,m]=d.useState(null);if(t||i)return a.jsx(ve,{py:"xl",children:a.jsx(me,{size:"sm"})});const u=(n==null?void 0:n.legalEntities)??[],p=(s==null?void 0:s.legalEntities)??{},x=u.find(v=>v.id===l),h=l?p[l]:void 0,E=v=>{m(v),c(!0)},f=(v,S)=>{const y={};Object.entries(p).forEach(([_,T])=>{y[_]={apiKey:null,system:T.system}}),y[l]={apiKey:v,system:S},o.mutate({legalEntities:y})},b=(v,S)=>{na.openConfirmModal({title:"Eliminar configuración fiscal",children:a.jsxs(g,{size:"sm",children:["Se eliminará la configuración de ",S,". Las facturas ya enviadas no se ven afectadas."]}),labels:{confirm:"Eliminar",cancel:"Cancelar"},confirmProps:{color:"red"},onConfirm:()=>{const y={};Object.entries(p).forEach(([_,T])=>{_!==v&&(y[_]={apiKey:null,system:T.system})}),o.mutate({legalEntities:y})}})};return a.jsxs(a.Fragment,{children:[a.jsx(N,{gap:"md",children:u.length===0?a.jsx(ve,{py:"xl",children:a.jsx(g,{c:"dimmed",children:"Este tenant no tiene sociedades configuradas"})}):u.map(v=>{const S=p[v.id],y=!!S;return a.jsx(fa,{p:"md",radius:"md",withBorder:!0,children:a.jsxs(C,{justify:"space-between",align:"center",children:[a.jsxs("div",{children:[a.jsxs(C,{gap:"xs",children:[a.jsx(g,{fw:600,children:v.companyName}),y&&a.jsx(tn,{children:S.system==="verifactu"?"Verifactu":"TicketBAI"})]}),a.jsxs(g,{size:"sm",c:"dimmed",children:[v.nif,y&&` · ${S.apiKeyHint}`]})]}),y?a.jsxs(ce,{position:"bottom-end",withinPortal:!0,children:[a.jsx(ce.Target,{children:a.jsx(J,{variant:"subtle",color:"gray",children:a.jsx(qt,{size:18})})}),a.jsxs(ce.Dropdown,{children:[a.jsx(ce.Item,{leftSection:a.jsx(lt,{size:16}),onClick:()=>E(v.id),children:"Editar"}),a.jsx(ce.Item,{leftSection:a.jsx(ze,{size:16}),color:"red",onClick:()=>b(v.id,v.companyName),children:"Eliminar configuración"})]})]}):a.jsx(O,{size:"xs",variant:"light",onClick:()=>E(v.id),children:"Configurar"})]})},v.id)})}),x&&a.jsx(wp,{isOpen:r,onClose:()=>c(!1),onSave:f,legalEntityName:x.companyName,existingSystem:h==null?void 0:h.system,isNewEntry:!h},l)]})}function kp(e){const t=d.Children.toArray(e).find(o=>d.isValidElement(o)&&o.type===Ce.List);if(!t||!d.isValidElement(t))return[];const s=d.Children.toArray(t.props.children),i=[];for(const o of s)if(d.isValidElement(o)){const r=o.props;r.value&&i.push({value:r.value,color:r.color})}return i}function zp({children:e,noPanelPadding:n,panelPadding:t,accentColor:s,style:i,onChange:o,...r}){var S;const c=kp(e),[l,m]=d.useState(r.value??r.defaultValue),u=r.value??l,p=u===((S=c[0])==null?void 0:S.value),x=c.find(y=>y.value===u),h=x==null?void 0:x.color,E=h?`var(--mantine-color-${h}-filled)`:s??"var(--app-color-link)",f=["matdash-tabs",p?"matdash-tabs--first-active":"",n?"matdash-tabs--no-panel-padding":""].filter(Boolean).join(" "),b={...i,"--matdash-tab-accent":E,"--matdash-tab-text":h?`color-mix(in srgb, var(--mantine-color-${h}-filled) 60%, black)`:void 0,"--matdash-panel-accent":E,"--matdash-tab-panel-padding":t},v=y=>{m(y??void 0),o==null||o(y)};return a.jsx(Ce,{className:f,style:b,onChange:v,...r,children:a.jsx(Ja,{surface:"paper",children:e})})}function $p(e){return w({queryKey:["tenant-staff-members",e],queryFn:()=>A(`/platform-admin/tenants/${e}/administrators`)})}function Hp({tenantId:e}){const{data:n,isLoading:t}=$p(e),s=Nn(),i=d.useMemo(()=>[z({accessorKey:"fullName",header:"Nombre",value:r=>r.fullName,min:220}),z({accessorKey:"email",header:"Email",value:r=>r.email,min:260}),De({accessorKey:"roleName",header:"Rol",min:160,cell:r=>r.roleName?a.jsx(Se,{tone:"brand",children:r.roleName}):a.jsx(g,{size:"sm",c:"dimmed",children:"Sin rol"})})],[]),o=_e({columns:i,data:n??[],enableRowActions:!0,enableTopToolbar:!1,enablePagination:!1,enableBottomToolbar:!1,displayColumnDefOptions:{"mrt-row-actions":{size:130}},state:{isLoading:t},renderRowActions:({row:r})=>a.jsx(O,{size:"xs",variant:"light",color:"brand",radius:"xl",loading:s.isPending,onClick:()=>s.mutate({tenantId:e,userId:r.original.userId}),children:"Suplantar"}),localization:{noRecordsToDisplay:"No hay administradores"}});return a.jsx(xe,{table:o})}function qp(){return w({queryKey:["platform-admin","module-catalog"],queryFn:()=>A("/platform-admin/modules"),staleTime:1e3*60*60})}function Bp(e){const n=H(),{showSuccessToast:t,showErrorToast:s}=F();return U({mutationFn:i=>A(`/platform-admin/tenants/${e}/modules`,{method:"PUT",body:JSON.stringify({modules:i})}),onSuccess:()=>{n.invalidateQueries({queryKey:["platform-admin","tenants",e]}),t({description:"Módulos actualizados correctamente"})},onError:()=>{s("MODULES_UPDATE_FAILED")}})}function Es(e){return w({queryKey:["platform-admin","tenants",e],queryFn:()=>A(`/platform-admin/tenants/${e}`)})}function Kp({tenantId:e,enabledModules:n}){const{data:t,isLoading:s}=qp(),{data:i}=Es(e),o=Bp(e);if(s||!t)return a.jsxs(N,{gap:"xs",children:[a.jsx(ke,{height:14,radius:"sm"}),a.jsx(ke,{height:14,radius:"sm"}),a.jsx(ke,{height:14,radius:"sm",width:"60%"})]});const r=new Set(n),c=(m,u)=>{const p=u?[...n,m]:n.filter(x=>x!==m);o.mutate(p)},l=(m,u)=>{const p=!u;na.openConfirmModal({title:`${p?"Activar":"Desactivar"} «${m.label}»`,children:a.jsxs(N,{gap:"sm",children:[a.jsx(g,{size:"sm",children:m.description}),a.jsxs(g,{size:"sm",fw:500,children:["¿Confirmas que quieres ",p?"activar":"desactivar"," este módulo para"," ",a.jsx("strong",{children:i==null?void 0:i.name}),"?"]})]}),labels:{confirm:p?"Activar":"Desactivar",cancel:"Cancelar"},confirmProps:{color:p?"brand":"red"},onConfirm:()=>c(m.value,p)})};return a.jsx(N,{gap:"sm",children:t.map((m,u)=>a.jsxs("div",{children:[u>0&&a.jsx(tt,{mb:"sm"}),a.jsx(g,{size:"xs",fw:600,c:"gray.5",mb:8,children:m.categoryLabel.toUpperCase()}),a.jsx(N,{gap:"xs",children:m.modules.map(p=>{const x=r.has(p.value);return a.jsxs(C,{justify:"space-between",wrap:"nowrap",children:[a.jsxs("div",{children:[a.jsx(g,{size:"sm",fw:500,children:p.label}),a.jsx(g,{size:"xs",c:"dimmed",children:p.description})]}),a.jsx(xn,{checked:x,disabled:o.isPending,onChange:()=>l(p,x)})]},p.value)})})]},m.category))})}const Fn={all:["tenant-dump"],list:e=>[...Fn.all,"list",e]},Yp={classify:"Clasificando tablas...",manifest:"Generando manifiesto...",schema:"Volcando esquema...",base_data:"Volcando datos base...",tenant_data:"Volcando datos del tenant...",uploading:"Subiendo a S3..."},Vp=["pending","processing"],Gp="TENANT_DUMP_EXPIRED",Wp=1e3,Xp=2*36e5;function gi(e){return Vp.includes(e.status)&&Date.now()-new Date(e.createdAt).getTime()<Xp}function Qp(e){var m;const n=H(),{showToast:t}=F(),i=((m=w({queryKey:Fn.list(e),queryFn:()=>A(`/platform-admin/tenants/${e}/dumps`),refetchInterval:u=>{var x;return(((x=u.state.data)==null?void 0:x.jobs)??[]).some(gi)?Wp:!1}}).data)==null?void 0:m.jobs)??[],o=u=>i.find(p=>p.profile===u&&gi(p))??null,r=U({mutationFn:u=>A(`/platform-admin/tenants/${e}/dumps`,{method:"POST",body:JSON.stringify({profile:u})}),onSuccess:()=>{n.invalidateQueries({queryKey:Fn.list(e)})},onError:()=>{t({title:"Error",description:"No se pudo iniciar el dump",variant:"destructive"})}}),c=U({mutationFn:async u=>{const p=await A(`/platform-admin/tenant-dump-jobs/${u}/download`);window.location.assign(p.url)},onError:u=>{const p=gt(u);t({title:p.title??"Error",description:p.message,variant:p.variant??"destructive"}),p.code===Gp&&n.invalidateQueries({queryKey:Fn.list(e)})}});return{jobs:i,activeJobByProfile:o,stepLabelFor:u=>u!=null&&u.currentStep?Yp[u.currentStep]??u.currentStep:null,start:u=>r.mutate(u),download:u=>c.mutate(u),isStarting:r.isPending,startingProfile:r.variables??null}}const Jp=1024*1024,Zp=36e5,eg={full:"Completo",portable:"Portátil"};function ag(e){return`${(e/Jp).toFixed(1)} MB`}function ng(e){const n=Math.floor((new Date(e).getTime()-Date.now())/Zp);return n<0?"Caducado":n>=1?`Caduca en ${n}h`:"Caduca en menos de 1h"}function tg({profile:e}){return a.jsx(tn,{children:eg[e]})}function sg({tenantId:e}){const n=Qp(e),t=n.jobs.filter(o=>o.status==="completed"||o.status==="failed"),s=n.activeJobByProfile("full"),i=n.activeJobByProfile("portable");return a.jsxs(N,{gap:"sm",children:[a.jsxs(C,{gap:"sm",children:[a.jsx(O,{variant:"default",onClick:()=>n.start("full"),loading:n.isStarting&&n.startingProfile==="full",disabled:s!==null,children:"Generar dump SQL"}),s&&a.jsxs(C,{gap:"sm",children:[a.jsx(me,{size:"sm"}),a.jsx(g,{size:"sm",fw:500,children:n.stepLabelFor(s)??"Preparando..."})]})]}),a.jsxs(C,{gap:"sm",children:[a.jsx(O,{variant:"default",onClick:()=>n.start("portable"),loading:n.isStarting&&n.startingProfile==="portable",disabled:i!==null,children:"Generar dump portátil"}),i&&a.jsxs(C,{gap:"sm",children:[a.jsx(me,{size:"sm"}),a.jsx(g,{size:"sm",fw:500,children:n.stepLabelFor(i)??"Preparando..."})]})]}),t.length>0&&a.jsx(N,{gap:"xs",children:t.map(o=>a.jsxs(C,{gap:"sm",wrap:"nowrap",children:[a.jsx(g,{size:"sm",children:Te(o.createdAt,"dd/MM/yyyy HH:mm")}
2),a.jsx(tg,{profile:o.profile}),o.status==="completed"?a.jsxs(a.Fragment,{children:[o.fileSize!==null&&a.jsx(g,{size:"xs",c:"dimmed",children:ag(o.fileSize)}),o.expiresAt!==null&&a.jsx(g,{size:"xs",c:"dimmed",children:ng(o.expiresAt)}),a.jsx(O,{size:"compact-sm",variant:"default",onClick:()=>n.download(o.id),children:"Descargar"})]}):a.jsxs(a.Fragment,{children:[a.jsx(Se,{tone:"poor",children:"Fallido"}),a.jsx(g,{size:"xs",c:"red",children:o.errorMessage??"El dump ha fallado"})]})]},o.id))})]})}function ig(e){const{showSuccessToast:n}=F(),{handleError:t}=Q();return U({mutationFn:({dryRun:s})=>A(`/platform-admin/tenants/${e}/divisions/rebuild-closure`,{method:"POST",body:JSON.stringify({dryRun:s})}),onSuccess:s=>{n({description:`Closure reconstruido. ${s.divisionsScanned} divisiones escaneadas.`})},onError:s=>t(s)})}function og({tenantId:e}){const n=ig(e),t=()=>{na.openConfirmModal({title:"Reconstruir jerarquÃa de divisiones",children:a.jsx(N,{gap:"xs",children:a.jsx(g,{size:"sm",children:"Recalcula la tabla de cierre de divisiones si el árbol quedó inconsistente. No borra datos."})}),labels:{confirm:"Reconstruir",cancel:"Cancelar"},confirmProps:{color:"orange"},onConfirm:()=>n.mutate({dryRun:!1})})};return a.jsx(O,{variant:"default",color:"orange",loading:n.isPending,onClick:t,children:"Reconstruir"})}function wt({title:e,description:n,children:t}){return a.jsx(fa,{withBorder:!0,radius:"md",p:"md",children:a.jsxs(C,{justify:"space-between",wrap:"nowrap",align:"center",children:[a.jsxs("div",{children:[a.jsx(g,{fw:600,size:"sm",children:e}),a.jsx(g,{size:"xs",c:"dimmed",children:n})]}),t]})})}function rg({tenantId:e}){return a.jsxs(N,{gap:"md",children:[a.jsx(wt,{title:"Dump SQL",description:"Genera un .sql.gz con los datos de este tenant más las tablas base. Caduca a las 48 horas.",children:a.jsx(sg,{tenantId:e})}),a.jsx(wt,{title:"Copiar datos desde otro tenant",description:"Clona configuración y catálogos con mapeo entidad a entidad. Se abre en su propia página.",children:a.jsx(O,{component:ne,to:$.tenantCopyData(e),variant:"default",children:"Abrir"})}),a.jsx(wt,{title:"Reconstruir jerarquÃa de divisiones",description:"Recalcula la tabla de cierre de divisiones si el árbol quedó inconsistente. No borra datos.",children:a.jsx(og,{tenantId:e})})]})}function lg(e){return w({queryKey:["platform-admin","tenant-quotas",e],queryFn:()=>A(`/platform-admin/tenants/${e}/quotas`),enabled:!!e})}function cg(e){const n=H(),{showSuccessToast:t,showToast:s}=F();return U({mutationFn:i=>A(`/platform-admin/tenants/${e}/quotas`,{method:"PUT",body:JSON.stringify({quotas:i})}),onSuccess:()=>{n.invalidateQueries({queryKey:["platform-admin","tenant-quotas",e]}),t({description:"LÃmites de uso actualizados correctamente"})},onError:i=>{s({title:"Error al actualizar los lÃmites",description:i.message||"No se han podido actualizar los lÃmites de uso",variant:"destructive"})}})}const dg={time_tracking_users:"Empleados con fichaje",active_sections:"Secciones activas",custom_roles:"Roles personalizados"};function ug({tenantId:e}){const{data:n,isLoading:t}=lg(e),s=cg(e),i=$e({initialValues:{limits:{}}}),o=d.useRef(!1);if(d.useEffect(()=>{if(n&&!o.current){const c={};n.forEach(l=>{c[l.resourceType]=l.maxAllowed}),i.setValues({limits:c}),i.resetDirty({limits:c}),o.current=!0}},[n]),t)return a.jsxs(N,{gap:"xs",children:[a.jsx(ke,{height:14,radius:"sm"}),a.jsx(ke,{height:14,radius:"sm"}),a.jsx(ke,{height:14,radius:"sm",width:"60%"})]});const r=i.onSubmit(c=>{const l=Object.entries(c.limits).map(([m,u])=>({resourceType:m,maxAllowed:typeof u=="number"?u:0}));s.mutate(l,{onSuccess:()=>{i.resetDirty(c)}})});return a.jsx("form",{onSubmit:r,children:a.jsxs(N,{gap:"md",children:[n==null?void 0:n.map(c=>a.jsxs(C,{justify:"space-between",align:"center",children:[a.jsxs(N,{gap:2,style:{flex:1},children:[a.jsx(g,{fw:500,size:"sm",children:dg[c.resourceType]??c.resourceType}),a.jsxs(g,{size:"xs",c:"dimmed",children:["Uso actual: ",c.currentUsage]})]}),a.jsx(Le,{min:0,w:100,size:"sm",...i.getInputProps(`limits.${c.resourceType}`)})]},c.resourceType)),a.jsx(C,{justify:"flex-end",children:a.jsx(O,{type:"submit",loading:s.isPending,color:"brand",radius:"xl",children:"Guardar"})})]})})}const ga={all:["referrals"],lists:()=>[...ga.all,"list"],list:e=>[...ga.lists(),e??""],tenants:()=>[...ga.all,"tenant"],tenant:e=>[...ga.tenants(),e]};
2function fs(e,n){e.invalidateQueries({queryKey:ga.lists()}),n!==void 0?e.invalidateQueries({queryKey:ga.tenant(n)}):e.invalidateQueries({queryKey:ga.tenants()})}function mg(e){return w({queryKey:ga.tenant(e),queryFn:()=>A(`/platform-admin/tenants/${e}/referrals`),enabled:!!e})}function pg(e){const n=H(),{showSuccessToast:t}=F(),{handleError:s}=Q();return U({mutationFn:i=>A(`/platform-admin/tenants/${e}/referrals`,{method:"POST",body:JSON.stringify(i)}),onSuccess:()=>{fs(n,e),t({description:"Referido atribuido."})},onError:i=>s(i)})}function gg(e){const n=H(),{showSuccessToast:t}=F(),{handleError:s}=Q();return U({mutationFn:({referralId:i,...o})=>A(`/platform-admin/referrals/${i}/pay`,{method:"POST",body:JSON.stringify(o)}),onSuccess:()=>{fs(n,e),t({description:"Referido marcado como pagado."})},onError:i=>s(i)})}function hg(e){const n=H(),{showSuccessToast:t}=F(),{handleError:s}=Q();return U({mutationFn:i=>A(`/platform-admin/referrals/${i}/cancel`,{method:"POST"}),onSuccess:()=>{fs(n,e),t({description:"Referido cancelado."})},onError:i=>s(i)})}const Er={staff:"Oficina",instructor:"Profesor"},hi={referrerId:null,referredTenantId:null,rewardAmount:"",note:""};function Eg({opened:e,onClose:n,tenantId:t,referrers:s}){const{data:i}=Ta(),o=pg(t),r=$e({initialValues:hi,validate:{referrerId:u=>u?null:"Elige un referidor",referredTenantId:u=>u?null:"Elige la autoescuela referida",rewardAmount:u=>typeof u=="number"&&u>0?null:"El importe debe ser mayor que cero"}});d.useEffect(()=>{e&&r.setValues(hi)},[e]);const c=s.map(u=>({value:u.id,label:`${u.name} (${Er[u.role]}) · ${u.code}`})),l=(i??[]).filter(u=>u.id!==t).map(u=>({value:u.id,label:`${u.name} · ${u.domain}`})),m=u=>{o.mutate({referrerId:u.referrerId,referredTenantId:u.referredTenantId,rewardAmount:u.rewardAmount,note:u.note.trim()||void 0},{onSuccess:()=>n()})};return a.jsx(se,{opened:e,onClose:n,title:"Atribuir referido",centered:!0,radius:"xl",size:"lg",children:a.jsx("form",{onSubmit:r.onSubmit(m),children:a.jsxs(N,{gap:"md",children:[a.jsx(ee,{label:"Referidor",placeholder:"Elige quién recomendó",data:c,searchable:!0,...r.getInputProps("referrerId")}),a.jsx(ee,{label:"Autoescuela referida",placeholder:"Elige el tenant",data:l,searchable:!0,...r.getInputProps("referredTenantId")}),a.jsx(Le,{label:"Importe del bono (â¬)",description:"50 ⬠por sección contratada, máximo 400 â¬",min:0,decimalScale:2,...r.getInputProps("rewardAmount")}),a.jsx(Fa,{label:"Nota",placeholder:"Por ejemplo: 3 secciones",autosize:!0,minRows:2,...r.getInputProps("note")}),a.jsxs(C,{justify:"flex-end",children:[a.jsx(O,{variant:"subtle",onClick:n,children:"Cancelar"}),a.jsx(O,{type:"submit",loading:o.isPending,children:"Atribuir"})]})]})})})}function fg({referral:e,tenantId:n,onClose:t}){const s=gg(n),i=$e({initialValues:{paidAt:Hn(),paymentReference:""},validate:{paidAt:r=>r?null:"La fecha es obligatoria"}});d.useEffect(()=>{e&&i.setValues({paidAt:Hn(),paymentReference:""})},[e]);const o=r=>{!e||!r.paidAt||s.mutate({referralId:e.id,paidAt:r.paidAt,paymentReference:r.paymentReference.trim()||void 0},{onSuccess:()=>t()})};return a.jsx(se,{opened:e!==null,onClose:t,title:"Marcar como pagado",centered:!0,radius:"xl",children:a.jsx("form",{onSubmit:i.onSubmit(o),children:a.jsxs(N,{gap:"md",children:[a.jsxs(g,{size:"sm",children:[e==null?void 0:e.referrerName," · ",e==null?void 0:e.referredTenantName]}),a.jsx(os,{label:"Fecha del pago",valueFormat:"DD/MM/YYYY",locale:"es",dateParser:us,...i.getInputProps("paidAt")}),a.jsx(W,{label:"Referencia de la transferencia",placeholder:"Opcional",...i.getInputProps("paymentReference")}),a.jsxs(C,{justify:"flex-end",children:[a.jsx(O,{variant:"subtle",onClick:t,children:"Cancelar"}),a.jsx(O,{type:"submit",loading:s.isPending,children:"Marcar pagado"})]})]})})})}const wa={PENDING:"pending",PAID:"paid",CANCELLED:"cancelled"},fr={[wa.PENDING]:"Pendiente de pago",[wa.PAID]:"Pagado",[wa.CANCELLED]:"Cancelado"},br={[wa.PENDING]:"fair",[wa.PAID]:"good",[wa.CANCELLED]:"neutral"};function bg({tenantId:e}){const{data:n,isLoading:t}
2=mg(e),s=hg(e),[i,o]=d.useState(!1),[r,c]=d.useState(null),[l,m]=d.useState(null),u=d.useMemo(()=>[z({accessorKey:"name",header:"Referidor",value:E=>E.name,min:180}),z({accessorKey:"role",header:"Rol",value:E=>Er[E.role],min:100,max:120}),Ze({accessorKey:"code",header:"Código",value:E=>E.code,min:100}),z({id:"payout",header:"Datos de cobro",value:E=>E.hasPayoutDetails?`${E.payoutHolderName} · ${E.payoutIban}`:"Sin datos",min:220}),Ea({accessorKey:"joinedAt",header:"Alta",value:E=>E.joinedAt,kind:"datetime",min:120,max:150})],[]),p=d.useMemo(()=>[z({accessorKey:"referredTenantName",header:"Autoescuela referida",value:E=>E.referredTenantName,min:200}),z({accessorKey:"referrerName",header:"Referidor",value:E=>E.referrerName,min:160,max:220}),tr({accessorKey:"rewardAmount",header:"Importe",value:E=>$n.fromString(E.rewardAmount,2),min:110,max:140}),De({accessorKey:"status",header:"Estado",min:150,max:170,tone:E=>br[E.status],label:E=>fr[E.status]}),Ea({accessorKey:"attributedAt",header:"Atribuido",value:E=>E.attributedAt,kind:"datetime",min:120,max:150}),Ea({accessorKey:"paidAt",header:"Pagado el",value:E=>E.paidAt,min:120,max:150}),z({accessorKey:"paymentReference",header:"Referencia",value:E=>E.paymentReference,min:120,max:180}),z({accessorKey:"note",header:"Nota",value:E=>E.note,min:160})],[]),x=_e({columns:u,data:(n==null?void 0:n.referrers)??[],enableTopToolbar:!1,enableColumnFilters:!1,enablePagination:!1,state:{isLoading:t},renderEmptyRowsFallback:()=>a.jsx(g,{c:"dimmed",ta:"center",py:"lg",children:"Nadie de esta autoescuela se ha unido al programa"})}),h=_e({columns:p,data:(n==null?void 0:n.referrals)??[],enableTopToolbar:!1,enableColumnFilters:!1,enablePagination:!1,enableRowActions:!0,displayColumnDefOptions:{"mrt-row-actions":{size:190}},renderRowActions:({row:E})=>E.original.status===wa.PENDING?a.jsxs(C,{gap:"xs",wrap:"nowrap",children:[a.jsx(O,{size:"xs",variant:"subtle",onClick:()=>c(E.original),children:"Marcar pagado"}),a.jsx(O,{size:"xs",variant:"subtle",color:"red",onClick:()=>m(E.original),children:"Cancelar"})]}
2):null,state:{isLoading:t},renderEmptyRowsFallback:()=>a.jsx(g,{c:"dimmed",ta:"center",py:"lg",children:"Sin referidos atribuidos"})});return a.jsxs(N,{gap:"xl",children:[a.jsxs(N,{gap:"sm",children:[a.jsx(Pe,{order:5,children:"Referidores"}),a.jsx(xe,{table:x})]}),a.jsxs(N,{gap:"sm",children:[a.jsxs(C,{justify:"space-between",children:[a.jsx(Pe,{order:5,children:"Referidos"}),a.jsx(O,{leftSection:a.jsx(Ne,{size:16}),onClick:()=>o(!0),disabled:!n||n.referrers.length===0,children:"Atribuir referido"})]}),a.jsx(xe,{table:h})]}),a.jsx(Eg,{opened:i,onClose:()=>o(!1),tenantId:e,referrers:(n==null?void 0:n.referrers)??[]}),a.jsx(fg,{referral:r,tenantId:e,onClose:()=>c(null)}),a.jsx(se,{opened:l!==null,onClose:()=>m(null),title:"Cancelar referido",centered:!0,radius:"xl",children:a.jsxs(N,{gap:"md",children:[a.jsxs(g,{size:"sm",children:["Se cancela la recomendación de ",a.jsx(g,{span:!0,fw:500,children:l==null?void 0:l.referredTenantName})," hecha por ",a.jsx(g,{span:!0,fw:500,children:l==null?void 0:l.referrerName}),". No se pagará. Si fue un error, podrás volver a atribuirla más adelante."]}),a.jsxs(C,{justify:"flex-end",children:[a.jsx(O,{variant:"subtle",onClick:()=>m(null),children:"Volver"}),a.jsx(O,{color:"red",loading:s.isPending,onClick:()=>l&&s.mutate(l.id,{onSuccess:()=>m(null)}),children:"Cancelar referido"})]})]})})]})}function Tg(e){return w({queryKey:["platform-admin","subscription-terms",e],queryFn:()=>A(`/platform-admin/tenants/${e}/subscription-terms`),enabled:!!e})}function vg(e){const n=H(),{showSuccessToast:t}=F(),{handleError:s}=Q();return U({mutationFn:i=>A(`/platform-admin/tenants/${e}/subscription-terms`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:i})}),onSuccess:()=>{n.invalidateQueries({queryKey:["platform-admin","subscription-terms",e]}),t({title:"Guardado",description:"Detalles de la suscripción actualizados"})},onError:i=>s(i)})}const xg=d.lazy(()=>mt(()=>import("./HugeRTEditor-CDWUYL7I.js"),__vite__mapDeps([7,1,2,8,9,10])).then(e=>({default:e.HugeRTEditor})));function Sg({tenantId:e}){const{data:n,isLoading:t}=Tg(e),s=vg(e),[i,o]=d.useState("");return d.useEffect(()=>{o((n==null?void 0:n.content)??"")},[n==null?void 0:n.content]),t?a.jsx(ve,{h:200,children:a.jsx(me,{size:"sm"})}):a.jsxs(N,{gap:"md",children:[a.jsx(d.Suspense,{fallback:a.jsx(ve,{h:300,children:a.jsx(me,{size:"sm"})}),children:a.jsx(xg,{value:i,onChange:o,placeholder:"Escribe lo que este tenant tiene contratado, precios, condiciones..."})}),a.jsx(C,{justify:"flex-end",children:a.jsx(ge,{variant:"primary",loading:s.isPending,onClick:()=>s.mutate(i),children:"Guardar"})})]})}const _g=e=>w({queryKey:["platform-admin","tenant-subscription-info",e],queryFn:async()=>await A(`/platform-admin/tenants/${e}/subscription-info`)});function Cg({tenantId:e}){const{data:n,isLoading:t}=_g(e);if(t)return a.jsxs(N,{gap:"xs",children:[a.jsx(ke,{height:14,radius:"sm"}),a.jsx(ke,{height:14,radius:"sm"}),a.jsx(ke,{height:14,radius:"sm",width:"60%"})]});const s=n&&n.id?[{label:"Nombre de la empresa",value:n.companyName},{label:"NIF/CIF",value:n.taxId},{label:"IBAN",value:n.iban},{label:"Email de facturación",value:n.billingEmail},{label:"Dirección",value:n.billingStreet},{label:"CP + Ciudad",value:n.billingPostalCode&&n.billingCity?`${n.billingPostalCode} ${n.billingCity}`:n.billingPostalCode||n.billingCity},{label:"PaÃs",value:n.billingCountry},{label:"Persona de contacto",value:n.billingContactName},{label:"Teléfono",value:n.contactPhoneNumber}]:[];return a.jsxs(N,{gap:"xl",children:[s.length>0?a.jsx("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",columnGap:40},children:s.map(i=>a.jsxs(C,{justify:"space-between",py:"xs",style:{borderBottom:"1px solid var(--mantine-color-gray-2)"},children:[a.jsx(g,{c:"dimmed",size:"sm",children:i.label}),a.jsx(g,{fw:500,children:i.value||"â"})]},i.label))}):a.jsx(ve,{py:"xl",children:a.jsx(g,{c:"dimmed",children:"Sin datos de facturación"})}),a.jsxs(fa,{bg:"gray.0",p:"md",radius:"md",children:[a.jsx(g,{size:"xs",fw:600,c:"dimmed",mb:"xs",children:"CONDICIONES CONTRATADAS"}),a.jsx(Sg,{tenantId:e})]})]})}const Ng=["usuarios","modulos","suscripcion","limites","verifacti","documentos","referidos","herramientas"],Ei={general:"usuarios",users:"usuarios",modules:"modulos",subscription:"suscripcion",quotas:"limites",fiscal:"verifacti",documents:"documentos",configuration:"herramientas","sql-dump":"herramientas","copy-data":"herramientas"};function Ag(e){return e&&Ng.includes(e)?e:e&&e in Ei?Ei[e]:"usuarios"}function yg(){const{tenantId:e}=ja(),[n,t]=go(),s=Ag(n.get("tab")),{data:i,isLoading:o}=Es(e),r=Nn(),c=l=>{l&&t(m=>{const u=new URLSearchParams(m);return u.set("tab",l),u})};return!i&&o?a.jsx(de,{backButton:{label:"Volver",to:"/",icon:a.jsx(hn,{size:16})},children:a.jsxs(N,{gap:2,children:[a.jsx(ke,{height:28,width:280}),a.jsx(ke,{height:16,width:180,mt:8})]})}):i?a.jsxs(de,{title:i.name,backButton:{label:"Volver",to:"/",icon:a.jsx(hn,{size:16})},actionButton:{label:"Suplantar",icon:a.jsx(ut,{size:16}),loading:r.isPending,onClick:()=>r.mutate(e)},children:[a.jsx(g,{c:"dimmed",mb:"lg",children:i.domain}),a.jsxs(zp,{value:s,onChange:c,children:[a.jsxs(Ce.List,{children:[a.jsx(Ce.Tab,{value:"usuarios",children:"Usuarios"}),a.jsx(Ce.Tab,{value:"modulos",children:"Módulos"}),a.jsx(Ce.Tab,{value:"suscripcion",children:"Suscripción"}),a.jsx(Ce.Tab,{value:"limites",children:"LÃmites de uso"}),a.jsx(Ce.Tab,{value:"verifacti",children:"Verifacti"}),a.jsx(Ce.Tab,{value:"documentos",children:"Documentos"}),a.jsx(Ce.Tab,{value:"referidos",children:"Referidos"}),a.jsx(Ce.Tab,{value:"herramientas",children:"Herramientas"})]}),a.jsx(Ce.Panel,{value:"usuarios",children:a.jsx(Hp,{tenantId:e})}),a.jsx(Ce.Panel,{value:"modulos",children:a.jsx(Kp,{tenantId:e,enabledModules:i.enabledModules??[]})}),a.jsx(Ce.Panel,{value:"suscripcion",children:a.jsx(Cg,{tenantId:e})}),a.jsx(Ce.Panel,{value:"limites",children:a.jsx(ug,{tenantId:e})}),a.jsx(Ce.Panel,{value:"verifacti",children:a.jsx(Up,{tenantId:e})}),a.jsx(Ce.Panel,{value:"documentos",children:a.jsx(Lp,{tenantId:e})}),a.jsx(Ce.Panel,{value:"referidos",children:a.jsx(bg,{tenantId:e})}),a.jsx(Ce.Panel,{value:"herramientas",keepMounted:!1,children:a.jsxs(N,{gap:"xl",children:[a.jsxs("section",{children:[a.jsx(Pe,{order:4,mb:4,children:"Divisiones"}),a.jsx(g,{size:"sm",c:"dimmed",mb:"sm",children:"Organiza tu autoescuela en divisiones y subdivisiones para agrupar secciones."}),a.jsx(xp,{tenantId:e})]}),a.jsxs("section",{children:[a.jsx(Pe,{order:4,mb:"sm",children:"Herramientas de plataforma"}),a.jsx(rg,{tenantId:e})]})]})})]})]}):null}function Ig(e,n){return w({queryKey:["platform-admin","tenants",e,"copy-data-preview",n],queryFn:()=>A(`/platform-admin/tenants/${e}/copy-data/preview?sourceTenantId=${n}`),enabled:!!n})}function jg(e,n){return U({mutationFn:t=>A(`/platform-admin/tenants/${e}/copy-data?sourceTenantId=${encodeURIComponent(n)}`,{method:"POST",body:JSON.stringify(t)})})}function bs(e){return w({queryKey:["division-tree"],queryFn:()=>A("/admin/divisions/tree"),enabled:(e==null?void 0:e.enabled)??!0,staleTime:6e4})}function Tr(e,n){const t=n.trim().toLowerCase();if(t==="")return e;const s=i=>{const o=[];for(const r of i){const c=r.name.toLowerCase().includes(t),l=r.sections.filter(u=>u.name.toLowerCase().includes(t)),m=s(r.children);(c||l.length>0||m.length>0)&&o.push({...r,sections:c?r.sections:l,children:m})}return o};return s(e)}const Vn="division:",Gn="section:";function Rg(e){return e===null?"":e.type==="DIVISION"?`${Vn}${e.scopeId}`:`${Gn}${e.scopeId}`}function Og(e){return e.startsWith(Vn)?{type:"DIVISION",scopeId:e.slice(Vn.length)}:e.startsWith(Gn)?{type:"SECTION",scopeId:e.slice(Gn.length)}:null}function fi({label:e,optionValue:n,indentPx:t,disabled:s}){return a.jsx(he,{style:{paddingLeft:t},children:a.jsx(ho,{value:n,label:a.jsx(g,{size:"sm",children:e}),disabled:s})})}function vr({division:e,depth:n,parentDisabled:t,showSections:s}){const i=n*16;return a.jsxs(N,{gap:4,children:[a.jsx(fi,{label:e.name,optionValue:`${Vn}${e.id}`,indentPx:i,disabled:t}),s&&e.sections.filter(o=>!o.archived).map(o=>a.jsx(fi,{label:o.name,optionValue:`${Gn}${o.id}`,indentPx:i+16,disabled:t},o.id)),e.children.map(o=>a.jsx(vr,{division:o,depth:n+1,parentDisabled:t,showSections:s},o.id))]})}
2function Lg({value:e,onChange:n,disabled:t,allowedScopeTypes:s=["DIVISION","SECTION"]}){const i=bs(),[o,r]=d.useState("");if(i.isLoading)return a.jsxs(C,{gap:"xs",children:[a.jsx(me,{size:"sm"}),a.jsx(g,{size:"sm",children:"Cargando opciones de ámbito..."})]});const c=i.data;if(!c)return null;const l=Tr(c.divisions,o),m=u=>{const p=Og(u);p!==null&&n(p)};return a.jsxs(N,{gap:"xs",children:[a.jsx(W,{placeholder:s.includes("SECTION")?"Buscar división o sección...":"Buscar división...",value:o,onChange:u=>r(u.currentTarget.value),leftSection:a.jsx(ea,{size:14}),size:"sm"}),a.jsx(ho.Group,{value:Rg(e),onChange:m,children:a.jsx(Tn,{style:{maxHeight:280,overflowY:"auto",marginTop:"var(--mantine-spacing-xs)"},children:a.jsx(N,{gap:4,children:l.length===0?a.jsx(g,{size:"sm",c:"dimmed",children:"Sin resultados"}):l.map(u=>a.jsx(vr,{division:u,depth:0,parentDisabled:!!t,showSections:s.includes("SECTION")},u.id))})})})]})}function xr(e){const n=new Set,t=new Set;for(const s of e)s.type==="DIVISION"&&n.add(s.scopeId),s.type==="SECTION"&&t.add(s.scopeId);return{divisions:n,sections:t}}function Sr(e,n){for(const t of e.children)n.add(t.id),Sr(t,n)}function _r(e,n){const t=new Set,s=new Set(e.filter(o=>o.type==="DIVISION").map(o=>o.scopeId)),i=o=>{for(const r of o)s.has(r.id)&&Sr(r,t),i(r.children)};return i(n),t}function Dg(e){const n=new Map,t=s=>{for(const i of s){for(const o of i.sections)n.set(o.id,i.id);t(i.children)}};return t(e),n}function Mg(e,n){const t=xr(e),s=_r(e,n),i=Dg(n);return e.filter(o=>{if(o.type==="DIVISION")return!s.has(o.scopeId);if(o.type==="SECTION"){const r=i.get(o.scopeId);return r?!(t.divisions.has(r)||s.has(r)):!0}return!0})}function bi({label:e,checked:n,disabled:t,disabledReason:s,indentPx:i=0,onChange:o}){const r=a.jsx(Me,{checked:n,disabled:t,onChange:o,label:a.jsx(g,{size:"sm",children:e})});return a.jsx(he,{style:{paddingLeft:i},children:s&&t?a.jsx(oe,{label:s,withArrow:!0,children:a.jsx(he,{style:{display:"inline-flex"},children:r})}):r})}function Cr({division:e,depth:n,coveredDivisionIds:t,valueSet:s,parentDisabled:i,ancestorDivisionName:o,showSections:r,onToggleDivision:c,onToggleSection:l}){const m=n*16,u=t.has(e.id),p=s.divisions.has(e.id),x=u||p;let h,E=i;!E&&!e.canWrite&&(h="Sin permisos para escribir aquÃ",E=!0),!E&&u&&(h=`Heredado de ${o??"la división padre"}`,E=!0);const f=u||p;return a.jsxs(N,{gap:4,children:[a.jsx(bi,{label:e.name,checked:x,disabled:E,disabledReason:h,indentPx:m,onChange:()=>c(e.id)}),r&&e.sections.filter(b=>!b.archived).map(b=>{const v=s.sections.has(b.id),S=f||v;let y=i,_;return!y&&!e.canWrite&&(_="Sin permisos para escribir aquÃ",y=!0),!y&&f&&(_=`Heredado de ${e.name}`,y=!0),a.jsx(bi,{label:b.name,checked:S,disabled:y,disabledReason:_,indentPx:m+16,onChange:()=>l(b.id)},b.id)}),e.children.map(b=>a.jsx(Cr,{division:b,depth:n+1,coveredDivisionIds:t,valueSet:s,parentDisabled:i,ancestorDivisionName:u||p?e.name:o,showSections:r,onToggleDivision:c,onToggleSection:l},b.id))]})}function Pg({value:e,onChange:n,disabled:t,tree:s,allowedScopeTypes:i=["DIVISION","SECTION"]}){var E,f;const o=bs({enabled:s===void 0}),r=s??((E=o.data)==null?void 0:E.divisions)??[],c=d.useMemo(()=>xr(e),[e]),l=d.useMemo(()=>_r(e,r),[e,s,(f=o.data)==null?void 0:f.divisions]),[m,u]=d.useState("");if(s===void 0&&o.isLoading)return a.jsxs(C,{gap:"xs",children:[a.jsx(me,{size:"sm"}),a.jsx(g,{size:"sm",children:"Cargando opciones de ámbito..."})]});if(s===void 0&&!o.data)return null;const p=b=>{n(Mg(b,r))},x=b=>{c.divisions.has(b)?p(e.filter(v=>!(v.type==="DIVISION"&&v.scopeId===b))):p([...e,{type:"DIVISION",scopeId:b}])},h=b=>{c.sections.has(b)?p(e.filter(v=>!(v.type==="SECTION"&&v.scopeId===b))):p([...e,{type:"SECTION",scopeId:b}])};return a.jsxs(N,{gap:"xs",children:[a.jsx(W,{placeholder:i.includes("SECTION")?"Buscar división o sección...":"Buscar división...",value:m,onChange:b=>u(b.currentTarget.value),leftSection:a.jsx(ea,{size:14}),size:"sm"}),Tr(r,m).map(b=>a.jsx(Cr,{division:b,depth:0,coveredDivisionIds:l,valueSet:c,parentDisabled:!!t,showSections:i.includes("SECTION"),onToggleDivision:x,onToggleSection:h},b.id))]})}function wg(e){const{data:n}=bs({enabled:(e==null?void 0:e.enabled)??!0});return d.useMemo(()=>{const t=new Map,s=i=>{for(const o of i){t.set(`DIVISION:${o.id}`,o.name);for(const r of o.sections){const c=r.archived?`${r.name} (Archivado)`:r.name;t.set(`SECTION:${r.id}`,c)}s(o.children)}};return s((n==null?void 0:n.divisions)??[]),t},[n])}function Fg(e){const n=new Map,t=s=>{for(const i of s){n.set(`DIVISION:${i.id}`,i.name);for(const o of i.sections){const r=o.archived?`${o.name} (Archivado)`:o.name;n.set(`SECTION:${o.id}`,r)}t(i.children)}};return t(e),n}function Ug(e){return e.multiple?e.value:e.value?[e.value]:[]}function kg(e){const{label:n,description:t,placeholder:s,required:i,error:o,disabled:r,variant:c,size:l="md",style:m,tree:u,nameMap:p,allowedScopeTypes:x=["DIVISION","SECTION"]}=e,h=d.useId(),[E,f]=d.useState(!1),b=wg({enabled:p===void 0}),v=p??b,S=Ug(e),y=e.multiple?"Selecciona uno o más ámbitosâ¦":"Selecciona un ámbitoâ¦",_=!e.multiple&&e.value!==null&&!i&&!r;return a.jsx(Fs.Wrapper,{id:h,label:n,description:t,required:i,error:o,children:a.jsxs(Qa,{opened:E,onChange:f,position:"bottom-start",width:"target",styles:{dropdown:{minWidth:320}},withArrow:!1,shadow:"md",withinPortal:!0,trapFocus:!0,disabled:r,children:[a.jsx(Qa.Target,{popupType:"listbox",children:a.jsx(Fs,{component:"button",type:"button",multiline:!0,pointer:!0,id:h,error:!!o,disabled:r,variant:c,size:l,"aria-expanded":E,onClick:()=>!r&&f(T=>!T),onKeyDown:T=>{r||(T.key==="Enter"||T.key===" ")&&(T.preventDefault(),f(j=>!j))},style:m,rightSection:a.jsxs(C,{gap:2,wrap:"nowrap",children:[_&&a.jsx(J,{size:"xs",variant:"subtle",color:"gray","aria-label":"Limpiar selección",style:{pointerEvents:"auto"},onClick:T=>{T.stopPropagation(),e.onChange(null)},children:a.jsx(gn,{size:12})}),a.jsx(it,{size:16,"aria-hidden":!0})]}),children:S.length===0?a.jsx(g,{size:"sm",c:"dimmed",children:s??y}):a.jsx(C,{gap:4,wrap:"wrap",children:S.map(T=>{const j=`${T.type}:${T.scopeId}`,L=v.get(j)??"â¦";return a.jsx(wl,{"aria-label":L,children:L},j)})})})}),a.jsx(Qa.Dropdown,{p:"xs",children:e.multiple?a.jsx(Pg,{value:e.value,onChange:e.onChange,disabled:r,tree:u,allowedScopeTypes:x}):a.jsx(N,{gap:"xs",children:a.jsx(Lg,{value:e.value,onChange:T=>{e.onChange(T),f(!1)},disabled:r,allowedScopeTypes:x})})})]})})}const Ft="__create_new__";
2function zg({title:e,matchKeyLabel:n,sourceEntities:t,destinationOptions:s,mappings:i,selectedRows:o,onMappingChange:r,onSelectionChange:c,onSelectAll:l,violationsBySourceId:m={},warningsBySourceId:u={},scopable:p=!1,scopeBySourceId:x={},onScopeChange:h,destinationTree:E}){const f=d.useMemo(()=>E?Fg(E):void 0,[E]),b=[{value:Ft,label:"â Crear nuevo â"},...s.map(T=>({value:T.value,label:T.isArchived?`(Archivado) ${T.label}`:T.label}))],v=t.length,S=t.filter(T=>o[T.id]!==!1).length,y=v>0&&S===v,_=S>0&&S<v;return a.jsxs(N,{gap:"sm",children:[e&&a.jsxs(C,{gap:"sm",children:[a.jsx(g,{fw:600,size:"md",children:e}),n&&a.jsxs(g,{size:"xs",c:"dimmed",children:["Match por ",n]}),a.jsxs(g,{size:"xs",c:"dimmed",children:[S," / ",v," seleccionados"]})]}),t.length===0?a.jsx(g,{size:"sm",c:"dimmed",children:"No hay datos en el tenant origen"}):a.jsxs(P,{children:[a.jsx(P.Thead,{children:a.jsxs(P.Tr,{children:[a.jsx(P.Th,{w:40,children:a.jsx(Me,{checked:y,indeterminate:_,onChange:T=>l(T.currentTarget.checked),"aria-label":"Seleccionar todos"})}),a.jsx(P.Th,{children:"Origen"}),a.jsx(P.Th,{children:"Destino"}),p&&a.jsx(P.Th,{children:"Ãmbito destino"}),a.jsx(P.Th,{w:80,style:{textAlign:"center"},children:"Estado"})]})}),a.jsx(P.Tbody,{children:t.map(T=>{const j=i[T.id],L=j!=null,q=o[T.id]!==!1,ie=m[T.id]??[],D=u[T.id]??[];return a.jsxs(P.Tr,{style:q?void 0:{opacity:.5},children:[a.jsx(P.Td,{children:a.jsx(Me,{checked:q,onChange:V=>c(T.id,V.currentTarget.checked),"aria-label":`Incluir ${T.label}`})}),a.jsxs(P.Td,{children:[a.jsxs(C,{gap:"xs",wrap:"nowrap",children:[a.jsx(g,{size:"sm",children:T.label}),T.isArchived&&a.jsx(Se,{tone:"neutral",children:"Archivado"})]}),T.subtitle&&a.jsx(g,{size:"xs",c:"dimmed",children:T.subtitle}),ie.length>0&&a.jsx(g,{size:"xs",style:{color:Ia("poor")},children:ie.join(" · ")}),D.length>0&&a.jsx(g,{size:"xs",style:{color:Ia("alert")},children:D.join(" · ")})]}),a.jsx(P.Td,{children:a.jsx(ee,{data:b,value:L?j:Ft,onChange:V=>r(T.id,V===Ft?null:V),size:"sm",disabled:!q,searchable:!0,nothingFoundMessage:"Sin resultados"})}),p&&E&&a.jsx(P.Td,{children:a.jsx(kg,{multiple:!0,size:"xs",placeholder:"Elige ámbitoâ¦",value:x[T.id]??[],onChange:V=>h==null?void 0:h(T.id,V),disabled:!q,tree:E,nameMap:f})}),a.jsx(P.Td,{style:{textAlign:"center"},children:a.jsx(Se,{tone:L?"good":"info",children:L?"Match":"Nuevo"})})]},T.id)})})]})]})}function $g(e){const n=new Map,t=s=>{for(const i of s){n.set(`DIVISION:${i.id}`,i.name);for(const o of i.sections)n.set(`SECTION:${o.id}`,o.name);t(i.children)}};return t(e),n}function Hg(e){const n={},t={},s=i=>{for(const o of i){t[o.name.toLowerCase().trim()]=o.id;for(const r of o.sections)n[r.name.toLowerCase().trim()]=r.id;s(o.children)}};return s(e),{sections:n,divisions:t}}function Ti(e,n,t,s=[],i=[]){const o=$g(s),r=Hg(i),c=[];for(const u of e)if(u.type==="SECTION"){const p=n[u.scopeId];if(p){c.push({type:"SECTION",scopeId:p});continue}const x=o.get(`SECTION:${u.scopeId}`);if(x){const h=r.sections[x.toLowerCase().trim()];h&&c.push({type:"SECTION",scopeId:h})}}else if(u.type==="DIVISION"){const p=o.get(`DIVISION:${u.scopeId}`);if(p){const x=r.divisions[p.toLowerCase().trim()];x&&c.push({type:"DIVISION",scopeId:x})}}const l=new Set,m=c.filter(u=>{const p=`${u.type}:${u.scopeId}`;return l.has(p)?!1:(l.add(p),!0)});return m.length===0&&t?[{type:"DIVISION",scopeId:t}]:m}function qg(e){const n={};for(const t of e)t.parentId&&(n[t.parentId]||(n[t.parentId]=[]),n[t.parentId].push(t.id));return n}function Bg(e){const n=e.find(t=>t.isRoot);return(n==null?void 0:n.id)??null}function Kg(e,n,t){const s={...e},i=new Set,o=[n];for(;o.length>0;){const r=o.shift();if(i.has(r))continue;i.add(r),s[r]=!1;const c=t[r]??[];for(const l of c)o.push(l)}return s}function Yg(e){const n=typeof e.depth=="number"?Math.max(0,e.depth):0;return`${" ".repeat(n*4)}${e.name??""}${e.isRoot?" (raÃz)":""}`}const Ka=new Set(["vehicles","instructors","tariffs","licenses","paymentMethods","financialAccounts","concepts","documentTemplates","meetingPoints"]),vi={sections:["legalEntities"],auesCredentials:["divisions","sections"],classrooms:["sections"],vehicles:["divisions"],instructors:["vehicles","divisions"],meetingPoints:["sections","divisions"],tariffs:["concepts","licenses","divisions"],documentTemplates:["sections","divisions"],content:["licenses","divisions"],tracks:["meetingPoints","sections","licenses"],documentSeries:["legalEntities","sections","divisions"],licenses:["divisions"],paymentMethods:["divisions"],financialAccounts:["divisions"],redsysGateways:["divisions","paymentMethods","financialAccounts","sections"],concepts:["divisions"],admins:["roles"]},Da=[{key:"divisions",title:"Divisiones",matchKeyLabel:"ruta",labelFn:e=>Yg(e),subtitleFn:e=>e.path,optionLabelFn:e=>e.path}
2,{key:"legalEntities",title:"Sociedades",matchKeyLabel:"NIF",labelFn:e=>e.companyName,subtitleFn:e=>e.nif,optionLabelFn:e=>`${e.companyName} â ${e.nif}`},{key:"paymentMethods",title:"Métodos de pago",matchKeyLabel:"nombre",labelFn:e=>e.name,subtitleFn:()=>{},optionLabelFn:e=>e.name},{key:"sections",title:"Secciones",matchKeyLabel:"nº sección",labelFn:e=>e.name,subtitleFn:e=>String(e.dgtSectionNumber),optionLabelFn:e=>`${e.name} â ${e.dgtSectionNumber}`},{key:"auesCredentials",title:"Integración AUES",matchKeyLabel:"nombre",labelFn:e=>e.name,subtitleFn:()=>{},optionLabelFn:e=>e.name},{key:"classrooms",title:"Aulas",matchKeyLabel:"nombre",labelFn:e=>e.name,subtitleFn:e=>e.capacity!=null?`Capacidad: ${e.capacity}`:void 0,optionLabelFn:e=>e.name},{key:"vehicles",title:"VehÃculos",matchKeyLabel:"matrÃcula",labelFn:e=>`${e.marca} ${e.modelo}`,subtitleFn:e=>e.matricula,optionLabelFn:e=>`${e.marca} ${e.modelo} â ${e.matricula}`},{key:"instructors",title:"Profesores",matchKeyLabel:"DNI",labelFn:e=>e.name,subtitleFn:e=>e.idCardNumber,optionLabelFn:e=>`${e.name} â ${e.idCardNumber}`},{key:"financialAccounts",title:"Cuentas financieras",matchKeyLabel:"nombre",labelFn:e=>e.name,subtitleFn:e=>e.type,optionLabelFn:e=>`${e.name} (${e.type})`},{key:"redsysGateways",title:"Integración Redsys",matchKeyLabel:"merchant ID",labelFn:e=>e.name,subtitleFn:e=>e.merchantId,optionLabelFn:e=>`${e.name} â ${e.merchantId}`},{key:"licenses",title:"Permisos",matchKeyLabel:"código",labelFn:e=>e.name,subtitleFn:e=>e.code,optionLabelFn:e=>`${e.name} (${e.code})`},{key:"practiceExercises",title:"Ejercicios de evaluación",matchKeyLabel:"nombre",labelFn:e=>e.name,subtitleFn:e=>e.practiceType,optionLabelFn:e=>e.name},{key:"content",title:"Contenidos de teórica",matchKeyLabel:"nombre",labelFn:e=>e.name,subtitleFn:e=>e.type,optionLabelFn:e=>e.name},{key:"tracks",title:"Pistas",matchKeyLabel:"nombre",labelFn:e=>e.name,subtitleFn:e=>e.address,optionLabelFn:e=>e.name},{key:"documentSeries",title:"Series de numeración",matchKeyLabel:"nombre",labelFn:e=>e.name,subtitleFn:e=>e.documentType,optionLabelFn:e=>e.name},{key:"roles",title:"Roles",matchKeyLabel:"nombre",labelFn:e=>e.name,subtitleFn:()=>{},optionLabelFn:e=>e.name},{key:"concepts",title:"Conceptos",matchKeyLabel:"nombre",labelFn:e=>e.name,subtitleFn:()=>{},optionLabelFn:e=>e.name},{key:"tariffs",title:"Tarifas",matchKeyLabel:"nombre",labelFn:e=>e.name,subtitleFn:()=>{},optionLabelFn:e=>e.name},{key:"documentTemplates",title:"Plantillas de documentos",matchKeyLabel:"nombre",labelFn:e=>e.name,subtitleFn:()=>{},optionLabelFn:e=>e.name},{key:"meetingPoints",title:"Puntos de encuentro",matchKeyLabel:"nombre",labelFn:e=>e.name,subtitleFn:()=>{},optionLabelFn:e=>e.name},{key:"capCenters",title:"Centros CAP",matchKeyLabel:"nombre",labelFn:e=>e.name,subtitleFn:()=>{},optionLabelFn:e=>e.name},{key:"admins",title:"Staff",matchKeyLabel:"email",labelFn:e=>e.name??e.email,subtitleFn:e=>e.email,optionLabelFn:e=>`${e.name??e.email} â ${e.email}`}],Ut=Da.reduce((e,n)=>({...e,[n.key]:n.title}),{});function Vg({tenantId:e}){const{data:n}=Ta(),[t,s]=d.useState(null),[i,o]=d.useState({}),[r,c]=d.useState({}),[l,m]=d.useState({}),[u,p]=d.useState({}),[x,h]=d.useState({}),[E,f]=d.useState({}),[b,v]=d.useState({settings:!1,subscriptionInfo:!1,subscriptionDocuments:!1,notificationSettings:!1,practiceTypeConfigurations:!1,instructorParallelPracticeConfigs:!1,onlineOrderInvoicingRules:!1}),[S,y]=d.useState([]),[_,T]=d.useState([]),[j,L]=d.useState([]),[q,ie]=d.useState(!1),{data:D,isLoading:V}=Ig(e,t),Y=jg(e,t??""),{showSuccessToast:Ke,showToast:Fe}=F(),ta=d.useMemo(()=>{var R;const I=(R=D==null?void 0:D.matchEntities)==null?void 0:R.divisions;return I?qg(I.source):{}},[D]),da=d.useMemo(()=>{var R,k;const I=((k=(R=D==null?void 0:D.matchEntities)==null?void 0:R.divisions)==null?void 0:k.source)??[];return Bg(I)},[D]);d.useEffect(()=>{var Ae;if(!D)return;const I={},R={},k={},B=D.destinationContext.rootDivisionId,re=((Ae=D.sourceContext)==null?void 0:Ae.divisionTree)??[],te=D.destinationContext.divisionTree??[];for(const Ee of Da){const xa=D.matchEntities[Ee.key];if(!xa)continue;const oa={},Sa={},Z={};for(const ye of xa.source){const jt=xa.autoMatches.find(rn=>rn.sourceId===ye.id);if(oa[ye.id]=jt?jt.destinationId:null,Sa[ye.id]=Ee.key==="divisions",Ka.has(Ee.key)){const rn=ye.sourceScope??[];Z[ye.id]=Ti(rn,{},B,re,te)}}
2I[Ee.key]=oa,R[Ee.key]=Sa,Ka.has(Ee.key)&&(k[Ee.key]=Z)}o({divisions:!0}),c({}),m(I),p(R),h(k),f({}),T([]),L([]),v({settings:!1,subscriptionInfo:!1,subscriptionDocuments:!1,notificationSettings:!1,practiceTypeConfigurations:!1,instructorParallelPracticeConfigs:!1,onlineOrderInvoicingRules:!1}),y([])},[D]),d.useEffect(()=>{var te;if(!D)return;const I=l.sections??{},R={};for(const[Ae,Ee]of Object.entries(I))Ee&&(R[Ae]=Ee);const k=D.destinationContext.rootDivisionId,B=((te=D.sourceContext)==null?void 0:te.divisionTree)??[],re=D.destinationContext.divisionTree??[];h(Ae=>{var xa;const Ee={...Ae};for(const oa of Ka){const Sa=D.matchEntities[oa];if(!Sa)continue;const Z={...Ae[oa]??{}};for(const ye of Sa.source){if((xa=E[oa])==null?void 0:xa[ye.id])continue;const rn=ye.sourceScope??[];Z[ye.id]=Ti(rn,R,k,B,re)}Ee[oa]=Z}return Ee})},[l.sections,D]);const va=d.useMemo(()=>{const I={};for(const R of _)I[R.entityType]||(I[R.entityType]={}),I[R.entityType][R.sourceId]=R.missingDependencies.map(k=>`Falta ${k.relatedType}: ${k.relatedLabel}`);return I},[_]),ua=d.useMemo(()=>{const I={};for(const R of j)I[R.entityType]||(I[R.entityType]={}),I[R.entityType][R.sourceId]=R.missingDependencies.map(k=>`Falta ${k.relatedType}: ${k.relatedLabel}`);return I},[j]),M=d.useMemo(()=>{const I=[];for(const R of Da){if(!Ka.has(R.key)||!i[R.key])continue;const k=x[R.key]??{},B=u[R.key]??{};for(const[re,te]of Object.entries(k))if(B[re]===!0&&(!te||te.length===0)){I.push(R.key);break}}return I},[i,x,u]),sa=d.useMemo(()=>{const I={};for(const R of Da){if(!i[R.key])continue;const k=vi[R.key]??[],B=[];for(const re of k){const te=D==null?void 0:D.matchEntities[re];!te||te.source.length===0||i[re]||B.push(Ut[re]??re)}B.length>0&&(I[R.key]=B)}return I},[i,D]),ia=(n||[]).filter(I=>I.id!==e).map(I=>({value:I.id,label:I.name})),K=(I,R)=>{o(k=>({...k,[I]:R})),R&&c(k=>({...k,[I]:!0}))},pe=I=>{c(R=>({...R,[I]:!R[I]}))},Ye=(I,R,k)=>{m(B=>({...B,[I]:{...B[I],[R]:k}})),T([]),L([])},Oa=(I,R,k)=>{I==="divisions"&&R===da||(p(B=>{const re=B[I]??{},te=I==="divisions"&&!k?Kg(re,R,ta):{...re,[R]:k};return{...B,[I]:te}}),T([]),L([]))},ma=(I,R)=>{p(k=>{const B=k[I]??{},re={};for(const te of Object.keys(B))re[te]=R;return{...k,[I]:re}}),T([]),L([])},At=(I,R,k)=>{h(B=>({...B,[I]:{...B[I]??{},[R]:k}})),f(B=>({...B,[I]:{...B[I]??{},[R]:!0}}))},yt=(I,R)=>{y(k=>R?[...k,I]:k.filter(B=>B!==I))},It=()=>{if(!t)return;T([]),L([]);const I={};for(const R of Da){const k=l[R.key]??{},B=u[R.key]??{},re=Ka.has(R.key);I[R.key]={enabled:i[R.key]??!1,rows:Object.entries(k).filter(([te])=>B[te]===!0).map(([te,Ae])=>{var Ee;return{sourceId:te,destinationId:Ae,...re?{scope:((Ee=x[R.key])==null?void 0:Ee[te])??[]}:{}}})}}Y.mutate({matchEntities:I,replaceGlobals:b,copyQuotas:{selectedResourceTypes:S}},{onSuccess:R=>{ie(!1);const k=(R==null?void 0:R.warnings)??[];L(k),k.length>0?Ke({title:"Copia completada con avisos",description:`${k.length} elemento(s) tienen relaciones de secciones que no se han podido enlazar. Revisa los avisos.`}):Ke({title:"Copia completada",description:"Los datos se han copiado correctamente."})},onError:R=>{var B,re,te;ie(!1);const k=(te=(re=(B=R==null?void 0:R.response)==null?void 0:B.data)==null?void 0:re.context)==null?void 0:te.violations;if(Array.isArray(k)){T(k),Fe({title:"Faltan dependencias",description:`${k.length} elemento(s) referencian Ãtems no seleccionados. Revisa la tabla.`,variant:"destructive"});return}Fe({title:"Error al copiar datos",description:(R==null?void 0:R.message)||"Error desconocido",variant:"destructive"})}})},G=!Y.isPending&&_.length===0&&M.length===0;return a.jsxs(N,{gap:"lg",children:[a.jsxs("section",{children:[a.jsx(Pe,{order:4,mb:"sm",children:"Tenant origen"}),a.jsx(ee,{searchable:!0,placeholder:"Selecciona el tenant origen",data:ia,value:t,onChange:s})]}),V&&a.jsx(ve,{py:"xl",children:a.jsx(me,{size:"sm"})}),D&&a.jsxs(a.Fragment,{children:[_.length>0&&a.jsxs(Ue,{color:"red",icon:a.jsx(We,{size:16}),children:[a.jsx(g,{fw:600,mb:4,children:"No se ha podido copiar: faltan dependencias"}),a.jsxs(g,{size:"sm",children:[_.length," elemento(s) referencian Ãtems que no están seleccionados. Marca esos Ãtems o desmarca los que dependen de ellos."]})]}),j.length>
20&&a.jsxs(Ue,{color:"orange",icon:a.jsx(We,{size:16}),children:[a.jsx(g,{fw:600,mb:4,children:"Copia completada con avisos"}),a.jsxs(g,{size:"sm",children:[j.length," elemento(s) tienen relaciones con secciones que no existen en destino y no se han enlazado."]})]}),M.length>0&&a.jsxs(Ue,{color:"red",icon:a.jsx(We,{size:16}),children:[a.jsx(g,{fw:600,mb:4,children:"Ãmbito requerido"}),a.jsxs(g,{size:"sm",children:["Hay filas seleccionadas en ",M.map(I=>Ut[I]??I).join(", ")," sin ámbito asignado."]})]}),a.jsx(fa,{withBorder:!0,p:0,radius:"md",children:a.jsx(N,{gap:0,children:Da.map((I,R)=>{const k=D.matchEntities[I.key];if(!k)return null;const B=i[I.key]??!1,re=r[I.key]??!1,te=Ka.has(I.key),Ae=k.source.length,Ee=Ae===0,xa=Object.values(u[I.key]??{}).filter(Z=>Z===!0).length,oa=sa[I.key]??[],Sa=(vi[I.key]??[]).filter(Z=>{var ye;return(((ye=D.matchEntities[Z])==null?void 0:ye.source.length)??0)>0}).map(Z=>Ut[Z]??Z);return a.jsxs("div",{children:[R>0&&a.jsx(tt,{}),a.jsxs(C,{gap:"xs",wrap:"nowrap",px:"sm",py:6,style:{cursor:Ee?"default":"pointer",opacity:Ee?.45:1},onClick:Ee?void 0:()=>pe(I.key),children:[a.jsx(Me,{checked:B,disabled:Ee,onChange:Z=>K(I.key,Z.currentTarget.checked),onClick:Z=>Z.stopPropagation()}),a.jsx(ct,{size:14,style:{transform:re?"rotate(90deg)":"rotate(0deg)",transition:"transform 120ms",flexShrink:0}}),a.jsx(g,{fw:600,size:"sm",style:{flex:1},children:I.title}),a.jsxs(g,{size:"xs",c:"dimmed",children:[Ae," en origen",B&&` · ${xa} seleccionadas`]}),Sa.length>0&&a.jsxs(Ca,{size:"xs",variant:"light",color:"gray",children:["Necesita: ",Sa.join(", ")]}),oa.length>0&&a.jsxs(Ca,{size:"xs",variant:"light",color:"orange",children:["Falta habilitar: ",oa.join(", ")]}),te&&a.jsx(Ca,{size:"xs",variant:"light",color:"teal",children:"Ãmbito"})]}),a.jsx(ss,{in:re&&!Ee,children:a.jsx("div",{style:{padding:"8px 12px 12px 12px"},children:a.jsx(zg,{title:"",matchKeyLabel:"",sourceEntities:k.source.map(Z=>({id:Z.id,label:I.labelFn(Z),subtitle:I.subtitleFn(Z),isArchived:"isArchived"in Z?!!Z.isArchived:!1})),destinationOptions:k.destination.map(Z=>({value:Z.id,label:I.optionLabelFn(Z),isArchived:"isArchived"in Z?!!Z.isArchived:!1})),mappings:l[I.key]||{},selectedRows:u[I.key]||{},onMappingChange:(Z,ye)=>Ye(I.key,Z,ye),onSelectionChange:(Z,ye)=>Oa(I.key,Z,ye),onSelectAll:Z=>ma(I.key,Z),violationsBySourceId:va[I.key]??{},warningsBySourceId:ua[I.key]??{},scopable:te,scopeBySourceId:te?x[I.key]??{}:void 0,onScopeChange:te?(Z,ye)=>At(I.key,Z,ye):void 0,destinationTree:te?D.destinationContext.divisionTree??[]:void 0})})})]},I.key)})})}),a.jsxs(N,{gap:"xs",children:[a.jsx(Pe,{order:6,children:"Configuración global"}),a.jsx(Me,{size:"sm",label:`Configuración (${D.globals.settings.sourceCount} ajustes)`,checked:b.settings,onChange:I=>v(R=>({...R,settings:I.currentTarget.checked}))}),a.jsx(Me,{size:"sm",label:`Información de suscripción${D.globals.subscriptionInfo.exists?"":" (no existe en origen)"}`,checked:b.subscriptionInfo,disabled:!D.globals.subscriptionInfo.exists,onChange:I=>v(R=>({...R,subscriptionInfo:I.currentTarget.checked}))}),a.jsx(Me,{size:"sm",label:"Documentos y términos de suscripción",checked:b.subscriptionDocuments,onChange:I=>v(R=>({...R,subscriptionDocuments:I.currentTarget.checked}))}),a.jsx(Me,{size:"sm",label:`Configuración de notificaciones (${D.globals.notificationSettings.sourceCount} ajustes)`,checked:b.notificationSettings,onChange:I=>v(R=>({...R,notificationSettings:I.currentTarget.checked}))}),a.jsx(Me,{size:"sm",label:"Configuración de tipos de práctica",checked:b.practiceTypeConfigurations,onChange:I=>v(R=>({...R,practiceTypeConfigurations:I.currentTarget.checked}))}),a.jsx(Me,{size:"sm",label:"Configuración de prácticas en paralelo de profesores",checked:b.instructorParallelPracticeConfigs,onChange:I=>v(R=>({...R,instructorParallelPracticeConfigs:I.currentTarget.checked}))}),a.jsx(Me,{size:"sm",label:"Reglas de facturación de pedidos online",checked:b.onlineOrderInvoicingRules,onChange:I=>v(R=>({...R,onlineOrderInvoicingRules:I.currentTarget.checked}))})]}),D.quotas.source.length>0&&a.jsxs(N,{gap:"xs",children:[a.jsx(Pe,{order:6,children:"Cuotas"}),D.quotas.source.map(I=>a.jsx(Me,{size:"sm",label:`${I.resourceType}: ${I.value}`,checked:S.includes(I.resourceType),onChange:R=>yt(I.resourceType,R.currentTarget.checked)},I.resourceType))]}),a.jsxs(C,{justify:"flex-end",gap:"sm",children:[M.length>0&&a.jsxs(Ca,{color:"red",variant:"filled",size:"md",children:["Ãmbito incompleto en ",M.length," entidad(es)"]}),a.jsx(ge,{variant:"primary",onClick:()=>
2ie(!0),loading:Y.isPending,disabled:!G,children:"Ejecutar copia"})]})]}),a.jsx(se,{opened:q,onClose:()=>ie(!1),title:"Confirmar copia de datos",centered:!0,size:"lg",children:a.jsxs(N,{gap:"md",children:[a.jsxs("div",{children:[a.jsx(g,{fw:600,mb:"xs",children:"Entidades a copiar:"}),a.jsx(N,{gap:4,children:Da.filter(I=>i[I.key]).map(I=>{const R=l[I.key]??{},k=u[I.key]??{},B=Object.entries(R).filter(([Ae])=>k[Ae]===!0),re=B.filter(([,Ae])=>Ae!==null).length,te=B.filter(([,Ae])=>Ae===null).length;return B.length===0?null:a.jsxs(g,{size:"sm",children:[I.title,": ",re," actualizaciones, ",te," nuevos"]},I.key)})})]}),(b.settings||b.subscriptionInfo||b.subscriptionDocuments||b.notificationSettings||b.practiceTypeConfigurations||b.instructorParallelPracticeConfigs||b.onlineOrderInvoicingRules)&&a.jsxs("div",{children:[a.jsx(g,{fw:600,mb:"xs",children:"Configuración global a reemplazar:"}),a.jsxs(N,{gap:4,children:[b.settings&&a.jsx(g,{size:"sm",children:"Configuración"}),b.subscriptionInfo&&a.jsx(g,{size:"sm",children:"Información de suscripción"}),b.subscriptionDocuments&&a.jsx(g,{size:"sm",children:"Documentos y términos de suscripción"}),b.notificationSettings&&a.jsx(g,{size:"sm",children:"Configuración de notificaciones"}),b.practiceTypeConfigurations&&a.jsx(g,{size:"sm",children:"Configuración de tipos de práctica"}),b.instructorParallelPracticeConfigs&&a.jsx(g,{size:"sm",children:"Configuración de prácticas en paralelo de profesores"}),b.onlineOrderInvoicingRules&&a.jsx(g,{size:"sm",children:"Reglas de facturación de pedidos online"})]})]}),S.length>0&&a.jsxs("div",{children:[a.jsx(g,{fw:600,mb:"xs",children:"Cuotas a copiar:"}),a.jsx(N,{gap:4,children:S.map(I=>a.jsx(g,{size:"sm",children:I},I))})]}),a.jsx(Ue,{color:"red",icon:a.jsx(We,{size:16}),children:"Esta operación no se puede deshacer"}),a.jsxs(C,{justify:"flex-end",gap:"sm",children:[a.jsx(ge,{variant:"secondary",onClick:()=>ie(!1),children:"Cancelar"}),a.jsx(ge,{variant:"danger",onClick:It,loading:Y.isPending,children:"Confirmar"})]})]})})]})}function Gg(){const{tenantId:e}=ja(),{data:n,isLoading:t}=Es(e);return t||!n?a.jsx(ve,{h:"50vh",children:a.jsx(me,{size:"lg"})}):a.jsx(de,{title:`Copiar datos a ${n.name}`,description:"Clona configuración y catálogos desde otro tenant, con mapeo entidad a entidad.",backButton:{label:n.name,to:$.tenant(e),icon:a.jsx(hn,{size:16})},children:a.jsx(Vg,{tenantId:e})})}function Wg(){const[e,n]=d.useState(!1),{showSuccessToast:t,showErrorToast:s}=F(),{refetchMe:i}=an();return{updatePassword:async r=>{n(!0);try{await ad(r),await i(),t({description:"Contraseña actualizada correctamente"})}catch{s("UNKNOWN_ERROR")}finally{n(!1)}},loading:e}}function Xg(){const[e,n]=d.useState(!1),[t,s]=d.useState(!1),[i,o]=d.useState(null),[r,c]=d.useState(null),{showSuccessToast:l,showErrorToast:m}=F();return{enabled:i,loading:e,statusLoading:t,setupData:r,fetchStatus:async()=>{s(!0);try{const E=await id();o(E.enabled)}catch{m("ERROR_FETCHING_2FA_STATUS")}finally{s(!1)}},setup:async()=>{n(!0);try{const E=await sd();return c(E),E}catch{return m("ERROR_SETTING_UP_2FA"),null}finally{n(!1)}},confirm:async E=>{n(!0);try{return await td(E),o(!0),c(null),l({description:"Autenticación en dos pasos activada"}),!0}catch{return m("INVALID_2FA_CODE"),!1}finally{n(!1)}},disable:async E=>{n(!0);try{return await nd(E),o(!1),l({description:"Autenticación en dos pasos desactivada"}),!0}catch{return m("INVALID_2FA_CODE"),!1}finally{n(!1)}}}}function Qg({allowDisable:e=!0}){const{enabled:n,loading:t,statusLoading:s,setupData:i,fetchStatus:o,setup:r,confirm:c,disable:l}=Xg(),[m,u]=d.useState(!1),[p,x]=d.useState(!1),[h,E]=d.useState(""),[f,b]=d.useState(""),[v,S]=d.useState(0),[y,_]=d.useState(0);d.useEffect(()=>{o()},[]);const T=async()=>{await r()&&u(!0)},j=async q=>{await c(q)?(u(!1),E("")):(E(""),S(D=>D+1))},L=async q=>{await l(q)?(x(!1),b("")):(b(""),_(D=>D+1))};return n===null?a.jsx(X,{children:a.jsx("div",{style:{position:"relative",minHeight:"80px"},children:a.jsx(Fl,{visible:s})})}):a.jsxs(a.Fragment,{children:[a.jsx(X,{children:a.jsxs(N,{gap:"md",children:[a.jsxs(C,{justify:"space-between",children:[a.jsx(g,{fw:500,children:"Autenticación en dos pasos"}),a.jsx(Ca,{color:n?"green":"gray",variant:"light",children:n?"Activada":"Desactivada"})]}),a.jsxs(g,{size:"sm",c:"dimmed",children:[!n&&"Protege tu cuenta con un código de verificación de tu app authenticator.",n&&e&&"Tu cuenta está protegida con autenticación en dos pasos.",n&&!e&&"Tu cuenta está protegida con autenticación en dos pasos. Por seguridad, no puede desactivarse."]}),!n&&a.jsx(C,{justify:"flex-end",children:a.jsx(O,{onClick:T,loading:t,children:"Activar"})}),n&&e&&a.jsx(C,{justify:"flex-end",children:a.jsx(O,{variant:"light",color:"red",onClick:()=>x(!0),children:"Desactivar"})})]})}),a.jsx(se,{opened:m,onClose:()=>{u(!1),E("")},title:"Activar autenticación en dos pasos",centered:!0,children:i&&a.jsxs(N,{gap:"lg",align:"center",children:[a.jsx(g,{size:"sm",ta:"center",children:"Escanea este código QR con tu app authenticator (Google Authenticator, Authy, etc.)"}),a.jsx(Ul,{value:i.qrUri,size:200}),a.jsxs(N,{gap:"xs",align:"center",w:"100%",children:[a.jsx(g,{size:"xs",c:"dimmed",children:"O introduce este código manualmente:"}),a.jsx(g,{size:"xs",ff:"monospace",fw:600,ta:"center",style:{wordBreak:"break-all"},children:i.secret})]}),a.jsx(g,{size:"sm",ta:"center",children:"Introduce el código de 6 dÃgitos para confirmar:"}),a.jsx(Us,{length:6,type:"number",value:h,onChange:E,onComplete:j,disabled:t,autoFocus:!0},v)]})}),e&&a.jsx(se,{opened:p,onClose:()=>{x(!1),b("")},title:"Desactivar autenticación en dos pasos",centered:!0,children:a.jsxs(N,{gap:"lg",align:"center",children:[a.jsx(g,{size:"sm",ta:"center",children:"Introduce el código de tu app authenticator para confirmar:"}),a.jsx(Us,{length:6,type:"number",value:f,onChange:b,onComplete:L,disabled:t,autoFocus:!0},y)]})})]})}const xi=6;
2function Jg(){const[e,n]=d.useState(""),[t,s]=d.useState(""),[i,o]=d.useState(""),{updatePassword:r,loading:c}=Wg(),l=async()=>{if(o(""),e.length<xi){o(`La contraseña debe tener al menos ${xi} caracteres`);return}if(e!==t){o("Las contraseñas no coinciden");return}try{await r(e),n(""),s("")}catch(m){Re.debug("Password update error handled by hook",m)}};return a.jsx(de,{title:"Preferencias",children:a.jsxs(N,{gap:"lg",children:[a.jsx(X,{children:a.jsxs(N,{gap:"md",children:[a.jsx(g,{fw:500,children:"Contraseña"}),a.jsx(ks,{value:e,onChange:m=>n(m.currentTarget.value),placeholder:"Nueva contraseña",error:i}),a.jsx(ks,{value:t,onChange:m=>s(m.currentTarget.value),placeholder:"Confirmar contraseña"}),a.jsx(C,{justify:"flex-end",children:a.jsx(O,{onClick:l,loading:c,disabled:!e,children:"Cambiar contraseña"})})]})}),a.jsx(Qg,{allowDisable:!1})]})})}function Zg(e){const n=(e==null?void 0:e.trim())||void 0;return w({queryKey:ga.list(n),queryFn:()=>A("/platform-admin/referrals",{params:{code:n}})})}function eh(){const[e,n]=d.useState(""),[t]=rs(e,300),{data:s,isLoading:i,isFetching:o}=Zg(t),r=d.useMemo(()=>[z({accessorKey:"referrerTenantName",header:"Tenant referidor",value:l=>l.referrerTenantName,min:180,link:l=>$.tenantReferrals(l.referrerTenantId)}),z({accessorKey:"referrerName",header:"Referidor",value:l=>l.referrerName,min:160,max:220}),z({accessorKey:"referredTenantName",header:"Autoescuela referida",value:l=>l.referredTenantName,min:200}),tr({accessorKey:"rewardAmount",header:"Importe",value:l=>$n.fromString(l.rewardAmount,2),min:110,max:140}),De({accessorKey:"status",header:"Estado",min:150,max:170,tone:l=>br[l.status],label:l=>fr[l.status]}),Ea({accessorKey:"attributedAt",header:"Atribuido",value:l=>l.attributedAt,kind:"datetime",min:120,max:150}),Ea({accessorKey:"paidAt",header:"Pagado el",value:l=>l.paidAt,min:120,max:150})],[]),c=_e({columns:r,data:(s==null?void 0:s.referrals)??[],enableTopToolbar:!1,enableColumnFilters:!1,state:{isLoading:i,showLoadingOverlay:o},renderEmptyRowsFallback:()=>a.jsx(g,{c:"dimmed",ta:"center",py:"lg",children:"Sin referidos atribuidos"})});return a.jsx(de,{title:"Referidos",description:"Recomendaciones de todos los tenants. Busca por el código que llega en el formulario de demo.",children:a.jsxs(N,{gap:"md",children:[a.jsxs(C,{align:"flex-end",children:[a.jsx(W,{label:"Código de referido",placeholder:"ABC234",value:e,onChange:l=>n(l.currentTarget.value.toUpperCase()),w:220}),t&&s&&(s.referrer?a.jsxs(g,{size:"sm",children:[s.referrer.name," · ",a.jsx(ha,{component:ne,to:$.tenantReferrals(s.referrer.tenantId),children:s.referrer.tenantName})]}):a.jsx(g,{size:"sm",c:"dimmed",children:"Ningún referidor con ese código"}))]}),a.jsx(X,{children:a.jsx(xe,{table:c})})]})})}function ah(e){const n=new URLSearchParams;return n.append("from",e.from),n.append("to",e.to),w({queryKey:["platform-admin","dgt-sync","stats",e],queryFn:()=>A(`/platform-admin/dgt-sync/stats?${n.toString()}`)})}function nh(e){const n=new URLSearchParams;return n.append("from",e.from),n.append("to",e.to),e.page&&n.append("page",e.page.toString()),e.limit&&n.append("limit",e.limit.toString()),e.status&&n.append("status",e.status),e.tenantId&&n.append("tenantId",e.tenantId),w({queryKey:["platform-admin","dgt-sync","logs",e],queryFn:()=>A(`/platform-admin/dgt-sync/logs?${n.toString()}`),placeholderData:t=>t})}function th(e){return w({queryKey:["platform-admin","dgt-sync","snapshot",e],queryFn:async()=>{const n=od(),t=`${window.location.origin}/api`,s=await fetch(`${t}/platform-admin/dgt-sync/logs/${e}/snapshot`,{headers:{Authorization:`Bearer ${n}`}});if(!s.ok)throw new Error("Failed to fetch snapshot");return s.text()},enabled:!!e})}const sh={success:"good",not_available:"neutral",error:"poor"},ih={success:"OK",not_available:"No disponible",error:"Error"},oh=[{value:"success",label:"OK"},{value:"not_available",label:"No disponible"},{value:"error",label:"Error"}];function rh(){const[e,n]=d.useState([Ie().subtract(1,"day").toDate(),Ie().toDate()]),[t,s]=d.useState(null),[i,o]=d.useState(null),[r,c]=d.useState({pageIndex:0,pageSize:25}),[l,m]=d.useState(null),u=e[0]?Ie(e[0]).format("YYYY-MM-DD"):Ie().subtract(1,"day").format("YYYY-MM-DD"),p=e[1]?Ie(e[1]).format("YYYY-MM-DD"):Ie().format("YYYY-MM-DD"),{data:x}=ah({from:u,to:p}),{data:h,isLoading:E,isFetching:f}=nh({from:u,to:p,page:r.pageIndex+1,limit:r.pageSize,status:t??void 0,tenantId:i??void 0}),{data:b}=th(l),{data:v}=Ta(),S=d.useMemo(()=>(v??[]).map(T=>({value:T.id,label:T.name})),[v]),y=d.useMemo(()=>[{...z({accessorKey:"tenantName",header:"Tenant",value:T=>T.tenantName,min:160}),enableColumnFilter:!1,enableSorting:!1},{...z({accessorKey:"createdAt",header:"Timestamp",value:T=>Ie(T.createdAt).format("DD/MM/YYYY HH:mm"),min:150,grow:!1}
2),enableColumnFilter:!1,enableSorting:!1},{...z({accessorKey:"examDate",header:"Fecha examen",value:T=>Ie(T.examDate).format("DD/MM/YYYY"),min:120,grow:!1}),enableColumnFilter:!1,enableSorting:!1},{...z({accessorKey:"studentName",header:"Alumno",value:T=>T.studentName,min:180}),enableColumnFilter:!1,enableSorting:!1},{...Ze({accessorKey:"licenseCode",header:"Permiso",value:T=>T.licenseCode,min:90,align:"center"}),enableColumnFilter:!1,enableSorting:!1},{...z({accessorKey:"examType",header:"Tipo examen",value:T=>T.examType,min:140,grow:!1}),enableColumnFilter:!1,enableSorting:!1},{...De({accessorKey:"status",header:"Estado",min:120,tone:T=>sh[T.status]??"neutral",label:T=>ih[T.status]??T.status}),enableColumnFilter:!1,enableSorting:!1},{accessorKey:"errorMessage",header:"Error",size:200,grow:!0,enableColumnFilter:!1,enableSorting:!1,Cell:({cell:T})=>{const j=T.getValue();return j?a.jsx(g,{size:"sm",lineClamp:1,title:j,style:{color:Ia("poor")},children:j}):null}}],[]),_=_e({columns:y,data:(h==null?void 0:h.items)??[],onRowClick:T=>m(T.id),enableRowActions:!1,enableTopToolbar:!1,manualPagination:!0,onPaginationChange:c,rowCount:(h==null?void 0:h.total)??0,state:{isLoading:E,showLoadingOverlay:f,pagination:r},enableColumnFilters:!1});return a.jsxs(de,{title:"DGT Sync Monitor",children:[a.jsxs(N,{gap:"md",children:[a.jsx(C,{children:a.jsx(Eo,{type:"range",label:"Rango de fechas",value:e,onChange:T=>n(T),locale:"es",allowSingleDateInRange:!0,clearable:!0})}),a.jsxs(Ua,{cols:{base:2,sm:4},children:[a.jsx(Na,{title:"Total",value:(x==null?void 0:x.total)??0,icon:a.jsx(dt,{size:20}),variant:"info"}),a.jsx(Na,{title:"Correctos",value:(x==null?void 0:x.success)??0,icon:a.jsx(fo,{size:20}),variant:"success"}),a.jsx(Na,{title:"No disponible",value:(x==null?void 0:x.notAvailable)??0,icon:a.jsx(bo,{size:20}),variant:"default"}),a.jsx(Na,{title:"Errores",value:(x==null?void 0:x.errors)??0,icon:a.jsx(We,{size:20}),variant:"error"})]}),a.jsxs(C,{children:[a.jsx(ee,{placeholder:"Estado",data:oh,value:t,onChange:s,clearable:!0,w:180}),a.jsx(ee,{placeholder:"Tenant",data:S,value:i,onChange:o,clearable:!0,searchable:!0,w:250})]}),a.jsx(X,{children:a.jsx(xe,{table:_})})]}),a.jsx(se,{opened:!!l,onClose:()=>m(null),title:"DGT Snapshot",fullScreen:!0,children:b?a.jsx("iframe",{srcDoc:b,sandbox:"",style:{width:"100%",height:"calc(100vh - 80px)",border:"none"}}):a.jsx(g,{c:"dimmed",children:"Cargando snapshot..."})})]})}function Si(e){if(!e)return"-";const n=e.replace(/\r?\n/g,"").replace(/>\s+</g,"><").replace(/(>)(<)(\/*)/g,`$1 3$2$3`);let t=0;const s=[];for(const i of n.split(` 4`)){const o=i.trim();if(o==="")continue;let r=0;/^<\/\w/.test(o)?t=Math.max(t-1,0):/^<\w[^>]*[^/]>.*<\/\w/.test(o)?r=0:/^<\w[^>]*[^/]>$/.test(o)&&(r=1),s.push(" ".repeat(t)+o),t+=r}return s.join(` 5`)}function lh(e){const n=new URLSearchParams;return n.append("from",e.from),n.append("to",e.to),w({queryKey:["platform-admin","aues","stats",e],queryFn:()=>A(`/platform-admin/aues/stats?${n.toString()}`)})}function ch(e){const n=new URLSearchParams;return n.append("from",e.from),n.append("to",e.to),e.page&&n.append("page",e.page.toString()),e.limit&&n.append("limit",e.limit.toString()),e.operation&&n.append("operation",e.operation),e.status&&n.append("status",e.status),e.tenantId&&n.append("tenantId",e.tenantId),e.doi&&n.append("doi",e.doi),w({queryKey:["platform-admin","aues","logs",e],queryFn:()=>A(`/platform-admin/aues/logs?${n.toString()}`),placeholderData:t=>t})}function dh(e){return w({queryKey:["platform-admin","aues","logs",e],queryFn:()=>A(`/platform-admin/aues/logs/${e}`),enabled:!!e})}const _i={success:"good",business_rejected:"alert",transport_error:"poor"},Ci={success:"Aceptada",business_rejected:"Rechazo DGT",transport_error:"Error transporte"},uh=[{value:"success",label:"Aceptada"},{value:"business_rejected",label:"Rechazo DGT"},{value:"transport_error",label:"Error transporte"}],Ni={overflow:"auto",height:"76vh"},Ai={display:"block",whiteSpace:"pre",fontSize:"11px"};function mh(){const e=ka(),n=za(`(max-width: ${e.breakpoints.md})`),[t,s]=d.useState([Ie().subtract(1,"day").toDate(),Ie().toDate()]),[i,o]=d.useState(""),[r,c]=d.use
5State(null),[l,m]=d.useState(null),[u,p]=d.useState(""),[x,h]=d.useState({pageIndex:0,pageSize:25}),[E,f]=d.useState(null),b=t[0]?Ie(t[0]).format("YYYY-MM-DD"):Ie().subtract(1,"day").format("YYYY-MM-DD"),v=t[1]?Ie(t[1]).format("YYYY-MM-DD"):Ie().format("YYYY-MM-DD"),{data:S}=lh({from:b,to:v}),{data:y,isLoading:_,isFetching:T}=ch({from:b,to:v,page:x.pageIndex+1,limit:x.pageSize,operation:i||void 0,status:r??void 0,tenantId:l??void 0,doi:u||void 0}),{data:j}=dh(E),{data:L}=Ta(),q=d.useMemo(()=>(L??[]).map(V=>({value:V.id,label:V.name})),[L]),ie=d.useMemo(()=>[{...z({accessorKey:"createdAt",header:"Timestamp",value:V=>Ie(V.createdAt).format("DD/MM/YYYY HH:mm:ss"),min:170,grow:!1}),enableColumnFilter:!1,enableSorting:!1},{...z({accessorKey:"tenantName",header:"Tenant",value:V=>V.tenantName,min:180}),enableColumnFilter:!1,enableSorting:!1},{...z({accessorKey:"operation",header:"Operación",value:V=>V.operation,min:200}),enableColumnFilter:!1,enableSorting:!1},{...Ze({accessorKey:"doi",header:"DOI",value:V=>V.doi,min:120}),enableColumnFilter:!1,enableSorting:!1},{...De({accessorKey:"status",header:"Estado",min:140,tone:V=>_i[V.status]??"neutral",label:V=>Ci[V.status]??V.status}),enableColumnFilter:!1,enableSorting:!1},{accessorKey:"errorCode",header:"Código error",size:120,grow:!1,enableColumnFilter:!1,enableSorting:!1,Cell:({cell:V})=>{const Y=V.getValue();return Y?a.jsx(g,{size:"sm",style:{color:Ia("poor")},children:Y}):null}},{accessorKey:"durationMs",header:"Duración",size:100,grow:!1,enableColumnFilter:!1,enableSorting:!1,...Ra(void 0,"right"),Cell:({cell:V})=>{const Y=V.getValue();return Y==null?null:`${Y} ms`}}],[]),D=_e({columns:ie,data:(y==null?void 0:y.items)??[],onRowClick:V=>f(V.id),enableTopToolbar:!1,manualPagination:!0,onPaginationChange:h,rowCount:(y==null?void 0:y.total)??0,state:{isLoading:_,showLoadingOverlay:T,pagination:x},enableColumnFilters:!1});return a.jsxs(de,{title:"AUES Call Log",children:[a.jsxs(N,{gap:"md",children:[a.jsx(C,{children:a.jsx(Eo,{type:"range",label:"Rango de fechas",value:t,onChange:V=>s(V),locale:"es",allowSingleDateInRange:!0,clearable:!0})}),a.jsxs(Ua,{cols:{base:2,sm:4},children:[a.jsx(Na,{title:"Total",value:(S==null?void 0:S.total)??0,icon:a.jsx(dt,{size:20}),variant:"info"}),a.jsx(Na,{title:"Aceptadas",value:(S==null?void 0:S.success)??0,icon:a.jsx(fo,{size:20}),variant:"success"}),a.jsx(Na,{title:"Rechazos DGT",value:(S==null?void 0:S.businessRejected)??0,icon:a.jsx(We,{size:20}),variant:"warning"}),a.jsx(Na,{title:"Errores transporte",value:(S==null?void 0:S.transportError)??0,icon:a.jsx(kl,{size:20}),variant:"error"})]}),a.jsxs(C,{children:[a.jsx(W,{placeholder:"Operación",value:i,onChange:V=>o(V.currentTarget.value),w:220}),a.jsx(ee,{placeholder:"Estado",data:uh,value:r,onChange:c,clearable:!0,w:180}),a.jsx(ee,{placeholder:"Tenant",data:q,value:l,onChange:m,clearable:!0,searchable:!0,w:250}),a.jsx(W,{placeholder:"DOI",value:u,onChange:V=>p(V.currentTarget.value),w:160})]}),a.jsx(X,{children:a.jsx(xe,{table:D})})]}),a.jsx(se,{opened:!!E,onClose:()=>f(null),title:"Detalle de la llamada AUES",size:"95%",fullScreen:n,children:j?a.jsxs(N,{gap:"sm",children:[a.jsxs(C,{gap:"xs",children:[a.jsx(Se,{tone:_i[j.status]??"neutral",children:Ci[j.status]??j.status}),a.jsx(g,{size:"sm",fw:600,children:j.operation}),a.jsx(g,{size:"sm",c:"dimmed",children:j.environment}),a.jsxs(g,{size:"sm",children:[a.jsx(g,{span:!0,c:"dimmed",children:"Tenant: "}),j.tenantName]}),a.jsxs(g,{size:"sm",children:[a.jsx(g,{span:!0,c:"dimmed",children:"DOI: "}),j.doi??"-"]}),a.jsxs(g,{size:"sm",children:[a.jsx(g,{span:!0,c:"dimmed",children:"Duración: "}),j.durationMs??"-"," ms"]}),j.errorCode&&a.jsxs(g,{size:"sm",c:"red",children:[a.jsx(g,{span:!0,c:"dimmed",children:"Código error: "}),j.errorCode]})]}),a.jsxs(Ua,{cols:{base:1,md:2},spacing:"md",children:[a.jsxs(N,{gap:4,children:[a.jsx(g,{size:"sm",fw:600,children:"Request"}),a.jsx(Tn,{style:Ni,children:a.jsx(En,{style:Ai,children:Si(j.requestXml)})})]}),a.jsxs(N,{gap:4,children:[a.jsx(g,{size:"sm",fw:600,children:"Response"}),a.jsx(Tn,{style:Ni,children:a.jsx(En,{style:Ai,children:Si(j.responseXml)})})]})]})]}):a.jsx(g,{c:"dimmed",children:"Cargando detalle..."})})]})}const yi={draft:{label:"Sin comprobar",color:"gray"},validating:{label:"Comprobando",color:"blue"},ready:{label:"Preparado",color:"teal"},blocked:{label:"Bloqueado",color:"orange"},submitting:{label:"Pendiente cita DGT",color:"cyan"},success:{label:"Pendiente cita DGT",color:"cyan"},awaiting_cita:{label:"Pendiente cita DGT",color:"cyan"},resolved:{label:"Con cita",color:"green"}
5,processed:{label:"Tramitado",color:"teal"},error:{label:"Con error",color:"red"}},Ii={draft:"neutral",validating:"info",ready:"brand",blocked:"alert",submitting:"info",success:"info",awaiting_cita:"info",resolved:"good",processed:"brand",error:"poor"};function ph(e){return yi[e]??yi.draft}function gh(e){return Ii[e]??Ii.draft}const Nr=["platform-admin","aues","simulated-pending-citas"];function hh(){return w({queryKey:Nr,queryFn:()=>A("/platform-admin/aues/simulated/pending-citas"),refetchInterval:15e3})}function Eh(){const e=H(),{showSuccessToast:n}=F(),{handleError:t}=Q();return U({mutationFn:s=>A("/platform-admin/aues/simulated/citas/grant",{method:"POST",body:JSON.stringify({citas:s})}),onSuccess:()=>{e.invalidateQueries({queryKey:Nr}),n({description:"Citas simuladas concedidas"})},onError:s=>t(s)})}function ji(){return Ie().add(3,"day").hour(9).minute(0).second(0).millisecond(0).toDate()}function fh(){const{data:e,isLoading:n}=hh(),{mutate:t,isPending:s}=Eh(),[i,o]=d.useState(new Set),[r,c]=d.useState(!1),[l,m]=d.useState(ji()),[u,p]=d.useState(15),x=d.useMemo(()=>(e==null?void 0:e.items)??[],[e]),h=d.useMemo(()=>{const S={};return x.forEach(y=>{i.has(y.itemId)&&(S[y.itemId]=!0)}),S},[x,i]),E=d.useMemo(()=>[z({accessorKey:"tenantName",header:"Tenant",value:S=>S.tenantName,min:170,max:220}),z({accessorKey:"studentName",header:"Alumno",value:S=>S.studentName,min:180,max:240}),Ze({accessorKey:"dni",header:"DNI",value:S=>S.dni,min:110}),z({accessorKey:"licenseCode",header:"Permiso",value:S=>S.licenseCode,min:90,max:110}),z({accessorKey:"examType",header:"Tipo de examen",value:S=>S.examType,min:150,max:190}),z({accessorKey:"presentationName",header:"Lista",value:S=>S.presentationName,min:200}),z({accessorKey:"submittedAt",header:"Enviado",value:S=>S.submittedAt?Te(S.submittedAt,"dd/MM/yyyy, HH:mm"):null,min:150,grow:!1}),De({accessorKey:"status",header:"Estado",min:160,tone:S=>gh(S.status),label:S=>ph(S.status).label})],[]),f=_e({columns:E,data:x,enableRowSelection:!0,getRowId:S=>S.itemId,onRowSelectionChange:S=>{const y=typeof S=="function"?S(h):S;o(new Set(Object.keys(y).filter(_=>y[_])))},state:{isLoading:n,showLoadingOverlay:n,rowSelection:h},enableColumnFilters:!1}),b=i.size,v=()=>{if(!l||b===0)return;const y=f.getSortedRowModel().rows.filter(_=>_.getIsSelected()).map((_,T)=>({itemId:_.original.itemId,examDateTime:rd(Ie(l).add(T*u,"minute").toDate()).toISOString()}));t(y,{onSuccess:()=>{c(!1),o(new Set),m(ji()),p(15)}})};return a.jsxs(de,{title:"AUES simulado",children:[a.jsx(X,{title:"Solicitudes pendientes",action:a.jsx(ge,{icon:a.jsx(zl,{size:16}),disabled:b===0,onClick:()=>c(!0),children:`Dar cita (${b})`}),children:a.jsx(xe,{table:f})}),a.jsx(se,{opened:r,onClose:()=>c(!1),title:"Conceder citas simuladas",children:a.jsxs(N,{gap:"md",children:[a.jsx(g,{size:"sm",c:"dimmed",children:`Se concederán citas a ${b} solicitud${b===1?"":"es"}, escalonadas desde la fecha base.`}),a.jsx($l,{label:"Fecha y hora base",value:l,onChange:S=>m(S?Ie(S).toDate():null),valueFormat:"DD/MM/YYYY HH:mm",clearable:!1}),a.jsx(Le,{label:"Minutos entre citas",value:u,onChange:S=>p(typeof S=="number"?S:0),min:0}),a.jsxs(C,{justify:"flex-end",children:[a.jsx(ge,{variant:"secondary",onClick:()=>c(!1),children:"Cancelar"}),a.jsx(ge,{onClick:v,loading:s,disabled:!l,children:"Confirmar"})]})]})})]})}function bh(){const[e,n]=d.useState(null),[t,s]=d.useState(!1),[i,o]=d.useState(null),[r,c]=d.useState(null),l=d.useCallback(async b=>{s(!0),o(null),c(b);try{const v=await A(`/platform-admin/allocation-manager/enrollments/${b}`);n(v)}catch(v){o(v.message||"Error loading enrollment data"),n(null)}finally{s(!1)}},[]),m=d.useCallback(async()=>{r!==null&&await l(r)},[r,l]),u=d.useCallback(async(b,v,S)=>{await A(`/platform-admin/allocation-manager/payment-allocations/${b}/reassign`,{method:"POST",body:JSON.stringify({targetChargeId:v,amount:S})}),await m()},[m]),p=d.useCallback(async(b,v)=>{await A(`/platform-admin/allocation-manager/payment-allocations/${b}`,{method:"DELETE",body:JSON.stringify({advanceChargeId:v,createNewAdvance:!v})}),await m()},[m]),x=d.useCallback(async(b,v,S)=>{await A(`/platform-admin/allocation-manager/invoice-allocations/${b}/reassign`,{method:"POST",body:JSON.stringify({targetChargeId:v,amount:S})}),await m()},[m]),h=d.useCallback(async b=>{await A(`/platform-admin/allocation-manager/invoice-allocations/${b}`,{method:"DELETE"}),await m()},[m]),E=d.useCallback(async(b,v,S)=>
5{await A("/platform-admin/allocation-manager/payment-allocations",{method:"POST",body:JSON.stringify({sourceId:b,chargeId:v,amount:S})}),await m()},[m]),f=d.useCallback(async(b,v,S)=>{await A("/platform-admin/allocation-manager/invoice-allocations",{method:"POST",body:JSON.stringify({sourceId:b,chargeId:v,amount:S})}),await m()},[m]);return{data:e,loading:t,error:i,loadEnrollment:l,reassignPaymentAllocation:u,removePaymentAllocation:p,reassignInvoiceAllocation:x,removeInvoiceAllocation:h,createPaymentAllocation:E,createInvoiceAllocation:f}}function Th(){const[e,n]=d.useState(null),[t,s]=d.useState(!1),[i,o]=d.useState(null),[r,c]=d.useState(null),[l,m]=d.useState(null),u=d.useCallback(async(S,y)=>{s(!0),o(null),c(S),m(y??null);try{const _=y?`?invoiceId=${y}`:"",T=await A(`/platform-admin/allocation-manager/companies/${S}${_}`);n(T)}catch(_){o(_.message||"Error loading company data"),n(null)}finally{s(!1)}},[]),p=d.useCallback(async()=>{r!==null&&await u(r,l??void 0)},[r,l,u]),x=d.useCallback(async(S,y,_)=>{await A(`/platform-admin/allocation-manager/payment-allocations/${S}/reassign`,{method:"POST",body:JSON.stringify({targetChargeId:y,amount:_})}),await p()},[p]),h=d.useCallback(async(S,y)=>{await A(`/platform-admin/allocation-manager/payment-allocations/${S}`,{method:"DELETE",body:JSON.stringify({advanceChargeId:y,createNewAdvance:!y})}),await p()},[p]),E=d.useCallback(async(S,y,_)=>{await A(`/platform-admin/allocation-manager/invoice-allocations/${S}/reassign`,{method:"POST",body:JSON.stringify({targetChargeId:y,amount:_})}),await p()},[p]),f=d.useCallback(async S=>{await A(`/platform-admin/allocation-manager/invoice-allocations/${S}`,{method:"DELETE"}),await p()},[p]),b=d.useCallback(async(S,y,_)=>{await A("/platform-admin/allocation-manager/payment-allocations",{method:"POST",body:JSON.stringify({sourceId:S,chargeId:y,amount:_})}),await p()},[p]),v=d.useCallback(async(S,y,_)=>{await A("/platform-admin/allocation-manager/invoice-allocations",{method:"POST",body:JSON.stringify({sourceId:S,chargeId:y,amount:_})}),await p()},[p]);return{data:e,loading:t,error:i,loadCompany:u,reassignPaymentAllocation:x,removePaymentAllocation:h,reassignInvoiceAllocation:E,removeInvoiceAllocation:f,createPaymentAllocation:b,createInvoiceAllocation:v}}const vh=e=>`${e.toFixed(2)} â¬`;function xh({opened:e,onClose:n,charges:t,currentChargeId:s,currentAmount:i,onConfirm:o}){const[r,c]=d.useState(!1),l=$e({initialValues:{targetChargeId:null,amount:i},validate:{targetChargeId:p=>p?null:"Selecciona un cargo",amount:p=>p===""||p<=0?"El importe es necesario":null}});d.useEffect(()=>{e&&(l.setValues({targetChargeId:null,amount:i}),l.clearErrors(),c(!1))},[e,i]);const m=d.useMemo(()=>t.filter(p=>p.id!==s).map(p=>({value:p.id,label:`${p.code} â ${p.concept} (${vh(p.total)})`})),[t,s]),u=l.onSubmit(async p=>{if(!(!p.targetChargeId||p.amount===""||p.amount<=0)){c(!0);try{await o(p.targetChargeId,p.amount),n()}catch{c(!1)}}});return a.jsx(se,{opened:e,onClose:n,title:"Reasignar Asignación",size:"md",children:a.jsx("form",{onSubmit:u,children:a.jsxs(N,{children:[a.jsx(g,{size:"sm",children:"Selecciona el cargo destino y el importe a reasignar."}),a.jsx(ee,{label:"Cargo destino",placeholder:"Seleccionar cargo",data:m,searchable:!0,...l.getInputProps("targetChargeId")}),a.jsx(Le,{label:"Importe",min:.01,max:i,step:.01,decimalScale:2,fixedDecimalScale:!0,decimalSeparator:",",rightSection:a.jsx(ls,{size:16}),hideControls:!0,...l.getInputProps("amount")}),a.jsxs(C,{justify:"flex-end",children:[a.jsx(O,{variant:"subtle",onClick:n,disabled:r,children:"Cancelar"}),a.jsx(O,{type:"submit",loading:r,children:"Confirmar"})]})]})})})}const Dn=e=>`${e.toFixed(2)} â¬`;function Sh({opened:e,onClose:n,type:t,chargeType:s,chargeRemainingAmount:i,payments:o,invoices:r,onConfirmPayment:c,onConfirmInvoice:l}){const[m,u]=d.useState(!1),p=s==="ADVANCE",x=$e({initialValues:{sourceId:null,amount:""},validate:{sourceId:T=>T?null:"Selecciona una opción",amount:T=>T===""||T===0?"El importe es necesario":null}}),h=d.useMemo(()=>o.filter(T=>!T.isCancelled&&T.availableAmount!==0).map(T=>({id:T.id,label:`${T.code} (${T.date}) â ${Dn(T.amount)}
5 â Disponible: ${Dn(T.availableAmount)}`,available:T.availableAmount})),[o]),E=d.useMemo(()=>r.map(T=>{const j=T.allocations.reduce((ie,D)=>ie+D.amount,0),L=T.hasMixedLineSigns?null:T.total-j,q=L===null?"sin lÃmite":Dn(L);return{id:T.id,label:`${T.documentNumber??"(borrador)"} â ${T.mode} â ${Dn(T.total)} â Disponible: ${q}`,available:L}}),[r]),f=t==="payment"?h:E,b=f.find(T=>T.id===x.values.sourceId),{min:v,max:S}=d.useMemo(()=>p||!b||b.available===null?{min:void 0,max:void 0}:b.available>=0?{min:void 0,max:b.available}:{min:b.available,max:void 0},[p,b]);d.useEffect(()=>{e&&(x.reset(),u(!1))},[e]),d.useEffect(()=>{if(!b)return;const{available:T}=b;if(p){x.setFieldValue("amount",T??"");return}if(T===null){x.setFieldValue("amount","");return}const j=i,L=T>=0?Math.min(T,Math.max(0,j)):Math.max(T,Math.min(0,j));x.setFieldValue("amount",L)},[x.values.sourceId,p,i]);const y=f.map(T=>({value:T.id,label:T.label})),_=x.onSubmit(async T=>{if(!(!T.sourceId||T.amount===""||T.amount===0)){u(!0);try{t==="payment"?await c(T.sourceId,T.amount):await l(T.sourceId,T.amount),n()}catch{u(!1)}}});return a.jsx(se,{opened:e,onClose:n,title:t==="payment"?"Añadir Pago":"Añadir Factura",size:"md",children:a.jsx("form",{onSubmit:_,children:a.jsxs(N,{children:[a.jsx(g,{size:"sm",children:t==="payment"?"Selecciona un pago y el importe a asignar a este cargo.":"Selecciona una factura y el importe a asignar a este cargo."}),p&&a.jsx(g,{size:"xs",c:"orange",fw:500,children:"Cargo ADVANCE: sin lÃmite de importe."}),a.jsx(ee,{label:t==="payment"?"Pago":"Factura",placeholder:"Seleccionar...",data:y,searchable:!0,...x.getInputProps("sourceId")}),a.jsx(Le,{label:"Importe",disabled:!x.values.sourceId,min:v,max:S,step:.01,decimalScale:2,fixedDecimalScale:!0,decimalSeparator:",",rightSection:a.jsx(ls,{size:16}),hideControls:!0,...x.getInputProps("amount")}),a.jsxs(C,{justify:"flex-end",children:[a.jsx(O,{variant:"subtle",onClick:n,disabled:m,children:"Cancelar"}),a.jsx(O,{type:"submit",loading:m,children:"Confirmar"})]})]})})})}const Ar="ADVANCE",La=e=>`${e.toFixed(2)} â¬`;function _h(){const[e,n]=go(),[t,s]=d.useState(null),[i,o]=d.useState(null),[r,c]=d.useState(!1),m=e.get("mode")==="company"?"company":"enrollment",u=e.get("enrollmentId")??"",p=e.get("companyId")??"",x=e.get("invoiceId")??"",[h,E]=d.useState(u?Number(u):""),[f,b]=d.useState(p),[v,S]=d.useState(x),y=bh(),_=Th(),T=m==="enrollment",j=T?y:_,{data:L,loading:q,error:ie}=j,D=d.useCallback((K,pe,Ye,Oa)=>{const ma={};K==="company"?(ma.mode="company",Ye&&(ma.companyId=Ye),Oa&&(ma.invoiceId=Oa)):pe&&pe!==""&&(ma.enrollmentId=String(pe)),n(ma,{replace:!0})},[n]),V=K=>{K==="company"?D("company",void 0,f,v):D("enrollment",h)},Y=()=>{T?typeof h=="number"&&h>0&&(D("enrollment",h),y.loadEnrollment(h)):f.trim()&&(D("company",void 0,f.trim(),v.trim()),_.loadCompany(f.trim(),v.trim()||void 0))};d.useEffect(()=>{if(!r)if(c(!0),m==="enrollment"&&u){const K=Number(u);K>0&&y.loadEnrollment(K)}else m==="company"&&p&&_.loadCompany(p,x||void 0)},[]);const Ke=K=>{K.key==="Enter"&&Y()},Fe=async K=>{if(!window.confirm("¿Eliminar esta asignación de pago?"))return;const pe=L==null?void 0:L.charges.find(Ye=>Ye.type===Ar);await j.removePaymentAllocation(K,pe==null?void 0:pe.id)},ta=async K=>{window.confirm("¿Eliminar esta asignación de factura?")&&await j.removeInvoiceAllocation(K)},da=async(K,pe)=>{t&&(t.type==="reassign-payment"?await j.reassignPaymentAllocation(t.allocationId,K,pe):await j.reassignInvoiceAllocation(t.allocationId,K,pe))},va=async(K,pe)=>{i&&await j.createPaymentAllocation(K,i.chargeId,pe)},ua=async(K,pe)=>{i&&await j.createInvoiceAllocation(K,i.chargeId,pe)},M=(L==null?void 0:L.charges)??[],sa=(L==null?void 0:L.payments)??[],ia=(L==null?void 0:L.invoices)??[];return a.jsxs(N,{p:"md",children:[a.jsx(Pe,{order:2,children:"Allocation Manager"}),a.jsx(Hl,{value:m,onChange:V,data:[{label:"MatrÃcula",value:"enrollment"},{label:"Empresa",value:"company"}],style:{alignSelf:"flex-start"}}),T?a.jsxs(C,{children:[a.jsx(Le,{placeholder:"Enrollment ID",hideControls:!0,style:{width:200},value:h,onChange:E,onKeyDown:Ke}),a.jsx(O,{leftSection:a.jsx(ea,{size:16}),onClick:Y,loading:q,children:"Cargar"})]}):a.jsxs(C,{children:[a.jsx(W,{placeholder:"Company ID (UUID)",style:{width:340},value:f,onChange:K=>b(K.currentTarget.value),onKeyDown:Ke}),a.jsx(W,{placeholder:"Invoice ID (UUID, opcional)",style:{width:340}
5,value:v,onChange:K=>S(K.currentTarget.value),onKeyDown:Ke}),a.jsx(O,{leftSection:a.jsx(ea,{size:16}),onClick:Y,loading:q,children:"Cargar"})]}),ie&&a.jsx(Ue,{color:"red",icon:a.jsx(co,{size:16}),children:ie}),L&&a.jsx(N,{gap:"md",children:M.map(K=>a.jsx(Ch,{charge:K,onReassignPayment:(pe,Ye)=>s({type:"reassign-payment",allocationId:pe,currentAmount:Ye,currentChargeId:K.id}),onRemovePayment:Fe,onReassignInvoice:(pe,Ye)=>s({type:"reassign-invoice",allocationId:pe,currentAmount:Ye,currentChargeId:K.id}),onRemoveInvoice:ta,onAddPayment:()=>o({type:"payment",chargeId:K.id,chargeType:K.type,chargeRemainingAmount:K.total-K.paidAmount}),onAddInvoice:()=>o({type:"invoice",chargeId:K.id,chargeType:K.type,chargeRemainingAmount:K.total-K.invoicedAmount})},K.id))}),a.jsx(xh,{opened:t!==null,onClose:()=>s(null),charges:M,currentChargeId:(t==null?void 0:t.currentChargeId)??"",currentAmount:(t==null?void 0:t.currentAmount)??0,onConfirm:da}),a.jsx(Sh,{opened:i!==null,onClose:()=>o(null),type:(i==null?void 0:i.type)??"payment",chargeType:(i==null?void 0:i.chargeType)??"SERVICE",chargeRemainingAmount:(i==null?void 0:i.chargeRemainingAmount)??0,payments:sa,invoices:ia,onConfirmPayment:va,onConfirmInvoice:ua})]})}function Ch({charge:e,onReassignPayment:n,onRemovePayment:t,onReassignInvoice:s,onRemoveInvoice:i,onAddPayment:o,onAddInvoice:r}){const c=e.paidAmount!==e.total,l=e.invoicedAmount!==e.total;return a.jsxs(so,{withBorder:!0,padding:"md",children:[a.jsxs(C,{justify:"space-between",mb:"xs",children:[a.jsxs(C,{gap:"sm",children:[a.jsx(g,{fw:600,size:"sm",children:e.code}),a.jsx(g,{size:"xs",c:"dimmed",children:e.date}),a.jsx(g,{size:"sm",c:"dimmed",children:"â"}),a.jsx(g,{size:"sm",children:e.concept}),a.jsx(Se,{tone:e.type===Ar?"alert":"info",quiet:!0,children:e.type})]}),a.jsx(g,{fw:700,size:"sm",children:La(e.total)})]}),a.jsxs(C,{gap:"lg",mb:"md",children:[a.jsxs(g,{size:"xs",children:["Cobrado:"," ",a.jsx(g,{span:!0,fw:600,c:c?"red":"green",children:La(e.paidAmount)})]}),a.jsxs(g,{size:"xs",children:["Facturado:"," ",a.jsx(g,{span:!0,fw:600,c:l?"red":"green",children:La(e.invoicedAmount)})]}),a.jsxs(g,{size:"xs",children:["Pendiente:"," ",a.jsx(g,{span:!0,fw:600,children:La(e.outstandingAmount)})]})]}),a.jsxs(N,{gap:"sm",children:[a.jsxs(fa,{p:"xs",bg:"gray.0",radius:"sm",children:[a.jsxs(C,{justify:"space-between",mb:4,children:[a.jsx(g,{size:"xs",fw:600,children:"Pagos asignados"}),a.jsx(oe,{label:"Añadir pago",children:a.jsx(J,{variant:"subtle",size:"sm",color:"green",onClick:o,children:a.jsx(Ne,{size:14})})})]}),e.paymentAllocations.length===0?a.jsx(g,{size:"xs",c:"dimmed",fs:"italic",children:"Sin asignaciones de pago"}):a.jsxs(P,{fz:"xs",verticalSpacing:4,children:[a.jsx(P.Thead,{children:a.jsxs(P.Tr,{children:[a.jsx(P.Th,{children:"Pago"}),a.jsx(P.Th,{children:"Fecha"}),a.jsx(P.Th,{children:"Importe"}),a.jsx(P.Th,{w:80,children:"Acciones"})]})}),a.jsx(P.Tbody,{children:e.paymentAllocations.map(m=>a.jsxs(P.Tr,{children:[a.jsx(P.Td,{children:m.paymentCode}),a.jsx(P.Td,{children:m.paymentDate}),a.jsx(P.Td,{children:La(m.amount)}),a.jsx(P.Td,{children:a.jsxs(C,{gap:4,children:[a.jsx(oe,{label:"Reasignar",children:a.jsx(J,{variant:"subtle",size:"sm",onClick:()=>n(m.id,m.amount),children:a.jsx(zs,{size:14})})}),a.jsx(oe,{label:"Eliminar",children:a.jsx(J,{variant:"subtle",color:"red",size:"sm",onClick:()=>t(m.id),children:a.jsx(ze,{size:14})})})]})})]},m.id))})]})]}),a.jsxs(fa,{p:"xs",bg:"gray.0",radius:"sm",children:[a.jsxs(C,{justify:"space-between",mb:4,children:[a.jsx(g,{size:"xs",fw:600,children:"Facturas"}),a.jsx(oe,{label:"Añadir factura",children:a.jsx(J,{variant:"subtle",size:"sm",color:"green",onClick:r,children:a.jsx(Ne,{size:14})})})]}),e.invoiceAllocations.length===0?a.jsx(g,{size:"xs",c:"dimmed",fs:"italic",children:"Sin asignaciones de factura"}):a.jsxs(P,{fz:"xs",verticalSpacing:4,children:[a.jsx(P.Thead,{children:a.jsxs(P.Tr,{children:[a.jsx(P.Th,{children:"Documento"}),a.jsx(P.Th,{children:"Fecha"}),a.jsx(P.Th,{children:"Total factura"}),a.jsx(P.Th,{children:"Asignado"}),a.jsx(P.Th,{w:80,children:"Acciones"})]})}),a.jsx(P.Tbody,{children:e.invoiceAllocations.map(m=>a.jsxs(P.Tr,{children:[a.jsx(P.Td,{children:m.documentNumber??"(sin número)"}),a.jsx(P.Td,{children:m.issueDate}),a.jsx(P.Td,{children:La(m.total)}),a.jsx(P.Td,{children:La(m.amount)}),a.jsx(P.Td,{children:a.jsxs(C,{gap:4,children:[a.jsx(oe,{label:"Reasignar",children:a.jsx(J,{variant:"subtle",size:"sm",onClick:()=>s(m.id,m.amount),children:a.jsx(zs,{size:14})})}),a.jsx(oe,{label:"Eliminar",children:a.jsx(J,{variant:"subtle",color:"red",size:"sm",onClick:()=>i(m.id),children:a.jsx(ze,{size:14})})})]})})]},m.id))})]})]})]})]})}const Nh={manager:"Usuarios Managers",non_manager:"Usuarios no Managers",instructor:"Profesores"},Ah={draft:"neutral",published:"good",archived:"alert"},yh={draft:"Borrador",published:"Publicado",archived:"Archivado"};
5function Ih(){const[e,n]=d.useState(null),{data:t,isLoading:s}=eu(e??void 0),i=d.useMemo(()=>[z({accessorKey:"title",header:"TÃtulo",value:r=>r.title,link:r=>$.announcementEdit(r.id),min:300}),{accessorKey:"audience",header:"Audiencia",size:260,grow:!1,Cell:({row:r})=>a.jsx(C,{gap:4,children:r.original.audience.map(c=>a.jsx(Se,{tone:"brand",children:Nh[c]??c},c))})},De({accessorKey:"status",header:"Estado",min:120,tone:r=>Ah[r.status]??"neutral",label:r=>yh[r.status]??r.status}),z({accessorKey:"publishedAt",header:"Fecha publicación",value:r=>r.publishedAt?new Date(r.publishedAt).toLocaleDateString("es-ES"):null,min:160,grow:!1})],[]),o=_e({columns:i,data:t??[],rowClickPath:r=>$.announcementEdit(r.original.id),enableTopToolbar:!1,enablePagination:!1,enableBottomToolbar:!1,state:{isLoading:s},renderEmptyRowsFallback:()=>a.jsx(ve,{py:"xl",children:a.jsxs(N,{align:"center",gap:"xs",children:[a.jsx(to,{size:40,style:{color:"var(--mantine-color-gray-4)"}}),a.jsx(g,{c:"dimmed",children:"No hay novedades"}),a.jsx(g,{c:"dimmed",size:"sm",children:"Crea una novedad para comunicar cambios a tus usuarios"})]})})});return a.jsx(de,{title:"Novedades",actionButton:{label:"Nueva novedad",to:"/announcements/new",icon:a.jsx(Ne,{size:16})},children:a.jsx(X,{children:a.jsxs(N,{gap:"md",children:[a.jsx(ee,{placeholder:"Filtrar por estado",data:[{value:"draft",label:"Borrador"},{value:"published",label:"Publicado"},{value:"archived",label:"Archivado"}],value:e,onChange:n,clearable:!0,w:200}),a.jsx(xe,{table:o})]})})})}const jh=d.lazy(()=>mt(()=>import("./HugeRTEditor-CDWUYL7I.js"),__vite__mapDeps([7,1,2,8,9,10])).then(e=>({default:e.HugeRTEditor}))),Rh=[{value:"manager",label:"Usuarios Managers"},{value:"non_manager",label:"Usuarios no Managers"},{value:"instructor",label:"Profesores"}];function Ri(){const{id:e}=ja(),n=aa(),t=!!e,{data:s}=au(e),{data:i}=nu(e),o=tu(),r=su(),c=iu(),l=ou(),m=ru(),[u,{open:p,close:x}]=Za(!1),[h,{open:E,close:f}]=Za(!1),b=$e({initialValues:{title:"",body:"",audience:[]}});d.useEffect(()=>{s&&b.setValues({title:s.title,body:s.body,audience:s.audience})},[s]);const v=async()=>{const _=b.values;try{if(t)await r.mutateAsync({id:e,..._});else{const T=await o.mutateAsync(_);n($.announcementEdit(T.id),{replace:!0})}}catch{return!1}return!0},S=async()=>{if(!(!t||!await v()))try{await c.mutateAsync(e)}catch{return}},y=s==null?void 0:s.status;return a.jsxs(de,{title:t?"Editar novedad":"Nueva novedad",backButton:{label:"Volver",to:"/announcements",icon:a.jsx(hn,{size:16})},children:[a.jsx(X,{children:a.jsxs(N,{gap:"lg",children:[a.jsx(W,{label:"TÃtulo",placeholder:"TÃtulo de la novedad",...b.getInputProps("title")}),a.jsx(pt,{label:"Audiencia",placeholder:"Selecciona quién verá esta novedad",data:Rh,...b.getInputProps("audience")}),a.jsx(d.Suspense,{fallback:a.jsx(ve,{h:300,children:a.jsx(me,{size:"sm"})}),children:a.jsx(jh,{value:b.values.body,onChange:_=>b.setFieldValue("body",_),placeholder:"Escribe el contenido de la novedad..."})}),a.jsxs(C,{justify:"space-between",children:[a.jsxs(C,{children:[a.jsx(O,{variant:"light",leftSection:a.jsx(vn,{size:16}),onClick:p,children:"Vista previa"}),t&&y==="published"&&a.jsx(O,{variant:"light",leftSection:a.jsx(To,{size:16}),onClick:E,children:"Ver lecturas"})]}),a.jsxs(C,{children:[(!y||y==="draft")&&a.jsxs(a.Fragment,{children:[a.jsx(O,{variant:"default",onClick:v,loading:o.isPending||r.isPending,children:"Guardar borrador"}),a.jsx(O,{onClick:S,loading:c.isPending,children:"Publicar"})]}),y==="published"&&a.jsxs(a.Fragment,{children:[a.jsx(O,{variant:"default",onClick:v,loading:r.isPending,children:"Guardar cambios"}),a.jsx(O,{color:"orange",onClick:()=>l.mutate(e),loading:l.isPending,children:"Archivar"})]}),y==="archived"&&a.jsx(O,{onClick:()=>m.mutate(e),loading:m.isPending,children:"Desarchivar"})]})]})]})}),a.jsx(Zu,{announcement:{id:"preview",title:b.values.title,body:b.values.body,audience:b.values.audience,publishedAt:new Date().toISOString(),read:!1},opened:u,onClose:x}),a.jsx(se,{opened:h,onClose:f,title:"Lecturas",size:"lg",children:a.jsxs(P,{children:[a.jsx(P.Thead,{children:a.jsxs(P.Tr,{children:[a.jsx(P.Th,{children:"Tenant"}),a.jsx(P.Th,{children:"Usuario"}),a.jsx(P.Th,{children:"Fecha"})]})}),a.jsx(P.Tbody,{children:i==null?void 0:i.map((_,T)=>a.jsxs(P.Tr,{children:[a.jsx(P.Td,{children:_.tenant_name}),a.jsx(P.Td,{children:_.user_name}
5),a.jsx(P.Td,{children:new Date(_.read_at).toLocaleString("es-ES")})]},T))})]})})]})}function Oh(){const[e,n]=d.useState(!1),{data:t=[],isLoading:s}=Sp(),i=ur(),o=mr();return a.jsxs(de,{title:"Documentos",description:"Documentos globales visibles para todos los tenants",actionButton:{label:"Nuevo documento",icon:a.jsx(Ne,{size:16}),onClick:()=>n(!0)},children:[a.jsx(hr,{documents:t,isLoading:s,showSignatureStatus:!1,onDownload:o,onDelete:r=>i.mutate(r),isDeleting:i.isPending}),a.jsx(pr,{opened:e,onClose:()=>n(!1),tenantId:null})]})}function Lh(){return w({queryKey:["platformLicenses"],queryFn:()=>A("/platform-admin/licenses"),staleTime:600*1e3})}function vt(){const{data:e}=Lh();return d.useMemo(()=>{const n=(e==null?void 0:e.licenses)??[],t=n.filter(i=>i.isOfficial).map(i=>({value:i.code,label:i.name})),s={};for(const i of n)s[i.code]=i.name;return{options:t,nameByCode:s}},[e])}const Ts=["examSimulationCriteria"];function Dh(){return w({queryKey:Ts,queryFn:()=>A("/platform-admin/simulation-criteria")})}function Mh(e){return w({queryKey:[...Ts,e],queryFn:()=>A(`/platform-admin/simulation-criteria/${e}`),enabled:e!=null})}function xt(e){e.invalidateQueries({queryKey:Ts})}function Ph(){const e=H(),{showSuccessToast:n}=F(),{handleError:t}=Q();return U({mutationFn:s=>A("/platform-admin/simulation-criteria",{method:"POST",body:JSON.stringify(s)}),onSuccess:()=>{xt(e),n({description:"Cuadro de criterios creado correctamente."})},onError:s=>t(s)})}function wh(e){const n=H(),{showSuccessToast:t}=F(),{handleError:s}=Q();return U({mutationFn:i=>A(`/platform-admin/simulation-criteria/${e}`,{method:"PUT",body:JSON.stringify(i)}),onSuccess:()=>{xt(n),t({description:"Cambios guardados correctamente."})},onError:i=>s(i)})}function Fh(){const e=H(),{showSuccessToast:n}=F(),{handleError:t}=Q();return U({mutationFn:s=>A(`/platform-admin/simulation-criteria/${s}/clone`,{method:"POST"}),onSuccess:()=>{xt(e),n({description:"Cuadro de criterios duplicado correctamente."})},onError:s=>t(s)})}function Uh(){const e=H(),{showSuccessToast:n}=F(),{handleError:t}=Q();return U({mutationFn:s=>A(`/platform-admin/simulation-criteria/${s}/archive`,{method:"POST"}),onSuccess:()=>{xt(e),n({description:"Cuadro de criterios archivado."})},onError:s=>t(s)})}const kh={[Cn]:"brand",[bt]:"info"},zh={[Cn]:"Destreza",[bt]:"Circulación"},$h=[{value:Cn,label:"Destreza"},{value:bt,label:"Circulación"}];function Hh({opened:e,onClose:n}){const t=aa(),s=Ph(),{options:i}=vt(),o=$e({initialValues:{name:"",practiceType:Cn,licenseCodes:[]},validate:{name:l=>l.trim()?null:"El nombre es obligatorio",practiceType:l=>l?null:"El tipo es obligatorio"}}),r=async l=>{let m;try{m=await s.mutateAsync(l)}catch{return}n(),o.reset(),t($.simulationCriteria(m.id))},c=()=>{s.isPending||(n(),o.reset())};return a.jsx(se,{opened:e,onClose:c,title:"Nuevo cuadro de criterios",centered:!0,size:"md",children:a.jsx("form",{onSubmit:o.onSubmit(r),children:a.jsxs(N,{gap:"md",children:[a.jsx(W,{label:"Nombre",placeholder:"Ej. Criterios B â Destreza 2024",required:!0,...o.getInputProps("name")}),a.jsx(ee,{label:"Tipo de práctica",data:$h,required:!0,comboboxProps:{withinPortal:!0},...o.getInputProps("practiceType")}),a.jsx(ee,{label:"Permisos aplicables",data:i,placeholder:"Opcional",clearable:!0,comboboxProps:{withinPortal:!0},value:o.values.licenseCodes[0]??null,onChange:l=>o.setFieldValue("licenseCodes",l?[l]:[])}),a.jsxs(C,{justify:"flex-end",children:[a.jsx(O,{variant:"subtle",onClick:c,disabled:s.isPending,children:"Cancelar"}),a.jsx(O,{type:"submit",loading:s.isPending,children:"Crear y editar"})]})]})})})}function qh(){const e=aa(),{data:n,isLoading:t}=Dh(),s=Fh(),i=Uh(),{nameByCode:o}=vt(),[r,{open:c,close:l}]=Za(!1),m=d.useMemo(()=>[z({accessorKey:"name",header:"Nombre",value:p=>p.name,min:200}),{...De({accessorKey:"practiceType",header:"Tipo",min:110,max:150,tone:p=>kh[p.practiceType]??"neutral",label:p=>zh[p.practiceType]??p.practiceType}),enableColumnFilter:!1,enableSorting:!1},{id:"applicableLicenseCodes",header:"Permisos",...Be({min:120,max:240}),enableColumnFilter:!1,enableSorting:!1,Cell:({row:p})=>{const x=p.original.applicableLicenseCodes;return x.length===0?a.jsx(g,{size:"sm",c:"dimmed",children:"â"}):a.jsx(C,{gap:"xs",wrap:"nowrap",children:x.map(h=>a.jsx(tn,{children:o[h]??h},h))})}},{accessorKey:"categoryCount",header:"Maniobras",...Be({min:100,max:120}),enableColumnFilter:!1,enableSorting:!1,Cell:({row:p})=>a.jsx(g,{size:"sm",style:ba,children:p.original.categoryCount})}],[o]),u=_e({columns:m,data:(n==null?void 0:n.criteria)??[],rowClickPath:p=>$.simulationCriteria(p.original.id),state:{isLoading:t},enableTopToolbar:!1,enablePagination:!1,enableBottomToolbar:!1,enableRowActions:!0,displayColumnDefOptions:{"mrt-row-actions":{size:220,mantineTableBodyCellProps:{align:"right"}}},renderRowActions:({row:p})=>a.jsxs(C,{gap:4,wrap:"nowrap",justify:"flex-end",children:[a.jsx(O,{size:"xs",variant:"subtle",leftSection:a.jsx(po,{size:13}),loading:s.isPending,onClick:x=>{x.stopPropagation(),s.mutate(p.original.id,{onSuccess:h=>e($.simulationCriteria(h.id))})},children:"Clonar"}),a.jsx(O,{size:"xs",variant:"subtle",color:"orange",leftSection:a.jsx(mo,{size:13}),loading:i.isPending,onClick:x=>{x.stopPropagation(),i.mutate(p.original.id)},children:"Archivar"})]}),renderEmptyRowsFallback:()=>a.jsx(ve,{py:"xl",children:a.jsxs(N,{align:"center",gap:"xs",children:[a.jsx(vo,{size:40,style:{color:"var(--mantine-color-gray-4)"}}),a.jsx(g,{c:"dimmed",children:"No hay criterios de simulacro"}),a.jsx(g,{c:"dimmed",size:"sm",children:'Crea el primero con el botón "Nuevo"'})]})})});return a.jsxs(a.Fragment,{children:[a.jsx(de,{title:"Criterios de simulacro",description:"Plantillas de evaluación para los simulacros de examen práctico",actionButton:{label:"Nuevo",icon:a.jsx(Ne,{size:16}),onClick:c},children:a.jsx(X,{children:a.jsx(xe,{table:u})})}),a.jsx(Hh,{opened:r,onClose:l})]})}function Bh({baremo:e,onChange:n}){const t=o=>r=>n({...e,[o]:typeof r=="number"?r:0}),s=(o,r,c)=>`${o} ${o===1?r:c}`,i=`El aspirante es NO APTO con ${s(e.eliminatoryLimit,"falta eliminatoria","faltas eliminatorias")}, con ${s(e.deficientLimit,"falta deficiente","faltas deficientes")}, con 1 falta deficiente y ${s(e.lightWithOneDeficientLimit,"leve","leves")}, o con ${s(e.lightLimit,"falta leve","faltas leves")}.`;return a.jsxs(N,{gap:"sm",children:[a.jsx(g,{size:"sm",c:"dimmed",children:"Cada campo es la cantidad de faltas con la que el aspirante pasa a ser NO APTO. Basta con alcanzar cualquiera de los lÃmites."}),a.jsxs(Ua,{cols:{base:2,sm:4},spacing:"md",children:[a.jsx(Le,{label:"Eliminatorias",description:"No apto a partir de esta cantidad",min:0,value:e.eliminatoryLimit,onChange:t
5("eliminatoryLimit")}),a.jsx(Le,{label:"Deficientes",description:"No apto a partir de esta cantidad",min:0,value:e.deficientLimit,onChange:t("deficientLimit")}),a.jsx(Le,{label:"Leves (con 1 deficiente)",description:"Con 1 deficiente, no apto a partir de estas leves",min:0,value:e.lightWithOneDeficientLimit,onChange:t("lightWithOneDeficientLimit")}),a.jsx(Le,{label:"Leves",description:"No apto a partir de esta cantidad",min:0,value:e.lightLimit,onChange:t("lightLimit")})]}),a.jsx(g,{size:"sm",fw:500,children:i})]})}const Kh=[{value:"leve",label:"Leve"},{value:"deficiente",label:"Deficiente"},{value:"eliminatoria",label:"Eliminatoria"}];function Yh({item:e,index:n,total:t,claves:s,onChange:i,onMoveUp:o,onMoveDown:r,onRemove:c}){const{options:l}=vt(),m=s.filter(u=>u.id!=null).map(u=>({value:u.id,label:`${u.number} â ${u.name}`}));return a.jsx(he,{style:{border:"1px solid var(--mantine-color-gray-2)",borderRadius:"var(--mantine-radius-md)",padding:"10px 12px",backgroundColor:"var(--mantine-color-gray-0)"},children:a.jsxs(N,{gap:"xs",children:[a.jsxs(C,{gap:"sm",align:"flex-end",wrap:"nowrap",children:[a.jsx(W,{label:"Código",size:"xs",style:{width:90,flexShrink:0},value:e.code,onChange:u=>i({code:u.currentTarget.value})}),a.jsx(W,{label:"Nombre",size:"xs",style:{flex:1,minWidth:0},value:e.name,onChange:u=>i({name:u.currentTarget.value})}),a.jsx(ee,{label:"Gravedad fija",size:"xs",style:{width:150,flexShrink:0},data:Kh,value:e.severity,onChange:u=>i({severity:u}),clearable:!0,placeholder:"Sin fijar",comboboxProps:{withinPortal:!0}}),a.jsx(ee,{label:"Clave",size:"xs",style:{width:140,flexShrink:0},data:m,value:e.claveId,onChange:u=>i({claveId:u}),clearable:!0,placeholder:"â",disabled:m.length===0,comboboxProps:{withinPortal:!0}}),a.jsxs(C,{gap:4,style:{marginBottom:2,flexShrink:0},children:[a.jsx(J,{variant:"subtle",size:"sm",disabled:n===0,onClick:o,children:a.jsx(rt,{size:13})}),a.jsx(J,{variant:"subtle",size:"sm",disabled:n===t-1,onClick:r,children:a.jsx(ot,{size:13})}),a.jsx(J,{variant:"subtle",size:"sm",color:"red",onClick:c,children:a.jsx(ze,{size:13})})]})]}),a.jsxs(C,{gap:"sm",align:"flex-start",wrap:"wrap",children:[a.jsx(pt,{label:"Permisos aplicables",size:"xs",style:{flex:1,minWidth:160},data:l,value:e.applicableLicenseCodes,onChange:u=>i({applicableLicenseCodes:u}),placeholder:"Todos",comboboxProps:{withinPortal:!0}}),a.jsx(Fa,{label:"Observaciones",size:"xs",style:{flex:2,minWidth:200},autosize:!0,minRows:1,maxRows:3,value:e.observations??"",onChange:u=>i({observations:u.currentTarget.value||null})})]})]})})}function Vh(){return{_key:crypto.randomUUID(),code:"",name:"",severity:null,claveId:null,observations:null,applicableLicenseCodes:[]}}function Gh(){return{_key:crypto.randomUUID(),code:"",name:"",items:[]}}function Wh({categories:e,claves:n,criteriaLicenseCodes:t,onChange:s}){const i=(h,E)=>s(e.map(f=>f._key===h?{...f,...E}:f)),o=h=>s(e.filter(E=>E._key!==h)),r=(h,E)=>{const f=[...e];[f[h],f[h+E]]=[f[h+E],f[h]],s(f)},c=(h,E)=>s(e.map(f=>f._key===h?{...f,items:E}:f)),l=(h,E)=>{E.stopPropagation();const f=e.find(b=>b._key===h);f&&c(h,f.items.map(b=>({...b,applicableLicenseCodes:[...t]})))},m=(h,E)=>{E.stopPropagation();const f=e.find(b=>b._key===h);f&&c(h,[...f.items,Vh()])},u=(h,E,f)=>s(e.map(b=>b._key===h?{...b,items:b.items.map(v=>v._key===E?{...v,...f}:v)}:b)),p=(h,E)=>s(e.map(f=>f._key===h?{...f,items:f.items.filter(b=>b._key!==E)}:f)),x=(h,E,f)=>{const b=e.find(S=>S._key===h);if(!b)return;const v=[...b.items];[v[E],v[E+f]]=[v[E+f],v[E]],c(h,v)};return a.jsxs(N,{gap:"sm",children:[e.length===0&&a.jsx(g,{c:"dimmed",size:"sm",children:"Sin categorÃas. Añade la primera con el botón."}),a.jsx(we,{variant:"separated",multiple:!0,chevronPosition:"left",children:e.map((h,E)=>a.jsxs(we.Item,{value:h._key,children:[a.jsxs(he,{style:{display:"flex",alignItems:"center"},children:[a.jsx(we.Control,{style:{flex:1,minWidth:0},children:a.jsxs(C,{gap:"sm",wrap:"nowrap",style:{minWidth:0},children:[h.code&&a.jsx(tn,{style:{flexShrink:0},children:h.code}),a.jsx(g,{size:"sm",fw:500,style:{minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:h.name||a.jsx(g,{span:!0,c:"dimmed",size:"sm",children:"Sin nombre"})}),a.jsxs(g,{size:"xs",c:"dimmed",style:{flexShrink:0},children:["(",h.items.length," Ãtems)"]})]})}),a.jsxs(C,{gap:4,style:{paddingRight:12,flexShrink:0},children:[a.jsx(J,{variant:"subtle",size:"sm",disabled:E===0,onClick:f=>{f.stopPropagation(),r(E,-1)},children:a.jsx(rt,{size:13})}),a.jsx(J,{variant:"subtle",size:"sm",disabled:E===e.length-1,onClick:f=>{f.stopPropagation(),r(E,1)},children:a.jsx(ot,{size:13})}),a.jsx(J,{variant:"subtle",size:"sm",color:"red",onClick:f=>{f.stopPropagation(),o(h._key)},children:a.jsx(ze,{size:13})})]})]}),a.jsx(we.Panel,{children:a.jsxs(N,{gap:"md",children:[a.jsxs(C,{gap:"sm",align:"flex-end",wrap:"wrap",children:[a.jsx(W,{label:"Código",size:"xs",style:{width:100},value:h.code,onChange:f=>i(h._key,{code:f.currentTarget.value})}),a.jsx(W,{label:"Nombre de la maniobra",size:"xs",style:{flex:1,minWidth:160},value:h.name,onChange:f=>i(h._key,{name:f.currentTarget.value})}),t.length>0&&a.jsx(oe,{label:`Copia los permisos del criterio (${t.join(", ")}) a todos los Ãtems de esta maniobra`,withArrow:!0,multiline:!0,w:240,children:a.jsx(O,{size:"xs",variant:"subtle",leftSection:a.jsx(ql,{size:13}),onClick:f=>l(h._key,f),style:{marginBottom:2},children:"Aplicar licencias de la maniobra a sus Ãtems"})})]}),a.jsxs(N,{gap:"xs",children:[h.items.map((f,b)=>a.jsx(Yh,{item:f,index:b,total:h.items.length,claves:n,onChange:v=>u(h._key,f._key,v),onMoveUp:()=>x(h._key,b,-1),onMoveDown:()=>x(h._key,b,1),onRemove:()=>p(h._key,f._key)},f._key)),h.items.length===0&&a.jsx(g,{size:"xs",c:"dimmed",children:"Sin Ãtems en esta maniobra."}),a.jsx("div",{children:a.jsx(O,{size:"xs",variant:"light",leftSection:a.jsx(Ne,{size:13}),onClick:f=>m(h._key,f),children:"Añadir Ãtem"})})]})]})})]},h._key))}),a.jsx("div",{children:a.jsx(O,{size:"sm",variant:"light",leftSection:a.jsx(Ne,{size:14}),onClick:()=>s([...e,Gh()]),children:"Añadir maniobra"})})]})}function Xh({claves:e,onChange:n}){const t=()=>n([...e,{_key:crypto.randomUUID(),number:e.length+1,name:""}]),s=r=>n(e.filter(c=>c._key!==r)),i=(r,c)=>{const l=[...e];[l[r],l[r+c]]=[l[r+c],l[r]],n(l)},o=(r,c)=>n(e.map(l=>l._key===r?{...l,...c}:l));return a.jsxs(N,{gap:"sm",children:[e.length===0&&a.jsx(g,{c:"dimmed",size:"sm",children:"Sin claves. Añade la primera con el botón."}),e.map((r,c)=>a.jsxs(C,{gap:"sm",align:"flex-end",wrap:"nowrap",children:[a.jsx(Le,{label:c===0?"Nº":void 0,"aria-label":"Número de clave",min:1,style:{width:72,flexShrink:0},value:r.number,onChange:l=>o(r._key,{number:typeof l=="number"?l:1})}
5),a.jsx(W,{label:c===0?"Nombre":void 0,"aria-label":"Nombre de clave",style:{flex:1},value:r.name,onChange:l=>o(r._key,{name:l.currentTarget.value})}),!r.id&&a.jsx(oe,{label:"Disponible en Ãtems tras guardar",withArrow:!0,children:a.jsx(g,{size:"xs",c:"orange.6",style:{marginBottom:6,flexShrink:0,cursor:"default"},children:"nueva"})}),a.jsxs(C,{gap:4,style:{marginBottom:2,flexShrink:0},children:[a.jsx(J,{variant:"subtle",size:"sm",disabled:c===0,onClick:()=>i(c,-1),children:a.jsx(rt,{size:13})}),a.jsx(J,{variant:"subtle",size:"sm",disabled:c===e.length-1,onClick:()=>i(c,1),children:a.jsx(ot,{size:13})}),a.jsx(J,{variant:"subtle",size:"sm",color:"red",onClick:()=>s(r._key),children:a.jsx(ze,{size:13})})]})]},r._key)),a.jsx("div",{children:a.jsx(O,{size:"xs",variant:"light",leftSection:a.jsx(Ne,{size:13}),onClick:t,children:"Añadir clave"})})]})}function Qh(e){return{name:e.name,applicableLicenseCodes:e.applicableLicenseCodes,baremo:{...e.baremo},claves:e.claves.map(n=>({_key:n.id,id:n.id,number:n.number,name:n.name})),categories:e.categories.map(n=>({_key:n.id,id:n.id,code:n.code,name:n.name,items:n.items.map(t=>({_key:t.id,id:t.id,code:t.code,name:t.name,severity:t.severity,claveId:t.claveId,observations:t.observations,applicableLicenseCodes:t.applicableLicenseCodes}))}))}}function Jh(e){return{name:e.name,licenseCodes:e.applicableLicenseCodes,baremo:e.baremo,claves:e.claves.map(({id:n,number:t,name:s})=>({...n?{id:n}:{},number:t,name:s})),categories:e.categories.map(({id:n,code:t,name:s,items:i})=>({...n?{id:n}:{},code:t,name:s,items:i.map(({id:o,code:r,name:c,severity:l,claveId:m,observations:u,applicableLicenseCodes:p})=>({...o?{id:o}:{},code:r,name:c,severity:l,claveId:m,observations:u,licenseCodes:p}))}))}}function Zh(){const{id:e}=ja(),{data:n,isLoading:t}=Mh(e),s=wh(e??""),{options:i}=vt(),[o,r]=d.useState(null),[c,l]=d.useState(""),m=d.useRef(!1);d.useEffect(()=>{if(n&&!m.current){const h=Qh(n);r(h),l(JSON.stringify(h)),m.current=!0}},[n]);const u=o!==null&&JSON.stringify(o)!==c;d.useEffect(()=>{const h=E=>{u&&E.preventDefault()};return window.addEventListener("beforeunload",h),()=>window.removeEventListener("beforeunload",h)},[u]);const p=()=>{!o||!e||s.mutate(Jh(o),{onSuccess:()=>l(JSON.stringify(o))})};if(t)return a.jsx(ve,{h:300,children:a.jsx(me,{size:"lg"})});if(!n||!o)return null;const x=er[n.practiceType]??n.practiceType;return a.jsx(a.Fragment,{children:a.jsx(de,{title:a.jsxs(C,{gap:"xs",align:"center",wrap:"wrap",children:[a.jsx(g,{component:"span",fw:600,size:"xl",children:o.name||n.name}),a.jsx(tn,{children:x}),u&&a.jsx(Ca,{color:"orange",variant:"dot",size:"sm",children:"Sin guardar"})]}),backButton:{label:"Volver a la lista",to:$.simulationCriteria()},actionButton:{label:"Guardar",icon:a.jsx(io,{size:16}),onClick:p,loading:s.isPending,disabled:!u},children:a.jsxs(N,{gap:"md",children:[a.jsx(X,{title:"Configuración general",children:a.jsxs(N,{gap:"md",children:[a.jsx(W,{label:"Nombre",value:o.name,onChange:h=>r(E=>E&&{...E,name:h.currentTarget.value})}),a.jsx(pt,{label:"Permisos aplicables",data:i,value:o.applicableLicenseCodes,onChange:h=>r(E=>E&&{...E,applicableLicenseCodes:h}),placeholder:"Todos los permisos",comboboxProps:{withinPortal:!0}})]})}),a.jsx(X,{title:"Baremo de evaluación",children:a.jsx(Bh,{baremo:o.baremo,onChange:h=>r(E=>E&&{...E,baremo:h})})}),a.jsx(X,{title:"Claves",children:a.jsx(Xh,{claves:o.claves,onChange:h=>r(E=>E&&{...E,claves:h})})}),a.jsx(X,{title:"Maniobras e Ãtems",children:a.jsx(Wh,{categories:o.categories,claves:o.claves,criteriaLicenseCodes:o.applicableLicenseCodes,onChange:h=>r(E=>E&&{...E,categories:h})})})]})})})}const vs=["knowledge-fragment"];function eE(e){return w({queryKey:[...vs,e],queryFn:()=>{const n=new URLSearchParams;e!=null&&e.status&&n.set("status",e.status),e!=null&&e.category&&n.set("category",e.category),e!=null&&e.search&&n.set("search",e.search),(e==null?void 0:e.page)!=null&&n.set("page",String(e.page)),(e==null?void 0:e.limit)!=null&&n.set("limit",String(e.limit));const t=n.toString();return A(`/platform-admin/knowledge-base/fragments${t?`?${t}`:""}`)}})}function aE(e){return w({queryKey:[...vs,e],queryFn:()=>A(`/platform-admin/knowledge-base/fragments/${e}`),enabled:e!=null})}const St=["knowledge-base","pending-embeddings"];function nE(){return w({queryKey:St,queryFn:()=>A("/platform-admin/knowledge-base/embeddings/pending")})}
5function sn(e){e.invalidateQueries({queryKey:vs}),e.invalidateQueries({queryKey:St})}function tE(){const e=H(),{showSuccessToast:n}=F(),{handleError:t}=Q();return U({mutationFn:s=>A("/platform-admin/knowledge-base/fragments",{method:"POST",body:JSON.stringify(s)}),onSuccess:()=>{sn(e),n({description:"Entrada de conocimiento creada correctamente."})},onError:s=>t(s)})}function sE(e){const n=H(),{showSuccessToast:t}=F(),{handleError:s}=Q();return U({mutationFn:i=>A(`/platform-admin/knowledge-base/fragments/${e}`,{method:"PUT",body:JSON.stringify(i)}),onSuccess:()=>{sn(n),t({description:"Entrada de conocimiento actualizada correctamente."})},onError:i=>s(i)})}function yr(){const e=H(),{showSuccessToast:n}=F(),{handleError:t}=Q();return U({mutationFn:s=>A(`/platform-admin/knowledge-base/fragments/${s}`,{method:"DELETE"}),onSuccess:()=>{sn(e),n({description:"Entrada de conocimiento eliminada correctamente."})},onError:s=>t(s)})}function iE(){const e=H(),{showSuccessToast:n}=F(),{handleError:t}=Q();return U({mutationFn:()=>A("/platform-admin/knowledge-base/embeddings/backfill",{method:"POST"}),onSuccess:s=>{sn(e),e.invalidateQueries({queryKey:St}),n({description:`Se generaron ${s.backfilled} embeddings pendientes.`})},onError:s=>t(s)})}const fe={PRODUCT:"product",TROUBLESHOOTING:"troubleshooting",POLICY:"policy"},je={DRAFT:"draft",PUBLISHED:"published"},Un={[fe.PRODUCT]:"Producto",[fe.TROUBLESHOOTING]:"Resolución",[fe.POLICY]:"PolÃtica"},oE={[fe.PRODUCT]:"brand",[fe.TROUBLESHOOTING]:"alert",[fe.POLICY]:"info"},Vt={[je.PUBLISHED]:"Publicada",[je.DRAFT]:"Borrador"},rE={[je.PUBLISHED]:"brand",[je.DRAFT]:"neutral"},lE=[{value:fe.PRODUCT,label:Un[fe.PRODUCT]},{value:fe.TROUBLESHOOTING,label:Un[fe.TROUBLESHOOTING]},{value:fe.POLICY,label:Un[fe.POLICY]}],cE=[{value:je.PUBLISHED,label:Vt[je.PUBLISHED]},{value:je.DRAFT,label:Vt[je.DRAFT]}];function dE(){const[e,n]=d.useState(""),[t,s]=d.useState(null),[i,o]=d.useState(null),[r,c]=d.useState({pageIndex:0,pageSize:25}),{data:l,isLoading:m,isFetching:u}=eE({search:e||void 0,status:t??void 0,category:i??void 0,page:r.pageIndex+1,limit:r.pageSize}),p=yr(),x=f=>{na.openConfirmModal({title:"Eliminar entrada",children:a.jsxs(g,{size:"sm",children:["¿Seguro que quieres eliminar «",f.question,"»? Esta acción no se puede deshacer."]}),labels:{confirm:"Eliminar",cancel:"Cancelar"},confirmProps:{color:"red"},onConfirm:()=>p.mutate(f.id)})},h=d.useMemo(()=>[z({accessorKey:"question",header:"Pregunta",value:f=>f.question,min:200,link:f=>$.knowledgeFragment(f.id)}),{...De({accessorKey:"category",header:"CategorÃa",min:110,max:150,tone:f=>oE[f.category],label:f=>Un[f.category]}),enableColumnFilter:!1,enableSorting:!1},{...De({accessorKey:"status",header:"Estado",min:110,max:140,tone:f=>rE[f.status],label:f=>Vt[f.status]}),enableColumnFilter:!1,enableSorting:!1},{...Ea({accessorKey:"updated_at",header:"Actualizado",value:f=>f.updated_at,kind:"datetime",withTime:!0}),enableColumnFilter:!1,enableSorting:!1}],[]),E=_e({columns:h,data:(l==null?void 0:l.items)??[],rowClickPath:f=>$.knowledgeFragment(f.original.id),manualPagination:!0,onPaginationChange:c,rowCount:(l==null?void 0:l.total)??0,state:{isLoading:m,showLoadingOverlay:u,pagination:r},enableTopToolbar:!1,enableColumnFilters:!1,enableRowActions:!0,displayColumnDefOptions:{"mrt-row-actions":{size:110,mantineTableBodyCellProps:{align:"right"}}},renderRowActions:({row:f})=>a.jsx(O,{size:"xs",variant:"subtle",color:"red",leftSection:a.jsx(ze,{size:13}),loading:p.isPending,onClick:b=>{b.stopPropagation(),x(f.original)},children:"Eliminar"}),renderEmptyRowsFallback:()=>a.jsx(ve,{py:"xl",children:a.jsxs(N,{align:"center",gap:"xs",children:[a.jsx(ts,{size:40,style:{color:"var(--mantine-color-gray-4)"}}),a.jsx(g,{c:"dimmed",children:"No hay fragmentos en la base de conocimiento"}),a.jsx(g,{c:"dimmed",size:"sm",children:'Genera fragmentos desde un artÃculo o crea uno con "Nuevo fragmento"'})]})})});return a.jsx(de,{title:"Fragmentos",actionButton:{label:"Nuevo fragmento",icon:a.jsx(Ne,{size:16}),to:$.knowledgeFragmentNew()},children:a.jsxs(N,{gap:"md",children:[a.jsxs(C,{children:[a.jsx(W,{placeholder:"Filtrarâ¦",value:e,onCh
5ange:f=>n(f.currentTarget.value),w:220}),a.jsx(ee,{placeholder:"Estado",data:cE,value:t,onChange:f=>s(f),clearable:!0,w:160}),a.jsx(ee,{placeholder:"CategorÃa",data:lE,value:i,onChange:f=>o(f),clearable:!0,w:160})]}),a.jsx(X,{children:a.jsx(xe,{table:E})})]})})}const kt={[fe.PRODUCT]:"Producto",[fe.TROUBLESHOOTING]:"Resolución",[fe.POLICY]:"PolÃtica"},uE=[{value:fe.PRODUCT,label:kt[fe.PRODUCT]},{value:fe.TROUBLESHOOTING,label:kt[fe.TROUBLESHOOTING]},{value:fe.POLICY,label:kt[fe.POLICY]}];function Oi(){const{id:e}=ja(),n=aa(),t=oo(),s=!!e,i=t.state,o=s?"":(i==null?void 0:i.prefillQuestion)??"",{data:r,isLoading:c}=aE(e),l=tE(),m=sE(e??""),u=yr(),p=$e({initialValues:{question:o,answer:"",category:fe.PRODUCT,aliases:[],tags:[]},validate:{question:b=>b.trim().length===0?"La pregunta es obligatoria":null}});d.useEffect(()=>{r&&p.setValues({question:r.question,answer:r.answer??"",category:r.category,aliases:r.aliases,tags:r.tags})},[r]);const x=b=>{if(p.validate().hasErrors)return;const v={...p.values,status:b};s?m.mutate(v,{onSuccess:()=>n($.knowledgeFragmentList())}):l.mutate(v,{onSuccess:()=>n($.knowledgeFragmentList())})},h=()=>{na.openConfirmModal({title:"Eliminar entrada",children:a.jsx(g,{size:"sm",children:"¿Seguro que quieres eliminar esta entrada? Esta acción no se puede deshacer."}),labels:{confirm:"Eliminar",cancel:"Cancelar"},confirmProps:{color:"red"},onConfirm:()=>{u.mutate(e,{onSuccess:()=>n($.knowledgeFragmentList())})}})},E=(r==null?void 0:r.status)===je.PUBLISHED,f=l.isPending||m.isPending;return s&&c?a.jsx(ve,{h:300,children:a.jsx(me,{size:"lg"})}):a.jsx(de,{title:s?"Editar fragmento":"Nuevo fragmento",backButton:{label:"Volver a la lista",to:$.knowledgeFragmentList()},children:a.jsxs(N,{gap:"md",children:[a.jsx(X,{title:"Contenido",children:a.jsxs(N,{gap:"md",children:[a.jsx(Fa,{label:"Pregunta",placeholder:"¿Cuál es la pregunta que responde esta entrada?",autosize:!0,minRows:2,...p.getInputProps("question")}),a.jsx(Fa,{label:"Respuesta",placeholder:"Escribe la respuesta completaâ¦",autosize:!0,minRows:6,...p.getInputProps("answer")}),a.jsx(ee,{label:"CategorÃa",data:uE,value:p.values.category,onChange:b=>{b&&p.setFieldValue("category",b)},error:p.errors.category,allowDeselect:!1}),a.jsx($s,{label:"Alias (preguntas alternativas)",placeholder:"Escribe y pulsa Enter para añadir",...p.getInputProps("aliases")}),a.jsx($s,{label:"Etiquetas",placeholder:"Escribe y pulsa Enter para añadir",...p.getInputProps("tags")})]})}),a.jsxs(C,{justify:"space-between",children:[s?a.jsx(ge,{variant:"danger",icon:a.jsx(ze,{size:16}),onClick:h,loading:u.isPending,children:"Eliminar"}):a.jsx("span",{}),a.jsx(C,{children:s?a.jsxs(a.Fragment,{children:[a.jsx(ge,{variant:"secondary",onClick:()=>x(je.DRAFT),loading:f,children:"Guardar como borrador"}),a.jsx(ge,{variant:"primary",onClick:()=>x(je.PUBLISHED),loading:f,children:E?"Guardar cambios":"Publicar"})]}):a.jsxs(a.Fragment,{children:[a.jsx(ge,{variant:"secondary",onClick:()=>x(je.DRAFT),loading:f,children:"Guardar borrador"}),a.jsx(ge,{variant:"primary",onClick:()=>x(je.PUBLISHED),loading:f,children:"Publicar"})]})})]})]})})}const Oe={ACTIVE:"active",ANSWERED:"answered",ESCALATED:"escalated",CLOSED:"closed"},Wa={[Oe.ANSWERED]:"Respondida",[Oe.ESCALATED]:"Escalada",[Oe.ACTIVE]:"Activa",[Oe.CLOSED]:"Cerrada"},Ir={[Oe.ANSWERED]:"brand",[Oe.ESCALATED]:"alert",[Oe.ACTIVE]:"neutral",[Oe.CLOSED]:"good"},mE=[{value:Oe.ANSWERED,label:Wa[Oe.ANSWERED]}
5,{value:Oe.ESCALATED,label:Wa[Oe.ESCALATED]},{value:Oe.ACTIVE,label:Wa[Oe.ACTIVE]},{value:Oe.CLOSED,label:Wa[Oe.CLOSED]}];function pE(){const[e,n]=d.useState(""),[t,s]=d.useState(null),[i,o]=d.useState(null),[r,c]=d.useState({pageIndex:0,pageSize:25}),{data:l}=Ta(),m=d.useMemo(()=>(l??[]).map(f=>({value:f.id,label:f.name})),[l]),{data:u,isLoading:p,isFetching:x}=lu({search:e||void 0,outcome:t??void 0,tenantSlug:i??void 0,page:r.pageIndex+1,limit:r.pageSize}),h=d.useMemo(()=>[{accessorKey:"tenant_name",header:"Tenant",...Be({min:150,max:240}),enableColumnFilter:!1,enableSorting:!1,Cell:({row:f})=>a.jsx(g,{size:"sm",children:f.original.tenant_name??f.original.tenant_slug})},{accessorKey:"staff_name",header:"Staff",...Be({min:160}),enableColumnFilter:!1,enableSorting:!1,Cell:({row:f})=>a.jsx(g,{size:"sm",children:f.original.staff_name??"â"})},{...De({accessorKey:"outcome",header:"Resultado",min:110,max:150,tone:f=>Ir[f.outcome],label:f=>Wa[f.outcome]}),enableColumnFilter:!1,enableSorting:!1},{accessorKey:"message_count",header:"Mensajes",...Be({min:90,max:120,align:"right"}),enableColumnFilter:!1,enableSorting:!1,Cell:({row:f})=>a.jsx(g,{size:"sm",style:ba,children:f.original.message_count})},{...Ea({accessorKey:"last_message_at",header:"Ãltimo mensaje",value:f=>f.last_message_at,kind:"datetime",withTime:!0}),enableColumnFilter:!1,enableSorting:!1}],[]),E=_e({columns:h,data:(u==null?void 0:u.items)??[],rowClickPath:f=>$.chatbotConversation(f.original.id),manualPagination:!0,onPaginationChange:c,rowCount:(u==null?void 0:u.total)??0,state:{isLoading:p,showLoadingOverlay:x,pagination:r},enableTopToolbar:!1,enableColumnFilters:!1,renderEmptyRowsFallback:()=>a.jsx(ve,{py:"xl",children:a.jsxs(N,{align:"center",gap:"xs",children:[a.jsx(Bl,{size:40,style:{color:"var(--mantine-color-gray-4)"}}),a.jsx(g,{c:"dimmed",children:"No hay conversaciones registradas"})]})})});return a.jsx(de,{title:"Conversaciones",children:a.jsxs(N,{gap:"md",children:[a.jsxs(C,{children:[a.jsx(W,{placeholder:"Filtrarâ¦",value:e,onChange:f=>n(f.currentTarget.value),w:220}),a.jsx(ee,{placeholder:"Resultado",data:mE,value:t,onChange:f=>s(f),clearable:!0,w:160}),a.jsx(ee,{placeholder:"Tenant",data:m,value:i,onChange:o,clearable:!0,searchable:!0,w:200})]}),a.jsx(X,{children:a.jsx(xe,{table:E})})]})})}function gE(e){const n=H(),{showSuccessToast:t}=F(),{handleError:s}=Q();return U({mutationFn:({message:i,image:o})=>{const r=new FormData;return r.append("message",i),o!=null&&r.append("image",o),A(`/platform-admin/chatbot/conversations/${e}/replies`,{method:"POST",body:r})},onSuccess:()=>{ko(n),t({description:"Respuesta enviada."})},onError:i=>s(i)})}function hE(e){const n=H(),{showSuccessToast:t}=F(),{handleError:s}=Q();return U({mutationFn:()=>A(`/platform-admin/chatbot/conversations/${e}/close`,{method:"POST"}),onSuccess:()=>{ko(n),t({description:"Conversación cerrada."})},onError:i=>s(i)})}const EE={[Qe.USER]:"Usuario",[Qe.ASSISTANT]:"Asistente",[Qe.OPERATOR]:"Operador",[Qe.TOOL]:"Herramienta"},fE={[Qe.USER]:"brand.5",[Qe.ASSISTANT]:"gray.1",[Qe.OPERATOR]:"violet.1",[Qe.TOOL]:"gray.1"};function bE(){const{id:e}=ja(),n=aa(),{data:t,isLoading:s}=cu(e),[i,o]=d.useState(""),[r,c]=d.useState(null),[l,m]=d.useState(null),[u,p]=d.useState(null),x=d.useRef(null),h=gE((t==null?void 0:t.id)??""),E=hE((t==null?void 0:t.id)??"");if(d.useEffect(()=>{if(r==null){m(null);return}const _=URL.createObjectURL(r);return m(_),()=>URL.revokeObjectURL(_)},[r]),s)return a.jsx(ve,{h:300,children:a.jsx(me,{size:"lg"})});if(!t)return null;const f=t.messages.find(_=>_.role===Qe.USER),b=(f==null?void 0:f.content)??"",v=()=>{n($.knowledgeFragmentNew(),{state:{prefillQuestion:b}})},S=_=>{if(_==null){c(null),p(null);return}const T=gu(_);p(T),c(T==null?_:null)},y=_=>{const T=Array.from(_.clipboardData.files).find(j=>j.type.startsWith("image/"));T!=null&&(_.preventDefault(),S(T))};return a.jsx(de,{title:"Detalle de conversación",backButton:{label:"Volver a conversaciones",to:$.chatbotConversations()},children:a.jsxs(N,{gap:"md",children:[a.jsx(X,{children:a.jsxs(C,{justify:"space-between",align:"flex-start",children:[a.jsxs(N,{gap:"xs",children:[a.jsxs(C,{gap:"md",align:"center",children:[a.jsx(Se,{tone:Ir[t.outcome],children:Wa[t.outcome]}),a.jsx(g,{size:"sm",fw:600,children:t.tenant_name??t.tenant_slug}
5),(t.staff_name??t.staff_user_id)&&a.jsx(g,{size:"sm",c:"dimmed",children:t.staff_name??t.staff_user_id})]}),a.jsxs(C,{gap:"md",children:[a.jsxs(g,{size:"xs",c:"dimmed",children:["Inicio: ",Pn(t.started_at)]}),a.jsxs(g,{size:"xs",c:"dimmed",children:["Ãltimo mensaje: ",Pn(t.last_message_at)]})]})]}),a.jsxs(C,{gap:"sm",children:[t.outcome===Oe.ESCALATED&&a.jsx(ge,{variant:"success",disabled:E.isPending,onClick:()=>E.mutate(),children:"Marcar como cerrada"}),a.jsx(ge,{variant:"secondary",onClick:v,children:"Crear entrada KB"})]})]})}),a.jsx(X,{children:a.jsx(N,{gap:"md",children:t.messages.map((_,T)=>{var q,ie,D,V;const j=_.role===Qe.USER,L=_.role===Qe.ASSISTANT&&((((q=_.tool_calls)==null?void 0:q.length)??0)>0||(((ie=_.retrieved_knowledge_ids)==null?void 0:ie.length)??0)>0);return a.jsxs(N,{gap:4,align:j?"flex-start":"flex-end",style:{maxWidth:"78%",marginLeft:j?void 0:"auto"},children:[a.jsxs(C,{gap:"xs",align:"center",children:[a.jsx(tn,{children:EE[_.role]}),a.jsx(g,{size:"xs",c:"dimmed",children:Pn(_.created_at)})]}),a.jsxs(fa,{radius:"lg",px:"md",py:"sm",bg:fE[_.role],withBorder:!j,style:{width:"fit-content",maxWidth:"100%"},children:[j?a.jsx(g,{size:"sm",c:"white",style:{whiteSpace:"pre-wrap"},children:_.content}):a.jsx(bu,{content:_.content}),a.jsx(Tu,{url:_.image_url,purged:_.image_purged})]}),L&&a.jsxs(we,{variant:"separated",radius:"md",w:"100%",children:[(((D=_.tool_calls)==null?void 0:D.length)??0)>0&&a.jsxs(we.Item,{value:"tools",children:[a.jsx(we.Control,{children:a.jsxs(g,{size:"xs",c:"dimmed",children:[_.tool_calls.length," llamada",_.tool_calls.length>1?"s":""," a herramienta"]})}),a.jsx(we.Panel,{children:a.jsx(N,{gap:4,children:_.tool_calls.map((Y,Ke)=>{const Fe=Y,ta=typeof Fe.name=="string"?Fe.name:"(unnamed)";return a.jsx(g,{size:"xs",ff:"monospace",children:ta},Ke)})})})]}),(((V=_.retrieved_knowledge_ids)==null?void 0:V.length)??0)>0&&a.jsxs(we.Item,{value:"kb",children:[a.jsx(we.Control,{children:a.jsxs(g,{size:"xs",c:"dimmed",children:[_.retrieved_knowledge_ids.length," entrada",_.retrieved_knowledge_ids.length>1?"s":""," KB recuperada",_.retrieved_knowledge_ids.length>1?"s":""]})}),a.jsx(we.Panel,{children:a.jsx(N,{gap:4,children:_.retrieved_knowledge_ids.map(Y=>a.jsx(g,{size:"xs",ff:"monospace",children:Y},Y))})})]})]})]},T)})})}),a.jsx(X,{children:a.jsxs(N,{gap:"sm",children:[a.jsx(g,{size:"sm",fw:500,children:"Responder como operador"}),l!=null&&a.jsxs(C,{gap:"xs",children:[a.jsx(zn,{src:l,alt:"Captura adjunta",radius:"md",h:48,w:48,fit:"cover"}),a.jsx(J,{variant:"subtle",color:"gray",onClick:()=>S(null),"aria-label":"Quitar imagen adjunta",title:"Quitar imagen adjunta",children:a.jsx(gn,{size:16})})]}),u!=null&&a.jsx(g,{size:"xs",c:Ia("poor"),children:u}),a.jsx(Fa,{placeholder:"Escribe tu respuestaâ¦",minRows:3,autosize:!0,value:i,onChange:_=>o(_.currentTarget.value),onPaste:y,rightSection:a.jsx(J,{variant:"subtle",color:"gray",onClick:()=>{var _;return(_=x.current)==null?void 0:_.click()},"aria-label":"Adjuntar imagen",title:"Adjuntar imagen",children:a.jsx(Kl,{size:16})})}),a.jsx("input",{type:"file",accept:du,hidden:!0,ref:x,onChange:_=>{var T;return S(((T=_.currentTarget.files)==null?void 0:T[0])??null)}}),a.jsx(C,{justify:"flex-end",children:a.jsx(ge,{variant:"primary",disabled:i.trim()===""&&r==null||h.isPending,onClick:()=>h.mutate({message:i,image:r},{onSuccess:()=>{o(""),S(null)}}),children:"Responder"})})]})})]})})}function TE(e){const n=[e.articles_pruned>0?`${e.articles_pruned} artÃculos`:null,e.fragments_pruned>0?`${e.fragments_pruned} fragmentos`:null,e.images_pruned>0?`${e.images_pruned} imágenes`:null].filter(Boolean);return n.length>0?` Se han retirado ${n.join(", ")} que el archivo ya no incluye.`:""}function vE(){const e=H(),{showSuccessToast:n}=F(),{handleError:t}=Q();return U({mutationFn:s=>{const i=new FormData;return i.append("file",s),A("/platform-admin/knowledge-base/import",{method:"POST",body:i})},onSuccess:s=>{sn(e),e.invalidateQueries({queryKey:St}),n({title:"Importado",description:`${s.articles_upserted} artÃculos, ${s.fragments_upserted} fragmentos, ${s.images_upserted} imágenes.${TE(s)} ${s.fragments_pending_embedding}
5 pendientes de embedding â pulsa "Generar embeddings pendientes".`})},onError:s=>t(s)})}function xE({opened:e,onClose:n}){const[t,s]=d.useState(null),i=vE(),o=()=>{s(null),n()},r=()=>{t&&i.mutate(t,{onSuccess:()=>{s(null),n()}})};return a.jsx(se,{opened:e,onClose:o,title:"Importar base de conocimiento",centered:!0,radius:"xl",children:a.jsxs(N,{gap:"md",children:[a.jsx(is,{label:"Archivo de bundle (.json)",placeholder:"Selecciona un archivo",accept:"application/json",value:t,onChange:s}),a.jsxs(C,{justify:"flex-end",children:[a.jsx(O,{variant:"subtle",onClick:o,children:"Cancelar"}),a.jsx(O,{color:"brand",radius:"xl",loading:i.isPending,disabled:!t,onClick:r,children:"Importar"})]})]})})}function SE(){const{showSuccessToast:e,showToast:n}=F();return U({mutationFn:async()=>{const{blob:t,filename:s}=await ld("/platform-admin/knowledge-base/export");await ar({blob:t,filename:s||"kb-bundle.json"})},onSuccess:()=>{e({description:"Base de conocimiento exportada correctamente"})},onError:t=>{n({title:"Error",description:t.message||"No se pudo exportar la base de conocimiento",variant:"destructive"})}})}const Ve={all:["help-articles"],lists:()=>[...Ve.all,"list"],list:e=>[...Ve.lists(),e??{}],details:()=>[...Ve.all,"detail"],detail:e=>[...Ve.details(),e],fragments:e=>[...Ve.detail(e),"fragments"]};function _E(e){return w({queryKey:Ve.list(e),queryFn:()=>{const n=new URLSearchParams;e!=null&&e.status&&n.set("status",e.status),e!=null&&e.search&&n.set("search",e.search),(e==null?void 0:e.page)!=null&&n.set("page",String(e.page)),(e==null?void 0:e.limit)!=null&&n.set("limit",String(e.limit));const t=n.toString();return A(`/platform-admin/knowledge-base/articles${t?`?${t}`:""}`)}})}function jr(e){return A(`/platform-admin/knowledge-base/articles/${e}`)}function CE(e){return w({queryKey:Ve.detail(e),queryFn:()=>jr(e),enabled:e!=null})}const Je={DRAFT:"draft",PUBLISHED:"published"},Gt={[Je.PUBLISHED]:"Publicada",[Je.DRAFT]:"Borrador"},NE={[Je.PUBLISHED]:"brand",[Je.DRAFT]:"neutral"},AE=[{value:Je.PUBLISHED,label:Gt[Je.PUBLISHED]},{value:Je.DRAFT,label:Gt[Je.DRAFT]}];function yE(){const[e,n]=d.useState(""),[t,s]=d.useState(null),[i,o]=d.useState({pageIndex:0,pageSize:25}),[r,c]=d.useState(!1),l=iE(),m=SE(),{data:u}=nE(),p=(u==null?void 0:u.pending)??0,{data:x,isLoading:h,isFetching:E}=_E({search:e||void 0,status:t??void 0,page:i.pageIndex+1,limit:i.pageSize}),f=d.useMemo(()=>[z({accessorKey:"title",header:"TÃtulo",value:v=>v.title,min:220,link:v=>$.helpArticle(v.id)}),Ze({accessorKey:"slug",header:"Slug",value:v=>v.slug,min:200}),z({id:"category",header:"CategorÃa",value:v=>v.category.name,min:140,max:220}),{...De({accessorKey:"status",header:"Estado",min:110,max:140,tone:v=>NE[v.status],label:v=>Gt[v.status]}),enableColumnFilter:!1,enableSorting:!1},{accessorKey:"fragment_count",header:"Nº fragmentos",...Be({min:130,max:160}),enableColumnFilter:!1,enableSorting:!1,Cell:({row:v})=>a.jsx(g,{size:"sm",style:ba,children:v.original.fragment_count})},{...Ea({accessorKey:"updated_at",header:"Actualizado",value:v=>v.updated_at,kind:"datetime",withTime:!0}),enableColumnFilter:!1,enableSorting:!1}],[]),b=_e({columns:f,data:(x==null?void 0:x.items)??[],rowClickPath:v=>$.helpArticle(v.original.id),manualPagination:!0,onPaginationChange:o,rowCount:(x==null?void 0:x.total)??0,state:{isLoading:h,showLoadingOverlay:E,pagination:i},enableTopToolbar:!1,enableColumnFilters:!1,renderEmptyRowsFallback:()=>a.jsx(ve,{py:"xl",children:a.jsxs(N,{align:"center",gap:"xs",children:[a.jsx(lo,{size:40,style:{color:"var(--mantine-color-gray-4)"}}),a.jsx(g,{c:"dimmed",children:"No hay artÃculos"}),a.jsx(g,{c:"dimmed",size:"sm",children:'Crea el primero con el botón "Nuevo artÃculo"'})]})})});return a.jsxs(de,{title:"ArtÃculos",actionButton:{label:"Nuevo artÃculo",icon:a.jsx(Ne,{size:16}),to:$.helpArticleNew()},children:[a.jsxs(N,{gap:"md",children:[a.jsxs(C,{children:[a.jsx(W,{placeholder:"Filtrarâ¦",value:e,onChange:v=>n(v.currentTarget.value),w:220}),a.jsx(ee,{placeholder:"Estado",data:AE,value:t,onChange:v=>s(v),clearable:!0,w:160}),a.jsxs(O,{variant:"light",color:"brand",leftSection:a.jsx(cs,{size:16}),loading:l.isPending,disabled:p===0,onClick:()=>l.mutate(),children:["Generar embeddings pendientes (",p,")"]}),a.jsx(O,{variant:"light",color:"brand",leftSection:a.jsx(Yl,{size:16}),loading:m.isPending,onClick:()=>m.mutate(),children:"Exportar KB"}),a.jsx(O,{variant:"light",color:"brand",leftSection:a.jsx(uo,{size:16}),onClick:()=>c(!0),children:"Importar KB"})]}),a.jsx(X,{children:a.jsx(xe,{table:b})})]}),a.jsx(xE,{opened:r,onClose:()=>c(!1)})]})}const IE=d.lazy(()=>mt(()=>import("./MarkdownEditorCore-DGVYijaK.js"),__vite__mapDeps([11,1,2,8,9,12])).then(e=>({default:e.MarkdownEditorCore})));
5function jE({value:e,onChange:n,placeholder:t,imageUploadHandler:s}){return a.jsx(d.Suspense,{fallback:a.jsx(ve,{h:200,children:a.jsx(me,{size:"sm"})}),children:a.jsx(IE,{value:e,onChange:n,placeholder:t,imageUploadHandler:s})})}function RE(e){return w({queryKey:Ve.fragments(e),queryFn:()=>A(`/platform-admin/knowledge-base/articles/${e}/fragments`),enabled:e!=null})}function OE(e){const{handleError:n}=Q();return U({mutationFn:()=>A(`/platform-admin/knowledge-base/articles/${e}/generate-fragments`,{method:"POST"}),onError:t=>n(t)})}function LE(e){const n=H(),{showSuccessToast:t}=F(),{handleError:s}=Q();return U({mutationFn:()=>A(`/platform-admin/knowledge-base/articles/${e}/fragments/publish`,{method:"POST"}),onSuccess:i=>{n.invalidateQueries({queryKey:Ve.fragments(e)}),sn(n),t({description:`${i.published} fragmentos publicados; pulsa "Generar embeddings pendientes" en ArtÃculos`})},onError:i=>s(i)})}const Wn={all:["help-categories"],lists:()=>[...Wn.all,"list"],list:()=>[...Wn.lists()]};function Rr(){return w({queryKey:Wn.list(),queryFn:()=>A("/platform-admin/knowledge-base/categories")})}function xs(e){e.invalidateQueries({queryKey:Ve.all})}function DE(){const e=H(),{showSuccessToast:n}=F(),{handleError:t}=Q();return U({mutationFn:s=>A("/platform-admin/knowledge-base/articles",{method:"POST",body:JSON.stringify(s)}),onSuccess:()=>{xs(e),n({description:"ArtÃculo creado correctamente."})},onError:s=>t(s)})}function ME(e){const n=H(),{showSuccessToast:t}=F(),{handleError:s}=Q();return U({mutationFn:i=>A(`/platform-admin/knowledge-base/articles/${e}`,{method:"PUT",body:JSON.stringify(i)}),onSuccess:()=>{xs(n),t({description:"ArtÃculo actualizado correctamente."})},onError:i=>s(i)})}function PE(){const e=H(),{showSuccessToast:n}=F(),{handleError:t}=Q();return U({mutationFn:s=>A(`/platform-admin/knowledge-base/articles/${s}`,{method:"DELETE"}),onSuccess:()=>{xs(e),n({description:"ArtÃculo eliminado correctamente."})},onError:s=>t(s)})}function wE(){const{handleError:e}=Q();return{uploadImage:async t=>{const s=new FormData;s.append("file",t);try{return(await A("/platform-admin/knowledge-base/images",{method:"POST",body:s})).url}catch(i){throw e(i),i}}}}function Or(e){return e.toLowerCase().trim().normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}const FE={[je.PUBLISHED]:"Publicada",[je.DRAFT]:"Borrador"},UE={[je.PUBLISHED]:"good",[je.DRAFT]:"neutral"},kE=3e3,zE=9e4;function Li(){const{id:e}=ja(),n=aa(),t=!!e,[s,i]=d.useState(!1),{data:o,isLoading:r}=CE(e),c=DE(),l=ME(e??""),m=PE(),{uploadImage:u}=wE(),{showInfoToast:p}=F(),{data:x,isLoading:h}=Rr(),E=((x==null?void 0:x.items)??[]).map(M=>({value:M.id,label:M.name})),[f,b]=d.useState(!1),[v,S]=d.useState(null),{data:y,refetch:_}=RE(e),T=OE(e),j=LE(e),{data:L}=w({queryKey:Ve.detail(e),queryFn:()=>jr(e),enabled:e!=null,refetchInterval:f?kE:!1}),q=(L==null?void 0:L.fragments_generated_at)??null;d.useEffect(()=>{f&&q&&q!==v&&(b(!1),_())},[q]),d.useEffect(()=>{if(!f)return;const M=window.setTimeout(()=>{b(!1),p({description:"La generación está tardando; revisa en un momento."})},zE);return()=>window.clearTimeout(M)},[f]);const ie=()=>{S((o==null?void 0:o.fragments_generated_at)??null),b(!0),T.mutate(void 0,{onError:()=>b(!1)})},D=(y==null?void 0:y.items)??[],V=D.some(M=>M.status===je.DRAFT),Y=$e({initialValues:{title:"",slug:"",body:"",excerpt:"",categoryId:"",position:0,authoringNotes:""},validate:{title:M=>M.trim().length===0?"El tÃtulo es obligatorio":null,slug:M=>!t&&M.trim().length===0?"El slug es obligatorio":null,excerpt:M=>M.trim().length===0?"El extracto es obligatorio":M.length>255?"El extracto no puede superar los 255 caracteres":null,categoryId:M=>M.trim().length===0?"La categorÃa es obligatoria":null}});d.useEffect(()=>{o&&(Y.setValues({title:o.title,slug:o.slug,body:o.body,excerpt:o.excerpt,categoryId:o.category.id,position:o.position,authoringNotes:o.authoring_notes??""}),i(!0))},[o]);const Ke=M=>{Y.setFieldValue("title",M),!t&&!s&&Y.setFieldValue("slug",Or(M))},Fe=M=>{Y.setFieldValue("slug",M),i(!0)},ta=M=>{if(Y.validate().hasErrors)return;const{slug:sa,...ia}=Y.values,K=ia.authoringNotes.trim()===""?null:ia.authoringNotes;t?l.mutate({...ia,status:M,authoringNotes:K},{onSuccess:()=>n($.helpArticleList())}):c.mutate({...ia,slug:sa,status:M,authoringNotes:K},{onSuccess:()=>n($.helpArticleList())})},da=()=>{na.openConfirmModal({title:"Eliminar artÃculo",children:a.jsx(g,{size:"sm",children:"¿Seguro que quieres eliminar este artÃculo? Esta acción no se puede deshacer."}),labels:{confirm:"Eliminar",cancel:"Cancelar"},confirmProps:{color:"red"},onConfirm:()=>{m.mutate(e,{onSuccess:()=>n($.helpArticleList())})}})},va=(o==null?void 0:o.status)===Je.PUBLISHED,ua=c.isPending||l.isPending;return t&&r?a.jsx(ve,{h:300,children:a.jsx(me,{size:"lg"})}):a.jsx(de,{title:t?"Editar artÃculo":"Nuevo artÃculo",backButton:{label:"Volver a la lista",to:$.helpArticleList()},children:a.jsxs(N,{gap:"md",children:[a.jsx(X,{title:"Contenido",children:a.jsxs(N,{gap:"md",children:[a.jsx(W,{label:"TÃtulo",placeholder:"TÃtulo del artÃculo",value:Y.values.title,onChange:M=>Ke(M.currentTarget.value),error:Y.errors.title}),t?a.jsx(W,{label:"Slug",value:Y.values.slug,disabled:!0,description:"El slug no se puede modificar una vez creado el artÃculo."}):a.jsx(W,{label:"Slug",placeholder:"slug-del-articulo",value:Y.values.slug,onChange:M=>Fe(M.currentTarget.value),error:Y.errors.slug}),a.jsxs(C,{grow:!0,align:"flex-start",children:[a.jsx(ee,{label:"CategorÃa",placeholder:h?"Cargando categorÃasâ¦":"Selecciona una categorÃa",data:E,value:Y.values.categoryId||null,onChange:M=>Y.setFieldValue("categoryId",M??""),error:Y.errors.categoryId,disabled:h,searchable:!0,required:!0}),a.jsx(Le,{label:"Posición",value:Y.values.position,onChange:M=>Y.setFieldValue("position",typeof M=="number"?M:0),min:0})]}
5),a.jsx(Fa,{label:"Extracto",placeholder:"Resumen breve del artÃculo",value:Y.values.excerpt,onChange:M=>Y.setFieldValue("excerpt",M.currentTarget.value),error:Y.errors.excerpt,maxLength:255,autosize:!0,minRows:2,required:!0}),a.jsx(jE,{value:Y.values.body,onChange:M=>Y.setFieldValue("body",M),placeholder:"Escribe el contenido del artÃculoâ¦",imageUploadHandler:u})]})}),a.jsx(X,{title:"Notas de autorÃa (internas)",children:a.jsxs(N,{gap:"sm",children:[a.jsx(g,{size:"sm",c:"dimmed",children:"No se publican ni se usan para generar fragmentos. Documentan decisiones editoriales: la semilla del artÃculo, discrepancias resueltas con el equipo y omisiones deliberadas."}),a.jsx(Fa,{placeholder:"Semilla, discrepancias resueltas, omisiones deliberadasâ¦",value:Y.values.authoringNotes,onChange:M=>Y.setFieldValue("authoringNotes",M.currentTarget.value),autosize:!0,minRows:3})]})}),t&&a.jsx(X,{title:"Fragmentos del bot",children:a.jsxs(N,{gap:"md",children:[a.jsx(g,{size:"sm",c:"dimmed",children:"Los fragmentos se generan del artÃculo; revÃsalos antes de publicar."}),a.jsxs(C,{justify:"space-between",children:[a.jsx(ge,{variant:"secondary",icon:a.jsx(pn,{size:16}),onClick:ie,loading:T.isPending,disabled:f,children:"Regenerar fragmentos"}),V&&a.jsx(ge,{variant:"primary",icon:a.jsx(xo,{size:16}),onClick:()=>j.mutate(),loading:j.isPending,children:"Publicar fragmentos"})]}),f?a.jsxs(C,{gap:"sm",children:[a.jsx(me,{size:"sm"}),a.jsx(g,{size:"sm",c:"dimmed",children:"Generando fragmentosâ¦"})]}):D.length===0?a.jsx(g,{size:"sm",c:"dimmed",children:"Este artÃculo todavÃa no tiene fragmentos generados."}):a.jsx(N,{gap:"xs",children:D.map(M=>a.jsxs(C,{justify:"space-between",wrap:"nowrap",children:[a.jsx(g,{size:"sm",lineClamp:1,children:M.question}),a.jsx(Se,{tone:UE[M.status],quiet:!0,children:FE[M.status]})]},M.id))})]})}),a.jsxs(C,{justify:"space-between",children:[t?a.jsx(ge,{variant:"danger",icon:a.jsx(ze,{size:16}),onClick:da,loading:m.isPending,children:"Eliminar"}):a.jsx("span",{}),a.jsxs(C,{children:[a.jsx(ge,{variant:"secondary",onClick:()=>ta(Je.DRAFT),loading:ua,children:"Guardar borrador"}),a.jsx(ge,{variant:"primary",onClick:()=>ta(Je.PUBLISHED),loading:ua,children:va?"Guardar cambios":"Publicar"})]})]})]})})}const Lr={wallet:kc,"receipt-text":Uc,"credit-card":Fc,banknote:wc,coins:Pc,"piggy-bank":Mc,calculator:Dc,percent:Lc,euro:ls,"hand-coins":Oc,car:Rc,calendar:jc,"calendar-days":Ic,clock:bo,timer:yc,"clipboard-list":Ac,"clipboard-check":vo,"graduation-cap":Nc,"book-open":ts,"file-text":_o,files:Cc,"folder-open":So,"user-plus":_c,users:To,"user-check":Sc,"user-cog":xc,settings:as,"sliders-horizontal":vc,plug:Tc,link:bc,key:fc,shield:no,lock:Ec,bell:ao,mail:hc,"message-circle":ro,phone:gc,"map-pin":pc,building:mc,landmark:uc,briefcase:dc,"chart-column":cc,"trending-up":lc,rocket:rc,sparkles:cs,star:oc,flag:ic,info:nt,"circle-help":sc,"triangle-alert":We,"circle-check":tc,search:ea,printer:nc,stamp:ac,signature:ec,"id-card":Zl,scale:Jl,gavel:Ql,list:Xl,"layout-grid":Wl,tag:Gl,database:Vl,"refresh-cw":pn},Di=Object.keys(Lr);function Dr({name:e,size:n=18}){const t=Lr[e];return t?a.jsx(t,{size:n}):null}function $E({value:e,onChange:n}){const[t,s]=d.useState(""),i=d.useMemo(()=>{const o=t.trim().toLowerCase();return o===""?Di:Di.filter(r=>r.includes(o))},[t]);return a.jsxs(N,{gap:"xs",children:[a.jsx(W,{size:"sm",value:t,leftSection:a.jsx(ea,{size:14}),placeholder:"Busca un iconoâ¦",onChange:o=>s(o.currentTarget.value)}),a.jsx(Ua,{cols:10,spacing:6,children:i.map(o=>a.jsx(J,{size:"lg",radius:"md",title:o,variant:o===e?"filled":"light",color:o===e?"brand":"gray",onClick:()=>n(o),children:a.jsx(Dr,{name:o,size:16})},o))})]})}function Ss(e){e.invalidateQueries({queryKey:Wn.all}),e.invalidateQueries({queryKey:Ve.all})}function HE(){const e=H(),{showSuccessToast:n}=F(),{handleError:t}=Q();return U({mutationFn:s=>A("/platform-admin/knowledge-base/categories",{method:"POST",body:JSON.stringify(s)}),onSuccess:()=>{Ss(e),n({description:"CategorÃa creada correctamente."})},onError:s=>t(s)})}function qE(e){const n=H(),{showSuccessToast:t}=F(),{handleError:s}=Q();return U({mutationFn:i=>A(`/platform-admin/knowledge-base/categories/${e}`,{method:"PUT",body:JSON.stringify(i)}),onSuccess:()=>{Ss(n),t({description:"CategorÃa actualizada correctamente."})},onError:i=>s(i)})}function BE(){const e=H(),{showSuccessToast:n}=F(),{handleError:t}=Q();return U({mutationFn:s=>A(`/platform-admin/knowledge-base/categories/${s}`,{method:"DELETE"}),onSuccess:()=>{Ss(e),n({description:"CategorÃa eliminada correctamente."})},onError:s=>t(s)})}const Mi={name:"",slug:"",icon:"",position:0};function KE({opened:e,category:n,defaultPosition:t,onClose:s}){const i=n!=null,[o,r]=d.useState(!1),c=HE(),l=qE((n==null?void 0:n.id)??""),m=$e({initialValues:Mi,validate:{name:E=>E.trim().length===0?"El nombre es obligatorio":null,slug:E=>E.trim().length===0?"El slug es obligatorio":null,icon:E=>E.trim().length===0?"Elige un icono":null}});d.useEffect(()=>{e&&(m.setValues(n?{name:n.name,slug:n.slug,icon:n.icon,position:n.position}:{...Mi,position:t}),r(i))},[e,n,t]);const u=E=>{m.setFieldValue("name",E),!i&&!o&&m.setFieldValue("slug",Or(E))},p=E=>{m.setFieldValue("slug",E),r(!0)},x=E=>{if(i){l.mutate({name:E.name,icon:E.icon,position:E.position},{onSuccess:()=>s()});return}c.mutate(E,{onSuccess:()=>s()})},h=c.isPending||l.isPending;return a.jsx(se,{opened:e,onClose:s,title:i?"Editar categorÃa":"Nueva categorÃa",centered:!0,radius:"xl",size:"lg",children:a.jsx("form",{onSubmit:m.onSubmit(x),children:a.jsxs(N,{gap:"md",children:[a.jsx(W,{label:"Nombre",placeholder:"Nombre de la categorÃa",value:m.values.name,onChange:E=>u(E.currentTarget.value),error:m.errors.name}),a.jsx(W,{label:"Slug",placeholder:"slug-de-la-categoria",value:m.values.slug,onChange:E=>p(E.currentTarget.value),error:m.errors.slug,disabled:i}),a.jsx(Le,{label:"Posición",value:m.values.position,onChange:E=>m.setFieldValue("position",typeof E=="number"?E:0),min:0}),a.jsx($E,{value:m.values.icon,onChange:E=>m.setFieldValue("icon",E)}),a.jsxs(C,{justify:"flex-end",children:[a.jsx(O,{variant:"subtle",onClick:s,children:"Cancelar"}),a.jsx(O,{type:"submit",color:"brand",radius:"xl",loading:h,children:i?"Guardar":"Crear"})]})]})})})}
5function YE(){const[e,n]=d.useState(null),[t,s]=d.useState(!1),{data:i,isLoading:o,isFetching:r}=Rr(),c=BE(),l=(i==null?void 0:i.items)??[],m=()=>{n(null),s(!0)},u=E=>{n(E),s(!0)},p=E=>{na.openConfirmModal({title:"Eliminar categorÃa",children:a.jsxs(g,{size:"sm",children:["¿Seguro que quieres eliminar «",E.name,"»? Esta acción no se puede deshacer."]}),labels:{confirm:"Eliminar",cancel:"Cancelar"},confirmProps:{color:"red"},onConfirm:()=>c.mutate(E.id)})},x=d.useMemo(()=>[{accessorKey:"icon",header:"",size:50,grow:!1,enableColumnFilter:!1,enableSorting:!1,Cell:({row:E})=>a.jsx(Dr,{name:E.original.icon,size:18})},z({accessorKey:"name",header:"Nombre",value:E=>E.name,min:220}),Ze({accessorKey:"slug",header:"Slug",value:E=>E.slug,min:200}),{accessorKey:"position",header:"Posición",...Be({min:100,max:130}),enableColumnFilter:!1,enableSorting:!1,Cell:({row:E})=>a.jsx(g,{size:"sm",style:ba,children:E.original.position})},{accessorKey:"article_count",header:"Nº artÃculos",...Be({min:120,max:150}),enableColumnFilter:!1,enableSorting:!1,Cell:({row:E})=>a.jsx(g,{size:"sm",style:ba,children:E.original.article_count})}],[]),h=_e({columns:x,data:l,state:{isLoading:o,showLoadingOverlay:r},enableTopToolbar:!1,enableColumnFilters:!1,enableRowActions:!0,displayColumnDefOptions:{"mrt-row-actions":{size:90,mantineTableBodyCellProps:{align:"right"}}},renderRowActions:({row:E})=>a.jsxs(C,{gap:4,wrap:"nowrap",children:[a.jsx(oe,{label:"Editar",children:a.jsx(J,{variant:"subtle",onClick:()=>u(E.original),children:a.jsx(Co,{size:16})})}),a.jsx(oe,{label:"Eliminar",children:a.jsx(J,{variant:"subtle",color:"red",loading:c.isPending,onClick:()=>p(E.original),children:a.jsx(ze,{size:16})})})]}),renderEmptyRowsFallback:()=>a.jsx(ve,{py:"xl",children:a.jsxs(N,{align:"center",gap:"xs",children:[a.jsx(So,{size:40,style:{color:"var(--mantine-color-gray-4)"}}),a.jsx(g,{c:"dimmed",children:"No hay categorÃas"}),a.jsx(g,{c:"dimmed",size:"sm",children:'Crea la primera con el botón "Nueva categorÃa"'})]})})});return a.jsxs(de,{title:"CategorÃas de ayuda",actionButton:{component:a.jsx(ge,{icon:a.jsx(Ne,{size:16}),onClick:m,children:"Nueva categorÃa"})},children:[a.jsx(X,{children:a.jsx(xe,{table:h})}),a.jsx(KE,{opened:t,category:e,defaultPosition:l.length,onClose:()=>s(!1)})]})}const VE=1e3;let Mr=Date.now();const Mn=new Set;let ln=null;function GE(e){return Mn.add(e),ln===null&&(ln=setInterval(()=>{Mr=Date.now(),Mn.forEach(n=>n())},VE)),()=>{Mn.delete(e),Mn.size===0&&ln!==null&&(clearInterval(ln),ln=null)}}function WE(){return Mr}function XE(){return d.useSyncExternalStore(GE,WE)}function QE(e){const n=Ht(e);return Math.abs(zc(new Date,n))<24?`Hace ${$c(n,{locale:eo}).replace(/\bsegundos?\b/,"seg").replace(/\bminutos?\b/,"min").replace(/\bhoras?\b/,"h")}`:Te(e,"dd/MM HH:mm")}function JE({value:e,size:n="sm",c:t="dimmed"}){return XE(),e?a.jsx(oe,{label:Te(e,"dd/MM/yyyy HH:mm"),withArrow:!0,children:a.jsx(g,{size:n,c:t,children:QE(e)})}):a.jsx(g,{size:n,c:t,children:"â"})}const Pi={0:"domingos",1:"lunes",2:"martes",3:"miércoles",4:"jueves",5:"viernes",6:"sábados"},Ya=e=>e.padStart(2,"0"),ZE=(e,n)=>n==="1-5"?" de lunes a viernes":n!=="*"&&Pi[n]?` los ${Pi[n]}`:e!=="*"?` el dÃa ${e} de cada mes`:"";function _s(e){const n=e.trim().split(/\s+/);if(n.length!==5)return e;const[t,s,i,,o]=n,r=ZE(i,o);if(t.startsWith("*/")&&s==="*")return`Cada ${t.slice(2)} min${r}`;if(t==="*"&&s==="*")return`Cada minuto${r}`;if(/^\d+$/.test(t)&&s==="*")return`Cada hora, en el minuto ${t}${r}`;if(/^\d+$/.test(t)&&/^\d+$/.test(s))return`A las ${Ya(s)}:${Ya(t)}${r}`;if(/^\d+$/.test(t)&&/^\d+-\d+$/.test(s)){const[c,l]=s.split("-");return`Cada hora de ${Ya(c)}:${Ya(t)} a ${Ya(l)}:${Ya(t)}${r}`}return e}const Wt={pending:"neutral",running:"info",success:"good",failed:"poor",timed_out:"alert",skipped:"fair"},Xn={pending:"En cola",running:"Ejecutando",success:"Correcta",failed:"Fallida",timed_out:"Sin respuesta",skipped:"Saltada"},Pr=["pending","running"],wi=e=>e===null?"â":e<1e3?`${e} ms`:`${(e/1e3).toFixed(1)} s`,ef={previous_run_still_running:"La ejecución anterior de esta tarea todavÃa estaba en marcha"},af=e=>ef[e]??e,Ge={all:["scheduled-task"],lists:()=>[...Ge.all,"list"],list:()=>[...Ge.lists()],logs:(e,n,t)=>[...Ge.all,"logs",e,n,t],log:e=>[...Ge.all,"log",e],handlers:()=>[...Ge.all,"handlers"]},on="/platform-admin/scheduled-tasks",Cs=["pending","running"],Ns=2e3,nf=1e4;
5function _t(e,n){e.invalidateQueries({queryKey:Ge.lists()}),e.invalidateQueries({queryKey:n?[...Ge.all,"logs",n]:[...Ge.all,"logs"]})}const tf=e=>(e??[]).some(n=>n.lastLog!==null&&Cs.includes(n.lastLog.status));function wr(){return w({queryKey:Ge.list(),queryFn:()=>A(on),refetchInterval:e=>tf(e.state.data)?Ns:nf})}function sf(e,n,t){const s=new URLSearchParams({page:String(n),limit:"25"});return t&&s.set("status",t),w({queryKey:Ge.logs(e,n,t),queryFn:()=>A(`${on}/${e}/logs?${s}`),enabled:!!e,refetchInterval:i=>{var o;return(((o=i.state.data)==null?void 0:o.items)??[]).some(r=>Cs.includes(r.status))?Ns:!1}})}function of(e){return w({queryKey:Ge.log(e),queryFn:()=>A(`/platform-admin/scheduled-task-logs/${e}`),enabled:e!==null,refetchInterval:n=>n.state.data&&Cs.includes(n.state.data.status)?Ns:!1})}function rf(){return w({queryKey:Ge.handlers(),queryFn:()=>A("/platform-admin/schedulable-handlers"),staleTime:1/0})}function lf(){const e=H(),{showSuccessToast:n}=F(),{handleError:t}=Q();return U({mutationFn:s=>A(on,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)}),onSuccess:()=>{_t(e),n({title:"Hecho",description:"Tarea programada creada"})},onError:s=>t(s)})}function cf(){const e=H(),{showSuccessToast:n}=F(),{handleError:t}=Q();return U({mutationFn:({id:s,...i})=>A(`${on}/${s}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)}),onSuccess:(s,i)=>{_t(e,i.id),n({title:"Hecho",description:"Tarea programada actualizada"})},onError:s=>t(s)})}function df(){const e=H(),{showSuccessToast:n}=F(),{handleError:t}=Q();return U({mutationFn:s=>A(`${on}/${s}`,{method:"DELETE"}),onSuccess:(s,i)=>{_t(e,i),n({title:"Hecho",description:"Tarea programada eliminada"})},onError:s=>t(s)})}function Fr(){const e=H(),{showSuccessToast:n}=F(),{handleError:t}=Q();return U({mutationFn:s=>A(`${on}/${s}/run`,{method:"POST"}),onSuccess:(s,i)=>{_t(e,i),n({title:"En marcha",description:"La tarea se está ejecutando"})},onError:s=>t(s)})}const uf=[{value:"Europe/Madrid",label:"Europe/Madrid"},{value:"UTC",label:"UTC"}],mf=3600,Fi={name:"",description:null,handler:"",arguments:null,cronExpression:"",timezone:"Europe/Madrid",enabled:!0,maxExecutionSeconds:900,memoryLimit:null};function pf({opened:e,task:n,onClose:t,onSubmit:s,isSubmitting:i}){const{data:o}=rf(),r=$e({initialValues:Fi,validate:{name:l=>l.trim()?null:"El nombre es obligatorio",handler:l=>l?null:"Elige un comando",cronExpression:l=>l.trim().split(/\s+/).length===5?null:"La expresión debe tener cinco campos"}});d.useEffect(()=>{e&&r.setValues(n?{name:n.name,description:n.description,handler:n.handler,arguments:n.arguments,cronExpression:n.cronExpression,timezone:n.timezone,enabled:n.enabled,maxExecutionSeconds:n.maxExecutionSeconds,memoryLimit:n.memoryLimit}:Fi)},[e,n]);const c=(o??[]).map(l=>({value:l.handler,label:l.handler,description:l.description}));return a.jsx(se,{opened:e,onClose:t,title:n?"Editar tarea programada":"Nueva tarea programada",size:"lg",children:a.jsx("form",{onSubmit:r.onSubmit(l=>s(l)),children:a.jsxs(N,{gap:"md",children:[a.jsx(W,{label:"Nombre",withAsterisk:!0,...r.getInputProps("name")}),a.jsx(W,{label:"Descripción",value:r.values.description??"",onChange:l=>r.setFieldValue("description",l.currentTarget.value||null)}),a.jsx(ee,{label:"Comando",withAsterisk:!0,searchable:!0,data:c,...r.getInputProps("handler")}),a.jsx(W,{label:"Expresión cron",withAsterisk:!0,placeholder:"*/30 * * * *",...r.getInputProps("cronExpression")}),r.values.cronExpression&&a.jsx(g,{size:"sm",c:"dimmed",children:_s(r.values.cronExpression)}),a.jsx(ee,{label:"Zona horaria",data:uf,...r.getInputProps("timezone")}),a.jsx(Le,{label:"Tiempo máximo de ejecución (segundos)",min:1,max:mf,...r.getInputProps("maxExecutionSeconds")}),a.jsx(W,{label:"LÃmite de memoria",placeholder:"512M",value:r.values.memoryLimit??"",onChange:l=>r.setFieldValue("memoryLimit",l.currentTarget.value||null)}),a.jsx(xn,{label:"Activa",checked:r.values.enabled,onChange:l=>r.setFieldValue("enabled",l.currentTarget.checked)}),a.jsxs(C,{justify:"flex-end",children:[a.jsx(O,{variant:"subtle",onClick:t,children:"Cancelar"}),a.jsx(O,{type:"submit",loading:i,children:n?"Guardar":"Crear"})]})]})})})}
5function gf(){const[e,n]=d.useState(null),[t,s]=d.useState(!1),{data:i,isLoading:o}=wr(),r=lf(),c=cf(),l=df(),m=Fr(),u=h=>na.openConfirmModal({title:"Eliminar tarea programada",children:a.jsxs(g,{size:"sm",children:["¿Está seguro de que desea eliminar la tarea ",a.jsx("strong",{children:h.name}),"? Se eliminará también todo su historial de ejecuciones. Esta acción no se puede deshacer."]}),labels:{confirm:"Eliminar",cancel:"Cancelar"},confirmProps:{color:"red"},onConfirm:()=>l.mutate(h.id)}),p=d.useMemo(()=>[z({accessorKey:"name",header:"Tarea",value:h=>h.name,link:h=>$.scheduledTask(h.id),min:200}),Ze({accessorKey:"handler",header:"Comando",value:h=>h.handler,min:260}),z({accessorKey:"cronExpression",header:"Periodicidad",value:h=>_s(h.cronExpression),min:200,max:280,grow:!1}),z({accessorKey:"nextRunAt",header:"Próxima",value:h=>h.enabled?Te(h.nextRunAt,"dd/MM HH:mm"):"â",min:120,max:140,grow:!1}),{accessorKey:"lastLog",header:"Ãltima ejecución",size:180,minSize:180,grow:!1,enableColumnFilter:!1,Cell:({row:h})=>{const E=h.original.lastLog;return E?a.jsxs(C,{gap:"xs",wrap:"nowrap",children:[a.jsx(Se,{tone:Wt[E.status],children:Xn[E.status]}),a.jsx(JE,{value:E.queuedAt,size:"xs"})]}):a.jsx(g,{size:"sm",c:"dimmed",children:"Nunca"})}},{accessorKey:"enabled",header:"Activa",size:90,grow:!1,enableColumnFilter:!1,Cell:({row:h})=>a.jsx(xn,{checked:h.original.enabled,onClick:E=>E.stopPropagation(),onChange:E=>c.mutate({id:h.original.id,name:h.original.name,description:h.original.description,handler:h.original.handler,arguments:h.original.arguments,cronExpression:h.original.cronExpression,timezone:h.original.timezone,enabled:E.currentTarget.checked,maxExecutionSeconds:h.original.maxExecutionSeconds,memoryLimit:h.original.memoryLimit})})}],[c.mutate]),x=_e({columns:p,data:i??[],rowClickPath:h=>$.scheduledTask(h.original.id),enableRowActions:!0,state:{isLoading:o},renderRowActions:({row:h})=>{var f;const E=Pr.includes(((f=h.original.lastLog)==null?void 0:f.status)??"success");return a.jsxs(C,{gap:4,wrap:"nowrap",children:[a.jsx(oe,{label:E?"Ya se está ejecutando":"Ejecutar ahora",children:a.jsx(J,{variant:"subtle",disabled:E,onClick:b=>{b.stopPropagation(),m.mutate(h.original.id)},children:a.jsx(No,{size:16})})}),a.jsx(oe,{label:"Editar",children:a.jsx(J,{variant:"subtle",onClick:b=>{b.stopPropagation(),n(h.original),s(!0)},children:a.jsx(Co,{size:16})})}),a.jsx(oe,{label:"Eliminar",children:a.jsx(J,{variant:"subtle",color:"red",disabled:E,onClick:b=>{b.stopPropagation(),u(h.original)},children:a.jsx(ze,{size:16})})})]})}});return a.jsxs(de,{title:"Tareas programadas",actionButton:{component:a.jsx(ge,{icon:a.jsx(Ne,{size:16}),onClick:()=>{n(null),s(!0)},children:"Nueva tarea"})},children:[a.jsx(X,{children:a.jsx(xe,{table:x})}),a.jsx(pf,{opened:t,task:e,isSubmitting:r.isPending||c.isPending,onClose:()=>s(!1),onSubmit:h=>{if(e){c.mutate({id:e.id,...h},{onSuccess:()=>s(!1)});return}r.mutate(h,{onSuccess:()=>s(!1)})}})]})}const hf=Object.entries(Xn).map(([e,n])=>({value:e,label:n})),Ef={overflow:"auto",maxHeight:"70vh"},ff={display:"block",whiteSpace:"pre",fontSize:"12px"};function bf(){var b;const{id:e}=ja(),[n,t]=d.useState(null),[s,i]=d.useState({pageIndex:0,pageSize:25}),[o,r]=d.useState(null),{data:c}=wr(),l=(c??[]).find(v=>v.id===e),{data:m,isLoading:u}=sf(e,s.pageIndex+1,n),{data:p}=of(o),x=Fr(),h=Pr.includes(((b=l==null?void 0:l.lastLog)==null?void 0:b.status)??"success"),E=d.useMemo(()=>[{...De({accessorKey:"status",header:"Estado",min:140,tone:v=>Wt[v.status],label:v=>Xn[v.status]}),enableColumnFilter:!1},z({accessorKey:"trigger",header:"Disparo",value:v=>v.trigger==="manual"?`Manual${v.triggeredBy?` · ${v.triggeredBy}`:""}`:"Automático",min:180}),z({accessorKey:"queuedAt",header:"En cola",value:v=>Te(v.queuedAt,"dd/MM/yyyy HH:mm:ss"),min:170,max:190,grow:!1}),z({accessorKey:"durationMs",header:"Duración",value:v=>wi(v.durationMs),min:100,max:120,grow:!1,align:"right"}),z({accessorKey:"exitCode",header:"Exit code",value:v=>v.exitCode===null?"â":String(v.exitCode),min:100,max:120,grow:!1,align:"right"})],[]),f=_e({columns:E,data:(m==null?void 0:m.items)??[],onRowClick:v=>r(v.id),manualPagination:!0,onPaginationChange:i,rowCount:(m==null?void 0:m.total)??0,state:{isLoading:u,pagination:s},enableColumnFilters:!1});return a.jsxs(de,{title:(l==null?void 0:l.name)??"Tarea programada",backButton:{label:"Volver",to:$.scheduledTasks(),icon:a.jsx(hn,{size:16})},actionButton:{component:a.jsx(ge,{icon:a.jsx(No,{size:16}),disabled:!e||h,loading:x.isPending,onClick:()=>e&&x.mutate(e),children:"Ejecutar ahora"})},children:[a.jsxs(N,{gap:"md",children:[l&&a.jsx(X,{children:a.jsxs(Ua,{cols:{base:1,sm:2,md:4},spacing:"md",children:[a.jsxs(N,{gap:2,children:[a.jsx(g,{size:"xs",c:"dimmed",children:"Comando"}),a.jsx(g,{size:"sm",ff:"monospace",children:l.handler})]}),a.jsxs(N,{gap:2,children:[a.jsx(g,{size:"xs",c:"dimmed",children:"Periodicidad"}),a.jsx(g,{size:"sm",children:_s(l.cronExpression)}),a.jsxs(g,{size:"xs",c:"dimmed",children:[l.cronExpression," · ",l.timezone]})]}),a.jsxs(N,{gap:2,children:[a.jsx(g,{size:"xs",c:"dimmed",children:"Próxima ejecución"}),a.jsx(g,{size:"sm",children:l.enabled?Te(l.nextRunAt,"dd/MM/yyyy, HH:mm"):"Pausada"})]}),a.jsxs(N,{gap:2,children:[a.jsx(g,{size:"xs",c:"dimmed",children:"Ãltima ejecución"}),a.jsx(g,{size:"sm",children:l.lastRunAt?Te(l.lastRunAt,"dd/MM/yyyy, HH:mm"):"Nunca"})]})]})}),a.jsx(C,{children:a.jsx(ee,{placeholder:"Estado",data:hf,value:n,onChange:t,clearable:!0,w:200})}),a.jsx(X,{children:a.jsx(xe,{table:f})})]}),a.jsx(se,{opened:o!==null,onClose:()=>r(null),title:"Detalle de la ejecución",size:"90%",children:p?a.jsxs(N,{gap:"sm",children:[a.jsxs(C,{gap:"xs",children:[a.jsx(Se,{tone:Wt[p.status],children:Xn[p.status]}),a.jsx(g,{size:"sm",ff:"monospace",children:p.handler}),a.jsxs(g,{size:"sm",c:"dimmed",children:["Duración: ",wi(p.durationMs)]}),a.jsxs(g,{size:"sm",c:"dimmed",children:["Exit code: ",p.exitCode??"â"]})]}),p.errorMessage&&a.jsx(g,{size:"sm",c:"red",children:p.errorMessage}),p.skipReason&&a.jsxs(g,{size:"sm",c:"dimmed",children:["Motivo del salto: ",af(p.skipReason)]}),a.jsx(Tn,{style:Ef,children:a.jsx(En,{style:ff,children:p.output??"Sin salida"})})]}):a.jsx(g,{c:"dimmed",children:"Cargando detalleâ¦"})})]})}function Ui({label:e,icon:n,onClick:t,to:s,color:i,variant:o="filled",loading:r,disabled:c}){const l={color:i,variant:o,loading:r,disabled:c};return a.jsxs(a.Fragment,{children:[a.jsx(he,{hiddenFrom:"sm",children:a.jsx(oe,{label:e,withArrow:!0,children:s?a.jsx(J,{size:"lg","aria-label":e,component:ne,to:s,...l,children:n}):a.jsx(J,{size:"lg","aria-label":e,onClick:t,...l,children:n})})}
5),s?a.jsx(O,{visibleFrom:"sm",leftSection:n,component:ne,to:s,...l,children:e}):a.jsx(O,{visibleFrom:"sm",leftSection:n,onClick:t,...l,children:e})]})}const Tf="informe seleccionado",vf="informes seleccionados",xf="Acciones",Sf="Regenerar tenants",_f="Eliminar",Cf="Deseleccionar",Nf=200;function Af({selection:e,reports:n,onRegenerate:t,onDelete:s}){const{isRowSelected:i,clearSelection:o}=e,r=d.useMemo(()=>n.filter(u=>i(u.id)),[n,i]),c=d.useMemo(()=>r.map(u=>u.id),[r]),l=d.useMemo(()=>Array.from(new Set(r.map(u=>u.tenant.id))),[r]),m=c.length===1?Tf:vf;return a.jsx(fa,{shadow:"sm",p:"md",bg:"white",style:{border:"1px solid var(--mantine-color-brand-5)"},children:a.jsxs(C,{justify:"space-between",children:[a.jsxs(C,{gap:"md",children:[a.jsx(g,{size:"sm",fw:600,children:`${c.length} ${m}`}),a.jsx(O,{variant:"subtle",color:"brand",size:"sm",onClick:o,children:Cf})]}),a.jsxs(ce,{shadow:"md",width:Nf,children:[a.jsx(ce.Target,{children:a.jsx(O,{color:"brand",size:"sm",rightSection:a.jsx(it,{size:16,color:"currentColor"}),children:xf})}),a.jsxs(ce.Dropdown,{children:[a.jsx(ce.Item,{onClick:()=>t(l),children:Sf}),a.jsx(ce.Item,{color:"red",onClick:()=>s(c),children:_f})]})]})]})})}const yf={no_staff_radius:"sin staff con radio",not_generated:"no generado"},If="tenant sin informe",jf="tenants sin informe",Rf=3,Of="Ver todos",Lf="Ver menos",Df="y",Mf="más";function ki(e){return`${e.name} (${yf[e.reason]})`}function Pf({coverage:e}){const[n,t]=d.useState(!1);if(!e||e.missing.length===0)return null;const s=e.missing.length,i=s===1?If:jf,o=e.missing.slice(0,Rf),r=s-o.length,c=o.map(ki).join(", ");return a.jsxs(Ue,{variant:"light",color:"yellow",icon:a.jsx(We,{size:16,color:"currentColor"}),children:[a.jsxs(g,{size:"sm",children:[`${s} ${i} el ${fn(e.date)}: ${c}`,r>0&&` ${Df} ${r} ${Mf}`]}),r>0&&a.jsxs(a.Fragment,{children:[a.jsx(O,{variant:"subtle",size:"compact-sm",px:0,mt:4,onClick:()=>t(l=>!l),children:n?Lf:Of}),a.jsx(ss,{in:n,children:a.jsx(N,{gap:2,mt:"xs",children:e.missing.map(l=>a.jsx(g,{size:"sm",children:ki(l)},l.id))})})]})]})}const wf=14,Ff=280,Uf={display:"inline-flex",color:"var(--mantine-color-dimmed)",opacity:.7,cursor:"help",flex:"none"};function zi({text:e}){return a.jsx(oe,{label:e,multiline:!0,w:Ff,withArrow:!0,position:"top",openDelay:150,events:{hover:!0,focus:!0,touch:!0},children:a.jsx("span",{role:"img","aria-label":e,tabIndex:0,style:Uf,children:a.jsx(nt,{size:wf})})})}const kf="xl",zf="lg";function Ur(){const e=ka();return za(`(max-width: ${e.breakpoints.md})`,!1,{getInitialValueInEffect:!1})?zf:kf}const $f={position:"absolute",top:"var(--card-padding)",right:"var(--card-padding)"},$i={default:void 0,attention:{backgroundColor:"var(--mantine-color-amber-0)",border:"1px solid var(--mantine-color-amber-3)"}};function eS({pretitle:e,title:n,hint:t,titleLevel:s,subtitle:i,subtitleHint:o,right:r,corner:c,isLoading:l=!1,isError:m=!1,tone:u="default",placeholder:p,children:x}){const h=Ur();return a.jsxs(X,{h:{base:"auto",md:"100%"},padding:h,pretitle:e,title:n,titleLevel:s,titleAddon:t===void 0?void 0:a.jsx(zi,{text:t}),subtitle:i,subtitleAddon:o===void 0?void 0:a.jsx(zi,{text:o}),action:r,style:c===void 0?$i[u]:{...$i[u],position:"relative"},children:[c!==void 0&&a.jsx("div",{style:$f,children:c}),l?p??a.jsxs(N,{gap:"sm",children:[a.jsx(ke,{height:16,radius:"sm"}),a.jsx(ke,{height:16,radius:"sm",width:"70%"})]}):m?a.jsx(g,{size:"sm",c:Ia("poor"),children:"Error al cargar los datos"}):x]})}const Hf=/[.*+?^${}()|[\]\\]/g,qf="â¬",Bf="%",Kf="pts",Yf=`(?:${qf}|${Bf}|${Kf})`,Vf=`[+â-]?\\d+(?:\\.\\d{3})*(?:,\\d+)?(?:\\s?${Yf})?`,Gf=/^\d+$/,Wf=1900,Xf=2100;function Qf(e){return e.replace(Hf,"\\$&")}function Jf(e){if(!Gf.test(e))return!1;const n=Number(e);return n>=Wf&&n<=Xf}function Hi(e,n){const s=[...[...n].sort((l,m)=>m.length-l.length).map(Qf),Vf],i=new RegExp(s.join("|"),"g"),o=[];let r=0,c=0;for(const l of e.matchAll(i)){const m=l[0],u=l.index??0;u>r&&o.push(e.slice(r,u)),Jf(m)?o.push(m):(o.push(a.jsx("strong",{style:{fontWeight:700},children:m},c)),c+=1),r=u+m.length}return r<e.length&&o.push(e.slice(r)),o}const Ct=195,Zf=2e4,eb={display:"flex",flexDirection:"column",gap:12},ab="#f5fbfa",nb="#dff0ec",As="#1f2937",tb={backgroundColor:ab,border:`1px solid ${nb}`,boxShadow:"none",position:"relative",overflow:"hidden"},sb="radial-gradient(circle, rgba(22, 199, 182, 0.26), transparent 66%)",ib={position:"absolute",top:-90,right:-70,width:260,height:260,borderRadius:"50%",background:sb,pointerEvents:"none"},ob={position:"relative",height:"100%"},rb="#6b7280",lb="#6b7280",cb="#4ecdc4",db="Asistente Drovify",ub={position:"absolute",top:0,right:0},mb={display:"flex",alignItems:"center",gap:7,color:rb,fontSize:11.5,fontWeight:600,letterSpacing:"0.06em",textTransform:"uppercase"},pb={display:"block",width:7,height:7,borderRadius:999,backgroundColor:cb},gb={marginTop:4,textAlign:"right",fontSize:11,fontWeight:500,color:"#94a3b8"},hb="hoy",Eb="H:mm",fb="d/M",qi="yyyy-MM-dd",kr={negative:{bg:Ha.poor.bg,ink:Ha.poor.text},positive:{bg:Ha.good.bg,ink:Ha.good.text},neutral:{bg:Ha.neutral.bg,ink:Ha.neutral.text}},bb={rojo:"negative",naranja:"negative",verde:"neutral",positivo:"positive"},zr={display:"inline-block",padding:"5px 10px",borderRadius:999,fontSize:11,fontWeight:600,letterSpacing:"0.08em",textTransform:"uppercase",lineHeight:1.3,whiteSpace:"normal",height:"auto"},Tb={...zr,backgroundColor:kr.neutral.bg},$r={display:"flex"},vb="22px",xb="5.6vw",Sb="28px",_b=6,Hr={marginBottom:_b,fontSize:`clamp(${vb}, ${xb}, ${Sb})`,fontWeight:800,letterSpacing:"-0.02em",lineHeight:1.15,textWrap:"balance",color:As},Bi=1.5,Cb=2,qr={fontSize:15,lineHeight:Bi,maxWidth:"56ch",textWrap:"pretty",minHeight:`calc(${Cb} * ${Bi}em)`,color:As},Br={minHeight:"1.6em"},Kr={color:lb,fontSize:13,fontVariantNumeric:"tabular-nums"},Yr={color:"inherit",fontVariantNumeric:"inherit"},Qn={color:"inherit"},Nb=16,Ki=6,Ab="#3bc9bf",yb="#dee2e6",Ib="TodavÃa sin destacados",jb="En cuanto haya actividad, aquà verás lo que destaca en tu autoescuela.",Rb="Nada que destacar hoy",Ob="Cobros, matrÃculas y aprobados van en lÃnea con el mismo band del año pasado. Mañana volvemos a mirarlo.",Lb={fontSize:17,fontWeight:600,letterSpacing:"-0.01em",color:As},Db={fontSize:15,lineHeight:1.5,maxWidth:"52ch",textWrap:"pretty",color:"#475162"}
5,Mb="No se han podido cargar los destacados",Pb=130,wb=150,Fb=["100%","64%"],Ub=120,kb=28,zb=3;function $b(e){return e.footnote??""}function Hb(e){if(e===null)return null;const n=Te(e,Eb);return Te(e,qi)===Te(new Date().toISOString(),qi)?`${hb}, ${n}`:`${Te(e,fb)}, ${n}`}function Nt({generatedAt:e=null}){const n=Hb(e);return a.jsxs("div",{style:ub,children:[a.jsxs("div",{style:mb,children:[a.jsx("span",{style:pb}),a.jsx("span",{children:db})]}),n!==null&&a.jsx(g,{style:gb,children:n})]})}function qb({severity:e,children:n}){const{bg:t,ink:s}=kr[bb[e]];return a.jsx("div",{style:$r,children:a.jsx("span",{style:{...zr,backgroundColor:t,color:s},children:n})})}function Vr({active:e}){return a.jsx("span",{style:{display:"block",width:e?Nb:Ki,height:Ki,borderRadius:999,transition:"width 150ms ease-out",backgroundColor:e?Ab:yb}})}function Bb(){return a.jsxs(N,{gap:"sm",h:"100%",style:{minHeight:Ct},children:[a.jsx(Nt,{}),a.jsx("div",{style:$r,children:a.jsx("span",{style:Tb,children:a.jsx(qe,{width:Pb})})}),a.jsx(Pe,{order:2,style:Hr,children:a.jsx(qe,{width:wb})}),a.jsx(g,{style:qr,children:Fb.map((e,n)=>a.jsx(qe,{width:e},n))}),a.jsx(g,{size:"xs",c:"dimmed",style:Br,children:a.jsx(qe,{width:Ub})}),a.jsxs(C,{justify:"space-between",wrap:"nowrap",mt:"auto",children:[a.jsx(C,{gap:5,wrap:"nowrap",children:Array.from({length:zb},(e,n)=>a.jsx(Vr,{active:n===0},n))}),a.jsxs(C,{gap:4,wrap:"nowrap",style:Kr,children:[a.jsx(g,{style:Yr,children:a.jsx(qe,{width:kb})}),a.jsx(J,{variant:"subtle",size:"sm",disabled:!0,"aria-hidden":!0,style:Qn,children:a.jsx(st,{size:16,color:"currentColor"})}),a.jsx(J,{variant:"subtle",size:"sm",disabled:!0,"aria-hidden":!0,style:Qn,children:a.jsx(ct,{size:16,color:"currentColor"})})]})]})]})}function Kb({report:e}){const n=e===null;return a.jsxs(N,{gap:10,h:"100%",style:{minHeight:Ct},children:[a.jsx(Nt,{generatedAt:(e==null?void 0:e.generatedAt)??null}),a.jsxs(N,{gap:10,children:[a.jsx(g,{style:Lb,children:n?Ib:Rb}),a.jsx(g,{style:Db,children:n?jb:Ob})]})]})}function Yb(){return a.jsxs(N,{h:"100%",justify:"center",align:"center",style:{minHeight:Ct},children:[a.jsx(Nt,{}),a.jsx(g,{c:"dimmed",children:Mb})]})}function Vb(){return a.jsx("div",{"aria-hidden":"true",style:ib})}function Jn({children:e}){const n=Ur();return a.jsxs(X,{h:{base:"auto",md:"100%"},padding:n,style:tb,children:[a.jsx(Vb,{}),a.jsx("div",{style:ob,children:e})]})}function Gb({report:e}){const[n,t]=d.useState(0),[s,i]=d.useState(!1),o=e.insights,r=n%o.length,c=o[r],l=$b(c),m=()=>t(p=>(p-1+o.length)%o.length),u=()=>t(p=>(p+1)%o.length);return d.useEffect(()=>{if(s||o.length<2)return;const p=setTimeout(()=>t(x=>(x+1)%o.length),Zf);return()=>clearTimeout(p)},[r,s,o.length]),a.jsxs(N,{gap:"sm",h:"100%",style:{minHeight:Ct},onMouseEnter:()=>i(!0),onMouseLeave:()=>i(!1),children:[a.jsx(Nt,{generatedAt:e.generatedAt}),a.jsxs("div",{className:"insight-slide",style:eb,children:[a.jsx(qb,{severity:c.severity,children:c.tag}),a.jsx(Pe,{order:2,style:Hr,children:c.headline}),a.jsx(g,{style:qr,children:Hi(c.body,e.scopeNames)}),a.jsx(g,{size:"xs",c:"dimmed",style:Br,children:Hi(l,e.scopeNames)})]},r),a.jsxs(C,{justify:"space-between",wrap:"nowrap",mt:"auto",children:[a.jsx(C,{gap:5,wrap:"nowrap",children:o.map((p,x)=>a.jsx(ya,{onClick:()=>t(x),"aria-label":`Ir al destacado ${x+1}`,"aria-current":x===r,children:a.jsx(Vr,{active:x===r})},p.code))}),a.jsxs(C,{gap:4,wrap:"nowrap",style:Kr,children:[a.jsxs(g,{style:Yr,children:[r+1," / ",o.length]}),a.jsx(J,{variant:"subtle",size:"sm",onClick:m,disabled:o.length<2,"aria-label":"Destacado anterior",style:Qn,children:a.jsx(st,{size:16,color:"currentColor"})}),a.jsx(J,{variant:"subtle",size:"sm",onClick:u,disabled:o.length<2,"aria-label":"Destacado siguiente",style:Qn,children:a.jsx(ct,{size:16,color:"currentColor"})})]})]})]})}function Gr(){return a.jsx(Jn,{children:a.jsx(Bb,{})})}function Wr(){return a.jsx(Jn,{children:a.jsx(Yb,{})})}function Xr({report:e}){return e===null||e.status==="empty"||e.insights.length===0?a.jsx(Jn,{children:a.jsx(Kb,{report:e})}):a.jsx(Jn,{children:a.jsx(Gb,{report:e})})}const Wb="Bundle",Xb="bundle",Qb=2;function Qr({bundle:e}){return a.jsx(we,{variant:"contained",children:a.jsxs(we.Item,{value:Xb,children:[a.jsx(we.Control,{children:Wb}),a.jsx(we.Panel,{children:a.jsx(En,{block:!0,children:JSON.stringify(e,null,Qb)})})]})})}const Jb="â";function la({label:e,value:n}){return a.jsxs(g,{size:"sm",children:[a.jsx(g,{span:!0,c:"dimmed",children:`${e}: `}),n??Jb]})}const He={all:["insight-report"],lists:()=>[...He.all,"list"],list:e=>[...He.lists(),e],details:()=>[...He.all,"detail"],detail:e=>[...He.details(),e],coverageAll:()=>[...He.all,"coverage"],coverage:e=>[...He.coverageAll(),e]};
5function ys(e,n){e.invalidateQueries({queryKey:He.lists()}),e.invalidateQueries({queryKey:He.coverageAll()}),n!==void 0?e.invalidateQueries({queryKey:He.detail(n)}):e.invalidateQueries({queryKey:He.details()})}const $a="/platform-admin/insights",Zb=5e3,Is="UNKNOWN_ERROR",eT=e=>((e==null?void 0:e.items)??[]).some(n=>n.pendingRegeneration);function aT(e){return w({queryKey:He.list(e),queryFn:()=>A($a,{params:e}),refetchInterval:n=>eT(n.state.data)?Zb:!1})}function nT(e){return w({queryKey:He.detail(e),queryFn:()=>A(`${$a}/${e}`),enabled:e!=null})}function tT(e){return w({queryKey:He.coverage(e),queryFn:()=>A(`${$a}/coverage`,{params:{date:e}})})}function sT(){const e=H(),{showSuccessToast:n,showErrorToast:t}=F();return U({mutationFn:s=>A(`${$a}/${s}`,{method:"DELETE"}),onSuccess:(s,i)=>{ys(e,i),n({description:"Informe eliminado correctamente."})},onError:s=>t(s.code??Is)})}function iT(){const e=H(),{showSuccessToast:n,showErrorToast:t}=F();return U({mutationFn:s=>A(`${$a}/delete`,{method:"POST",body:JSON.stringify({ids:s})}),onSuccess:()=>{ys(e),n({description:"Informes eliminados correctamente."})},onError:s=>t(s.code??Is)})}function Jr(){const e=H(),{showSuccessToast:n,showErrorToast:t}=F();return U({mutationFn:s=>A(`${$a}/regenerate`,{method:"POST",body:JSON.stringify({tenantIds:s})}),onSuccess:s=>{ys(e);const o=[`${s.queued.reduce((r,c)=>r+c.radii,0)} radios en cola`];s.skipped.length>0&&o.push(`${s.skipped.length} tenants ya en cola`),n({description:o.join(" · ")})},onError:s=>t(s.code??Is)})}function oT(){const{showToast:e}=F();return U({mutationFn:n=>A(`${$a}/preview`,{method:"POST",body:JSON.stringify(n)}),onError:n=>{const t=gt(n);e({title:t.title??"Error",description:t.message,variant:t.variant??"destructive"})}})}const ca={GENERATED:"generated",EMPTY:"empty",FAILED:"failed"},rT={NO_HIGHLIGHTS:"no_highlights"},Zr={SONNET:"claude-sonnet-5",OPUS:"claude-opus-5"},zt=Zr.SONNET,lT=Object.values(Zr).map(e=>({value:e,label:e})),kn=(e,n=null)=>n!==null?`${e}:${n}`:e,Xt={[kn(ca.GENERATED)]:"Generado",[kn(ca.EMPTY,rT.NO_HIGHLIGHTS)]:"VacÃo · sin nada destacable",[kn(ca.FAILED)]:"Fallido"},el=(e,n=null)=>Xt[kn(e,n)]??Xt[e]??e,cT=Object.entries(Xt).map(([e,n])=>({value:e,label:n??e})),dT=new Intl.NumberFormat("es-ES",{style:"currency",currency:"USD",minimumFractionDigits:4}),js=e=>dT.format(e),Rs=e=>e===null?null:`${(e.input_tokens??0)+(e.cache_read_input_tokens??0)+(e.cache_creation_input_tokens??0)} / ${e.output_tokens??0}`,uT="Vista previa",mT="Tenant",pT="Selecciona un tenant",gT="Secciones",hT="Ids separados por coma (opcional)",ET="Modelo",fT="Generar vista previa",bT="Cerrar",TT="Modelo",vT="Radio",xT="Tokens entrada/salida",ST="Coste",_T="Estado",CT=",";function NT(e){const n=e.split(CT).map(t=>t.trim()).filter(t=>t.length>0);return n.length>0?n:void 0}function AT({opened:e,onClose:n}){const[t,s]=d.useState(null),[i,o]=d.useState(""),[r,c]=d.useState(zt),{data:l}=Ta(),m=oT(),{reset:u}=m;d.useEffect(()=>{e&&(s(null),o(""),c(zt),u())},[e,u]);const p=d.useMemo(()=>(l??[]).map(b=>({value:b.id,label:b.name})),[l]),x=b=>{s(b),u()},h=b=>{c(b??zt),u()},E=()=>{t!==null&&m.mutate({tenantId:t,sectionIds:NT(i),model:r})},f=m.data;return a.jsx(se,{opened:e,onClose:n,title:uT,size:"xl",children:a.jsxs(N,{gap:"md",children:[a.jsxs(C,{grow:!0,align:"flex-end",children:[a.jsx(ee,{label:mT,placeholder:pT,data:p,value:t,onChange:x,searchable:!0,required:!0}),a.jsx(W,{label:gT,placeholder:hT,value:i,onChange:b=>o(b.currentTarget.value)}),a.jsx(ee,{label:ET,data:lT,value:r,onChange:h,allowDeselect:!1})]}),a.jsx(C,{justify:"flex-end",children:a.jsx(O,{onClick:E,loading:m.isPending,disabled:t===null,children:fT})}),m.isPending&&a.jsx(Ja,{surface:"paper",children:a.jsx(Gr,{})}),m.isError&&a.jsx(Ja,{surface:"paper",children:a.jsx(Wr,{})}),f!==void 0&&a.jsxs(a.Fragment,{children:[a.jsx(Ja,{surface:"paper",children:a.jsx(Xr,{report:f.report})}),a.jsxs(C,{gap:"lg",children:[a.jsx(la,{label:vT,value:f.scopeLabel}),a.jsx(la,{label:TT,value:f.model}),a.jsx(la,{label:xT,value:Rs(f.usage)}),a.jsx(la,{label:ST,value:f.cost===null?null:js(f.cost)}),a.jsx(la,{label:_T,value:el(f.status,f.emptyReason)})]}),a.jsx(Qr,{bundle:f.bundle})]}),a.jsx(C,{justify:"flex-end",children:a.jsx(O,{variant:"subtle",onClick:n,children:bT})})]})})}const yT="En cola",IT="info",jT={[ca.GENERATED]:"good",[ca.EMPTY]:"neutral",[ca.FAILED]:"poor"};function Qt(e){return e.pendingRegeneration?{tone:IT,label:yT}:{tone:jT[e.status],label:el(e.status,e.emptyReason)}}function RT(){return[z({id:"tenant",header:"Tenant",value:e=>e.tenant.name,min:160}),z({accessorKey:"scopeLabel",header:"Radio",value:e=>e.scopeLabel,min:160,max:220}),Ea({accessorKey:"date",header:"Fecha",value:e=>e.date}),De({accessorKey:"status",header:"Estado",min:150,max:190,tone:e=>Qt(e).tone,label:e=>Qt(e).label}),Ze({accessorKey:"insightsCount",header:"Piezas",value:e=>String(e.insightsCount),min:80,align:"right"}),Ze({accessorKey:"attempts",header:"Intentos",value:e=>e.attempts===null?null:String(e.attempts),min:90,align:"right"}),z({id:"tokens",header:"Tokens",value:e=>Rs(e.usage),min:120,max:150,align:"right"}),Ze({accessorKey:"cost",header:"Coste",value:e=>e.cost===null?null:js(e.cost),min:100,align:"right"})]}const OT="Informe",LT=" · ",DT="Cerrar",MT="Regenerar tenant",Yi="Eliminar",PT="Cancelar",wT="Eliminar informe",FT="Esta acción no se puede deshacer.",UT="La generación falló",kT="Sin motivo registrado.",zT="Intentos",$T="Tokens entrada/salida",HT="Coste",qT="Modelo",BT="Generado",KT="dd/MM/yyyy HH:mm";function YT(e){var n,t;return{date:e.date,status:e.status===ca.GENERATED?ca.GENERATED:ca.EMPTY,isStale:!1,generatedAt:null,insights:((n=e.content)==null?void 0:n.insights)??[],scopeNames:((t=e.content)==null?void 0:t.scopeNames)??[],emptyReason:e.emptyReason}}function VT({reportId:e,onClose:n,onRegenerate:t,onDelete:s}){const[i,o]=d.useState(null);e!==null&&e!==i&&o(e);const r=e===null?void 0:i??void 0,{data:c,isError:l}=nT(r),m=d.useRef(void 0);c!==void 0&&(m.current=c);const u=c??(e===null?m.current:void 0),p=u===void 0?OT:[u.tenant.name,u.scopeLabel,fn(u.date)].filter(h=>h.length>0).join(LT),x=h=>{na.openConfirmModal({title:wT,children:a.jsx(g,{size:"sm",children:FT}),labels:{confirm:Yi,cancel:PT},confirmProps:{color:"red"},cancelProps:{variant:"subtle"},onConfirm:()=>{s(h),n()}})};return a.jsx(se,{opened:e!==null,onClose:n,title:p,size:"xl",children:a.jsx(qn,{data:u,placeholder:a.jsx(Gr,{}),isError:l,errorState:a.jsx(Wr,{}),children:h=>{const{tone:E,label:f}=Qt(h);return a.jsxs(N,{gap:"md",children:[a.jsx(C,{children:a.jsx(Se,{tone:E,children:f})}),h.status===ca.FAILED?a.jsx(Ue,{color:"red",title:UT,children:h.failureReason??kT}):a.jsx(Ja,{surface:"paper",children:a.jsx(Xr,{report:YT(h)})}),a.jsxs(C,{gap:"lg",children:[a.jsx(la,{label:zT,value:h.attempts===null?null:String(h.attempts)}),a.jsx(la,{label:$T,value:Rs(h.usage)}),a.jsx(la,{label:HT,value:h.cost===null?null:js(h.cost)}),a.jsx(la,{label:qT,value:h.model}),a.jsx(la,{label:BT,value:Te(h.createdAt,KT)})]}),h.bundle!==null&&a.jsx(Qr,{bundle:h.bundle}),a.jsxs(C,{justify:"flex-end",children:[a.jsx(O,{variant:"subtle",onClick:n,children:DT}),a.jsx(O,{variant:"default",disabled:h.pendingRegeneration,onClick:()=>t(h.tenant.id),children:MT}),a.jsx(O,{color:"red",variant:"light",onClick:()=>x(h.id),children:Yi})]})]})}})})}const GT="DD/MM/YYYY",WT="Estado",XT="Fecha",QT="Tenant",JT=220,ZT=220,ev=160,av=200;function nv({search:e,onSearchChange:n,statusValue:t,onStatusValueChange:s,date:i,onDateChange:o,tenantId:r,onTenantIdChange:c}){const{data:l}=Ta(),m=d.useMemo(()=>(l??[]).map(u=>({value:u.id,label:u.name})),[l]);
5return a.jsxs(C,{children:[a.jsx(W,{placeholder:sr,value:e,onChange:u=>n(u.currentTarget.value),w:JT}),a.jsx(ee,{placeholder:WT,data:cT,value:t,onChange:s,clearable:!0,w:ZT}),a.jsx(os,{placeholder:XT,valueFormat:GT,dateParser:us,value:i,onChange:o,clearable:!0,w:ev}),a.jsx(ee,{placeholder:QT,data:m,value:r,onChange:c,clearable:!0,searchable:!0,w:av})]})}const tv="Regenerar informes de hoy",sv="Todos los tenants",iv="Tenants",ov="Selecciona tenants",rv="Se regeneran los informes de hoy con la foto de ahora; los tenants con una regeneración en cola se saltan.",lv="Cancelar",cv="Regenerar";function dv({opened:e,onClose:n,initialTenantIds:t,onRegenerated:s}){const[i,o]=d.useState(!1),[r,c]=d.useState([]),{data:l}=Ta(),m=Jr();d.useEffect(()=>{e&&(o(!1),c(t??[]))},[e]);const u=d.useMemo(()=>(l??[]).map(h=>({value:h.id,label:h.name})),[l]),p=i||r.length>0,x=()=>{m.mutate(i?null:r,{onSuccess:()=>{s==null||s(),n()}})};return a.jsx(se,{opened:e,onClose:n,title:tv,size:"md",children:a.jsxs(N,{gap:"md",children:[a.jsx(Me,{label:sv,checked:i,onChange:h=>o(h.currentTarget.checked)}),a.jsx(pt,{label:iv,placeholder:ov,data:u,value:r,onChange:c,disabled:i,searchable:!0,clearable:!0}),a.jsx(g,{size:"sm",c:"dimmed",children:rv}),a.jsxs(C,{justify:"flex-end",children:[a.jsx(O,{variant:"subtle",onClick:n,children:lv}),a.jsx(O,{onClick:x,loading:m.isPending,disabled:!p,children:cv})]})]})})}const uv="Insights",mv="Vista previa",pv="Regenerarâ¦",gv="Regenerar tenant",hv="regenerate",Ev="No hay informes generados",fv="Eliminar informe",bv="Esta acción no se puede deshacer.",Tv="Eliminar",vv="Cancelar",xv="Seleccionar todos en la página",Sv=":",_v=25,Vi=0,Cv=300,Nv="mrt-row-select",Av=30,yv=40;function Iv(e){if(e===null)return{status:void 0,emptyReason:void 0};const[n,t]=e.split(Sv);return{status:n,emptyReason:t}}function jv(){const[e,n]=d.useState(""),[t,s]=d.useState(null),[i,o]=d.useState(Hn()),[r,c]=d.useState(null),[l,m]=d.useState({pageIndex:0,pageSize:_v}),[u,p]=d.useState(!1),[x,h]=d.useState([]),[E,f]=d.useState(!1),[b,v]=d.useState(null),S=Gm(),{clearSelection:y,isRowSelected:_,toggleRow:T,selectPage:j,deselectPage:L}=S,[q]=rs(e,Cv),ie=d.useMemo(()=>{const{status:G,emptyReason:I}=Iv(t);return{search:q||void 0,status:G,emptyReason:I,dateFrom:i??void 0,dateTo:i??void 0,tenantId:r??void 0,page:l.pageIndex+1,limit:l.pageSize}},[q,t,i,r,l.pageIndex,l.pageSize]),{data:D,isLoading:V,isFetching:Y}=aT(ie),{data:Ke}=tT(i??Hn()),Fe=d.useMemo(()=>(D==null?void 0:D.items)??[],[D==null?void 0:D.items]),ta=(D==null?void 0:D.total)??0,da=sT(),va=iT(),ua=Jr();d.useEffect(()=>{m(G=>G.pageIndex===Vi?G:{...G,pageIndex:Vi})},[q,t,i,r]),d.useEffect(()=>{y()},[q,t,i,r,l.pageIndex,l.pageSize,y]);const M=d.useMemo(()=>Fe.map(G=>G.id),[Fe]),sa=d.useMemo(()=>M.length>0&&M.every(G=>_(G)),[M,_]),ia=d.useMemo(()=>M.some(G=>_(G)),[M,_]),K=d.useMemo(()=>{const G={};return M.forEach(I=>{_(I)&&(G[I]=!0)}),G},[M,_]),pe=d.useCallback(()=>{sa?L():j(M)},[sa,L,j,M]),Ye=d.useCallback(G=>{const I=typeof G=="function"?G(K):G,R=new Set(Object.keys(I).filter(B=>I[B])),k=new Set(Object.keys(K).filter(B=>K[B]));[...R].filter(B=>!k.has(B)).forEach(B=>T(B)),[...k].filter(B=>!R.has(B)).forEach(B=>T(B))},[K,T]),Oa=d.useCallback(G=>{na.openConfirmModal({title:G.length===1?fv:`Eliminar ${G.length} informes`,children:a.jsx(g,{size:"sm",children:bv}),labels:{confirm:Tv,cancel:vv},confirmProps:{color:"red"},cancelProps:{variant:"subtle"},onConfirm:()=>{const I={onSuccess:()=>y()};G.length===1?da.mutate(G[0],I):va.mutate(G,I)}})},[y,da,va]),ma=d.useCallback(G=>{h(G),p(!0)},[]),At=d.useCallback(()=>{h([]),p(!0)},[]),yt=d.useMemo(()=>RT(),[]),It=_e({columns:yt,data:Fe,getRowId:G=>G.id,onRowClick:G=>v(G.id),manualPagination:!0,onPaginationChange:m,rowCount:ta,enableColumnFilters:!1,enableSorting:!1,enableRowSelection:!0,enableSelectAll:!1,mantineSelectCheckboxProps:{color:"brand"},positionToolbarAlertBanner:"none",onRowSelectionChange:Ye,displayColumnDefOptions:{[Nv]:{size:Av,Header:()=>a.jsx(Me,{checked:sa,indeterminate:ia&&!sa,onChange:pe,size:"sm",color:"brand","aria-label":xv})}},enableRowActions:!0,renderRowActionMenuItems:({row:G})=>a.jsx(gr,{actions:[Ap(()=>v(G.original.id)),Ip(hv,gv,()=>ua.mutate([G.original.tenant.id]),{icon:a.jsx(pn,{size:16,color:"currentColor"}),disabled:G.original.pendingRegeneration}),yp(()=>Oa([G.original.id]))]}),state:{isLoading:V,showLoadingOverlay:Y,pagination:l,rowSelection:K},renderEmptyRowsFallback:()=>a.jsx(ve,{py:"xl",children:a.jsxs(N,{align:"center",gap:"xs",children:[a.jsx(cs,{size:yv,style:{color:"var(--mantine-color-gray-4)"}}),a.jsx(g,{c:"dimmed",children:Ev})]})})});return a.jsxs(de,{title:uv,actionButton:{component:a.jsxs(C,{gap:"sm",children:[a.jsx(Ui,{label:mv,icon:a.jsx(vn,{size:16,color:"currentColor"}),variant:"default",onClick:()=>f(!0)}),a.jsx(Ui,{label:pv,icon:a.jsx(pn,{size:16,color:"currentColor"}),onClick:At})]})},children:[a.jsxs(N,{gap:"md",children:[a.jsx(nv,{search:e,onSearchChange:n,statusValue:t,onStatusValueChange:s,date:i,onDateChange:o,tenantId:r,onTenantIdChange:c}),a.jsx(Pf,{coverage:Ke}),S.selectedIds.size>0&&a.jsx(Af,{selection:S,reports:Fe,onRegenerate:ma,onDelete:Oa}),a.jsx(X,{children:a.jsx(xe,{table:It})})]}),a.jsx(dv,{opened:u,onClose:()=>p(!1),initialTenantIds:x,onRegenerated:y}),a.jsx(AT,{opened:E,onClose:()=>f(!1)}),a.jsx(VT,{reportId:b,onClose:()=>v(null),onRegenerate:G=>ua.mutate([G]),onDelete:G=>da.mutate(G)}
5)]})}const Xa={all:["captured-email"],lists:()=>[...Xa.all,"list"],list:e=>[...Xa.lists(),e],details:()=>[...Xa.all,"detail"],detail:e=>[...Xa.details(),e]};function Rv(e){const n=new URLSearchParams({page:e.page.toString(),limit:e.limit.toString()});return e.search&&n.append("search",e.search),w({queryKey:Xa.list(e),queryFn:()=>A(`/platform-admin/captured-emails?${n.toString()}`),placeholderData:t=>t})}function Ov(e){return w({queryKey:Xa.detail(e),queryFn:()=>A(`/platform-admin/captured-emails/${e}`),enabled:!!e})}const Lv=25,Dv=300,Gi="dd/MM/yyyy HH:mm:ss",Va=1024,Mv={width:"100%",height:"62vh",border:"1px solid var(--mantine-color-gray-3)",borderRadius:"var(--mantine-radius-md)",background:"var(--mantine-color-white)"},Pv={overflow:"auto",height:"62vh"},wv={display:"block",whiteSpace:"pre-wrap",wordBreak:"break-all",fontSize:"11px"};function Fv(e){return e<Va?`${e} B`:e<Va*Va?`${Math.round(e/Va)} KB`:`${(e/(Va*Va)).toFixed(1)} MB`}function Uv({captureEnabled:e}){return e===void 0?null:e?a.jsx(Se,{tone:"alert",size:"lg",leftSection:a.jsx(Hc,{size:16,color:"currentColor"}),children:"No se envÃa nada fuera"}):a.jsx(Se,{tone:"poor",size:"lg",leftSection:a.jsx(xo,{size:16,color:"currentColor"}),children:"Los correos se envÃan de verdad"})}function kv({attachment:e}){return a.jsx(fa,{withBorder:!0,radius:"md",px:"sm",py:4,children:a.jsxs(C,{gap:8,wrap:"nowrap",children:[a.jsx(_o,{size:15,color:"currentColor"}),a.jsx(g,{size:"xs",fw:500,children:e.filename}),a.jsxs(g,{size:"xs",c:"dimmed",children:[e.contentType," · ",Fv(e.sizeBytes)]})]})})}function zv(){const e=ka(),n=za(`(max-width: ${e.breakpoints.md})`),[t,s]=d.useState(""),[i]=rs(t,Dv),[o,r]=d.useState({pageIndex:0,pageSize:Lv}),[c,l]=d.useState(null),{data:m,isLoading:u,isFetching:p}=Rv({search:i,page:o.pageIndex+1,limit:o.pageSize}),{data:x}=Ov(c),h=d.useMemo(()=>[{...z({accessorKey:"capturedAt",header:"Fecha",value:f=>Te(f.capturedAt,Gi),min:168,max:184}),enableSorting:!1},{...z({accessorKey:"fromName",header:"Autoescuela",value:f=>f.fromName??"",min:180,max:220}),enableSorting:!1},{...z({accessorKey:"toAddress",header:"Para",value:f=>f.toAddress,min:240,max:300}),enableSorting:!1},{...z({accessorKey:"subject",header:"Asunto",value:f=>f.subject,min:200}),enableSorting:!1}],[]),E=_e({columns:h,data:(m==null?void 0:m.items)??[],onRowClick:f=>l(f.id),enableTopToolbar:!1,enableColumnFilters:!1,manualPagination:!0,onPaginationChange:r,rowCount:(m==null?void 0:m.total)??0,state:{isLoading:u,showLoadingOverlay:p,pagination:o}});return a.jsxs(de,{title:"Correos",actionButton:{component:a.jsx(Uv,{captureEnabled:m==null?void 0:m.captureEnabled})},children:[a.jsxs(N,{gap:"md",children:[a.jsx(W,{placeholder:"Filtrarâ¦",value:t,onChange:f=>{s(f.currentTarget.value),r(b=>({...b,pageIndex:0}))},leftSection:a.jsx(ea,{size:16}),w:320}),a.jsx(X,{children:a.jsx(xe,{table:E})})]}),a.jsx(se,{opened:!!c,onClose:()=>l(null),title:"Detalle del correo",size:"95%",fullScreen:n,children:a.jsx(qn,{data:x,placeholder:a.jsx(g,{c:"dimmed",children:"Cargando el correoâ¦"}),children:f=>a.jsxs(N,{gap:"md",children:[a.jsxs(N,{gap:"xs",children:[a.jsxs(C,{gap:"md",wrap:"wrap",children:[a.jsx(g,{size:"sm",fw:600,children:f.subject}),a.jsxs(g,{size:"sm",children:[a.jsx(g,{span:!0,c:"dimmed",children:"Para: "}),f.toAddress]}),a.jsxs(g,{size:"sm",children:[a.jsx(g,{span:!0,c:"dimmed",children:"Autoescuela: "}),f.fromName??"-"]}),a.jsxs(g,{size:"sm",children:[a.jsx(g,{span:!0,c:"dimmed",children:"Fecha: "}),Te(f.capturedAt,Gi)]})]}),f.attachments.length>0&&a.jsxs(C,{gap:"xs",wrap:"wrap",children:[a.jsx(g,{size:"sm",c:"dimmed",children:"Adjuntos:"}),f.attachments.map((b,v)=>a.jsx(kv,{attachment:b},`${v}-${b.filename}`))]})]}),a.jsxs(Ua,{cols:{base:1,md:2},spacing:"md",children:[a.jsxs(N,{gap:4,children:[a.jsx(g,{size:"sm",fw:600,children:"Asà se ve"}),a.jsx("iframe",{sandbox:"",srcDoc:f.bodyHtml??"",title:"Vista del correo",style:Mv})]}),a.jsxs(N,{gap:4,children:[a.jsx(g,{size:"sm",fw:600,children:"HTML"}),a.jsx(Tn,{style:Pv,children:a.jsx(En,{style:wv,children:f.bodyHtml??""})})]})]})]})})})]})}const un={all:["presence"],lists:()=>[...un.all,"list"],details:()=>[...un.all,"detail"],detail:e=>[...un.details(),e]},Zn=1e4,$v=90;function Hv(){const e=w({queryKey:un.lists(),queryFn:()=>A("/platform-admin/presence"),refetchInterval:Zn,refetchIntervalInBackgroun
5d:!1}),{handleError:n}=Q(),t=d.useRef(!1);return d.useEffect(()=>{if(!e.isError){t.current=!1;return}t.current||(t.current=!0,n(e.error))},[e.isError,e.error,n]),e}function qv(e){return w({queryKey:un.detail(e),queryFn:()=>A(`/platform-admin/presence/${e}`),enabled:e!==null,refetchInterval:Zn,refetchIntervalInBackground:!1})}const Bv=1e3,Kv=6e4,Yv=3e4,mn=60,Vv={student:"Alumno",instructor:"Profesor",staff:"Oficina"},Gv={student:["alumno","alumnos"],instructor:["profesor","profesores"],staff:["de oficina","de oficina"]};function et(e,n){const t=typeof n=="string"?new Date(n):n;return Math.floor((t.getTime()-new Date(e).getTime())/Kv)}function al(e,n){if(n.getTime()-new Date(e).getTime()<Yv)return"ahora";const t=Math.max(1,et(e,n));return t<mn?`hace ${t} min`:`hace ${Math.floor(t/mn)} h`}function Wv(e,n){return n.getTime()-new Date(e).getTime()>$v*Bv}function Jt(e){return e<1?"menos de 1 min":e<mn?`${e} min`:`${Math.floor(e/mn)} h ${e%mn} min`}const Xv={student:"neutral",instructor:"info",staff:"special"};function nl({role:e}){return a.jsx(Se,{size:"sm",tone:Xv[e],style:{flexShrink:0},children:Vv[e]})}const Qv="-",Jv=15;function tl({user:e,path:n,title:t}){const s=Nn();if(n===null)return a.jsx(g,{size:"sm",c:"dimmed",children:Qv});const i=ir(e.tenantDomain,n),o=`Entrar como ${e.fullName.split(" ")[0]} aquÃ`;return a.jsxs(C,{gap:4,wrap:"nowrap",style:{minWidth:0},onClick:r=>r.stopPropagation(),children:[a.jsx(oe,{label:i,openDelay:bn,withArrow:!0,withinPortal:!0,children:a.jsx(gs,{href:i,target:"_blank",size:"sm",ff:t===null?"monospace":void 0,truncate:!0,children:t??n})}),a.jsx(oe,{label:o,withArrow:!0,withinPortal:!0,children:a.jsx(J,{variant:"subtle",color:"gray",size:"md","aria-label":o,loading:s.isPending,onClick:()=>s.mutate({tenantId:e.tenantId,userId:e.userId,redirect:n}),style:{flexShrink:0},children:a.jsx(ut,{size:Jv,color:"currentColor"})})})]})}const Zv="HH:mm",Os={fontVariantNumeric:"tabular-nums"},Wi="grid grid-cols-[44px_minmax(0,1fr)_auto] items-center gap-3 py-2 border-b border-[var(--app-color-hairline)] last:border-b-0";function $t({label:e,value:n,valueFirst:t=!1}){const s=a.jsx(g,{span:!0,inherit:!0,fw:600,c:"var(--mantine-color-text)",children:n});return a.jsx(g,{size:"sm",c:"dimmed",style:Os,children:t?a.jsxs(a.Fragment,{children:[s," ",e]}):a.jsxs(a.Fragment,{children:[e," ",s]})})}function Xi({at:e}){return a.jsx(g,{size:"xs",c:"dimmed",style:Os,children:Te(e,Zv)})}function ex({presence:e}){const n=Nn(),t=new Date,s=e.fullName.split(" ")[0],i=e.path,o=Wv(e.lastSeenAt,t),r=o?e.lastSeenAt:t;return a.jsxs(N,{gap:"lg",children:[a.jsxs(N,{gap:"sm",children:[a.jsxs(C,{gap:"xs",children:[a.jsx(g,{size:"sm",c:"dimmed",children:e.tenantName}),o&&a.jsx(Se,{size:"sm",tone:"neutral",children:"Desconectado"})]}),a.jsxs(C,{gap:"lg",children:[a.jsx($t,{label:"Visto",value:al(e.lastSeenAt,t)}),a.jsx($t,{label:"En sesión",value:Jt(et(e.sessionStartedAt,r))}),a.jsx($t,{label:"pantallas",value:e.trail.length,valueFirst:!0})]}),i!==null&&a.jsxs(O,{leftSection:a.jsx(ut,{size:15,color:"currentColor"}),loading:n.isPending,onClick:()=>n.mutate({tenantId:e.tenantId,userId:e.userId,redirect:i}),w:"fit-content",children:["Entrar como ",s]})]}),a.jsxs(N,{gap:"xs",children:[a.jsx(g,{size:"xs",fw:600,c:"dimmed",tt:"uppercase",children:"Navegación en esta sesión"}),a.jsxs(he,{component:"ol",m:0,p:0,style:{listStyle:"none"},children:[a.jsxs(he,{component:"li",className:Wi,children:[a.jsx(Xi,{at:e.sessionStartedAt}),a.jsx(g,{size:"xs",c:"dimmed",children:"Empieza la sesión"}),a.jsx("span",{})]}),e.trail.map((c,l)=>{const m=e.trail[l+1];return a.jsxs(he,{component:"li",className:Wi,children:[a.jsx(Xi,{at:c.at}),a.jsx(tl,{user:e,path:c.path,title:c.title}),m||o?a.jsx(g,{size:"xs",c:"dimmed",style:Os,children:Jt(et(c.at,m?m.at:e.lastSeenAt))}):a.jsx(g,{size:"xs",c:"brand",fw:600,children:"aquà ahora"})]},`${c.at}-${c.path}`)})]})]})]})}function ax({userId:e,onClose:n}){const{data:t,isError:s}=qv(e),i=s&&!t;return a.jsx(qc,{opened:e!==null,onClose:n,position:"right",size:"md",title:a.jsx(qn,{data:t,isError:i,errorState:null,placeholder:a.jsx(qe,{width:180}),children:o=>a.jsxs(C,{component:"span",gap:"xs",wrap:"wrap",children:[a.jsx(g,{span:!0,fw:700,size:"lg",children:o.fullName}),a.jsx(nl,{role:o.role})]})}),children:a.jsx(qn,{data:t,isError:i,errorState:a.jsx(g,{size:"sm",c:"dimmed",children:"No se ha podido cargar la actividad."}),placeholder:a.jsx(qe,{width:220}),children:o=>a.jsx(ex,{presence:o})})})}const nx=["student","instructor","staff"],tx=[150,120,140],Zt={fontVariantNumeric:"tabular-nums"};function sx(e){const n=new Map;return e.forEach(t=>{const s=n.get(t.tenantId)??{tenantId:t.tenantId,tenantName:t.tenantName,count:0};s.count+=1,n.set(t.tenantId,s)}),[...n.values()].sort((t,s)=>s.count-t.count||t.tenantName.localeCompare(s.tenantName))}function ix({users:e,selectedTenantId:n,onSelectTenant:t}){return e===void 0?a.jsx(C,{gap:"xs",children:tx.map(s=>a.jsx(Hs,{checked:!1,disabled:!0,variant:"outline",children:a.jsx(qe,{width:s})}
5,s))}):e.length===0?a.jsx(g,{size:"sm",c:"dimmed",children:"Ninguna autoescuela con gente conectada."}):a.jsx(C,{gap:"xs",children:sx(e).map(s=>a.jsxs(Hs,{checked:n===s.tenantId,onChange:()=>t(n===s.tenantId?null:s.tenantId),variant:"outline",children:[s.tenantName," ",a.jsx(g,{span:!0,inherit:!0,c:"dimmed",style:Zt,children:s.count})]},s.tenantId))})}function ox({users:e,selectedTenantId:n,onSelectTenant:t}){return a.jsx(X,{children:a.jsxs(C,{gap:"xl",align:"center",wrap:"wrap",children:[a.jsxs(N,{gap:4,children:[a.jsx(g,{fz:44,fw:700,lh:1,style:Zt,children:e?e.length:a.jsx(qe,{width:56})}),a.jsx(g,{size:"sm",c:"dimmed",children:(e==null?void 0:e.length)===1?"conectado ahora":"conectados ahora"})]}),a.jsx(tt,{orientation:"vertical",visibleFrom:"sm",style:{alignSelf:"stretch"}}),a.jsxs(N,{gap:"sm",style:{flex:1,minWidth:0},children:[a.jsx(C,{gap:"lg",children:nx.map(s=>{const i=(e==null?void 0:e.filter(o=>o.role===s).length)??0;return a.jsxs(C,{gap:6,align:"baseline",children:[a.jsx(g,{fw:600,size:"lg",style:Zt,children:e?i:a.jsx(qe,{width:20})}),a.jsx(g,{size:"sm",c:"dimmed",children:Gv[s][i===1?0:1]})]},s)})}),a.jsx(ix,{users:e,selectedTenantId:n,onSelectTenant:t})]})]})})}const rx="En directo",at=1e3,Qi=8;function lx({dataUpdatedAt:e}){const[n,t]=d.useState(()=>Date.now());Kc(()=>t(Date.now()),at,{autoInvoke:!0});const s=Math.max(0,Math.round((n-e)/at));return a.jsxs(C,{gap:8,wrap:"nowrap",children:[a.jsx(he,{w:Qi,h:Qi,style:{borderRadius:"50%",backgroundColor:cd("good")},"aria-hidden":!0}),a.jsx(g,{size:"sm",c:"dimmed",style:{fontVariantNumeric:"tabular-nums"},children:s===0?"actualizado ahora":`actualizado hace ${s} s`})]})}function cx(){const{data:e,dataUpdatedAt:n,isLoading:t,isError:s}=Hv(),[i,o]=d.useState(null),[r,c]=d.useState(null),l=s&&!e,m=e!=null&&e.users.some(h=>h.tenantId===i)?i:null,u=d.useMemo(()=>((e==null?void 0:e.users)??[]).filter(h=>m===null||h.tenantId===m),[e,m]),p=d.useMemo(()=>{const h=new Date(n);return[{id:"person",header:"Persona",...Be({min:220,max:320}),enableSorting:!1,Cell:({row:E})=>a.jsxs(C,{gap:"xs",wrap:"nowrap",style:{minWidth:0},children:[a.jsx(g,{size:"sm",truncate:!0,children:E.original.fullName}),a.jsx(nl,{role:E.original.role})]})},{...z({accessorKey:"tenantName",header:"Autoescuela",value:E=>E.tenantName,min:160,max:240}),enableSorting:!1},{id:"screen",header:"Pantalla",...Be({min:220}),enableSorting:!1,Cell:({row:E})=>a.jsx(tl,{user:E.original,path:E.original.path,title:E.original.title})},{...z({id:"seen",header:"Visto",value:E=>al(E.lastSeenAt,h),min:90,max:110}),enableSorting:!1},{...z({id:"stay",header:"En sesión",value:E=>Jt(et(E.sessionStartedAt,h)),min:110,max:140}),enableSorting:!1}]},[n]),x=_e({columns:p,data:u,onRowClick:h=>c(h.userId),enableColumnFilters:!1,enablePagination:!1,enableBottomToolbar:!1,state:{isLoading:t},renderEmptyRowsFallback:()=>a.jsx(Xs,{icon:dt,title:"Nadie conectado ahora mismo",description:`Aparecerá aquà quien tenga Drovify abierto y a la vista. Se actualiza solo cada ${Zn/at} segundos.`})});return a.jsxs(de,{title:rx,actionButton:n?{component:a.jsx(lx,{dataUpdatedAt:n})}:void 0,children:[l?a.jsx(X,{children:a.jsx(Xs,{icon:Bc,title:"No se ha podido cargar quién está conectado",description:`Se volverá a intentar solo cada ${Zn/at} segundos.`})}):a.jsxs(N,{gap:"md",children:[a.jsx(ox,{users:e==null?void 0:e.users,selectedTenantId:m,onSelectTenant:o}),a.jsx(X,{children:a.jsx(xe,{table:x})})]}),a.jsx(ax,{userId:r,onClose:()=>c(null)})]})}const dx="https://login.drovify.com";function aS(){const{isAuthenticated:e,roles:n,loading:t}=an(),{loading:s}=en();return t||s?a.jsx(ve,{h:"100vh",children:a.jsx(me,{size:"lg"})}):!e||!n.includes(Ma.PlatformAdmin)?(window.location.href=dx,null):a.jsx(Yc,{children:a.jsxs(ae,{element:a.jsx(Xu,{SidebarComponent:Wm}),children:[a.jsx(ae,{path:"/",element:a.jsx(gp,{})}),a.jsx(ae,{path:"/tenants/:tenantId/copy-data",element:a.jsx(Gg,{})}),a.jsx(ae,{path:"/tenants/:tenantId",element:a.jsx(yg,{})}),a.jsx(ae,{path:"/account",element:a.jsx(Jg,{})}),a.jsx(ae,{path:"/referrals",element:a.jsx(eh,{})}),a.jsx(ae,{path:"/announcements",element:a.jsx(Ih,{})}),a.jsx(ae,{path:"/announcements/new",element:a.jsx(Ri,{})}),a.jsx(ae,{path:"/announcements/:id/edit",element:a.jsx(Ri,{})}),a.jsx(ae,{path:"/documents",element:a.jsx(Oh,{})}),a.jsx(ae,{path:"/simulation-criteria",element:a.jsx(qh,{})}),a.jsx(ae,{path:"/simulation-criteria/:id",element:a.jsx(Zh,{})}),a.jsx(ae,{path:"/knowledge-base/categories",element:a.jsx(YE,{})}),a.jsx(ae,{path:"/knowledge-base/articles",element:a.jsx(yE,{})}),a.jsx(ae,{path:"/knowledge-base/articles/new",element:a.jsx(Li,{})}),a.jsx(ae,{path:"/knowledge-base/articles/:id",element:a.jsx(Li,{})}),a.jsx(ae,{path:"/knowledge-base/fragments",element:a.jsx(dE,{})}),a.jsx(ae,{path:"/knowledge-base/fragments/new",element:a.jsx(Oi,{})}),a.jsx(ae,{path:"/knowledge-base/fragments/:id",element:a.jsx(Oi,{})}),a.jsx(ae,{path:"/chatbot/conversations",element:a.jsx(pE,{})}),a.jsx(ae,{path:"/chatbot/conversations/:id",element:a.jsx(bE,{})}),a.jsx(ae,{path:"/tools/dgt-sync",element:a.jsx(rh,{})}),a.jsx(ae,{path:"/tools/aues-logs",element:a.jsx(mh,{})}),a.jsx(ae,{path:"/tools/aues-simulado",element:a.jsx(fh,{})}),a.jsx(ae,{path:"/tools/allocation-manager",element:a.jsx(_h,{})}),a.jsx(ae,{path:"/tools/scheduled-tasks",element:a.jsx(gf,{})}),a.jsx(ae,{path:"/tools/scheduled-tasks/:id",element:a.jsx(bf,{})}),a.jsx(ae,{path:"/tools/insights",element:a.jsx(jv,{})}),a.jsx(ae,{path:"/tools/emails",element:a.jsx(zv,{})}),a.jsx(ae,{path:"/presence",element:a.jsx(cx,{})}),a.jsx(ae,{path:"/dgt-sync",element:a.jsx(Ot,{to:"/tools/dgt-sync"})}),a.jsx(ae,{path:"/chatbot/knowledge/*",element:a.jsx(Ot,{to:"/knowledge-base/fragments"})}),a.jsx(ae,{path:"*",element:a.jsx(Ot,{to:"/"})})]})})}export{jm as $,Om as A,gs as B,tn as C,_x as D,Xs as E,Km as F,wg as G,oi as H,dn as I,Ix as J,Dx as K,sm as L,X as M,qe as N,ju as O,Cn as P,jx as Q,Ze as R,Se as S,ba as T,Ma as U,z as V,Be as W,_e as X,Ui as Y,Wo as Z,Ea as _,Q as a,Qu as a$,Ra as a0,Vx as a1,Bx as a2,Kx as a3,Yx as a4,Gm as a5,km as a6,tr as a7,De as a8,Px as a9,$x as aA,Cm as aB,wx as aC,fx as aD,Ld as aE,Aa as aF,Qe as aG,ko as aH,$o as aI,_n as aJ,zo as aK,uu as aL,Tu as aM,bu as aN,gu as aO,du as aP,gx as aQ,Cd as aR,Zu as aS,Yo as aT,ue as aU,Vo as aV,Fu as aW,Yu as aX,On as aY,Ko as aZ,Ox as a_,wm as aa,zp as ab,gr as ac,qx as ad,Jx as ae,yp as af,eS as ag,zi as ah,Mx as ai,Ur as aj,Xr as ak,Wr as al,Gr as am,kg as an,Na as ao,Gx as ap,Qx as aq,bs as ar,Ap as as,ge as at,Pm as au,Zx as av,er as aw,Pg as ax,Um as ay,_d as az,$ as b,Bn as b0,Gu as b1,Lx as b2,Xu as b3,md as b4,Ex as b5,bx as b6,aS as b7,Cx as b8,Ux as b9,br as bA,zx as ba,si as bb,Wx as bc,ph as bd,gh as be,Ip as bf,Xx as bg,bm as bh,Sm as bi,bt as bj,Au as bk,yx as bl,Cu as bm,Nx as bn,Ax as bo,Tx as bp,Nd as bq,Ad as br,Po as bs,vx as bt,xx as bu,Dr as bv,Ga as bw,Wg as bx,Qg as by,fr as bz,an as c,Et as d,ft as e,kx as f,Yt as g,Bm as h,sr as i,Hx as j,Sx as k,Re as l,Ho as m,Bo as n,Fx as o,gt as p,en as q,Ja as r,Tn as s,Sn as t,F as u,hx as v,de as w,Rx as x,ar as y,jd 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.