PageSourceSearch

https://andromedaterminal.ru/assets/index-B96hE_YF.js

js andromedaterminal.ru collected 2026-10-06 07:00:36 UTC 21,377 bytes, 2 lines download raw bytes

1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/jspdf.es.min-BLOn7bGy.js","assets/index-BzOhS_Ua.js","assets/index-DHlDuoon.css","assets/app-body-B3H32O80.js","assets/app-body-B0Psoh9B.css","assets/jspdf.plugin.autotable-B0RJuIOq.js","assets/index-DcUryaOm.js"])))=>i.map(i=>d[i]);
2var rt=Object.defineProperty;var ct=(n,t,i)=>t in n?rt(n,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):n[t]=i;var x=(n,t,i)=>ct(n,typeof t!="symbol"?t+"":t,i);import{a2 as b,_ as w}from"./index-BzOhS_Ua.js";import{M as ut,b as dt,L as Y,c as mt,d as ht,e as pt}from"./access-Bd8dT19o.js";import{P as D,a as m}from"./PortSkeleton-A2WIhkRN.js";import"./app-body-B3H32O80.js";import"./index-BkwfyOLW.js";import"./index-B5TJCvXs.js";import"./iss-moex-api-yzaACcwi.js";import"./ui-settings-api-B6WS8Y5b.js";import"./dvd-api-WkEN9CoM.js";import"./CustomDatePicker-C4ooKsYW.js";import"./AppDatePicker-B-4sdOeE.js";import"./heatmap-CjYW4R1y.js";import"./locale-ru-D1fJfAfv.js";import"./isWithdrawnRatingLabel-L8k3L4Ni.js";import"./OptionsFilter-C-BViGqZ.js";import"./TextInput-Bg3k3lEz.js";import"./ChartSnapshotMenu-eDMaLqXZ.js";import"./createChartTooltip-DmoBiKif.js";const R={regular:"Inter-Regular",semibold:"Inter-SemiBold"},c={text:b.dark[6],muted:b.gray[6],line:b.gray[1],fill:b.gray[0],fillStrong:b.gray[2],stripe:b.dark[1],accent:b.blue[6],positive:b.green[6],negative:b.red[6],neutral:b.gray[5],series:[b.blue[6],b.teal[6],b.violet[6],b.orange[6],b.yellow[6],b.green[6],b.gray[6]]},h=n=>n==null||n===0?c.text:n>0?c.positive:c.negative,z=18,V=56,G=V+20,J=pt+12;class ft{constructor(t,i){x(this,"y",G);x(this,"pageWidth");x(this,"pageHeight");x(this,"left",dt);x(this,"right");x(this,"contentWidth");x(this,"contentTop",G);x(this,"footerSpace",J);x(this,"chromePages",new Set);this.pdf=t,this.options=i,this.pageWidth=t.internal.pageSize.getWidth(),this.pageHeight=t.internal.pageSize.getHeight(),this.right=this.pageWidth-ut,this.contentWidth=this.right-this.left,this.drawChrome()}get bottom(){return this.pageHeight-J}drawChrome(){var a,e;const t=this.pdf.getCurrentPageInfo().pageNumber;if(this.chromePages.has(t))return;this.chromePages.add(t);const i=this.left+Y+24;this.pdf.addImage(mt,"PNG",this.left,z,Y,ht),this.text(this.options.title,i,z+14,{font:R.semibold,size:14}),this.text(this.options.subtitle,i,z+28,{size:9,color:c.muted}),this.text(this.options.generatedAt,this.right,z+14,{size:9,color:c.muted,align:"right"}),this.pdf.setDrawColor(c.line).setLineWidth(1).line(this.left,V,this.right,V),(e=(a=this.options).drawFooter)==null||e.call(a,this.pdf,this.options.generatedAt),this.y=G}newPage(){this.pdf.addPage(),this.drawChrome()}ensure(t){this.y+t>this.bottom&&this.newPage()}space(t){this.y+=t}setFont(t=R.regular,i=9,a=c.text){this.pdf.setFont(t,"normal").setFontSize(i).setTextColor(a)}text(t,i,a,{font:e,size:l,color:o,align:s="left"}={}){this.setFont(e,l,o),this.pdf.text(t,i,a,{align:s})}clippedText(t,i,a,e,l={}){this.setFont(l.font,l.size,l.color);let o=t;for(;o.length>1&&this.pdf.getTextWidth(o)>e;)o=`${o.slice(0,-2).trimEnd()}…`;this.pdf.text(o,i,a,{align:l.align??"left"})}sectionTitle(t,i){this.ensure(i==null?30:42),this.text(t,this.left,this.y+12,{font:R.semibold,size:13}),this.y+=22,i!=null&&(this.text(i,this.left,this.y+8,{size:9,color:c.muted}),this.y+=14),this.y+=6}subtitle(t,i=0){this.ensure(26+i),this.text(t,this.left,this.y+10,{font:R.semibold,size:10.5}),this.y+=20}paragraph(t,i={}){const a=i.size??9,e=a*1.35;this.setFont(i.font,a,i.color??c.muted);const l=this.pdf.splitTextToSize(t,this.contentWidth);this.ensure(l.length*e+4),l.forEach((o,s)=>{this.pdf.text(o,this.left,this.y+a+s*e)}),this.y+=l.length*e+6}}const M=6,L=46,A=(n,t,i=4)=>{const a=Math.ceil(t.length/i),e=(n.contentWidth-M*(i-1))/i;n.ensure(a*(L+M)),t.forEach((l,o)=>{const s=n.left+o%i*(e+M),r=n.y+Math.floor(o/i)*(L+M);n.pdf.setFillColor(c.fill).roundedRect(s,r,e,L,4,4,"F"),n.clippedText(l.label,s+10,r+13,e-20,{size:8,color:c.muted}),n.clippedText(l.value,s+10,r+30,e-20,{font:R.semibold,size:12,color:l.color??c.text}),l.note!=null&&n.clippedText(l.note,s+10,r+41,e-20,{size:7,color:c.muted})}),n.y+=a*(L+M)+4},N=14,Z=(n,t,i,a)=>{let e=i;t.forEach(l=>{n.pdf.setFillColor(l.color).rect(e,a-7,8,8,"F"),n.text(l.label,e+12,a,{size:8,color:c.muted}),n.setFont(R.regular,8),e+=12+n.pdf.getTextWidth(l.label)+16}
2)},tt=64,et=16,B=4,gt=n=>{const t=Math.min(...n),i=Math.max(...n);if(t===i)return{min:t-1,max:i+1};const a=(i-t)*.06;return{min:t-a,max:i+a}},nt=(n,t,i,a,e,l,o)=>{for(let s=0;s<=B;s+=1){const r=l.min+(l.max-l.min)*s/B,d=e-(e-a)*s/B;n.pdf.setDrawColor(c.line).setLineWidth(.5).line(t,d,i,d),n.text(o(r),t-6,d+2.5,{size:7,color:c.muted,align:"right"})}},bt=(n,t,i,{height:a,formatValue:e,formatDate:l,legend:o})=>{if(t.length===0)return;n.ensure(a+N+8);const s=n.left+tt,r=n.right,d=n.y+N,p=n.y+a-et,g=gt(t.map(f=>f.value)),u=f=>t.length===1?s:s+(r-s)*f/(t.length-1),E=f=>p-(p-d)*(f-g.min)/(g.max-g.min);i.length>0&&Z(n,[{label:o.deposit,color:c.positive},{label:o.withdrawal,color:c.negative}],s,n.y+8),nt(n,s,r,d,p,g,e),n.pdf.setDrawColor(c.accent).setLineWidth(1.4),t.forEach((f,y)=>{y>0&&n.pdf.line(u(y-1),E(t[y-1].value),u(y),E(f.value))});const O=new Map(t.map((f,y)=>[f.date,y]));i.forEach(f=>{const y=O.get(f.date);y!=null&&n.pdf.setFillColor(f.amount>=0?c.positive:c.negative).circle(u(y),E(t[y].value),3,"F")}),[...new Set([0,Math.floor((t.length-1)/2),t.length-1])].forEach(f=>{const y=f===0?"left":f===t.length-1?"right":"center";n.text(l(t[f].date),u(f),p+11,{size:7,color:c.muted,align:y})}),n.y+=a+8},U=(n,t,{height:i,series:a,formatValue:e})=>
2{if(t.length===0)return;n.ensure(i+N+8);const l=n.left+tt,o=n.right,s=n.y+N,r=n.y+i-et,d=t.map(v=>v.values.filter(P=>P>0).reduce((P,F)=>P+F,0)),p=t.map(v=>v.values.filter(P=>P<0).reduce((P,F)=>P+F,0)),g=Math.max(...d,0),u=Math.min(...p,0),E=g===u?{min:0,max:1}:{min:u,max:g+(g-u)*.06},O=v=>r-(r-s)*(v-E.min)/(E.max-E.min),W=(o-l)/t.length,f=Math.min(W*.6,36);Z(n,a,l,n.y+8),nt(n,l,o,s,r,E,e),t.forEach((v,P)=>{const F=l+W*P+(W-f)/2;let j=0,X=0;v.values.forEach((S,st)=>{var K;if(S===0)return;const q=S>0?j:X,H=q+S;n.pdf.setFillColor(((K=a[st])==null?void 0:K.color)??c.neutral).rect(F,Math.min(O(q),O(H)),f,Math.abs(O(q)-O(H)),"F"),S>0?j=H:X=H})});const y=Math.max(1,Math.ceil(t.length*34/(o-l)));t.forEach((v,P)=>{(P%y===0||P===t.length-1)&&n.text(v.label,l+W*P+W/2,r+11,{size:7,color:c.muted,align:"center"})}),n.y+=i+8},Q=18,$=250,yt=110,Pt=(n,t)=>{if(t.length===0)return;const i=Math.max(...t.map(l=>Math.abs(l.value)),1e-9),a=n.left+$,e=n.contentWidth-$-yt;t.forEach(l=>{n.ensure(Q);const o=n.y+12,s=e*Math.abs(l.value)/i;n.clippedText(l.label,n.left,o,$-10,{size:8.5}),n.pdf.setFillColor(c.fill).rect(a,o-9,e,12,"F"),n.pdf.setFillColor(l.color??(l.value<0?c.negative:c.accent)).rect(a,o-9,s,12,"F"),l.note!=null&&n.text(l.note,a+s+6,o,{size:7.5,color:l.noteColor??c.muted}),n.text(l.text,n.right,o,{size:8.5,align:"right"}),n.y+=Q}),n.y+=6},Ct=(n,t)=>{const i=t.filter(o=>o.value>0),a=i.reduce((o,s)=>o+s.value,0),e=Math.ceil(t.length/2);if(n.ensure(32+e*14+8),a>0){let o=n.left;i.forEach(s=>{const r=n.contentWidth*s.value/a;n.pdf.setFillColor(s.color).rect(o,n.y,r,16,"F"),o+=r})}n.y+=30;const l=n.contentWidth/2;t.forEach((o,s)=>{const r=n.left+s%2*l,d=n.y+Math.floor(s/2)*14;n.pdf.setFillColor(o.color).rect(r,d-7,8,8,"F"),n.clippedText(o.label,r+14,d,l-110,{size:8.5}),n.text(o.text,r+l-24,d,{size:8.5,color:c.muted,align:"right"})}),n.y+=e*14+8},T=(n,{head:t,body:i,foot:a,numeric:e,signs:l,signColumns:o=[]})=>{n.ensure(48),n.pdf.autoTable({startY:n.y,margin:{top:n.contentTop,left:n.left,right:n.pageWidth-n.right,bottom:n.footerSpace},head:[t],body:i,foot:a==null?void 0:[a],showFoot:"lastPage",styles:{font:R.regular,fontStyle:"normal",fontSize:8,cellPadding:3,textColor:c.text},headStyles:{font:R.semibold,fontStyle:"normal",fillColor:c.fill,textColor:c.text},footStyles:{font:R.semibold,fontStyle:"normal",fillColor:c.fill,textColor:c.text},alternateRowStyles:{fillColor:c.stripe},didParseCell:s=>{var d;if(e.includes(s.column.index)&&(s.cell.styles.halign="right"),s.section!=="body"||l==null||!o.includes(s.column.index))return;const r=(d=l[s.row.index])==null?void 0:d[s.column.index];r!=null&&r!==0&&(s.cell.styles.textColor=r>0?c.positive:c.negative)},didDrawPage:()=>n.drawChrome()}),n.y=n.pdf.lastAutoTable.finalY+14},I=150,lt=10,k=(n,t)=>n===t?t:`${n} (${t})`,C=n=>n.reduce((t,i)=>t+i,0),ot=n=>[{label:n.kinds[m.dividend],color:c.series[0]},{label:n.kinds[m.coupon],color:c.series[1]},{label:n.kinds[m.amortization],color:c.neutral}],it=(n,t)=>n.map(i=>({label:t.month(i.month),values:[i[m.dividend],i[m.coupon],i[m.amortization]]})),_=({canvas:n,labels:t})=>{n.paragraph(t.sectionEmpty)},Tt=(n,t)=>{var o,s,r,d;const{canvas:i,labels:a,format:e}=n;if(t==null){_(n);return}const l=a.summary;A(i,[{label:l.startValue,value:e.money(t.startValue),note:e.date(t.startDate)},{label:l.endValue,value:e.money(t.endValue),note:e.date(t.endDate)},{label:l.deposits,value:e.money(t.deposits)},{label:l.withdrawals,value:e.money(t.withdrawals)},{label:l.result,value:e.money(t.result),note:l.resultHint,color:h(t.result)},{label:l.totalResult,value:e.money(t.totalResult),note:l.incomeNote,color:h(t.totalResult)},{label:l.realized,value:e.money(t.realized),color:h(t.realized)},{label:l.income,value:e.money(t.income),color:h(t.income)},{label:l.twr,value:e.percent(t.twrPct),color:h(t.twrPct)},{label:l.mwr,value:e.percent(t.mwrPct),color:h(t.mwrPct)},{label:l.drawdown,value:e.percent(t.maxDrawdownPct),color:h(t.maxDrawdownPct)},{label:l.volatility,value:e.percent(t.volatilityPct)},{label:l.fees,value:e.money(t.fees)},{label:l.marginCost,value:e.money(t.marginCost)},{label:l.expenses,value:e.money(t.expenses)},{label:l.bestDay,value:e.percent(((o=t.bestDay)==null?void 0:o.pct)??null),note:t.bestDay==null?void 0:e.date(t.bestDay.date),color:h(((s=t.bestDay)==null?void 0:s.pct)??null)},{label:l.worstDay,value:e.percent(((r=t.worstDay)==null?void 0:r.pct)??null),note:t.worstDay==null?void 0:e.date(t.worstDay.date),color:h(((d=t.worstDay)==null?void 0:d.pct)??null)}]),i.subtitle(l.curveTitle,I+30),bt(i,t.curve,t.flows,{height:I,formatValue:p=>e.money(p),formatDate:p=>e.date(p),legend:{deposit:l.legendDeposit,withdrawal:l.legendWithdrawal}}),i.paragraph(l.tradingDays(t.tradingDays,t.skippedDays))},xt=(n,t)=>{const{canvas:i,labels:a,format:e}=n;if(t==null||t.daysUsed===0){_(n);return}const l=a.attribution,{columns:o}=l;if(A(i,[{label:l.portfolio,value:e.percent(t.portfolioReturnPct),color:h(t.portfolioReturnPct)},{label:l.benchmark,value:e.percent(t.benchmarkReturnPct),color:h(t.benchmarkReturnPct)},{label:l.active,value:e.percent(t.activeReturnPct),color:h(t.activeReturnPct)},{label:l.allocation,value:e.percent(t.total.allocation),color:h(t.total.allocation)},{label:l.selection,value:e.percent(t.total.selection),color:h(t.total.selection)}],5),i.paragraph(l.days(t.daysUsed,t.daysSkipped)),t.missingIndexes.length>0&&i.paragraph(l.missingIndexes(t.missingIndexes.join(", ")),{color:c.negative}),i.subtitle(l.segmentsTitle,60),T(i,{head:[o.segment,o.index,o.weight,o.benchWeight,o.return,o.benchReturn,o.allocation,o.selection,o.total],body:t.segments.map(s=>[a.classNames[s.segment],s.indexTicker??l.noIndex,e.percent(s.weightPct),e.percent(s.benchmarkWeightPct),e.percent(s.returnPct),e.percent(s.benchmarkReturnPct),e.percent(s.allocation),e.percent(s.selection),e.percent(s.total)]),numeric:[2,3,4,5,6,7,8],signs:t.segments.map(s=>
2[null,null,null,null,s.returnPct,s.benchmarkReturnPct,s.allocation,s.selection,s.total]),signColumns:[4,5,6,7,8]}),t.positions.length>0){const s=[...t.positions].sort((r,d)=>Math.abs(d.contributionPct)-Math.abs(r.contributionPct)).slice(0,lt);i.subtitle(l.positionsTitle,60),T(i,{head:[a.columns.instrument,o.segment,o.weight,o.return,o.contribution,o.alpha],body:s.map(r=>[k(r.name,r.ticker),a.classNames[r.segment],e.percent(r.weightPct),e.percent(r.returnPct),e.percent(r.contributionPct),e.percent(r.alphaContributionPct)]),numeric:[2,3,4,5],signs:s.map(r=>[null,null,null,r.returnPct,r.contributionPct,r.alphaContributionPct]),signColumns:[3,4,5]})}},kt=(n,t,i)=>{const{canvas:a,labels:e,format:l}=n;if(t.daysUsed===0){_(n);return}const o=e.attribution,{columns:s}=o;A(a,[{label:o.portfolio,value:l.percent(t.portfolioReturnPct),color:h(t.portfolioReturnPct)},{label:o.benchmark,value:l.percent(t.benchmarkReturnPct),color:h(t.benchmarkReturnPct)},{label:o.active,value:l.percent(t.alphaPct),color:h(t.alphaPct),note:o.methodBeta}],3),a.paragraph(o.securityDays(t.daysUsed)),i&&a.paragraph(o.securityDegraded,{color:c.negative}),t.withoutPrice.length>0&&a.paragraph(o.withoutPrice(t.withoutPrice.join(", ")),{color:c.negative});const r=p=>{if(p.isCash)return o.cash;const g=k(p.name,p.key);return p.inPortfolio?g:`${g} · ${o.onlyBenchmark}`},d=(p,g)=>{a.subtitle(p,60),T(a,{head:[e.columns.instrument,s.portfolioWeight,s.benchmarkWeight,s.activeWeight,s.securityReturn,s.portfolioContribution,s.benchmarkContribution,s.securityAlpha],body:g.map(u=>[r(u),l.percent(u.portfolioWeightPct),l.percent(u.benchmarkWeightPct),l.percent(u.activeWeightPct),l.percent(u.returnPct),l.percent(u.portfolioContributionPct),l.percent(u.benchmarkContributionPct),l.percent(u.alphaPct)]),numeric:[1,2,3,4,5,6,7],signs:g.map(u=>[null,null,null,u.activeWeightPct,u.returnPct,u.portfolioContributionPct,u.benchmarkContributionPct,u.alphaPct]),signColumns:[3,4,5,6,7]})};d(o.topTitle,t.top),d(o.bottomTitle,t.bottom)},vt=(n,t)=>{if(t.securityAttribution!=null){kt(n,t.securityAttribution,t.securityAttributionDegraded);return}xt(n,t.attribution)},Rt=(n,t)=>{const{canvas:i,labels:a,format:e}=n;if(t==null||t.length===0){_(n);return}Ct(i,t.map((o,s)=>({label:a.classNames[o.key],value:o.value,color:c.series[s%c.series.length],text:`${e.money(o.value)} · ${e.percent(o.weightPct)}`})));const l=a.columns;T(i,{head:[l.assetClass,l.count,l.value,l.weight,l.invested,l.pnl,l.pnlPct,l.fees],body:t.map(o=>[a.classNames[o.key],e.qty(o.count),e.money(o.value),e.percent(o.weightPct),e.money(o.invested),e.money(o.pnl),e.percent(o.pnlPct),e.money(o.feeTotal)]),foot:[l.total,e.qty(C(t.map(o=>o.count))),e.money(C(t.map(o=>o.value))),t.every(o=>o.weightPct!=null)?e.percent(C(t.map(o=>o.weightPct??0))):e.percent(null),e.money(C(t.map(o=>o.invested))),e.money(C(t.map(o=>o.pnl))),"",e.money(C(t.map(o=>o.feeTotal)))],numeric:[1,2,3,4,5,6,7],signs:t.map(o=>[null,null,null,null,null,o.pnl,o.pnlPct,null]),signColumns:[5,6]})},_t=(n,t)=>{const{canvas:i,labels:a,format:e}=n;if(t==null||t.length===0){_(n);return}i.subtitle(a.positions.top,60),Pt(i,t.slice(0,lt).map(r=>({label:k(r.name,r.ticker),value:r.value,text:e.money(r.value),note:e.percent(r.pnlPct),noteColor:h(r.pnl)})));const l=a.columns,o=t.some(r=>(r.income??0)!==0),s=r=>o?r:[...r.slice(0,9),...r.slice(10)];T(i,{head:s([l.instrument,l.assetClass,l.qty,l.avgPrice,l.lastPrice,l.value,l.weight,l.pnl,l.pnlPct,l.income,l.fees,l.firstTradeDate]),body:t.map(r=>s([k(r.name,r.ticker),a.classNames[r.assetClass],e.qty(r.qty),e.price(r.avgPrice),e.price(r.lastPrice),e.money(r.value),e.percent(r.weightPct),e.money(r.pnl),e.percent(r.pnlPct),e.money(r.income??0),e.money(r.feeTotal),e.date(r.firstTradeDate)])),foot:s([l.total,"","","","",e.money(C(t.map(r=>r.value))),"",e.money(C(t.map(r=>r.pnl))),"",e.money(C(t.map(r=>r.income??0))),e.money(C(t.map(r=>r.feeTotal))),""]),numeric:o?[2,3,4,5,6,7,8,9,10]:[2,3,4,5,6,7,8,9],signs:t.map(r=>s([null,null,null,null,null,null,null,r.pnl,r.pnl,null,null,null])),signColumns:[7,8]})},Et=(n,t,i)=>n.map(a=>[i.date(a.recordDate),k(a.name,a.ticker),a.isForecast?`${t.kinds[a.kind]} · ${t.income.forecastMark}`:t.kinds[a.kind],i.qty(a.qty),i.price(a.perUnit),i.money(a.amount)]),at=({canvas:n,labels:t,format:i},a)=>{const e=t.columns;T(n,{head:[e.recordDate,e.instrument,e.kind,e.qtyOnRecord,e.perUnit,e.amount],body:Et(a,t,i),foot:[e.total,"","","","",i.money(C(a.map(l
2=>l.amount)))],numeric:[3,4,5]})},Dt=(n,t)=>{const{canvas:i,labels:a,format:e}=n;if(t==null||t.events.length===0){_(n);return}A(i,[{label:a.income.total,value:e.money(t.totals.income),color:h(t.totals.income)},{label:a.kinds[m.dividend],value:e.money(t.totals[m.dividend])},{label:a.kinds[m.coupon],value:e.money(t.totals[m.coupon])},{label:a.kinds[m.amortization],value:e.money(t.totals[m.amortization]),note:a.summary.incomeNote}]),i.subtitle(a.income.byMonth,I+30),U(i,it(t.months,e),{height:I,series:ot(a),formatValue:l=>e.money(l)}),i.subtitle(a.income.byTicker,60),T(i,{head:[a.columns.instrument,a.kinds[m.dividend],a.kinds[m.coupon],a.kinds[m.amortization],a.columns.total],body:t.byTicker.map(l=>[k(l.name,l.ticker),e.money(l[m.dividend]),e.money(l[m.coupon]),e.money(l[m.amortization]),e.money(l.total)]),numeric:[1,2,3,4]}),at(n,t.events)},It=(n,t)=>{const{canvas:i,labels:a,format:e}=n;if(t==null||t.events.length===0){_(n);return}A(i,[{label:a.income.upcomingTotal,value:e.money(t.totals.income),note:t.forecastCount>0?a.income.forecastCount(t.forecastCount):void 0},{label:a.kinds[m.dividend],value:e.money(t.totals[m.dividend])},{label:a.kinds[m.coupon],value:e.money(t.totals[m.coupon])},{label:a.kinds[m.amortization],value:e.money(t.totals[m.amortization]),note:a.summary.incomeNote}]),i.subtitle(a.income.byMonth,I+30),U(i,it(t.months,e),{height:I,series:ot(a),formatValue:l=>e.money(l)}),at(n,t.events)},At=(n,t)=>{var r,d,p,g;const{canvas:i,labels:a,format:e}=n;if(t==null||t.trades.length===0&&t.redemptions.length===0){_(n);return}const l=a.realized,o=u=>u==null?void 0:`${k(u.name,u.ticker)} · ${e.date(u.date)}`;A(i,[{label:l.total,value:e.money(t.total),color:h(t.total)},{label:l.count,value:e.qty(t.trades.length),note:l.counts(t.profitableCount,t.losingCount)},{label:l.best,value:e.money(((r=t.best)==null?void 0:r.realized)??null),note:o(t.best),color:h(((d=t.best)==null?void 0:d.realized)??null)},{label:l.worst,value:e.money(((p=t.worst)==null?void 0:p.realized)??null),note:o(t.worst),color:h(((g=t.worst)==null?void 0:g.realized)??null)}]);const s=a.columns;t.trades.length>0&&T(i,{head:[s.date,s.instrument,s.type,s.qty,s.price,s.fee,s.result],body:t.trades.map(u=>[e.date(u.date),k(u.name,u.ticker),a.tradeTypes[u.type],e.qty(u.qty),e.price(u.price),e.money(u.fee),e.money(u.realized)]),foot:[s.total,"","","","",e.money(C(t.trades.map(u=>u.fee))),e.money(t.total)],numeric:[3,4,5,6],signs:t.trades.map(u=>[null,null,null,null,null,null,u.realized]),signColumns:[6]}),t.redemptions.length>0&&(i.subtitle(l.redemptions,60),T(i,{head:[s.recordDate,s.instrument,s.qtyOnRecord,s.perUnit,s.amount],body:t.redemptions.map(u=>[e.date(u.recordDate),k(u.name,u.ticker),e.qty(u.qty),e.price(u.perUnit),e.money(u.amount)]),foot:[l.redemptionsTotal,"","","",e.money(t.redemptionsTotal)],numeric:[2,3,4]}))},Ot=(n,t)=>{const{canvas:i,labels:a,format:e}=n;if(t==null||t.tradesCount===0&&t.marginCost===0&&t.expenses===0){_(n);return}const l=a.fees;A(i,[{label:l.total,value:e.money(t.total)},{label:l.marginCost,value:e.money(t.marginCost)},{label:l.expenses,value:e.money(t.expenses)},{label:l.tradesCount,value:e.qty(t.tradesCount)}],4),i.subtitle(l.byMonth,I+30),U(i,t.months.map(o=>({label:e.month(o.month),values:[o.fees,o.marginCost,o.expenses]})),{height:I,series:[{label:l.total,color:c.series[0]},{label:l.marginCost,color:c.series[3]},{label:l.expenses,color:c.series[1]}],formatValue:o=>e.money(o)}),t.byPurpose.length>0&&(i.subtitle(l.byPurpose,60),T(i,{head:[l.purposeColumn,l.countColumn,a.columns.fees],body:t.byPurpose.map(o=>[o.purpose??l.noPurpose,e.qty(o.count),e.money(o.amount)]),foot:[a.columns.total,e.qty(t.byPurpose.reduce((o,s)=>o+s.count,0)),e.money(t.expenses)],numeric:[1,2]})),t.byTicker.length>0&&(i.subtitle(l.byTicker,60),T(i,{head:[a.columns.instrument,a.columns.trades,a.columns.fees],body:t.byTicker.map(o=>[k(o.name,o.ticker),e.qty(o.tradesCount),e.money(o.fees)]),foot:[a.columns.total,e.qty(t.tradesCount),e.money(t.total)],numeric:[1,2]}))},Wt=(n,t,i)=>{const{canvas:a,labels:e,format:l}=n;switch(a.sectionTitle(e.sectionTitles[i],`${l.date(t.fromIso)} — ${l.date(t.toIso)}`),i){case D.summary:Tt(n,t.summary);break;case D.attribution:vt(n,t);break;case D.classes:Rt(n,t.classes);break;case D.positions:_t(n,t.positions);break;case D.income:Dt(n,t.income);break;case D.upcoming:It(n,t.upcoming);break;case D.realized:At(n,t.realized);break;case D.fees:Ot(n,t.fees);break;default:{const o=i;throw new Error(`Раздел отчёта без отрисовки: ${String(o)}`)}}},Ft=({canvas:n,labels:t},i)=>{const a=[i.journal?t.degraded.journal:null,i.prices?t.degraded.prices:null,i.payments?t.degraded.payments:null].filter(e=>e!=null);a.length>0&&n.paragraph(a.join(" "),{color:c.negative})},Mt=async(n,t,i,a={})=>{const[{jsPDF:e}]=await Promise.all([w(()=>import("./jspdf.es.min-BLOn7bGy.js").then(r=>r.j),__vite__mapDeps([0,1,2,3,4])),w(()=>import("./jspdf.plugin.autotable-B0RJuIOq.js").then(r=>r.j),__vite__mapDeps([5,1,2,0,3,4])),w(()=>import("./index-DcUryaOm.js"),__vite__mapDeps([6,0,1,2,3,4]))]),l=new e({orientation:"l",unit:"pt",format:"A4"}),o=new ft(l,{title:t.title,subtitle:t.subtitle,generatedAt:t.generatedAt,drawFooter:a.drawFooter}),s={canvas:o,labels:t,format:i};return Ft(s,n.degraded),n.sections.forEach((r,d)=>{d>0&&o.newPage(),Wt(s,n,r)}),l},te=async(n,t,i,{fileName:a,...e})=>{(await Mt(n,t,i,e)).save(`${a}.pdf`)};export{te as downloadPortReport,Mt as renderPortReport};

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.