{
    "success": true,
    "data": {
        "filter": {
            "shift": "semua",
            "date": "2026-09-28",
            "date_from": null,
            "date_to": null,
            "applied": true
        },
        "summary": {
            "total": 445,
            "berhasil": 103,
            "gagal": 79
        },
        "entries": [
            {
                "timestamp": "2026-09-28 19:25:04",
                "raw_log": "[2026-09-28 19:25:04] \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-09-28 19:25:04",
                "raw_log": "[2026-09-28 19:25:04] \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-09-28 19:25:04",
                "raw_log": "[2026-09-28 19:25:04] Checkout: keputusan=berhasil, nama=Anggi Nugraha, kar_id=193, id_absensi=207220313, shift=pagi, jam_kerja=11.79 jam, sumber=fallback",
                "message": "Checkout: keputusan=berhasil, nama=Anggi Nugraha, kar_id=193, id_absensi=207220313, shift=pagi, jam_kerja=11.79 jam, sumber=fallback",
                "category": "checkout-berhasil",
                "severity": "success",
                "nama": "Anggi Nugraha",
                "kar_id": "193",
                "shift": "pagi",
                "source": "fallback"
            },
            {
                "timestamp": "2026-09-28 18:29:04",
                "raw_log": "[2026-09-28 18:29:04] \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-09-28 18:29:04",
                "raw_log": "[2026-09-28 18:29:04] \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-09-28 18:29:04",
                "raw_log": "[2026-09-28 18:29:04] Tutup otomatis: keputusan=ditutup_otomatis, nama=Eka Kurnia, kar_id=575, id_absensi=207220275, shift=pagi, waktu_pulang=2026-09-28 18:18:38, alasan=jam kerja melebihi batas maksimal; fallback berdasarkan max_hours",
                "message": "Tutup otomatis: keputusan=ditutup_otomatis, nama=Eka Kurnia, kar_id=575, id_absensi=207220275, shift=pagi, waktu_pulang=2026-09-28 18:18:38, 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-09-28 18:29:04",
                "raw_log": "[2026-09-28 18:29:04] \u2717 REJECTED: No schedule found for 575 on 2026-09-28 (strict mode)",
                "message": "\u2717 REJECTED: No schedule found for 575 on 2026-09-28 (strict mode)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-09-28 18:29:04",
                "raw_log": "[2026-09-28 18:29:04] \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-09-28 18:29:04",
                "raw_log": "[2026-09-28 18:29:04] \u26a0 WARNING: No schedule AND outside shift hours for 575 on 2026-09-28 at 2026-09-28 18:28:27",
                "message": "\u26a0 WARNING: No schedule AND outside shift hours for 575 on 2026-09-28 at 2026-09-28 18:28:27",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-09-28 18:29:04",
                "raw_log": "[2026-09-28 18:29:04] 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-09-28 18:28:04",
                "raw_log": "[2026-09-28 18:28:04] Check-in: keputusan=berhasil, nama=Hidayat, kar_id=1324, id_absensi=207220417, shift=malam, sumber=schedule",
                "message": "Check-in: keputusan=berhasil, nama=Hidayat, kar_id=1324, id_absensi=207220417, shift=malam, sumber=schedule",
                "category": "check-in-berhasil",
                "severity": "success",
                "nama": "Hidayat",
                "kar_id": "1324",
                "shift": "malam",
                "source": "schedule"
            },
            {
                "timestamp": "2026-09-28 17:59:04",
                "raw_log": "[2026-09-28 17:59:04] \u26a0 FALLBACK: Using time-based detection pagi for 1740 (SCHEDULE MISSING!)",
                "message": "\u26a0 FALLBACK: Using time-based detection pagi for 1740 (SCHEDULE MISSING!)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-09-28 17:59:04",
                "raw_log": "[2026-09-28 17:59:04] \u26a0 FALLBACK checkout validation for 1740 (no schedule found)",
                "message": "\u26a0 FALLBACK checkout validation for 1740 (no schedule found)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-09-28 17:59:04",
                "raw_log": "[2026-09-28 17:59:04] Checkout: keputusan=berhasil, nama=Nadela Siti Nuraisyah, kar_id=1740, id_absensi=207220344, shift=pagi, jam_kerja=10.03 jam, sumber=fallback",
                "message": "Checkout: keputusan=berhasil, nama=Nadela Siti Nuraisyah, kar_id=1740, id_absensi=207220344, shift=pagi, jam_kerja=10.03 jam, sumber=fallback",
                "category": "checkout-berhasil",
                "severity": "success",
                "nama": "Nadela Siti Nuraisyah",
                "kar_id": "1740",
                "shift": "pagi",
                "source": "fallback"
            },
            {
                "timestamp": "2026-09-28 17:46:04",
                "raw_log": "[2026-09-28 17:46:04] \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-09-28 17:46:04",
                "raw_log": "[2026-09-28 17:46:04] \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-09-28 17:46:04",
                "raw_log": "[2026-09-28 17:46:04] Checkout: keputusan=berhasil, nama=Ridwan Lesmana, kar_id=719, id_absensi=207220402, shift=pagi, jam_kerja=7.37 jam, sumber=fallback",
                "message": "Checkout: keputusan=berhasil, nama=Ridwan Lesmana, kar_id=719, id_absensi=207220402, shift=pagi, jam_kerja=7.37 jam, sumber=fallback",
                "category": "checkout-berhasil",
                "severity": "success",
                "nama": "Ridwan Lesmana",
                "kar_id": "719",
                "shift": "pagi",
                "source": "fallback"
            },
            {
                "timestamp": "2026-09-28 17:34:03",
                "raw_log": "[2026-09-28 17:34:03] \u26a0 FALLBACK: Using time-based detection pagi for 251 (SCHEDULE MISSING!)",
                "message": "\u26a0 FALLBACK: Using time-based detection pagi for 251 (SCHEDULE MISSING!)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-09-28 17:34:03",
                "raw_log": "[2026-09-28 17:34:03] \u26a0 FALLBACK checkout validation for 251 (no schedule found)",
                "message": "\u26a0 FALLBACK checkout validation for 251 (no schedule found)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-09-28 17:34:03",
                "raw_log": "[2026-09-28 17:34:03] Checkout: keputusan=berhasil, nama=Pipin Sopian, kar_id=251, id_absensi=207220397, shift=pagi, jam_kerja=8.6 jam, sumber=fallback",
                "message": "Checkout: keputusan=berhasil, nama=Pipin Sopian, kar_id=251, id_absensi=207220397, shift=pagi, jam_kerja=8.6 jam, sumber=fallback",
                "category": "checkout-berhasil",
                "severity": "success",
                "nama": "Pipin Sopian",
                "kar_id": "251",
                "shift": "pagi",
                "source": "fallback"
            },
            {
                "timestamp": "2026-09-28 17:22:04",
                "raw_log": "[2026-09-28 17:22:04] \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-09-28 17:22:04",
                "raw_log": "[2026-09-28 17:22:04] \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-09-28 17:22:04",
                "raw_log": "[2026-09-28 17:22:04] Checkout: keputusan=berhasil, nama=Vinka Anggita Permana, kar_id=1317, id_absensi=207220382, shift=pagi, jam_kerja=9.03 jam, sumber=fallback",
                "message": "Checkout: keputusan=berhasil, nama=Vinka Anggita Permana, kar_id=1317, id_absensi=207220382, shift=pagi, jam_kerja=9.03 jam, sumber=fallback",
                "category": "checkout-berhasil",
                "severity": "success",
                "nama": "Vinka Anggita Permana",
                "kar_id": "1317",
                "shift": "pagi",
                "source": "fallback"
            },
            {
                "timestamp": "2026-09-28 17:17:04",
                "raw_log": "[2026-09-28 17:17:04] \u26a0 FALLBACK: Using time-based detection pagi for 1555 (SCHEDULE MISSING!)",
                "message": "\u26a0 FALLBACK: Using time-based detection pagi for 1555 (SCHEDULE MISSING!)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-09-28 17:17:04",
                "raw_log": "[2026-09-28 17:17:04] \u26a0 FALLBACK checkout validation for 1555 (no schedule found)",
                "message": "\u26a0 FALLBACK checkout validation for 1555 (no schedule found)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-09-28 17:17:04",
                "raw_log": "[2026-09-28 17:17:04] Checkout: keputusan=berhasil, nama=Fadhilla Alfajr, kar_id=1555, id_absensi=207220384, shift=pagi, jam_kerja=8.9 jam, sumber=fallback",
                "message": "Checkout: keputusan=berhasil, nama=Fadhilla Alfajr, kar_id=1555, id_absensi=207220384, shift=pagi, jam_kerja=8.9 jam, sumber=fallback",
                "category": "checkout-berhasil",
                "severity": "success",
                "nama": "Fadhilla Alfajr",
                "kar_id": "1555",
                "shift": "pagi",
                "source": "fallback"
            },
            {
                "timestamp": "2026-09-28 17:17:04",
                "raw_log": "[2026-09-28 17:17:04] \u26a0 FALLBACK: Using time-based detection pagi for 442 (SCHEDULE MISSING!)",
                "message": "\u26a0 FALLBACK: Using time-based detection pagi for 442 (SCHEDULE MISSING!)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-09-28 17:17:04",
                "raw_log": "[2026-09-28 17:17:04] \u26a0 FALLBACK checkout validation for 442 (no schedule found)",
                "message": "\u26a0 FALLBACK checkout validation for 442 (no schedule found)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-09-28 17:17:04",
                "raw_log": "[2026-09-28 17:17:04] Checkout: keputusan=berhasil, nama=Ranty Soeny Paraswaty, kar_id=442, id_absensi=207220394, shift=pagi, jam_kerja=8.57 jam, sumber=fallback",
                "message": "Checkout: keputusan=berhasil, nama=Ranty Soeny Paraswaty, kar_id=442, id_absensi=207220394, shift=pagi, jam_kerja=8.57 jam, sumber=fallback",
                "category": "checkout-berhasil",
                "severity": "success",
                "nama": "Ranty Soeny Paraswaty",
                "kar_id": "442",
                "shift": "pagi",
                "source": "fallback"
            },
            {
                "timestamp": "2026-09-28 17:17:04",
                "raw_log": "[2026-09-28 17:17:04] \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-09-28 17:17:04",
                "raw_log": "[2026-09-28 17:17:04] \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-09-28 17:17:04",
                "raw_log": "[2026-09-28 17:17:04] Checkout: keputusan=berhasil, nama=Alya Azhar Haura Putri, kar_id=1715, id_absensi=207220393, shift=pagi, jam_kerja=8.71 jam, sumber=fallback",
                "message": "Checkout: keputusan=berhasil, nama=Alya Azhar Haura Putri, kar_id=1715, id_absensi=207220393, shift=pagi, jam_kerja=8.71 jam, sumber=fallback",
                "category": "checkout-berhasil",
                "severity": "success",
                "nama": "Alya Azhar Haura Putri",
                "kar_id": "1715",
                "shift": "pagi",
                "source": "fallback"
            },
            {
                "timestamp": "2026-09-28 17:17:04",
                "raw_log": "[2026-09-28 17:17:04] \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-09-28 17:17:04",
                "raw_log": "[2026-09-28 17:17:04] \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-09-28 17:17:04",
                "raw_log": "[2026-09-28 17:17:04] Checkout: keputusan=berhasil, nama=Alifa Rizki Salsabila Rosadi, kar_id=1734, id_absensi=207220371, shift=pagi, jam_kerja=9.15 jam, sumber=fallback",
                "message": "Checkout: keputusan=berhasil, nama=Alifa Rizki Salsabila Rosadi, kar_id=1734, id_absensi=207220371, shift=pagi, jam_kerja=9.15 jam, sumber=fallback",
                "category": "checkout-berhasil",
                "severity": "success",
                "nama": "Alifa Rizki Salsabila Rosadi",
                "kar_id": "1734",
                "shift": "pagi",
                "source": "fallback"
            },
            {
                "timestamp": "2026-09-28 17:17:03",
                "raw_log": "[2026-09-28 17:17:03] \u26a0 FALLBACK: Using time-based detection pagi for 1345 (SCHEDULE MISSING!)",
                "message": "\u26a0 FALLBACK: Using time-based detection pagi for 1345 (SCHEDULE MISSING!)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-09-28 17:17:03",
                "raw_log": "[2026-09-28 17:17:03] \u26a0 FALLBACK checkout validation for 1345 (no schedule found)",
                "message": "\u26a0 FALLBACK checkout validation for 1345 (no schedule found)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-09-28 17:17:03",
                "raw_log": "[2026-09-28 17:17:03] Checkout: keputusan=berhasil, nama=Putri Zahro Pramesty, kar_id=1345, id_absensi=207220353, shift=pagi, jam_kerja=9.28 jam, sumber=fallback",
                "message": "Checkout: keputusan=berhasil, nama=Putri Zahro Pramesty, kar_id=1345, id_absensi=207220353, shift=pagi, jam_kerja=9.28 jam, sumber=fallback",
                "category": "checkout-berhasil",
                "severity": "success",
                "nama": "Putri Zahro Pramesty",
                "kar_id": "1345",
                "shift": "pagi",
                "source": "fallback"
            },
            {
                "timestamp": "2026-09-28 17:17:03",
                "raw_log": "[2026-09-28 17:17:03] \u26a0 FALLBACK: Using time-based detection pagi for 1758 (SCHEDULE MISSING!)",
                "message": "\u26a0 FALLBACK: Using time-based detection pagi for 1758 (SCHEDULE MISSING!)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-09-28 17:17:03",
                "raw_log": "[2026-09-28 17:17:03] \u26a0 FALLBACK checkout validation for 1758 (no schedule found)",
                "message": "\u26a0 FALLBACK checkout validation for 1758 (no schedule found)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-09-28 17:17:03",
                "raw_log": "[2026-09-28 17:17:03] Checkout: keputusan=berhasil, nama=Al Fath Arda Jatikusuma, kar_id=1758, id_absensi=207220303, shift=pagi, jam_kerja=9.83 jam, sumber=fallback",
                "message": "Checkout: keputusan=berhasil, nama=Al Fath Arda Jatikusuma, kar_id=1758, id_absensi=207220303, shift=pagi, jam_kerja=9.83 jam, sumber=fallback",
                "category": "checkout-berhasil",
                "severity": "success",
                "nama": "Al Fath Arda Jatikusuma",
                "kar_id": "1758",
                "shift": "pagi",
                "source": "fallback"
            },
            {
                "timestamp": "2026-09-28 17:16:04",
                "raw_log": "[2026-09-28 17:16:04] \u26a0 FALLBACK: Using time-based detection pagi for 320 (SCHEDULE MISSING!)",
                "message": "\u26a0 FALLBACK: Using time-based detection pagi for 320 (SCHEDULE MISSING!)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-09-28 17:16:04",
                "raw_log": "[2026-09-28 17:16:04] \u26a0 FALLBACK checkout validation for 320 (no schedule found)",
                "message": "\u26a0 FALLBACK checkout validation for 320 (no schedule found)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-09-28 17:16:04",
                "raw_log": "[2026-09-28 17:16:04] Checkout: keputusan=berhasil, nama=Asep Setiawan, kar_id=320, id_absensi=207220361, shift=pagi, jam_kerja=9.21 jam, sumber=fallback",
                "message": "Checkout: keputusan=berhasil, nama=Asep Setiawan, kar_id=320, id_absensi=207220361, shift=pagi, jam_kerja=9.21 jam, sumber=fallback",
                "category": "checkout-berhasil",
                "severity": "success",
                "nama": "Asep Setiawan",
                "kar_id": "320",
                "shift": "pagi",
                "source": "fallback"
            },
            {
                "timestamp": "2026-09-28 17:14:03",
                "raw_log": "[2026-09-28 17:14:03] \u26a0 FALLBACK: Using time-based detection pagi for 443 (SCHEDULE MISSING!)",
                "message": "\u26a0 FALLBACK: Using time-based detection pagi for 443 (SCHEDULE MISSING!)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-09-28 17:14:03",
                "raw_log": "[2026-09-28 17:14:03] \u26a0 FALLBACK checkout validation for 443 (no schedule found)",
                "message": "\u26a0 FALLBACK checkout validation for 443 (no schedule found)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-09-28 17:14:03",
                "raw_log": "[2026-09-28 17:14:03] Checkout: keputusan=berhasil, nama=Fariha Syifa, kar_id=443, id_absensi=207220383, shift=pagi, jam_kerja=8.89 jam, sumber=fallback",
                "message": "Checkout: keputusan=berhasil, nama=Fariha Syifa, kar_id=443, id_absensi=207220383, shift=pagi, jam_kerja=8.89 jam, sumber=fallback",
                "category": "checkout-berhasil",
                "severity": "success",
                "nama": "Fariha Syifa",
                "kar_id": "443",
                "shift": "pagi",
                "source": "fallback"
            },
            {
                "timestamp": "2026-09-28 17:10:04",
                "raw_log": "[2026-09-28 17:10:04] \u26a0 FALLBACK: Using time-based detection pagi for 421 (SCHEDULE MISSING!)",
                "message": "\u26a0 FALLBACK: Using time-based detection pagi for 421 (SCHEDULE MISSING!)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-09-28 17:10:04",
                "raw_log": "[2026-09-28 17:10:04] \u26a0 FALLBACK checkout validation for 421 (no schedule found)",
                "message": "\u26a0 FALLBACK checkout validation for 421 (no schedule found)",
                "category": "unknown",
                "severity": "info"
            },
            {
                "timestamp": "2026-09-28 17:10:04",
                "raw_log": "[2026-09-28 17:10:04] Checkout: keputusan=berhasil, nama=Gina Oktaviana, kar_id=421, id_absensi=207220368, shift=pagi, jam_kerja=9.06 jam, sumber=fallback",
                "message": "Checkout: keputusan=berhasil, nama=Gina Oktaviana, kar_id=421, id_absensi=207220368, shift=pagi, jam_kerja=9.06 jam, sumber=fallback",
                "category": "checkout-berhasil",
                "severity": "success",
                "nama": "Gina Oktaviana",
                "kar_id": "421",
                "shift": "pagi",
                "source": "fallback"
            }
        ],
        "pagination": {
            "current_page": 1,
            "total_pages": 9,
            "per_page": 50,
            "total_entries": 445
        }
    }
}