| 37125 |
vikas |
1 |
## LMS Dashboards — cross-region management roll-up (SOP §18). Loaded into #main-content by the sidebar.
|
|
|
2 |
## Model: regions[], summaryJson, stateFunnelJson, slaHeatmapJson, ageingJson, fromDate, toDate.
|
|
|
3 |
## Styling in resources/css/lms-dashboard.css; behaviour in resources/js/lms-dashboard.js (window.LmsDash).
|
|
|
4 |
|
|
|
5 |
<section class="wrapper lms-dash">
|
|
|
6 |
|
|
|
7 |
<ol class="breadcrumb">
|
|
|
8 |
<li><i class="fa fa-home"></i><a href="${rc.contextPath}/dashboard">Home</a></li>
|
|
|
9 |
<li><a href="#" class="lead">Leads</a></li>
|
|
|
10 |
<li>LMS Dashboards</li>
|
|
|
11 |
</ol>
|
|
|
12 |
|
|
|
13 |
<div class="lms-head">
|
|
|
14 |
<div>
|
|
|
15 |
<div class="lms-crumb">Management · Cross-region roll-up</div>
|
|
|
16 |
<h1>Dashboards</h1>
|
|
|
17 |
<div class="lms-sub">Funnel, SLA compliance and ageing across regions. Derived from the lead record.</div>
|
|
|
18 |
</div>
|
|
|
19 |
<div class="lms-filters">
|
|
|
20 |
<select id="lmsFilterRegion" title="Region">
|
|
|
21 |
<option value="">All regions</option>
|
|
|
22 |
#foreach($r in $regions)
|
|
|
23 |
<option value="$r.getId()">$!r.getName()#if($r.getRegionCode()) ($r.getRegionCode())#end</option>
|
|
|
24 |
#end
|
|
|
25 |
</select>
|
|
|
26 |
<input type="date" id="lmsFilterFrom" value="$!fromDate" title="From (created)">
|
|
|
27 |
<input type="date" id="lmsFilterTo" value="$!toDate" title="To (created)">
|
|
|
28 |
</div>
|
|
|
29 |
</div>
|
|
|
30 |
|
|
|
31 |
<!-- Roll-up KPIs -->
|
|
|
32 |
<div class="lms-kpis" id="lmsDashKpis"></div>
|
|
|
33 |
|
|
|
34 |
<!-- State funnel -->
|
|
|
35 |
<div class="lms-card">
|
|
|
36 |
<h2>State funnel — New → Onboarded by region</h2>
|
|
|
37 |
<div class="desc">Reached counts per region · click a row to list that region's leads.</div>
|
|
|
38 |
<div id="lmsStateFunnel"></div>
|
|
|
39 |
<div class="lms-label" style="margin-top:14px;">Conversion % by region</div>
|
|
|
40 |
<div style="position:relative; height:200px;">
|
|
|
41 |
<canvas id="lmsConvChart"></canvas>
|
|
|
42 |
</div>
|
|
|
43 |
</div>
|
|
|
44 |
|
|
|
45 |
<div class="lms-grid lms-g2">
|
|
|
46 |
<div class="lms-card">
|
|
|
47 |
<h2>SLA compliance — owner heat-map</h2>
|
|
|
48 |
<div class="desc">On-time first contact % · BM × recent weeks.</div>
|
|
|
49 |
<div id="lmsHeatmap"></div>
|
|
|
50 |
<div class="lms-note">Green ≥ 90% · red < 40%. SLA = first contact within 5 hrs of creation (SOP §11).</div>
|
|
|
51 |
</div>
|
|
|
52 |
<div class="lms-card">
|
|
|
53 |
<h2>Ageing — stuck open leads</h2>
|
|
|
54 |
<div class="desc">Open leads untouched > 7 days, by stage · click to list.</div>
|
|
|
55 |
<div id="lmsAgeing"></div>
|
|
|
56 |
</div>
|
|
|
57 |
</div>
|
|
|
58 |
|
|
|
59 |
<div class="lms-grid lms-g2">
|
|
|
60 |
<!-- Report suite (SOP §18.2) with honest coverage badges -->
|
|
|
61 |
<div class="lms-card">
|
|
|
62 |
<h2>Standard dashboards (SOP §18.2)</h2>
|
|
|
63 |
<div class="desc">What ships from the lead record today vs what needs its source system.</div>
|
|
|
64 |
<div class="report" data-report="state"><span class="r-ico">📈</span>
|
|
|
65 |
<div><div class="r-name">State Funnel <span class="r-badge live">Live</span></div>
|
|
|
66 |
<div class="r-desc">New → onboarded by region, conversion, SLA%.</div></div></div>
|
|
|
67 |
<div class="report" data-report="sla"><span class="r-ico">⚖️</span>
|
|
|
68 |
<div><div class="r-name">SLA Compliance <span class="r-badge live">Live</span></div>
|
|
|
69 |
<div class="r-desc">% first-contact within SLA, owner heat-map.</div></div></div>
|
|
|
70 |
<div class="report" data-report="ageing"><span class="r-ico">⏳</span>
|
|
|
71 |
<div><div class="r-name">Ageing <span class="r-badge live">Live</span></div>
|
|
|
72 |
<div class="r-desc">Stuck by stage, days since last action.</div></div></div>
|
|
|
73 |
<div class="report" data-report="mgmt"><span class="r-ico">👑</span>
|
|
|
74 |
<div><div class="r-name">Management Roll-up <span class="r-badge live">Live</span></div>
|
|
|
75 |
<div class="r-desc">Cross-region leads, onboardings, value.</div></div></div>
|
|
|
76 |
<div class="report" data-report="bgc"><span class="r-ico">📊</span>
|
|
|
77 |
<div><div class="r-name">BGC Daily <span class="r-badge partial">Partial</span></div>
|
|
|
78 |
<div class="r-desc">Created + dispositions real; call volume is a proxy — no telephony yet.</div></div></div>
|
|
|
79 |
<div class="report" data-report="audit"><span class="r-ico">🧪</span>
|
|
|
80 |
<div><div class="r-name">Audit Hygiene <span class="r-badge partial">Partial</span></div>
|
|
|
81 |
<div class="r-desc">Missing dispositions / HOLD shown; DND & recording flags pending source.</div></div></div>
|
|
|
82 |
<div class="report" data-report="rbm"><span class="r-ico">🔄</span>
|
|
|
83 |
<div><div class="r-name">RBM Servicing <span class="r-badge soon">Pending data</span></div>
|
|
|
84 |
<div class="r-desc">Repeat-order / complaint / TAT need order + ticket data.</div></div></div>
|
|
|
85 |
</div>
|
|
|
86 |
|
|
|
87 |
<!-- What to fix -->
|
|
|
88 |
<div class="lms-card">
|
|
|
89 |
<h2>What to fix</h2>
|
|
|
90 |
<div class="desc">Where the funnel is leaking most.</div>
|
|
|
91 |
<div class="callout">
|
|
|
92 |
<div class="c-head">Regions with low conversion</div>
|
|
|
93 |
<div class="c-desc">Rows flagged red in the state funnel are converting under 20%.</div>
|
|
|
94 |
<div class="c-act">→ Open the region row to review its stuck leads.</div>
|
|
|
95 |
</div>
|
|
|
96 |
<div class="callout" style="border-left-color:var(--warn);">
|
|
|
97 |
<div class="c-head">SLA slipping</div>
|
|
|
98 |
<div class="c-desc">Amber heat-map cells / rows sit below 60% on-time first contact.</div>
|
|
|
99 |
<div class="c-act">→ Chase the owner's breached-no-contact queue in Command Center.</div>
|
|
|
100 |
</div>
|
|
|
101 |
<div class="callout" style="border-left-color:var(--navy);">
|
|
|
102 |
<div class="c-head">Ageing backlog</div>
|
|
|
103 |
<div class="c-desc">Open leads untouched > 7 days lose revival odds fast.</div>
|
|
|
104 |
<div class="c-act">→ Click an ageing stage to work the oldest first.</div>
|
|
|
105 |
</div>
|
|
|
106 |
</div>
|
|
|
107 |
</div>
|
|
|
108 |
|
|
|
109 |
</section>
|
|
|
110 |
|
|
|
111 |
<script>
|
|
|
112 |
(function () {
|
|
|
113 |
var summary = $summaryJson;
|
|
|
114 |
var stateFunnel = $stateFunnelJson;
|
|
|
115 |
var slaHeatmap = $slaHeatmapJson;
|
|
|
116 |
var ageing = $ageingJson;
|
|
|
117 |
if (window.LmsDash) {
|
|
|
118 |
window.LmsDash.initDashboards({
|
|
|
119 |
summary: summary,
|
|
|
120 |
stateFunnel: stateFunnel,
|
|
|
121 |
slaHeatmap: slaHeatmap,
|
|
|
122 |
ageing: ageing,
|
|
|
123 |
regionId: $('#lmsFilterRegion').val() || '',
|
|
|
124 |
from: '$!fromDate',
|
|
|
125 |
to: '$!toDate'
|
|
|
126 |
});
|
|
|
127 |
}
|
|
|
128 |
})();
|
|
|
129 |
</script>
|