1import{r,e as Z,j as a,Y as F,a1 as aa,a2 as S,aR as ea,aZ as sa,T as ta,aQ as ra,aU as q,a4 as na,df as oa,L as ia,as as la}from"./app-BEDoDvHI.js";import{u as ca}from"./useIsLight-DXoUQrp0.js";import{i,u as U,b as h,B as da,r as ma}from"./kit-JTq-gMAL.js";import{N as j,K as v,C as J,V as W,T as ua,P as C}from"./ui-C99L76fd.js";import"./LazyApexChart-ChAmxuZ6.js";const K=[{v:"",l:"Todas",t:"Todas as assinaturas que existem no Stripe."},{v:"ativa",l:"Ativas",t:"Pagando agora."},{v:"atraso",l:"Em atraso",t:"Cobrança falhou; a régua do Stripe está rodando."},{v:"teste",l:"Em teste",t:"Teste grátis correndo â ainda não faturou."},{v:"cancelada",l:"Canceladas",t:"Chegaram a valer e terminaram. à churn de verdade."},{v:"nunca",l:"Nunca ativaram",t:"Checkout que morreu. Não é cliente perdido: é venda que não aconteceu."},{v:"anual",l:"Anuais",t:"Cobrança anual â a recorrência exibida é o valor ÷ 12."},{v:"saindo",l:"Saindo",t:"Ativas que Jà pediram cancelamento e terminam no fim do ciclo. Churn com data â ainda dá pra reverter."}],pa=[{v:"valor",l:"Maior recorrência"},{v:"recente",l:"Mais recente"},{v:"fim",l:"Terminou por último"},{v:"antiga",l:"Mais antiga"}],ha={active:{l:"Ativa",tom:"ok"},trialing:{l:"Em teste",tom:"ac"},past_due:{l:"Em atraso",tom:"ruim"},canceled:{l:"Cancelada",tom:""},incomplete:{l:"Não fechou",tom:""},incomplete_expired:{l:"Não fechou",tom:""},unpaid:{l:"Não paga",tom:"ruim"}},M=x=>x?new Date(x).toLocaleDateString("pt-BR"):null;function fa(){var $,D,O,I;const x=ca(),[y,P]=r.useState(""),[g,Q]=r.useState(""),[l,V]=r.useState("ativa"),[c,T]=r.useState(""),[d,L]=r.useState(""),[_,Y]=r.useState("valor"),[m,o]=r.useState(1),[s,G]=r.useState(null),[u,R]=r.useState(!0),[z,w]=r.useState(null);r.useEffect(()=>{const e=setTimeout(()=>{Q(y),o(1)},400);return()=>clearTimeout(e)},[y]);const B=r.useMemo(()=>{const e=new URLSearchParams({page:String(m),limit:"25",ordem:_});return g&&e.set("search",g),l&&e.set("segmento",l),c&&e.set("currency",c),d&&e.set("produto",d),e.toString()},[m,_,g,l,c,d]),k=r.useCallback(async()=>{var e,n,N;R(!0),w(null);try{const{data:p}=await Z.get(`/admin/subscriptions?${B}`);G(p)}catch(p){w(((e=p.response)==null?void 0:e.status)===429?"limite":((N=(n=p.response)==null?void 0:n.data)==null?void 0:N.error)||p.message)}finally{R(!1)}},[B]);r.useEffect(()=>{k()},[k]);const H=()=>{P(""),T(""),L(""),o(1)},X=g||c||d,t=(s==null?void 0:s.resumo)||{},A=(s==null?void 0:s.subscriptions)||[],b=(($=s==null?void 0:s.pagination)==null?void 0:$.total)||0,E=((D=s==null?void 0:s.pagination)==null?void 0:D.totalPages)||1,f=((s==null?void 0:s.porProduto)||[]).filter(e=>e.produto!=="(sem nome no Stripe)");return a.jsxs("div",{className:"rpt",children:[a.jsxs("header",{className:"rpt-head",children:[a.jsxs("div",{children:[a.jsxs("h1",{children:[a.jsx(F,{size:20})," Assinaturas"]}),a.jsx("p",{children:"Todas as assinaturas do Stripe â com a recorrência sempre por mês, comparável entre planos."})]}),a.jsxs("div",{className:"rpt-head-acoes",children:[a.jsxs("button",{className:"rpt-btn",onClick:k,disabled:u,children:[a.jsx(aa,{size:12,className:u?"animate-spin":""})," Atualizar"]}),(s==null?void 0:s.sync)&&a.jsxs("span",{className:`rpt-pill ${s.sync.obsoleto?"ruim":"ok"}`,title:`Sincronizado com o Stripe a cada ${s.sync.intervaloMin} min.`,children:["Stripe · ",s.sync.idadeMin===null?"nunca":`${s.sync.idadeMin} min`]})]})]}),((O=s==null?void 0:s.sync)==null?void 0:O.obsoleto)&&a.jsxs(j,{tom:"ruim",titulo:"Esta lista pode estar velha",icone:a.jsx(S,{size:14}),children:["A sincronia com o Stripe ",s.sync.nuncaRodou?a.jsx("b",{children:"nunca rodou"}):a.jsxs(a.Fragment,{children:["foi há ",a.jsxs("b",{children:[s.sync.idadeMin," min"]})]}),". Situação e valores vêm de lá."]}),a.jsxs("div",{className:"rpt-filtros",children:[a.jsx(ea,{size:13,style:{color:"var(--t4)"}}),a.jsx("span",{className:"rpt-filtros-lbl",children:"Situação"}),a.jsx("div",{className:"rpt-seg",children:K.map(e=>a.jsx("button",{title:e.t,className:l===e.v?"on ac":"",onClick:()=>{V(e.v),o(1)},children:e.l},e.v))}),a.jsx("div",{className:"rpt-sep"}),a.jsx("span",{className:"rpt-filtros-lbl",children:"Ordenar"}
1),a.jsx("select",{className:"rpt-sel",value:_,onChange:e=>{Y(e.target.value),o(1)},children:pa.map(e=>a.jsx("option",{value:e.v,children:e.l},e.v))})]}),a.jsxs("div",{className:"rpt-filtros",children:[a.jsxs("div",{style:{position:"relative",flex:"1 1 260px",minWidth:200},children:[a.jsx(sa,{size:13,style:{position:"absolute",left:9,top:"50%",transform:"translateY(-50%)",color:"var(--t4)"}}),a.jsx("input",{className:"rpt-sel",style:{width:"100%",maxWidth:"none",paddingLeft:28},placeholder:"Nome, e-mail ou ID da assinaturaâ¦",value:y,onChange:e=>P(e.target.value)})]}),a.jsxs("select",{className:"rpt-sel",value:c,onChange:e=>{T(e.target.value),o(1)},children:[a.jsx("option",{value:"",children:"Moeda"}),a.jsx("option",{value:"brl",children:"Real (BRL)"}),a.jsx("option",{value:"usd",children:"Dólar (USD)"})]}),a.jsxs("select",{className:"rpt-sel",style:{maxWidth:260},value:d,onChange:e=>{L(e.target.value),o(1)},children:[a.jsx("option",{value:"",children:"Produto"}),f.map(e=>a.jsxs("option",{value:e.produto,children:[e.produto," (",e.n,")"]},e.produto))]}),X&&a.jsxs("button",{className:"rpt-btn",onClick:H,children:[a.jsx(ta,{size:12})," Limpar"]})]}),z==="limite"?a.jsxs(j,{tom:"ruim",titulo:"Muitas consultas em pouco tempo",icone:a.jsx(S,{size:14}),children:["O painel aceita 60 consultas por minuto. Espere alguns segundos e clique em ",a.jsx("b",{children:"Atualizar"}),"."]}):z?a.jsx(j,{tom:"ruim",titulo:"Não foi possÃvel carregar",icone:a.jsx(S,{size:14}),children:a.jsx("code",{children:z})}):null,a.jsxs("div",{className:"rpt-grid rpt-g4",children:[a.jsx(v,{icone:a.jsx(F,{size:15}),label:"Assinaturas na seleção",valor:i(t.assinaturas??b),hint:l?(I=K.find(e=>e.v===l))==null?void 0:I.l.toLowerCase():"tudo que existe no Stripe"}),a.jsx(v,{icone:a.jsx(ra,{size:15}),label:"Recorrência mensal",valor:h(t.mrrBrl),hint:`+ ${U(t.mrrUsd)} · só as ativas contam`}),a.jsx(v,{icone:a.jsx(S,{size:15}),label:"Em atraso",valor:i(t.atraso),tom:Number(t.atraso)>0?"ruim":"",hint:Number(t.atraso)>0?"cobrança falhando â recuperável":"nenhuma cobrança falhando"}),Number(t.saindo)>0?a.jsx(v,{icone:a.jsx(q,{size:15}),label:"Já pediram pra sair",valor:i(t.saindo),tom:"ruim",hint:`${h(t.saindoBrl)}/mês terminando no fim do ciclo`}):a.jsx(v,{icone:a.jsx(na,{size:15}),label:"Cobrança anual",valor:i(t.anuais),hint:"exibidas com o valor ÷ 12, pra comparar com as mensais"})]}),Number(t.saindo)>0&&l!=="saindo"&&a.jsxs(j,{tom:"ruim",titulo:"Churn com data marcada",icone:a.jsx(q,{size:14}),children:[a.jsx("b",{children:i(t.saindo)})," assinaturas ativas já pediram cancelamento e terminam no fim do ciclo â"," ",a.jsxs("b",{children:[h(t.saindoBrl),"/mês"]}),". Ainda estão pagando, então dá pra reverter; depois da data vira cancelamento consumado. Clique em ",a.jsx("b",{children:"Saindo"})," pra ver quem são e quando cada uma sai."]}),Number(t.semRegistroLocal)>0&&a.jsxs(j,{tom:"ruim",titulo:"Existem no Stripe e não no nosso banco",icone:a.jsx(q,{size:14}),children:[a.jsx("b",{children:i(t.semRegistroLocal)})," desta seleção não têm registro local â aparecem aqui porque a lista vem do Stripe, mas ",a.jsx("b",{children:"as ações de cancelar e trocar plano não funcionam nelas"})," (operam pelo id do nosso banco). Era esse buraco que fazia a tela antiga esconder 4.134 assinaturas, incluindo 5 que estavam pagando."]}),f.length>1&&a.jsx(J,{titulo:"Produtos desta seleção",icone:a.jsx(oa,{size:14}),meta:"do recorte inteiro, não da página",sub:"Quantas assinaturas de cada produto o filtro atual selecionou. O nome vem do Stripe â produto sem nome aparece com o ID, que é a verdade da fonte.",children:a.jsx(da,{isLight:x,rotulo:"Assinaturas",dados:f.slice(0,10).map(e=>({nome:(e.produto||"â").slice(0,40),titulo:e.produto,valor:e.n})),tooltipExtra:e=>{const n=f.find(N=>N.produto===e.titulo);return n&&Number(n.mrrBrl)?[{rotulo:"Recorrência ativa",valor:h(n.mrrBrl)}]:[]}})}),a.jsx(J,{titulo:"Assinaturas",icone:a.jsx(F,{size:14}),meta:b?`${i(b)} no recorte · página ${m} de ${E}`:void 0,sub:a.jsxs(a.Fragment,{children:[a.jsx("b",{children:"A recorrência é sempre por mês."})," Plano anual entra dividido por 12 e leva o selo âanualâ â antes o valor do ano aparecia na mesma coluna das mensais, e comparar as duas não significava nada."]}),children:u&&!A.length?a.jsx(W,{titulo:"Carregandoâ¦"}):A.length?a.jsxs(a.Fragment,{children:[a.jsx(ua,{dados:A.map(e=>({...e,__k:e.subscription_id})),cols:[{k:"user_email",l:"Cliente",ord:!1,render:e=>a.jsxs(a.Fragment,{children:[a.jsx("span",{className:"forte",children:e.user_name||"â"}),a.jsx("span",{className:"rpt-path",title:e.user_email,children:e.user_email||"(sem e-mail)"})]})},{k:"produto",l:"Produto",ord:!1,render:e=>a.jsx("span",{title:e.produto,children:String(e.produto||"â").slice(0,30)})},{k:"status",l:"Situação",ord:!1,render:e=>{const n=ha[e.status]||{l:e.status,tom:""};return a.jsxs(a.Fragment,{children:[a.jsx(C,{tom:n.tom,children:n.l}),e.cancellation_reason&&a.jsx(C,{title:e.cancellation_comment||void 0,children:ma(e.cancellation_reason)})]})}},{k:"mrr_cents",l:"Recorrência / mês",num:!0,render:e=>a.jsxs(a.Fragment,{children:[Number(e.mrr_cents)>0?a.jsx("span",{className:"forte",children:String(e.currency).toLowerCase()==="usd"?U(e.mrr_cents):h(e.mrr_cents)}):a.jsx("span",{className:"fraco",children:"â"}),e.intervalo==="year"&&a.jsx(C,{tom:"ac",title:"Cobrança anual â o valor exibido é o do ano divi
1dido por 12",children:"anual"})]})},{k:"created_at",l:"Começou",num:!0,render:e=>a.jsx("span",{style:{whiteSpace:"nowrap",color:"var(--t3)"},children:M(e.created_at)||"â"})},{k:"ended_at",l:"Terminou",num:!0,render:e=>e.ended_at?a.jsx("span",{style:{whiteSpace:"nowrap",color:"var(--t3)"},children:M(e.ended_at)}):Number(e.cancel_at_period_end)===1?a.jsxs(C,{tom:"ruim",title:"Já pediu cancelamento â termina nesta data",children:["sai ",M(e.current_period_end)||"no fim do ciclo"]}):a.jsx("span",{className:"fraco",children:"â"})},{k:"acoes",l:"",ord:!1,render:e=>e.user_id?a.jsxs(ia,{to:`/admin/users/${e.user_id}`,className:"rpt-btn",style:{padding:"4px 9px"},children:[a.jsx(la,{size:11})," Conta"]}):a.jsx("span",{className:"fraco",title:"Cliente do Stripe sem conta na plataforma",children:"sem conta"})}]}),a.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:10,marginTop:12},children:[a.jsxs("span",{style:{fontSize:11.5,color:"var(--t4)"},children:[i(b)," assinatura(s) · 25 por página"]}),a.jsxs("div",{style:{display:"flex",gap:6},children:[a.jsx("button",{className:"rpt-btn",disabled:m<=1||u,onClick:()=>o(e=>Math.max(1,e-1)),children:"Anterior"}),a.jsx("button",{className:"rpt-btn",disabled:m>=E||u,onClick:()=>o(e=>Math.min(E,e+1)),children:"Próxima"})]})]})]}):a.jsx(W,{titulo:"Nenhuma assinatura neste recorte"})})]})}export{fa 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.