1import{_ as G,u as H,a as Q,b as X,r as C,c as g,o as Z,d as ee,e as i,f as e,h as se,n as w,t as p,i as m,j as h,k as ae,F as te,l as ie,m as B,p as y,C as J,q as o}from"./app-JGHtIhlz.js";const oe={class:"container-fluid"},ne={class:"row"},le={class:"col-md-12"},re={class:"metrics-section mb-3"},ce={class:"metrics-scroll-container"},de={class:"metrics-grid"},ue={class:"metric-card"},ve={class:"metric-content"},me={class:"metric-icon"},be={class:"metric-details"},fe={class:"metric-main-value"},ge={key:1,class:"skeleton-value"},pe={class:"metric-sub-values"},he={class:"sub-value-item"},_e={class:"sub-value-amount"},ye={key:0},xe={key:1,class:"skeleton-sub-value"},we={class:"metric-card"},ke={class:"metric-content"},ze={class:"metric-details"},Ce={class:"metric-main-value"},Ae={key:0,class:"value-amount text-dark"},Se={key:1,class:"skeleton-value"},Pe={class:"metric-sub-values grid-cols-2"},Be={key:0,class:"sub-value-item"},Je={key:1,class:"sub-value-item"},Te={class:"sub-value-amount d-flex align-items-center gap-2"},De={key:0,class:"bi bi-arrow-repeat spin me-1"},Le={key:1},je={key:1,class:"skeleton-sub-value w-100"},Ie={class:"progress flex-grow-1",style:{height:"6px","background-color":"var(--bs-secondary-bg)","max-width":"60px"}},Ee=["aria-valuenow"],Ne={key:2,class:"sub-value-item"},qe={class:"sub-value-amount text-truncate"},Re={class:"text-warning"},$e={key:3,class:"sub-value-item"},Fe={class:"metric-card"},Me={class:"metric-content"},Ve={class:"metric-details"},Ue={class:"metric-main-value d-flex flex-column gap-2 mt-2",style:{"align-items":"flex-start"}},Oe=["disabled"],Ke={key:1,class:"d-flex gap-2 w-100"},We=["disabled"],Ye=["disabled"],Ge=["disabled"],He=["disabled"],Qe={class:"frame rounded"},Xe={class:"area orders-accordion"},Ze={class:"operation-header p-3"},es={class:"d-flex justify-content-between align-items-center"},ss={class:"d-flex align-items-center"},as={class:"text-dark"},ts={key:0,class:"badge bg-primary-subtle text-primary ms-2"},is={class:"d-flex align-items-center gap-4"},os={class:"text-end",style:{"min-width":"150px"}},ns={class:"text-dark"},ls={class:"form-check form-switch m-0 d-flex align-items-center",style:{transform:"scale(1.1)"}},rs=["id","checked","onChange","disabled"],cs={key:0,class:"p-4 text-center text-muted"},ds={__name:"B3SyncPage",setup(us){const b=H(),l=Q(),S=X(),k=C(!1),d=C(!1),r=C(!1);let _=null;const n=C({isAuthorized:!1,authorizedAt:null,activeJob:null}),c=g(()=>{var s;const a=(s=n.value.activeJob)==null?void 0:s.status;return a?!["completed","cancelled","failed"].includes(a):!1}),T=g(()=>n.value.isAuthorized?"Autorizado":"Não autorizado"),D=g(()=>n.value.isAuthorized?"text-success":"text-danger"),L=g(()=>n.value.isAuthorized?"bg-success-subtle text-success":"bg-danger-subtle text-danger"),j=g(()=>n.value.isAuthorized?"bi-check-circle-fill":"bi-x-circle-fill"),I=g(()=>{var t;const a=(t=n.value.activeJob)==null?void 0:t.status;return a?{pending:"Na Fila",extracting_trades:"Lendo Lançamentos...",distributing_trades:"Salvando Lançamentos...",extracting_events:"Lendo Proventos...",distributing_events:"Salvando Proventos...",completed:"Sincronizado",cancelled:"Cancelado",failed:"Falha na Sincronização"}[a]||a:"Sem histórico"}),E=g(()=>{if(!c.value)return"-";const a=n.value.activeJob;return a.total_steps?`${a.current_step} de ${a.total_steps}`:"Iniciando..."}),A=g(()=>{if(!c.value)return 0;const a=n.value.activeJob;return!a||!a.total_steps?0:Math.round(a.current_step/a.total_steps*100)}),N=a=>a?new Date(a).toLocaleDateString("pt-BR"):"Nunca",q=a=>{if(!a)return"Nunca";const s=new Date(a);return`${s.toLocaleDateString("pt-BR")} às ${s.toLocaleTimeString("pt-BR",{hour:"2-digit",minute:"2-digit"})}`},R=a=>a?new Date(a).toLocaleTimeString("pt-BR",{hour:"2-digit",minute:"2-digit"}):"-",x=async(a=!1)=>{var s,t,u;a||(d.value=!0);try{const v=await y.get("/api/b3-sync/status");if(v.data){if(n.value={isAuthorized:v.data.is_authorized===!0||v.data.is_authorized===1||v.data.is_authorized==="1",authorizedAt:v.data.authorized_at,activeJob:v.data.active_job},c.value&&!_)W();else if(!c.value&&_&&(P(),a)){if(((s=n.value.activeJob)==null?void 0:s.status)==="completed")l.show("Extração e replicação finalizadas com sucesso!","success"),b.fetchPortfolios(),b.triggerUpdate("trades");else if(((t=n.value.activeJob)==null?void 0:t.status)==="failed"){const z=((u=n.value.activeJob)==null?void 0:u.error_log)||"A sincronização falhou.";l.show(z,"danger")}}}}catch{a||l.show("Erro ao carregar status da B3","danger")}finally{a||(d.value=!1)}},$=async()=>{var a,s;r.value=!0;try{const{data:t}=await y.get("/api/b3-sync/auth-url");window.open(t.url,"B3","width=600,height=800"),k.value=!0,l.show('Após autorizar na aba que se abriu, clique em "Já autorizei".',"success")}catch(t){const u=((s=(a=t.response)==null?void 0:a.data)==null?void 0:s.message)||"Erro ao buscar URL da B3.";l.show(u,"danger")}finally{r.value=!1}},F=async()=>{var a,s;r.value=!0;try{const{data:t}=await y.post("/api/b3-sync/confirm-sync");l.show(t.message,"success"),k.value=!1,x()}catch(t){l.show(((s=(a=t.response)==null?void 0:a.data)==null?void 0:s.message)||"Erro ao confirmar sincronização.","danger")}finally{r.value=!1}},M=async()=>{var a,s;r.value=!0;try{await y.post("/api/b3-sync/sync"),l.show("Processo iniciado. Acompanhe o progresso no painel.","success"),x()}catch(t){const u=((s=(a=t.response)==null?void 0:a.data)==null?void 0:s.message)||"Erro ao iniciar extração.";l.show(u,"danger")}finally{r.value=!1}},V=()=>{S.open(J,{title:"Remover acesso",message:"Tem certeza que deseja remover o acesso à B3? A sincronização automática das suas carteiras será interrompida.",onConfirm:async()=>{r.value=!0;try{return await y.post("/api/b3-sync/revoke"),l.show("Acesso removido com sucesso","success"),await x(),!0}catch(a){throw l.show("Erro ao remover acesso","danger"),a}finally{r.value=!1}}})},U=async()=>{S.open(J,{title:"Parar execução",message:"Tem certeza que deseja interromper a sincronização? ",onConfirm:async()=>{var a,s;r.value=!0;try{const{data:t}=await y.post("/api/b3-sync/cancel");l.show(t.message,"warning"),x()}catch(t){l.show(((s=(a=t.response)==null?void 0:a.data)==null?void 0:s.message)||"Erro ao tentar parar a execução.","danger")}finally{r.value=!1}}})},O=async(a,s)=>{const t=!!s;try{b.updatePortfolioInAllLocations(a.id,{b3_sync_enabled:t}),await y.put(`/api/portfolios/${a.id}`,{title:a.title,b3_sync_enabled:t}),t?l.show(`A carteira "${a.title}" será inclusa na próxima replicação.`,"success"):l.show(`A carteira "${a.title}
1" não receberá mais dados da B3.`,"success")}catch{l.show("Erro ao alterar configuração da carteira","danger"),b.updatePortfolioInAllLocations(a.id,{b3_sync_enabled:!t}),b.fetchPortfolios()}},K=()=>{var s;const a=((s=n.value.activeJob)==null?void 0:s.error_log)||"Ocorreu um erro desconhecido durante a extração.";l.show(a,"danger")},W=()=>{_||(_=setInterval(()=>{x(!0)},1e4))},P=()=>{_&&(clearInterval(_),_=null)};return Z(()=>{x(),b.portfolios.length===0&&b.fetchPortfolios()}),ee(()=>{P()}),(a,s)=>{var t,u,v,z;return o(),i("div",oe,[e("div",ne,[e("div",le,[e("div",re,[e("div",ce,[e("div",de,[e("div",ue,[e("div",ve,[e("div",me,[e("div",{class:w(["icon-circle d-flex align-items-center justify-content-center",L.value])},[e("i",{class:w(["bi",j.value])},null,2)],2)]),e("div",be,[s[2]||(s[2]=e("div",{class:"metric-title fw-bold"},"VÃnculo de CPF",-1)),e("div",fe,[d.value?(o(),i("span",ge)):(o(),i("span",{key:0,class:w(["value-amount",D.value])},p(T.value),3))]),e("div",pe,[e("div",he,[s[1]||(s[1]=e("div",{class:"sub-value-label text-light"},"Permissão concedida em",-1)),e("div",_e,[d.value?(o(),i("span",xe)):(o(),i("span",ye,p(q(n.value.authorizedAt)),1))])])])])])]),e("div",we,[e("div",ke,[s[9]||(s[9]=e("div",{class:"metric-icon"},[e("div",{class:"icon-circle bg-surface-secondary d-flex align-items-center justify-content-center"},[e("i",{class:"bi bi-cloud-arrow-down"})])],-1)),e("div",ze,[s[8]||(s[8]=e("div",{class:"metric-title fw-bold"},"Status atual",-1)),e("div",Ce,[d.value?(o(),i("span",Se)):(o(),i("span",Ae,p(I.value),1))]),e("div",Pe,[((t=n.value.activeJob)==null?void 0:t.status)==="completed"?(o(),i("div",Be,[...s[3]||(s[3]=[e("div",{class:"sub-value-label text-light"},"Status",-1),e("div",{class:"sub-value-amount d-flex align-items-center gap-2"},[e("i",{class:"bi bi-check-circle-fill text-success"}),e("span",{class:"text-success fw-bold"},"Tudo em dia")],-1)])])):(o(),i("div",Je,[s[4]||(s[4]=e("div",{class:"sub-value-label text-light"},"Progresso",-1)),e("div",Te,[d.value?(o(),i("span",je)):(o(),i("span",{key:0,class:w(c.value?"text-primary fw-bold":"text-muted")},[c.value?(o(),i("i",De)):m("",!0),h(" "+p(E.value)+" ",1),c.value?(o(),i("span",Le,"("+p(A.value)+"%)",1)):m("",!0)],2)),e("div",Ie,[e("div",{class:w(["progress-bar",c.value?"progress-bar-striped progress-bar-animated bg-primary":""]),role:"progressbar",style:ae({width:A.value+"%"}),"aria-valuenow":A.value,"aria-valuemin":"0","aria-valuemax":"100"},null,14,Ee)])])])),c.value&&((u=n.value.activeJob)!=null&&u.finish_date_time)?(o(),i("div",Ne,[s[5]||(s[5]=e("div",{class:"sub-value-label text-light"},"Previsão",-1)),e("div",qe,[e("span",Re,p(R((v=n.value.activeJob)==null?void 0:v.finish_date_time)),1)])])):((z=n.value.activeJob)==null?void 0:z.status)==="failed"?(o(),i("div",$e,[s[7]||(s[7]=e("div",{class:"sub-value-label text-danger"},"Falha na Sincronização",-1)),e("div",{class:"sub-value-amount text-truncate"},[e("span",{class:"text-danger cursor-pointer fw-bold",onClick:K,title:"Ver detalhes"},[...s[6]||(s[6]=[h(" Ver erro ",-1),e("i",{class:"bi bi-info-circle"},null,-1)])])])])):m("",!0)])])])]),e("div",Fe,[e("div",Me,[s[17]||(s[17]=e("div",{class:"metric-icon"},[e("div",{class:"icon-circle bg-surface-secondary d-flex align-items-center justify-content-center"},[e("i",{class:"bi bi-sliders"})])],-1)),e("div",Ve,[s[16]||(s[16]=e("div",{class:"metric-title fw-bold"},"Ações disponÃveis",-1)),e("div",Ue,[!n.value.isAuthorized&&!k.value?(o(),i("button",{key:0,class:"btn btn-primary btn-sm w-100",onClick:$,disabled:d.value||r.value},[...s[10]||(s[10]=[e("i",{class:"bi bi-link-45deg me-1"},null,-1),h(" Autorizar B3 ",-1)])],8,Oe)):m("",!0),!n.value.isAuthorized&&k.value?(o(),i("div",Ke,[e("button",{class:"btn btn-success btn-sm w-100",onClick:F,disabled:r.value},[...s[11]||(s[11]=[e("i",{class:"bi bi-check-circle me-1"},null,-1),h(" Já autorizei ",-1)])],8,We),e("button",{class:"btn btn-outline-danger btn-sm",onClick:s[0]||(s[0]=f=>k.value=!1),title:"Cancelar"},[...s[12]||(s[12]=[e("i",{class:"bi bi-x-lg"},null,-1),h(" Cancelar ",-1)])])])):m("",!0),n.value.isAuthorized&&!c.value?(o(),i("button",{key:2,class:"btn btn-primary btn-sm w-100",onClick:M,disabled:d.value||r.value},[...s[13]||(s[13]=[e("i",{class:"bi bi-arrow-repeat me-1"},null,-1),h(" Sincronizar com a B3 ",-1)])],8,Ye)):m("",!0),n.value.isAuthorized?(o(),i("button",{key:3,class:"btn btn-outline-danger btn-sm w-100",onClick:V,disabled:d.value||r.value||c.value},[...s[14]||(s[14]=[e("i",{class:"bi bi-x-circle me-1"},null,-1),h(" Remover acesso ",-1)])],8,Ge)):m("",!0),c.value?(o(),i("button",{key:4,class:"btn btn-outline-secondary btn-sm w-100",onClick:U,disabled:r.value},[...s[15]||(s[15]=[e("i",{class:"bi bi-stop-circle me-1"},null,-1),h(" Parar execução ",-1)])],8,He)):m("",!0)])])])])])])]),s[20]||(s[20]=se('<div class="frame roun
1ded p-4 mb-3" data-v-f84ae3d8><nav class="navbar rounded mb-2" data-v-f84ae3d8><div class="d-flex align-items-center" data-v-f84ae3d8><div class="title" data-v-f84ae3d8>Como a integração com a B3 funciona</div></div></nav><div class="row g-3" data-v-f84ae3d8><div class="col-md-6 col-lg-3" data-v-f84ae3d8><div class="h-100 p-3 bg-light border rounded" data-v-f84ae3d8><div class="d-flex align-items-center mb-2" data-v-f84ae3d8><i class="bi bi-clock-history text-primary me-2 fs-5" data-v-f84ae3d8></i><strong class="text-dark" style="font-size:0.9rem;" data-v-f84ae3d8>Tempo de Processamento</strong></div><p class="mb-0 text-muted" style="font-size:0.8rem;" data-v-f84ae3d8>As corretoras levam de 1 a 2 dias (D+1 ou D+2) para reportar as negociações à B3. Compras e vendas feitas hoje aparecerão nas próximas sincronizações.</p></div></div><div class="col-md-6 col-lg-3" data-v-f84ae3d8><div class="h-100 p-3 bg-light border rounded" data-v-f84ae3d8><div class="d-flex align-items-center mb-2" data-v-f84ae3d8><i class="bi bi-shield-check text-primary me-2 fs-5" data-v-f84ae3d8></i><strong class="text-dark" style="font-size:0.9rem;" data-v-f84ae3d8>Saldo Inicial Inteligente</strong></div><p class="mb-0 text-muted" style="font-size:0.8rem;" data-v-f84ae3d8>A B3 fornece dados apenas a partir de Nov/2019. Se você vender um ativo adquirido antes disso, o Kativo criará um saldo inicial automático para a sua custódia não ficar negativa.</p></div></div><div class="col-md-6 col-lg-3" data-v-f84ae3d8><div class="h-100 p-3 bg-light border rounded" data-v-f84ae3d8><div class="d-flex align-items-center mb-2" data-v-f84ae3d8><i class="bi bi-receipt text-primary me-2 fs-5" data-v-f84ae3d8></i><strong class="text-dark" style="font-size:0.9rem;" data-v-f84ae3d8>Taxas e Custos</strong></div><p class="mb-0 text-muted" style="font-size:0.8rem;" data-v-f84ae3d8>A B3 não nos envia taxas de corretagem e emolumentos. Para ter um cálculo de Imposto de Renda e preço médio exatos, edite suas notas e adicione essas pequenas taxas.</p></div></div><div class="col-md-6 col-lg-3" data-v-f84ae3d8><div class="h-100 p-3 bg-light border rounded" data-v-f84ae3d8><div class="d-flex align-items-center mb-2" data-v-f84ae3d8><i class="bi bi-wallet2 text-primary me-2 fs-5" data-v-f84ae3d8></i><strong class="text-dark" style="font-size:0.9rem;" data-v-f84ae3d8>Impacto no Saldo em Caixa</strong></div><p class="mb-0 text-muted" style="font-size:0.8rem;" data-v-f84ae3d8>O caixa acumula os valores de todas as vendas e proventos. Como a B3 não avisa quando você saca dinheiro da corretora para o seu banco, o saldo pode ficar irreal com o tempo. Faça a conferência e o ajuste de saques em <strong data-v-f84ae3d8>Lançamentos > Transações</strong>.</p></div></div></div></div>',1)),e("div",Qe,[s[19]||(s[19]=e("nav",{class:"navbar rounded mb-2"},[e("div",{class:"d-flex align-items-center"},[e("div",{class:"title"},"Carteiras vinculadas")])],-1)),e("div",Xe,[(o(!0),i(te,null,ie(B(b).portfolios,f=>(o(),i("div",{key:f.id,class:"operation-section mb-3 border rounded"},[e("div",Ze,[e("div",es,[e("div",ss,[e("span",{class:w(["operation-indicator me-2",f.b3_sync_enabled?"bg-success":"bg-secondary"])},null,2),e("strong",as,p(f.title),1),f.active==="Yes"?(o(),i("span",ts,"Carteira Atual")):m("",!0)]),e("div",is,[e("div",os,[s[18]||(s[18]=e("small",{class:"text-muted d-block"},"Ãltima atualização",-1)),e("strong",ns,p(N(f.b3_last_updated)),1)]),e("div",ls,[e("input",{class:"form-check-input m-0 cursor-pointer",type:"checkbox",role:"switch",id:"switch-"+f.id,checked:!!f.b3_sync_enabled,onChange:Y=>O(f,Y.target.checked),disabled:c.value},null,40,rs)])])])])]))),128)),B(b).portfolios.length===0&&!d.value?(o(),i("div",cs," Nenhuma carteira encontrada. ")):m("",!0)])])])])])}}},ms=G(ds,[["__scopeId","data-v-f84ae3d8"]]);export{ms 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.