PSE {{ t('nav.subtitle') }}
PSEI
{{ fmtPoint(hdrPsei.currentPoint) }}
{{ hdrPsei.changePoint != null ? (hdrPsei.changePoint > 0 ? '+' : '') + fmtPoint(hdrPsei.changePoint) : '' }}
({{ hdrPsei.changePct > 0 ? '+' : '' }}{{ Number(hdrPsei.changePct).toFixed(2) }}%)
ALL
{{ fmtPoint(hdrAll.currentPoint) }}
{{ hdrAll.changePoint != null ? (hdrAll.changePoint > 0 ? '+' : '') + fmtPoint(hdrAll.changePoint) : '' }}
({{ hdrAll.changePct > 0 ? '+' : '' }}{{ Number(hdrAll.changePct).toFixed(2) }}%)
{{ t('nav.notifHeader') }}
{{ t('nav.unread',{n:inboxUnread}) }}
{{ t('nav.markAllRead') }}
{{ t('nav.noMessages') }}
{{ msg.title }}
{{ fmtInboxTime(msg.created_at) }}
{{ t('nav.viewDetail') }}
{{ t('nav.markRead') }}
{{ t('nav.moreMessages') }}
{{ t('nav.subSettings') }}
{{ currentUser.username }}
{{ t('nav.online') }}
🪙{{ currentUser.aiCoinBalance }}
{{ planTierName(currentUser.planLevel||0) }}
{{ t('nav.theme') }}
{{ t('lang.label') }}
EN
{{ t('lang.zh') }}
{{ t('wl.empty') }}
{{ t('wl.emptyHint') }} ☆ {{ t('wl.emptyHint2') }}
{{ item.symbol }}
{{ item.companyName || '' }}
{{ sectorLabel(item.sector) }}
{{ wlDisplayPrice(item) }}
{{ t('wl.auction') }}
{{ item.changePct != null ? (item.changePct > 0 ? '+' : '') + Number(item.changePct).toFixed(2) + '%' : '--' }}
wlMoreAction(cmd, item)">
{{ t('wl.viewQuote') }}
{{ t('wl.tradeDetail') }}
{{ t('wl.blockTrade') }}
{{ t('wl.brokerHolding') }}
{{ item.changeAmt != null ? (item.changeAmt > 0 ? '+' : '') + Number(item.changeAmt).toFixed(3) : '--' }}
·
{{ t('wl.volume', {n: item.totalVolume ? fmt(item.totalVolume) : '--'}) }}
·
{{ item.date.slice(5) }}
| {{ t('wl.col.symbol') }} | {{ t('wl.col.name') }} | {{ t('wl.col.sector') }} | {{ t('wl.col.price') }} | {{ t('wl.col.changePct') }} | {{ t('wl.col.changeAmt') }} | {{ t('wl.col.volume') }} | {{ t('wl.col.date') }} | {{ t('wl.col.actions') }} |
|---|---|---|---|---|---|---|---|---|
| {{ item.symbol }} | {{ sectorLabel(item.sector) }} | {{ wlDisplayPrice(item) }} {{ t('wl.auction') }} | {{ item.changePct != null ? (item.changePct > 0 ? '+' : '') + Number(item.changePct).toFixed(2) + '%' : '--' }} | {{ item.changeAmt != null ? (item.changeAmt > 0 ? '+' : '') + Number(item.changeAmt).toFixed(3) : '--' }} | {{ item.totalVolume ? fmt(item.totalVolume) : '--' }} | {{ item.date || '--' }} |
|
{{ t('wl.footer.pre') }}{{ watchlist.items.length }} / {{ currentUser.watchlistLimit || 0 }} {{ t('wl.footer.suf') }}
{{ t('scr.symbolLabel') }}
{{s.v}}{{ t('scr.realtime') }}{{s.name}}{{sectorLabel(s.sector)}}
{{ t('scr.sectorLabel') }}
{{ t('scr.mcap') }}
~
{{ t('scr.pe') }}
~
{{ t('scr.divYield') }}
~
{{ t('scr.divYieldNote') }}
{{ t('scr.avg5dAmt') }}
~
{{ t('scr.avg5dAmtNote') }}
{{ t('scr.ma') }}
{{ t('scr.ma5up') }}
{{ t('scr.ma20up') }}
{{ t('scr.ma60up') }}
{{ t('scr.ma250up') }}
{{ t('scr.ma5dn') }}
{{ t('scr.ma20dn') }}
{{ t('scr.ma60dn') }}
{{ t('scr.ma250dn') }}
MACD
{{ t('scr.noLimit') }}
{{ t('scr.golden') }}
{{ t('scr.death') }}
KDJ
{{ t('scr.noLimit') }}
{{ t('scr.golden') }}
{{ t('scr.death') }}
| {{ t('scr.col.code') }} | {{ t('scr.col.name') }} | {{ t('scr.col.sector') }} | {{ t('scr.col.price') }} | {{ t('scr.col.changePct') }} | {{ t('scr.col.changeAmt') }} | {{ t('scr.col.mcap') }} | {{ t('scr.col.pe') }} | {{ t('scr.col.divYield') }} | {{ t('scr.col.avg5dAmt') }} | {{ t('scr.col.volume') }} | {{ t('scr.col.date') }} | {{ t('scr.col.actions') }} |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ row.symbol }} | {{ sectorLabel(row.sector) }} | {{ row.currentPrice ? Number(row.currentPrice).toFixed(3) : '--' }} | {{ row.changePct != null ? (row.changePct > 0 ? '+' : '') + Number(row.changePct).toFixed(2) + '%' : '--' }} | {{ row.changeAmt != null ? (row.changeAmt > 0 ? '+' : '') + Number(row.changeAmt).toFixed(3) : '--' }} | {{ row.marketCap != null ? row.marketCap.toFixed(1) : '--' }} | {{ row.pe != null ? row.pe.toFixed(2) : '--' }} | {{ row.divYield != null ? row.divYield.toFixed(2) + '%' : '--' }} | {{ row.avg5dAmt != null ? fsrFmtM(row.avg5dAmt) : '--' }} | {{ row.totalVolume ? fmt(row.totalVolume) : '--' }} | {{ row.date || '--' }} |
|
{{ t('scr.noResult') }}
{{ row.symbol }}
{{ row.companyName || '--' }}
{{ row.changePct!=null?(row.changePct>0?'+':'')+Number(row.changePct).toFixed(2)+'%':'--' }}
{{ row.currentPrice?Number(row.currentPrice).toFixed(3):'--' }}
{{ row.changeAmt!=null?(row.changeAmt>0?'+':'')+Number(row.changeAmt).toFixed(3):'' }}
{{ t('scr.mcapLabel', {n: row.marketCap!=null?row.marketCap.toFixed(1):'--'}) }}
PE {{ row.pe!=null?row.pe.toFixed(1):'--' }}
{{ t('scr.divLabel', {n: row.divYield!=null?row.divYield.toFixed(2)+'%':'--'}) }}
{{ t('scr.avg5dAmtLabel', {n: row.avg5dAmt!=null?fsrFmtM(row.avg5dAmt):'--'}) }}
{{ row.date?row.date.slice(5):'' }}
{{ dailySymbol }} {{ dailyQuote?.date || dailyDate }}
{{ mktStatusLabel || '--' }}
{{ t('msg.noDataWaitOrTrigger') }}
{{ fmtPrice(dailyQuote.projectedPrice) }}
{{ t('price.auctionForecast') }}
{{ t('price.prevClose') }} {{ fmtPrice(dailyQuote.prevClose) }}
{{ fmtPrice(dailyQuote?.currentPrice) }}
{{ dailyQuote?.changeAmt != null ? (dailyQuote.changeAmt > 0 ? '+' : '') + fmtPrice(dailyQuote.changeAmt) : '' }}
{{ dailyQuote?.changePct != null ? (dailyQuote.changePct > 0 ? '+' : '') + dailyQuote.changePct + '%' : '' }}
({{ dailyQuote.updatedAt.replace(/^\d{4}-/, '') }})
| {{ t('col.prevClose') }} | {{ fmtPrice(dailyQuote?.prevClose) }} | {{ t('col.open') }} | {{ fmtPrice(dailyQuote?.openPrice) }} |
| {{ t('col.high') }} | {{ fmtPrice(dailyQuote?.highPrice) }} | {{ t('col.low') }} | {{ fmtPrice(dailyQuote?.lowPrice) }} |
| {{ t('col.avgPrice') }} | {{ fmtPrice(dailyQuote?.avgPrice) }} | {{ t('col.volume') }} | {{ dailyQuote?.totalVolume != null ? fmt(dailyQuote.totalVolume) : '--' }} |
| {{ t('col.turnover') }} | {{ dailyQuote?.totalValue != null ? '₱' + fmt(dailyQuote.totalValue) : '--' }} | {{ t('form.initiative') }} | ↑{{ dailyQuote.initiativeBuyPct }}% / ↓{{ dailyQuote.initiativeSellPct }}% -- |
| {{ t('col.week52') }} | {{ fmtPrice(dailyQuote?.week52Low) }} – {{ fmtPrice(dailyQuote?.week52High) }} | {{ t('col.sector') }} | s.v === dailySymbol).sector)" style="cursor:pointer;color:var(--ac);text-decoration:underline dotted;text-underline-offset:3px"> {{ sectorLabel(symbols.find(s => s.v === dailySymbol)?.sector) }} -- |
| {{ t('col.turnoverRate') }} | {{ (dailyQuote.totalVolume / dailyQuote.floatShares * 100).toFixed(3) }}% -- {{ t('daily.floatNote') }} {{ fmt(dailyQuote.floatShares) }} | ||
| {{ t('tab.sim.pending') }} | {{ t('col.qty') }} | {{ t('col.bidPrice') }} | {{ t('col.askPrice') }} | {{ t('col.qty') }} | {{ t('tab.sim.pending') }} |
|---|---|---|---|---|---|
| {{ dailyQuote?.['bid'+n+'Orders'] ?? '--' }} | {{ dailyQuote?.['bid'+n+'Vol'] != null ? fmt(dailyQuote['bid'+n+'Vol']) : '--' }} | {{ fmtPrice(dailyQuote?.['bid'+n+'Price']) }} | {{ fmtPrice(dailyQuote?.['ask'+n+'Price']) }} | {{ dailyQuote?.['ask'+n+'Vol'] != null ? fmt(dailyQuote['ask'+n+'Vol']) : '--' }} | {{ dailyQuote?.['ask'+n+'Orders'] ?? '--' }} |
{{ t('lbl.intradayChart') }}
{{ t('lbl.recentKeyTrades') }}
{{ t('btn.detail') }}
| {{ t('col.time') }} | {{ t('col.price') }} | {{ t('col.shares') }} | {{ t('col.initiative') }} | {{ t('col.buyer') }} | {{ t('col.seller') }} |
|---|---|---|---|---|---|
| {{ tr.tradeTime }} | {{ fmtPrice(tr.price) }} | {{ fmt(tr.volume) }} | {{ tr.initiative===1 ? t('lbl.activeBuy') : tr.initiative===-1 ? t('lbl.activeSell') : t('lbl.neutral') }} | {{ tr.buyer }} {{ t('badge.major') }} {{ t('badge.foreign') }} | {{ tr.seller }} {{ t('badge.major') }} {{ t('badge.foreign') }} |
| {{ t('msg.noData') }} | |||||
{{ t('block.latest30') }}
({{ t('block.threshNote', {sym:dailySymbol, n:fmt(blockThresholds[dailySymbol])}) }})
{{ t('btn.detail') }}
| {{ t('col.time') }} | {{ t('lbl.broker') }} | {{ t('col.direction') }} | {{ t('col.totalVolume') }} | {{ t('col.avgPrice') }} | {{ t('col.totalAmt') }} |
|---|---|---|---|---|---|
| {{ bt.tradeTime }} | {{ bt.broker }} {{ t('badge.foreign') }} {{ t('badge.major') }} ( {{ t('badge.retail') }}{{ bt.retailPct }}%) ( {{ t('badge.inst') }}{{ bt.instPct }}%) | {{ bt.direction===1?t('trade.buy'):t('trade.sell') }} | {{ fmt(bt.totalVolume) }} | {{ fmtPrice(bt.avgPrice) }} | {{ fmt(bt.totalAmount) }} |
| {{ t('msg.noData') }} | |||||
{{ t('lbl.sentimentNews') }}
{{ t('msg.loading') }}
{{ t('msg.noNews') }}
{{s.v}}{{ t('badge.realtime') }}{{s.name}}{{sectorLabel(s.sector)}}
tradeForm.dateRange = [e.target.value, tradeForm.dateRange?.[1] ?? null]" :placeholder="t('ph.dateStart')" class="fd-picker-s native-date">
—
tradeForm.dateRange = [tradeForm.dateRange?.[0] ?? null, e.target.value]" :placeholder="t('ph.dateEnd')" class="fd-picker-s native-date">
🔒 {{ t('plan.upgradeHint') }}
{{ t('summary.count') }}
{{ fmt(tradeSummary.count) }}
{{ t('summary.totalVolume') }}
{{ fmt(tradeSummary.totalVolume) }}
{{ t('summary.totalAmount') }}
{{ fmtAmt(tradeSummary.totalAmount) }}
| {{ t('col.tradeDate') }} | {{ t('col.tradeTime') }} | {{ t('col.tradePrice') }} | {{ t('col.tradeVolume') }} | {{ t('col.tradeAmount') }} | {{ t('form.initiative') }} | {{ t('col.buyBroker') }} | {{ t('col.sellBroker') }} |
|---|---|---|---|---|---|---|---|
| {{ t('empty.setConditionAndSearch') }} | |||||||
| {{ row.date }} | {{ row.trade_time }} | {{ fmtPrice(row.price) }} | {{ fmt(row.volume) }} | {{ fmtAmt(row.amount) }} |
|
||
{{ t('empty.setConditionAndSearch') }}
{{ row.date.slice(5) }} {{ row.trade_time }}
{{ t('lbl.buy') }}:{{ row.buyer }}{{ t('badge.foreign') }}{{ t('badge.major') }}( {{ t('badge.retail') }}{{ row.buyerRetailPct }}%)( {{ t('badge.inst') }}{{ row.buyerInstPct }}%) / {{ t('lbl.sell') }}:{{ row.seller }}{{ t('badge.foreign') }}{{ t('badge.major') }}( {{ t('badge.retail') }}{{ row.sellerRetailPct }}%)( {{ t('badge.inst') }}{{ row.sellerInstPct }}%)
{{s.v}}{{ t('badge.realtime') }}{{s.name}}{{sectorLabel(s.sector)}}
blockForm.dateRange = [e.target.value, blockForm.dateRange?.[1] ?? null]" :placeholder="t('ph.dateStart')" class="fd-picker-s native-date">
—
blockForm.dateRange = [blockForm.dateRange?.[0] ?? null, e.target.value]" :placeholder="t('ph.dateEnd')" class="fd-picker-s native-date">
🔒 {{ t('plan.upgradeHint') }}
{{ t('summary.count') }}
{{ fmt(blockSummary.count) }}
{{ t('summary.netShares') }}
{{ fmt(blockSummary.totalVolume) }}
{{ t('summary.netAmount') }}
{{ fmtAmt(blockSummary.totalAmount) }}
{{ blockForm.symbol }} {{ t('block.thresholdNote', {sym: blockForm.symbol, n: fmt(blockThresholds[blockForm.symbol])}) }}
| {{ t('col.date') }} | {{ t('col.tradeTime') }} | {{ t('col.direction') }} | {{ t('lbl.broker') }} | {{ t('col.totalVolume') }} | {{ t('col.totalAmount') }} | {{ t('col.avgPrice') }} |
|---|---|---|---|---|---|---|
| {{ t('empty.setConditionAndSearch') }} | ||||||
| {{ row.date }} | {{ row.trade_time }} |
|
{{ row.broker }} {{ t('badge.foreign') }} {{ t('badge.major') }} ( {{ t('badge.retail') }}{{ row.retailPct }}%) ( {{ t('badge.inst') }}{{ row.instPct }}%) | {{ fmt(row.totalVolume) }} | {{ fmtAmt(row.totalAmount) }} | {{ row.totalVolume ? fmtPrice(Math.abs(row.totalAmount) / Math.abs(row.totalVolume)) : '-' }} |
{{ t('empty.setConditionAndSearch') }}
{{ row.date.slice(5) }} {{ row.trade_time }}
{{ row.broker }}{{ t('badge.foreign') }}{{ t('badge.major') }}( {{ t('badge.retail') }}{{ row.retailPct }}%)( {{ t('badge.inst') }}{{ row.instPct }}%)
{{ row.direction===1?'▲'+t('trade.buy.s'):'▼'+t('trade.sell.s') }}
{{ fmt(row.totalVolume) }}{{ t('unit.shares') }}
{{ fmtAmt(row.totalAmount) }}
{{ t('hd.avgPrice') }}₱{{ row.totalVolume?(Math.abs(row.totalAmount)/Math.abs(row.totalVolume)).toFixed(3):'-' }}
{{s.v}}{{ t('badge.realtime') }}{{s.name}}{{sectorLabel(s.sector)}}
netForm.dateRange = [e.target.value, netForm.dateRange?.[1] ?? null]" :placeholder="t('ph.dateStart')" class="fd-picker-s native-date">
—
netForm.dateRange = [netForm.dateRange?.[0] ?? null, e.target.value]" :placeholder="t('ph.dateEnd')" class="fd-picker-s native-date">
🔒 {{ t('plan.upgradeHint') }}
{{s.v}}{{ t('badge.realtime') }}{{s.name}}{{sectorLabel(s.sector)}}
🏦
{{ t('holding.hint.enterCriteria') }}
{{ t('holding.hint.autoSearch') }}
{{ t('plan.holdingLockedHint') }}
{{ t('holding.summary.brokerCount') }}
{{ holdingSummary.count||0 }}
{{ t('holding.summary.totalShares') }}
{{ fmt(holdingSummary.sumVolume) }}
{{ t('daily.floatHoldPct') }} {{ (holdingSummary.sumVolume / holdingSummary.floatShares * 100).toFixed(2) }}%
{{ t('holding.summary.earliestDate') }}
{{ holdingEarliestDate || '-' }}
{{ t('hd.recordsTitle', {n: holdingList.length}) }}
| {{ t('lbl.broker') }} | {{ t('col.sharesHeld') }} | {{ t('col.floatPct') }} | {{ t('col.avgCost') }} | {{ t('col.totalValueHeld') }} | {{ t('col.startDate') }} | {{ t('col.updatedAt') }} | {{ t('datalabel.actions') }} |
|---|---|---|---|---|---|---|---|
| {{ t('msg.noData') }} | |||||||
| {{ row.broker }} {{ t('badge.foreign') }} {{ t('badge.major') }} ( {{ t('badge.retail') }}{{ row.retailPct }}%) ( {{ t('badge.inst') }}{{ row.instPct }}%) | {{ fmt(row.totalVolume) }} | {{ row.floatShares ? (Math.abs(row.totalVolume) / row.floatShares * 100).toFixed(3) + '%' : '-' }} | {{ row.totalVolume && ((row.totalVolume > 0 && row.totalValue >= 0) || (row.totalVolume < 0 && row.totalValue <= 0)) ? fmtPrice(Math.abs(row.totalValue) / Math.abs(row.totalVolume)) : '-' }} | {{ fmtAmt(row.totalValue) }} | {{ row.startDate }} | {{ row.updatedAt }} | |
{{ t('msg.noData') }}
{{ row.broker }}
{{ t('badge.foreign') }}
{{ t('badge.major') }}
{{ t('badge.retail') }}{{ row.retailPct }}%
{{ t('badge.inst') }}{{ row.instPct }}%
{{ fmt(row.totalVolume) }}{{ t('unit.shares') }}
{{ (Math.abs(row.totalVolume)/row.floatShares*100).toFixed(2) }}%
{{ fmtAmt(row.totalValue) }}
{{ t('hd.avgCost') }}₱{{ row.totalVolume?(Math.abs(row.totalValue)/Math.abs(row.totalVolume)).toFixed(3):'-' }}
| {{ t('col.indexSector') }} | {{ t('col.currentPoint') }} | {{ t('col.turnover.short') }} | {{ t('col.changePoint') }} | {{ t('col.changePct') }} | {{ t('datalabel.actions') }} |
|---|---|---|---|---|---|
| {{ mktIdxSectorName(row.sector) }} | {{ fmtPoint(row.currentPoint) }} | {{ row.totalVolume > 0 ? (row.totalVolume >= 1e9 ? (row.totalVolume/1e9).toFixed(2)+'B' : (row.totalVolume/1e6).toFixed(0)+'M') : '--' }} | {{ row.changePoint != null ? (row.changePoint > 0 ? '+' : '') + fmtPoint(row.changePoint) : '-' }} | {{ row.changePct != null ? (row.changePct > 0 ? '+' : '') + row.changePct.toFixed(2) + '%' : '-' }} |
⏳
{{ t('mkt.preOpen.title') }}
{{ t('mkt.preOpen.desc') }}
{{ t('mkt.preOpen.hint') }}
{{ t('mkt.chart.allIntraday') }}
{{ t('mkt.chart.pseiIntraday') }}
{{ t('mkt.ff.sectorTitle') }}
{{ mktIdxQueriedDate }}
{{ t('msg.loading') }}
{{ t('mkt.ff.noData') }}
{{ t('mkt.ff.clickHint') }}
{{ t('mkt.ff.overallLabel') }}
·
{{ t('mkt.inflow') }} +{{ (mktFFAll.buyAmount/1e6).toFixed(2) }}M
·
{{ t('mkt.outflow') }} -{{ (mktFFAll.sellAmount/1e6).toFixed(2) }}M
·
{{ t('mkt.netFlow') }} {{ mktFFAll.netAmount>=0?'+':'' }}{{ (mktFFAll.netAmount/1e6).toFixed(2) }}M
{{ t('msg.loading') }}
{{ t('msg.noData') }}
{{ t('ffhist.stat.cumulNet') }}
{{ ffHistDlg.summary.net>=0?'+':'' }}{{ ffHistDlg.summary.netM }}M
{{ t('ffhist.stat.cumulBuy') }}
+{{ ffHistDlg.summary.buyM }}M
{{ t('ffhist.stat.cumulSell') }}
-{{ ffHistDlg.summary.sellM }}M
{{ t('ffhist.stat.inOutDays') }}
↑{{ ffHistDlg.summary.inDays }}
/
↓{{ ffHistDlg.summary.outDays }}
{{ ffHistDlg.summary.text }}
{{ t('mkt.leaderboard.title') }}
{{ mktIdxQueriedDate }}
{{ t('msg.loading') }}
| {{ t('col.symbolCode') }} / {{ t('col.volAmt') }} / {{ t('col.sector') }} | {{ fsrTab==='gainers'||fsrTab==='losers' ? t('col.changePct') : fsrTab==='volume' ? t('col.tradingAmt') : fsrTab==='turnover' ? t('col.turnoverRate') : t('col.foreignPct') }} | {{ t('col.currentPrice') }} | |
|---|---|---|---|
| 🥇 🥈 🥉 {{ r.rank }} |
{{ r.symbol }}
{{ r.totalVolume!=null ? fsrFmtVol(r.totalVolume) : '—' }}
·
{{ fsrFmtM(r.totalValue) }}
{{ sectorLabel(r.sector) }}
|
{{ r.changePct!=null ? (r.changePct>0?'+':'') + Number(r.changePct).toFixed(2)+'%' : '—' }}
{{ fsrFmtM(r.totalValue) }}
{{ r.turnoverRate!=null ? Number(r.turnoverRate).toFixed(2)+'%' : '—' }}
{{ r.fgnPct!=null ? Number(r.fgnPct).toFixed(1)+'%' : '—' }}
{{ fsrFmtM(r.netAmt) }}
|
{{ fmtPrice(r.price) }}
—
{{ r.changePct>0?'+':'' }}{{ Number(r.changePct).toFixed(2) }}%
|
| {{ t('msg.noData') }} | |||
baForm.dateRange = [e.target.value, baForm.dateRange?.[1] ?? null]" :placeholder="t('ph.dateStart')" class="fd-picker-s native-date">
—
baForm.dateRange = [baForm.dateRange?.[0] ?? null, e.target.value]" :placeholder="t('ph.dateEnd')" class="fd-picker-s native-date">
🔒 {{ t('plan.upgradeHint') }}
| {{ t('col.rank') }} | {{ t('col.broker') }} | {{ t('col.totalAmount') }} | {{ t('col.buyAmount') }} | {{ t('col.sellAmount') }} | {{ t('col.netAmount') }} | {{ t('datalabel.actions') }} |
|---|---|---|---|---|---|---|
| {{ t('empty.setConditionAndSearch') }} | ||||||
| {{ t('msg.noData') }} | ||||||
| 🥇 🥈 🥉 {{ row.rank }} | {{ row.fullName }} {{ t('badge.foreign') }} ( {{ t('badge.retail') }}{{ row.retailPct }}%) ( {{ t('badge.inst') }}{{ row.instPct }}%) | {{ fmtAmt(row.totalAmount) }} | {{ fmtAmt(row.buyAmount) }} | {{ fmtAmt(row.sellAmount) }} | {{ (row.buyAmount - row.sellAmount) >= 0 ? '+' : '' }}{{ fmtAmt(row.buyAmount - row.sellAmount) }} |
|
{{ t('hd.stockInfoMgmt') }}
{{ t('btn.marketAiRecords') }}
{{ t('btn.investagramsCookie') }}
{{ t('btn.investagramsBackfill') }}
{{ t('btn.fixNegativeFloor') }}
{{ t('dlg.pseSync.title') }}
{{ t('btn.addStock') }}
{{ t('msg.noData') }}
{{ sectorLabel(row.sector) }} · {{ subSectorLabel(row.subSector) }}
₱{{ fmtPrice(row.latestPrice) }}
{{ t('col.intraday') }}
PSEI
| {{ t('ph.stockSymbol') }} | {{ t('datalabel.companyName') }} | {{ t('datalabel.listingDate') }} | {{ t('datalabel.issuedShares') }} | {{ t('datalabel.floatShares') }} | {{ t('col.sector') }} | {{ t('datalabel.subSector') }} | {{ t('datalabel.status') }} | {{ t('col.intraday') }} | {{ t('datalabel.frontendVisible') }} | PSEI | {{ t('datalabel.majorBrokers') }} | {{ t('datalabel.blockTradeThreshold') }} | {{ t('datalabel.latestPrice') }} | {{ t('datalabel.marketCap') }} | {{ t('datalabel.quoteData') }} | {{ t('datalabel.finData') }} | {{ t('col.holdingBackfill') }} | {{ t('datalabel.actions') }} |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ row.companyName || '-' }} | {{ row.listingDate || '-' }} | {{ row.issuedShares ? fmt(row.issuedShares) : '-' }} | {{ row.floatShares ? fmt(row.floatShares) : '-' }} | {{ sectorLabel(row.sector) }} | {{ subSectorLabel(row.subSector) || '-' }} |
|
|
|
|
{{ row.majorBrokers || '-' }} | {{ fmt(row.blockTradeThreshold) }} | ₱{{ fmtPrice(row.latestPrice) }} - | ₱{{ fmtAmt(row.marketCap) }} - | {{ row.quoteMinDate }} ~ {{ row.quoteMaxDate }} {{ t('msg.noData') }} |
{{ yr }}:
{{ q }}
{{ t('msg.noData') }}
|
{{ investagramsProgress[row.symbol] }} - |
|
|
| {{ t('msg.noData') }} | ||||||||||||||||||
{{ t('lbl.perPage') }}
{{ t('lbl.total', {n: brokerFiltered.length}) }}
| {{ t('dlg.broker.code') }} | {{ t('dlg.broker.id') }} | {{ t('dlg.broker.fullName') }} | {{ t('datalabel.retailPct') }} | {{ t('datalabel.instPct') }} | {{ t('datalabel.remark') }} | {{ t('datalabel.actions') }} |
|---|---|---|---|---|---|---|
|
|
{{ row.brokerId || '-' }} | {{ row.fullName || '-' }} | {{ row.retailPct != null ? row.retailPct + '%' : '-' }} | {{ row.instPct != null ? row.instPct + '%' : '-' }} | {{ row.remark || '-' }} | |
| {{ t('msg.noData') }} | ||||||
{{ t('msg.noData') }}
ID: {{ row.brokerId }}
{{ t('badge.retail') }} {{ row.retailPct }}%
{{ t('badge.inst') }} {{ row.instPct }}%
{{ row.remark }}
{{ t('sim.availBalance') }}
₱{{ fmtAmt(simAccount.balance) }}
₱{{ fmtAmt(simAccount.balance) }}
{{ t('sim.totalMarketValue') }}
₱{{ fmtAmt(simAccount.totalMarketValue) }}
₱{{ fmtAmt(simAccount.totalMarketValue) }}
{{ t('sim.frozenCash') }}
₱{{ fmtAmt(simAccount.frozenCash) }}
₱{{ fmtAmt(simAccount.frozenCash) }}
| {{ t('col.stock') }} | {{ t('col.totalVolume') }} | {{ t('col.availQty') }} | {{ t('col.frozenQty') }} | {{ t('col.avgPrice') }} | {{ t('col.currentPrice') }} | {{ t('datalabel.marketCap') }} | {{ t('col.unrealizedPnl') }} | {{ t('col.pnlPct') }} |
|---|---|---|---|---|---|---|---|---|
| {{ p.symbol }} | {{ p.totalQty }} | {{ p.qty }} | {{ p.frozenQty }} | {{ fmtAmt4(p.avgCost) }} | {{ fmtAmt4(p.currentPrice) }} | ₱{{ fmtAmt(p.marketValue) }} | {{ fmtAmt4(p.unrealizedPnl) }} | {{ Number(p.unrealizedPct).toFixed(2) }}% |
| {{ t('empty.positions') }} | ||||||||
simOrderFilter.dateRange = [e.target.value, simOrderFilter.dateRange?.[1] ?? null]" :placeholder="t('ph.dateStart')" class="fd-picker-s native-date">
—
simOrderFilter.dateRange = [simOrderFilter.dateRange?.[0] ?? null, e.target.value]" :placeholder="t('ph.dateEnd')" class="fd-picker-s native-date">
| {{ t('col.time') }} | {{ t('col.stock') }} | {{ t('col.direction') }} | {{ t('col.qty') }} | {{ t('quant.col.limitPrice') }} | {{ t('col.frozenQty') }} | {{ t('col.quantStrategy') }} | {{ t('datalabel.actions') }} |
|---|---|---|---|---|---|---|---|
| {{ o.createdAt }} | {{ o.symbol }} | {{ o.side==='BUY'?t('trade.buy'):t('trade.sell') }} | {{ o.qty }} | {{ fmtAmt4(o.price) }} | {{ o.frozenCash ? '₱'+fmtAmt(o.frozenCash) : '-' }} | {{ o.quantStrategyCode }} - | |
| {{ t('empty.pendingOrders') }} | |||||||
simOrderFilter.dateRange = [e.target.value, simOrderFilter.dateRange?.[1] ?? null]" :placeholder="t('ph.dateStart')" class="fd-picker-s native-date">
—
simOrderFilter.dateRange = [simOrderFilter.dateRange?.[0] ?? null, e.target.value]" :placeholder="t('ph.dateEnd')" class="fd-picker-s native-date">
| {{ t('col.time') }} | {{ t('col.stock') }} | {{ t('col.direction') }} | {{ t('col.qty') }} | {{ t('col.execPrice') }} | {{ t('quant.col.fee') }} | {{ t('sim.totalRealized') }} | {{ t('col.quantStrategy') }} | {{ t('col.quantOrderId') }} |
|---|---|---|---|---|---|---|---|---|
| {{ o.updatedAt }} | {{ o.symbol }} | {{ o.side==='BUY'?t('trade.buy'):t('trade.sell') }} | {{ o.filledQty }} | {{ fmtAmt4(o.execPrice) }} | {{ o.fee != null ? '₱'+fmtAmt4(o.fee) : '-' }} | {{ o.realizedPnl != null ? fmtAmt4(o.realizedPnl) : '-' }} | {{ o.quantStrategyCode }} - | {{ o.quantOrderId }} - |
| {{ t('empty.filledOrders') }} | ||||||||
simFlowFilter.dateRange = [e.target.value, simFlowFilter.dateRange?.[1] ?? null]" :placeholder="t('ph.dateStart')" class="fd-picker-s native-date">
—
simFlowFilter.dateRange = [simFlowFilter.dateRange?.[0] ?? null, e.target.value]" :placeholder="t('ph.dateEnd')" class="fd-picker-s native-date">
| {{ t('col.time') }} | {{ t('col.type') }} | {{ t('quant.col.amount') }} | {{ t('datalabel.remark') }} |
|---|---|---|---|
| {{ f.createdAt }} | {{ f.type==='DEPOSIT'?t('sim.deposit'):t('sim.withdraw') }} | ₱{{ fmtAmt(f.amount) }} | {{ f.note }} |
| {{ t('empty.fundFlows') }} | |||
simLogFilter.dateRange = [e.target.value, simLogFilter.dateRange?.[1] ?? null]" :placeholder="t('ph.dateStart')" class="fd-picker-s native-date">
—
simLogFilter.dateRange = [simLogFilter.dateRange?.[0] ?? null, e.target.value]" :placeholder="t('ph.dateEnd')" class="fd-picker-s native-date">
| {{ t('col.time') }} | {{ t('col.type') }} | {{ t('quant.col.amount') }} | {{ t('col.balanceBefore') }} | {{ t('col.balanceAfter') }} | {{ t('datalabel.remark') }} |
|---|---|---|---|---|---|
| {{ l.createdAt }} | {{ l.type }} | {{ fmtAmt4(l.amount) }} | {{ fmtAmt(l.balanceBefore) }} | {{ fmtAmt(l.balanceAfter) }} | {{ l.note }} |
| {{ t('empty.logs') }} | |||||
simPnlForm.dateRange = [e.target.value, simPnlForm.dateRange?.[1] ?? null]" :placeholder="t('ph.dateStart')" class="fd-picker-s native-date">
—
simPnlForm.dateRange = [simPnlForm.dateRange?.[0] ?? null, e.target.value]" :placeholder="t('ph.dateEnd')" class="fd-picker-s native-date">
{{ t('sim.totalRealized') }}
₱{{ fmtAmt4(simPnl.totalRealized) }}
₱{{ fmtAmt4(simPnl.totalRealized) }}
{{ t('col.unrealizedPnl') }}
₱{{ fmtAmt4(simPnl.totalUnrealized) }}
₱{{ fmtAmt4(simPnl.totalUnrealized) }}
{{ t('sim.totalPnl') }}
₱{{ fmtAmt4(simPnl.totalPnl) }}
₱{{ fmtAmt4(simPnl.totalPnl) }}
{{ t('sim.holdingValue') }}
₱{{ fmtAmt(simPnl.marketValue) }}
₱{{ fmtAmt(simPnl.marketValue) }}
| {{ t('col.stock') }} | {{ t('col.tradeCount') }} | {{ t('col.realized') }} | {{ t('col.unrealized') }} | {{ t('col.total') }} | {{ t('col.principal') }} | {{ t('col.returnPct') }} |
|---|---|---|---|---|---|---|
| {{ r.symbol }} | {{ r.tradeCount }} | {{ fmtAmt4(r.realized) }} | {{ fmtAmt4(r.unrealized||0) }} | {{ fmtAmt4(Number(r.realized)+Number(r.unrealized||0)) }} | {{ r.principal ? fmtAmt4(r.principal) : '--' }} | {{ r.principal>0 ? (r.returnPct>0?'+':'') + r.returnPct + '%' : '--' }} |
| {{ t('msg.noData') }} | ||||||
| {{ t('col.strategyCode') }} | {{ t('col.stock') }} | {{ t('datalabel.status') }} | {{ t('quant.col.mode') }} | {{ t('quant.col.timeRange') }} | {{ t('quant.col.budget') }} | {{ t('col.usedHeld') }} | {{ t('col.buyCondition') }} | {{ t('col.sellCondition') }} | {{ t('datalabel.actions') }} |
|---|---|---|---|---|---|---|---|---|---|
| {{ quantStrategies.length ? t('msg.noMatch') : t('msg.noData') }} | |||||||||
| {{ s.code }} |
|
|
{{ s.startDate }} ~ {{ s.endDate }} | ₱{{ fmtAmt(s.budget) }} |
₱{{ fmtAmt(s.usedAmount) }} {{ fmt(s.heldQty) }} {{ t('unit.shares') }} |
|
|||
{{s.v}}{{s.name}}
{ qoFilter.dateRange = [e.target.value, qoFilter.dateRange?.[1] ?? null]; loadQuantOrders() }" :placeholder="t('ph.dateStart')" class="fd-picker-s native-date">
—
{ qoFilter.dateRange = [qoFilter.dateRange?.[0] ?? null, e.target.value]; loadQuantOrders() }" :placeholder="t('ph.dateEnd')" class="fd-picker-s native-date">
| {{ t('col.strategyCode') }} | {{ t('col.stock') }} | {{ t('col.direction') }} | {{ t('quant.col.batch') }} | {{ t('col.qty') }} | {{ t('quant.col.limitPrice') }} | {{ t('quant.col.amount') }} | {{ t('quant.col.fee') }} | {{ t('quant.col.mode') }} | {{ t('col.time') }} |
|---|---|---|---|---|---|---|---|---|---|
| {{ t('empty.quantOrders') }} | |||||||||
| {{ o.strategyCode }} |
|
{{ o.batchTag }} | {{ fmt(o.qty) }} | {{ fmtAmt4(o.price) }} | ₱{{ fmtAmt(o.amount) }} | ₱{{ fmtAmt(o.fee) }} | {{ o.tradeMode===1?t('val.simulation'):t('val.real') }} | {{ o.createdAt }} | |
{{ t('monitor.lbl.status') }}
{{ t('monitor.lbl.mktStatus') }}
{{ mktStatusLabel || '--' }}
{{ t('monitor.lbl.nextRun') }}
{{ status.nextRunTime||'--' }}
{{ t('monitor.lbl.lastRun') }}
{{ status.lastRunTime||'--' }}
{{ t('monitor.lbl.lastResult') }}
{{ lastResultText }}
{{ lastResultExpanded ? t('btn.collapse') : t('btn.expand') }}
{{ t('monitor.baBackfill.label') }}
{{ t('btn.baBackfill') }}
{{ t('monitor.baBackfill.hint') }}
—
{{ t('monitor.miVolBackfill.label') }}
{{ t('btn.miVolBackfill') }}
{{ t('monitor.miVolBackfill.hint') }}
—
{{ t('monitor.holdingFix.label') }}
{{ t('btn.holdingFix') }}
{{ t('monitor.holdingFix.hint') }}
{{ t('monitor.mktIdxLogRecover.label') }}
—
{{ t('monitor.mktIdxLogRecover.btn') }}
{{ t('monitor.mktIdxLogRecover.hint') }}
{{ t('monitor.lbl.realtimeLog') }}
{{ t('monitor.lbl.autoRefresh3s') }}
{{ line }}
{{ t('monitor.empty.log') }}
logForm.dateRange = [e.target.value, logForm.dateRange?.[1] ?? null]" :placeholder="t('ph.dateStart')" class="fd-picker-s native-date">
—
logForm.dateRange = [logForm.dateRange?.[0] ?? null, e.target.value]" :placeholder="t('ph.dateEnd')" class="fd-picker-s native-date">
| ID | {{ t('col.scrapeDate') }} | {{ t('col.stock') }} | {{ t('col.type') }} | {{ t('datalabel.status') }} | {{ t('col.scrapeCount') }} | {{ t('col.finishedAt') }} |
|---|---|---|---|---|---|---|
| {{ t('empty.scrapeLog') }} | ||||||
| {{ row.id }} | {{ row.date }} | {{ row.data_type===1?t('log.trades'):t('log.netFlow') }} |
|
{{ row.record_count }} | {{ row.scraped_at }} | |
{{ t('monitor.cronLog') }}
{{ filteredCronLog.length }} / {{ cronLogData.length }} {{ t('lbl.lines') }}
{{ cronLogData.length ? t('log.noMatch') : t('log.noLogs') }}
{{ t('monitor.webLog') }}
{{ filteredWebLog.length }} / {{ webLogData.length }} {{ t('lbl.lines') }}
{{ webLogData.length ? t('log.noMatch') : t('log.noLogs') }}
| {{ t('col.username') }} | {{ t('form.lbl.loginTime') }} | {{ t('form.lbl.loginIp') }} | {{ t('col.device') }} | {{ t('col.browser') }} | {{ t('col.permMenus') }} | {{ t('col.remainDays') }} | {{ t('datalabel.actions') }} |
|---|---|---|---|---|---|---|---|
| {{ s.username }} | {{ (s.loginAt||'').replace('T',' ').substring(0,19) }} | {{ s.loginIp || '--' }} |
|
{{ s.browser||'--' }} | {{ s.menus }} |
|
|
| {{ onlineUsers.length ? t('msg.noMatch') : t('msg.noOnlineUsers') }} | |||||||
{{ t('col.username') }}
{{ t('form.lbl.logType') }}
{{ t('placeholder.startDate') }}
{{ t('placeholder.endDate') }}
| {{ t('col.time') }} | {{ t('col.user') }} | {{ t('col.type') }} | {{ t('col.content') }} | IP | {{ t('col.device') }} | {{ t('col.browser') }} |
|---|---|---|---|---|---|---|
| {{ row.createdAt }} | {{ row.username }} |
|
{{ row.action }} | {{ row.ip }} |
|
{{ row.browser||'--' }} |
| {{ t('msg.noData') }} | ||||||
{{ healthCheckedAt ? t('health.checkedAt', {time: healthCheckedAt}) : '' }}
{{ t('btn.recheck') }}
{{ t('health.' + item.key) }}
{{ healthDetailText(item) }}
{{ t('health.status.' + item.status) }}
{{ t('msg.noData') }}
{{ t('admin.hdr.users') }}
{{ t('btn.addUser') }}
| ID | {{ t('col.username') }} | {{ t('col.role') }} | {{ t('plan.assignedPlan') }} | {{ t('plan.validPeriod') }} | {{ t('col.realName') }} | {{ t('col.email') }} | {{ t('col.phone') }} | {{ t('datalabel.status') }} | {{ t('col.createdAt') }} | {{ t('datalabel.actions') }} |
|---|---|---|---|---|---|---|---|---|---|---|
| {{ row.id }} | {{ row.username }} |
|
{{ planTierName(userPlanLevel(row)) }} | {{ row.planStartedAt }} ~ {{ row.planExpiresAt }} - | {{ maskName(row.realName) }} | {{ maskEmail(row.email) }} | {{ maskPhone(row.phone) }} |
|
{{ row.created_at }} |
|
| {{ t('msg.noData') }} | ||||||||||
{{ t('admin.hdr.roles') }}
{{ t('btn.addRole') }}
| ID | {{ t('col.roleName') }} | {{ t('col.description') }} | {{ t('role.planLevel') }} | {{ t('col.menuPerms') }} | {{ t('datalabel.actions') }} |
|---|---|---|---|---|---|
| {{ row.id }} | {{ row.name }} | {{ row.description }} | {{ ['Free','Plus','Ultra'][row.planLevel||0] }} · ₱{{ row.monthlyPrice||0 }}/mo · ₱{{ row.yearlyPrice||0 }}/yr · 🪙{{ row.aiCoinMonthly||0 }} · ⭐{{ row.watchlistLimit||0 }} |
|
|
| {{ t('msg.noData') }} | |||||
{{ t('admin.hdr.aiCoins') }}
| ID | {{ t('col.user') }} | {{ t('plan.assignedPlan') }} | {{ t('role.resetMonth') }} | {{ t('col.aiCoinBalance') }} | {{ t('datalabel.actions') }} |
|---|---|---|---|---|---|
| {{ row.id }} | {{ row.username }} | {{ row.roleNames || '-' }} | {{ row.resetMonth || '-' }} | 🪙{{ row.balance }} |
|
| {{ t('msg.noData') }} | |||||
| {{ t('col.configKey') }} | {{ t('col.currentValue') }} | {{ t('col.description') }} | {{ t('datalabel.actions') }} |
|---|---|---|---|
| {{ item.configKey }} | {{ item.displayValue }} | {{ item.description }} |
{{ t('admin.hdr.campaigns') }}
{{ t('btn.newMessage') }}
{{ t('placeholder.titleKeyword') }}
{{ t('form.msgCategory') }}
{{ t('datalabel.status') }}
{{ t('form.lbl.sendDateFrom') }}
{{ t('form.lbl.sendDateTo') }}
| ID | {{ t('form.title') }} | {{ t('form.lbl.category') }} | {{ t('form.targetAudience') }} | {{ t('col.channel') }} | {{ t('datalabel.status') }} | {{ t('col.sentBy') }} | {{ t('col.sentAt') }} |
|---|---|---|---|---|---|---|---|
| {{ c.id }} | {{ c.title }} |
|
|
|
{{ c.sent_by||'-' }} | {{ c.sent_at ? fmtInboxTime(c.sent_at) : '-' }} |
{{ t('empty.noCampaigns') }}
{{ t('label.manualFetch') }}
{{ t('news.pseTrigger') }}
{{ t('news.rssTrigger') }}
Yahoo Finance
{{ t('news.fetchAll') }}
{{ t('btn.backfillHistory') }}
{{ t('form.stockSymbol') }}
{{ t('col.sector') }}
{{ t('form.lbl.category') }}
{{ t('form.lbl.source') }}
{{ t('form.lbl.keyword') }}
{{ t('placeholder.startDate') }}
{{ t('placeholder.endDate') }}
{{ item.source_label }}
{{ item.published_at ? item.published_at.slice(0,16) : '' }}
{{ kw }}
{{ t('title.edit') }}
{{ t('title.delete') }}
{{ item.summary }}
{{ t('empty.noNewsData') }}
{ plusRevenueForm.dateRange = [e.target.value, plusRevenueForm.dateRange?.[1] ?? null]; plusRevenueForm.month = null }" :placeholder="t('form.lbl.dateFrom')" class="fd-picker-s native-date">
—
{ plusRevenueForm.dateRange = [plusRevenueForm.dateRange?.[0] ?? null, e.target.value]; plusRevenueForm.month = null }" :placeholder="t('form.lbl.dateTo')" class="fd-picker-s native-date">
| {{ t('col.date') }} | {{ t('val.isForecast.yes') }} | {{ t('dlg.plusRevenue.lineAGgr') }} | {{ t('dlg.plusRevenue.lineBGgr') }} | {{ t('col.totalGgr') }} | {{ t('dlg.plusRevenue.totalOrders') }} | {{ t('dlg.plusRevenue.jpAmount') }} | {{ t('datalabel.remark') }} | {{ t('col.updatedAt') }} | {{ t('datalabel.actions') }} |
|---|---|---|---|---|---|---|---|---|---|
| {{ row.date }} |
|
{{ row.lineAGgr != null ? Number(row.lineAGgr).toFixed(4) : '-' }} | {{ row.lineBGgr != null ? Number(row.lineBGgr).toFixed(4) : '-' }} | {{ (row.lineAGgr != null || row.lineBGgr != null) ? (Number(row.lineAGgr||0) + Number(row.lineBGgr||0)).toFixed(4) : '-' }} | {{ row.totalOrders != null ? Number(row.totalOrders).toFixed(4) : '-' }} | {{ row.jpAmount != null ? Number(row.jpAmount).toFixed(4) : '-' }} | {{ row.remark || '-' }} | {{ row.updatedAt || '-' }} | |
| {{ t('empty.noRevenue') }} | |||||||||
| {{ t('admin.revenueTotal', {n:plusRevenueTotal}) }} | {{ plusRevenueSummary.sumLineAGgr != null ? Number(plusRevenueSummary.sumLineAGgr).toFixed(4) : '-' }} | {{ plusRevenueSummary.sumLineBGgr != null ? Number(plusRevenueSummary.sumLineBGgr).toFixed(4) : '-' }} | {{ (plusRevenueSummary.sumLineAGgr != null || plusRevenueSummary.sumLineBGgr != null) ? (Number(plusRevenueSummary.sumLineAGgr||0) + Number(plusRevenueSummary.sumLineBGgr||0)).toFixed(4) : '-' }} | {{ plusRevenueSummary.sumTotalOrders != null ? Number(plusRevenueSummary.sumTotalOrders).toFixed(4) : '-' }} | {{ plusRevenueSummary.sumJpAmount != null ? Number(plusRevenueSummary.sumJpAmount).toFixed(4) : '-' }} | ||||
| {{ t('revenue.avg', {n: plusRevenueTotal}) }} | {{ plusRevenueSummary.sumLineAGgr != null ? (Number(plusRevenueSummary.sumLineAGgr) / plusRevenueTotal).toFixed(4) : '-' }} | {{ plusRevenueSummary.sumLineBGgr != null ? (Number(plusRevenueSummary.sumLineBGgr) / plusRevenueTotal).toFixed(4) : '-' }} | {{ (plusRevenueSummary.sumLineAGgr != null || plusRevenueSummary.sumLineBGgr != null) ? ((Number(plusRevenueSummary.sumLineAGgr||0) + Number(plusRevenueSummary.sumLineBGgr||0)) / plusRevenueTotal).toFixed(4) : '-' }} | {{ plusRevenueSummary.sumTotalOrders != null ? (Number(plusRevenueSummary.sumTotalOrders) / plusRevenueTotal).toFixed(4) : '-' }} | {{ plusRevenueSummary.sumJpAmount != null ? (Number(plusRevenueSummary.sumJpAmount) / plusRevenueTotal).toFixed(4) : '-' }} | ||||
{{ t('nav.allFeatures') }}
{{ t('nav.allFeaturesSub') }}
{{ t(tab.labelKey) }}