HH/kpi's_references/KPI6_Activation_2h.html
2026-02-22 08:35:53 +03:00

287 lines
17 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>PX360 · KPI-6 Complaint Activation Within 2 Hours</title>
<!-- Tailwind + lucide + apexcharts + html2pdf (consistent theme) -->
<script src="https://cdn.tailwindcss.com"></script>
<script src="https://unpkg.com/lucide@latest"></script>
<script src="https://cdn.jsdelivr.net/npm/apexcharts"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2pdf.js/0.10.1/html2pdf.bundle.min.js"></script>
<script>
tailwind.config = {
theme: { extend: { colors: { navy: '#005696', blue: '#007bbd', light: '#f8fafc', slate: '#64748b' } } }
}
</script>
<style>
body { font-family: 'Segoe UI', Tahoma, sans-serif; background-color: #f1f5f9; }
.excel-border { border: 1px solid #cbd5e1; }
.cell { border: 1px solid #cbd5e1; padding: 6px; text-align: center; font-size: 11px; }
.table-header { background-color: #eef6fb; font-weight: bold; color: #005696; }
@media print { .no-print { display: none !important; } }
</style>
</head>
<body class="p-4 md:p-8">
<div id="report" class="max-w-6xl mx-auto bg-white p-10 shadow-2xl border excel-border">
<!-- ===== HEADER navy/blue (PX360 identity) ===== -->
<div class="flex items-center justify-between border-b-4 border-navy pb-6 mb-8">
<div class="flex items-center gap-4">
<div class="bg-navy p-3 rounded-2xl shadow-lg">
<i data-lucide="clock" class="text-white w-10 h-10"></i>
</div>
<div>
<h1 class="text-3xl font-black text-navy tracking-tighter uppercase">PX360</h1>
<p class="text-[10px] font-bold text-blue tracking-[0.2em] uppercase">Activation Within 2 Hours</p>
</div>
</div>
<div class="text-right">
<p class="text-navy font-black text-sm uppercase">KPI - 6</p>
<p class="text-slate text-xs italic">Target 95% · Threshold 90%</p>
</div>
</div>
<div class="text-center mb-8">
<h2 class="text-lg font-black text-navy uppercase underline underline-offset-4">Complaint Activation Within 2 Hours 2025</h2>
</div>
<!-- ===== MAIN TABLE exact figures from KPI-6 PDF ===== -->
<table class="w-full border-collapse mb-8">
<tr class="table-header cell">
<td class="cell">No.</td>
<td class="cell">Perf. Indicator ID</td>
<td class="cell w-64">Indicator Title</td>
<td class="cell">Target</td>
<td class="cell">Threshold</td>
<td class="cell">Numerator / Denominator</td>
<td class="cell">Jan</td><td class="cell">Feb</td><td class="cell">Mar</td><td class="cell">Apr</td>
<td class="cell">May</td><td class="cell">Jun</td><td class="cell">Jul</td><td class="cell">Aug</td>
<td class="cell">Sep</td><td class="cell">Oct</td><td class="cell">Nov</td><td class="cell bg-navy text-white">TOTAL</td>
</tr>
<!-- row 1: activated within 2h (numerator) -->
<tr>
<td rowspan="3" class="cell font-bold text-blue">6</td>
<td rowspan="3" class="cell font-bold text-navy"></td>
<td rowspan="3" class="cell text-left font-bold text-navy px-2 uppercase">Complaint Activation Within 2 Hours</td>
<td rowspan="3" class="cell">95%</td>
<td rowspan="3" class="cell">90%</td>
<td class="cell text-left bg-slate-50">Activated ≤2h</td>
<td class="cell">45</td><td class="cell">23</td><td class="cell">35</td><td class="cell">40</td><td class="cell">41</td><td class="cell">44</td>
<td class="cell">51</td><td class="cell">46</td><td class="cell">53</td><td class="cell">59</td><td class="cell">37</td><td class="cell font-bold">474</td>
</tr>
<!-- row 2: total complaints received -->
<tr>
<td class="cell text-left bg-slate-50">Total complaints received</td>
<td class="cell">71</td><td class="cell">57</td><td class="cell">50</td><td class="cell">57</td><td class="cell">65</td><td class="cell">53</td>
<td class="cell">67</td><td class="cell">65</td><td class="cell">79</td><td class="cell">76</td><td class="cell">49</td><td class="cell font-bold">689</td>
</tr>
<!-- row 3: result % (exact values from PDF) -->
<tr class="font-bold">
<td class="cell text-left text-navy">Result (%)</td>
<td class="cell">63.4%</td><td class="cell">40.4%</td><td class="cell">70.0%</td><td class="cell">70.2%</td><td class="cell">63.1%</td><td class="cell">83.0%</td>
<td class="cell">76.1%</td><td class="cell">70.8%</td><td class="cell">67.1%</td><td class="cell">77.6%</td><td class="cell">75.5%</td><td class="cell bg-navy text-white">68.8%</td>
</tr>
</table>
<!-- ===== Definition & metadata ===== -->
<div class="text-xs text-slate bg-slate-50 p-3 rounded-lg border excel-border mb-6 italic">
<span class="font-bold text-navy">Definition:</span> Measuring the percentage of complaints that are activated within specified timeframes (within 2 hours).
Target (95%) aim; Threshold (90%) minimum acceptable.
</div>
<div class="grid grid-cols-2 md:grid-cols-5 gap-2 text-[10px] bg-slate-50 p-3 rounded-lg border excel-border mb-8">
<div><span class="font-bold text-navy">Category:</span> Organizational</div>
<div><span class="font-bold text-navy">Type:</span> Process</div>
<div><span class="font-bold text-navy">Risk:</span> <span class="bg-red-200 px-1.5 py-0.5 rounded-full text-red-800">High</span></div>
<div><span class="font-bold text-navy">Data coll.:</span> Retrospective</div>
<div><span class="font-bold text-navy">Method:</span> Others: Excel</div>
<div><span class="font-bold text-navy">Dimension:</span> Efficiency, Timeliness</div>
<div><span class="font-bold text-navy">Gather freq.:</span> Monthly</div>
<div><span class="font-bold text-navy">Reporting:</span> Monthly</div>
<div><span class="font-bold text-navy">Collector:</span> Ms. Ather Alqahani</div>
<div><span class="font-bold text-navy">Analyzer:</span> Ms. Shahad Alanazi</div>
</div>
<!-- ===== two charts: trend + overall activation donut ===== -->
<div class="grid grid-cols-1 md:grid-cols-3 gap-6 mb-8 no-break">
<div class="md:col-span-2 border excel-border p-4 rounded-xl bg-slate-50/50">
<p class="text-[10px] font-bold text-navy uppercase mb-4 flex items-center gap-2">
<i data-lucide="trending-up" class="w-3 h-3"></i> Monthly Activation ≤2h Target 95%
</p>
<div id="trendChart"></div>
</div>
<div class="border excel-border p-4 rounded-xl bg-slate-50/50">
<p class="text-[10px] font-bold text-navy uppercase mb-4 flex items-center gap-2">
<i data-lucide="zap" class="w-3 h-3"></i> Activated ≤2h vs Delayed
</p>
<div id="sourceChart"></div>
</div>
</div>
<!-- ===== ANALYSIS block verbatim from PDF ===== -->
<div class="mb-8 p-5 bg-blue/5 border-l-4 border-navy rounded-xl">
<h3 class="text-navy font-bold text-sm uppercase flex items-center gap-2 mb-3"><i data-lucide="bar-chart-3" class="w-4 h-4"></i>Analysis</h3>
<div class="grid md:grid-cols-2 gap-6 text-xs">
<div>
<p class="font-semibold text-navy">📊 Comparison to Target and Threshold:</p>
<ul class="list-disc list-inside text-slate mt-1">
<li>The result of <span class="font-bold">75.7%</span> (annual avg) was below target (95%) and threshold (90%).</li>
<li>However, it is close to the last month's percentage, which is good as it has not dropped in level.</li>
<li>Best month: June 83.0% · Worst: February 40.4%</li>
</ul>
</div>
<div>
<p class="font-semibold text-navy">⚠️ Reasons behind delay of activations:</p>
<ul class="list-disc list-inside text-slate mt-1">
<li>The staff attempts to resolve issues immediately, but some patients refuse it.</li>
<li>Unclear content of the complaint, which requires contacting the patient for clarification, sometimes taking more than 2 hours for a response.</li>
</ul>
</div>
</div>
<p class="text-xs text-slate mt-3 italic border-t pt-2">Annual average: 68.8% (474/689) significantly below threshold.</p>
</div>
<!-- ===== Recommendations (exact from PDF) ===== -->
<div class="mb-8 p-4 bg-amber-50/70 border-l-4 border-amber-600 rounded-xl">
<h3 class="text-navy font-bold text-sm uppercase flex items-center gap-2 mb-2"><i data-lucide="message-square" class="w-4 h-4"></i>Recommendations</h3>
<ul class="text-xs text-slate list-disc list-inside">
<li>Establishing a timer notification within the complaints request platform to remind staff to follow up on filled request promptly.</li>
<li>Adding a feature to the complaints platform that indicates the reason for delay in activation for more than 2 hours.</li>
</ul>
</div>
<!-- ===== department style quick stats (customised for activation) ===== -->
<div class="grid grid-cols-2 border-t border-l excel-border mb-8">
<div class="p-4 border-r border-b excel-border">
<h3 class="bg-navy text-white text-[10px] font-bold px-2 py-1 mb-2 inline-block">HIGHEST ACTIVATION</h3>
<div id="viewMed" class="text-[11px] text-slate whitespace-pre-line leading-relaxed italic">June 83.0% · Oct 77.6% · Jul 76.1% · Nov 75.5%</div>
</div>
<div class="p-4 border-r border-b excel-border">
<h3 class="bg-blue text-white text-[10px] font-bold px-2 py-1 mb-2 inline-block">LOWEST ACTIVATION</h3>
<div id="viewAdmin" class="text-[11px] text-slate whitespace-pre-line leading-relaxed italic">Feb 40.4% · Jan 63.4% · May 63.1% · Sep 67.1%</div>
</div>
<div class="p-4 border-r border-b excel-border">
<h3 class="bg-slate text-white text-[10px] font-bold px-2 py-1 mb-2 inline-block">ANNUAL AVERAGE</h3>
<div id="viewNur" class="text-[11px] text-slate whitespace-pre-line leading-relaxed italic">68.8% (far below target 95%)</div>
</div>
<div class="p-4 border-r border-b excel-border bg-slate-50">
<h3 class="bg-slate-400 text-white text-[10px] font-bold px-2 py-1 mb-2 inline-block">KEY DELAY REASONS</h3>
<div class="text-[11px] text-slate italic">Patient refusal · Unclear content requiring clarification</div>
</div>
</div>
<!-- ===== editable insights panel (like template) with preset data ===== -->
<div class="no-print bg-slate-100 p-6 rounded-xl border-2 border-dashed border-navy/20 mb-8">
<div class="flex justify-between items-center mb-4">
<h4 class="font-bold text-navy text-sm uppercase flex items-center gap-2">
<i data-lucide="edit-3" class="w-4 h-4"></i> Data Insights Editor (KPI-6)
</h4>
<div class="flex gap-2">
<select id="monthSelect" onchange="loadMonth()" class="text-xs border p-1 rounded font-bold text-navy outline-none">
<option value="focus">February (low) / June (high)</option>
<option value="overview">Annual summary</option>
</select>
<button onclick="exportPDF()" class="bg-navy text-white px-4 py-1 rounded text-xs font-bold hover:bg-blue">Download PDF</button>
</div>
</div>
<div class="grid grid-cols-4 gap-4">
<textarea id="editMed" oninput="sync()" placeholder="Highest months …" class="border p-2 text-[10px] h-20 rounded w-full"></textarea>
<textarea id="editAdmin" oninput="sync()" placeholder="Lowest months …" class="border p-2 text-[10px] h-20 rounded w-full"></textarea>
<textarea id="editNur" oninput="sync()" placeholder="Delay reasons …" class="border p-2 text-[10px] h-20 rounded w-full"></textarea>
<textarea id="editRec" oninput="sync()" placeholder="Recommendations …" class="border p-2 text-[10px] h-20 rounded w-full"></textarea>
</div>
</div>
<!-- ===== recommendations block (view) ===== -->
<div class="mb-12">
<h3 class="text-navy font-bold text-xs uppercase border-b-2 border-navy mb-2">Ongoing recommendations (from editor):</h3>
<div id="viewRec" class="text-xs text-slate bg-blue/5 p-4 rounded-lg border-l-4 border-navy whitespace-pre-line italic"></div>
</div>
<!-- ===== signatures (exact match from PDF style) ===== -->
<div class="grid grid-cols-3 gap-12 text-[10px] font-bold text-navy mt-20 text-center">
<div><p class="mb-12 uppercase opacity-50">Prepared by</p><div class="border-t border-slate pt-2">Ms. Ather Alqahani<br>Patient Relations & Experience Coordinator</div></div>
<div><p class="mb-12 uppercase opacity-50">Reviewed by</p><div class="border-t border-slate pt-2">Ms. Shahad Alanazi<br>Patient Relations & Experience Supervisor</div></div>
<div><p class="mb-12 uppercase opacity-50">Approved by</p><div class="border-t border-slate pt-2">Mr. Turki Alkhamis<br>Patient Affairs Director</div></div>
</div>
<!-- additional approvers (from PDF) -->
<div class="flex justify-center gap-8 text-[9px] text-slate mt-3">
<span>Mr. Omar Al Humaid (Chief Administrative Officer)</span>
</div>
</div>
<script>
lucide.createIcons();
// contextual data for the editable panels
const data = {
focus: {
med: "Highest activation: June 83.0%, Oct 77.6%, Jul 76.1%, Nov 75.5%",
admin: "Lowest: Feb 40.4% (critical), Jan 63.4%, May 63.1%, Sep 67.1%",
nur: "Delay reasons: patient refusal, unclear complaint content requiring clarification.",
rec: "• Implement timer notification in complaints platform.\n• Add reason-for-delay feature.\n• Train staff on clarifying complaints promptly."
},
overview: {
med: "Best months: Jun (83.0%), Oct (77.6%), Jul (76.1%)",
admin: "Worst: Feb (40.4%), Jan (63.4%), May (63.1%)",
nur: "Annual avg 68.8% far below target. Main delays: patient refusal, unclear content.",
rec: "Establish timer notification & delay reason feature. Improve initial complaint clarity."
}
};
function loadMonth() {
const m = document.getElementById('monthSelect').value; // 'focus' or 'overview'
document.getElementById('editMed').value = data[m].med;
document.getElementById('editAdmin').value = data[m].admin;
document.getElementById('editNur').value = data[m].nur;
document.getElementById('editRec').value = data[m].rec;
sync();
}
function sync() {
document.getElementById('viewMed').innerText = document.getElementById('editMed').value;
document.getElementById('viewAdmin').innerText = document.getElementById('editAdmin').value;
document.getElementById('viewNur').innerText = document.getElementById('editNur').value;
document.getElementById('viewRec').innerText = document.getElementById('editRec').value;
}
// trend chart (12 months data from PDF)
new ApexCharts(document.querySelector("#trendChart"), {
series: [{ name: 'Activation ≤2h %', data: [63.4, 40.4, 70.0, 70.2, 63.1, 83.0, 76.1, 70.8, 67.1, 77.6, 75.5, 68.8] }],
chart: { height: 180, type: 'line', toolbar: { show: false }, dropShadow: { enabled: true, top: 2, left: 2, blur: 2, opacity: 0.2 } },
colors: ['#005696'],
stroke: { width: 3, curve: 'smooth' },
markers: { size: 4, colors: ['#007bbd'], strokeColors: '#fff' },
xaxis: { categories: ['J','F','M','A','M','J','J','A','S','O','N','D'] },
yaxis: { min: 35, max: 100, labels: { formatter: v => v + '%' } },
annotations: { yaxis: [{ y: 95, borderColor: '#16a34a', label: { text: 'Target 95%', style: { color: '#fff', background: '#16a34a' } } }] }
}).render();
// small donut: activated ≤2h (474) vs delayed (689-474=215)
new ApexCharts(document.querySelector("#sourceChart"), {
series: [474, 215],
chart: { type: 'donut', height: 160 },
labels: ['Activated ≤2h', 'Delayed (>2h)'],
colors: ['#005696', '#cbd5e1'],
legend: { position: 'bottom', fontSize: '9px' }
}).render();
function exportPDF() {
const element = document.getElementById('report');
html2pdf().from(element).set({
margin: 0.3,
filename: 'KPI6_Activation_2h_2025.pdf',
html2canvas: { scale: 2 },
jsPDF: { unit: 'in', format: 'letter', orientation: 'portrait' }
}).save();
}
// initial load (focus on feb/june)
loadMonth();
</script>
<p class="text-[9px] text-gray-300 text-center max-w-6xl mx-auto mt-2">KPI-6 Complaint Activation Within 2 Hours recreated from PDF. Includes all monthly figures, analysis, and PX360 theme.</p>
</body>
</html>