1import{Y as na,P as ca,w as la,u as ba,g as P,j as a,ar as xa,as as ja,at as va,au as ga,av as _a,l as da,v as q,A as O,D as U,F as S,G as j,H as $,J as v,K,B as L,am as ka,b1 as ua,z as ma,b as Ca,ao as W,C as Y,aT as aa,T as ea,aV as Na,a4 as ya,a5 as Da,a6 as Ra,aJ as Ma}from"./index--HPZSr6_.js";import{C as D,a as R,d as E,c as M}from"./card-CsZrOj-7.js";import{S as b}from"./StatCard-4gEb7HRj.js";import{P as Ta,a as wa,b as Aa}from"./popover-pwyEPOCM.js";import{C as sa,a as ia,b as Sa,c as La,d as Ea}from"./chart-BnTHNCRB.js";import{P as B}from"./useBackofficePanel-Deg7WoXG.js";import{f as I,p as G}from"./pt-BR-D9D5SaqL.js";import{H as Pa}from"./history-BjW_-Gdj.js";import{B as Ba}from"./ban-7cFwsaZ_.js";import{C as z}from"./circle-check-B0IN5qYf.js";import{U as qa}from"./user-plus-BdlHxPMW.js";import{C as Fa}from"./coins-COOAw7fC.js";import{B as za}from"./BarChart-B4fsQ40W.js";import{C as Ia,X as Ha,Y as Ya,B as ta,p as Va}from"./generateCategoricalChart-DkVqgZ4Y.js";import{P as Oa,a as Ua}from"./PieChart-D5s4BGGE.js";import{I as $a}from"./info-Cpr0pCD6.js";import{C as Ga}from"./calendar-CvanVCF4.js";import"./index-DcUe6_Gn.js";import"./value-3LWPH8SZ.js";/** 2 * @license lucide-react v0.462.0 - ISC 3 * 4 * This source code is licensed under the ISC license. 5 * See the LICENSE file in the root directory of this source tree. 6 */const oa=na("Ticket",[["path",{d:"M2 9a3 3 0 0 1 0 6v2a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-2a3 3 0 0 1 0-6V7a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2Z",key:"qn84l0"}],["path",{d:"M13 5v2",key:"dyzc3o"}],["path",{d:"M13 17v2",key:"1ont0d"}],["path",{d:"M13 11v2",key:"1wjjxi"}]]);/** 7 * @license lucide-react v0.462.0 - ISC 8 * 9 * This source code is licensed under the ISC license. 10 * See the LICENSE file in the root directory of this source tree. 11 */const Ka=na("UserRoundPlus",[["path",{d:"M2 21a8 8 0 0 1 13.292-6",key:"bjp14o"}],["circle",{cx:"10",cy:"8",r:"5",key:"o932ke"}],["path",{d:"M19 16v6",key:"tddt3s"}],["path",{d:"M22 19h-6",key:"vcuq98"}]]);function f(s){return s.toLocaleString("pt-BR",{style:"currency",currency:"BRL",minimumFractionDigits:2,maximumFractionDigits:2})}function Qa(s){return ca({queryKey:["backoffice","financial-dashboard",s],queryFn:async()=>{const i=await la.get("/backoffice/financial-dashboard",{body:s?{reference_month:s}:void 0});if(!i.success)throw new Error(i.message||"Erro ao carregar dashboard financeiro");return i.data},select:i=>{var p,h,n,x,l,k,_,e,o,c,r,w,d,A,g,N,u,m,y;return{...i,formatted:{mrr:f(((p=i.big_numbers)==null?void 0:p.mrr_operational)??0),contractualMrr:f(((h=i.big_numbers)==null?void 0:h.mrr_normalized)??0),arrAmount:f(((n=i.big_numbers)==null?void 0:n.arr_operational)??0),arrContractual:f(((x=i.big_numbers)==null?void 0:x.arr_normalized)??0),grossRevenue:f(((l=i.big_numbers)==null?void 0:l.gross_recurring_revenue)??0),averageTicket:f(((k=i.big_numbers)==null?void 0:k.average_ticket_operational)??0),arpa:f(((_=i.big_numbers)==null?void 0:_.arpa_operational)??0),mrrAtRisk:f(((e=i.big_numbers)==null?void 0:e.mrr_at_risk)??0),projectedMrr:f(((o=i.mrr_projection)==null?void 0:o.projected_mrr)??((c=i.big_numbers)==null?void 0:c.mrr_normalized)??0),paidMrr:f(((r=i.mrr_projection)==null?void 0:r.paid_mrr)??0),futureMrr:f(((w=i.mrr_projection)==null?void 0:w.future_mrr)??0),atRiskMrrProjection:f(((d=i.mrr_projection)==null?void 0:d.at_risk_mrr)??0),vouchersTotal:f(((g=(A=i.big_numbers)==null?void 0:A.vouchers)==null?void 0:g.total_amount)??0),paidAmount:f(i.payment_status.summary.paid.amount),overdueAmount:f(i.payment_status.summary.overdue.amount),pendingAmount:f(i.payment_status.summary.pending.amount),newSubscriptionsMrr:f(((N=i.historical_snapshot)==null?void 0:N.new_subscriptions_mrr)??0),cancelledSubscriptionsMrr:f(((u=i.historical_snapshot)==null?void 0:u.cancelled_subscriptions_mrr)??0),mrrAtMonthEnd:f(((m=i.historical_snapshot)==null?void 0:m.mrr_at_month_end)??0),standaloneCreditsRevenue:f(((y=i.standalone_credits_purchases)==null?void 0:y.total_revenue)??0)}}}})}const pa=20;function Xa(s,i,p){return ca({queryKey:["backoffice","financial-dashboard","drill-down",s,i,p],queryFn:async()=>{const h=await la.get("/backoffice/financial-dashboard/drill-down",{body:{metric:s,page:i,per_page:pa,...p?{reference_month:p}:{}}});if(!h.success)throw new Error(h.message||"Erro ao carregar detalhamento do card");return h.data},enabled:s!==null,staleTime:3e4})}const Ja={active:"bg-emerald-500/10 text-emerald-600",registered:"bg-sky-500/10 text-sky-600",new:"bg-amber-500/10 text-amber-600",
11suspense:"bg-orange-500/10 text-orange-600",blocked:"bg-violet-500/10 text-violet-600",cancelled:"bg-rose-500/10 text-rose-600"},Za={operational:"bg-emerald-500/10 text-emerald-600",at_risk:"bg-rose-500/10 text-rose-600"},Wa={operational:"Em dia",at_risk:"Em risco"},ae={active_customers:{title:"Clientes ativos",description:"Clientes com status ativo na plataforma (excluindo canceladas ou inativas).",level:"customer",amountLabel:"MRR do cliente"},registered_customers:{title:"Cadastrados sem pagamento",description:"Clientes que concluÃram o cadastro mas ainda não confirmaram nenhum pagamento.",level:"customer",amountLabel:"MRR do cliente"},paying_customers:{title:"Clientes pagantes",description:"Clientes com ao menos uma assinatura ativa, sem voucher e em dia (payment_status = 'operational').",level:"customer",amountLabel:"MRR do cliente"},active_subscriptions:{title:"Assinaturas ativas",description:"Todas as assinaturas ativas sem voucher, independente de estarem em dia ou vencidas.",level:"subscription",amountLabel:"MRR da assinatura"},operational_subscriptions:{title:"Assinaturas em dia",description:"Assinaturas ativas sem voucher e em dia (payment_status = 'operational').",level:"subscription",amountLabel:"MRR da assinatura"},mrr_at_risk:{title:"MRR em risco",description:"Assinaturas ativas sem voucher que já venceram sem pagamento reconciliado â receita contratual em risco.",level:"subscription",amountLabel:"MRR em risco"},customers_with_paid_subscription:{title:"Clientes ativos com plano pago",description:"Clientes ativos que possuem ao menos uma assinatura ativa sem voucher.",level:"customer",amountLabel:"MRR do cliente"},customers_voucher_only:{title:"Clientes ativos só com voucher",description:"Clientes ativos cuja única assinatura ativa é voucher/cortesia.",level:"customer",amountLabel:"MRR do cliente"},customers_without_subscription:{title:"Clientes ativos sem assinatura",description:"Contas ativas sem assinatura vinculada â geralmente internas, parceiros ou cadastro incompleto.",level:"customer",amountLabel:"MRR do cliente"},voucher_subscriptions:{title:"Assinaturas via voucher",description:"Assinaturas ativas concedidas via voucher/cortesia. Ficam fora do MRR e ARR.",level:"subscription",amountLabel:"Valor do voucher"},standalone_credits_purchases:{title:"Créditos avulsos comprados",description:"Compras extras de créditos (Pix ou cartão) pagas no mês de referência, fora do pacote da assinatura.",level:"credit_purchase",amountLabel:"Valor pago",creditsLabel:"Créditos"}};function ee(s){return s.toLocaleString("pt-BR",{style:"currency",currency:"BRL",minimumFractionDigits:2,maximumFractionDigits:2})}function ra(s){if(!s)return"â";try{return I(new Date(s),"dd/MM/yyyy",{locale:G})}catch{return"â"}}function se(s,i,p){var h,n,x,l;if(i==="credit_purchase")return Number(((h=s.credit_purchase)==null?void 0:h.revenue)??0);if(i==="subscription"){const k=Number(((n=s.subscription)==null?void 0:n.amount)??0),_=Number(((x=s.subscription)==null?void 0:x.mrr_amount)??0);return p==="voucher_subscriptions"||((l=s.subscription)==null?void 0:l.payment_method_id)==="voucher"?k:_}return Number(s.financial_summary.mrr_amount??0)}function ie(s,i){var p;return i==="subscription"?((p=s.subscription)==null?void 0:p.payment_status)??null:s.financial_summary.payment_status}function te({metric:s,referenceMonth:i,onClose:p}){const h=ba(),[n,x]=P.useState(1),{data:l,isLoading:k,isFetching:_,error:e}=Xa(s,n,i);P.useEffect(()=>{x(1)},[s]);const o=s?ae[s]:null,c=l?Math.max(1,Math.ceil(l.total/pa)):1;return a.jsx(xa,{open:s!==null,onOpenChange:r=>{r||p()},children:a.jsxs(ja,{side:"right",className:"w-full overflow-y-auto sm:max-w-2xl",children:[a.jsxs(va,{children:[a.jsx(ga,{children:(o==null?void 0:o.title)??""}),a.jsx(_a,{children:(o==null?void 0:o.description)??""})]}),a.jsx("div",{className:"mt-4 space-y-4",children:k?a.jsx("div",{className:"flex min-h-[30vh] items-center justify-center",children:a.jsx(da,{className:"h-8 w-8 animate-spin text-muted-foreground"})}):e||!l||!o?a.jsx("p",{className:"text-destructive",children:e instanceof Error?e.message:"Erro ao carregar detalhamento"}):a.jsxs(a.Fragment,{children:[a.jsxs("p",{className:"text-sm text-muted-foreground",children:[l.total.toLocaleStr
11ing("pt-BR")," ",o.level==="subscription"?"assinatura(s)":o.level==="credit_purchase"?"compra(s)":"cliente(s)"," ","no total."]}),l.items.length===0?a.jsx("p",{className:"py-8 text-center text-sm text-muted-foreground",children:"Nenhum registro encontrado."}):a.jsx("div",{className:q("rounded-md border",_&&"opacity-60"),children:a.jsxs(O,{children:[a.jsx(U,{children:a.jsxs(S,{children:[a.jsx(j,{children:"Cliente"}),a.jsx(j,{children:"Situação"}),o.level==="credit_purchase"&&o.creditsLabel?a.jsx(j,{className:"text-right",children:o.creditsLabel}):null,a.jsx(j,{className:"text-right",children:o.amountLabel}),o.level==="subscription"&&a.jsx(j,{children:"Vencimento"}),o.level==="credit_purchase"&&a.jsx(j,{children:"Data"}),a.jsx(j,{className:"w-[40px]"})]})}),a.jsx($,{children:l.items.map((r,w)=>{var A,g,N,u,m;const d=ie(r,o.level);return a.jsxs(S,{className:"cursor-pointer hover:bg-muted/50",onClick:()=>r.customer_id&&h(`/backoffice/customers/${r.customer_id}`),children:[a.jsxs(v,{children:[a.jsx("div",{className:"font-medium",children:r.customer_name??"â"}),a.jsx("div",{className:"text-xs text-muted-foreground",children:r.customer_email??"â"})]}),a.jsx(v,{children:a.jsxs("div",{className:"flex flex-col gap-1",children:[a.jsx(K,{variant:"outline",className:q("w-fit border-transparent font-normal",r.status.id?Ja[r.status.id]:void 0),children:r.status.name??"â"}),d&&a.jsx(K,{variant:"outline",className:q("w-fit border-transparent font-normal",Za[d]),children:Wa[d]??d})]})}),o.level==="credit_purchase"&&o.creditsLabel?a.jsx(v,{className:"text-right font-medium",children:Number(((A=r.credit_purchase)==null?void 0:A.credits_amount)??0).toLocaleString("pt-BR")}):null,a.jsx(v,{className:"text-right font-medium",children:ee(se(r,o.level,s))}),o.level==="subscription"&&a.jsx(v,{className:"whitespace-nowrap text-sm text-muted-foreground",children:ra(((g=r.subscription)==null?void 0:g.expire_at)??null)}),o.level==="credit_purchase"&&a.jsx(v,{className:"whitespace-nowrap text-sm text-muted-foreground",children:ra(((N=r.credit_purchase)==null?void 0:N.purchased_at)??null)}),a.jsx(v,{children:a.jsx(L,{variant:"ghost",size:"icon",className:"h-8 w-8",onClick:y=>{y.stopPropagation(),r.customer_id&&h(`/backoffice/customers/${r.customer_id}`)},children:a.jsx(ka,{className:"h-3.5 w-3.5"})})})]},`${r.customer_id??"unknown"}-${((u=r.subscription)==null?void 0:u.id)??((m=r.credit_purchase)==null?void 0:m.id)??w}`)})})]})}),c>1&&a.jsxs("div",{className:"flex items-center justify-between pt-2",children:[a.jsxs(L,{variant:"outline",size:"sm",disabled:n<=1||_,onClick:()=>x(r=>Math.max(1,r-1)),children:[a.jsx(ua,{className:"mr-1 h-4 w-4"}),"Anterior"]}),a.jsxs("span",{className:"text-xs text-muted-foreground",children:["Página ",n," de ",c]}),a.jsxs(L,{variant:"outline",size:"sm",disabled:n>=c||_,onClick:()=>x(r=>Math.min(c,r+1)),children:["Próxima",a.jsx(ma,{className:"ml-1 h-4 w-4"})]})]})]})})]})})}function V(s){return s.toLocaleString("pt-BR",{style:"currency",currency:"BRL",minimumFractionDigits:2,maximumFractionDigits:2})}function C(s){const i=Number(s);return Number.isFinite(i)?i.toLocaleString("pt-BR"):"0"}function oe(s,i,p,h){const n=s(i,{defaultValue:p,...h});return typeof n=="string"?n:p}function T({title:s,infoTooltip:i}){return a.jsxs("div",{className:"flex items-center gap-1.5",children:[a.jsx("span",{className:"text-base font-semibold leading-none tracking-tight",children:s}),i?a.jsxs(ya,{children:[a.jsx(Da,{asChild:!0,children:a.jsx($a,{className:"h-3.5 w-3.5 text-muted-foreground/60 hover:text-muted-foreground cursor-help transition-colors"})}),a.jsx(Ra,{side:"top",className:"max-w-[280px]",children:a.jsx("p",{className:"text-xs",children:i})})]}):null]})}const re=["jan","fev","mar","abr","mai","jun","jul","ago","set","out","nov","dez"];function ne({value:s,onChange:i}){const[p,h]=P.useState(!1),[n,x]=P.useState(()=>(s==null?void 0:s.getFullYear())??new Date().getFullYear());return a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsxs(Ta,{open:p,onOpenChange:l=>{h(l),l&&x((s==null?void 0:s.getFullYear())??new Date().getFullYear())},children:[a.jsx(wa,{asChild:!0,children:a.jsxs(L,{variant:"outline",className:q("w-full justify-start text-left font-normal sm:w-[220px]",!s&&"text-muted-foreground"),children:[a.jsx(Ga,{className:"mr-2 h-4 w-4"}),s?I(s,"MMMM yyyy",{locale:G}):"Situação atual (agora)"]})}),a.jsxs(Aa,{className:"w-[240px] p-3",align:"end",children:[a.jsxs("div",{className:"mb-2 flex items-center justify-between",children:[a.jsx(L,{variant:"ghost",size:"icon",className:"h-7 w-7",onClick:()=>x(l=>l-1),children:a.jsx(ua,{className:"h-4 w-4"})}),a.jsx("span",{className:"text-sm font-medium",children:n}),a.jsx(L,{variant:"ghost",size:"icon",className:"h-7 w-7",onClick:()=>x(l=>l+1),children:a.jsx(ma,{className:"h-4 w-4"})})]}),a.jsx("div",{className:"grid grid-cols-3 gap-1.5",children:re.map((l,k)=>{const _=s&&s.getFullYear()===n&&s.getMonth()===k;return a.jsx(L,{variant:_?"default":"ghost",size:"sm",className:"capitalize",onClick:()=>{i(new Date(n,k,1)),h(!1)},children:l},l)})})]})]}),s?a.jsx(L,{variant:"ghost",size:"icon",onClick:()=>i(void 0),children:a.jsx(Ma,{className:"h-4 w-4"})}):null]})}function Me(){var Z;const{t:s}=Ca(),[i,p]=P.useState(void 0),[h,n]=P.useState(null),x=P.useMemo(()=>i?I(i,"yyyy-MM"):void 0,[i]),{data:l,isLoading:k,error:_}=Qa(x),e=(t,F,ha)=>oe(s,t,F,ha);if(k)return a.jsx("div",{className:"flex min-h-[40vh] items-center justify-center",children:a.jsx(da,{className:"h-8 w-8 animate-spin text-muted-foreground"})});if(_||!l)return a.jsxs("div",{className:"space-y-6",children:[a.jsx("div",{children:a.jsx("h1",{className:"text-3xl font-bold tracking-tight",children:e("backoffice.financialDashboard.title","Painel")})}),a.jsx("p",{className:"text-destructive",children:_ instanceof Error?_.message:e("common.errorLoading","Erro ao carregar dados")})]});const{big_numbers:o,historical_snapshot:c,customers:r,customers_subscription:w,payment_status:d,mrr_projection:A,standalone_credits_purchases:g,meta:N,formatted:u}=l,m=N.mode==="historical",y=o==null?void 0:o.customer_breakdown,Q=w.active_subscriptions_by_plan.items.filter(t=>t.count>0).map((t,F)=>({name:String(t.plan_name||t.plan_id||"Sem plano"),value:Number(t.mrr_normalized||t.amount_total)||0,color:[B.amber,B.emerald,B.sky,B.violet][F%4]})),X=Q.reduce((t,F)=>t+F.value,0),H=Q.map(t=>({...t,percent:X>0?t.value/X*100:0})),J=w.chart_mrr_per_month.filter(t=>t.new_subscriptions>0||t.cancelled_subscriptions>0),fa={new_amount:{label:e("backoffice.financialDashboard.mrrChart
11NewSeries","Novas assinaturas"),color:B.emerald},cancelled_amount:{label:e("backoffice.financialDashboard.mrrChartCancelledSeries","Canceladas"),color:B.rose}};return a.jsxs("div",{className:"flex flex-col gap-6",children:[a.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-4",children:[a.jsxs("div",{children:[a.jsx("h1",{className:"text-3xl font-bold tracking-tight",children:e("backoffice.financialDashboard.title","Painel")}),a.jsx("p",{className:"text-muted-foreground",children:e("backoffice.financialDashboard.subtitle","Visão financeira de assinaturas e receita recorrente")})]}),a.jsx(ne,{value:i,onChange:p})]}),a.jsx("p",{className:"-mt-4 flex items-center gap-1.5 text-xs text-muted-foreground",children:m?a.jsxs(a.Fragment,{children:[a.jsx(Pa,{className:"h-3.5 w-3.5"}),e("backoffice.financialDashboard.historicalModeHint","Mostrando o que aconteceu em {{month}} (fato consumado). Cards de previsão somem neste modo.",{month:d.reference_month})]}):e("backoffice.financialDashboard.dateFilterHint","Sem filtro, os cards mostram a situação atual. Selecione um mês para ver o histórico daquele perÃodo.")}),m?a.jsxs("div",{className:"grid gap-4 md:grid-cols-2 lg:grid-cols-3",children:[a.jsx(b,{title:e("backoffice.financialDashboard.newCustomers","Novos clientes"),value:C(c==null?void 0:c.new_customers_count),icon:Ka,subtitle:d.reference_month,infoTooltip:e("backoffice.financialDashboard.newCustomersTooltip","Clientes cadastrados dentro do mês selecionado, independente de status atual.")}),a.jsx(b,{title:e("backoffice.financialDashboard.activeCustomersAtMonthEnd","Clientes ativos até o fim do mês"),value:C(c==null?void 0:c.active_customers_at_month_end),icon:W,infoTooltip:e("backoffice.financialDashboard.activeCustomersAtMonthEndTooltip","Reconstrução aproximada: clientes que já haviam ativado a conta até o fim do mês e ainda não tinham cancelado nessa data. Usa active_at/cancelled_at com fallback quando o dado histórico não foi preenchido.")}),a.jsx(b,{title:e("backoffice.financialDashboard.newSubscriptions","Novas assinaturas"),value:C(c==null?void 0:c.new_subscriptions_count),icon:Y,subtitle:u.newSubscriptionsMrr,infoTooltip:e("backoffice.financialDashboard.newSubscriptionsTooltip","Assinaturas (sem voucher) criadas dentro do mês selecionado e o MRR normalizado que elas adicionaram.")}),a.jsx(b,{title:e("backoffice.financialDashboard.cancelledSubscriptions","Assinaturas canceladas no mês"),value:C(c==null?void 0:c.cancelled_subscriptions_count),icon:Ba,subtitle:u.cancelledSubscriptionsMrr,infoTooltip:e("backoffice.financialDashboard.cancelledSubscriptionsTooltip","Assinaturas (sem voucher) canceladas dentro do mês selecionado e o MRR normalizado perdido. Usa cancelled_at, com fallback para updated_at quando o campo não foi preenchido.")}),a.jsx(b,{title:e("backoffice.financialDashboard.activeSubscriptionsAtMonthEnd","Assinaturas não canceladas até o fim do mês"),value:C(c==null?void 0:c.active_subscriptions_at_month_end),icon:z,infoTooltip:e("backoffice.financialDashboard.activeSubscriptionsAtMonthEndTooltip","Assinaturas (sem voucher) criadas até o fim do mês e ainda não canceladas nessa data. Inclui ativas, suspensas e pendentes, pois não guardamos o status histórico exato â apenas quando foi cancelada.")}),a.jsx(b,{title:e("backoffice.financialDashboard.mrrAtMonthEnd","MRR até o fim do mês"),value:u.mrrAtMonthEnd,icon:aa,infoTooltip:e("backoffice.financialDashboard.mrrAtMonthEndTooltip","Receita recorrente mensal normalizada das assinaturas não canceladas até o fim do mês selecionado (aproximação histórica, mesma base do card anterior).")})]}):a.jsx(a.Fragment,{children:a.jsxs("div",{className:"grid gap-4 md:grid-cols-2 lg:grid-cols-4",children:[a.jsx(b,{title:e("backoffice.financialDashboard.activeCustomers","Clientes ativos"),value:C(o.active_customers),icon:W,subtitle:y?e("backoffice.financialDashboard.activeCustomersBreakdown","{{paid}} com plano pago · {{voucher}} só voucher · {{none}} sem assinatura",{paid:y.with_paid_subscription,voucher:y.voucher_only,none:y.without_subscription}):void 0,infoTooltip:e("backoffice.financialDashboard.activeCustomersTooltip","Contas com status ativo. Pode ter plano pago, voucher ou nenhuma assinatura â por isso este número pode ser maior que assinaturas ativas."),onClick:()=>n("active_customers")}),a.jsx(b,{title:e("backoffice.financialDashboard.allActiveSubscriptions","Assinaturas ativas"),value:C(o.active_subscriptions),icon:Y,subtitle:e("backoffice.financialDashboard.allActiveSubscriptionsSubtitle","{{operational}} em dia · {{risk}} em atraso",{operational:o.operational_subscriptions,risk:Math.max(0,o.active_subscriptions-o.operational_subscriptions)}),infoTooltip:e("backoffice.financialDashboard.allActiveSubscriptionsTooltip","Planos com status ativo, sem voucher. Inclui quem está em dia e quem já venceu."),onClick:()=>n("active_subscriptions")}),a.jsx(b,{title:e("backoffice.financialDashboard.payingCustomers","Clientes pagantes"),value:C(o.paying_customers),icon:z,infoTooltip:e("backoffice.financialDashboard.payingCustomersTooltip","Cliente com pelo menos uma assinatura ativa sem voucher e em dia."),onClick:()=>n("paying_customers")}),a.jsx(b,{title:e("backoffice.financialDashboard.registeredCustomers","Cadastrados sem pagamento"),value:C(o.registered_customers),icon:qa,infoTooltip:e("backoffice.financialDashboard.registeredCustomersTooltip","Cadastro concluÃdo, mas ainda sem pagamento confirmado. Não entram no MRR."),onClick:()=>n("registered_customers")}),a.jsx(b,{title:e("backoffice.financialDashboard.projectedMrr","MRR da carteira"),value:u.projectedMrr,icon:aa,subtitle:e("backoffice.financialDashboard.projectedMrrSubtitle","Base contratual ativa"),infoTooltip:e("backoffice.financialDashboard.projectedMrrTooltip","Receita mensal de todas as assinaturas ativas sem voucher (em dia + em risco). Não garante que o dinheiro já entrou.")}),a.jsx(b,{title:e("backoffice.financialDashboard.mrrOperationalCard","MRR em dia"),value:u.mrr,icon:z,subtitle:e("backoffice.financialDashboard.mrrOperationalSubtitle","{{count}} assinaturas vigentes",{count:o.operational_subscriptions}),infoTooltip:e("backoffice.financialDashboard.mrrOperationalTooltip","Receita mensal só das assinaturas ativas que ainda não venceram."),onClick:()=>n("operational_subscriptions")}),a.jsx(b,{title:e("backoffice.financialDashboard.mrrAtRiskCard","MRR em risco"),value:V(o.mrr_at_risk),icon:ea,subtitle:e("backoffice.financialDashboard.mrrAtRiskCardSubtitle","{{rate}}% da carteira",{rate:o.mrr_at_risk_rate}),infoTooltip:e("backoffice.financialDashboard.mrrAtRiskCardTooltip","Receita mensal de assinaturas ativas já vencidas e sem pagamento em dia."),onClick:()=>n("mrr_at_risk")}),a.jsx(b,{title:e("backoffice.financialDashboard.paidMrr","MRR já pago"),value:u.paidMrr,icon:z,subtitle:e("backoffice.financialDashboard.paidMrrSubtitle","{{count}} assinaturas reconciliadas",{count:A.paid_count}),infoTooltip:e("backoffice.financialDashboard.paidMrrTooltip","Valor mensal das assinaturas com pagamento reconciliado neste mês. Não é o caixa bruto (veja âPagos no mêsâ).")}),a.jsx(b,{title:e("backoffice.financialDashboard.futureMrr","MRR a vencer"),value:u.futureMrr,icon:Y,subtitle:e("backoffice.financialDashboard.futureMrrSubt
11itle","{{count}} assinaturas",{count:A.future_count}),infoTooltip:e("backoffice.financialDashboard.futureMrrTooltip","Assinaturas ativas em dia que ainda não pagaram neste mês. Não é receita garantida.")}),a.jsx(b,{title:e("backoffice.financialDashboard.arr","ARR"),value:u.arrAmount,icon:Na,subtitle:e("backoffice.financialDashboard.arrSubtitle","Carteira contratual: {{amount}}",{amount:u.arrContractual}),infoTooltip:e("backoffice.financialDashboard.arrTooltip","Projeção anual da carteira em dia (MRR em dia à 12). O valor contratual no subtÃtulo inclui também o que está em risco.")}),a.jsx(b,{title:e("backoffice.financialDashboard.arpa","Receita por cliente"),value:u.arpa,icon:Y,infoTooltip:e("backoffice.financialDashboard.arpaTooltip","MRR em dia dividido pelos clientes pagantes.")}),a.jsx(b,{title:e("backoffice.financialDashboard.vouchersGiven","Vouchers concedidos"),value:u.vouchersTotal,icon:oa,subtitle:e("backoffice.financialDashboard.vouchersGivenHint","{{count}} assinaturas ativas via voucher",{count:Number(((Z=o.vouchers)==null?void 0:Z.active_count)??0)||0}),infoTooltip:e("backoffice.financialDashboard.vouchersGivenTooltip","Cortesia/benefÃcio ativo. Entra na base, mas não conta como receita recorrente (fica fora do MRR e ARR)."),onClick:()=>n("voucher_subscriptions")})]})}),a.jsx(te,{metric:h,referenceMonth:x,onClose:()=>n(null)}),a.jsxs("div",{className:q("grid gap-4",m?"lg:grid-cols-3":"lg:grid-cols-4"),children:[a.jsxs(D,{children:[a.jsxs(R,{className:"pb-2",children:[a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(z,{className:"h-4 w-4 text-emerald-500"}),a.jsx(T,{title:e("backoffice.financialDashboard.paid","Pagos no mês"),infoTooltip:e(m?"backoffice.financialDashboard.paidHistoricalTooltip":"backoffice.financialDashboard.paidTooltip",m?"Dinheiro registrado no ledger naquele mês, mesmo que a assinatura tenha sido cancelada depois.":"Caixa registrado no mês (valor pago de verdade). Diferente do âMRR já pagoâ, que usa o valor mensal do plano. Este bloco é a cobrança do mês â não é o estoque de assinaturas ativas.")})]}),a.jsxs(E,{children:[d.reference_month,m&&c?` · ${d.summary.paid.count} de ${c.active_subscriptions_at_month_end} assinaturas abertas no mês`:""]})]}),a.jsxs(M,{children:[a.jsx("p",{className:"text-2xl font-bold",children:u.paidAmount}),a.jsxs("p",{className:"text-sm text-muted-foreground",children:[d.summary.paid.count," pagamentos registrados"]})]})]}),a.jsxs(D,{className:"cursor-pointer transition-colors hover:border-primary/40 hover:bg-muted/40",role:"button",tabIndex:0,onClick:()=>n("standalone_credits_purchases"),onKeyDown:t=>{(t.key==="Enter"||t.key===" ")&&(t.preventDefault(),n("standalone_credits_purchases"))},children:[a.jsxs(R,{className:"pb-2",children:[a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(Fa,{className:"h-4 w-4 text-sky-500"}),a.jsx(T,{title:e("backoffice.financialDashboard.standaloneCreditsPurchased","Créditos avulsos comprados"),infoTooltip:e("backoffice.financialDashboard.standaloneCreditsPurchasedTooltip","Créditos extras comprados pelo cliente (Pix ou cartão), fora do pacote da assinatura. Conta apenas compras pagas no mês de referência.")})]}),a.jsx(E,{children:(g==null?void 0:g.reference_month)??d.reference_month})]}),a.jsxs(M,{children:[a.jsx("p",{className:"text-2xl font-bold",children:C((g==null?void 0:g.total_credits)??0)}),a.jsx("p",{className:"text-sm text-muted-foreground",children:e("backoffice.financialDashboard.standaloneCreditsPurchasedHint","{{count}} compras · {{revenue}} recebidos",{count:Number((g==null?void 0:g.purchase_count)??0)||0,revenue:u.standaloneCreditsRevenue})})]})]}),!m&&a.jsxs(D,{children:[a.jsxs(R,{className:"pb-2",children:[a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(ea,{className:"h-4 w-4 text-rose-500"}),a.jsx(T,{title:e("backoffice.financialDashboard.overdue","Em atraso neste mês"),infoTooltip:e("backoffice.financialDashboard.overdueTooltip","Assinaturas vencidas sem pagamento reconciliado no mês. à risco de cobrança, não caixa.")})]}),a.jsx(E,{children:d.reference_month})]}),a.jsxs(M,{children:[a.jsx("p",{className:"text-2xl font-bold",children:u.overdueAmount}),a.jsxs("p",{className:"text-sm text-muted-foreground",children:[d.summary.overdue.count," assinaturas"]})]})]}),a.jsxs(D,{children:[a.jsxs(R,{className:"pb-2",children:[a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(oa,{className:"h-4 w-4 text-amber-500"}),a.jsx(T,{title:e(m?"backoffice.financialDashboard.noPaymentInMonth":"backoffice.financialDashboard.pending",m?"Sem pagamento no mês":"Ainda pendentes n
11o mês"),infoTooltip:e(m?"backoffice.financialDashboard.noPaymentInMonthTooltip":"backoffice.financialDashboard.pendingTooltip",m?"Assinaturas abertas naquele mês sem pagamento registrado no perÃodo.":"Assinaturas que ainda não pagaram neste mês e não estão classificadas como atraso.")})]}),a.jsxs(E,{children:[d.reference_month,m&&c?` · ${d.summary.pending.count} de ${c.active_subscriptions_at_month_end} assinaturas abertas no mês`:""]})]}),a.jsxs(M,{children:[a.jsx("p",{className:"text-2xl font-bold",children:u.pendingAmount}),a.jsxs("p",{className:"text-sm text-muted-foreground",children:[d.summary.pending.count," assinaturas"]})]})]})]}),a.jsxs("div",{className:q("grid gap-4",m?"lg:grid-cols-1":"lg:grid-cols-2"),children:[a.jsxs(D,{children:[a.jsxs(R,{children:[a.jsx(T,{title:e("backoffice.financialDashboard.mrrChart","Movimentação de MRR"),infoTooltip:e("backoffice.financialDashboard.mrrChartTooltip","MRR normalizado adicionado por novas assinaturas versus MRR normalizado perdido por cancelamentos, respeitando a periodicidade de cada plano.")}),a.jsxs(E,{children:[e("backoffice.financialDashboard.mrrChartDescription","Novas assinaturas vs canceladas")," · ",I(new Date(N.date_interval.start),"dd/MM/yyyy",{locale:G})," â ",I(new Date(N.date_interval.end),"dd/MM/yyyy",{locale:G})]})]}),a.jsx(M,{children:J.length===0?a.jsx("p",{className:"text-sm text-muted-foreground",children:"Sem dados no perÃodo."}):a.jsx(sa,{config:fa,className:"h-[280px] w-full",children:a.jsxs(za,{data:J,children:[a.jsx(Ia,{strokeDasharray:"3 3"}),a.jsx(Ha,{dataKey:"month"}),a.jsx(Ya,{}),a.jsx(ia,{content:a.jsx(Sa,{})}),a.jsx(La,{content:a.jsx(Ea,{})}),a.jsx(ta,{dataKey:"new_amount",fill:"var(--color-new_amount)",radius:4}),a.jsx(ta,{dataKey:"cancelled_amount",fill:"var(--color-cancelled_amount)",radius:4})]})})})]}),!m&&a.jsxs(D,{children:[a.jsxs(R,{children:[a.jsx(T,{title:e("backoffice.financialDashboard.byPlan","MRR por plano"),infoTooltip:e("backoffice.financialDashboard.byPlanTooltip","Distribuição do MRR normalizado entre os planos de assinatura ativos. Mostra quais planos concentram mais receita recorrente.")}),a.jsx(E,{children:e("backoffice.financialDashboard.byPlanDescription","Assinaturas ativas excluindo voucher")})]}),a.jsx(M,{children:H.length===0?a.jsx("p",{className:"text-sm text-muted-foreground",children:"Sem planos com assinaturas ativas."}):a.jsxs("div",{className:"flex flex-col items-center gap-4",children:[a.jsx(sa,{config:{},className:"h-[240px] w-full max-w-[240px]",children:a.jsxs(Oa,{children:[a.jsx(Ua,{data:H,dataKey:"value",nameKey:"name",cx:"50%",cy:"50%",innerRadius:45,outerRadius:90,children:H.map(t=>a.jsx(Va,{fill:t.color},t.name))}),a.jsx(ia,{formatter:t=>V(t)})]})}),a.jsx("ul",{className:"w-full space-y-1.5",children:H.map(t=>a.jsxs("li",{className:"flex items-center justify-between gap-2 text-sm",children:[a.jsxs("span",{className:"flex items-center gap-2 min-w-0",children:[a.jsx("span",{className:"h-2.5 w-2.5 shrink-0 rounded-full",style:{backgroundColor:t.color}}),a.jsx("span",{className:"truncate",children:t.name})]}),a.jsxs("span",{className:"shrink-0 text-muted-foreground tabular-nums",children:[t.percent.toFixed(0),"%"]})]},t.name))})]})})]})]}),!m&&a.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[a.jsxs(D,{children:[a.jsxs(R,{children:[a.jsx(T,{title:e("backoffice.financialDashboard.customersByStatus","Clientes por situação"),infoTooltip:e("backoffice.financialDashboard.customersByStatusTooltip","Quantidade de clientes agrupados por situação (ativo, pendente, cancelado, etc.). Reflete o ciclo de vida da base de contas.")}),a.jsx(E,{children:e("backoffice.financialDashboard.customersByStatusDescription","{{count}} clientes reais na base",{count:Number(r.total)||0})})]}),a.jsx(M,{children:a.jsxs(O,{children:[a.jsx(U,{children:a.jsxs(S,{children:[a.jsx(j,{children:"Situação"}),a.jsx(j,{className:"text-right",children:"Quantidade"})]})}),a.jsx($,{children:r.by_status.filter(t=>t.count>0).map(t=>a.jsxs(S,{children:[a.jsx(v,{children:t.name}),a.jsx(v,{className:"text-right",children:t.count})]},t.id))})]})})]}),a.jsxs(D,{children:[a.jsx(R,{children:a.jsx(T,{title:e("backoffice.financialDashboard.subscriptionsByStatus","Assinaturas por situação"),infoTooltip:e("backoffice.financialDashboard.subscriptionsByStatusTooltip","Assinaturas agrupadas por status com valor total associado. Ãtil para enxergar volume e valor em cada etapa do ciclo de cobrança.")})}),a.jsx(M,{children:a.jsxs(O,{children:[a.jsx(U,{children:a.jsxs(S,{children:[a.jsx(j,{children:"Situação"}),a.jsx(j,{className:"text-right",children:"Qtd"}),a.jsx(j,{className:"text-right",children:"Valor"})]})}),a.jsx($,{children:w.by_status.filter(t=>t.count>0).map(t=>a.jsxs(S,{children:[a.jsx(v,{children:t.name}),a.jsx(v,{className:"text-right",children:t.count}),a.jsx(v,{className:"text-right",children:V(t.amount_total??0)})]},t.id))})]})})]})]}),d.items.overdue.length>0&&a.jsxs(D,{children:[a.jsx(R,{children:a.jsx(T,{title:e("backoffice.financialDashboard.overdueList","Inadimplentes recentes"),infoTooltip:e("backoffice.financialDashboard.overdueListTooltip","Lista detalhada das assinaturas inadimplentes no mês. Indica se a classificação veio de pagamento reconciliado ou do status da assinatura.")})}),a.jsx(M,{children:a.jsxs(O,{children:[a.jsx(U,{children:a.jsxs(S,{children:[a.jsx(j,{children:"Cliente"}),a.jsx(j,{children:"Valor"}),a.jsx(j,{children:"Vencimento"}),a.jsx(j,{children:"Fonte"})]})}),a.jsx($,{children:d.items.overdue.map(t=>a.jsxs(S,{children:[a.jsx(v,{children:t.customer_name??"â"}),a.jsx(v,{children:V(t.amount)}),a.jsx(v,{children:t.expire_at?new Date(t.expire_at).toLocaleDateString("pt-BR"):"â"}),a.jsx(v,{children:a.jsx(K,{variant:t.payment_source==="reconciled"?"default":"secondary",children:t.payment_source==="reconciled"?"Reconciliado":"Proxy status"})})]},t.subscription_id??t.customer_id??Math.random()))})]})})]})]})}export{Me 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.