1import{j as e,cg as H,bY as Z,r as Y}from"./index-B0OyW6Z1.js";import{D as U,P as N,t as q,C as K,T as o,b as a,V as i,c as G,G as z,d as E,e as $,f as J,r as Q,p as X}from"./registerPdfFonts-DitWiEeJ.js";import{t as ee}from"./saveBlob-pHAcHDqY.js";const r=n=>`AED ${(Number(n||0)/100).toLocaleString("en-GB",{maximumFractionDigits:0})}`,V=n=>{const h=Number(n||0)/100;return h>=1e3?`${Math.round(h/1e3)}k`:`${Math.round(h)}`},B=n=>n?new Date(`${n}T00:00:00Z`).toLocaleDateString("en-GB",{timeZone:"UTC",day:"2-digit",month:"short",year:"numeric"}):"â",te=(n,h)=>Math.round((Date.parse(`${h}T00:00:00Z`)-Date.parse(`${n}T00:00:00Z`))/864e5),v=n=>Number(n||0),F="#A32D2D",P="#0F6E56",_="#2a78d6",L="#1baf7a",I="#eb6834",oe="#888780",ne="#8A6212",M=(n,h)=>({fontFamily:"Inter",fontSize:n,fill:h}),t={header:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",borderBottomWidth:1,borderBottomColor:a.border,paddingBottom:6,marginBottom:16},headerLabel:{fontFamily:"Inter",fontSize:8,fontWeight:700,letterSpacing:1.4,color:a.grayLight,textTransform:"uppercase"},headerMark:{fontFamily:"Inter",fontSize:8,fontWeight:700,letterSpacing:1.2,color:F},footer:{position:"absolute",bottom:28,left:52,right:52,flexDirection:"row",justifyContent:"space-between",borderTopWidth:1,borderTopColor:a.border,paddingTop:6},footerText:{fontFamily:"Inter",fontSize:7.5,color:a.grayLight},eyebrow:{fontFamily:"Inter",fontSize:8.5,fontWeight:700,letterSpacing:1.8,color:a.blue,textTransform:"uppercase",marginBottom:5},h2:{fontFamily:"Inter",fontSize:15,fontWeight:700,color:a.navy},sub:{fontFamily:"Inter",fontSize:8.5,color:a.grayLight,marginTop:2,marginBottom:12},sectionTitle:{fontFamily:"Inter",fontSize:9,fontWeight:700,letterSpacing:1.2,color:a.navy,textTransform:"uppercase",marginBottom:2},sectionSub:{fontFamily:"Inter",fontSize:7.5,color:a.grayLight,marginBottom:7},verdict:{fontFamily:"Inter",fontSize:10,lineHeight:1.6,color:a.inkSoft,backgroundColor:a.tint,padding:12,borderRadius:5,marginBottom:14},note:{fontFamily:"Inter",fontSize:7.5,lineHeight:1.5,color:a.grayLight,marginTop:8},card:{borderWidth:1,borderColor:a.border,borderRadius:5,padding:10},kpiRow:{flexDirection:"row",marginBottom:8},kpiCell:{flex:1,borderWidth:1,borderColor:a.border,borderRadius:5,padding:10,marginRight:8},kpiCellLast:{flex:1,borderWidth:1,borderColor:a.border,borderRadius:5,padding:10},kpiLabel:{fontFamily:"Inter",fontSize:7,fontWeight:700,letterSpacing:.9,color:a.grayLight,textTransform:"uppercase"},kpiValue:{fontFamily:"Inter",fontSize:14,fontWeight:700,color:a.navy,marginTop:4},kpiValueCompact:{fontFamily:"Inter",fontSize:11,fontWeight:700,color:a.navy,marginTop:4},kpiNote:{fontFamily:"Inter",fontSize:7,color:a.gray,marginTop:3,lineHeight:1.4},badge:{fontFamily:"Inter",fontSize:6,fontWeight:700,letterSpacing:.8,color:ne,textTransform:"uppercase",backgroundColor:"#FBF3E2",borderRadius:3,paddingHorizontal:4,paddingVertical:2},thead:{flexDirection:"row",borderBottomWidth:1.2,borderBottomColor:a.navy,paddingBottom:4},tr:{flexDirection:"row",borderBottomWidth:.6,borderBottomColor:a.border,paddingVertical:4,alignItems:"flex-start"},th:{fontFamily:"Inter",fontSize:7,fontWeight:700,letterSpacing:.6,color:a.navy,textTransform:"uppercase"},td:{fontFamily:"Inter",fontSize:8,color:a.inkSoft},tdR:{fontFamily:"Inter",fontSize:8,color:a.inkSoft,textAlign:"right"},callout:{borderWidth:1,borderColor:"#F0999B",backgroundColor:"#FDF2F2",borderRadius:5,padding:11,marginBottom:12},calloutTitle:{fontFamily:"Inter",fontSize:10,fontWeight:700,color:F,marginBottom:4},calloutText:{fontFamily:"Inter",fontSize:8.5,lineHeight:1.5,color:"#79241F"},calloutRule:{borderTopWidth:1,borderTopColor:"#F0999B",marginTop:8,paddingTop:7},calloutEmph:{fontFamily:"Inter",fontSize:8.5,fontWeight:700,lineHeight:1.45,color:F},legendRow:{flexDirection:"row",marginBottom:6,flexWrap:"wrap"},legendItem:{flexDirection:"row",alignItems:"center",marginRight:14},legendSwatch:{width:9,height:3,borderRadius:1,marginRight:4},legendText:{fontFamily:"Inter",fontSize:7.5,color:a.gray},meter:{height:5,backgroundColor:"#F1EFE8",borderRadius:3,marginTop:8,marginBottom:6}};function W({children:n,label:h="Receivables report"}){return e.jsxs(N,{size:"A4",style:q.page,children:[e.jsxs(i,{style:t.header,fixed:!0,children:[e.jsx(o,{style:t.headerLabel,children:h}),e.jsx(o,{style:t.headerMark,children:"CONFIDENTIAL"})]}),n,e.jsxs(i,{style:t.footer,fixed:!0,children:[e.jsx(o,{style:t.footerText,children:"SplitRent â internal use only"}),e.jsx(o,{style:t.footerText,render:({pageNumber:m,totalPages:c})=>`${m} / ${c}`})]})]})}function R({label:n,value:h,note:m,last:c,compact:x}){return e.jsxs(i,{style:c?t.kpiCellLast:t.kpiCell,children:[e.jsx(o,{style:t.kpiLabel,children:n}),e.jsx(o,{style:x?t.kpiValueCompact:t.kpiValue,children:h}),m?e.jsx(o,{style:t.kpiNote,children:m}):null]})}function A({items:n}){return e.jsx(i,{style:t.legendRow,children:n.map(h=>e.jsxs(i,{style:t.legendItem,children:[h.dashed?e.jsxs(i,{style:{flexDirection:"row",width:9,marginRight:4},children:[e.jsx(i,{style:{width:3,height:3,backgroundColor:h.color}}),e.jsx(i,{style:{width:2}}),e.jsx(i,{style:{width:4,height:3,backgroundColor:h.color}})]}):e.jsx(i,{style:[t.legendSwatch,{backgroundColor:h.color}]}),e.jsx(o,{style:t.legendText,children:h.label})]},h.label))})}function le({series:n,peak:h,peakMonth:m}){if(!(n!=null&&n.length))return null;const c=490,x=160,y={t:16,r:10,b:18,l:44},l=c-y.l-y.r,p=x-y.t-y.b,b=n.length,k=Math.max(...n.map(d=>Math.max(d.out,d.in)),1),f=d=>y.l+(b===1?l/2:d/(b-1)*l),u=d=>y.t+p-d/k*p,C=n.map((d,s)=>s===0?`M ${f(s)} ${u(d.out)}`:`L ${f(s)} ${u(n[s-1].out)} L ${f(s)} ${u(d.out)}`).join(" "),S=n.map((d,s)=>`${s===0?"M":"L"} ${f(s)} ${u(d.in)}`).join(" "),D=n.map((d,s)=>`${s===0?"M":"L"} ${f(s)} ${u(d.out)}`).join(" ")+" "+n.slice().reverse().map((d,s)=>`L ${f(b-1-s)} ${u(d.in)}`).join(" ")+" Z",j=Number.isInteger(m)&&n[m]?m:null,g=j!=null&&f(j)>c-90;return e.jsxs(G,{width:c,height:x,children:[[0,.5,1].map(d=>e.jsxs(z,{children:[e.jsx(E,{x1:y.l,y1:u(d*k),x2:c-y.r,y2:u(d*k),stroke:"#E1E0D9",strokeWidth:.6}),e.jsx(o,{x:y.l-5,y:u(d*k)+2,textAnchor:"end",style:M(6,a.grayLight),children:V(d*k)})]},d)),e.jsx($,{d:D,fill:I,fillOpacity:.14}),e.jsx($,{d:C,stroke:_,strokeWidth:1.4,fill:"none"}),e.jsx($,{d:S,stroke:L,strokeWidth:1.4,fill:"none"}),j!=null&&e.jsxs(z,{children:[e.jsx(E,{x1:f(j),y1:u(n[j].out),x2:f(j),y2:u(n[j].in),stroke:I,strokeWidth:1,strokeDasharray:"2 2"}),e.jsx(J,{cx:f(j),cy:u(n[j].out),r:2.6,fill:I,stroke:"#FFFFFF",strokeWidth:1}),e.jsx(o,{x:g?f(j)-6:f(j)+6,y:u(n[j].out)-5,textAnchor:g?"end":"start",style:{fontFamily:"Inter",fontSize:6.5,fontWeight:700,fill:"#993C1D"},children:`peak ${r(h)}`})]}),n.map((d,s)=>s%2===0||s===b-1?e.jsx(o,{x:f(s),y:x-6,textAnchor:s===0?"start":s===b-1?"end":"middle",style:M(6,a.grayLight),children:`M${s+1}`},s):null)]})}function se({forecast:n,asOf:h}){if(!(n!=null&&n.length))return null;const m=490,c=160,x={t:16,r:10,b:18,l:44},y=m-x.l-x.r,l=c-x.t-x.b,p=n.length,b=Math.max(...n.map(g=>
1g.cumulative_expected),1),k=g=>x.l+(p===1?y/2:g/(p-1)*y),f=g=>x.t+l-g/b*l,u=h?n.reduce((g,d,s)=>d.date<=h?s:g,-1):p-1,C=Math.max(u,0),S=(g,d,s)=>n.slice(g,d+1).map((w,T)=>`${T===0?"M":"L"} ${k(g+T)} ${f(w[s])}`).join(" "),D=Math.max(1,Math.ceil(p/6)),j=`${S(0,p-1,"cumulative_expected")} L ${k(p-1)} ${x.t+l} L ${k(0)} ${x.t+l} Z`;return e.jsxs(G,{width:m,height:c,children:[[0,.5,1].map(g=>e.jsxs(z,{children:[e.jsx(E,{x1:x.l,y1:f(g*b),x2:m-x.r,y2:f(g*b),stroke:"#E1E0D9",strokeWidth:.6}),e.jsx(o,{x:x.l-5,y:f(g*b)+2,textAnchor:"end",style:M(6,a.grayLight),children:V(g*b)})]},g)),e.jsx($,{d:j,fill:a.blue,fillOpacity:.09}),u>0&&e.jsx($,{d:S(0,u,"cumulative_expected"),stroke:_,strokeWidth:1.4,fill:"none"}),C<p-1&&e.jsx($,{d:S(C,p-1,"cumulative_expected"),stroke:_,strokeWidth:1.4,strokeDasharray:"3 2",fill:"none"}),e.jsx($,{d:S(0,p-1,"cumulative_collected"),stroke:L,strokeWidth:1.4,fill:"none"}),u>=0&&u<p-1&&e.jsxs(z,{children:[e.jsx(E,{x1:k(u),y1:x.t,x2:k(u),y2:x.t+l,stroke:"#94A3B8",strokeWidth:.7,strokeDasharray:"2 2"}),e.jsx(o,{x:k(u),y:x.t-5,textAnchor:"middle",style:{fontFamily:"Inter",fontSize:5.5,fontWeight:700,fill:"#475569"},children:"TODAY"})]}),n.map((g,d)=>d%D===0||d===p-1?e.jsx(o,{x:k(d),y:c-6,textAnchor:d===0?"start":d===p-1?"end":"middle",style:M(5.5,a.grayLight),children:g.date.slice(0,7)},d):null)]})}function O({label:n,value:h,max:m,color:c,right:x}){const y=m>0?Math.max(Math.min(h/m*100,100),0):0;return e.jsxs(i,{style:{flexDirection:"row",alignItems:"center",marginBottom:4},children:[e.jsx(o,{style:[t.td,{width:82}],children:n}),e.jsx(i,{style:{flex:1,height:6,backgroundColor:"#F1EFE8",borderRadius:3,marginRight:8},children:e.jsx(i,{style:{width:`${y}%`,height:6,backgroundColor:c,borderRadius:3}})}),e.jsx(o,{style:[t.tdR,{width:96,fontWeight:700}],children:x})]})}function re({data:n,metrics:h,generatedAt:m=""}){var d;const c=(n==null?void 0:n.summary)||{},x=(n==null?void 0:n.receivables)||[],y=n==null?void 0:n.as_of,l=h||{},p=l.aging||{},b=((n==null?void 0:n.trend)||[]).slice(-6),k=Math.max(...b.map(s=>s.collected),1),f=y?y.slice(0,7):null,u=v(l.rentPassThrough),C=v(c.fee_contracted),S=u+C||1,D=((d=n==null?void 0:n.shares)==null?void 0:d.rent)??Math.round(u/S*100),j=v(l.rentObligation)>0?Math.min(v(l.peakCapital)/v(l.rentObligation)*100,100):0,g=v(l.probableLoss)>v(c.fee_earned);return e.jsxs(U,{title:"SplitRent â Receivables report",author:"SplitRent",subject:"Internal receivables and portfolio report",children:[e.jsx(N,{size:"A4",style:q.cover,children:e.jsx(K,{eyebrow:"Internal financial report",title:"Receivables",highlight:"report",descriptor:`Money-in position, portfolio credit risk and capital requirement across the financed rent book as of ${B(y)}. Confidential â internal use only.`,credentials:[`${c.active_agreements??
10} active agreements`,`${r(c.gmv_contracted)} financed`],generatedNote:m?`Generated ${m}`:""})}),e.jsxs(W,{children:[e.jsx(o,{style:t.eyebrow,children:"Position"}),e.jsx(o,{style:t.h2,children:"Portfolio position"}),e.jsxs(o,{style:t.sub,children:[c.active_agreements??0," active agreements",l.activationGap>0?` · ${l.activationGap} approved not yet activated`:""," · as of ",B(y)]}),e.jsxs(o,{style:t.verdict,children:["Gross volume financed ",r(c.gmv_contracted)," across ",x.length," agreements; fee income recognised to date"," ",r(c.fee_earned),"."," ",v(l.probableLoss)>0?`${r(l.probableLoss)} is 90+ days past due${g?", exceeding cumulative fee income.":"."}`:"No balances are more than 90 days past due."," ","Peak funding requirement is ",r(l.peakCapital),", as tenant collections fund the majority of landlord disbursements."]}),e.jsxs(i,{style:t.kpiRow,children:[e.jsx(R,{label:"Gross volume financed",value:r(c.gmv_contracted),note:`${r(u)} passes through to landlords`}),e.jsx(R,{label:"Contracted fee revenue",value:r(C),note:`${l.takeRate}% take rate · ${v(l.returnOnCapital).toFixed(1)}% return on capital`,last:!0})]}),e.jsxs(i,{style:t.kpiRow,children:[e.jsx(R,{label:"Fee revenue earned",value:r(c.fee_earned),note:"Recognised on settled instalments"}),e.jsx(R,{label:"Collection rate",value:l.collectionRate==null?"â":`${l.collectionRate}%`,note:`${c.due_settled_count??0} of ${c.due_count??0} instalments due settled`,last:!0})]}),e.jsxs(o,{style:t.note,children:["Revenue is the fee component only. The ",r(u)," rent component is collected on behalf of landlords and disbursed, so it is gross volume, not income â consistent with agent (net) presentation under IFRS 15."]}),e.jsxs(i,{style:{marginTop:14},children:[e.jsx(o,{style:t.sectionTitle,children:"Receivable book"}),e.jsx(o,{style:t.sectionSub,children:"Contracted receivable, reconciling to the obligor detail"}),e.jsx(i,{style:t.card,children:[["Gross book",r(l.book),a.inkSoft],[`Collected (${l.pctCollected}%)`,r(c.collected_total),P],["Outstanding",r(c.outstanding_total),a.inkSoft],[`Past due (${c.overdue_count??0} instalments · ${l.pctOverdue??0}% of outstanding)`,r(c.overdue_amount),F]].map(([s,w,T])=>e.jsxs(i,{style:{flexDirection:"row",justifyContent:"space-between",marginBottom:3},children:[e.jsx(o,{style:t.td,children:s}),e.jsx(o,{style:[t.td,{fontWeight:700,color:T}],children:w})]},s))}),e.jsxs(o,{style:t.note,children:["Gross book ",r(l.book)," = collected ",r(c.collected_total)," + outstanding ",r(c.outstanding_total),"."]})]})]}),e.jsxs(W,{children:[e.jsx(o,{style:t.eyebrow,children:"Risk"}),e.jsx(o,{style:t.h2,children:"Credit risk position"}),e.jsx(o,{style:t.sub,children:"Risk asymmetry, delinquency ageing and concentration"}),e.jsxs(i,{style:t.callout,children:[e.jsxs(o,{style:t.calloutTitle,children:["Risk asymmetry",l.dealsToOffset>0?` â one default absorbs ${l.dealsToOffset} agreements of fee income`:""]}),e.jsxs(o,{style:t.calloutText,children:["Fee income recognised to date ",r(c.fee_earned),"; exposure at 90+ days ",r(l.probableLoss),". The book earns a ",l.takeRate,"% fee per agreement but carries 100% of the outstanding principal."]}),g&&e.jsx(i,{style:t.calloutRule,children:e.jsx(o,{style:t.calloutEmph,children:"Balances 90+ days past due exceed cumulative fee income. Recovery on these accounts determines whether the portfolio is profitable."})})]}),e.jsxs(i,{style:t.kpiRow,children:[e.jsx(R,{label:"Return on capital",value:`${v(l.returnOnCapital).toFixed(1)}%`,note:"Contracted fees ÷ peak capital employed"}),e.jsx(R,{label:"NPL ratio",value:`${v(l.nplRatio).toFixed(1)}%`,note:`${r(l.probableLoss)} at 90+ days ÷ outstanding`}),e.jsx(R,{label:"Fee per agreement",value:l.avgFeePerDeal==null?"â":r(l.avgFeePerDeal),note:l.avgDealSize==null?"No agreements on the book":`On ${r(l.avgDealSize)} average financed`,last:!0})]}),e.jsxs(i,{style:{marginTop:12},children:[e.jsx(o,{style:t.sectionTitle,children:"Delinquency ageing"}),e.jsxs(o,{style:t.sectionSub,children:["Past-due balances by age · share of ",r(c.overdue_amount)," total past due"]}),[["1â30 days",p.d1_30,"#BA7517"],["31â60 days",p.d31_60,"#D85A30"],["61â90 days",p.d61_90,"#E24B4A"],["Over 90 days",p.d90_plus,F]].map(([s,w,T])=>e.jsx(O,{label:s,value:w||0,max:c.overdue_amount||1,color:T,right:r(w)},s)),e.jsx(o,{style:t.note,children:v(p.d90_plus)>0?`${r(p.d90_plus)} at 90+ days is treated as probable loss (Stage 3 equivalent).`:"No balances beyond 90 days."})]}),e.jsxs(i,{style:{marginTop:12},children:[e.jsx(o,{style:t.sectionTitle,children:"Concentration"}),e.jsx(o,{style:t.sectionSub,children:"Single-obligor exposure as a share of the open book"}),e.jsxs(i,{style:t.card,children:[e.jsxs(o,{style:[t.kpiValue,{marginTop:0}],children:[l.concentrationPct??0,"%"]}),e.jsxs(o,{style:t.kpiNote,children:["Largest single obligor ",r(l.topExposure)," of ",r(l.totalExposure)," outstanding across ",x.length," ","obligors â a single default removes ",l.concentrationPct??0,"% of the open book."]})]})]})]}),e.jsxs(W,{children:[e.jsx(o,{style:t.eyebrow,children:"Capital"}),e.jsx(o,{style:t.h2,children:"Capital requirement"}),e.jsx(o,{style:t.sub,children:"Landlord disbursements against tenant collections across the lease"}),e.jsxs(i,{style:t.card,children:[e.jsxs(i,{style:{flexDirection:"row",justifyContent:"space-between",alignItems:"flex-start"},children:[e.jsx(o,{style:[t.kpiLabel,{marginBottom:2}],children:"Peak capital employed"}),e.jsx(o,{style:t.badge,children:"Modelled"})]}),e.jsx(o,{style:[t.kpiValue,{fontSize:18,marginTop:2}],children:r(l.peakCapital)}),e.jsxs(o,{style:t.kpiNote,children:["Peak funding requirement against ",r(l.rentObligation)," contracted to landlords â ",l.capitalEfficiency,"% below a full-prepayment structure, with capital recycling ",l.capitalTurns,"à over the lease."]}),e.jsx(i,{style:t.meter,children:e.jsx(i,{style:{width:`${j}%`,height:5,backgroundColor:a.blue,borderRadius:3}})}),e.jsxs(o,{style:[t.kpiNote,{marginTop:0}],children:["Collections fund later tranches · capital recovered to date ",r(l.capitalRecovered)]})]}),e.jsxs(i,{style:{marginTop:14},children:[e.jsx(o,{style:t.sectionTitle,children:"Capital cycle"}),e.jsxs(o,{style:t.sectionSub,children:["Peak funding ",r(l.peakCapital)," supports ",r(l.rentObligation)," of contracted rent â capital recycles"," ",l.capitalTurns,"à as collections repay each tranche before the next is released"]}
1),e.jsx(A,{items:[{label:"Disbursements (cumulative)",color:_},{label:"Collections (cumulative)",color:L},{label:"Capital employed",color:I}]}),e.jsx(le,{series:l.capitalSeries,peak:l.peakCapital,peakMonth:l.peakMonth})]}),e.jsxs(i,{style:{marginTop:14},children:[e.jsx(o,{style:t.sectionTitle,children:"Revenue composition"}),e.jsx(o,{style:t.sectionSub,children:"Of every dirham financed, SplitRent retains the fee"}),e.jsxs(i,{style:{flexDirection:"row",height:16,borderRadius:3,marginBottom:6},children:[e.jsx(i,{style:{flex:Math.max(u,1),backgroundColor:oe,borderTopLeftRadius:3,borderBottomLeftRadius:3,justifyContent:"center",alignItems:"flex-end",paddingRight:4},children:e.jsxs(o,{style:{fontFamily:"Inter",fontSize:6.5,fontWeight:700,color:a.white},children:[D,"%"]})}),e.jsx(i,{style:{flex:Math.max(C,1),backgroundColor:L,borderTopRightRadius:3,borderBottomRightRadius:3}})]}),e.jsxs(i,{style:{flexDirection:"row",justifyContent:"space-between",marginBottom:2},children:[e.jsxs(o,{style:t.td,children:["Landlord pass-through (",D,"%)"]}),e.jsx(o,{style:[t.td,{fontWeight:700}],children:r(u)})]}),e.jsxs(i,{style:{flexDirection:"row",justifyContent:"space-between"},children:[e.jsxs(o,{style:t.td,children:["SplitRent fee revenue (",l.takeRate,"%)"]}),e.jsx(o,{style:[t.td,{fontWeight:700,color:P}],children:r(C)})]}),e.jsxs(o,{style:t.note,children:["The rent component passes through: SplitRent's income is the ",l.takeRate,"% fee, earned for converting a lump-sum annual rent into monthly instalments."]})]}),e.jsx(o,{style:t.note,children:"MODELLED. Policy: the first landlord cheque is released only after the tenant's first instalment clears, so capital is never advanced ahead of a proven payment. Subsequent tranches are assumed evenly spread and equal; actual disbursement dates are not recorded, so this is a funding estimate, not an accounting figure."})]}),e.jsxs(W,{children:[e.jsx(o,{style:t.eyebrow,children:"Liquidity"}),e.jsx(o,{style:t.h2,children:"Liquidity forecast"}),e.jsx(o,{style:t.sub,children:"Projected gross money-in by due date · excludes landlord disbursements (money-out)"}),e.jsxs(i,{style:t.kpiRow,children:[e.jsx(R,{label:"Past due (at risk)",value:r(c.overdue_amount),compact:!0}),e.jsx(R,{label:"Due next 30 days",value:r(l.next30),compact:!0}),e.jsx(R,{label:"Due next 90 days",value:r(l.next90),compact:!0}),e.jsx(R,{label:"Contracted term",value:r(l.termTotal),compact:!0,last:!0})]}),e.jsxs(i,{style:{marginTop:10},children:[e.jsx(A,{items:[{label:"Due to date",color:_},{label:"Projected",color:_,dashed:!0},{label:"Collected",color:L}]}),e.jsx(se,{forecast:n==null?void 0:n.forecast,asOf:y})]}),b.length>1&&e.jsxs(i,{style:{marginTop:16},children:[e.jsx(o,{style:t.sectionTitle,children:"Collections by month"}),e.jsxs(o,{style:t.sectionSub,children:["Last ",b.length," months · final period is month-to-date"]}),b.map(s=>e.jsx(O,{label:s.month===f?`${s.month} (MTD)`:s.month,value:s.collected,max:k,color:s.month===f?"#8FD9BF":L,right:r(s.collected)},s.month))]})]}),e.jsxs(W,{children:[e.jsx(o,{style:t.eyebrow,children:"Detail"}),e.jsx(o,{style:t.h2,children:"Obligor positions"}),e.jsxs(o,{style:t.sub,children:[x.length," agreements · past due first"]}),e.jsxs(i,{style:t.thead,fixed:!0,children:[e.jsx(o,{style:[t.th,{flex:2.3}],children:"Obligor"}),e.jsx(o,{style:[t.th,{flex:1.7}],children:"Status"}),e.jsx(o,{style:[t.th,{flex:1.5,textAlign:"right"}],children:"Instalment"}),e.jsx(o,{style:[t.th,{flex:3.6,textAlign:"right"}],children:"Collected / contracted"}),e.jsx(o,{style:[t.th,{flex:.9,textAlign:"right"}],children:"Paid"}),e.jsx(o,{style:[t.th,{flex:2.5,textAlign:"right"}],children:"Next due"})]}),x.map((s,w)=>{const T=s.overdue&&y&&s.next_due_date?te(s.next_due_date,y):0;return e.jsxs(i,{style:t.tr,wrap:!1,children:[e.jsxs(i,{style:{flex:2.3},children:[e.jsx(o,{style:t.td,children:s.name}),e.jsx(o,{style:[t.td,{fontSize:6.5,color:a.grayLight}],children:s.emirates_masked})]}),e.jsxs(o,{style:[t.td,{flex:1.7,fontSize:7,color:s.overdue?F:a.inkSoft}],children:[s.status,s.overdue?" · past due":""]}),e.jsx(o,{style:[t.tdR,{flex:1.5}],children:r(s.monthly_payment)}),e.jsxs(o,{style:[t.tdR,{flex:3.6}],children:[r(s.collected)," ",e.jsxs(o,{style:{color:a.grayLight},children:["/ ",r(s.total_repayable)]})]}),e.jsxs(o,{style:[t.tdR,{flex:.9}],children:[s.installments_paid,"/",s.installments_total]}),e.jsxs(i,{style:{flex:2.5},children:[e.jsx(o,{style:[t.tdR,{fontSize:7,color:s.overdue?F:a.inkSoft}],children:s.next_due_date?`${B(s.next_due_date)} · ${r(s.next_amount)}`:"â"}),T>0&&e.jsx(o,{style:[t.tdR,{fontSize:6.5,color:F}],children:`${T}d past due`})]})]},s.id||s.emirates_masked||w)}),e.jsxs(i,{style:[t.tr,{borderBottomWidth:0,borderTopWidth:1.2,borderTopColor:a.navy,marginTop:2}],children:[e.jsxs(o,{style:[t.td,{flex:2.3,fontWeight:700}],children:["Total · ",x.length," agreements"]}),e.jsx(o,{style:[t.td,{flex:1.7}],children:" "}),e.jsx(o,{style:[t.tdR,{flex:1.5,fontWeight:700}],children:r(l.totalsMonthly)}),e.jsxs(o,{style:[t.tdR,{flex:3.6,fontWeight:700}],children:[r(l.totalsCollected)," ",e.jsxs(o,{style:{fontWeight:400,color:a.grayLight},children:["/ ",r(l.totalsBook)]})]}),e.jsx(o,{style:[t.tdR,{flex:.9}],children:" "}),e.jsx(o,{style:[t.tdR,{flex:2.5}],children:" "})]}),e.jsxs(o,{style:t.note,children:["Obligor identity is limited to a masked Emirates ID; the full number is never exposed outside the database. Figures reconcile to the Receivables dashboard as of ",B(y),"."]})]})]})}async function ie({data:n,metrics:h}){Q();const m=new Date().toLocaleDateString("en-GB",{day:"2-digit",month:"long",year:"numeric",timeZone:Z});return X(Y.createElement(re,{data:n,metrics:h,generatedAt:m})).toBlob()}async function he({data:n,metrics:h}){const m=await ie({data:n,metrics:h}),c=(n==null?void 0:n.as_of)||H();ee(m,`splitrent-receivables-${c}.pdf`)}export{ie as buildReceivablesReportBlob,he as downloadReceivablesReport};
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.