1/*! For license information please see 258.fbf629e7.chunk.js.LICENSE.txt */ 2"use strict";(self.webpackChunkfrontend=self.webpackChunkfrontend||[]).push([[258],{8535(e,a,s){s.d(a,{A:()=>g});var t=s(9379),i=s(5544),r=s(5043),o=s(4980),n=s(1140),l=s(3390),d=s(2264),c=s(5088),m=s(1360),p=s(8693),u=s(9855),x=s(6328),f=s(5187),h=s(579);const v=[{i:0,label:"Lunes"},{i:1,label:"Martes"},{i:2,label:"Mi\xe9rcoles"},{i:3,label:"Jueves"},{i:4,label:"Viernes"}];function b(e,a){return e.start<a.end&&a.start<e.end}function g(e){let a=e.professional,s=e.onRefresh;const g=(0,f.A)().user,j=(null===g||void 0===g?void 0:g.id)===(null===a||void 0===a?void 0:a.id),y=(0,r.useState)(()=>Object.fromEntries(v.map(e=>[e.i,[]]))),N=(0,i.A)(y,2),A=N[0],k=N[1],w=(0,r.useState)(!1),C=(0,i.A)(w,2),_=C[0],E=C[1],R=(0,r.useCallback)(async()=>{if(null!==a&&void 0!==a&&a.id)try{const e=await o.api.get("/professionals/".concat(a.id,"/schedule")),s=Object.fromEntries(v.map(e=>[e.i,[]]));(e.data.days||[]).forEach(e=>{!1!==e.active&&"undefined"!==typeof s[e.weekday]&&s[e.weekday].push({start:e.start_time,end:e.end_time})}),Object.keys(s).forEach(e=>s[e].sort((e,a)=>e.start.localeCompare(a.start))),k(s)}catch(e){}},[null===a||void 0===a?void 0:a.id]);(0,r.useEffect)(()=>{R()},[R]);const S=(e,a,s)=>{k(i=>(0,t.A)((0,t.A)({},i),{},{[e]:(i[e]||[]).map((e,i)=>i===a?(0,t.A)((0,t.A)({},e),s):e)}))};return(0,h.jsxs)(n.Zp,{className:"p-5","data-testid":"prof-schedule-card",children:[(0,h.jsxs)("div",{className:"flex items-center gap-2 mb-3",children:[(0,h.jsx)(c.A,{size:16,className:"text-primary"}),(0,h.jsx)("div",{className:"text-sm font-semibold",children:"Horarios de disponibilidad (L-V, Europe/Madrid)"})]}),(0,h.jsxs)("div",{className:"text-xs text-muted-foreground mb-3",children:["A\xf1ade una o varias franjas por d\xeda (por ej. ma\xf1ana 09:00-13:00 y tarde 17:00-20:00). Fuera de tus franjas la agenda aparecer\xe1 en ",(0,h.jsx)("span",{className:"font-medium",children:"gris"})," cuando alguien filtre solo por ti.",!j&&(0,h.jsx)("span",{className:"block mt-1 text-amber-700",children:" S\xf3lo el propio profesional puede editar estos horarios."})]}),(0,h.jsx)("div",{className:"flex flex-col gap-3",children:v.map(e=>{const a=A[e.i]||[];return(0,h.jsxs)("div",{className:"border-b border-border pb-3","data-testid":"schedule-day-".concat(e.i),children:[(0,h.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,h.jsx)("div",{className:"text-sm font-medium",children:e.label}),j&&(0,h.jsxs)(l.$,{type:"button",size:"sm",variant:"outline",onClick:()=>{return a=e.i,void k(e=>(0,t.A)((0,t.A)({},e),{},{[a]:[...e[a]||[],{start:"09:00",end:"13:00"}]}));var a},"data-testid":"schedule-add-slot-".concat(e.i),children:[(0,h.jsx)(m.A,{size:12,className:"mr-1"})," A\xf1adir franja"]})]}),0===a.length&&(0,h.jsx)("div",{className:"text-xs text-muted-foreground italic pl-1","data-testid":"schedule-empty-".concat(e.i),children:"No disponible este d\xeda"}),(0,h.jsx)("div",{className:"flex flex-col gap-2",children:a.map((a,s)=>(0,h.jsxs)("div",{className:"flex flex-wrap items-center gap-2 pl-1","data-testid":"schedule-slot-".concat(e.i,"-").concat(s),children:[(0,h.jsx)("span",{className:"text-xs text-muted-foreground",children:"de"}),(0,h.jsx)(d.p,{type:"time",value:a.start,onChange:a=>S(e.i,s,{start:a.target.value}),disabled:!j,className:"w-[110px]","data-testid":"schedule-slot-".concat(e.i,"-").concat(s,"-start")}),(0,h.jsx)("span",{className:"text-xs text-muted-foreground",children:"a"}),(0,h.jsx)(d.p,{type:"time",value:a.end,onChange:a=>S(e.i,s,{end:a.target.value}),disabled:!j,className:"w-[110px]","data-testid":"schedule-slot-".concat(e.i,"-").concat(s,"-end")}),j&&(0,h.jsx)(l.$,{type:"button",size:"icon",variant:"ghost",className:"text-red-600 hover:bg-red-50",onClick:()=>((e,a)=>{k(s=>(0,t.A)((0,t.A)({},s),{},{[e]:(s[e]||[]).filter((e,s)=>s!==a)}))})(e.i,s),"data-testid":"schedule-slot-".concat(e.i,"-").concat(s,"-remove"),children:(0,h.jsx)(u.A,{size:14})})]},s))})]},e.i)})}),j&&(0,h.jsx)("div",{className:"mt-3 flex justify-end",children:(0,h.jsxs)(l.$,{onClick:async()=>
2{if(!j)return;const e=[];for(const a of v){const s=(A[a.i]||[]).slice().sort((e,a)=>e.start.localeCompare(a.start));for(let t=0;t<s.length;t++){const i=s[t];if(!i.start||!i.end)return void x.oR.error("".concat(a.label,": hora incompleta en la franja ").concat(t+1));if(i.start>=i.end)return void x.oR.error("".concat(a.label,": fin (").concat(i.end,") debe ser posterior a inicio (").concat(i.start,")"));if(t>0&&b(s[t-1],i))return void x.oR.error("".concat(a.label,": las franjas ").concat(t," y ").concat(t+1," se solapan"));e.push({weekday:a.i,start_time:i.start,end_time:i.end,active:!0})}}E(!0);try{await o.api.put("/professionals/".concat(a.id,"/schedule"),{days:e}),x.oR.success("Horarios guardados. Se reflejan en la agenda al instante."),s&&s()}catch(r){var t,i;x.oR.error((null===(t=r.response)||void 0===t||null===(i=t.data)||void 0===i?void 0:i.detail)||"No se pudieron guardar los horarios")}finally{E(!1)}},disabled:_,className:"btn-cta","data-testid":"schedule-save-btn",children:[(0,h.jsx)(p.A,{size:14,className:"mr-1"}),_?"Guardando\u2026":"Guardar horarios"]})})]})}},3081(e,a,s){s.d(a,{A:()=>y});var t=s(5544),i=s(5043),r=s(4980),o=s(1140),n=s(3390),l=s(5949),d=s(2264),c=s(1981),m=s(3484),p=s(6833),u=s(7719),x=s(1680),f=s(9855),h=s(797),v=s(6328),b=s(579);const g={titulo_academico:"T\xedtulo acad\xe9mico",seguro_rc:"Seguro de Responsabilidad Civil",colegiacion:"Colegiaci\xf3n profesional",otro:"Otro"},j=["titulo_academico","seguro_rc","colegiacion"];function y(e){let a=e.professional,s=e.onChange;const y=(0,i.useState)([]),N=(0,t.A)(y,2),A=N[0],k=N[1],w=(0,i.useState)("titulo_academico"),C=(0,t.A)(w,2),_=C[0],E=C[1],R=(0,i.useRef)(null),S=(0,i.useState)(!1),z=(0,t.A)(S,2),M=z[0],q=z[1],D=(0,i.useCallback)(async()=>{try{const e=(await r.api.get("/professionals/".concat(a.id,"/documents"))).data;k(e.filter(e=>!["convenio","lopd_pro","cesion_imagen_pro"].includes(e.category)))}catch(e){console.error(e)}},[a.id]);(0,i.useEffect)(()=>{D()},[D]);const P=new Set(A.map(e=>e.category)),F=j.filter(e=>!P.has(e));return(0,b.jsxs)(o.Zp,{className:"p-5","data-testid":"prof-docs-panel",children:[(0,b.jsxs)("div",{className:"mb-4",children:[(0,b.jsx)("div",{className:"uppercase-label mb-1",children:"Documentaci\xf3n Profesional"}),(0,b.jsx)("div",{className:"font-semibold",children:"T\xedtulo, seguro y colegiaci\xf3n"})]}),F.length>0?(0,b.jsxs)("div",{className:"rounded-md border-2 border-amber-300 bg-amber-50 p-3 text-sm mb-4 flex items-start gap-2","data-testid":"prof-docs-warning",children:[(0,b.jsx)(u.A,{size:16,className:"text-amber-700 mt-0.5"}),(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"font-semibold text-amber-900",children:"Faltan documentos obligatorios"}),(0,b.jsxs)("div",{className:"text-amber-900 text-xs",children:["Pendiente: ",F.map(e=>g[e]).join(", ")]})]})]}):(0,b.jsxs)("div",{className:"rounded-md border border-green-300 bg-green-50 p-3 text-sm mb-4 flex items-start gap-2","data-testid":"prof-docs-ok",children:[(0,b.jsx)(p.A,{size:16,className:"text-green-700 mt-0.5"}),(0,b.jsx)("div",{className:"text-green-800 text-xs",children:"Documentaci\xf3n profesional completa."})]}),(0,b.jsxs)("div",{className:"flex flex-col sm:flex-row gap-2 items-start sm:items-end mb-4 border-b border-border pb-4",children:[(0,b.jsxs)("div",{className:"flex-1 min-w-[180px]",children:[(0,b.jsx)(c.J,{className:"uppercase-label mb-1 block",children:"Categor\xeda"}),(0,b.jsxs)(m.l6,{value:_,onValueChange:E,children:[(0,b.jsx)(m.bq,{"data-testid":"prof-doc-category",children:(0,b.jsx)(m.yv,{})}),(0,b.jsx)(m.gC,{children:Object.entries(g).map(e=>{let a=(0,t.A)(e,2),s=a[0],i=a[1];return(0,b.jsx)(m.eb,{value:s,children:i},s)})})]})]}),(0,b.jsxs)("div",{className:"flex-1 min-w-[220px]",children:[(0,b.jsx)(c.J,{className:"uppercase-label mb-1 block",children:"Archivo"}),(0,b.jsx)(d.p,{type:"file",ref:R,accept:".pdf,.jpg,.jpeg,.png","data-testid":"prof-doc-file"})]}),(0,b.jsxs)(n.$,{className:"btn-cta",onClick:async()=>{var e,t;const i=null===(e=R.current)||void 0===e||null===(t=e.files)||void 0===t?void 0:t[0];if(!i)return v.oR.error("Selecciona un archivo");q(!0);try{const e=new FormData;e.append("file",i),await r.api.post("/professionals/".concat(a.id,"/documents?category=").concat(_),e,{headers:{"Content-Type":"multipart/form-data"}}),v.oR.success("Documento subido"),R.current.value="",D(),s&&s()}catch(l){var o,n;v.oR.error((null===(o=l.response)||void 0===o||null===(n=o.data)||void 0===n?void 0:n.detail)||"Error al subir")}finally{q(!1)}},disabled:M,"data-testid":"prof-doc-upload",children:[(0,b.jsx)(h.A,{size:13,className:"mr-1"})," ",M?"Subiendo\u2026":"Subir"]})]}),(0,b.jsxs)("div",{className:"space-y-2",children:[0===A.length&&(0,b.jsx)("div",{className:"text-sm text-muted-foreground text-center py-4",children:"No hay documentos a\xfan."}),A.map(e=>{var a;return(0,b.jsxs)("div",{className:"rounded-md border border-border p-3 flex items-center justify-between gap-3","data-testid":"prof-doc-row-".concat(e.id),children:[(0,b.jsxs)("div",{className:"flex items-center gap-3 min-w-0",children:[(0,b.jsx)(x.A,{size:18,className:"text-muted-foreground shrink-0"}),(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("div",{className:"font-medium text-sm truncate",children:e.filename}),(0,b.jsxs)("div",{className:"text-xs text-muted-foreground",children:[(0,b.jsx)(l.E,{variant:"secondary",className:"font-normal mr-2",children:g[e.category]||e.category}),"Subido ",null===(a=e.uploaded_at)||void 0===a?void 0:a.slice(0,10)," \xb7 ",(e.size/1024).toFixed(0)," KB"]}
2)]})]}),(0,b.jsx)(n.$,{variant:"ghost",size:"icon",onClick:()=>(async e=>{if(window.confirm("\xbfEliminar este documento?"))try{await r.api.delete("/prof-documents/".concat(e)),v.oR.success("Eliminado"),D(),s&&s()}catch(i){var a,t;v.oR.error((null===(a=i.response)||void 0===a||null===(t=a.data)||void 0===t?void 0:t.detail)||"Error")}})(e.id),"data-testid":"prof-doc-delete-".concat(e.id),children:(0,b.jsx)(f.A,{size:14})})]},e.id)})]})]})}},5005(e,a,s){s.d(a,{S:()=>m});var t=s(9379),i=s(3986),r=s(5043),o=s(6622),n=s(6210),l=s(9766),d=s(579);const c=["className"],m=r.forwardRef((e,a)=>{let s=e.className,r=(0,i.A)(e,c);return(0,d.jsx)(o.bL,(0,t.A)((0,t.A)({ref:a,className:(0,l.cn)("peer h-4 w-4 shrink-0 rounded-sm border border-primary shadow focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground",s)},r),{},{children:(0,d.jsx)(o.C1,{className:(0,l.cn)("flex items-center justify-center text-current"),children:(0,d.jsx)(n.A,{className:"h-4 w-4"})})}))});m.displayName=o.bL.displayName},1654(e,a,s){s.d(a,{d:()=>c});var t=s(9379),i=s(3986),r=s(5043),o=s(7943),n=s(9766),l=s(579);const d=["className"],c=r.forwardRef((e,a)=>{let s=e.className,r=(0,i.A)(e,d);return(0,l.jsx)(o.bL,(0,t.A)((0,t.A)({className:(0,n.cn)("peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",s)},r),{},{ref:a,children:(0,l.jsx)(o.zi,{className:(0,n.cn)("pointer-events-none block h-4 w-4 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0")})}))});c.displayName=o.bL.displayName},3340(e,a,s){s.d(a,{A0:()=>v,BF:()=>b,Hj:()=>g,XI:()=>h,nA:()=>y,nd:()=>j});var t=s(9379),i=s(3986),r=s(5043),o=s(9766),n=s(579);const l=["className"],d=["className"],c=["className"],m=["className"],p=["className"],u=["className"],x=["className"],f=["className"],h=r.forwardRef((e,a)=>{let s=e.className,r=(0,i.A)(e,l);return(0,n.jsx)("div",{className:"relative w-full overflow-auto",children:(0,n.jsx)("table",(0,t.A)({ref:a,className:(0,o.cn)("w-full caption-bottom text-sm",s)},r))})});h.displayName="Table";const v=r.forwardRef((e,a)=>{let s=e.className,r=(0,i.A)(e,d);return(0,n.jsx)("thead",(0,t.A)({ref:a,className:(0,o.cn)("[&_tr]:border-b",s)},r))});v.displayName="TableHeader";const b=r.forwardRef((e,a)=>{let s=e.className,r=(0,i.A)(e,c);return(0,n.jsx)("tbody",(0,t.A)({ref:a,className:(0,o.cn)("[&_tr:last-child]:border-0",s)},r))});b.displayName="TableBody";r.forwardRef((e,a)=>{let s=e.className,r=(0,i.A)(e,m);return(0,n.jsx)("tfoot",(0,t.A)({ref:a,className:(0,o.cn)("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",s)},r))}).displayName="TableFooter";const g=r.forwardRef((e,a)=>{let s=e.className,r=(0,i.A)(e,p);return(0,n.jsx)("tr",(0,t.A)({ref:a,className:(0,o.cn)("border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",s)},r))});g.displayName="TableRow";const j=r.forwardRef((e,a)=>{let s=e.className,r=(0,i.A)(e,u);return(0,n.jsx)("th",(0,t.A)({ref:a,className:(0,o.cn)("h-10 px-2 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",s)},r))});j.displayName="TableHead";const y=r.forwardRef((e,a)=>{let s=e.className,r=(0,i.A)(e,x);return(0,n.jsx)("td",(0,t.A)({ref:a,className:(0,o.cn)("p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",s)},r))});y.displayName="TableCell";r.forwardRef((e,a)=>{let s=e.className,r=(0,i.A)(e,f);return(0,n.jsx)("caption",(0,t.A)({ref:a,className:(0,o.cn)("mt-4 text-sm text-muted-foreground",s)},r))}).displayName="TableCaption"},9690(e,a,s){s.d(a,{Xi:()=>x,av:()=>f,j7:()=>u,tU:()=>p});var t=s(9379),i=s(3986),r=s(5043),o=s(3514),n=s(9766),l=s(579);const d=["className"],c=["className"],m=["className"],p=o.bL,u=r.forwardRef((e,a)=>{let s=e.className,r=(0,i.A)(e,d);return(0,l.jsx)(o.B8,(0,t.A)({ref:a,className:(0,n.cn)("inline-flex h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground",s)},r))});u.displayName=o.B8.displayName;const x=r.forwardRef((e,a)=>{let s=e.className,r=(0,i.A)(e,c);return(0,l.jsx)(o.l9,(0,t.A)({ref:a,className:(0,n.cn)("inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow",s)},r))});x.displayName=o.l9.displayName;const f=r.forwardRef((e,a)=>{let s=e.className,r=(0,i.A)(e,m);return(0,l.jsx)(o.UC,(0,t.A)({ref:a,className:(0,n.cn)("mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",s)},r))});f.displayName=o.UC.displayName},3258(e,a,s){s.r(a),s.d(a,{default:()=>te});var t=s(9379),i=s(5544),r=s(5043),o=s(4980),n=s(3390),l=s(1140),d=s(2264),
2c=s(1981),m=s(5949),p=s(3484),u=s(3999),x=s(3340),f=s(5187),h=s(1360),v=s(6873),b=s(6833),g=s(7719),j=s(7784);const y=(0,j.A)("eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);var N=s(5327),A=s(9855),k=s(6328),w=s(9690),C=s(3639),_=s(8693),E=s(5347);const R=(0,j.A)("calendar-check",[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}],["path",{d:"m9 16 2 2 4-4",key:"19s6y9"}]]);var S=s(8288),z=s(797),M=s(6200),q=s(579);const D=["convenio","lopd_pro","cesion_imagen_pro"];function P(e){var a,s;let t=e.professional,c=e.onChange;const p=(0,r.useState)(null),u=(0,i.A)(p,2),x=u[0],f=u[1],h=(0,r.useState)(null),v=(0,i.A)(h,2),j=v[0],y=v[1],N=(0,r.useState)(!1),A=(0,i.A)(N,2),w=A[0],C=A[1],_={convenio:(0,r.useRef)(null),lopd_pro:(0,r.useRef)(null),cesion_imagen_pro:(0,r.useRef)(null)},E=(0,r.useCallback)(async()=>{try{const e=(await o.api.get("/professionals/".concat(t.id,"/legal-status"))).data;f(e)}catch(e){console.error(e)}},[t.id]);(0,r.useEffect)(()=>{E()},[E]);return x?(0,q.jsxs)(l.Zp,{className:"p-5","data-testid":"prof-legal-panel",children:[(0,q.jsxs)("div",{className:"mb-4",children:[(0,q.jsx)("div",{className:"uppercase-label mb-1",children:"Cumplimiento Legal"}),(0,q.jsx)("div",{className:"font-semibold",children:"Documentaci\xf3n firmada del profesional"})]}),!x.complete&&(0,q.jsxs)("div",{className:"rounded-md border-2 border-red-300 bg-red-50 p-3 text-sm mb-4 flex items-start gap-2","data-testid":"prof-legal-warning",children:[(0,q.jsx)(g.A,{size:16,className:"text-red-700 mt-0.5"}),(0,q.jsxs)("div",{children:[(0,q.jsx)("div",{className:"font-semibold text-red-800",children:"Documentaci\xf3n pendiente"}),(0,q.jsx)("div",{className:"text-red-800 text-xs",children:"Faltan documentos legales por firmar (Convenio, LOPD o Cesi\xf3n de Imagen)."})]})]}),(0,q.jsx)("div",{className:"space-y-3",children:D.map(e=>{const a=x[e];return(0,q.jsx)("div",{className:"rounded-md border border-border p-3","data-testid":"prof-legal-doc-".concat(e),children:(0,q.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,q.jsxs)("div",{className:"flex-1",children:[(0,q.jsxs)("div",{className:"flex items-center gap-2",children:[(0,q.jsx)("span",{className:"font-medium text-sm",children:a.label}),a.signed?(0,q.jsxs)(m.E,{variant:"outline",className:"text-primary border-primary/40","data-testid":"prof-legal-signed-".concat(e),children:[(0,q.jsx)(b.A,{size:11,className:"mr-1"})," Firmado (","digital"===a.method?"digital":"escaneado",")"]}):(0,q.jsx)(m.E,{variant:"outline",className:"text-red-700 border-red-300","data-testid":"prof-legal-unsigned-".concat(e),children:"Sin firmar"})]}),a.signed&&a.signed_at&&(0,q.jsxs)("div",{className:"text-xs text-muted-foreground mt-0.5",children:["Firmado el ",a.signed_at.slice(0,10)]})]}),(0,q.jsxs)("div",{className:"flex gap-1 flex-wrap justify-end",children:[(0,q.jsxs)(n.$,{variant:"outline",size:"sm",onClick:()=>y(e),"data-testid":"prof-legal-sign-".concat(e),children:[(0,q.jsx)(S.A,{size:13,className:"mr-1"})," Firmar digital"]}),(0,q.jsxs)("label",{className:"inline-flex",children:[(0,q.jsx)(d.p,{ref:_[e],type:"file",accept:".pdf,.jpg,.jpeg,.png",className:"hidden",onChange:()=>(async e=>{var a,s;const i=null===(a=_[e].current)||void 0===a||null===(s=a.files)||void 0===s?void 0:s[0];if(!i)return k.oR.error("Selecciona el PDF escaneado");C(!0);try{const a=new FormData;a.append("file",i),await o.api.post("/professionals/".concat(t.id,"/legal-documents/upload-scanned?doc_type=").concat(e),a,{headers:{"Content-Type":"multipart/form-data"}}),k.oR.success("PDF escaneado subido"),_[e].current.value="",E(),c&&c()}catch(l){var r,n;k.oR.error((null===(r=l.response)||void 0===r||null===(n=r.data)||void 0===n?void 0:n.detail)||"Error al subir")}finally{C(!1)}})(e),"data-testid":"prof-legal-upload-input-".concat(e)}),(0,q.jsxs)(n.$,{variant:"outline",size:"sm",onClick:()=>{var a;return null===(a=_[e].current)||void 0===a?void 0:a.click()},"data-testid":"prof-legal-upload-".concat(e),children:[(0,q.jsx)(z.A,{size:13,className:"mr-1"})," Subir escaneado"]})]})]})]})},e)})}),(0,q.jsx)(M.A,{open:!!j,onOpenChange:e=>!e&&y(null),title:j&&(null===(a=x[j])||void 0===a?void 0:a.label)||"",content:j&&(null===(s=x[j])||void 0===s?void 0:s.template)||"",onSign:async e=>{if(j){C(!0);try{await o.api.post("/professionals/".concat(t.id,"/legal-documents/sign"),{doc_type:j,signature_data_url:e}),k.oR.success("Documento firmado y guardado"),y(null),E(),c&&c()}catch(i){var a,s;k.oR.error((null===(a=i.response)||void 0===a||null===(s=a.data)||void 0===s?void 0:s.detail)||"Error al firmar")}finally{C(!1)}}},submitting:w})]}):(0,q.jsx)("div",{className:"text-sm text-muted-foreground",children:"Cargando estado legal\u2026"})}var F=s(3081),L=s(1654),T=s(8384);const O=(0,j.A)("history",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M12 7v5l4 2",key:"1fdv2h"}]]),$={coordination:"Rol Coordinador/a",plus_verifactu:"Plus VeriFactu (Mis facturas)"},I={coordination:"Acceso a TODOS los pacientes, al panel de Coordinaci\xf3n, a la Mensajer\xeda centralizada y a la gesti\xf3n de ausencias. Su rol base y saldo de vacaciones se mantienen intactos. Solo un directivo puede asignar o retirar este rol.",plus_verifactu:"Habilita el m\xf3dulo 'Mis facturas' con facturaci\xf3n propia (logo, NIF, direcci\xf3n, numeraci\xf3n propia), l\xedneas manuales de concepto/cantidad/precio/IVA, PDF con marca propia y archivo de gastos propio por meses (ZIP mensual). Solo puede otorgarse a profesionales externos o directivos. La integraci\xf3n VeriFactu real se a\xf1adir\xe1 en fase posterior."},G={plus_verifactu:e=>"directivo"===(null===e||void 0===e?void 0:e.role)||"external"===(null===e||void 0===e?void 0:e.employment_type)};
2function H(e){let a=e.professional,s=e.onChange;const t=(0,r.useState)({extra_permissions:[],history:[],available:[]}),n=(0,i.A)(t,2),d=n[0],c=n[1],p=(0,r.useState)(null),u=(0,i.A)(p,2),x=u[0],f=u[1],h=(0,r.useCallback)(async()=>{try{const e=(await o.api.get("/professionals/".concat(a.id,"/permissions"))).data;c(e)}catch(e){console.error(e)}},[a.id]);(0,r.useEffect)(()=>{h()},[h]);return(0,q.jsxs)(l.Zp,{className:"p-5","data-testid":"prof-permissions-panel",children:[(0,q.jsxs)("div",{className:"mb-4",children:[(0,q.jsx)("div",{className:"uppercase-label mb-1",children:"Permisos modulares"}),(0,q.jsxs)("div",{className:"font-semibold flex items-center gap-2",children:[(0,q.jsx)(T.A,{size:16,className:"text-primary"})," Capacidades extra individuales"]}),(0,q.jsx)("p",{className:"text-xs text-muted-foreground mt-1",children:"Otorga privilegios sin cambiar su rol. El profesional sigue siendo interno con su saldo de vacaciones intacto."})]}),(0,q.jsx)("div",{className:"space-y-3",children:(d.available||["coordination"]).filter(e=>{const s=G[e];return!s||s(a)}).map(e=>{const t=(d.extra_permissions||[]).includes(e);return(0,q.jsxs)("div",{className:"rounded-md border border-border p-3 flex items-start justify-between gap-3","data-testid":"perm-row-".concat(e),children:[(0,q.jsxs)("div",{children:[(0,q.jsxs)("div",{className:"font-medium text-sm flex items-center gap-2",children:[$[e]||e,t&&(0,q.jsx)(m.E,{variant:"outline",className:"text-primary border-primary/40 text-[10px]",children:"Activo"})]}),(0,q.jsx)("p",{className:"text-xs text-muted-foreground mt-1",children:I[e]})]}),(0,q.jsx)(L.d,{checked:t,onCheckedChange:t=>(async(e,t)=>{f(e);try{await o.api.put("/professionals/".concat(a.id,"/permissions"),{permission:e,enabled:t}),k.oR.success(t?"Permiso concedido":"Permiso retirado"),h(),s&&s()}catch(n){var i,r;k.oR.error((null===(i=n.response)||void 0===i||null===(r=i.data)||void 0===r?void 0:r.detail)||"Error")}finally{f(null)}})(e,t),disabled:x===e,"data-testid":"perm-switch-".concat(e)})]},e)})}),(0,q.jsxs)("div",{className:"mt-4 border-t border-border pt-3",children:[(0,q.jsxs)("div",{className:"text-xs uppercase-label mb-2 flex items-center gap-1",children:[(0,q.jsx)(O,{size:11})," Historial de cambios"]}),(0,q.jsxs)("div",{className:"max-h-40 overflow-y-auto text-xs space-y-1","data-testid":"perm-history",children:[0===(d.history||[]).length&&(0,q.jsx)("div",{className:"text-muted-foreground",children:"Sin cambios registrados."}),(d.history||[]).slice().reverse().map((e,a)=>(0,q.jsxs)("div",{className:"flex items-center justify-between border-b border-border/40 py-1","data-testid":"perm-history-".concat(a),children:[(0,q.jsxs)("span",{children:[(0,q.jsx)(m.E,{variant:"outline",className:"granted"===e.action?"text-primary border-primary/40 mr-2":"text-red-700 border-red-300 mr-2",children:"granted"===e.action?"Concedido":"Retirado"}),$[e.permission]||e.permission]}),(0,q.jsxs)("span",{className:"text-muted-foreground",children:[e.by_name||"\u2014"," \xb7 ",(e.at||"").slice(0,16).replace("T"," ")]})]},a))]})]})]})}var J=s(8535);function Z(e){let a=e.professional,s=e.onRefresh;const t=(0,f.A)().user,d="directivo"===(null===t||void 0===t?void 0:t.role),c=(0,r.useState)([]),m=(0,i.A)(c,2),p=m[0],u=m[1],x=(0,r.useState)(new Set((null===a||void 0===a?void 0:a.collaborating_entity_ids)||[])),h=(0,i.A)(x,2),v=h[0],b=h[1],g=(0,r.useState)(!1),j=(0,i.A)(g,2),y=j[0],N=j[1];(0,r.useEffect)(()=>{b(new Set((null===a||void 0===a?void 0:a.collaborating_entity_ids)||[]))},[null===a||void 0===a?void 0:a.id,null===a||void 0===a?void 0:a.collaborating_entity_ids]),(0,r.useEffect)(()=>{let e=!1;return(async()=>{try{const a=(await o.api.get("/collaborating-entities")).data;e||u(a||[])}catch(a){e||u([])}})(),()=>{e=!0}},[]);return(0,q.jsxs)(l.Zp,{className:"p-5 mt-3","data-testid":"prof-entities-card",children:[(0,q.jsxs)("div",{className:"flex items-center gap-2 mb-3",children:[(0,q.jsx)(C.A,{size:16,className:"text-primary"}),(0,q.jsx)("div",{className:"text-sm font-semibold",children:"Entidades colaboradoras asignadas"})]}),0===p.length?(0,q.jsxs)("div",{className:"text-xs text-muted-foreground",children:["A\xfan no hay entidades colaboradoras creadas. Crea una desde ",(0,q.jsx)("em",{children:"Pacientes \xb7 Entidades colaboradoras"}),"."]}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)("div",{className:"flex flex-wrap gap-2",children:p.map(e=>{const a=v.has(e.id);return(0,q.jsxs)("label",{className:"flex items-center gap-1.5 text-sm cursor-pointer rounded-md border px-2 py-1 ".concat(a?"border-primary bg-primary/5":"border-border"),"data-testid":"prof-entity-".concat(e.id),children:[(0,q.jsx)("input",{type:"checkbox",checked:a,disabled:!d,onChange:()=>{return d&&(a=e.id,void b(e=>{const s=new Set(e);return s.has(a)?s.delete(a):s.add(a),s}));var a},className:"h-3.5 w-3.5 accent-primary","data-testid":"prof-entity-check-".concat(e.id)}),(0,q.jsx)("span",{children:e.name})]},e.id)})}),(0,q.jsx)("div",{className:"text-[11px] text-muted-foreground mt-2",children:"El profesional ver\xe1 los pacientes y citas de las entidades marcadas, adem\xe1s de los pacientes propios."}),d&&(0,q.jsx)("div",{className:"flex justify-end mt-3",children:(0,q.jsxs)(n.$,{size:"sm",className:"btn-cta",onClick:async()=>{N(!0);try{await o.api.put("/users/".concat(a.id,"/collaborating-entities"),{collaborating_entity_ids:Array.from(v)}),k.oR.success("Entidades actualizadas"),s&&s()}catch(i){var e,t;k.oR.error((null===i||void 0===i||null===(e=i.response)||void 0===e||null===(t=e.data)||void 0===t?void 0:t.detail)||"Error")}finally{N(!1)}},disabled:y,"data-testid":"prof-entities-save",children:[(0,q.jsx)(_.A,{size:12,className:"mr-1"})," ",y?"Guardando\u2026":"Guardar entidades"]})})]})]})}function B(e){let a=e.professional,s=e.onRefresh;const m="directivo"===(null===a||void 0===a?void 0:a.role)||"admin"===(null===a||void 0===a?void 0:a.role),p=(0,r.useState)({titulacion:(null===a||void 0===a?void 0:a.titulacion)||"",especialidad:(null===a||void 0===a?void 0:a.especialidad)||"",colegiado_num:(null===a||void 0===a?void 0:a.colegiado_num)||"",clinical_specialty:(null===a||void 0===a?void 0:a.clinical_specialty)||""}),u=(0,i.A)(p,2),x=u[0],f=u[1],h=(0,r.useState)(!1),v=(0,i.A)(h,2),b=v[0],g=v[1];(0,r.useEffect)(()=>{f({titulacion:(null===a||void 0===a?void 0:a.titulacion)||"",especialidad:(null===a||void 0===a?void 0:a.especialidad)||"",colegiado_num:(null===a||void 0===a?void 0:a.colegiado_num)||"",clinical_specialty:(null===a||void 0===a?void 0:a.clinical_specialty)||""})},[null===a||void 0===a?void 0:a.id,null===a||void 0===a?void 0:a.titulacion,null===a||void 0===a?void 0:a.especialidad,null===a||void 0===a?void 0:a.colegiado_num,null===a||void 0===a?void 0:a.clinical_specialty]);return(0,q.jsxs)(l.Zp,{className:"p-5 mt-3","data-testid":"prof-profile-card",children:[(0,q.jsxs)("div",{className:"flex items-center gap-2 mb-3",children:[(0,q.jsx)(E.A,{size:16,className:"text-primary"}),(0,q.jsx)("div",{className:"text-sm font-semibold",children:"Datos profesionales (aparecen en informes)"})]}),(0,q.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-3",children:[(0,q.jsxs)("div",{children:[(0,q.jsx)(c.J,{className:"uppercase-label mb-1 block",children:"Titulaci\xf3n"}),(0,q.jsx)(d.p,{value:x.titulacion,onChange:e=>f((0,t.A)((0,t.A)({},x),{},{titulacion:e.target.value})),placeholder:"Ej. Graduada en Fisioterapia","data-testid":"prof-titulacion"})]}),(0,q.jsxs)("div",{children:[(0,q.jsx)(c.J,{className:"uppercase-label mb-1 block",children:"Especialidad"}),(0,q.jsx)(d.p,{value:x.especialidad,onChange:e=>f((0,t.A)((0,t.A)({},x),{},{especialidad:e.target.value})),placeholder:"Ej. Neurorrehabilitaci\xf3n adulta","data-testid":"prof-especialidad"})]}),(0,q.jsxs)("div",{children:[(0,q.jsx)(c.J,{className:"uppercase-label mb-1 block",children:"N\xba colegiado"}),(0,q.jsx)(d.p,{value:x.colegiado_num,onChange:e=>f((0,t.A)((0,t.A)({},x),{},{colegiado_num:e.target.value})),placeholder:"Ej. 12345","data-testid":"prof-colegiado"})]}),m&&(0,q.jsxs)("div",{children:[(0,q.jsx)(c.J,{className:"uppercase-label mb-1 block",children:"Especialidad cl\xednica (solo informativo)"}),(0,q.jsxs)("select",{className:"w-full border border-border rounded-md px-3 py-2 text-sm bg-background",value:x.clinical_specialty,onChange:e=>f((0,t.A)((0,t.A)({},x),{},{clinical_specialty:e.target.value})),"data-testid":"prof-clinical-specialty",children:[(0,q.jsx)("option",{value:"",children:"\u2014 Sin especificar \u2014"}),(0,q.jsx)("option",{value:"neuropsicologa",children:"Neuropsic\xf3loga"}),(0,q.jsx)("option",{value:"terapeuta_ocupacional",children:"Terapeuta ocupacional"})]}),(0,q.jsx)("p",{className:"text-[11px] text-muted-foreground mt-1",children:"No afecta a los permisos como administrador; ayuda a identificar qui\xe9n puede atender pacientes."})]})]}),(0,q.jsx)("div",{className:"flex justify-end mt-3",children:(0,q.jsxs)(n.$,{size:"sm",className:"btn-cta",onClick:async()=>{g(!0);try{await o.api.put("/professionals/".concat(a.id,"/profile"),x),k.oR.success("Datos profesionales guardados"),s&&s()}catch(i){var e,t;k.oR.error((null===(e=i.response)||void 0===e||null===(t=e.data)||void 0===t?void 0:t.detail)||"Error")}finally{g(!1)}},disabled:b,"data-testid":"prof-profile-save",children:[(0,q.jsx)(_.A,{size:12,className:"mr-1"})," ",b?"Guardando\u2026":"Guardar"]})})]})}function V(e){let a=e.professional,s=e.open,t=e.onOpenChange,n=e.onRefresh;const d=(0,r.useState)({month:0,total:0}),c=(0,i.A)(d,2),p=c[0],x=c[1],f=(0,r.useCallback)(async()=>
2{if(null!==a&&void 0!==a&&a.id)try{const e=(await o.api.get("/professionals/".concat(a.id,"/sessions-count"))).data;x(e)}catch(e){console.error(e)}},[null===a||void 0===a?void 0:a.id]);if((0,r.useEffect)(()=>{s&&f()},[s,f]),!a)return null;const h=(new Date).toLocaleString("es-ES",{month:"long",year:"numeric"});return(0,q.jsx)(u.lG,{open:s,onOpenChange:t,children:(0,q.jsxs)(u.Cf,{className:"max-w-4xl max-h-[95vh] overflow-y-auto","data-testid":"prof-detail-dialog",children:[(0,q.jsx)(u.c7,{children:(0,q.jsxs)("div",{className:"flex items-center gap-3",children:[(0,q.jsx)("div",{className:"w-6 h-6 rounded-sm",style:{background:a.color||"#ccc"}}),(0,q.jsxs)("div",{children:[(0,q.jsx)(u.L3,{className:"text-2xl",children:a.name}),(0,q.jsx)(u.rr,{className:"sr-only",children:"Detalle del profesional: sesiones realizadas, cumplimiento legal y documentaci\xf3n."}),(0,q.jsxs)("div",{className:"flex items-center gap-2 mt-1",children:[(0,q.jsx)(m.E,{variant:"secondary",className:"font-normal",children:o.fn[a.role]||a.role}),(0,q.jsx)("span",{className:"text-sm text-muted-foreground",children:a.email})]})]})]})}),(0,q.jsx)(l.Zp,{className:"p-5 mt-2","data-testid":"prof-sessions-card",children:(0,q.jsxs)("div",{className:"flex items-center gap-4",children:[(0,q.jsx)("div",{className:"w-12 h-12 rounded-full bg-primary/10 flex items-center justify-center",children:(0,q.jsx)(R,{size:22,className:"text-primary"})}),(0,q.jsxs)("div",{className:"flex-1",children:[(0,q.jsxs)("div",{className:"uppercase-label",children:["Sesiones realizadas \xb7 ",h]}),(0,q.jsx)("div",{className:"text-3xl font-semibold","data-testid":"prof-sessions-month",children:p.month})]}),(0,q.jsxs)("div",{className:"text-right",children:[(0,q.jsx)("div",{className:"uppercase-label",children:"Total hist\xf3rico"}),(0,q.jsx)("div",{className:"text-xl font-semibold text-muted-foreground","data-testid":"prof-sessions-total",children:p.total})]})]})}),(0,q.jsx)(B,{professional:a,onRefresh:n}),(0,q.jsx)(Z,{professional:a,onRefresh:n}),(0,q.jsxs)(w.tU,{defaultValue:"legal",className:"mt-4",children:[(0,q.jsxs)(w.j7,{children:[(0,q.jsx)(w.Xi,{value:"legal","data-testid":"tab-prof-legal",children:"Cumplimiento legal"}),(0,q.jsx)(w.Xi,{value:"docs","data-testid":"tab-prof-docs",children:"Documentaci\xf3n"}),(0,q.jsx)(w.Xi,{value:"perms","data-testid":"tab-prof-perms",children:"Permisos"}),(0,q.jsx)(w.Xi,{value:"hours","data-testid":"tab-prof-hours",children:"Horarios"})]}),(0,q.jsx)(w.av,{value:"legal",className:"mt-3",children:(0,q.jsx)(P,{professional:a,onChange:n})}),(0,q.jsx)(w.av,{value:"docs",className:"mt-3",children:(0,q.jsx)(F.A,{professional:a,onChange:n})}),(0,q.jsx)(w.av,{value:"perms",className:"mt-3",children:(0,q.jsx)(H,{professional:a,onChange:n})}),(0,q.jsx)(w.av,{value:"hours",className:"mt-3",children:(0,q.jsx)(J.A,{professional:a,onRefresh:n})})]})]})})}const X=(0,j.A)("grid-3x3",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 9h18",key:"1pudct"}],["path",{d:"M3 15h18",key:"5xshup"}],["path",{d:"M9 3v18",key:"fh3hqa"}],["path",{d:"M15 3v18",key:"14nvp0"}]]);var U=s(2382),K=s(8326),Q=s(7118);function W(e){if(!e)return"\u2014";try{return new Date(e).toLocaleString("es-ES",{timeZone:"Europe/Madrid",day:"2-digit",month:"2-digit",hour:"2-digit",minute:"2-digit"})}catch(a){return e}}function Y(){const e=(0,r.useState)((new Date).toISOString().slice(0,7)),a=(0,i.A)(e,2),s=a[0],p=a[1],u=(0,r.useState)([]),x=(0,i.A)(u,2),f=x[0],h=x[1],v=(0,r.useState)(!1),b=(0,i.A)(v,2),g=b[0],j=b[1],y=(0,r.useState)({}),N=(0,i.A)(y,2),A=N[0],k=N[1],w=(0,r.useState)(!0),C=(0,i.A)(w,2),_=C[0],E=C[1],R=(0,r.useCallback)(async()=>{j(!0);try{const e=(await o.api.get("/professionals/sessions-quadrant?month=".concat(s))).data;h(e.professionals||[])}catch(e){h([])}finally{j(!1)}},[s]);(0,r.useEffect)(()=>{R()},[R]);const S=(0,r.useMemo)(()=>_?f.filter(e=>e.total_sessions>0):f,[f,_]),z=(0,r.useMemo)(()=>f.reduce((e,a)=>e+(a.total_sessions||0),0),[f]);return(0,q.jsxs)(l.Zp,{className:"p-5 mb-6","data-testid":"sessions-quadrant",children:[(0,q.jsxs)("div",{className:"flex flex-col md:flex-row md:items-end md:justify-between gap-3 mb-4",children:[(0,q.jsxs)("div",{children:[(0,q.jsx)("div",{className:"uppercase-label",children:"Cuadrante"}),(0,q.jsxs)("h2",{className:"text-xl font-semibold tracking-tight mt-1 flex items-center gap-2",children:[(0,q.jsx)(X,{size:20,className:"text-primary"})," Sesiones realizadas por profesional"]}),(0,q.jsxs)("div",{className:"text-xs text-muted-foreground mt-1",children:["Solo cuenta citas marcadas como ",(0,q.jsx)("strong",{children:"realizada"}),". Las canceladas no computan; las recuperaciones se contabilizan en el mes en que se completan."]})]}),(0,q.jsxs)("div",{className:"flex items-end gap-2 flex-wrap",children:[(0,q.jsxs)("div",{children:[(0,q.jsx)(c.J,{className:"uppercase-label mb-1 block",children:"Mes"}),(0,q.jsx)(d.p,{type:"month",value:s,onChange:e=>p(e.target.value),"data-testid":"sq-month",className:"w-[160px]"})]}),(0,q.jsx)(n.$,{variant:"outline",onClick:()=>E(e=>!e),"data-testid":"sq-toggle-empty",children:_?"Mostrar sin sesiones":"Ocultar sin sesiones"}),(0,q.jsxs)("div",{className:"text-sm text-muted-foreground pb-2 pl-2",children:["Total: ",(0,q.jsx)("strong",{className:"text-foreground",children:z})," sesiones \xb7"," ",(0,q.jsx)("strong",{className:"text-foreground",children:S.length})," profesionales"]})]})]}),g?(0,q.jsx)("div",{className:"text-sm text-muted-foreground py-6 text-center",children:"Cargando cuadrante\u2026"}):0===S.length?(0,q.jsx)("div",{className:"text-sm text-muted-foreground py-6 text-center","data-testid":"sq-empty",children:"Sin sesiones realizadas en el mes seleccionado."}):(0,q.jsx)("div",{className:"space-y-2",children:S.map(e=>{const a=!!A[e.professional_id];return(0,q.jsxs)("div",{className:"border border-border rounded-md overflow-hidden","data-testid":"sq-prof-".concat(e.professional_id
2),children:[(0,q.jsxs)("button",{type:"button",className:"w-full px-4 py-3 flex items-center justify-between gap-3 hover:bg-muted/40 transition-colors text-left",onClick:()=>{return a=e.professional_id,k(e=>(0,t.A)((0,t.A)({},e),{},{[a]:!e[a]}));var a},"data-testid":"sq-toggle-".concat(e.professional_id),children:[(0,q.jsxs)("div",{className:"flex items-center gap-3",children:[a?(0,q.jsx)(U.A,{size:16}):(0,q.jsx)(K.A,{size:16}),(0,q.jsxs)("div",{children:[(0,q.jsxs)("div",{className:"font-medium",children:[e.professional_name,(0,q.jsxs)("span",{className:"text-muted-foreground text-xs ml-2",children:["\xb7 ",o.fn[e.professional_role]||e.professional_role||"\u2014"]})]}),(0,q.jsxs)("div",{className:"text-xs text-muted-foreground mt-0.5 flex items-center gap-1",children:[(0,q.jsx)(Q.A,{size:11}),e.patients.length," paciente",1===e.patients.length?"":"s"]})]})]}),(0,q.jsxs)(m.E,{variant:"outline",className:"text-primary border-primary/40 font-semibold",children:[e.total_sessions," sesiones"]})]}),a&&(0,q.jsx)("div",{className:"border-t border-border bg-muted/20 p-3 space-y-2","data-testid":"sq-detail-".concat(e.professional_id),children:0===e.patients.length?(0,q.jsx)("div",{className:"text-xs text-muted-foreground",children:"Sin pacientes este mes."}):e.patients.map(a=>(0,q.jsxs)("div",{className:"bg-background border border-border/60 rounded-md p-3","data-testid":"sq-patient-".concat(e.professional_id,"-").concat(a.patient_id),children:[(0,q.jsxs)("div",{className:"flex items-center justify-between mb-2 flex-wrap gap-2",children:[(0,q.jsx)("div",{className:"font-medium text-sm",children:a.patient_name}),(0,q.jsxs)(m.E,{variant:"secondary",className:"font-normal",children:[a.count," sesion",1===a.count?"":"es"]})]}),(0,q.jsx)("div",{className:"flex flex-wrap gap-1",children:a.dates.map((e,s)=>(0,q.jsx)(m.E,{variant:"outline",className:"font-mono text-[11px] border-border/70",children:W(e)},"".concat(a.patient_id,"-").concat(s)))})]},a.patient_id))})]},e.professional_id)})})]})}s(5005);const ee=["directivo","secretaria","coordinadora","fisioterapeuta","logopeda","nutricionista","terapeuta_ocupacional","neuropsicologo","psicologa","neurologo","geriatra","alumno"],ae={directivo:"#2A3D45",secretaria:"#B04A6B",coordinadora:"#7A9E9F",fisioterapeuta:"#4A7C59",logopeda:"#5C80BC",nutricionista:"#F4A261",terapeuta_ocupacional:"#8D6A9F",neuropsicologo:"#E07A5F",psicologa:"#E29578",neurologo:"#2A3D45",geriatra:"#84A59D"},se=["titulo_academico","seguro_rc","colegiacion"];function te(){const e=(0,f.A)().user,a=(0,r.useState)([]),s=(0,i.A)(a,2),j=s[0],w=s[1],C=(0,r.useState)({}),_=(0,i.A)(C,2),E=_[0],R=_[1],S=(0,r.useState)(!1),z=(0,i.A)(S,2),M=z[0],D=z[1],P=(0,r.useState)(null),F=(0,i.A)(P,2),L=F[0],T=F[1],O=(0,r.useState)({name:"",email:"",password:"",role:"fisioterapeuta",color:"#4A7C59"}),$=(0,i.A)(O,2),I=$[0],G=$[1],H=(0,r.useState)([]),J=(0,i.A)(H,2),Z=(J[0],J[1]),B=(0,r.useState)({open:!1,prof:null,selected:[]}),X=(0,i.A)(B,2),U=(X[0],X[1],(0,r.useState)(!1)),K=(0,i.A)(U,2),Q=(K[0],K[1],(0,r.useCallback)(async e=>{const a={};await Promise.all(e.map(async e=>{if("directivo"!==e.role&&"admin"!==e.role&&"coordinadora"!==e.role)try{const s=await Promise.all([o.api.get("/professionals/".concat(e.id,"/legal-status")),o.api.get("/professionals/".concat(e.id,"/sessions-count")),o.api.get("/professionals/".concat(e.id,"/documents"))]),t=(0,i.A)(s,3),r=t[0],n=t[1],l=(t[2].data||[]).filter(e=>!["convenio","lopd_pro","cesion_imagen_pro"].includes(e.category)),d=new Set(l.map(e=>e.category)),c=se.filter(e=>!d.has(e));a[e.id]={legal_complete:!!r.data.complete,docs_missing:c.length,sessions_month:n.data.month||0}}catch(s){}})),R(a)},[])),W=(0,r.useCallback)(async()=>{const e=(await o.api.get("/professionals")).data;w(e),Q(e);try{const e=await o.api.get("/collaborating-entities");Z(e.data||[])}catch(a){Z([])}},[Q]);(0,r.useEffect)(()=>{W()},[W]);const te=e=>{T(e)};return(0,q.jsxs)("div",{className:"px-8 py-8","data-testid":"professionals-page",children:[(0,q.jsxs)("div",{className:"flex items-center justify-between mb-6",children:[(0,q.jsxs)("div",{children:[(0,q.jsx)("div",{className:"uppercase-label",children:"Equipo"}),(0,q.jsx)("h1",{className:"text-3xl font-semibold tracking-tight mt-1",children:"Profesionales"})]}),(0,o.q2)(e)&&(0,q.jsxs)(n.$,{className:"btn-cta",onClick:()=>D(!0),"data-testid":"new-professional",children:[(0,q.jsx)(h.A,{size:14,className:"mr-1"})," A\xf1adir profesional"]})]}),(0,q.jsx)(Y,{}),(0,q.jsx)(l.Zp,{children:(0,q.jsxs)(x.XI,{children:[(0,q.jsx)(x.A0,{children:(0,q.jsxs)(x.Hj,{children:[(0,q.jsx)(x.nd,{children:"Color"}),(0,q.jsx)(x.nd,{children:"Nombre"}),(0,q.jsx)(x.nd,{children:"Rol"}),(0,q.jsx)(x.nd,{children:"Tipo"}),(0,q.jsx)(x.nd,{children:"Email"}),(0,q.jsx)(x.nd,{children:"Sesiones (mes)"}),(0,q.jsx)(x.nd,{children:"Cumplimiento"}),(0,q.jsx)(x.nd,{})]})}),(0,q.jsx)(x.BF,{children:j.map(a=>{var s;const t=E[a.id],i="directivo"===a.role||"admin"===a.role||"coordinadora"===a.role,r=null===t||void 0===t?void 0:t.legal_complete,l=!!t&&0===t.docs_missing;return(0,q.jsxs)(x.Hj,{"data-testid":"professional-row-".concat(a.id),className:"cursor-pointer hover:bg-muted/40",onClick:()=>"coordinadora"!==a.role&&te(a),children:[(0,q.jsx)(x.nA,{onClick:e=>e.stopPropagation(),children:(0,o.q2)(e)?(0,q.jsx)("label",{className:"inline-flex items-center gap-2 cursor-pointer",title:"Cambiar color de agenda",children:(0,q.jsx)("span",{className:"relative inline-block w-6 h-6 rounded-sm ring-1 ring-border",style:{background:a.color||"#ccc"},"data-testid":"prof-color-swatch-".concat(a.id),children:(0,q.jsx)("input",{type:"color",value:a.color||"#4A7C59",onChange:async e=>{const s=e.target.value;try{await o.api.put("/professionals/".concat(a.id,"/color"),{color:s}),k.oR.success("Color de ".concat(a.name," actualizado")),W()}catch(r){var t,i;k.oR.error((null===(t=r.response)||void 0===t||null===(i=t.data)||void 0===i?void 0:i.detail)||"Error")}},className:"absolute inset-0 opacity-0 cursor-pointer","data-testid":"prof-color-input-".concat(a.id)})})}):(0,q.jsx)("div",{className:"w-4 h-4 rounded-sm",style:{background:a.color||"#ccc"}})}),(0,q.jsx)(x.nA,{className:"font-medium",children:a.name}),(0,q.jsx)(x.nA,{children:(0,q.jsx)(m.E,{variant:"secondary",className:"font-normal",children:o.fn[a.role]||a.role})}),(0,q.jsx)(x.nA,{children:i?(0,q.jsx)("span",{className:"text-muted-foreground text-xs",children:"\u2014"}):(0,q.jsxs)(m.E,{variant:"outline",className:"cursor-pointer ".concat("internal"===a.employment_type?"border-primary/40 text-primary":"border-border text-muted-foreground"),onClick:async s=>{if(s.stopPropagation(),!(0,o.q2)(e))return;const t="internal"===a.employment_type?"external":"internal";try{await o.api.put("/professionals/".concat(a.id,"/employment-type"),{employment_type:t}),k.oR.success("Marcado como ".concat("internal"===t?"Interno (I)":"Externo (E)")),W()}catch(i){k.oR.error("Error")}},"data-testid":"prof-emp-".concat(a.id),children:[(0,q.jsx)(v.A,{size:11,className:"mr-1"}),"internal"===a.employment_type?"Interno (I)":"Externo (E)"]})}),(0,q.jsx)(x.nA,{className:"text-muted-foreground",children:a.email}),(0,q.jsx)(x.nA,{"data-testid":"prof-sessions-cell-".concat(a.id),children:i?(0,q.jsx)("span",{className:"text-muted-foreground text-xs",children:"\u2014"}):(0,q.jsx)("span",{className:"font-semibold",children:null!==(s=null===t||void 0===t?void 0:t.sessions_month)&&void 0!==s?s:"\u2026"})}),(0,q.jsx)(x.nA,{"data-testid":"prof-compliance-cell-".concat(a.id),children:i?(0,q.jsx)("span",{className:"text-muted-foreground text-xs",children:"\u2014"}):t?r&&l?(0,q.jsxs)(m.E,{variant:"outline",className:"text-primary border-primary/40","data-testid":"prof-compliance-ok-".concat(a.id),children:[(0,q.jsx)(b.A,{size:11,className:"mr-1"})," Al d\xeda"]}):(0,q.jsxs)(m.E,{variant:"outline",className:"text-red-700 border-red-300","data-testid":"prof-compliance-warn-".concat(a.id),children:[(0,q.jsx)(g.A,{size:11,className:"mr-1"}),r||l?r?"Docs":"Legal":"Legal y docs"]}):(0,q.jsx)("span",{className:"text-xs text-muted-foreground",children:"\u2026"})}),(0,q.jsx)(x.nA,{children:(0,q.jsxs)("div",{className:"flex items-center gap-1 justify-end",children:["coordinadora"!==a.role&&(0,q.jsx)(n.$,{variant:"ghost",size:"icon",onClick:e=>{e.stopPropagation(),te(a)},"data-testid":"prof-view-".concat(a.id),children:(0,q.jsx)(y,{size:14})}),(0,o.q2)(e)&&a.email&&(0,q.jsx)(n.$,{variant:"ghost",size:"icon",onClick:e=>(async(e,a)=>{if(a.stopPropagation(),e.email){if(window.confirm("Se enviar\xe1 una contrase\xf1a temporal a ".concat(e.email,". Al iniciar sesi\xf3n, se le obligar\xe1 a cambiarla. \xbfContinuar?")))try{await o.api.post("/users/".concat(e.id,"/send-temp-password")),k.oR.success("Contrase\xf1a temporal enviada a ".concat(e.email))}catch(i){var s,t;k.oR.error((null===(s=i.response)||void 0===s||null===(t=s.data)||void 0===t?void 0:t.detail)||"No se pudo enviar la contrase\xf1a")}}else k.oR.error("Este usuario no tiene email")})(a,e),title:"Enviar contrase\xf1a temporal por email","data-testid":"prof-send-temp-pw-".concat(a.id),children:(0,q.jsx)(N.A,{size:14})}
2),(0,o.q2)(e)&&a.id!==(null===e||void 0===e?void 0:e.id)&&(0,q.jsx)(n.$,{variant:"ghost",size:"icon",onClick:e=>(async(e,a)=>{a.stopPropagation();const s=j.find(a=>a.id===e),t=!s||"directivo"!==s.role&&"admin"!==s.role?"\xbfEliminar profesional?":'\xbfEliminar al administrador "'.concat(null===s||void 0===s?void 0:s.name,'"? Debe quedar al menos un administrador activo.');if(window.confirm(t))try{await o.api.delete("/professionals/".concat(e)),k.oR.success("Eliminado"),W()}catch(a){var i,r;k.oR.error((null===(i=a.response)||void 0===i||null===(r=i.data)||void 0===r?void 0:r.detail)||"Error")}})(a.id,e),"data-testid":"prof-delete-".concat(a.id),children:(0,q.jsx)(A.A,{size:14})})]})})]},a.id)})})]})}),(0,q.jsx)(u.lG,{open:M,onOpenChange:D,children:(0,q.jsxs)(u.Cf,{"data-testid":"professional-dialog",children:[(0,q.jsx)(u.c7,{children:(0,q.jsx)(u.L3,{children:"Nuevo profesional"})}),(0,q.jsxs)("div",{className:"space-y-3",children:[(0,q.jsxs)("div",{children:[(0,q.jsx)(c.J,{className:"uppercase-label mb-1 block",children:"Nombre"}),(0,q.jsx)(d.p,{value:I.name,onChange:e=>G((0,t.A)((0,t.A)({},I),{},{name:e.target.value})),"data-testid":"prof-name"})]}),(0,q.jsxs)("div",{children:[(0,q.jsx)(c.J,{className:"uppercase-label mb-1 block",children:"Email"}),(0,q.jsx)(d.p,{type:"email",value:I.email,onChange:e=>G((0,t.A)((0,t.A)({},I),{},{email:e.target.value})),"data-testid":"prof-email"})]}),(0,q.jsxs)("div",{children:[(0,q.jsx)(c.J,{className:"uppercase-label mb-1 block",children:"Contrase\xf1a"}),(0,q.jsx)(d.p,{type:"password",value:I.password,onChange:e=>G((0,t.A)((0,t.A)({},I),{},{password:e.target.value})),"data-testid":"prof-password"})]}),(0,q.jsxs)("div",{children:[(0,q.jsx)(c.J,{className:"uppercase-label mb-1 block",children:"Rol"}),(0,q.jsxs)(p.l6,{value:I.role,onValueChange:e=>G((0,t.A)((0,t.A)({},I),{},{role:e,color:ae[e]||I.color})),children:[(0,q.jsx)(p.bq,{"data-testid":"prof-role",children:(0,q.jsx)(p.yv,{})}),(0,q.jsx)(p.gC,{children:ee.map(e=>(0,q.jsx)(p.eb,{value:e,children:o.fn[e]},e))})]})]}),(0,q.jsxs)("div",{children:[(0,q.jsx)(c.J,{className:"uppercase-label mb-1 block",children:"Color (agenda)"}),(0,q.jsx)(d.p,{type:"color",value:I.color,onChange:e=>G((0,t.A)((0,t.A)({},I),{},{color:e.target.value})),className:"h-10 w-24"})]})]}),(0,q.jsxs)(u.Es,{children:[(0,q.jsx)(n.$,{variant:"outline",onClick:()=>D(!1),children:"Cancelar"}),(0,q.jsx)(n.$,{className:"btn-cta",onClick:async()=>{try{await o.api.post("/auth/register",I),k.oR.success("Profesional creado"),D(!1),G({name:"",email:"",password:"",role:"fisioterapeuta",color:"#4A7C59"}),W()}catch(s){var e,a;k.oR.error((null===(e=s.response)||void 0===e||null===(a=e.data)||void 0===a?void 0:a.detail)||"Error")}},"data-testid":"prof-submit",children:"Guardar"})]})]})}),(0,q.jsx)(V,{professional:L,open:!!L,onOpenChange:e=>!e&&T(null),onRefresh:W})]})}},5347(e,a,s){s.d(a,{A:()=>t});const t=(0,s(7784).A)("award",[["path",{d:"m15.477 12.89 1.515 8.526a.5.5 0 0 1-.81.47l-3.58-2.687a1 1 0 0 0-1.197 0l-3.586 2.686a.5.5 0 0 1-.81-.469l1.514-8.526",key:"1yiouv"}],["circle",{cx:"12",cy:"8",r:"6",key:"1vp47v"}]])},3639(e,a,s){s.d(a,{A:()=>t});const t=(0,s(7784).A)("building-2",[["path",{d:"M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z",key:"1b4qmf"}],["path",{d:"M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2",key:"i71pzd"}],["path",{d:"M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2",key:"10jefs"}],["path",{d:"M10 6h4",key:"1itunk"}],["path",{d:"M10 10h4",key:"tcdvrf"}],["path",{d:"M10 14h4",key:"kelpxr"}],["path",{d:"M10 18h4",key:"1ulq68"}]])},7719(e,a,s){s.d(a,{A:()=>t});const t=(0,s(7784).A)("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]])},6873(e,a,s){s.d(a,{A:()=>t});const t=(0,s(7784).A)("user-cog",[["path",{d:"M10 15H6a4 4 0 0 0-4 4v2",key:"1nfge6"}],["path",{d:"m14.305 16.53.923-.382",key:"1itpsq"}],["path",{d:"m15.228 13.852-.923-.383",key:"eplpkm"}],["path",{d:"m16.852 12.228-.383-.923",key:"13v3q0"}],["path",{d:"m16.852 17.772-.383.924",key:"1i8mnm"}],["path",{d:"m19.148 12.228.383-.923",key:"1q8j1v"}],["path",{d:"m19.53 18.696-.382-.924",key:"vk1qj3"}],["path",{d:"m20.772 13.852.924-.383",key:"n880s0"}],["path",{d:"m20.772 16.148.924.383",key:"1g6xey"}],["circle",{cx:"18",cy:"15",r:"3",key:"gjjjvw"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]])},6622(e,a,s){s.d(a,{C1:()=>D,bL:()=>q});var t=s(9379),i=s(3986),r=s(5544),o=s(5043),n=s(2814),l=s(1862),d=s(858),c=s(3642),m=s(3168),p=s(3124),u=s(2894),x=s(7920),f=s(579);const h=["__scopeCheckbox","name","checked","defaultChecked","required","disabled","value","onCheckedChange","form"],v=["__scopeCheckbox","forceMount"],b=["__scopeCheckbox","control","checked","bubbles","defaultChecked"];var g="Checkbox",j=(0,l.A)(g),y=(0,r.A)(j,2),N=y[0],A=(y[1],N(g)),k=(0,r.A)(A,2),w=k[0],C=k[1],_=o.forwardRef((e,a)=>{const s=e.__scopeCheckbox,l=e.name,m=e.checked,p=e.defaultChecked,u=e.required,v=e.disabled,b=e.value,j=void 0===b?"on":b,y=e.onCheckedChange,N=e.form,A=(0,i.A)(e,h),k=o.use
2State(null),C=(0,r.A)(k,2),_=C[0],E=C[1],R=(0,n.s)(a,e=>E(e)),q=o.useRef(!1),D=!_||(N||!!_.closest("form")),P=(0,c.i)({prop:m,defaultProp:null!==p&&void 0!==p&&p,onChange:y,caller:g}),F=(0,r.A)(P,2),L=F[0],T=F[1],O=o.useRef(L);return o.useEffect(()=>{const e=null===_||void 0===_?void 0:_.form;if(e){const a=()=>T(O.current);return e.addEventListener("reset",a),()=>e.removeEventListener("reset",a)}},[_,T]),(0,f.jsxs)(w,{scope:s,state:L,disabled:v,children:[(0,f.jsx)(x.sG.button,(0,t.A)((0,t.A)({type:"button",role:"checkbox","aria-checked":z(L)?"mixed":L,"aria-required":u,"data-state":M(L),"data-disabled":v?"":void 0,disabled:v,value:j},A),{},{ref:R,onKeyDown:(0,d.m)(e.onKeyDown,e=>{"Enter"===e.key&&e.preventDefault()}),onClick:(0,d.m)(e.onClick,e=>{T(e=>!!z(e)||!e),D&&(q.current=e.isPropagationStopped(),q.current||e.stopPropagation())})})),D&&(0,f.jsx)(S,{control:_,bubbles:!q.current,name:l,value:j,checked:L,required:u,disabled:v,form:N,style:{transform:"translateX(-100%)"},defaultChecked:!z(p)&&p})]})});_.displayName=g;var E="CheckboxIndicator",R=o.forwardRef((e,a)=>{const s=e.__scopeCheckbox,r=e.forceMount,o=(0,i.A)(e,v),n=C(E,s);return(0,f.jsx)(u.C,{present:r||z(n.state)||!0===n.state,children:(0,f.jsx)(x.sG.span,(0,t.A)((0,t.A)({"data-state":M(n.state),"data-disabled":n.disabled?"":void 0},o),{},{ref:a,style:(0,t.A)({pointerEvents:"none"},e.style)}))})});R.displayName=E;var S=o.forwardRef((e,a)=>{e.__scopeCheckbox;let s=e.control,r=e.checked,l=e.bubbles,d=void 0===l||l,c=e.defaultChecked,u=(0,i.A)(e,b);const h=o.useRef(null),v=(0,n.s)(h,a),g=(0,m.Z)(r),j=(0,p.X)(s);o.useEffect(()=>{const e=h.current;if(!e)return;const a=window.HTMLInputElement.prototype,s=Object.getOwnPropertyDescriptor(a,"checked").set;if(g!==r&&s){const a=new Event("click",{bubbles:d});e.indeterminate=z(r),s.call(e,!z(r)&&r),e.dispatchEvent(a)}},[g,r,d]);const y=o.useRef(!z(r)&&r);return(0,f.jsx)(x.sG.input,(0,t.A)((0,t.A)({type:"checkbox","aria-hidden":!0,defaultChecked:null!==c&&void 0!==c?c:y.current},u),{},{tabIndex:-1,ref:v,style:(0,t.A)((0,t.A)((0,t.A)({},u.style),j),{},{position:"absolute",pointerEvents:"none",opacity:0,margin:0})}))});function z(e){return"indeterminate"===e}function M(e){return z(e)?"indeterminate":e?"checked":"unchecked"}S.displayName="CheckboxBubbleInput";var q=_,D=R}}]); 3//# sourceMappingURL=258.fbf629e7.chunk.js.map
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.