-- Master Data untuk Pengelolaan Laporan Pengukuran Iklim Kerja Suhu
-- Berdasarkan PMK RI No.2 Tahun 2023

-- Tabel Master Regulasi
CREATE TABLE master_regulasi (
    regulasi_id INT PRIMARY KEY AUTO_INCREMENT,
    kode_regulasi VARCHAR(50) NOT NULL,
    nama_regulasi VARCHAR(200) NOT NULL,
    instansi_penerbit VARCHAR(100) NOT NULL,
    tahun_terbit INT NOT NULL,
    tanggal_berlaku DATE,
    deskripsi TEXT,
    file_path VARCHAR(255),
    is_active BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

-- Tabel Master Parameter Lingkungan Kerja
CREATE TABLE master_parameter (
    parameter_id INT PRIMARY KEY AUTO_INCREMENT,
    kode_parameter VARCHAR(50) NOT NULL,
    nama_parameter VARCHAR(100) NOT NULL,
    kelompok_parameter VARCHAR(50), -- Fisika, Kimia, Biologi
    satuan VARCHAR(20),
    metode_analisis VARCHAR(100),
    deskripsi TEXT,
    harga DECIMAL(12, 2),
    is_active BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

-- Tabel Master Nilai Ambang Batas untuk Iklim Kerja
CREATE TABLE master_nilai_ambang_batas (
    nab_id INT PRIMARY KEY AUTO_INCREMENT,
    regulasi_id INT,
    parameter_id INT,
    tipe_ruangan VARCHAR(100) NOT NULL,
    nilai_minimal DECIMAL(8, 2),
    nilai_maksimal DECIMAL(8, 2),
    satuan VARCHAR(20),
    keterangan TEXT,
    is_active BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (regulasi_id) REFERENCES master_regulasi(regulasi_id),
    FOREIGN KEY (parameter_id) REFERENCES master_parameter(parameter_id)
);

-- Tabel Master Pelanggan
CREATE TABLE master_pelanggan (
    pelanggan_id INT PRIMARY KEY AUTO_INCREMENT,
    kode_pelanggan VARCHAR(50) NOT NULL,
    nama_pelanggan VARCHAR(200) NOT NULL,
    alamat TEXT,
    kota VARCHAR(100),
    provinsi VARCHAR(100),
    kode_pos VARCHAR(20),
    no_telepon VARCHAR(50),
    email VARCHAR(100),
    contact_person VARCHAR(100),
    jabatan_contact VARCHAR(100),
    bidang_usaha VARCHAR(100),
    is_active BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

-- Tabel Master Personel (Petugas Sampling, Analis, dll)
CREATE TABLE master_personel (
    personel_id INT PRIMARY KEY AUTO_INCREMENT,
    nik VARCHAR(50) NOT NULL,
    nama VARCHAR(100) NOT NULL,
    jabatan VARCHAR(100),
    departemen VARCHAR(100),
    email VARCHAR(100),
    no_telepon VARCHAR(50),
    sertifikasi TEXT,
    is_active BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

-- Tabel Master Peralatan Pengukuran
CREATE TABLE master_peralatan (
    peralatan_id INT PRIMARY KEY AUTO_INCREMENT,
    kode_peralatan VARCHAR(50) NOT NULL,
    nama_peralatan VARCHAR(100) NOT NULL,
    merk VARCHAR(100),
    model VARCHAR(100),
    nomor_seri VARCHAR(100),
    tanggal_kalibrasi DATE,
    tanggal_kalibrasi_selanjutnya DATE,
    parameter_id INT,
    spesifikasi TEXT,
    is_active BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (parameter_id) REFERENCES master_parameter(parameter_id)
);

-- Tabel Master Lokasi Sampling
CREATE TABLE master_lokasi_sampling (
    lokasi_id INT PRIMARY KEY AUTO_INCREMENT,
    pelanggan_id INT,
    nama_lokasi VARCHAR(200) NOT NULL,
    alamat TEXT,
    koordinat_latitude DECIMAL(10, 8),
    koordinat_longitude DECIMAL(11, 8),
    jenis_ruangan VARCHAR(100),
    deskripsi TEXT,
    is_active BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (pelanggan_id) REFERENCES master_pelanggan(pelanggan_id)
);

-- Tabel Permintaan Pengukuran (Form Request)
CREATE TABLE permintaan_pengukuran (
    permintaan_id INT PRIMARY KEY AUTO_INCREMENT,
    nomor_permintaan VARCHAR(50) NOT NULL,
    pelanggan_id INT,
    tanggal_permintaan DATE,
    tanggal_rencana_sampling DATE,
    contact_person VARCHAR(100),
    status VARCHAR(50), -- draft, submitted, approved, scheduled, completed, canceled
    catatan TEXT,
    dibuat_oleh INT,
    disetujui_oleh INT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (pelanggan_id) REFERENCES master_pelanggan(pelanggan_id),
    FOREIGN KEY (dibuat_oleh) REFERENCES master_personel(personel_id),
    FOREIGN KEY (disetujui_oleh) REFERENCES master_personel(personel_id)
);

-- Tabel Detail Permintaan Pengukuran
CREATE TABLE detail_permintaan_pengukuran (
    detail_permintaan_id INT PRIMARY KEY AUTO_INCREMENT,
    permintaan_id INT,
    parameter_id INT,
    lokasi_id INT,
    jumlah_titik INT DEFAULT 1,
    harga_satuan DECIMAL(12, 2),
    subtotal DECIMAL(12, 2),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (permintaan_id) REFERENCES permintaan_pengukuran(permintaan_id),
    FOREIGN KEY (parameter_id) REFERENCES master_parameter(parameter_id),
    FOREIGN KEY (lokasi_id) REFERENCES master_lokasi_sampling(lokasi_id)
);

-- Tabel Jadwal Pengukuran
CREATE TABLE jadwal_pengukuran (
    jadwal_id INT PRIMARY KEY AUTO_INCREMENT,
    nomor_jadwal VARCHAR(50) NOT NULL,
    permintaan_id INT,
    tanggal_pengukuran DATE,
    petugas_id INT,
    status VARCHAR(50), -- scheduled, completed, rescheduled, canceled
    catatan TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (permintaan_id) REFERENCES permintaan_pengukuran(permintaan_id),
    FOREIGN KEY (petugas_id) REFERENCES master_personel(personel_id)
);

-- Tabel Laporan Hasil Uji Iklim Kerja
CREATE TABLE laporan_hasil_uji (
    laporan_id INT PRIMARY KEY AUTO_INCREMENT,
    nomor_laporan VARCHAR(50) NOT NULL,
    permintaan_id INT,
    jadwal_id INT,
    tanggal_pengukuran DATE,
    tanggal_terbit DATE,
    pelanggan_id INT,
    petugas_id INT,
    diverifikasi_oleh INT,
    disetujui_oleh INT,
    status VARCHAR(50), -- draft, verification, approved, published, revised
    halaman_jumlah INT DEFAULT 1,
    catatan TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (permintaan_id) REFERENCES permintaan_pengukuran(permintaan_id),
    FOREIGN KEY (jadwal_id) REFERENCES jadwal_pengukuran(jadwal_id),
    FOREIGN KEY (pelanggan_id) REFERENCES master_pelanggan(pelanggan_id),
    FOREIGN KEY (petugas_id) REFERENCES master_personel(personel_id),
    FOREIGN KEY (diverifikasi_oleh) REFERENCES master_personel(personel_id),
    FOREIGN KEY (disetujui_oleh) REFERENCES master_personel(personel_id)
);

-- Tabel Detail Hasil Pengukuran Iklim Kerja Suhu
CREATE TABLE hasil_pengukuran_suhu (
    hasil_id INT PRIMARY KEY AUTO_INCREMENT,
    laporan_id INT,
    lokasi_id INT,
    kode_sampel VARCHAR(50) NOT NULL,
    waktu_pengukuran_mulai TIME,
    waktu_pengukuran_selesai TIME,
    parameter_id INT,
    hasil_pengukuran DECIMAL(8, 2),
    satuan VARCHAR(20),
    metode VARCHAR(100),
    nab_id INT,
    keterangan TEXT,
    peralatan_id INT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (laporan_id) REFERENCES laporan_hasil_uji(laporan_id),
    FOREIGN KEY (lokasi_id) REFERENCES master_lokasi_sampling(lokasi_id),
    FOREIGN KEY (parameter_id) REFERENCES master_parameter(parameter_id),
    FOREIGN KEY (nab_id) REFERENCES master_nilai_ambang_batas(nab_id),
    FOREIGN KEY (peralatan_id) REFERENCES master_peralatan(peralatan_id)
);

-- ================================
-- INSERT DATA MASTER
-- ================================

-- Insert Master Regulasi
INSERT INTO master_regulasi (regulasi_id, kode_regulasi, nama_regulasi, instansi_penerbit, tahun_terbit, tanggal_berlaku, deskripsi, file_path, is_active) VALUES
(1, 'PMK-02-2023', 'Peraturan Menteri Kesehatan Republik Indonesia Nomor 2 Tahun 2023', 'Kementerian Kesehatan RI', 2023, '2023-02-01', 'Peraturan mengenai Standar Baku Mutu Kesehatan Lingkungan dan Persyaratan Kesehatan', '/documents/regulasi/PMK_02_2023.pdf', TRUE),
(2, 'PERMENAKER-05-2018', 'Peraturan Menteri Ketenagakerjaan Republik Indonesia Nomor 5 Tahun 2018', 'Kementerian Ketenagakerjaan RI', 2018, '2018-05-10', 'Peraturan mengenai Keselamatan dan Kesehatan Kerja Lingkungan Kerja', '/documents/regulasi/PERMENAKER_05_2018.pdf', TRUE);

-- Insert Master Parameter
INSERT INTO master_parameter (parameter_id, kode_parameter, nama_parameter, kelompok_parameter, satuan, metode_analisis, deskripsi, harga, is_active) VALUES
(1, 'SUHU', 'Suhu', 'Fisika', '°C', 'SNI 7062: 2019', 'Parameter iklim kerja untuk pengukuran suhu ruangan', 75000.00, TRUE),
(2, 'KELEMBABAN', 'Kelembaban', 'Fisika', '%RH', 'SNI 7062: 2019', 'Parameter iklim kerja untuk pengukuran kelembaban relatif', 75000.00, TRUE),
(3, 'ISBB', 'Indeks Suhu Basah dan Bola', 'Fisika', '°C', 'SNI 7062: 2019', 'Parameter iklim kerja untuk pengukuran ISBB indoor/outdoor', 100000.00, TRUE),
(4, 'KECUDARA', 'Kecepatan Aliran Udara', 'Fisika', 'm/s', 'SNI 7062: 2019', 'Parameter iklim kerja untuk pengukuran kecepatan aliran udara', 75000.00, TRUE);

-- Insert Master Nilai Ambang Batas untuk Parameter Suhu
INSERT INTO master_nilai_ambang_batas (nab_id, regulasi_id, parameter_id, tipe_ruangan, nilai_minimal, nilai_maksimal, satuan, keterangan, is_active) VALUES
(1, 1, 1, 'Administrasi', 20.00, 25.00, '°C', 'Ruang kerja administrasi dan perkantoran', TRUE),
(2, 1, 1, 'Ruangan Khusus', 18.00, 24.00, '°C', 'Ruang server, laboratorium, dll', TRUE),
(3, 1, 1, 'Produksi', 23.00, 26.00, '°C', 'Ruang produksi', TRUE),
(4, 1, 1, 'Ruang Umum', 22.00, 28.00, '°C', 'Ruang umum, kantin, lobi', TRUE),
(5, 1, 1, 'Toilet', 22.00, 28.00, '°C', 'Kamar mandi, toilet', TRUE),
(6, 1, 1, 'Gudang', 16.00, 30.00, '°C', 'Ruang penyimpanan, gudang', TRUE);

-- Insert Master Pelanggan
INSERT INTO master_pelanggan (pelanggan_id, kode_pelanggan, nama_pelanggan, alamat, kota, provinsi, kode_pos, no_telepon, email, contact_person, jabatan_contact, bidang_usaha, is_active) VALUES
(1, 'PLG-001', 'PT. Industri Manufaktur Indonesia', 'Jl. Industri Raya No. 123', 'Jakarta', 'DKI Jakarta', '12950', '021-5551234', 'contact@manufakturindonesia.com', 'Budi Santoso', 'HSE Manager', 'Manufaktur', TRUE),
(2, 'PLG-002', 'PT. Teknologi Digital Nusantara', 'Jl. Gatot Subroto Kav. 52-53', 'Jakarta', 'DKI Jakarta', '12710', '021-5552345', 'hrd@tdn.co.id', 'Siti Rahma', 'HR Director', 'Teknologi Informasi', TRUE),
(3, 'PLG-003', 'RSUD Kota Sehat', 'Jl. Kesehatan No. 45', 'Bandung', 'Jawa Barat', '40112', '022-7654321', 'info@rsudkotasehat.go.id', 'dr. Ahmad Hidayat', 'Direktur', 'Kesehatan', TRUE);

-- Insert Master Personel
INSERT INTO master_personel (personel_id, nik, nama, jabatan, departemen, email, no_telepon, sertifikasi, is_active) VALUES
(1, 'EMP-001', 'Hendra Wijaya', 'Supervisor Pengujian', 'Laboratorium', 'hendra@lab-env.co.id', '081234567890', 'Sertifikasi Pengambilan Contoh Uji Lingkungan Kerja', TRUE),
(2, 'EMP-002', 'Ratna Dewi', 'Analis Senior', 'Laboratorium', 'ratna@lab-env.co.id', '081234567891', 'Sertifikasi Analis Laboratorium, Ahli K3 Umum', TRUE),
(3, 'EMP-003', 'Deni Hermawan', 'Petugas Sampling', 'Laboratorium', 'deni@lab-env.co.id', '081234567892', 'Sertifikasi Pengambilan Contoh Uji', TRUE),
(4, 'EMP-004', 'Farida Nurhasanah', 'Manager Laboratorium', 'Laboratorium', 'farida@lab-env.co.id', '081234567893', 'Sertifikasi Manager Mutu, Sertifikasi Ahli K3', TRUE);

-- Insert Master Peralatan Pengukuran
INSERT INTO master_peralatan (peralatan_id, kode_peralatan, nama_peralatan, merk, model, nomor_seri, tanggal_kalibrasi, tanggal_kalibrasi_selanjutnya, parameter_id, spesifikasi, is_active) VALUES
(1, 'EQP-TH001', 'Thermohygrometer', 'Lutron', 'PHB-318', 'LT12345678', '2023-11-10', '2024-05-10', 1, 'Range suhu: -20°C hingga 60°C, akurasi ±0.8°C', TRUE),
(2, 'EQP-TH002', 'Thermohygrometer', 'Extech', 'RHT50', 'EX87654321', '2023-10-15', '2024-04-15', 1, 'Range suhu: -30°C hingga 70°C, akurasi ±0.5°C', TRUE),
(3, 'EQP-WBGT001', 'WBGT Meter', 'Lutron', 'WBGT-2010SD', 'LW12348765', '2023-11-05', '2024-05-05', 3, 'Range WBGT: 15°C hingga 59°C, akurasi ±0.8°C', TRUE),
(4, 'EQP-ANM001', 'Anemometer', 'Lutron', 'AM-4214SD', 'LA23456789', '2023-09-20', '2024-03-20', 4, 'Range kecepatan udara: 0.2 m/s hingga 35 m/s, akurasi ±2%', TRUE);

-- Insert Master Lokasi Sampling untuk PT. Industri Manufaktur Indonesia
INSERT INTO master_lokasi_sampling (lokasi_id, pelanggan_id, nama_lokasi, alamat, jenis_ruangan, deskripsi, is_active) VALUES
(1, 1, 'Ruang Meeting Utama', 'Lantai 2, Gedung Utama', 'Administrasi', 'Ruang meeting dengan kapasitas 20 orang', TRUE),
(2, 1, 'Ruang Kerja HRD', 'Lantai 2, Gedung Utama', 'Administrasi', 'Ruang kerja staff HRD', TRUE),
(3, 1, 'Ruang Server', 'Lantai 1, Gedung Utama', 'Ruangan Khusus', 'Ruang server dengan pendingin khusus', TRUE),
(4, 1, 'Area Produksi Line A', 'Lantai 1, Gedung Produksi', 'Produksi', 'Area produksi utama line A', TRUE),
(5, 1, 'Area Kantin', 'Lantai 1, Gedung Pendukung', 'Ruang Umum', 'Kantin karyawan dengan kapasitas 100 orang', TRUE);

-- ================================
-- CONTOH DATA TRANSAKSI
-- ================================

-- Contoh Permintaan Pengukuran
INSERT INTO permintaan_pengukuran (permintaan_id, nomor_permintaan, pelanggan_id, tanggal_permintaan, tanggal_rencana_sampling, contact_person, status, catatan, dibuat_oleh, disetujui_oleh) VALUES
(1, 'REQ/2024/04/001', 1, '2024-04-05', '2024-04-25', 'Budi Santoso', 'approved', 'Pengukuran rutin triwulanan untuk parameter iklim kerja', 3, 4);

-- Contoh Detail Permintaan Pengukuran
INSERT INTO detail_permintaan_pengukuran (detail_permintaan_id, permintaan_id, parameter_id, lokasi_id, jumlah_titik, harga_satuan, subtotal) VALUES
(1, 1, 1, 1, 1, 75000.00, 75000.00),
(2, 1, 1, 2, 1, 75000.00, 75000.00),
(3, 1, 1, 3, 1, 75000.00, 75000.00),
(4, 1, 1, 4, 1, 75000.00, 75000.00),
(5, 1, 1, 5, 1, 75000.00, 75000.00);

-- Contoh Jadwal Pengukuran
INSERT INTO jadwal_pengukuran (jadwal_id, nomor_jadwal, permintaan_id, tanggal_pengukuran, petugas_id, status, catatan) VALUES
(1, 'SCH/2024/04/001', 1, '2024-04-25', 3, 'completed', 'Pengukuran dilakukan pada jam operasional normal');

-- Contoh Laporan Hasil Uji
INSERT INTO laporan_hasil_uji (laporan_id, nomor_laporan, permintaan_id, jadwal_id, tanggal_pengukuran, tanggal_terbit, pelanggan_id, petugas_id, diverifikasi_oleh, disetujui_oleh, status, halaman_jumlah, catatan) VALUES
(1, 'LHU/KLIM/04/2024/001', 1, 1, '2024-04-25', '2024-04-28', 1, 3, 2, 4, 'published', 2, 'Hasil pengukuran menunjukkan semua parameter dalam batas normal');

-- Contoh Hasil Pengukuran Suhu
INSERT INTO hasil_pengukuran_suhu (hasil_id, laporan_id, lokasi_id, kode_sampel, waktu_pengukuran_mulai, waktu_pengukuran_selesai, parameter_id, hasil_pengukuran, satuan, metode, nab_id, keterangan, peralatan_id) VALUES
(1, 1, 1, 'C2504090001', '09:00:00', '09:15:00', 1, 21.00, '°C', 'SNI 7062: 2019', 1, NULL, 1),
(2, 1, 2, 'C2504090002', '09:30:00', '09:45:00', 1, 22.00, '°C', 'SNI 7062: 2019', 1, NULL, 1),
(3, 1, 3, 'C2504090003', '10:00:00', '10:15:00', 1, 19.00, '°C', 'SNI 7062: 2019', 2, NULL, 1),
(4, 1, 4, 'C2504090004', '10:30:00', '10:45:00', 1, 26.00, '°C', 'SNI 7062: 2019', 3, NULL, 1),
(5, 1, 5, 'C2504090005', '11:00:00', '11:15:00', 1, 24.00, '°C', 'SNI 7062: 2019', 4, NULL, 1); 