gdc_cmod/UAT_GDC_CMOD_Checklist.html
mahdahar 440f8b0362 feat: Add UAT checklist HTML version and enhance report generation with collection date support
This commit adds a print-friendly HTML version of the UAT checklist and enhances the report generation system with collection date tracking.

New Features:
- Add UAT_GDC_CMOD_Checklist.html with interactive checkboxes and print-friendly layout
- Simplify UAT markdown checklist by removing 'No.' column and refining instructions

Report Generation Enhancements:
- Add collection date tracking to report generation workflow
- ReportController now passes collection date to PDF spooler
- ReportHelper fetches collection date from SP_REQUESTS table via getCollectionDateRaw()
- Node spooler receives collection date parameter for report generation

UI Improvements (content_requests.php):
- Add new 'Result' column showing Ready/Pending status with visual indicators
- Move Print, Generate PDF, and Retry PDF actions from Actions menu to Result dropdown
- Result dropdown shows green 'Ready' for duavalidated requests, yellow 'Pending' otherwise
- Actions appropriately restricted by role and validation status
- Simplify Actions menu by relocating report-related functions
2026-02-05 11:33:29 +07:00

196 lines
26 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="id">
<head>
<meta charset="UTF-8">
<title>UAT Checklist - GDC CMOD 📋</title>
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: 'Segoe UI', 'Arial', sans-serif;
line-height: 1.1;
color: #000;
background: white;
padding: 3mm;
font-size: 10pt;
}
.container {
max-width: 100%;
margin: 0 auto;
background: white;
padding: 0;
}
@media print {
body { padding: 1mm; font-size: 10pt; }
h1 {
font-size: 12pt;
padding: 1px 0;
margin: 0 0 2px 0;
page-break-after: avoid !important;
}
.data-table { margin: 0; }
table { page-break-inside: avoid !important; }
.container { padding-top: 0; }
tr { page-break-inside: avoid !important; }
input[type="text"] {
border: 1px solid #ccc !important;
background: #fff !important;
}
input[type="checkbox"] {
-webkit-appearance: square !important;
appearance: square !important;
width: 10px !important;
height: 10px !important;
}
}
h1 {
color: #000;
text-align: center;
font-size: 11pt;
border-bottom: 1px solid #000;
padding: 1px 0;
margin: 0;
page-break-after: avoid;
}
.data-table {
width: 100%;
border-collapse: collapse;
margin: 2px 0 0 0;
font-size: 8pt;
}
.data-table th {
background: #e9ecef;
color: #000;
padding: 1px 2px;
text-align: left;
font-size: 8pt;
font-weight: bold;
text-transform: uppercase;
border: 1px solid #000;
line-height: 1.1;
}
.data-table td {
border: 1px solid #000;
padding: 1px 2px;
vertical-align: top;
word-wrap: break-word;
line-height: 1.1;
}
.data-table tr:nth-child(even) { background: #f8f8f8; }
input[type="text"] {
width: 100%;
padding: 2px;
border: 1px solid #ddd;
border-radius: 2px;
font-size: 8pt;
}
input[type="checkbox"] {
margin: 0 2px;
width: 10px;
height: 10px;
}
code {
background: #ddd;
padding: 1px 2px;
border: 1px solid #999;
font-size: 8pt;
}
.spacer { height: 0; display: none; }
br { line-height: 1.5; }
</style>
</head>
<body>
<div class="container">
<div style="page-break-inside: avoid; display: inline-block; width: 100%;">
<h1>📋 UAT (User Acceptance Testing) 🧪 - GDC CMOD Laboratory Management System 🏥</h1>
<table class="data-table">
<tr><th>ID</th><th>Judul Test Case</th><th>Langkah Utama</th><th>Expected Result</th><th>Role</th><th>Hasil</th><th>Issue/Jawaban</th></tr>
<tr><td>🎯</td><td>📌 Ready to Test!</td><td>🚀 Let's Go!</td><td>✨ Good Luck!</td><td>👥 All Roles</td><td>🎉 Fun!</td><td>📝 Notes...</td></tr>
<tr><td>TC-001</td><td>Login Berhasil 🔐</td><td>Login dengan username &amp; password valid</td><td>Redirect ke dashboard sesuai role 🎯</td><td>AUTENTIKASI &amp; SESI 🔑</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-002</td><td>Login Gagal - Username Salah 🚫</td><td>Masukkan username tidak ada</td><td>Error "Invalid credentials" ⚠️</td><td>AUTENTIKASI &amp; SESI 🔐</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-003</td><td>Login Gagal - Password Salah 🙅</td><td>Password salah</td><td>Error invalid credentials 🚨</td><td>AUTENTIKASI &amp; SESI 🔐</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-004</td><td>Login Gagal - Akun Terkunci 🔒</td><td>Login ke akun locked dari legacy</td><td>Error "Account locked" 🛑</td><td>AUTENTIKASI &amp; SESI 🔐</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-005</td><td>Logout Berhasil 👋</td><td>Klik menu Logout</td><td>Session terhapus, redirect ke login ✨</td><td>AUTENTIKASI &amp; SESI 🔑</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-006</td><td>Redirect ke Login Belum Login 🔄</td><td>Akses protected page tanpa login</td><td>Redirect otomatis ke halaman login 🚪</td><td>AUTENTIKASI &amp; SESI 🛡️</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-007</td><td>Ganti Password Berhasil 🔑</td><td>Change password baru</td><td>Password berhasil diubah dan di-hash ✅</td><td>AUTENTIKASI &amp; SESI 🆕</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-008</td><td>Ganti Password Gagal - Password Lama Salah ❌</td><td>Masukkan password lama salah</td><td>Error "Invalid old password" 🚫</td><td>AUTENTIKASI &amp; SESI 🔐</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-009</td><td>Role-Based Redirect Login 👥</td><td>Login dengan berbagai role</td><td>Redirect ke dashboard sesuai role 🎯</td><td>AUTENTIKASI &amp; SESI 🎭</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-010</td><td>Tampilkan Semua Request 📊</td><td>Login Superuser → <code>/superuser</code></td><td>Tabel requests semua status ditampilkan 📋</td><td>SU, ADM, PHLEB, CS</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-011</td><td>Filter by Status 🎛️</td><td>Pilih status di dashboard filter</td><td>Filter berfungsi sesuai status 🔍</td><td>SU</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-012</td><td>Filter by Date Range 📅</td><td>Set date1 &amp; date2 → filter</td><td>Filter tanggal berfungsi 🗓️</td><td>SU</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-013</td><td>Search by Patient Name 👤</td><td>Masukkan nama pasien</td><td>Tampilkan request dengan nama tsb 🔍</td><td>SU</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-014</td><td>Search by Lab Number 🔢</td><td>Masukkan Lab Number</td><td>Tampilkan request tsb 🎯</td><td>SU</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-015</td><td>Search by Register Number #️⃣</td><td>Masukkan Register Number</td><td>Tampilkan request tsb 📌</td><td>SU</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-016</td><td>Table Sorting ↕️</td><td>Klik header kolom</td><td>Kolom di-sort ASC/DESC 📈📉</td><td>SU</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-017</td><td>Pagination 📖</td><td>Klik halaman berbeda</td><td>Berpindah halaman dengan benar 📄</td><td>SU</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-018</td><td>Tampilkan List User 👥</td><td>Access <code>/superuser/users</code></td><td>Tabel users ditampilkan lengkap 📋</td><td>SU, ADM</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-019</td><td>Buat User Baru </td><td>Add User → isi form</td><td>User berhasil dibuat dan password di-hash 🆔</td><td>SU, ADM</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-020</td><td>Validasi Password Min 3 Karakter 🔢</td><td>Buat user dengan password &lt; 3 char</td><td>Error "Password min 3 karakter" ⚠️</td><td>SU</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-021</td><td>Update User Role ✏️</td><td>Edit user → ubah role</td><td>Role berhasil diubah 🔄</td><td>SU</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-022</td><td>Update Password User 🔐</td><td>Edit user → ganti password</td><td>Password di-hash dengan benar 🔄</td><td>SU</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-023</td><td>Delete User 🗑️</td><td>Delete user</td><td>User terhapus dari database 🗑️</td><td>SU, ADM</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-024</td><td>Tampilkan Request Final ✨</td><td>Access <code>/superuser/validate</code></td><td>Hanya request "Fin" yang tampil ✅</td><td>SU, ADM, LAB</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-025</td><td>Filter by Date Range Validasi 📅</td><td>Set date1 &amp; date2 → filter</td><td>Filter berfungsi di halaman validasi 🔍</td><td>SU</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-026</td><td>First Validation (VAL1) ✅</td><td>Validasi request "Fin"</td><td>ISVAL1=1, VAL1USER &amp; VAL1DATE diset 📝</td><td>SU, ADM, LAB</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-027</td><td>Second Validation (VAL2) ✅✅</td><td>Validasi dengan user berbeda</td><td>ISVAL2=1, request duavalidated 🎉</td><td>SU, ADM, LAB</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-028</td><td>Gagal Validasi Sendiri 🚫</td><td>Coba validasi ulang sama user</td><td>Error "Cannot validate own request" 🙅</td><td>SU, ADM, LAB</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-029</td><td>Un-Validate Request ↩️</td><td>Un-validate dengan reason</td><td>ISVAL reset, PENDING diset 🔄</td><td>SU, ADM</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-030</td><td>Shortcut Keyboard ⌨️</td><td>Enter=Validate, N=Skip, Esc=Close</td><td>Shortcut berfungsi dengan benar ⚡</td><td>SU</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-031</td><td>Progress Indicator 📊</td><td>Buka validation modal</td><td>Progress muncul (posisi / total) 📈</td><td>SU</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-032</td><td>Collect Sample 🧪</td><td>Buka dialog sample → Collect</td><td>STATUS=1, COLLECTIONDATE &amp; USERID diset ✅</td><td>SU, ADM, LAB</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-033</td><td>Un-Collect Sample ↩️</td><td>Buka dialog sample → Un-Collect</td><td>STATUS di-reset, audit log tercatat 📝</td><td>SU, ADM, LAB</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-034</td><td>Un-Receive Sample 🔙</td><td>Un-receive sample yang received</td><td>Status berubah, audit log tercatat 📋</td><td>SU, ADM, LAB</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-035</td><td>Print Label Individu 🏷️</td><td>Print label per tube</td><td>Label tercetak dengan ZPL format 🖨️</td><td>SU</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-036</td><td>Print Collection Label 📋</td><td>Print collection label</td><td>Label collection tercetak 🏷️</td><td>SU</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-037</td><td>Print All Labels 📄</td><td>Print semua tubes</td><td>Semua labels tercetak 🖨️</td><td>SU</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-038</td><td>View Request Audit 🔍</td><td>Buka audit dialog request</td><td>Audit trail timeline ditampilkan 📜</td><td>SU</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-039</td><td>Filter by Category 🎯</td><td>Filter: All, Validation, Receive, Sample</td><td>Filter berfungsi sesuai kategori 🔍</td><td>SU</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-040</td><td>View Report Validated 📊</td><td>View report request duavalidated</td><td>Report ditampilkan lengkap 📋</td><td>SU, ADM, LAB, CS</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-041</td><td>Cannot View Not Validated 🚫</td><td>View report belum duavalidated</td><td>Error: "Validated request required" ⚠️</td><td>SU</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-042</td><td>Print Report 🖨️</td><td>Print report request validated</td><td>Print dialog buka, audit log tercatat 📝</td><td>SU, ADM, LAB, CS</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-043</td><td>Generate PDF 📑</td><td>Generate PDF request validated</td><td>PDF berhasil di-generate ✅</td><td>SU, ADM, LAB, CS</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-044</td><td>Preview Report (No Audit) 👀</td><td>Preview report tanpa log audit</td><td>Report tampil, tidak ada audit log 📄</td><td>SU</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-045</td><td>English Version Report 🇬🇧</td><td>Access <code>/report/{id}/eng</code></td><td>Report dalam Bahasa Inggris 🗣️</td><td>SU</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-046</td><td>Edit Comment ✏️</td><td>Edit comment di dashboard</td><td>Comment berubah tersimpan 💾</td><td>SU</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-047</td><td>Error Handling 404 🚫</td><td>Akses URL tidak valid</td><td>Custom notfound page tampil 📄</td><td>SU</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-048</td><td>Error Handling Unauthorized 🔒</td><td>Coba akses role lain</td><td>Redirect ke <code>/unauthorized</code> 🚫</td><td>SU</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-049</td><td>Filter &amp; Search 🔍</td><td>Uji berbagai filter dan search</td><td>Semua berfungsi seperti Superuser ⚡</td><td>ADMIN, PHLEB, CS</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-050</td><td>Sample Collection Buttons Enabled ✅</td><td>Buka dialog sample</td><td>Tombol Collect/Un-Coll/Un-Recv enabled 🔘</td><td>ADMIN</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-051</td><td>Edit Comment Enabled ✏️</td><td>Edit comment dashboard</td><td>Comment dapat diubah 💬</td><td>ADMIN</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-052</td><td>Print Labels 🏷️</td><td>Print individual/collection/all</td><td>Semua labels tercetak 🖨️</td><td>ADM, LAB, PHLEB</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-053</td><td>View Audit Trail 📜</td><td>Buka audit dialog</td><td>Timeline audit ditampilkan 🔍</td><td>ADM, LAB, PHLEB, CS</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-054</td><td>Update User 🔄</td><td>Edit user → ubah data</td><td>User berhasil di-update ✅</td><td>ADMIN</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-055</td><td>Cannot Access Role Lain 🚫</td><td>Coba <code>/superuser</code>, <code>/lab</code>, <code>/phlebo</code>, <code>/cs</code></td><td>Redirect ke unauthorized/error ⛔</td><td>ADM, LAB, PHLEB, CS</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-056</td><td>Filter Test Code Alphabetical 🔤</td><td>Login Lab → <code>/lab</code></td><td>Hanya request TESTS A-Z yang tampil 📋</td><td>LAB</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-057</td><td>View Request Details 👁️</td><td>Buka request</td><td>Detail request ditampilkan 📄</td><td>LAB</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-058</td><td>Filter &amp; Search dalam Batas Filter 🔍</td><td>Uji filter &amp; search</td><td>Sesuai batas test code A-Z ✅</td><td>LAB</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-059</td><td>Sample Buttons Enabled ✅</td><td>Buka dialog sample</td><td>Tombol Collect/Un-Coll/Un-Recv enabled 🔘</td><td>LAB</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-060</td><td>Edit Comment Disabled 🔒</td><td>Cek comment field</td><td>Comment field non-editable 🚫</td><td>LAB, PHLEB, CS</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-061</td><td>Un-Validate Disabled 🔒</td><td>Coba un-validate</td><td>Error/Unauthorized - cannot un-validate 🚫</td><td>LAB</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-062</td><td>Sample Collection Disabled 🔒</td><td>Buka dialog sample</td><td>Tombol Collect/Un-Coll/Un-Recv DISABLED 🚫</td><td>PHLEB, CS</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-063</td><td>Validation Page Denied 🔒</td><td>Coba <code>/phlebo/validate</code></td><td>Halaman tidak tersedia/unauthorized ⛔</td><td>PHLEB, CS</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-064</td><td>View Sample Details (Read-Only) 👀</td><td>Buka dialog sample</td><td>Sample details view-only 📄</td><td>PHLEB, CS</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-065</td><td>Cannot View Report 🔒</td><td>Coba view report</td><td>Report tidak tersedia/error 🚫</td><td>PHLEB</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-066</td><td>Cannot Print Report 🖨️❌</td><td>Coba print report</td><td>Print tidak tersedia 🚫</td><td>PHLEB</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-067</td><td>Cannot Generate PDF 📑❌</td><td>Coba generate PDF</td><td>PDF tidak tersedia 🚫</td><td>PHLEB</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-068</td><td>Print Labels (Limited) 🏷️</td><td>Print labels</td><td>Labels tercetak sesuai kapasitas 🖨️</td><td>CS</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-069</td><td>User Mgmt Role Restrictions 🔐</td><td>Lab/Phlebo/CS coba user management API</td><td>Error unauthorized 🚫</td><td>FITUR CROSS-ROLE 🔗</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-070</td><td>Cross-Role Validation 🤝</td><td>Lab A validasi VAL1, Superuser B validasi VAL2</td><td>Cross-role validation berhasil ✅</td><td>FITUR CROSS-ROLE 🔄</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-071</td><td>Un-Validate Role Restrictions 🔒</td><td>Lab/Phlebo/CS coba un-validate</td><td>Error unauthorized - only SU/Admin 🚫</td><td>FITUR CROSS-ROLE 🛡️</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-072</td><td>Un-Receive Role Restrictions 🔒</td><td>Lab/Phlebo/CS coba un-receive</td><td>Error unauthorized - only SU/Admin 🚫</td><td>FITUR CROSS-ROLE 🛡️</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-073</td><td>Report Access Restrictions 👁️</td><td>Coba view report semua role</td><td>SU/Admin/Lab/CS OK, Phlebo NOT ✅❌</td><td>FITUR CROSS-ROLE 🔍</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-074</td><td>Report Validated Requirement ✅✅</td><td>View report hanya VAR1 vs duavalidated</td><td>Hanya duavalidated dapat dilihat 🎯</td><td>FITUR CROSS-ROLE ✅</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-075</td><td>Comment Edit Restrictions 💬🔒</td><td>Lab/Phlebo/CS coba edit comment</td><td>Error - only SU/Admin editable 🚫</td><td>FITUR CROSS-ROLE ✏️</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-076</td><td>Validasi tidak Pengaruhi Data Lain 🛡️</td><td>Record data sebelum &amp; sesudah validasi</td><td>Hanya status validasi berubah 📝</td><td>FITUR CROSS-ROLE 🔍</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-077</td><td>Un-Validate Mempertahankan Data 🔄</td><td>Record data sebelum &amp; sesudah un-validate</td><td>Hanya status validasi berubah 📝</td><td>FITUR CROSS-ROLE 🔍</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-078</td><td>Audit Trail Logging 📜</td><td>Lakukan berbagai aktivitas</td><td>Semua tercatat di audit log ✅</td><td>FITUR CROSS-ROLE 🔍</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-079</td><td>Concurrent Validation ⚡</td><td>2 user buka validation dialog bersamaan</td><td>Validasi berhasil, tidak conflict ✅</td><td>FITUR CROSS-ROLE 🤝</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-080</td><td>Concurrent Sample Collection ⚡</td><td>2 user collect tube berbeda bersamaan</td><td>Semua berhasil tercatat ✅</td><td>FITUR CROSS-ROLE 🧪</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-081</td><td>Session Timeout ⏱️</td><td>Tunggu session timeout</td><td>Redirect ke login 🔄</td><td>FITUR CROSS-ROLE 🔐</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-082</td><td>Password Hashing Security 🔒</td><td>Buat user → cek database</td><td>Password dalam HASH bukan plain 🛡️</td><td>FITUR CROSS-ROLE 🔐</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
<tr><td>TC-083</td><td>Legacy Read-Only 👀</td><td>Cek koneksi &amp; fungsi Firebird</td><td>Hanya READ dari Firebird, TIDAK WRITE 🚫✍️</td><td>FITUR CROSS-ROLE 🗄️</td><td><input type="checkbox"><br> <input type="checkbox"></td><td><input type="text" value="___________"></td></tr>
</table>
</div>
</body>
</html>