PageSourceSearch

https://www.creatorsenseai.com/app/assets/AgencyCommissionsPage-U50VhOiW.js

js creatorsenseai.com collected 2026-10-02 01:27:30 UTC 10,343 bytes, 1 lines download raw bytes

1import{r as C,w as T,c as P,k as Z,C as g,D as m,y as u,Q as _,u as a,z as w,L as J,J as b,K as r,G as f,aa as Q,V as I,i as V,P as tt,H as W,a3 as et,W as Y}from"./vendor-misc-5pJBpqhN.js";import{P as at}from"./PageFrame-CmNWALAg.js";import{A as st}from"./AsyncState-C1wY1NSf.js";import{C as K}from"./ChromeButton-DmiFifbd.js";import{K as ot}from"./KpiStrip-BFft7DiM.js";import{C as H}from"./CollapsibleSection-AKD5kywU.js";import{E as q}from"./EmptyState-HBFSUaTT.js";import{M as X}from"./MasterDataTable-PTWiW2Qq.js";import{D as nt}from"./DataPageToolbar-CgUiuW-1.js";import{bv as it,bw as rt,bx as lt,k as x,by as ut,bz as mt,bA as ct,bB as dt,f as ft,_ as pt}from"./index-BNPflmqD.js";import{u as yt}from"./useAgencyPermissions-B_HoLjuX.js";import{u as gt}from"./useAgencyLiveFetch-Bl_pfbMN.js";import{g as bt}from"./vendor-vue-BIDZeepx.js";import{f as F}from"./format-W5H20hG1.js";import"./creatorFieldHelp-BrZsjpkG.js";import"./MetricGrid-DMaQt6lc.js";import"./ChromeCard-DkvfllPh.js";import"./FieldLabel-DcFbp3Rs.js";import"./chevron-right-DB3KAVqC.js";import"./vendor-utils-CxkvrZ9U.js";import"./DataTable-DiOue6-9.js";import"./useBreakpoint-DOQrj9xp.js";import"./breakpoints-Cr7fi6TV.js";import"./arrow-up-8FIemuBW.js";import"./PageToolbar-C0IR3MXo.js";import"./TimeframePills-C882UVAW.js";import"./vendor-tanstack-B6ELLr_Q.js";import"./vendor-sentry-84cD2ryj.js";import"./useLiveFetch-BwWvTjVn.js";function vt(){const l=bt(),{canManageBilling:$,canViewBilling:R}=yt(),E=[30,60,90],p=C(30),v=C([]),i=C(!1),y=C(null),B=C("0"),c=C(""),{data:h,loading:M,error:S,refresh:d}=gt(async()=>{const[t,s]=await Promise.all([it(p.value),rt()]);return{summary:t,batches:s??[]}});T(p,()=>void d({clear:!0})),T(h,t=>{v.value=(t==null?void 0:t.batches)??[]},{immediate:!0}),T(v,t=>{const s=t.filter(o=>o.status==="draft");if(!s.length){y.value=null;return}s.some(o=>o.id===y.value)||(y.value=s[0].id)},{immediate:!0});const D=P(()=>{var e;const t=(e=h.value)==null?void 0:e.summary;if(!t)return[];const s=t.total_commission??t.estimated_commission??null,o=t.roster_basis_revenue??null;return[{id:"total",label:"Estimated commission (on net)",value:s!=null?F(String(s),"USD",{maximumFractionDigits:2}):"—"},{id:"basis",label:"Roster net (basis)",value:o!=null?F(String(o),"USD",{maximumFractionDigits:2}):"—"},{id:"outstanding",label:"Outstanding",value:t.outstanding!=null?F(String(t.outstanding),"USD",{maximumFractionDigits:2}):"—"},{id:"paid",label:"Paid",value:t.paid!=null?F(String(t.paid),"USD",{maximumFractionDigits:2}):"—"}]}),A=[{key:"name",label:"Creator"},{key:"commission",label:"Commission earned",align:"right",format:"currency"},{key:"rate",label:"Rate",align:"right"}],j=P(()=>{var s,o;const t=(o=(s=h.value)==null?void 0:s.summary)==null?void 0:o.creators;return!Array.isArray(t)||!t.length?[]:t.map((e,n)=>({id:String(e.creator_id??n),name:e.display_name||String(e.creator_id??"—").slice(0,8),commission:String(e.estimated_commission??e.commission_earned??e.commission??"0"),rate:(e.commission_rate_percent??e.default_commission_rate_percent)!=null?`${e.commission_rate_percent??e.default_commission_rate_percent}%`:"—"}))}),k=P(()=>v.value.filter(t=>t.status==="draft").map(t=>({id:t.id,label:`${t.id.slice(0,8)}… (${t.total_amount??"0"})`})));async function z(){if(!i.value){i.value=!0;try{await dt(p.value),l.success("Commission batch created"),await d()}catch(t){l.error(x(t,"Could not create batch"))}finally{i.value=!1}}}async function O(t){if(!i.value){i.value=!0;try{await mt(t),l.success("Batch finalized"),await d()}catch(s){l.error(x(s,"Could not finalize batch"))}finally{i.value=!1}}}async function L(){if(i.value)return;if(!y.value){l.error("Select a draft batch first");return}const t=B.value.trim();if(!/^-?\d+(\.\d{1,4})?$/.test(t)){l.error("Adjustment amount must be a valid decimal (e.g. 12.50)");return}i.value=!0;try{await ct(y.value,{adjustment_amount:t,adjustment_reason:c.value.trim()||null}),l.success("Draft batch adjusted"),await d()}catch(s){l.error(x(s,"Could not apply adjustment"))}finally{i.value=!1}}async function N(t){if(!i.value){i.value=!0;try{const s=await ut(t);s.verified?l.success("All creators have verified consent anchors"):l.error(`${s.missing_consent_creator_ids.length} creator(s) missing consent proof`),await d()}catch(s){l.error(x(s,"Consent verification failed"))}finally{i.value=!1}}}async function U(t){if(!i.value){i.value=!0;try{const s=await lt(t);
1l.success(`Payout ${s.status}`),await d()}catch(s){l.error(x(s,"Payout failed"))}finally{i.value=!1}}}return{timeframeOptions:E,timeframeDays:p,loading:M,error:S,refresh:d,batches:v,batchLoading:i,summaryMetrics:D,creatorColumns:A,creatorRows:j,draftBatchOptions:k,selectedDraftBatchId:y,adjustmentAmount:B,adjustmentReason:c,canManageBilling:$,canViewBilling:R,onCreateBatch:z,onApplyAdjustment:L,onFinalize:O,onVerifyConsent:N,onExecutePayout:U}}const ht=["disabled","onClick"],kt=["disabled","onClick"],Ct=["disabled","onClick"],_t={class:"adjustment-grid"},wt=["value"],Bt=Z({__name:"AgencyCommissionsPage",setup(l){const $=ft(),R=P(()=>!!$.activeOrgId),{timeframeOptions:E,timeframeDays:p,loading:v,error:i,refresh:y,batches:B,batchLoading:c,summaryMetrics:h,creatorColumns:M,creatorRows:S,draftBatchOptions:d,selectedDraftBatchId:D,adjustmentAmount:A,adjustmentReason:j,canManageBilling:k,onCreateBatch:z,onApplyAdjustment:O,onFinalize:L,onVerifyConsent:N,onExecutePayout:U}=vt(),t=[{key:"status",label:"Status"},{key:"payout_status",label:"Payout"},{key:"total",label:"Total",align:"right"},{key:"created_at",label:"Created"},{key:"actions",label:""}],s=P(()=>B.value.map(o=>({id:o.id,id_short:o.id.slice(0,8)+"…",status:o.status,payout_status:o.payout_status||(o.status==="finalized"?"unpaid":"—"),total:o.total_amount??"—",adjustment:o.adjustment_amount?`${o.adjustment_amount}${o.adjustment_reason?` (${o.adjustment_reason})`:""}`:"—",created_at:o.created_at?new Date(o.created_at).toLocaleDateString():"—",actions:""})));return(o,e)=>(u(),g(at,{title:"Commissions",description:"Build and finalize payout batches from Book net — ledger truths, not theatre."},{toolbar:m(()=>[_(nt,{"timeframe-days":a(p),"onUpdate:timeframeDays":e[0]||(e[0]=n=>V(p)?p.value=n:null),options:a(E)},{actions:m(()=>[a(k)?(u(),g(K,{key:0,variant:"primary",disabled:a(c),onClick:a(z)},{default:m(()=>[f(W(a(c)?"Creating…":"Create batch"),1)]),_:1},8,["disabled","onClick"])):b("",!0)]),_:1},8,["timeframe-days","options"])]),default:m(()=>[_(st,{loading:a(v),error:a(i),onRetry:a(y)},{default:m(()=>[R.value?(u(),w(J,{key:1},[a(h).length?(u(),g(ot,{key:0,items:a(h),max:3},null,8,["items"])):b("",!0),e[10]||(e[10]=r("ol",{class:"commission-flow","aria-label":"Commission workflow"},[r("li",null,[r("strong",null,"1. Build"),f(" Create a draft batch from Book net")]),r("li",null,[r("strong",null,"2. Finalize"),f(" Lock amounts (approve)")]),r("li",null,[r("strong",null,"3. Pay"),f(" Verify consent, then execute payout")])],-1)),a(B).length?(u(),g(X,{key:2,title:"Payout batches","hide-header":"","count-label":"batches",columns:t,rows:s.value,"default-sort-key":"created_at","default-sort-direction":"desc",layout:"responsive","row-id-key":"id"},Q({_:2},[a(k)?{name:"cell-actions",fn:m(({row:n})=>[n.status==="draft"?(u(),w("button",{key:0,type:"button",class:"link-btn",disabled:a(c),onClick:G=>a(L)(String(n.id))}," Finalize ",8,ht)):b("",!0),n.status==="finalized"?(u(),w("button",{key:1,type:"button",class:"link-btn",disabled:a(c),onClick:G=>a(N)(String(n.id))}," Verify consent ",8,kt)):b("",!0),n.status==="finalized"?(u(),w("button",{key:2,type:"button",class:"link-btn",disabled:a(c),onClick:G=>a(U)(String(n.id))}," Execute payout ",8,Ct)):b("",!0)]),key:"0"}:void 0]),1032,["rows"])):(u(),g(q,{key:1,title:"How commissions work",description:"Create a payout batch from Book net, review lines, finalize, then pay. Amounts stay ledger-true — no silent rounding theatre."},Q({_:2},[a(k)?{name:"actions",fn:m(()=>[_(K,{variant:"primary",disabled:a(c),onClick:a(z)},{default:m(()=>[...e[4]||(e[4]=[f(" Create batch ",-1)])]),_:1},8,["disabled","onClick"])]),key:"0"}:void 0]),1024)),a(k)&&a(d).length?(u(),g(H,{key:3,title:"Draft adjustments",description:"Apply a fixed adjustment before finalizing payout.",open:!1},{default:m(()=>[r("div",_t,[r("label",null,[e[5]||(e[5]=f(" Draft batch ",-1)),I(r("select",{"onUpdate:modelValue":e[1]||(e[1]=n=>V(D)?D.value=n:null),class:"input"},[(u(!0),w(J,null,tt(a(d),n=>(u(),w("option",{key:n.id,value:n.id},W(n.label),9,wt))),128))],512),[[et,a(D)]])]),r("label",null,[e[6]||(e[6]=f(" Adjustment amount ",-1)),I(r("input",{"onUpdate:modelValue":e[2]||(e[2]=n=>V(A)?A.value=n:null),class:"input",type:"number",step:"0.01",placeholder:"0.00"},null,512),[[Y,a(A)]])]),r("label",null,[e[7]||(e[7]=f(" Reason ",-1)),I(r("input",{"onUpdate:modelValue":e[3]||(e[3]=n=>V(j)?j.value=n:null),class:"input",type:"text",maxlength:"255",placeholder:"Optional note"},null,512),[[Y,a(j)]])]),_(K,{variant:"secondary",disabled:a(c),onClick:a(O)},{default:m(()=>[...e[8]||(e[8]=[f(" Apply adjustment ",-1)])]),_:1},8,["disabled","onClick"])])]),_:1})):b("",!0),a(S).length?(u(),g(H,{key:4,title:"Per-creator breakdown",description:"Estimated commission per roster member in the selected period.",count:a(S).length,"count-label":"creators",open:!1},{default:m(()=>[_(X,{title:"Per-creator breakdown","show-count":!1,"hide-header":"","count-label":"creators",columns:a(M),rows:a(S),"default-sort-key":"commission","default-sort-direction":"desc",layout:"responsive","empty-label":"No creator data"},null,8,["columns","rows"])]),_:1},8,["count"])):b("",!0),_(H,{title:"Estimates disclaimer",description:"Not legal or payroll advice.",open:!1},{default:m(()=>[...e[9]||(e[9]=[r("p",{class:"note",role:"note"},[r("strong",null,"Not legal or payroll advice."),f(" Commission is on net after platform fees (same basis as Book). Outstanding = finalized unpaid batches. Figures are estimates for agency operations only — enable payout automation in Settings after compliance review. ")],-1)])]),_:1})],64)):(u(),g(q,{key:0,title:"No agency workspace",description:"Your account is not linked to an agency organization. Contact your agency owner for an invite."}))]),_:1},8,["loading","error","onRetry"])]),_:1}))}}),te=pt(Bt,[["__scopeId","data-v-d0dc5b16"]]);export{te 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.