1import{u as Q,j as e}from"./index-D0NFXJHP.js";import{i as X,r as c}from"./react-vendor-B-clOVnp.js";import{bG as J,R as O,aw as ee,bg as ae,cm as se,bD as U,a3 as M,x as B,o as P,cn as re}from"./icons-l1P0DWf7.js";import{a0 as H,a1 as I,a2 as q,a3 as K,a4 as V,a5 as te}from"./CartesianChart-B7o6X5ZQ.js";import{B as ne,c as Z,L as ie,d as oe}from"./BarChart-lTiiu6nD.js";import"./with-selector-zmmuMwI5.js";const y="America/Sao_Paulo",d=s=>Number(s||0).toLocaleString("pt-BR",{maximumFractionDigits:1}),u=s=>s==null?"não informado":`${d(s)} h`,le=s=>new Intl.DateTimeFormat("en-CA",{timeZone:y,year:"numeric",month:"2-digit"}).format(s).slice(0,7),ce=()=>{const[s,i]=le(new Date).split("-").map(Number),o=new Date(Date.UTC(s,i-2,1));return`${o.getUTCFullYear()}-${String(o.getUTCMonth()+1).padStart(2,"0")}`},j=s=>/^\d{4}-(0[1-9]|1[0-2])$/.test(s||""),de=s=>{if(!j(s))return"Relatório mensal";const[i,o]=s.split("-").map(Number);return new Intl.DateTimeFormat("pt-BR",{month:"long",year:"numeric",timeZone:y}).format(new Date(Date.UTC(i,o-1,15,12)))};function me(s){if(!s)return"Data não informada";const i=String(s),o=/^\d{4}-\d{2}-\d{2}$/.test(i)?new Date(`${i}T12:00:00.000Z`):new Date(s);return Number.isNaN(o.getTime())?"Data não informada":new Intl.DateTimeFormat("pt-BR",{timeZone:y,day:"2-digit",month:"short",year:"numeric",hour:"2-digit",minute:"2-digit"}).format(o)}function w({icon:s,label:i,value:o,detail:f,tone:h="navy"}){return e.jsxs("article",{className:`emr-metric emr-metric-${h}`,children:[e.jsxs("div",{className:"emr-metric-head",children:[e.jsx("span",{children:i}),e.jsx(s,{size:17,"aria-hidden":"true"})]}),e.jsx("strong",{children:d(o)}),f&&e.jsx("small",{children:f})]})}function he(){return e.jsxs("div",{className:"emr-skeleton","aria-label":"Carregando relatório",children:[e.jsx("div",{className:"emr-skeleton-metrics",children:[1,2,3,4].map(s=>e.jsx("div",{},s))}),e.jsx("div",{className:"emr-skeleton-panel"}),e.jsx("div",{className:"emr-skeleton-panel short"})]})}function G({icon:s,title:i,children:o}){return e.jsxs("div",{className:"emr-empty",children:[e.jsx("span",{children:e.jsx(s,{size:22})}),e.jsx("strong",{children:i}),e.jsx("p",{children:o})]})}function ge(){const{token:s,bubbleVersion:i}=Q(),[o,f]=X(),h=o.get("mes"),[p,E]=c.useState(()=>j(h)?h:ce()),[r,S]=c.useState(null),[C,D]=c.useState(!0),[R,L]=c.useState(""),[k,z]=c.useState(""),[T,F]=c.useState(null),b=c.useRef(0);c.useEffect(()=>{j(h)&&h!==p&&E(h)},[h,p]);const g=c.useCallback(async()=>{const a=++b.current;if(!s||!j(p)){D(!1);return}D(!0),L(""),S(null);try{const l=await fetch(`/api/empresa/relatorio-mensal?mes=${encodeURIComponent(p)}`,{headers:{Authorization:`Bearer ${s}`,...i?{"x-bubble-version":i}:{}}}),n=await l.json().catch(()=>({}));if(!l.ok)throw new Error(n.error||n.erro||"Não foi possÃvel carregar o relatório.");if(a!==b.current)return;S({competencia:n.competencia,fuso:n.fuso,resumo:n.resumo||{},porDia:Array.isArray(n.porDia)?n.porDia:[],freelancers:Array.isArray(n.freelancers)?n.freelancers:[],documentos:Array.isArray(n.documentos)?n.documentos:[]})}catch(l){if(a!==b.current)return;S(null),L(l.message||"O relatório não pôde ser carregado.")}finally{a===b.current&&D(!1)}},[s,p,i]);c.useEffect(()=>{g()},[g]);const W=a=>{const l=a.target.value;j(l)&&(E(l),f({mes:l},{replace:!0}))},$=async a=>{if(!a?.pdfUrl||k)return;z(a.id),F(null);const l=`${(a.titulo||a.nomeFreelancer||"documento").replace(/[^\p{L}\p{N}._-]+/gu,"-")}.pdf`;try{let n=null;if(typeof window.showSaveFilePicker=="function")try{n=await window.showSaveFilePicker({suggestedName:l,types:[{description:"Documento PDF",accept:{"application/pdf":[".pdf"]}}]})}catch(m){if(m?.name==="AbortError")return}const v=await fetch(a.pdfUrl,{headers:{Authorization:`Bearer ${s}`,...i?{"x-bubble-version":i}:{}}}),_=v.headers.get("content-type")||"";if(!v.ok||!/application\/pdf/i.test(_)){const m=await v.json().catch(()=>({}));throw new Error(m.error||"O servidor não retornou um PDF válido. Tente novamente.")}const A=await v.blob();if(!A.size)throw new Error("O contrato retornado está vazio. Tente novamente.");if(n){const m=await n.createWritable();await m.write(A),await m.close()}else{const m=URL.createObjectURL(A),x=window.document.createElement("a");x.href=m,x.download=l,window.document.body.appendChild(x),x.click(),window.setTimeout(()=>x.remove(),1e3),window.setTimeout(()=>URL.revokeObjectURL(m),6e4)}}catch(n){F({id:a.id,message:n.message||"Falha ao baixar o contrato."})}finally{z("")}},N=c.useMemo(()=>(r?.porDia||[]).map(a=>({...a,diaLabel:String(a.dia||"").slice(-2),diretas:Number(a.diretas||0),intermediadas:Number(a.intermediadas||0),horasTrabalhadas:Number(a.horasTrabalhadas||0)})),[r?.porDia]),t=r?.resumo||{},Y=!!r&&(Number(t.contratacoes)>0||Number(t.horasTrabalhadas)>0||Number(t.horasEstimadas)>0||r.freelancers.length>0||r.documentos.length>0);return e.jsxs("main",{className:"emr-page",children:[e.jsxs("header",{className:"emr-header",children:[e.jsxs("div",{className:"emr-header-title",children:[e.jsxs("span",{className:"emr-kicker",children:[e.jsx("span",{})," VISÃO DA EMPRESA ",e.jsx("i",{children:"/"})," RELATÃRIO"]}),e.jsx("h1",{children:"Seu mês, em perspectiva."}),e.jsx("p",{children:"Contratações, horas e contratos de serviço assinad
1os em um só lugar."})]}),e.jsxs("label",{className:"emr-month-control",children:[e.jsx(J,{size:17,"aria-hidden":"true"}),e.jsx("span",{children:"Competência"}),e.jsx("input",{"aria-label":"Selecionar competência do relatório",type:"month",value:p,onChange:W})]})]}),e.jsxs("div",{className:"emr-period-line",children:[e.jsx("span",{children:de(r?.competencia||p)}),e.jsx("span",{className:"emr-period-rule"}),e.jsx("span",{children:r?.fuso||y}),e.jsxs("button",{type:"button",className:"emr-refresh",onClick:g,disabled:C,"aria-label":"Atualizar relatório",children:[e.jsx(O,{size:15,className:C?"emr-spinning":""})," Atualizar"]})]}),R&&e.jsxs("div",{className:"emr-error",role:"alert",children:[e.jsx(ee,{size:18}),e.jsx("span",{children:R}),e.jsx("button",{type:"button",onClick:g,children:"Tentar novamente"})]}),C&&!r?e.jsx(he,{}):r?e.jsxs(e.Fragment,{children:[!Y&&e.jsxs("div",{className:"emr-no-activity",children:[e.jsx(ae,{size:16}),e.jsx("span",{children:"Sem movimentações nesta competência. Os totais abaixo mostram os dados disponÃveis para o mês."})]}),e.jsxs("section",{className:"emr-overview","aria-label":"Resumo do mês",children:[e.jsx(w,{icon:se,label:"Contratações",value:t.contratacoes,detail:`${d(t.diretas)} diretas · ${d(t.intermediadas)} intermediadas`}),e.jsx(w,{icon:U,label:"Horas apuradas (registradas + estimadas)",value:t.horasTrabalhadas,detail:`Registradas: ${u(t.horasRegistradas)} · estimadas: ${u(t.horasEstimadas)}`,tone:"teal"}),e.jsx(w,{icon:M,label:"Freelancers únicos",value:t.freelancersUnicos,detail:`${r.freelancers.length} ${r.freelancers.length===1?"pessoa na lista":"pessoas na lista"}`,tone:"gold"}),e.jsx(w,{icon:B,label:"Contratos de serviço assinados",value:t.documentosAssinados,detail:"Contratos assinados no mês",tone:"coral"})]}),e.jsxs("aside",{className:"emr-estimate-note",children:[e.jsx("span",{className:"emr-estimate-icon",children:e.jsx(U,{size:17})}),e.jsxs("div",{children:[e.jsxs("strong",{children:["Horas estimadas: ",d(t.horasEstimadas)," h"]}),e.jsxs("p",{children:["Horas apuradas = registradas (",u(t.horasRegistradas),") + estimadas (",u(t.horasEstimadas),"). A estimativa usa os horários agendados quando não há horas registradas e não representa horas verificadas."]})]})]}),e.jsxs("section",{className:"emr-chart-panel",children:[e.jsxs("div",{className:"emr-section-heading",children:[e.jsxs("div",{children:[e.jsx("span",{className:"emr-eyebrow",children:"MOVIMENTO DIÃRIO"}),e.jsx("h2",{children:"Contratações ao longo do mês"})]}),e.jsx("span",{className:"emr-chart-caption",children:"Cada coluna representa um dia"})]}),N.some(a=>a.diretas||a.intermediadas)?e.jsx("div",{className:"emr-chart",children:e.jsx(H,{width:"100%",height:"100%",children:e.jsxs(ne,{data:N,margin:{top:10,right:8,left:-22,bottom:2},barGap:2,children:[e.jsx(I,{stroke:"#e8edf0",vertical:!1}),e.jsx(q,{dataKey:"diaLabel",tickLine:!1,axisLine:!1,tick:{fill:"#75828d",fontSize:11},interval:"preserveStartEnd"}),e.jsx(K,{allowDecimals:!1,tickLine:!1,axisLine:!1,tick:{fill:"#75828d",fontSize:11}}),e.jsx(V,{labelFormatter:a=>`Dia ${a}`,formatter:(a,l)=>[d(a),l]}),e.jsx(te,{iconType:"circle",wrapperStyle:{fontSize:12,paddingTop:8}}),e.jsx(Z,{dataKey:"diretas",name:"Diretas",fill:"#00aebe",radius:[4,4,0,0],maxBarSize:18}),e.jsx(Z,{dataKey:"intermediadas",name:"Intermediadas",fill:"#173d62",radius:[4,4,0,0],maxBarSize:18})]})})}):e.jsx("div",{className:"emr-chart-empty",children:"Sem contratações registradas por dia nesta competência."}),e.jsxs("div",{className:"emr-hours-strip",children:[e.jsx("span",{className:"emr-hours-dot"})," ",d(t.horasTrabalhadas)," h apuradas · ",u(t.horasRegistradas)," registradas + ",u(t.horasEstimadas)," estimadas"]}),N.some(a=>a.horasTrabalhadas>0)&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"emr-hours-heading",children:[e.jsx("span",{className:"emr-eyebrow",children:"HORAS APURADAS POR DIA"}),e.jsxs("span",{children:[d(t.horasTrabalhadas)," h no perÃodo"]})]}),e.jsx("div",{className:"emr-hours-chart",children:e.jsx(H,{width:"100%",height:"100%",children:e.jsxs(ie,{data:N,margin:{top:8,right:8,left:-22,bottom:0},children:[e.jsx(I,{stroke:"#e8edf0",vertical:!1}
1),e.jsx(q,{dataKey:"diaLabel",tickLine:!1,axisLine:!1,tick:{fill:"#75828d",fontSize:10},interval:"preserveStartEnd"}),e.jsx(K,{tickLine:!1,axisLine:!1,tick:{fill:"#75828d",fontSize:10}}),e.jsx(V,{labelFormatter:a=>`Dia ${a}`,formatter:a=>[`${d(a)} h`,"Horas apuradas"]}),e.jsx(oe,{type:"monotone",dataKey:"horasTrabalhadas",name:"Horas apuradas",stroke:"#bd8e50",strokeWidth:2.5,dot:{r:2.5,fill:"#bd8e50"},activeDot:{r:4}})]})})})]})]}),e.jsxs("section",{className:"emr-lower-grid",children:[e.jsxs("div",{className:"emr-list-panel",children:[e.jsxs("div",{className:"emr-section-heading",children:[e.jsxs("div",{children:[e.jsx("span",{className:"emr-eyebrow",children:"QUEM ESTEVE COM VOCÃ"}),e.jsx("h2",{children:"Freelancers"})]}),e.jsx("span",{className:"emr-count",children:r.freelancers.length})]}),r.freelancers.length?e.jsx("div",{className:"emr-freelancer-list",children:r.freelancers.map(a=>e.jsxs("article",{className:"emr-person",children:[a.foto?e.jsx("img",{className:"emr-avatar",src:a.foto,alt:"",loading:"lazy"}):e.jsx("span",{className:"emr-avatar emr-avatar-fallback",children:(a.nome||"?").trim().charAt(0).toLocaleUpperCase("pt-BR")}),e.jsxs("div",{className:"emr-person-name",children:[e.jsx("strong",{children:a.nome||"Freelancer"}),e.jsxs("span",{children:[d(a.contratacoes)," ",Number(a.contratacoes)===1?"contratação":"contratações"]})]}),e.jsxs("div",{className:"emr-person-hours",children:[e.jsxs("strong",{children:[d(a.horasTrabalhadas)," h"]}),e.jsx("span",{children:"trabalhadas"})]})]},a.id))}):e.jsx(G,{icon:M,title:"Nenhum freelancer listado",children:"A lista será preenchida com as contratações da competência."})]}),e.jsxs("div",{className:"emr-list-panel emr-doc-panel",children:[e.jsxs("div",{className:"emr-section-heading",children:[e.jsxs("div",{children:[e.jsx("span",{className:"emr-eyebrow",children:"CONTRATOS ASSINADOS"}),e.jsx("h2",{children:"Contratos de serviço assinados"})]}),e.jsx("span",{className:"emr-count",children:r.documentos.length})]}),T&&e.jsxs("div",{className:"emr-pdf-error",role:"alert",children:[e.jsx("span",{children:T.message}),e.jsx("button",{type:"button",onClick:()=>$(r.documentos.find(a=>a.id===T.id)),children:"Tentar baixar novamente"})]}),r.documentos.length?e.jsx("div",{className:"emr-doc-list",children:r.documentos.map(a=>e.jsxs("article",{className:"emr-document",children:[e.jsx("span",{className:"emr-doc-icon",children:e.jsx(P,{size:17})}),e.jsxs("div",{className:"emr-doc-info",children:[e.jsx("strong",{children:a.titulo||"Documento de prestação de serviço"}),e.jsxs("span",{children:[a.nomeFreelancer||"Freelancer"," · ",me(a.assinadoEm)]})]}),e.jsx("button",{type:"button",className:"emr-download",onClick:()=>$(a),disabled:!a.pdfUrl||!!k,"aria-label":`Baixar documento de ${a.nomeFreelancer||"freelancer"}`,children:k===a.id?e.jsx(O,{size:16,className:"emr-spinning"}):e.jsx(re,{size:17})})]},a.id))}):e.jsx(G,{icon:B,title:"Nenhum contrato de serviço assinado",children:"Os contratos assinados nesta competência ficarão disponÃveis aqui."})]})]}),e.jsxs("footer",{className:"emr-footer",children:[e.jsx("span",{className:"emr-footer-mark",children:e.jsx(P,{size:13})})," Resumo atualizado com dados da sua operação FreelaCerto."]})]}):null]})}export{ge 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.