1import{u as J,g as W,h as X,r as i,s as o,w as d,j as e,e as R,B as v,A as E,C as m,a as g,k as L,c as S,d as b,ad as Z,aO as q,L as w,i as ee,T as ae,aP as te,al as se,aQ as ne,aR as ie,am as re,an as le,ao as de,aq as ce,a3 as oe,a4 as I,au as ue,av as pe,aw as me}from"./index-CobRY8C4.js";const ge=["pending_client_signature","client_approved","sent","acknowledged","superseded"];function xe(){var K,O;const{id:j}=J(),_=W(),{user:h}=X(),[a,V]=i.useState(null),[k,z]=i.useState(null),[N,C]=i.useState({}),[B,D]=i.useState(!0),[x,l]=i.useState("idle"),[A,T]=i.useState(!1),[y,P]=i.useState("digital_session"),c=i.useRef(null),f=i.useRef(N);f.current=N,i.useEffect(()=>{!j||!h||(async()=>{const{data:t,error:s}=await o.from("care_plans").select("id, status, version, plan_data, client_id, parent_care_plan_id, organization_id, signature_method, deadline_at, client_rejection_reason, clients(first_name, last_name, personnummer)").eq("id",j).single();if(s||!t){d({title:"Kunde inte ladda",description:(s==null?void 0:s.message)??"Okänt fel",variant:"destructive"}),D(!1);return}const n=t;V(n);const r=n.plan_data??{};if(C(r.values??{}),n.parent_care_plan_id){const{data:p}=await o.from("care_plans").select("id, plan_data, care_plan_templates(template_data)").eq("id",n.parent_care_plan_id).maybeSingle();p&&z(p)}D(!1)})()},[j,h]);const G=i.useCallback(t=>{!a||a.status!=="draft"||(c.current&&clearTimeout(c.current),c.current=setTimeout(async()=>{l("saving");const n={...a.plan_data??{},values:t},{error:r}=await o.from("care_plans").update({plan_data:n,updated_at:new Date().toISOString()}).eq("id",a.id);r?(l("idle"),d({title:"Kunde inte spara",description:r.message,variant:"destructive"})):(l("saved"),setTimeout(()=>l("idle"),1500))},800))},[a]);function M(t,s){C(n=>{const r={...n,[t]:s};return G(r),r})}async function H(){if(!a)return;c.current&&clearTimeout(c.current),l("saving");const s={...a.plan_data??{},values:f.current},{error:n}=await o.from("care_plans").update({plan_data:s,updated_at:new Date().toISOString()}).eq("id",a.id);n?(d({title:"Kunde inte spara",description:n.message,variant:"destructive"}),l("idle")):(d({title:"Sparat"}),l("saved"),setTimeout(()=>l("idle"),1500))}async function U(){if(!a)return;if(!Object.values(f.current).some(Y=>(Y??"").trim().length>10)){d({title:"För lite innehåll",description:"Skriv in genomförandeplanens innehåll innan du färdigställer.",variant:"destructive"});return}T(!0),c.current&&clearTimeout(c.current);const r={plan_data:{...a.plan_data??{},values:f.current},status:"pending_client_signature",signature_method:y,updated_at:new Date().toISOString()},{error:p}=await o.from("care_plans").update(r).eq("id",a.id);if(T(!1),p){d({title:"Kunde inte färdigställa",description:p.message,variant:"destructive"});return}y==="physical_simulated"&&h?(await o.from("plan_signatures").insert({care_plan_id:a.id,plan_type:"genomforandeplan",plan_version:a.version,signed_by_user_id:h.id,signed_by_role:"therapist",signature_method:"physical_simulated",intent_text:"Klienten har signerat fysiskt på papper. Terapeut har registrerat detta i systemet.",organization_id:a.organization_id,user_agent:navigator.userAgent.
1slice(0,500)}),await o.from("care_plans").update({status:"client_approved",updated_at:new Date().toISOString()}).eq("id",a.id),d({title:"Färdigställd och fysiskt signerad",description:"Genomförandeplanen är lÃ¥st."})):d({title:"Färdigställd",description:"Klienten har nu fÃ¥tt en notis om att signera digitalt."}),_("/therapist/implementation-plans")}if(B)return e.jsx("div",{className:"p-6",children:e.jsx(R,{className:"h-5 w-5 animate-spin"})});if(!a)return e.jsxs("div",{className:"p-6",children:[e.jsx("p",{className:"text-destructive",children:"Genomförandeplanen hittades inte."}),e.jsxs(v,{variant:"ghost",onClick:()=>_("/therapist/implementation-plans"),children:[e.jsx(E,{className:"mr-2 h-4 w-4"})," Tillbaka"]})]});const $=a.clients?`${a.clients.first_name} ${a.clients.last_name}`:"Okänd klient",u=ge.includes(a.status),F=k?((K=k.plan_data)==null?void 0:K.values)??{}:{},Q=[{key:"bedomning",title:"Bedömning och nuläge",description:"Sammanfatta klientens situation, motivation och behov vid behandlingsstart."},{key:"mal_genomforande",title:"MÃ¥l och genomförande",description:"Konkreta mÃ¥l för behandlingen och hur de ska uppnÃ¥s (aktiviteter, insatser, frekvens)."},{key:"uppfoljning",title:"Uppföljning och utvärdering",description:"Hur och när mÃ¥len ska följas upp tillsammans med klienten."}];return e.jsxs("div",{className:"space-y-4 p-4 max-w-[1100px] mx-auto",children:[e.jsxs(v,{variant:"ghost",onClick:()=>_("/therapist/implementation-plans"),children:[e.jsx(E,{className:"mr-2 h-4 w-4"})," Tillbaka till listan"]}),e.jsx(m,{children:e.jsxs(g,{className:"flex flex-wrap items-center gap-3 p-4",children:[e.jsxs("div",{className:"flex-1",children:[e.jsx("h1",{className:"text-xl font-semibold",children:"Genomförandeplan"}),e.jsxs("p",{className:"text-sm text-muted-foreground",children:["Klient: ",e.jsx("span",{className:"font-medium text-foreground",children:$}),((O=a.clients)==null?void 0:O.personnummer)&&e.jsxs(e.Fragment,{children:[" · ",a.clients.personnummer]})," ","· Version ",a.version]})]}),e.jsx(L,{variant:u?"secondary":"default",children:a.status==="draft"?"Utkast":a.status==="pending_client_signature"?"Väntar klientsignatur":a.status==="client_approved"?"Klient godkänt":a.status==="client_rejected"?"Avvisad":a.status==="sent"?"Skickad":a.status==="acknowledged"?"Bekräftad":a.status==="superseded"?"Ersatt":a.status}),a.deadline_at&&e.jsxs(L,{variant:"outline",children:["Deadline: ",new Date(a.deadline_at).toLocaleDateString("sv-SE")]})]})}),a.client_rejection_reason&&e.jsxs(m,{className:"border-destructive",children:[e.jsx(S,{children:e.jsx(b,{className:"text-base text-destructive",children:"Klienten har avvisat planen"})}),e.jsxs(g,{children:[e.jsx("p",{className:"text-sm",children:a.client_rejection_reason}),e.jsx("p",{className:"mt-2 text-xs text-muted-foreground",children:"Skapa en ny version frÃ¥n listsidan för att Ã¥tgärda och skicka för ny signering."})]})]}),k&&Object.keys(F).length>0&&e.jsxs(m,{children:[e.jsxs(S,{children:[e.jsxs(b,{className:"text-base flex items-center gap-2",children:[e.jsx(Z,{className:"h-4 w-4 text-muted-foreground"}),"VÃ¥rdplan frÃ¥n handläggare (referens)"]}),e.jsx(q,{children:"Read-only â original frÃ¥n remittenten som denna genomförandeplan baseras pÃ¥."})]}),e.jsx(g,{className:"space-y-3",children:Object.entries(F).slice(0,8).map(([t,s])=>typeof s!="string"||!s.trim()?null:e.jsxs("div",{children:[e.jsx(w,{className:"text-xs uppercase text-muted-foreground",children:t.replace(/_/g," ")}),e.jsx("p",{className:"text-sm whitespace-pre-wrap rounded border bg-muted/30 p-2",children:s})]},t))})]}),Q.map(t=>e.jsxs(m,{children:[e.jsxs(S,{children:[e.jsxs(b,{className:"text-base flex items-center gap-2",children:[u&&e.jsx(ee,{className:"h-4 w-4 text-muted-foreground"}),t.title]}),e.jsx(q,{children:t.description})]}),e.jsx(g,{children:e.jsx(ae,{className:"min-h-[140px]",value:N[t.key]??"",onChange:s=>M(t.key,s.target.value),disabled:u,placeholder:u?"":"Skriv härâ¦"})})]},t.key)),!u&&e.jsx(m,{children:e.jsxs(g,{className:"flex flex-wrap items-center justify-between gap-3 p-4",children:[e.jsxs("div",{className:"text-sm text-muted-foreground",children:[x==="saving"&&"Spararâ¦",x==="saved"&&"Sparat",x==="idle"&&"Ãndringar sparas automatiskt"]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(v,{variant:"outline",onClick:H,disabled:x==="saving",children:[e.jsx(te,{className:"mr-2 h-4 w-4"})," Spara nu"]}),e.jsxs(se,{children:[e.jsx(ne,{asChild:!0,children:e.jsxs(v,{disabled:A,children:[A&&e.jsx(R,{className:"mr-2 h-4 w-4 animate-spin"}),e.jsx(ie,{className:"mr-2 h-4 w-4"})," Färdigställ"]})}),e.jsxs(re,{children:[e.jsxs(le,{children:[e.jsx(de,{children:"Färdigställ genomförandeplan"}),e.jsx(ce,{children:"Välj hur klienten ska godkänna planen. Efter färdigställning kan planen inte längre redigeras â vid eventuella ändringar mÃ¥ste en ny ver
1sion skapas."})]}),e.jsx("div",{className:"my-4",children:e.jsxs(oe,{value:y,onValueChange:t=>P(t),children:[e.jsxs("div",{className:"flex items-start gap-2 rounded border p-3",children:[e.jsx(I,{value:"digital_session",id:"sig-digital",className:"mt-0.5"}),e.jsxs(w,{htmlFor:"sig-digital",className:"cursor-pointer flex-1",children:[e.jsx("div",{className:"font-medium",children:"Digital signering via klientens konto"}),e.jsx("div",{className:"text-xs text-muted-foreground mt-1",children:"Klienten loggar in och godkänner i appen. PÃ¥minnelse efter 3 dagar, eskalering efter 7."})]})]}),e.jsxs("div",{className:"flex items-start gap-2 rounded border p-3",children:[e.jsx(I,{value:"physical_simulated",id:"sig-physical",className:"mt-0.5"}),e.jsxs(w,{htmlFor:"sig-physical",className:"cursor-pointer flex-1",children:[e.jsx("div",{className:"font-medium",children:"Fysisk signering (papper)"}),e.jsx("div",{className:"text-xs text-muted-foreground mt-1",children:"Klienten har skrivit under pÃ¥ papper. Terapeut bekräftar i systemet â planen lÃ¥ses direkt."})]})]})]})}),e.jsxs(ue,{children:[e.jsx(pe,{children:"Avbryt"}),e.jsx(me,{onClick:U,children:"Färdigställ"})]})]})]})]})]})})]})}export{xe as default};
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.