1import{a0 as ue,l as xe,r as l,Y as S,a1 as y,j as e,B as C,C as x,b as h,c as g,e as f,y as J}from"./index-DD08oKkH.js";import{k as he}from"./marked.esm-2C39VWY3.js";import ge from"./purify.es-sOfw8HaZ.js";import{A as B}from"./AppLayout-D6ubUPnp.js";import{B as I}from"./badge-TzaVLEqa.js";import{P as fe}from"./progress-nwLCo5Sa.js";import{S as je,a as _e,b as Se,c as Ne,d as be}from"./select-Z2lIjOKx.js";import{T as ye,a as we,b as Q,c as D,d as ve,e as k}from"./table-D2SrVSoK.js";import{C as Ce}from"./backlogColors-BJzr1mXX.js";import{u as De}from"./useSprintVisibility-CbCZT63G.js";import{M as ke}from"./ModuloSummary-BV2cn4Rx.js";import{u as Ae}from"./backlogModulos-CYJH9GfW.js";import{A as Te}from"./archive-B_k-5vKv.js";import{R as ee}from"./refresh-cw-B5ZA3IHb.js";import{R as Le,T as Re,L as Ee}from"./generateCategoricalChart-oVaO4s1x.js";import{L as Me,a as te}from"./LineChart-CUprpM6P.js";import{C as Be}from"./CartesianGrid-D4fjGt3Z.js";import{X as Ie,Y as Pe}from"./YAxis-CMuwEdOk.js";import{L as se}from"./loader-circle-bWaExBdR.js";import"./input-B84uDMhG.js";import"./separator-DcgB2vcW.js";import"./skeleton-DAquBJh-.js";import"./log-out-CtAHRyRL.js";import"./chart-column-CNzwbOb0.js";import"./book-open-0tveb44T.js";import"./circle-help-Sl1Mi7iN.js";import"./bot-efvonDPE.js";import"./building-2-CN2nDRo0.js";import"./receipt-atrr_QaW.js";import"./trending-down-D3fD_Eq1.js";import"./tags-DddE77Ph.js";import"./clipboard-check-BAME_Mla.js";import"./graduation-cap-96y0_fdT.js";import"./database-CdgJkL4z.js";import"./message-circle-question-CB4989QB.js";import"./file-text-BGF_vpkj.js";import"./send-Hwb5eblX.js";import"./chart-pie-BeJ8Fw_X.js";import"./wallet-FX2dCTJO.js";import"./landmark-DlhgmoqW.js";import"./bell-Fy3CySog.js";import"./pt-BR-DuqbTpbj.js";import"./target-hgGodHDb.js";import"./index-BdQq_4o_.js";import"./check-Vq6YUZzP.js";import"./value-3LWPH8SZ.js";const $e=["Testes com Autor","Em Revisão","Em Teste","ConcluÃdo"],ae=c=>$e.includes(c.status)||c.concluido_na_sprint,P=c=>ae(c)&&!c.remanejado,ze=c=>c.continued&&!ae(c),N=c=>new Intl.DateTimeFormat("en-CA",{timeZone:"America/Sao_Paulo"}).format(c),Rt=()=>{const{id:c}=ue(),A=xe(),{filterVisibleSprints:$,loaded:z}=De(),{modulosMap:ne}=Ae(),[oe,ie]=l.useState([]),[r,O]=l.useState(null),[d,re]=l.useState([]),[ce,G]=l.useState(!0),[F,H]=l.useState(!1),[V,de]=l.useState({}),[w,K]=l.useState(!1),[T,U]=l.useState(!1),L=l.useCallback(async t=>{const{data:s,error:a}=await S.from("sprints").select("id, nome, data_inicio, data_fim, status, pontos_planejados, ai_insights, ai_insights_generated_at").eq("id",t).single();if(a||!s){y.error("Sprint não encontrada");return}O(s);const{data:i}=await S.from("sprint_cards").select("id, backlog_item_id, pontos_planejados, status_na_sprint, concluido_na_sprint, data_conclusao, data_saida, motivo_saida, developer_id, backlog_items(id, demanda, categoria, pontos, developer_id, status, modulo_id, is_continued, continuation_percentual, data_conclusao)").eq("sprint_id",t),_=s.data_inicio,j=(()=>{const o=new Date(s.data_fim+"T00:00:00");return o.setDate(o.getDate()+7),N(o)})(),m=(i||[]).filter(o=>o.motivo_saida!=="engano").map(o=>{const n=o.backlog_items||{},p=n.data_conclusao||o.data_conclusao,u=p?N(new Date(p)):null,M=o.motivo_saida==="continuado"||o.status_na_sprint==="Continuado"||!!n.is_continued&&(!u||u>=_&&u<=j);return{id:o.backlog_item_id,demanda:n.demanda||"â",pontos:o.data_saida?o.pontos_planejados??n.pontos??0:n.pontos??o.pontos_planejados,developer_id:o.developer_id||n.developer_id||null,status:o.status_na_sprint||n.status,categoria:n.categoria||"Sem Categoria",data_conclusao:o.data_conclusao,modulo_id:n.modulo_id||null,continued:M,remanejado:o.motivo_saida==="remanejamento"||o.motivo_saida==="substituicao",continuation_percentual:n.continuation_percentual??null,concluido_na_sprint:!!o.concluido_na_sprint}});re(m)},[]);l.useEffect(()=>{if(!z)return;(async()=>{var j;G(!0);const{data:s}=await S.from("sprints").select("id, nome, data_inicio, data_fim, status, pontos_planejados, ai_insights, ai_insights_generated_at").order("created_at",{ascending:!1}),a=$(s||[]);ie(a);const i=a.find(m=>m.status==="Encerrada")||a[0],_=c||(i==null?void 0:i.id);_&&(await L(_),!c&&i&&(U(i.status==="Encerrada"),A(`/app/sprint/analysis/${i.id}`,{replace:!0})));try{const{data:m}=await S.auth.getSession(),o=(j=m==null?void 0:m.session)==null?void 0:j.access_token;if(o){const{data:n}=await S.functions.invoke("list-users",{headers:{Authorization:`Bearer ${o}`}});if(n!=null&&n.users){const p={};for(const u of n.users)p[u.id]=u.email||u.id;de(p)}}}catch{}G(!1)})()},[c,L,A,z,$]);const le=t=>{A(`/app/sprint/analysis/${t}`)},Y=l.useMemo(()=>
1{if(!r||d.length===0)return[];const t=new Date(r.data_inicio+"T00:00:00"),s=new Date(r.data_fim+"T00:00:00"),a=d.filter(n=>!n.remanejado).reduce((n,p)=>n+(p.pontos||0),0),i=[],_=Math.ceil((s.getTime()-t.getTime())/(1e3*60*60*24)),j=N(new Date),m=N(s),o=j<m?j:m;for(let n=new Date(t);n<=s;n.setDate(n.getDate()+1)){const p=N(n),u=Math.ceil((n.getTime()-t.getTime())/(1e3*60*60*24)),M=d.filter(b=>P(b)?(b.data_conclusao?N(new Date(b.data_conclusao)):o)<=p:!1).reduce((b,Z)=>b+(Z.pontos||0),0);i.push({date:n.toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit"}),remaining:a-M,ideal:Math.round(Math.max(0,a-a/_*u)*100)/100})}return i},[r,d]),me=l.useMemo(()=>{const t={};return d.forEach(s=>{const a=s.developer_id||"__unassigned__",i=s.pontos||0;t[a]||(t[a]={assigned:0,completed:0,continued:0,concluidoContinuado:0,remanejado:0}),s.remanejado||(t[a].assigned+=i),P(s)?(t[a].completed+=i,s.continued&&(t[a].concluidoContinuado+=i)):ze(s)?t[a].continued+=i:s.remanejado&&(t[a].remanejado+=i)}),Object.entries(t).map(([s,a])=>{var i;return{name:s==="__unassigned__"?"Sem desenvolvedor":((i=V[s])==null?void 0:i.split("@")[0])||s.slice(0,8),...a,rate:a.assigned>0?Math.round(a.completed/a.assigned*100):0}}).sort((s,a)=>a.assigned-s.assigned)},[d,V]),q=l.useMemo(()=>{if(d.length===0)return[];const t={};return d.forEach(s=>{const a=s.categoria||"Sem Categoria";t[a]=(t[a]||0)+1}),Object.entries(t).map(([s,a])=>({name:s,count:a,percentage:Math.round(a/d.length*1e4)/100})).sort((s,a)=>a.count-s.count)},[d]),R=d.filter(P).reduce((t,s)=>t+(s.pontos||0),0),v=d.filter(t=>!t.remanejado).reduce((t,s)=>t+(s.pontos||0),0),pe=v-R,E=v>0?R/v*100:0,W=E>=85,X=async()=>{if(c){K(!0);try{const{data:t,error:s}=await S.functions.invoke("sprint-insights",{body:{sprint_id:c}});if(s)throw s;if(t!=null&&t.error){y.error(t.error);return}O(a=>a&&{...a,ai_insights:t.insights,ai_insights_generated_at:t.generated_at}),y.success("Insights gerados com sucesso!")}catch(t){y.error((t==null?void 0:t.message)||"Erro ao gerar insights")}finally{K(!1)}}};return ce?e.jsx(B,{title:"Análise da Sprint",children:e.jsx("div",{className:"flex justify-center py-12",children:e.jsx("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-primary"})})}):r?e.jsx(B,{title:`Análise: ${r.nome}`,children:e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center gap-3 flex-wrap",children:[e.jsxs(je,{value:r.id,onValueChange:le,children:[e.jsx(_e,{className:"w-[220px] h-8 text-xs",children:e.jsx(Se,{})}),e.jsx(Ne,{children:oe.filter(t=>t.status!=="Encerrada"||T||t.id===r.id).map(t=>e.jsxs(be,{value:t.id,className:"text-xs",children:[t.nome," ",t.status==="Encerrada"?"(Encerrada)":t.status==="Ativa"?"â Ativa":""]},t.id))})]}),e.jsxs(C,{variant:T?"secondary":"ghost",size:"sm",className:"h-8 text-xs gap-1",onClick:()=>U(!T),children:[e.jsx(Te,{className:"h-3.5 w-3.5"}),"Encerradas"]}),e.jsx(C,{variant:"ghost",size:"icon",className:"h-8 w-8",disabled:F,onClick:async()=>{H(!0),await L(r.id),H(!1),y.success("Dados atualizados")},children:e.jsx(ee,{className:`h-4 w-4 ${F?"animate-spin":""}`})}),e.jsx(I,{variant:r.status==="Ativa"?"default":"secondary",children:r.status}),e.jsxs(I,{variant:"outline",children:[r.data_inicio.split("-").reverse().join("/")," â ",r.data_fim.split("-").reverse().join("/")]})]}),e.jsxs("div",{className:"grid grid-cols-4 gap-4",children:[e.jsxs(x,{children:[e.jsx(h,{className:"pb-2",children:e.jsx(g,{className:"text-sm",children:"Pontos Planejados"})}),e.jsx(f,{children:e.jsx("p",{className:"text-2xl font-bold font-mono",children:v.toLocaleString("pt-BR")})})]}),e.jsxs(x,{children:[e.jsx(h,{className:"pb-2",children:e.jsx(g,{className:"text-sm text-green-600",children:"ConcluÃdos"})}),e.jsx(f,{children:e.jsx("p",{className:"text-2xl font-bold font-mono text-green-600",children:R.toLocaleString("pt-BR")})})]}),e.jsxs(x,{children:[e.jsx(h,{className:"pb-2",children:e.jsx(g,{className:"text-sm text-orange-600",children:"Não ConcluÃdos"})}),e.jsx(f,{children:e.jsx("p",{className:"text-2xl font-bold font-mono text-orange-600",children:pe.toLocaleStr
1ing("pt-BR")})})]}),e.jsxs(x,{children:[e.jsx(h,{className:"pb-2",children:e.jsx(g,{className:"text-sm",children:"Meta (85%)"})}),e.jsxs(f,{children:[e.jsxs("p",{className:`text-2xl font-bold font-mono ${W?"text-green-600":"text-orange-500"}`,children:[E.toFixed(0),"%"]}),e.jsx(fe,{value:E,className:"mt-2 h-2"}),e.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:W?"â Meta atingida":"Abaixo da meta"})]})]})]}),q.length>0&&e.jsxs(x,{children:[e.jsx(h,{children:e.jsx(g,{className:"text-sm",children:"Distribuição por Categoria"})}),e.jsx(f,{children:e.jsx("div",{className:"flex flex-wrap gap-6 justify-center",children:q.map(t=>{var a;const s=Ce[t.name]||"bg-muted text-muted-foreground";return(a=s.match(/bg-(\S+)/))!=null&&a[1],e.jsxs("div",{className:"flex flex-col items-center gap-2",children:[e.jsxs("div",{className:`w-16 h-16 rounded-full flex items-center justify-center text-xs font-bold ${s}`,children:[t.percentage.toFixed(1),"%"]}),e.jsx("span",{className:"text-xs text-muted-foreground text-center max-w-[80px]",children:t.name}),e.jsxs("span",{className:"text-xs font-mono text-muted-foreground",children:[t.count," itens"]})]},t.name)})})})]}),e.jsx(ke,{title:"Composição por módulo",items:d.map(t=>({modulo_id:t.modulo_id,pontos:t.pontos,status:t.status})),modulosMap:ne,metric:"pontos"}),Y.length>0&&e.jsxs(x,{children:[e.jsx(h,{children:e.jsx(g,{className:"text-sm",children:"Burndown"})}),e.jsx(f,{children:e.jsx(Le,{width:"100%",height:300,children:e.jsxs(Me,{data:Y,children:[e.jsx(Be,{strokeDasharray:"3 3"}),e.jsx(Ie,{dataKey:"date",tick:{fontSize:11}}),e.jsx(Pe,{tick:{fontSize:11}}),e.jsx(Re,{}),e.jsx(Ee,{}),e.jsx(te,{type:"monotone",dataKey:"remaining",stroke:"hsl(var(--primary))",strokeWidth:2,name:"Real",dot:!1}),e.jsx(te,{type:"monotone",dataKey:"ideal",stroke:"hsl(var(--muted-foreground))",strokeDasharray:"5 5",strokeWidth:1.5,name:"Ideal",dot:!1})]})})})]}),e.jsxs(x,{children:[e.jsx(h,{children:e.jsx(g,{className:"text-sm",children:"Desempenho por Desenvolvedor"})}),e.jsx(f,{children:e.jsxs(ye,{children:[e.jsx(we,{children:e.jsxs(Q,{children:[e.jsx(D,{children:"Desenvolvedor"}),e.jsx(D,{className:"text-right",children:"AtribuÃdos"}),e.jsx(D,{className:"text-right",children:"ConcluÃdos"}),e.jsx(D,{className:"text-right",children:"Taxa"})]})}),e.jsx(ve,{children:me.map(t=>e.jsxs(Q,{children:[e.jsxs(k,{className:"font-medium",children:[t.name,(t.continued>0||t.remanejado>0)&&e.jsxs("span",{className:"block text-[11px] font-normal text-muted-foreground",children:[[t.continued>0?`${t.continued.toLocaleString("pt-BR")} pts continuados`:null,t.remanejado>0?`${t.remanejado.toLocaleString("pt-BR")} pts retirados da sprint`:null].filter(Boolean).join(" · ")," ","(fora dos pontos atribuÃdos)"]}),t.concluidoContinuado>0&&e.jsxs("span",{className:"block text-[11px] font-normal text-muted-foreground",children:[t.concluidoContinuado.toLocaleString("pt-BR")," pts concluÃdos e continuados (contam como entrega)"]})]}),e.jsxs(k,{className:"text-right font-mono",children:[t.assigned.toLocaleString("pt-BR")," pts"]}),e.jsxs(k,{className:"text-right font-mono",children:[t.completed.toLocaleString("pt-BR")," pts"]}),e.jsx(k,{className:"text-right",children:e.jsxs(I,{variant:t.rate>=80?"default":t.rate>=50?"secondary":"destructive",children:[t.rate,"%"]})})]},t.name))})]})})]}),e.jsxs(x,{children:[e.jsxs(h,{className:"flex flex-row items-center justify-between space-y-0",children:[e.jsxs(g,{className:"text-sm flex items-center gap-2",children:[e.jsx(J,{className:"h-4 w-4 text-primary"}),"Insights IA"]}),r.ai_insights?e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("span",{className:"text-xs text-muted-foreground",children:["Gerado em ",new Date(r.ai_insights_generated_at).toLocaleString("pt-BR")]}),e.jsxs(C,{variant:"ghost",size:"sm",onClick:X,disabled:w,children:[w?e.jsx(se,{className:"h-4 w-4 animate-spin"}):e.jsx(ee,{className:"h-4 w-4"}),"Regenerar"]})]}):null]}),e.jsx(f,{children:r.ai_insights?e.jsx("div",{className:"prose prose-sm max-w-none dark:prose-invert text-sm text-foreground",dangerouslySetInnerHTML:{__html:ge.sanitize(he.parse(r.ai_insights))}}):e.jsxs("div",{className:"flex flex-col items-center gap-3 py-6",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Analise padrões dos cartões desta sprint com IA"}),e.jsx(C,{onClick:X,disabled:w,children:w?e.jsxs(e.Fragment,{children:[e.jsx(se,{className:"h-4 w-4 animate-spin mr-1"}),"Analisando..."]}):e.jsxs(e.Fragment,{children:[e.jsx(J,{className:"h-4 w-4 mr-1"}),"Gerar Insights com IA"]})})]})})]})]})}):e.jsx(B,{title:"Análise da Sprint",children:e.jsx("p",{className:"text-center text-muted-foreground py-12",children:"Sprint não encontrada."})})};export{Rt 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.