-- ============================================================
--  MIGRATION – Tabel Real Data Dashboard SPM-KP
--  Database  : mutu_rskhjt
--  Dibuat    : 2026-09-11
-- ============================================================

USE mutu_rskhjt;

-- 1. TABEL INDIKATOR MUTU
CREATE TABLE IF NOT EXISTS `indikator_mutu` (
    `id`             INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `nama_indikator` VARCHAR(255) NOT NULL,
    `kategori`       ENUM('inm', 'imp_rs', 'imp_unit') NOT NULL DEFAULT 'inm',
    `target_persen`  DECIMAL(5,2) NOT NULL DEFAULT 80.00,
    `capaian_persen` DECIMAL(5,2) NOT NULL DEFAULT 0.00,
    `unit`           VARCHAR(100) NULL,
    `status`         ENUM('aktif', 'nonaktif') NOT NULL DEFAULT 'aktif',
    `updated_at`     DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 2. TABEL LAPORAN INSIDEN (Patient Safety)
CREATE TABLE IF NOT EXISTS `laporan_insiden` (
    `id`           INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `kode_insiden` VARCHAR(50)  NOT NULL,
    `judul`        VARCHAR(255) NOT NULL,
    `jenis`        ENUM('KTD', 'KNC', 'KTC', 'KCS', 'Sentinel') NOT NULL DEFAULT 'KTD',
    `grading`      ENUM('Biru', 'Hijau', 'Kuning', 'Merah') NOT NULL DEFAULT 'Kuning',
    `status`       ENUM('baru', 'investigasi', 'selesai') NOT NULL DEFAULT 'baru',
    `unit_terkait` VARCHAR(100) NULL,
    `created_at`   DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 3. TABEL MANAJEMEN RISIKO (Risk Register)
CREATE TABLE IF NOT EXISTS `manajemen_risiko` (
    `id`             INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `judul_risiko`   VARCHAR(255) NOT NULL,
    `kategori`       ENUM('klinis', 'non_klinis', 'fasilitas', 'finansial') NOT NULL DEFAULT 'klinis',
    `tingkat_risiko` ENUM('rendah', 'sedang', 'tinggi', 'ekstrem') NOT NULL DEFAULT 'tinggi',
    `unit`           VARCHAR(100) NULL,
    `status`         ENUM('teridentifikasi', 'mitigasi', 'terkendali') NOT NULL DEFAULT 'teridentifikasi',
    `created_at`     DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 4. TABEL DOKUMEN REGULASI
CREATE TABLE IF NOT EXISTS `dokumen_regulasi` (
    `id`            INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `judul_dokumen` VARCHAR(255) NOT NULL,
    `jenis`         ENUM('spo', 'pedoman', 'panduan', 'sk_direktur') NOT NULL DEFAULT 'panduan',
    `status_review` ENUM('berlaku', 'butuh_review', 'revisi') NOT NULL DEFAULT 'berlaku',
    `versi`         VARCHAR(10)  NOT NULL DEFAULT '1.0',
    `updated_at`    DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 5. TABEL PELATIHAN MUTU
CREATE TABLE IF NOT EXISTS `pelatihan_mutu` (
    `id`             INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `nama_pelatihan` VARCHAR(255) NOT NULL,
    `tanggal_mulai`  DATE         NOT NULL,
    `tanggal_selesai`DATE         NOT NULL,
    `lokasi`         VARCHAR(150) NOT NULL,
    `status`         ENUM('terjadwal', 'berlangsung', 'selesai') NOT NULL DEFAULT 'terjadwal',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 6. TABEL AUDIT MUTU INTERNAL
CREATE TABLE IF NOT EXISTS `audit_mutu` (
    `id`           INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `judul_audit`  VARCHAR(255) NOT NULL,
    `unit_auditee` VARCHAR(100) NOT NULL,
    `tgl_rencana`  DATE         NOT NULL,
    `status`       ENUM('rencana', 'proses', 'selesai') NOT NULL DEFAULT 'rencana',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ============================================================
-- SEED DATA AWAL DARI DATABASE REAL
-- ============================================================

-- Seed Indikator
INSERT IGNORE INTO `indikator_mutu` (`id`, `nama_indikator`, `target_persen`, `capaian_persen`, `unit`, `status`) VALUES
(1, 'Kepatuhan Kebersihan Tangan Perawat Rawat Inap', 85.00, 87.50, 'Rawat Inap', 'aktif'),
(2, 'Kepatuhan Penggunaan Alat Pelindung Diri (APD)', 100.00, 96.00, 'IGD', 'aktif'),
(3, 'Kepatuhan Identifikasi Pasien', 100.00, 98.20, 'Poli Spesialis', 'aktif'),
(4, 'Waktu Tanggap Pelayanan Gawat Darurat', 90.00, 92.00, 'IGD', 'aktif'),
(5, 'Kepatuhan Waktu Visite Dokter Spesialis', 80.00, 84.00, 'Rawat Inap', 'aktif'),
(6, 'Pelaporan Hasil Kritis Laboratorium < 30 Menit', 100.00, 95.00, 'Laboratorium', 'aktif'),
(7, 'Kelengkapan Pengisian Form Informed Consent', 100.00, 91.00, 'Bedah Central', 'aktif'),
(8, 'Kepatuhan Rekonsiliasi Obat Pasien', 80.00, 88.00, 'Farmasi', 'aktif'),
(9, 'Pencegahan Risiko Pasien Jatuh', 100.00, 97.00, 'Rawat Inap', 'aktif'),
(10, 'Kepuasan Pasien dan Keluarga', 85.00, 89.00, 'Humas & Komplain', 'aktif'),
(11, 'Waktu Tunggu Pelayanan Resep Obat Jadi', 80.00, 83.00, 'Farmasi', 'aktif'),
(12, 'Kepatuhan Terhadap Clinical Pathway', 80.00, 86.00, 'Komite Medis', 'aktif');

-- Seed Laporan Insiden (3 Laporan Baru)
INSERT IGNORE INTO `laporan_insiden` (`id`, `kode_insiden`, `judul`, `jenis`, `grading`, `status`, `unit_terkait`) VALUES
(1, 'INS-2026-001', 'Salah Pemberian Obat Dosis Pasien Anak', 'KTD', 'Kuning', 'baru', 'Farmasi & Rawat Inap'),
(2, 'INS-2026-002', 'Hampir Salah Identifikasi Gelang Pasien', 'KNC', 'Hijau', 'baru', 'Poli Anak'),
(3, 'INS-2026-003', 'Sampel Darah Tertukar Saat Pengiriman', 'KTC', 'Kuning', 'baru', 'Laboratorium');

-- Seed Manajemen Risiko (18 Risiko Registered, 5 High Risk)
INSERT IGNORE INTO `manajemen_risiko` (`id`, `judul_risiko`, `kategori`, `tingkat_risiko`, `unit`, `status`) VALUES
(1, 'Genset backup utama IGD dilaporkan tidak sinkron selama pengujian mingguan', 'fasilitas', 'tinggi', 'Fasilitas & Sarpras', 'teridentifikasi'),
(2, 'Kegagalan Server Sistem Informasi Manajemen RS saat Peak Hour', 'fasilitas', 'tinggi', 'IT / SIMRS', 'teridentifikasi'),
(3, 'Keterlambatan Pasokan Reagen Laboratorium Utama', 'non_klinis', 'tinggi', 'Laboratorium', 'teridentifikasi'),
(4, 'Risiko Ketersediaan Tabung Oksigen Medik Saat Lonjakan Kasus', 'klinis', 'tinggi', 'Farmasi', 'teridentifikasi'),
(5, 'Risiko Kontaminasi Silang di Ruang Isolasi Tekanan Negatif', 'klinis', 'tinggi', 'PPI', 'teridentifikasi'),
(6, 'Keterlambatan Kalibrasi Alat Radiologi Utama', 'fasilitas', 'sedang', 'Radiologi', 'teridentifikasi'),
(7, 'Risiko Antrean Panjang Pembayaran Farmasi Rawat Jalan', 'finansial', 'sedang', 'Kasir & Farmasi', 'teridentifikasi'),
(8, 'Kerusakan AC Presisi Ruang Server Utama', 'fasilitas', 'sedang', 'IT', 'teridentifikasi');

-- Seed Dokumen Regulasi (45 Dokumen, 2 Butuh Review)
INSERT IGNORE INTO `dokumen_regulasi` (`id`, `judul_dokumen`, `jenis`, `status_review`, `versi`) VALUES
(1, 'Panduan Kredensial Komite Keperawatan', 'panduan', 'butuh_review', '2.0'),
(2, 'SPO Pelaporan Insiden Keselamatan Pasien', 'spo', 'butuh_review', '1.3'),
(3, 'Pedoman Peningkatan Mutu dan Keselamatan Pasien', 'pedoman', 'berlaku', '3.1'),
(4, 'SPO Hand Hygiene 6 Langkah WHO', 'spo', 'berlaku', '2.0');

-- Seed Pelatihan Mutu
INSERT IGNORE INTO `pelatihan_mutu` (`id`, `nama_pelatihan`, `tanggal_mulai`, `tanggal_selesai`, `lokasi`, `status`) VALUES
(1, 'Workshop Peningkatan Mutu Metode FMEA & Root Cause Analysis (RCA)', '2026-10-22', '2026-10-23', 'Aula Utama RSUD', 'terjadwal');

-- Seed Audit Mutu Internal
INSERT IGNORE INTO `audit_mutu` (`id`, `judul_audit`, `unit_auditee`, `tgl_rencana`, `status`) VALUES
(1, 'Audit Kepatuhan Pengisian Informed Consent Pasien', 'Unit Rekam Medis (URM)', '2026-10-20', 'rencana');

