PageSourceSearch

https://beatbandit.ai/assets/ProfitabilityAnalytics-DM9kkr35.js

js beatbandit.ai collected 2026-10-05 11:52:44 UTC 10,195 bytes, 2 lines download raw bytes

1import{ao as I,j as e,r as S,B as o,T as t,f as O}from"./index-CzOd9Km7.js";import{u as W}from"./useQuery-BcbK_yvX.js";import{r as M}from"./createSvgIcon-DaEeqn1R.js";import{a as H}from"./axiosConfig-BS0LIV0L.js";import"./projectSchemas-h1QnwtOV.js";import"./screenplaySchemas-D4JI8Qiv.js";import"./supabaseAuthClient-D4COccm1.js";import{C as a}from"./Card-BXrAfFWw.js";import{C as l}from"./CardContent-YIZ_mORG.js";import{G as s}from"./Grid-NNIo4zT1.js";import{s as N,L as C,A as P,D as T}from"./DatePicker-Byk4zAwJ.js";import{C as w}from"./CircularProgress-CFKeHsf1.js";import{A as c}from"./Alert-BXc9IPcV.js";import{L as V}from"./LinearProgress-DOLkLyql.js";import{T as D}from"./TableContainer-BUVhxTHl.js";import{P as R}from"./Paper-2iw6XA5a.js";import{T as B,a as z,b as x,c as i,d as F}from"./TableRow-B0KWZW4m.js";import{C as f}from"./dividerClasses-CE6pxdyz.js";import{T as G}from"./Add-DR3ny3xK.js";import{I as J}from"./IconButton-DX7NfjoN.js";import{f as A}from"./format-CBtVrLKl.js";import"./ownerWindow-D5LHhVun.js";import"./useControlled-C1WEhlQX.js";import"./requirePropFactory-CXHKSpYe.js";import"./endOfMonth-BaB1UzDW.js";import"./useThemeProps-Dhrs3fnV.js";import"./getThemeProps-whaKXyLK.js";import"./useMediaQuery-BbaHISUJ.js";import"./Popper-t1n9sSlv.js";import"./Menu-BAMQbaXI.js";import"./TextField-BLDfXARA.js";import"./Search-BcRNGXqA.js";import"./TrendingUp-DOlPqcSv.js";import"./MenuItem-CKC7Jjka.js";import"./ListItem-B456oJov.js";var _={},K=I;Object.defineProperty(_,"__esModule",{value:!0});var L=_.default=void 0,Q=K(M()),X=e;L=_.default=(0,Q.default)((0,X.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m1 15h-2v-6h2zm0-8h-2V7h2z"}),"Info");var y={},Y=I;Object.defineProperty(y,"__esModule",{value:!0});var g=y.default=void 0,Z=Y(M()),ee=e;g=y.default=(0,Z.default)((0,ee.jsx)("path",{d:"m16 6 2.29 2.29-4.88 4.88-4-4L2 16.59 3.41 18l6-6 4 4 6.3-6.29L22 12V6z"}),"TrendingUp");function Le(){const[h,q]=S.useState(N(new Date)),[m,U]=S.useState(new Date),{data:n,isLoading:j,error:$,refetch:k}=W({queryKey:["profitability-analytics",h,m],queryFn:async()=>{const r={};return h&&(r.start_date=A(h,"yyyy-MM-dd'T'HH:mm:ss")),m&&(r.end_date=A(m,"yyyy-MM-dd'T'HH:mm:ss")),(await H.get("/admin/analytics/profitability",{params:r})).data},enabled:!0}),u=r=>new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",minimumFractionDigits:2,maximumFractionDigits:2}).format(r||0),p=r=>`${(r||0).toFixed(1)}%`,v=(r,d=100)=>{const b=r/d;return b>=.8?"success":b>=.5?"warning":"error"},E=r=>r>1.5?e.jsx(g,{fontSize:"small",color:"error"}):r>1.2?e.jsx(g,{fontSize:"small",color:"warning"}):null;return e.jsxs(o,{children:[e.jsx(t,{variant:"h5",gutterBottom:!0,children:"Profitability Analytics"}),e.jsx(a,{sx:{mb:3},children:e.jsx(l,{children:e.jsxs(s,{container:!0,spacing:2,alignItems:"center",children:[e.jsx(s,{item:!0,xs:12,md:4,children:e.jsx(C,{dateAdapter:P,children:e.jsx(T,{label:"Start Date",value:h,onChange:r=>q(r),slotProps:{textField:{fullWidth:!0}}})})}),e.jsx(s,{item:!0,xs:12,md:4,children:e.jsx(C,{dateAdapter:P,children:e.jsx(T,{label:"End Date",value:m,onChange:r=>U(r),slotProps:{textField:{fullWidth:!0}}})})}),e.jsx(s,{item:!0,xs:12,md:4,children:e.jsx(O,{variant:"contained",onClick:()=>k(),disabled:j,fullWidth:!0,children:j?e.jsx(w,{size:24}):"Analyze Profitability"})})]})})}),$&&e.jsx(c,{severity:"error",sx:{mb:3},children:"Failed to load profitability analytics"}),j&&e.jsx(o,{display:"flex",justifyContent:"center",p:4,children:e.jsx(w,{})}),n&&e.jsxs(e.Fragment,{children:[e.jsxs(s,{container:!0,spacing:3,sx:{mb:3},children:[e.jsx(s,{item:!0,xs:12,md:4,children:e.jsx(a,{children:e.jsxs(l,{children:[e.jsx(t,{color:"textSecondary",gutterBottom:!0,children:"Overall Profit Margin"}),e.jsxs(o,{display:"flex",alignItems:"center",children:[e.jsx(t,{variant:"h4",children:p(n.overall_profit_margin)}),e.jsx(o,{ml:2,children:e.jsx(V,{variant:"determinate",value:Math.min(100,n.overall_profit_margin),color:v(n.overall_profit_margin,n.profitability_analysis.target_margin),sx:{width:100,height:10,borderRadius:5}})})]}),e.jsxs(t,{variant:"body2",color:"textSecondary",children:["Target: ",p(n.profitability_analysis.target_margin)]})]})})}),e.jsx(s,{item:!0,xs:12,md:4,children:e.jsx(a,{children:e.jsxs(l,{children:[e.jsx(t,{color:"textSecondary",gutterBottom:!0,children:"Overall Profit"}),e.jsx(t,{variant:"h4",color:"success.main",children:u(n.overall_profit_usd)}),e.jsx(t,{variant:"body2",color:"textSecondary",children:"For selected period"})]})})}),e.jsx(s,{item:!0,xs:12,md:4,children:e.jsx(a,{children:e.jsxs(l,{children:[e.jsx(t,{color:"textSecondary",gutterBottom:!0,children:"Potential Additional Revenue"}),e.jsx(t,{variant:"h4",color:"warning.main",children:u(n.profitability_analysis.total_potential_additional_revenue)}),e.jsx(t,{variant:"body2",color:"textSecondary",children:"By implementing recommendations"})]})})})]}),n.provider_failure_analysis&&e.jsx(a,{sx:{mb:3},children:e.jsxs(l,{children:[e.jsx(t,{variant:"h6",gutterBottom:!0,children:"Refunded Failed Video Jobs"}),e.jsxs(s,{container:!0,spacing:2,sx:{mb:2},children:[e.jsx(s,{item:!0,xs:12,md:3,children:e.jsx(a,{variant:"outlined",children:e.jsxs(l,{children:[e.jsx(t,{color:"textSecondary",gutterBottom:!0,children:"Failed video jobs"}),e.jsx(t,{variant:"h5",children:n.provider_failure_analysis.failed_job_count||0})]})})}),e.jsx(s,{item:!0,xs:12,md:3,children:e.jsx(a,{variant:"outlined",children:e.jsxs(l,{children:[e.jsx(t,{color:"textSecondary",gutterBottom:!0,children:"Refunded jobs"}),e.jsx(t,{variant:"h5",children:n.provider_failure_analysis.refunded_job_c
1ount||0})]})})}),e.jsx(s,{item:!0,xs:12,md:3,children:e.jsx(a,{variant:"outlined",children:e.jsxs(l,{children:[e.jsx(t,{color:"textSecondary",gutterBottom:!0,children:"Refunded credits"}),e.jsx(t,{variant:"h5",children:n.provider_failure_analysis.refunded_credits||0})]})})}),e.jsx(s,{item:!0,xs:12,md:3,children:e.jsx(a,{variant:"outlined",children:e.jsxs(l,{children:[e.jsx(t,{color:"textSecondary",gutterBottom:!0,children:"Provider billable metadata exposed"}),e.jsx(t,{variant:"h5",children:n.provider_failure_analysis.provider_billable_metadata_count||0})]})})})]}),e.jsx(c,{severity:"info",sx:{mb:2},children:"This tracks failed video jobs where users were refunded. If the provider exposes billable failure metadata, it is surfaced here so we can understand potential margin leakage."}),e.jsx(D,{component:R,children:e.jsxs(B,{size:"small",children:[e.jsx(z,{children:e.jsxs(x,{children:[e.jsx(i,{children:"Finished"}),e.jsx(i,{children:"Project"}),e.jsx(i,{children:"Provider"}),e.jsx(i,{children:"Model"}),e.jsx(i,{children:"Refund"}),e.jsx(i,{children:"Billable metadata"}),e.jsx(i,{children:"Error"})]})}),e.jsxs(F,{children:[(n.provider_failure_analysis.recent_failures||[]).map((r,d)=>e.jsxs(x,{children:[e.jsx(i,{children:r.finished_at?new Date(r.finished_at).toLocaleString():"—"}),e.jsx(i,{children:r.project_name||"—"}),e.jsx(i,{children:r.provider||"—"}),e.jsx(i,{children:r.model||"—"}),e.jsx(i,{children:e.jsx(f,{label:r.credits_refunded?`Refunded${r.refunded_credits?` (${r.refunded_credits})`:""}`:"Unknown",color:r.credits_refunded?"success":"default",size:"small"})}),e.jsx(i,{children:r.provider_billable_units!=null?JSON.stringify(r.provider_billable_units):"Unknown"}),e.jsx(i,{sx:{maxWidth:420},children:r.display_error_message||"—"})]},r.job_id||d)),(!n.provider_failure_analysis.recent_failures||n.provider_failure_analysis.recent_failures.length===0)&&e.jsx(x,{children:e.jsx(i,{colSpan:7,children:e.jsx(t,{variant:"body2",color:"text.secondary",children:"No failed video jobs in the selected period."})})})]})]})})]})}),n.profitability_analysis.underperforming_providers.length>0&&e.jsx(c,{severity:"warning",sx:{mb:3},children:e.jsxs(t,{variant:"subtitle1",fontWeight:"bold",children:[n.profitability_analysis.underperforming_providers.length," provider/model combinations are below 50% profit margin"]})}),n.profitability_analysis.recommended_adjustments.length>0&&e.jsx(a,{children:e.jsxs(l,{children:[e.jsxs(o,{display:"flex",alignItems:"center",mb:2,children:[e.jsx(t,{variant:"h6",children:"Recommended Price Adjustments"}),e.jsx(G,{title:"These recommendations will help achieve the target profit margin",children:e.jsx(J,{size:"small",sx:{ml:1},children:e.jsx(L,{fontSize:"small"})})})]}),e.jsx(D,{component:R,children:e.jsxs(B,{size:"small",children:[e.jsx(z,{children:e.jsxs(x,{children:[e.jsx(i,{children:"Provider"}),e.jsx(i,{children:"Model"}),e.jsx(i,{align:"right",children:"Current Margin"}),e.jsx(i,{align:"right",children:"Current Revenue"}),e.jsx(i,{align:"right",children:"Target Revenue"}),e.jsx(i,{align:"right",children:"Price Multiplier"}),e.jsx(i,{align:"center",children:"Action Required"})]})}),e.jsx(F,{children:n.profitability_analysis.recommended_adjustments.map((r,d)=>e.jsxs(x,{children:[e.jsx(i,{children:r.provider}),e.jsx(i,{children:r.model}),e.jsx(i,{align:"right",children:e.jsx(f,{label:p(r.current_margin),color:v(r.current_margin,50),size:"small"})}),e.jsx(i,{align:"right",children:u(r.current_revenue)}),e.jsx(i,{align:"right",children:e.jsx(t,{color:"success.main",children:u(r.target_revenue)})}),e.jsx(i,{align:"right",children:e.jsxs(o,{display:"flex",alignItems:"center",justifyContent:"flex-end",children:[e.jsxs(t,{fontWeight:"bold",children:[r.recommended_credit_multiplier.toFixed(2),"x"]}),E(r.adjustment_factor)]})}),e.jsx(i,{align:"center",children:e.jsx(f,{label:r.adjustment_factor>1.5?"Urgent":"Recommended",color:r.adjustment_factor>1.5?"error":"warning",size:"small"})})]},d))})]})}),e.jsx(o,{mt:2,children:e.jsx(c,{severity:"info",children:e.jsx(t,{variant:"body2",children:"To implement these recommendations, update the credit costs in the Operation Costs configuration for each provider/model combination."})})})]})}),n.profitability_analysis.recommended_adjustments.length===0&&e.jsx(c,{severity:"success",children:e.jsx(t,{children:"All provider/model combinations are meeting or exceeding the target profit margin. No price adjustments are needed at this time."})})]})]})}export{Le as default};
2//# sourceMappingURL=ProfitabilityAnalytics-DM9kkr35.js.map

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.