{
    "success": true,
    "data": {
        "filter": {
            "shift": "semua",
            "date": "2026-06-05",
            "date_from": null,
            "date_to": null,
            "applied": true
        },
        "summary": {
            "total": 485,
            "berhasil": 108,
            "gagal": 81
        },
        "entries": [
            {
                "timestamp": "2026-06-05 19:17:02",
                "raw_log": "[2026-06-05 19:17:02] \u26a0 FALLBACK: Using time-based detection pagi for 470 (SCHEDULE MISSING!)",
                "message": "\u26a0 FALLBACK: Using time-based detection pagi for 470 (SCHEDULE MISSING!)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-06-05 19:17:02",
                "raw_log": "[2026-06-05 19:17:02] \u26a0 FALLBACK checkout validation for 470 (no schedule found)",
                "message": "\u26a0 FALLBACK checkout validation for 470 (no schedule found)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-06-05 19:17:02",
                "raw_log": "[2026-06-05 19:17:02] Checkout: keputusan=berhasil, nama=Fathur Sanusi, kar_id=470, id_absensi=207207626, shift=pagi, jam_kerja=11.45 jam, sumber=fallback",
                "message": "Checkout: keputusan=berhasil, nama=Fathur Sanusi, kar_id=470, id_absensi=207207626, shift=pagi, jam_kerja=11.45 jam, sumber=fallback",
                "category": "checkout-berhasil",
                "severity": "success",
                "nama": "Fathur Sanusi",
                "kar_id": "470",
                "shift": "pagi",
                "source": "fallback"
            },
            {
                "timestamp": "2026-06-05 19:17:02",
                "raw_log": "[2026-06-05 19:17:02] \u26a0 FALLBACK: Using time-based detection pagi for 641 (SCHEDULE MISSING!)",
                "message": "\u26a0 FALLBACK: Using time-based detection pagi for 641 (SCHEDULE MISSING!)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-06-05 19:17:02",
                "raw_log": "[2026-06-05 19:17:02] \u26a0 FALLBACK checkout validation for 641 (no schedule found)",
                "message": "\u26a0 FALLBACK checkout validation for 641 (no schedule found)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-06-05 19:17:02",
                "raw_log": "[2026-06-05 19:17:02] Checkout: keputusan=berhasil, nama=Renaldi Virgiawan Argi, kar_id=641, id_absensi=207207686, shift=pagi, jam_kerja=10.79 jam, sumber=fallback",
                "message": "Checkout: keputusan=berhasil, nama=Renaldi Virgiawan Argi, kar_id=641, id_absensi=207207686, shift=pagi, jam_kerja=10.79 jam, sumber=fallback",
                "category": "checkout-berhasil",
                "severity": "success",
                "nama": "Renaldi Virgiawan Argi",
                "kar_id": "641",
                "shift": "pagi",
                "source": "fallback"
            },
            {
                "timestamp": "2026-06-05 19:16:02",
                "raw_log": "[2026-06-05 19:16:02] \u26a0 FALLBACK: Using time-based detection pagi for 311 (SCHEDULE MISSING!)",
                "message": "\u26a0 FALLBACK: Using time-based detection pagi for 311 (SCHEDULE MISSING!)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-06-05 19:16:02",
                "raw_log": "[2026-06-05 19:16:02] \u26a0 FALLBACK checkout validation for 311 (no schedule found)",
                "message": "\u26a0 FALLBACK checkout validation for 311 (no schedule found)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-06-05 19:16:02",
                "raw_log": "[2026-06-05 19:16:02] Checkout: keputusan=berhasil, nama=Imantri Didit Purnomo Aji, kar_id=311, id_absensi=207207609, shift=pagi, jam_kerja=11.63 jam, sumber=fallback",
                "message": "Checkout: keputusan=berhasil, nama=Imantri Didit Purnomo Aji, kar_id=311, id_absensi=207207609, shift=pagi, jam_kerja=11.63 jam, sumber=fallback",
                "category": "checkout-berhasil",
                "severity": "success",
                "nama": "Imantri Didit Purnomo Aji",
                "kar_id": "311",
                "shift": "pagi",
                "source": "fallback"
            },
            {
                "timestamp": "2026-06-05 19:11:02",
                "raw_log": "[2026-06-05 19:11:02] \u26a0 FALLBACK: Using time-based detection pagi for 719 (SCHEDULE MISSING!)",
                "message": "\u26a0 FALLBACK: Using time-based detection pagi for 719 (SCHEDULE MISSING!)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-06-05 19:11:02",
                "raw_log": "[2026-06-05 19:11:02] \u26a0 FALLBACK checkout validation for 719 (no schedule found)",
                "message": "\u26a0 FALLBACK checkout validation for 719 (no schedule found)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-06-05 19:11:02",
                "raw_log": "[2026-06-05 19:11:02] Checkout: keputusan=berhasil, nama=Ridwan Lesmana, kar_id=719, id_absensi=207207679, shift=pagi, jam_kerja=10.89 jam, sumber=fallback",
                "message": "Checkout: keputusan=berhasil, nama=Ridwan Lesmana, kar_id=719, id_absensi=207207679, shift=pagi, jam_kerja=10.89 jam, sumber=fallback",
                "category": "checkout-berhasil",
                "severity": "success",
                "nama": "Ridwan Lesmana",
                "kar_id": "719",
                "shift": "pagi",
                "source": "fallback"
            },
            {
                "timestamp": "2026-06-05 19:07:02",
                "raw_log": "[2026-06-05 19:07:02] \u26a0 FALLBACK: Using time-based detection pagi for 193 (SCHEDULE MISSING!)",
                "message": "\u26a0 FALLBACK: Using time-based detection pagi for 193 (SCHEDULE MISSING!)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-06-05 19:07:02",
                "raw_log": "[2026-06-05 19:07:02] \u26a0 FALLBACK checkout validation for 193 (no schedule found)",
                "message": "\u26a0 FALLBACK checkout validation for 193 (no schedule found)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-06-05 19:07:02",
                "raw_log": "[2026-06-05 19:07:02] Checkout: keputusan=berhasil, nama=Anggi Nugraha, kar_id=193, id_absensi=207207646, shift=pagi, jam_kerja=11.15 jam, sumber=fallback",
                "message": "Checkout: keputusan=berhasil, nama=Anggi Nugraha, kar_id=193, id_absensi=207207646, shift=pagi, jam_kerja=11.15 jam, sumber=fallback",
                "category": "checkout-berhasil",
                "severity": "success",
                "nama": "Anggi Nugraha",
                "kar_id": "193",
                "shift": "pagi",
                "source": "fallback"
            },
            {
                "timestamp": "2026-06-05 19:02:02",
                "raw_log": "[2026-06-05 19:02:02] \u26a0 FALLBACK: Using time-based detection pagi for 575 (SCHEDULE MISSING!)",
                "message": "\u26a0 FALLBACK: Using time-based detection pagi for 575 (SCHEDULE MISSING!)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-06-05 19:02:02",
                "raw_log": "[2026-06-05 19:02:02] \u26a0 FALLBACK checkout validation for 575 (no schedule found)",
                "message": "\u26a0 FALLBACK checkout validation for 575 (no schedule found)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-06-05 19:02:02",
                "raw_log": "[2026-06-05 19:02:02] Tutup otomatis: keputusan=ditutup_otomatis, nama=Eka Kurnia, kar_id=575, id_absensi=207207564, shift=pagi, waktu_pulang=2026-06-05 18:19:18, alasan=jam kerja melebihi batas maksimal; fallback berdasarkan max_hours",
                "message": "Tutup otomatis: keputusan=ditutup_otomatis, nama=Eka Kurnia, kar_id=575, id_absensi=207207564, shift=pagi, waktu_pulang=2026-06-05 18:19:18, alasan=jam kerja melebihi batas maksimal; fallback berdasarkan max_hours",
                "category": "tutup-otomatis",
                "severity": "warning",
                "nama": "Eka Kurnia",
                "kar_id": "575",
                "shift": "pagi",
                "alasan": "jam kerja melebihi batas maksimal; fallback berdasarkan max_hours"
            },
            {
                "timestamp": "2026-06-05 19:02:02",
                "raw_log": "[2026-06-05 19:02:02] \u2717 REJECTED: No schedule found for 575 on 2026-06-05 (strict mode)",
                "message": "\u2717 REJECTED: No schedule found for 575 on 2026-06-05 (strict mode)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-06-05 19:02:02",
                "raw_log": "[2026-06-05 19:02:02] \u26a0 ALLOWING FALLBACK: Schedule coverage only 0% for nama=Eka Kurnia, kar_id=575",
                "message": "\u26a0 ALLOWING FALLBACK: Schedule coverage only 0% for nama=Eka Kurnia, kar_id=575",
                "category": "fallback-mode",
                "severity": "warning",
                "nama": "Eka Kurnia",
                "kar_id": "575"
            },
            {
                "timestamp": "2026-06-05 19:02:02",
                "raw_log": "[2026-06-05 19:02:02] \u26a0 WARNING: No schedule AND outside shift hours for 575 on 2026-06-05 at 2026-06-05 19:01:33",
                "message": "\u26a0 WARNING: No schedule AND outside shift hours for 575 on 2026-06-05 at 2026-06-05 19:01:33",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-06-05 19:02:02",
                "raw_log": "[2026-06-05 19:02:02] Check-in: keputusan=ditolak, nama=Eka Kurnia, kar_id=575, alasan=outside shift hours (Undefined); tidak ada insert ke trs_absensi",
                "message": "Check-in: keputusan=ditolak, nama=Eka Kurnia, kar_id=575, alasan=outside shift hours (Undefined); tidak ada insert ke trs_absensi",
                "category": "check-in-ditolak",
                "severity": "error",
                "nama": "Eka Kurnia",
                "kar_id": "575",
                "alasan": "outside shift hours (Undefined); tidak ada insert ke trs_absensi"
            },
            {
                "timestamp": "2026-06-05 18:27:03",
                "raw_log": "[2026-06-05 18:27:03] \u26a0 FALLBACK: Using time-based detection pagi for 1715 (SCHEDULE MISSING!)",
                "message": "\u26a0 FALLBACK: Using time-based detection pagi for 1715 (SCHEDULE MISSING!)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-06-05 18:27:03",
                "raw_log": "[2026-06-05 18:27:03] \u26a0 FALLBACK checkout validation for 1715 (no schedule found)",
                "message": "\u26a0 FALLBACK checkout validation for 1715 (no schedule found)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-06-05 18:27:03",
                "raw_log": "[2026-06-05 18:27:03] Checkout: keputusan=berhasil, nama=Alya Azhar Haura Putri, kar_id=1715, id_absensi=207207693, shift=pagi, jam_kerja=9.49 jam, sumber=fallback",
                "message": "Checkout: keputusan=berhasil, nama=Alya Azhar Haura Putri, kar_id=1715, id_absensi=207207693, shift=pagi, jam_kerja=9.49 jam, sumber=fallback",
                "category": "checkout-berhasil",
                "severity": "success",
                "nama": "Alya Azhar Haura Putri",
                "kar_id": "1715",
                "shift": "pagi",
                "source": "fallback"
            },
            {
                "timestamp": "2026-06-05 18:25:03",
                "raw_log": "[2026-06-05 18:25:03] \u26a0 FALLBACK: Using time-based detection pagi for 1324 (SCHEDULE MISSING!)",
                "message": "\u26a0 FALLBACK: Using time-based detection pagi for 1324 (SCHEDULE MISSING!)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-06-05 18:25:03",
                "raw_log": "[2026-06-05 18:25:03] \u26a0 FALLBACK checkout validation for 1324 (no schedule found)",
                "message": "\u26a0 FALLBACK checkout validation for 1324 (no schedule found)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-06-05 18:25:03",
                "raw_log": "[2026-06-05 18:25:03] Checkout: keputusan=berhasil, nama=Hidayat, kar_id=1324, id_absensi=207207582, shift=pagi, jam_kerja=11.38 jam, sumber=fallback",
                "message": "Checkout: keputusan=berhasil, nama=Hidayat, kar_id=1324, id_absensi=207207582, shift=pagi, jam_kerja=11.38 jam, sumber=fallback",
                "category": "checkout-berhasil",
                "severity": "success",
                "nama": "Hidayat",
                "kar_id": "1324",
                "shift": "pagi",
                "source": "fallback"
            },
            {
                "timestamp": "2026-06-05 17:40:02",
                "raw_log": "[2026-06-05 17:40:02] \u26a0 FALLBACK: Using time-based detection pagi for 1317 (SCHEDULE MISSING!)",
                "message": "\u26a0 FALLBACK: Using time-based detection pagi for 1317 (SCHEDULE MISSING!)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-06-05 17:40:02",
                "raw_log": "[2026-06-05 17:40:02] \u26a0 FALLBACK checkout validation for 1317 (no schedule found)",
                "message": "\u26a0 FALLBACK checkout validation for 1317 (no schedule found)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-06-05 17:40:02",
                "raw_log": "[2026-06-05 17:40:02] Checkout: keputusan=berhasil, nama=Vinka Anggita Permana, kar_id=1317, id_absensi=207207581, shift=pagi, jam_kerja=10.64 jam, sumber=fallback",
                "message": "Checkout: keputusan=berhasil, nama=Vinka Anggita Permana, kar_id=1317, id_absensi=207207581, shift=pagi, jam_kerja=10.64 jam, sumber=fallback",
                "category": "checkout-berhasil",
                "severity": "success",
                "nama": "Vinka Anggita Permana",
                "kar_id": "1317",
                "shift": "pagi",
                "source": "fallback"
            },
            {
                "timestamp": "2026-06-05 17:31:04",
                "raw_log": "[2026-06-05 17:31:04] \u2717 REJECTED: No schedule found for 1723 on 2026-06-05 (strict mode)",
                "message": "\u2717 REJECTED: No schedule found for 1723 on 2026-06-05 (strict mode)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-06-05 17:31:04",
                "raw_log": "[2026-06-05 17:31:04] \u26a0 ALLOWING FALLBACK: Schedule coverage only 0% for nama=Angga Nur Rizki, kar_id=1723",
                "message": "\u26a0 ALLOWING FALLBACK: Schedule coverage only 0% for nama=Angga Nur Rizki, kar_id=1723",
                "category": "fallback-mode",
                "severity": "warning",
                "nama": "Angga Nur Rizki",
                "kar_id": "1723"
            },
            {
                "timestamp": "2026-06-05 17:31:04",
                "raw_log": "[2026-06-05 17:31:04] \u26a0 FALLBACK: Using time-based detection sore for 1723 (SCHEDULE MISSING!)",
                "message": "\u26a0 FALLBACK: Using time-based detection sore for 1723 (SCHEDULE MISSING!)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-06-05 17:31:04",
                "raw_log": "[2026-06-05 17:31:04] \u26a0 SHIFT ASSIGNED: sore (source: fallback) for nama=Angga Nur Rizki, kar_id=1723",
                "message": "\u26a0 SHIFT ASSIGNED: sore (source: fallback) for nama=Angga Nur Rizki, kar_id=1723",
                "category": "unknown",
                "severity": "info",
                "nama": "Angga Nur Rizki",
                "kar_id": "1723"
            },
            {
                "timestamp": "2026-06-05 17:31:04",
                "raw_log": "[2026-06-05 17:31:04] Check-in: keputusan=berhasil, nama=Angga Nur Rizki, kar_id=1723, id_absensi=207207703, shift=sore, sumber=fallback",
                "message": "Check-in: keputusan=berhasil, nama=Angga Nur Rizki, kar_id=1723, id_absensi=207207703, shift=sore, sumber=fallback",
                "category": "check-in-berhasil",
                "severity": "success",
                "nama": "Angga Nur Rizki",
                "kar_id": "1723",
                "shift": "sore",
                "source": "fallback"
            },
            {
                "timestamp": "2026-06-05 17:31:03",
                "raw_log": "[2026-06-05 17:31:03] \u26a0 FALLBACK: Using time-based detection pagi for 1734 (SCHEDULE MISSING!)",
                "message": "\u26a0 FALLBACK: Using time-based detection pagi for 1734 (SCHEDULE MISSING!)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-06-05 17:31:03",
                "raw_log": "[2026-06-05 17:31:03] \u26a0 FALLBACK checkout validation for 1734 (no schedule found)",
                "message": "\u26a0 FALLBACK checkout validation for 1734 (no schedule found)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-06-05 17:31:03",
                "raw_log": "[2026-06-05 17:31:03] Checkout: keputusan=berhasil, nama=Alifa Rizki Salsabila Rosadi, kar_id=1734, id_absensi=207207640, shift=pagi, jam_kerja=9.56 jam, sumber=fallback",
                "message": "Checkout: keputusan=berhasil, nama=Alifa Rizki Salsabila Rosadi, kar_id=1734, id_absensi=207207640, shift=pagi, jam_kerja=9.56 jam, sumber=fallback",
                "category": "checkout-berhasil",
                "severity": "success",
                "nama": "Alifa Rizki Salsabila Rosadi",
                "kar_id": "1734",
                "shift": "pagi",
                "source": "fallback"
            },
            {
                "timestamp": "2026-06-05 17:22:02",
                "raw_log": "[2026-06-05 17:22:02] \u26a0 FALLBACK: Using time-based detection pagi for 1745 (SCHEDULE MISSING!)",
                "message": "\u26a0 FALLBACK: Using time-based detection pagi for 1745 (SCHEDULE MISSING!)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-06-05 17:22:02",
                "raw_log": "[2026-06-05 17:22:02] \u26a0 FALLBACK checkout validation for 1745 (no schedule found)",
                "message": "\u26a0 FALLBACK checkout validation for 1745 (no schedule found)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-06-05 17:22:02",
                "raw_log": "[2026-06-05 17:22:02] Checkout: keputusan=berhasil, nama=Agus Irsan Saefuloh, kar_id=1745, id_absensi=207207627, shift=pagi, jam_kerja=9.54 jam, sumber=fallback",
                "message": "Checkout: keputusan=berhasil, nama=Agus Irsan Saefuloh, kar_id=1745, id_absensi=207207627, shift=pagi, jam_kerja=9.54 jam, sumber=fallback",
                "category": "checkout-berhasil",
                "severity": "success",
                "nama": "Agus Irsan Saefuloh",
                "kar_id": "1745",
                "shift": "pagi",
                "source": "fallback"
            },
            {
                "timestamp": "2026-06-05 17:19:02",
                "raw_log": "[2026-06-05 17:19:02] \u26a0 FALLBACK: Using time-based detection pagi for 1107 (SCHEDULE MISSING!)",
                "message": "\u26a0 FALLBACK: Using time-based detection pagi for 1107 (SCHEDULE MISSING!)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-06-05 17:19:02",
                "raw_log": "[2026-06-05 17:19:02] \u26a0 FALLBACK checkout validation for 1107 (no schedule found)",
                "message": "\u26a0 FALLBACK checkout validation for 1107 (no schedule found)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-06-05 17:19:02",
                "raw_log": "[2026-06-05 17:19:02] Checkout: keputusan=berhasil, nama=Anggellisana Early, kar_id=1107, id_absensi=207207691, shift=pagi, jam_kerja=8.46 jam, sumber=fallback",
                "message": "Checkout: keputusan=berhasil, nama=Anggellisana Early, kar_id=1107, id_absensi=207207691, shift=pagi, jam_kerja=8.46 jam, sumber=fallback",
                "category": "checkout-berhasil",
                "severity": "success",
                "nama": "Anggellisana Early",
                "kar_id": "1107",
                "shift": "pagi",
                "source": "fallback"
            },
            {
                "timestamp": "2026-06-05 17:18:03",
                "raw_log": "[2026-06-05 17:18:03] \u2717 REJECTED: No schedule found for 622 on 2026-06-05 (strict mode)",
                "message": "\u2717 REJECTED: No schedule found for 622 on 2026-06-05 (strict mode)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-06-05 17:18:03",
                "raw_log": "[2026-06-05 17:18:03] \u26a0 ALLOWING FALLBACK: Schedule coverage only 0% for nama=Indera Waskita, kar_id=622",
                "message": "\u26a0 ALLOWING FALLBACK: Schedule coverage only 0% for nama=Indera Waskita, kar_id=622",
                "category": "fallback-mode",
                "severity": "warning",
                "nama": "Indera Waskita",
                "kar_id": "622"
            },
            {
                "timestamp": "2026-06-05 17:18:03",
                "raw_log": "[2026-06-05 17:18:03] \u26a0 FALLBACK: Using time-based detection sore for 622 (SCHEDULE MISSING!)",
                "message": "\u26a0 FALLBACK: Using time-based detection sore for 622 (SCHEDULE MISSING!)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-06-05 17:18:03",
                "raw_log": "[2026-06-05 17:18:03] \u26a0 SHIFT ASSIGNED: sore (source: fallback) for nama=Indera Waskita, kar_id=622",
                "message": "\u26a0 SHIFT ASSIGNED: sore (source: fallback) for nama=Indera Waskita, kar_id=622",
                "category": "unknown",
                "severity": "info",
                "nama": "Indera Waskita",
                "kar_id": "622"
            },
            {
                "timestamp": "2026-06-05 17:18:03",
                "raw_log": "[2026-06-05 17:18:03] Check-in: keputusan=berhasil, nama=Indera Waskita, kar_id=622, id_absensi=207207702, shift=sore, sumber=fallback",
                "message": "Check-in: keputusan=berhasil, nama=Indera Waskita, kar_id=622, id_absensi=207207702, shift=sore, sumber=fallback",
                "category": "check-in-berhasil",
                "severity": "success",
                "nama": "Indera Waskita",
                "kar_id": "622",
                "shift": "sore",
                "source": "fallback"
            }
        ],
        "pagination": {
            "current_page": 1,
            "total_pages": 10,
            "per_page": 50,
            "total_entries": 485
        }
    }
}