From ccca4e7f4fc78f48cdc7b8b9b491478037d66272 Mon Sep 17 00:00:00 2001 From: "sas.fajri" Date: Thu, 24 Apr 2025 10:25:31 +0700 Subject: [PATCH] first commit --- README.md | 121 +++++ catatan.txt | 108 +++++ climate_measurement_database.sql | 282 +++++++++++ climate_report_template.html | 379 +++++++++++++++ db_struktur_iklim_kerja_suhu.sql | 301 ++++++++++++ iklim_kerja_suhu_report_generator.php | 419 ++++++++++++++++ iklim_kerja_suhu_report_template.html | 319 +++++++++++++ isbb_measurement_database.sql | 195 ++++++++ isbb_report_template.html | 477 +++++++++++++++++++ lab_env_app_features.md | 186 ++++++++ lab_env_case_study.md | 469 ++++++++++++++++++ lab_env_database_erd.md | 161 +++++++ lab_env_database_explanation.md | 276 +++++++++++ lab_env_database_mermaid_erd.md | 237 +++++++++ lab_env_database_structure.sql | 307 ++++++++++++ lab_env_db_class_diagram.md | 275 +++++++++++ lab_env_quotation_flow_diagram.md | 237 +++++++++ lab_env_workflow_flowchart.md | 117 +++++ light_measurement_report_template.html | 635 +++++++++++++++++++++++++ masterdata.txt | 522 ++++++++++++++++++++ noise_measurement_database.sql | 246 ++++++++++ noise_report_template.html | 552 +++++++++++++++++++++ particulate_measurement_database.sql | 289 +++++++++++ particulate_report_template.html | 534 +++++++++++++++++++++ total_particulate_report_template.html | 524 ++++++++++++++++++++ work_climate_temp_masterdata.sql | 302 ++++++++++++ 26 files changed, 8470 insertions(+) create mode 100644 README.md create mode 100644 catatan.txt create mode 100644 climate_measurement_database.sql create mode 100644 climate_report_template.html create mode 100644 db_struktur_iklim_kerja_suhu.sql create mode 100644 iklim_kerja_suhu_report_generator.php create mode 100644 iklim_kerja_suhu_report_template.html create mode 100644 isbb_measurement_database.sql create mode 100644 isbb_report_template.html create mode 100644 lab_env_app_features.md create mode 100644 lab_env_case_study.md create mode 100644 lab_env_database_erd.md create mode 100644 lab_env_database_explanation.md create mode 100644 lab_env_database_mermaid_erd.md create mode 100644 lab_env_database_structure.sql create mode 100644 lab_env_db_class_diagram.md create mode 100644 lab_env_quotation_flow_diagram.md create mode 100644 lab_env_workflow_flowchart.md create mode 100644 light_measurement_report_template.html create mode 100644 masterdata.txt create mode 100644 noise_measurement_database.sql create mode 100644 noise_report_template.html create mode 100644 particulate_measurement_database.sql create mode 100644 particulate_report_template.html create mode 100644 total_particulate_report_template.html create mode 100644 work_climate_temp_masterdata.sql diff --git a/README.md b/README.md new file mode 100644 index 0000000..f5b2c25 --- /dev/null +++ b/README.md @@ -0,0 +1,121 @@ +# Sistem Aplikasi Laboratorium Lingkungan + +Repositori ini berisi desain dan dokumentasi untuk Sistem Aplikasi Laboratorium Lingkungan, yang dikembangkan berdasarkan alur pelayanan laboratorium lingkungan yang ada. + +## Deskripsi + +Sistem Aplikasi Laboratorium Lingkungan adalah sistem manajemen terintegrasi yang mendukung seluruh alur kerja laboratorium lingkungan, mulai dari permintaan pelanggan, perencanaan sampling, pengambilan sampel, analisis laboratorium, hingga pelaporan hasil uji. Sistem ini dirancang untuk meningkatkan efisiensi, akurasi, dan pelacakan proses laboratorium. + +## Struktur Repositori + +Repositori ini berisi file-file berikut: + +1. **lab_env_database_structure.sql** + - File SQL yang berisi struktur database lengkap dan data contoh + - Mencakup definisi tabel, relasi, dan sample data untuk pengujian + +2. **lab_env_database_explanation.md** + - Dokumentasi terperinci tentang struktur database + - Penjelasan setiap tabel dan kolom + - Contoh data nyata untuk setiap tabel + +3. **lab_env_database_erd.md** + - Entity Relationship Diagram (ERD) untuk visualisasi hubungan antar tabel + - Penjelasan relasi antar entitas + - Penjelasan proses bisnis berdasarkan struktur database + +4. **lab_env_database_mermaid_erd.md** + - ERD dalam format Mermaid untuk visualisasi interaktif + - Dapat dirender di GitHub dan platform yang mendukung Mermaid + - Representasi lebih modern dan interaktif dari hubungan antar tabel + +5. **lab_env_workflow_flowchart.md** + - Flowchart Mermaid yang menggambarkan alur pelayanan laboratorium + - Visualisasi interaktif proses bisnis + - Menjelaskan peran dan tanggung jawab setiap bagian + +6. **lab_env_db_class_diagram.md** + - Diagram kelas UML dalam format Mermaid + - Menggabungkan struktur database dengan fungsi sistem + - Memvisualisasikan bagaimana data dan proses saling terkait + +7. **lab_env_app_features.md** + - Dokumentasi fitur-fitur sistem aplikasi + - Modul dan kemampuan utama dari aplikasi + - Keuntungan implementasi dan fase pengembangan yang disarankan + +8. **Screenshot 2025-04-23 at 08.26.07.png** + - Diagram alur pelayanan laboratorium lingkungan yang menjadi dasar desain sistem + +## Alur Pelayanan Laboratorium Lingkungan + +Sistem ini didasarkan pada alur pelayanan berikut: + +1. **Customer (Internal dan eksternal)** + - Permintaan sampling dan analisis + - Analisis sampel + +2. **Admin Lab Ling** + - Menyiapkan Surat Penawaran + - Menyiapkan Quotation + - Melengkapi data teknis tentang order pelanggan + - Memberikan Bukti pembayaran DP + - Registrasi + - Mempersiapkan dan kirim hasil uji + +3. **Petugas Sampling** + - Menyiapkan rencana sampling (SDM, Konfirmasi jadwal, dll) + - Menyiapkan peralatan sampling + +4. **Bagian penerimaan contoh uji** + - Menerima sampel + - Melakukan preparasi + +5. **Bagian Analisis Laboratorium** + - Analisa sampel uji di laboratorium sesuai jenis sampel + +6. **Bagian Verifikasi Hasil Uji** + - Petugas melakukan verifikasi hasil uji + +## Diagram Mermaid + +Repositori ini menggunakan diagram Mermaid untuk visualisasi interaktif. Untuk melihat diagram Mermaid: + +1. Buka file Markdown yang berisi diagram Mermaid di GitHub, yang secara otomatis akan merender diagram +2. Gunakan [Mermaid Live Editor](https://mermaid.live/) untuk melihat atau mengedit diagram +3. Ekspor diagram ke PNG, SVG, atau PDF untuk digunakan dalam dokumentasi + +## Cara Penggunaan + +### Persiapan Database + +1. Buat database baru di server MySQL/MariaDB: + ``` + CREATE DATABASE lab_lingkungan; + ``` + +2. Import struktur database dan data contoh: + ``` + mysql -u username -p lab_lingkungan < lab_env_database_structure.sql + ``` + +3. Atur konfigurasi koneksi database di file konfigurasi aplikasi. + +### Pengembangan Aplikasi + +Sistem aplikasi ini dapat dikembangkan menggunakan berbagai teknologi, termasuk: + +- **Backend**: PHP, Laravel, Node.js, Django, Spring Boot +- **Frontend**: React, Vue.js, Angular +- **Database**: MySQL, PostgreSQL +- **Mobile**: React Native, Flutter + +Disarankan untuk menggunakan pendekatan modular sesuai dengan fase implementasi yang diuraikan dalam `lab_env_app_features.md`. + +## Kontribusi + +Silakan ajukan issue atau pull request jika Anda memiliki saran perbaikan untuk struktur database atau fitur aplikasi. + +## Lisensi + +Proyek ini dibawah lisensi [MIT](LICENSE). \ No newline at end of file diff --git a/catatan.txt b/catatan.txt new file mode 100644 index 0000000..a54795c --- /dev/null +++ b/catatan.txt @@ -0,0 +1,108 @@ +Contoh Rencana Sampling dan Peralatan Sampling untuk Laboratorium Lingkungan +Saya telah membuat dua template utama untuk membantu proses sampling lingkungan: +1. Template Rencana Sampling +Template rencana sampling (sampling_plan_template.html) mencakup beberapa bagian penting: +a. Informasi Umum +Nama proyek +Nama klien +Informasi kontak +Tanggal sampling +b. Lokasi Sampling +ID lokasi +Deskripsi lokasi +Koordinat GPS +Informasi akses lokasi +c. Parameter Sampling +Nama parameter (misalnya pH, BOD, COD) +Metode analisis (misalnya SNI 06-6989.11-2019) +Jenis wadah sampel +Metode preservasi +Waktu simpan (holding time) +d. Protokol Sampling +Metode pengambilan sampel (grab sampling, composite sampling) +Kebutuhan QA/QC (blanko lapangan, sampel duplikat) +Prosedur preservasi sampel +e. Pengelolaan Sampel +Format label sampel +Prosedur chain of custody +Metode transportasi sampel ke laboratorium +f. Kesehatan dan Keselamatan +Penilaian bahaya +Kebutuhan APD (Alat Pelindung Diri) +Prosedur darurat +2. Daftar Peralatan Sampling +Template daftar peralatan sampling (sampling_equipment_list.html) mencakup: +a. Peralatan Sampling Air +Wadah Sampel: +Botol HDPE (1L) untuk parameter umum +Botol kaca amber (1L) untuk parameter organik +Botol steril (250mL) untuk analisis mikrobiologi +Vial VOC (40mL) untuk senyawa organik volatil +Alat Pengambil Sampel: +Tongkat sampling teleskopik +Van Dorn Water Sampler +Pompa peristaltik +Bailer (disposable) +Alat Pengukuran Lapangan: +Multiparameter Water Quality Meter +DO Meter (cadangan) +pH Meter (cadangan) +Turbidity Meter +Secchi Disk +Flow Meter +b. Peralatan Sampling Tanah/Sedimen +Scoops stainless steel +Soil auger +Core sampler tanah +Sediment grab sampler +Wadah sampel tanah +c. Peralatan Preservasi dan Transportasi +Bahan Pengawet: +Asam sulfat (H₂SO₄) +Asam nitrat (HNO₃) +Natrium thiosulfat +Seng asetat +Peralatan Pendingin dan Transportasi: +Ice pack +Cooler (kotak pendingin) +Kantong zip-lock +Bubble wrap +Temperature blank +d. Dokumentasi Lapangan +Buku catatan lapangan (waterproof) +Formulir chain of custody +Label sampel +Spidol permanen tahan air +Perangkat GPS +Kamera digital +Meteran +Clipboard +e. Alat Pelindung Diri (APD) +Sarung tangan nitrile +Sepatu safety +Waders (bila diperlukan untuk akses sungai) +Kacamata safety +Rompi keselamatan +Kotak P3K +Repellent serangga +Sunscreen +Cara Penggunaan Template +Membuat Rencana Sampling Baru: +Buka halaman /sampling/plan/new +Isi formulir dengan detail proyek +Tambahkan lokasi sampling, parameter, dan metodologi +Kirim untuk persetujuan atau simpan sebagai draft +Menyiapkan Daftar Peralatan: +Buka halaman /sampling/equipment/new +Pilih jenis dan jumlah peralatan yang diperlukan +Tambahkan kebutuhan khusus +Kirim formulir permintaan peralatan +Melihat Rencana yang Sudah Ada: +Buka /sampling/plan/ untuk melihat rencana spesifik +Manfaat Template Ini +Standardisasi: Memastikan semua petugas sampling mengikuti protokol yang sama +Kelengkapan: Mencakup semua aspek penting dalam perencanaan sampling lingkungan +Dokumentasi: Memberikan catatan yang jelas untuk audit dan pelaporan +Efisiensi: Mempercepat proses persiapan sampling dengan formulir yang terstruktur +Kepatuhan: Membantu memenuhi persyaratan standar SNI dan regulasi lainnya +Template-template ini dirancang sesuai dengan studi kasus yang Anda berikan, termasuk untuk pemantauan limbah industri dan pemantauan kualitas air sungai multi-titik. Formulir ini responsif, mudah digunakan, dan mencakup validasi data untuk memastikan akurasi dalam perencanaan sampling lingkungan. \ No newline at end of file diff --git a/climate_measurement_database.sql b/climate_measurement_database.sql new file mode 100644 index 0000000..4880ff7 --- /dev/null +++ b/climate_measurement_database.sql @@ -0,0 +1,282 @@ +-- Database Structure and Sample Data for Work Climate and Humidity Measurement +-- Based on PMK RI No.2 Tahun 2023 + +-- ------------------------------------------------------------------------------ +-- Master Tables - Data Referensi +-- ------------------------------------------------------------------------------ + +-- Master Regulasi +CREATE TABLE IF NOT EXISTS master_regulasi ( + id_regulasi INT PRIMARY KEY, + kode_regulasi VARCHAR(50) NOT NULL, + nama_regulasi VARCHAR(255) NOT NULL, + instansi_penerbit VARCHAR(100) NOT NULL, + tanggal_terbit DATE NOT NULL, + tanggal_berlaku DATE NOT NULL, + deskripsi TEXT, + file_path VARCHAR(255), + status BOOLEAN DEFAULT TRUE, + tanggal_input TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + user_input VARCHAR(50) +); + +-- Master Parameter Iklim Kerja +CREATE TABLE IF NOT EXISTS master_parameter_iklim ( + id_parameter INT PRIMARY KEY, + kode_parameter VARCHAR(20) NOT NULL, + nama_parameter VARCHAR(100) NOT NULL, + satuan VARCHAR(20), + metode_analisis VARCHAR(100), + biaya DECIMAL(10, 2), + akreditasi BOOLEAN DEFAULT FALSE, + keterangan TEXT, + status BOOLEAN DEFAULT TRUE, + tanggal_input TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + user_input VARCHAR(50) +); + +-- Master Baku Mutu Iklim Kerja +CREATE TABLE IF NOT EXISTS master_bakumutu_iklim ( + id_bakumutu INT PRIMARY KEY, + id_parameter INT NOT NULL, + id_regulasi INT NOT NULL, + jenis_ruangan VARCHAR(100) NOT NULL, + nilai_min DECIMAL(6, 2), + nilai_max DECIMAL(6, 2), + keterangan TEXT, + status BOOLEAN DEFAULT TRUE, + tanggal_input TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + user_input VARCHAR(50), + FOREIGN KEY (id_parameter) REFERENCES master_parameter_iklim(id_parameter), + FOREIGN KEY (id_regulasi) REFERENCES master_regulasi(id_regulasi) +); + +-- Master Metode Sampling Iklim Kerja +CREATE TABLE IF NOT EXISTS master_metode_sampling_iklim ( + id_metode INT PRIMARY KEY, + kode_metode VARCHAR(50) NOT NULL, + nama_metode VARCHAR(255) NOT NULL, + deskripsi TEXT, + jenis_parameter VARCHAR(100), + status BOOLEAN DEFAULT TRUE, + tanggal_input TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + user_input VARCHAR(50) +); + +-- Master Peralatan Pengukuran Iklim Kerja +CREATE TABLE IF NOT EXISTS master_peralatan_iklim ( + id_peralatan INT PRIMARY KEY, + kode_peralatan VARCHAR(20) NOT NULL, + nama_peralatan VARCHAR(100) NOT NULL, + merk VARCHAR(100), + model VARCHAR(100), + serial_number VARCHAR(100), + spesifikasi TEXT, + tanggal_kalibrasi DATE, + tanggal_kalibrasi_berikutnya DATE, + status_kalibrasi VARCHAR(20), + file_sertifikat VARCHAR(255), + status BOOLEAN DEFAULT TRUE, + tanggal_input TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + user_input VARCHAR(50) +); + +-- ------------------------------------------------------------------------------ +-- Transaction Tables - Data Transaksi +-- ------------------------------------------------------------------------------ + +-- Sampling Plan Pengukuran Iklim Kerja +CREATE TABLE IF NOT EXISTS trx_sampling_plan_iklim ( + id_sampling_plan INT PRIMARY KEY, + kode_sampling_plan VARCHAR(50) NOT NULL, + nama_project VARCHAR(255) NOT NULL, + id_client INT NOT NULL, + tanggal_rencana_sampling DATE NOT NULL, + lokasi_sampling TEXT NOT NULL, + jumlah_titik INT, + status_approval VARCHAR(20) DEFAULT 'DRAFT', + catatan TEXT, + tanggal_input TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + user_input VARCHAR(50) +); + +-- Requisisi Peralatan untuk Pengukuran Iklim Kerja +CREATE TABLE IF NOT EXISTS trx_requisisi_peralatan_iklim ( + id_requisisi INT PRIMARY KEY, + id_sampling_plan INT NOT NULL, + tanggal_requisisi DATE NOT NULL, + tanggal_kebutuhan DATE NOT NULL, + status_requisisi VARCHAR(20) DEFAULT 'DRAFT', + catatan TEXT, + tanggal_input TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + user_input VARCHAR(50), + FOREIGN KEY (id_sampling_plan) REFERENCES trx_sampling_plan_iklim(id_sampling_plan) +); + +-- Detail Requisisi Peralatan +CREATE TABLE IF NOT EXISTS trx_requisisi_peralatan_iklim_detail ( + id_requisisi_detail INT PRIMARY KEY, + id_requisisi INT NOT NULL, + id_peralatan INT NOT NULL, + jumlah INT NOT NULL, + status_persetujuan VARCHAR(20) DEFAULT 'PENDING', + catatan TEXT, + tanggal_input TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + user_input VARCHAR(50), + FOREIGN KEY (id_requisisi) REFERENCES trx_requisisi_peralatan_iklim(id_requisisi), + FOREIGN KEY (id_peralatan) REFERENCES master_peralatan_iklim(id_peralatan) +); + +-- Hasil Pengukuran Iklim Kerja +CREATE TABLE IF NOT EXISTS trx_hasil_ukur_iklim ( + id_hasil_ukur INT PRIMARY KEY, + id_sampling_plan INT NOT NULL, + kode_laporan VARCHAR(50) NOT NULL, + tanggal_sampling DATE NOT NULL, + waktu_mulai TIME, + waktu_selesai TIME, + kondisi_cuaca VARCHAR(100), + petugas_sampling VARCHAR(100), + status_laporan VARCHAR(20) DEFAULT 'DRAFT', + catatan TEXT, + tanggal_input TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + user_input VARCHAR(50), + FOREIGN KEY (id_sampling_plan) REFERENCES trx_sampling_plan_iklim(id_sampling_plan) +); + +-- Detail Hasil Pengukuran Iklim Kerja +CREATE TABLE IF NOT EXISTS trx_hasil_ukur_iklim_detail ( + id_hasil_ukur_detail INT PRIMARY KEY, + id_hasil_ukur INT NOT NULL, + kode_titik VARCHAR(20) NOT NULL, + nama_lokasi VARCHAR(255) NOT NULL, + jenis_ruangan VARCHAR(100) NOT NULL, + id_parameter INT NOT NULL, + hasil_pengukuran DECIMAL(6, 2) NOT NULL, + baku_mutu_min DECIMAL(6, 2), + baku_mutu_max DECIMAL(6, 2), + id_metode INT NOT NULL, + id_peralatan INT NOT NULL, + status_kesesuaian VARCHAR(20), + catatan TEXT, + tanggal_input TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + user_input VARCHAR(50), + FOREIGN KEY (id_hasil_ukur) REFERENCES trx_hasil_ukur_iklim(id_hasil_ukur), + FOREIGN KEY (id_parameter) REFERENCES master_parameter_iklim(id_parameter), + FOREIGN KEY (id_metode) REFERENCES master_metode_sampling_iklim(id_metode), + FOREIGN KEY (id_peralatan) REFERENCES master_peralatan_iklim(id_peralatan) +); + +-- ------------------------------------------------------------------------------ +-- Sample Data Insertion +-- ------------------------------------------------------------------------------ + +-- Insert Data Master Regulasi +INSERT INTO master_regulasi (id_regulasi, kode_regulasi, nama_regulasi, instansi_penerbit, tanggal_terbit, tanggal_berlaku, deskripsi, file_path, status, user_input) +VALUES +(1, 'PMK-02-2023', 'Peraturan Menteri Kesehatan Republik Indonesia Nomor 2 Tahun 2023 tentang Standar Baku Mutu Kesehatan Lingkungan dan Persyaratan Kesehatan', 'Kementerian Kesehatan RI', '2023-01-15', '2023-02-01', 'Standar Baku Mutu Kesehatan Lingkungan untuk Media Air, Udara, Tanah, Pangan, Sarana dan Bangunan, serta Vektor dan Binatang Pembawa Penyakit, dan Persyaratan Kesehatan', '/dokumen/regulasi/PMK_02_2023.pdf', TRUE, 'admin'), +(2, 'PERMENAKER-05-2018', 'Peraturan Menteri Ketenagakerjaan Republik Indonesia Nomor 5 Tahun 2018 tentang Keselamatan dan Kesehatan Kerja Lingkungan Kerja', 'Kementerian Ketenagakerjaan RI', '2018-04-17', '2018-05-01', 'Keselamatan dan Kesehatan Kerja Lingkungan Kerja meliputi faktor fisika, kimia, biologi, ergonomi, dan psikologi', '/dokumen/regulasi/PERMENAKER_05_2018.pdf', TRUE, 'admin'); + +-- Insert Data Master Parameter Iklim Kerja +INSERT INTO master_parameter_iklim (id_parameter, kode_parameter, nama_parameter, satuan, metode_analisis, biaya, akreditasi, keterangan, status, user_input) +VALUES +(1, 'SUHU-01', 'Suhu Udara', '°C', 'SNI 7062:2019', 50000.00, TRUE, 'Pengukuran suhu udara dalam ruangan', TRUE, 'admin'), +(2, 'KELEM-01', 'Kelembaban Udara', '%RH', 'SNI 7062:2019', 50000.00, TRUE, 'Pengukuran kelembaban relatif udara dalam ruangan', TRUE, 'admin'), +(3, 'KEC-UDARA-01', 'Kecepatan Aliran Udara', 'm/s', 'SNI 7062:2019', 60000.00, TRUE, 'Pengukuran kecepatan aliran udara dalam ruangan', TRUE, 'admin'), +(4, 'ISBB-01', 'Indeks Suhu Basah dan Bola (ISBB)', '°C', 'SNI 7062:2019', 85000.00, TRUE, 'Pengukuran Indeks Suhu Basah dan Bola untuk analisis beban kerja', TRUE, 'admin'); + +-- Insert Data Master Baku Mutu Iklim Kerja +INSERT INTO master_bakumutu_iklim (id_bakumutu, id_parameter, id_regulasi, jenis_ruangan, nilai_min, nilai_max, keterangan, status, user_input) +VALUES +-- Suhu Udara +(1, 1, 1, 'Ruang Administrasi/Kantor', 20.0, 25.0, 'Ruang kerja administrasi dan kantor', TRUE, 'admin'), +(2, 1, 1, 'Ruang Produksi', 23.0, 26.0, 'Area produksi dengan aktivitas fisik ringan sampai sedang', TRUE, 'admin'), +(3, 1, 1, 'Ruang Istirahat', 22.0, 28.0, 'Area istirahat, kantin, dan ruang tunggu', TRUE, 'admin'), +(4, 1, 1, 'Ruang Khusus', 18.0, 24.0, 'Ruang server, laboratorium, dan ruang khusus lainnya', TRUE, 'admin'), + +-- Kelembaban Udara +(5, 2, 1, 'Ruang Administrasi/Kantor', 40.0, 60.0, 'Ruang kerja administrasi dan kantor', TRUE, 'admin'), +(6, 2, 1, 'Ruang Produksi', 40.0, 60.0, 'Area produksi dengan aktivitas fisik ringan sampai sedang', TRUE, 'admin'), +(7, 2, 1, 'Ruang Istirahat', 40.0, 60.0, 'Area istirahat, kantin, dan ruang tunggu', TRUE, 'admin'), +(8, 2, 1, 'Ruang Khusus', 40.0, 60.0, 'Ruang server, laboratorium, dan ruang khusus lainnya', TRUE, 'admin'), + +-- Kecepatan Aliran Udara +(9, 3, 1, 'Ruang Administrasi/Kantor', 0.1, 0.2, 'Ruang kerja administrasi dan kantor', TRUE, 'admin'), +(10, 3, 1, 'Ruang Produksi', 0.1, 0.3, 'Area produksi dengan aktivitas fisik ringan sampai sedang', TRUE, 'admin'), +(11, 3, 1, 'Ruang Istirahat', 0.1, 0.25, 'Area istirahat, kantin, dan ruang tunggu', TRUE, 'admin'), +(12, 3, 1, 'Ruang Khusus', 0.1, 0.3, 'Ruang server, laboratorium, dan ruang khusus lainnya', TRUE, 'admin'), + +-- ISBB (Indeks Suhu Basah dan Bola) +(13, 4, 2, 'Beban Kerja Ringan', NULL, 30.0, 'Alokasi istirahat 75% kerja, 25% istirahat', TRUE, 'admin'), +(14, 4, 2, 'Beban Kerja Sedang', NULL, 28.0, 'Alokasi istirahat 75% kerja, 25% istirahat', TRUE, 'admin'), +(15, 4, 2, 'Beban Kerja Berat', NULL, 25.0, 'Alokasi istirahat 75% kerja, 25% istirahat', TRUE, 'admin'); + +-- Insert Data Master Metode Sampling Iklim Kerja +INSERT INTO master_metode_sampling_iklim (id_metode, kode_metode, nama_metode, deskripsi, jenis_parameter, status, user_input) +VALUES +(1, 'SNI-7062-2019-SUHU', 'SNI 7062:2019 - Pengukuran Suhu Udara', 'Metode standar pengukuran suhu udara menggunakan termometer ruangan', 'Suhu Udara', TRUE, 'admin'), +(2, 'SNI-7062-2019-KELEMBABAN', 'SNI 7062:2019 - Pengukuran Kelembaban Udara', 'Metode standar pengukuran kelembaban relatif udara menggunakan hygrometer', 'Kelembaban Udara', TRUE, 'admin'), +(3, 'SNI-7062-2019-ANEMO', 'SNI 7062:2019 - Pengukuran Kecepatan Aliran Udara', 'Metode standar pengukuran kecepatan aliran udara menggunakan anemometer', 'Kecepatan Aliran Udara', TRUE, 'admin'), +(4, 'SNI-7062-2019-ISBB', 'SNI 7062:2019 - Pengukuran ISBB', 'Metode standar pengukuran Indeks Suhu Basah dan Bola menggunakan WBGT meter', 'ISBB', TRUE, 'admin'); + +-- Insert Data Master Peralatan Pengukuran Iklim Kerja +INSERT INTO master_peralatan_iklim (id_peralatan, kode_peralatan, nama_peralatan, merk, model, serial_number, spesifikasi, tanggal_kalibrasi, tanggal_kalibrasi_berikutnya, status_kalibrasi, file_sertifikat, status, user_input) +VALUES +(1, 'THERMO-01', 'Termohigrometer Digital', 'Lutron', 'PHB-318', 'LT12345678', 'Range suhu: -20 - 60°C, Range kelembaban: 10 - 95% RH, Resolusi: 0.1°C / 0.1% RH', '2023-05-10', '2024-05-10', 'VALID', '/dokumen/kalibrasi/thermo_lutron_2023.pdf', TRUE, 'admin'), +(2, 'THERMO-02', 'Termohigrometer Digital', 'Extech', 'RHT50', 'EX87654321', 'Range suhu: -30 - 70°C, Range kelembaban: 0 - 99% RH, Resolusi: 0.1°C / 0.1% RH', '2023-08-15', '2024-08-15', 'VALID', '/dokumen/kalibrasi/thermo_extech_2023.pdf', TRUE, 'admin'), +(3, 'ANEMO-01', 'Anemometer Digital', 'Lutron', 'AM-4214SD', 'LA23456789', 'Range kecepatan udara: 0.2 - 20.0 m/s, Resolusi: 0.01 m/s', '2023-03-20', '2024-03-20', 'VALID', '/dokumen/kalibrasi/anemo_lutron_2023.pdf', TRUE, 'admin'), +(4, 'WBGT-01', 'Wet Bulb Globe Temperature Meter', 'Extech', 'HT30', 'EX55667788', 'Range WBGT: 0 - 50°C, Range TA: 0 - 50°C, Range TG: 0 - 80°C, Range RH: 0 - 100%', '2023-06-05', '2024-06-05', 'VALID', '/dokumen/kalibrasi/wbgt_extech_2023.pdf', TRUE, 'admin'), +(5, 'THERMO-03', 'Termohigrometer Ruangan', 'Testo', '608-H1', 'TS12131415', 'Range suhu: -10 - 70°C, Range kelembaban: 10 - 98% RH, Akurasi: ±0.5°C / ±3% RH', '2023-07-22', '2024-07-22', 'VALID', '/dokumen/kalibrasi/thermo_testo_2023.pdf', TRUE, 'admin'); + +-- ----------------------------------------------------------------------------- +-- Insert Contoh Data Transaksi +-- ----------------------------------------------------------------------------- + +-- Contoh Data Sampling Plan Pengukuran Iklim Kerja +INSERT INTO trx_sampling_plan_iklim (id_sampling_plan, kode_sampling_plan, nama_project, id_client, tanggal_rencana_sampling, lokasi_sampling, jumlah_titik, status_approval, catatan, tanggal_input, user_input) +VALUES +(1, 'SP-IK-2024-001', 'Monitoring Iklim Kerja Semester I 2024 - PT. Indonesia Manufacturing Industry', 101, '2024-04-25', 'PT. Indonesia Manufacturing Industry, Jl. Industry Raya No. 123, Jakarta', 5, 'APPROVED', 'Monitoring rutin semester I tahun 2024 sesuai program K3', '2024-04-10 09:15:00', 'supervisor'); + +-- Contoh Data Requisisi Peralatan untuk Pengukuran Iklim Kerja +INSERT INTO trx_requisisi_peralatan_iklim (id_requisisi, id_sampling_plan, tanggal_requisisi, tanggal_kebutuhan, status_requisisi, catatan, tanggal_input, user_input) +VALUES +(1, 1, '2024-04-15', '2024-04-25', 'APPROVED', 'Requisisi peralatan untuk monitoring iklim kerja PT. Indonesia Manufacturing Industry', '2024-04-15 10:30:00', 'officer'); + +-- Contoh Data Detail Requisisi Peralatan +INSERT INTO trx_requisisi_peralatan_iklim_detail (id_requisisi_detail, id_requisisi, id_peralatan, jumlah, status_persetujuan, catatan, tanggal_input, user_input) +VALUES +(1, 1, 1, 1, 'APPROVED', 'Termohigrometer Digital Lutron untuk pengukuran suhu dan kelembaban', '2024-04-15 10:31:00', 'officer'), +(2, 1, 3, 1, 'APPROVED', 'Anemometer Digital Lutron untuk pengukuran kecepatan aliran udara', '2024-04-15 10:32:00', 'officer'); + +-- Contoh Data Hasil Pengukuran Iklim Kerja +INSERT INTO trx_hasil_ukur_iklim (id_hasil_ukur, id_sampling_plan, kode_laporan, tanggal_sampling, waktu_mulai, waktu_selesai, kondisi_cuaca, petugas_sampling, status_laporan, catatan, tanggal_input, user_input) +VALUES +(1, 1, 'LHU/IKLIM/04/2024/001', '2024-04-25', '09:00:00', '11:15:00', 'Cuaca cerah, suhu luar 31°C', 'Deni Hermawan', 'FINAL', 'Pengukuran berjalan lancar sesuai dengan rencana', '2024-04-25 15:30:00', 'officer'); + +-- Contoh Data Detail Hasil Pengukuran Iklim Kerja +INSERT INTO trx_hasil_ukur_iklim_detail (id_hasil_ukur_detail, id_hasil_ukur, kode_titik, nama_lokasi, jenis_ruangan, id_parameter, hasil_pengukuran, baku_mutu_min, baku_mutu_max, id_metode, id_peralatan, status_kesesuaian, catatan, tanggal_input, user_input) +VALUES +-- Main Meeting Room +(1, 1, 'T1', 'Main Meeting Room', 'Ruang Administrasi/Kantor', 1, 21.0, 20.0, 25.0, 1, 1, 'COMPLY', '', '2024-04-25 15:35:00', 'officer'), +(2, 1, 'T1', 'Main Meeting Room', 'Ruang Administrasi/Kantor', 2, 50.5, 40.0, 60.0, 2, 1, 'COMPLY', '', '2024-04-25 15:35:00', 'officer'), +(3, 1, 'T1', 'Main Meeting Room', 'Ruang Administrasi/Kantor', 3, 0.15, 0.1, 0.2, 3, 3, 'COMPLY', '', '2024-04-25 15:35:00', 'officer'), + +-- HR Work Area +(4, 1, 'T2', 'HR Work Area', 'Ruang Administrasi/Kantor', 1, 22.0, 20.0, 25.0, 1, 1, 'COMPLY', '', '2024-04-25 15:45:00', 'officer'), +(5, 1, 'T2', 'HR Work Area', 'Ruang Administrasi/Kantor', 2, 52.0, 40.0, 60.0, 2, 1, 'COMPLY', '', '2024-04-25 15:45:00', 'officer'), +(6, 1, 'T2', 'HR Work Area', 'Ruang Administrasi/Kantor', 3, 0.12, 0.1, 0.2, 3, 3, 'COMPLY', '', '2024-04-25 15:45:00', 'officer'), + +-- Server Room +(7, 1, 'T3', 'Server Room', 'Ruang Khusus', 1, 19.0, 18.0, 24.0, 1, 1, 'COMPLY', '', '2024-04-25 15:55:00', 'officer'), +(8, 1, 'T3', 'Server Room', 'Ruang Khusus', 2, 45.0, 40.0, 60.0, 2, 1, 'COMPLY', '', '2024-04-25 15:55:00', 'officer'), +(9, 1, 'T3', 'Server Room', 'Ruang Khusus', 3, 0.25, 0.1, 0.3, 3, 3, 'COMPLY', '', '2024-04-25 15:55:00', 'officer'), + +-- Production Line A +(10, 1, 'T4', 'Production Line A', 'Ruang Produksi', 1, 26.0, 23.0, 26.0, 1, 1, 'COMPLY', '', '2024-04-25 16:05:00', 'officer'), +(11, 1, 'T4', 'Production Line A', 'Ruang Produksi', 2, 65.0, 40.0, 60.0, 2, 1, 'NOT_COMPLY', 'Kelembaban melebihi baku mutu, perlu perbaikan sistem ventilasi', '2024-04-25 16:05:00', 'officer'), +(12, 1, 'T4', 'Production Line A', 'Ruang Produksi', 3, 0.30, 0.1, 0.3, 3, 3, 'COMPLY', '', '2024-04-25 16:05:00', 'officer'), + +-- Canteen Area +(13, 1, 'T5', 'Canteen Area', 'Ruang Istirahat', 1, 24.0, 22.0, 28.0, 1, 1, 'COMPLY', '', '2024-04-25 16:15:00', 'officer'), +(14, 1, 'T5', 'Canteen Area', 'Ruang Istirahat', 2, 55.0, 40.0, 60.0, 2, 1, 'COMPLY', '', '2024-04-25 16:15:00', 'officer'), +(15, 1, 'T5', 'Canteen Area', 'Ruang Istirahat', 3, 0.20, 0.1, 0.25, 3, 3, 'COMPLY', '', '2024-04-25 16:15:00', 'officer'); \ No newline at end of file diff --git a/climate_report_template.html b/climate_report_template.html new file mode 100644 index 0000000..d92b372 --- /dev/null +++ b/climate_report_template.html @@ -0,0 +1,379 @@ + + + + + + Work Climate and Humidity Measurement Report + + + +
+
LABORATORY REPORT
+
+ +
+

ENVIRONMENTAL TESTING LABORATORY

+

Jl. Laboratorium Lingkungan No. 123, Jakarta

+

Phone: (021) 555-1234, Email: info@env-lab.co.id

+

ACCREDITED KAN: LP-001-IDN

+
+
+ +
+

WORK CLIMATE MEASUREMENT REPORT

+

REPORT NUMBER: LHU/IKLIM/04/2024/001

+

Based on PMK RI No.2 Year 2023

+
+ +
+
1. CLIENT INFORMATION
+ + + + + + + + + + + + + + + + + +
Client NamePT. Indonesia Manufacturing Industry
AddressJl. Industry Raya No. 123, Jakarta
Contact PersonBudi Santoso (HSE Manager)
Request NumberREQ/2024/04/001
+
+ +
+
2. MEASUREMENT INFORMATION
+ + + + + + + + + + + + + + + + + +
Measurement DateApril 25, 2024
Measurement Time09:00 - 11:15 WIB
Measurement OfficersDeni Hermawan (Sampling Officer)
Weather ConditionSunny, 31°C (outdoor temperature)
+
+ +
+
3. MEASUREMENT RESULTS
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
No.LocationRoom TypeTemperatureHumidityAir Velocity (m/s)Compliance Status
Result (°C)Standard (°C)Result (%RH)Standard (%RH)
1Main Meeting RoomAdministration21.020.0 - 25.050.540 - 600.15COMPLY
2HR Work AreaAdministration22.020.0 - 25.052.040 - 600.12COMPLY
3Server RoomSpecial Room19.018.0 - 24.045.040 - 600.25COMPLY
4Production Line AProduction26.023.0 - 26.065.040 - 600.30NOT COMPLY
5Canteen AreaCommon Area24.022.0 - 28.055.040 - 600.20COMPLY
+
+ +
+
4. MEASUREMENT METHOD
+ + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterMethodEquipmentCalibration Status
TemperatureSNI 7062: 2019Thermohygrometer Lutron PHB-318 SN:LT12345678Valid until May 10, 2024
HumiditySNI 7062: 2019Thermohygrometer Lutron PHB-318 SN:LT12345678Valid until May 10, 2024
Air VelocitySNI 7062: 2019Anemometer Lutron AM-4214SD SN:LA23456789Valid until March 20, 2024
+
+ +
+
5. NOTES AND RECOMMENDATIONS
+

Based on the measurement results, the following findings and recommendations are provided:

+
    +
  1. Most of the rooms measured have work climate parameters within the standard limits set by PMK RI No.2 Year 2023.
  2. +
  3. The Production Line A area shows humidity level (65% RH) exceeding the standard limit (40-60% RH). It is recommended to: +
      +
    • Check and optimize the HVAC system serving this area
    • +
    • Consider installing additional dehumidifiers
    • +
    • Ensure proper ventilation to reduce moisture buildup
    • +
    +
  4. +
  5. Regular maintenance of air conditioning and ventilation systems is recommended to maintain optimal work climate conditions.
  6. +
+
+ +
+
6. REGULATION REFERENCES
+

This measurement report refers to:

+
    +
  1. PMK RI No.2 Year 2023 regarding Environmental Health Quality Standards and Health Requirements
  2. +
  3. SNI 7062: 2019 regarding Work Climate Measurement Methods
  4. +
+
+ + + +
+

*END OF REPORT*

+

Page 1 of 1

+
+
+ + \ No newline at end of file diff --git a/db_struktur_iklim_kerja_suhu.sql b/db_struktur_iklim_kerja_suhu.sql new file mode 100644 index 0000000..af7210f --- /dev/null +++ b/db_struktur_iklim_kerja_suhu.sql @@ -0,0 +1,301 @@ +-- 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); \ No newline at end of file diff --git a/iklim_kerja_suhu_report_generator.php b/iklim_kerja_suhu_report_generator.php new file mode 100644 index 0000000..c970d06 --- /dev/null +++ b/iklim_kerja_suhu_report_generator.php @@ -0,0 +1,419 @@ + 'localhost', + 'username' => 'root', + 'password' => '', + 'database' => 'lab_lingkungan_db' +]; + +// Koneksi ke database +function connectDB($config) { + try { + $conn = new PDO( + "mysql:host={$config['host']};dbname={$config['database']}", + $config['username'], + $config['password'] + ); + $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + return $conn; + } catch(PDOException $e) { + die("Koneksi database gagal: " . $e->getMessage()); + } +} + +// Ambil data laporan berdasarkan ID +function getLaporanData($conn, $laporan_id) { + $query = " + SELECT + l.*, + p.nama_pelanggan, p.alamat, p.kota, p.provinsi, p.kode_pos, + ps.nama AS petugas_sampling, + DATE_FORMAT(l.tanggal_pengukuran, '%d %M %Y') AS tanggal_pengukuran_format, + DATE_FORMAT(l.tanggal_terbit, '%d %M %Y') AS tanggal_terbit_format + FROM + laporan_hasil_uji l + JOIN + master_pelanggan p ON l.pelanggan_id = p.pelanggan_id + JOIN + master_personel ps ON l.petugas_id = ps.personel_id + WHERE + l.laporan_id = :laporan_id + "; + + $stmt = $conn->prepare($query); + $stmt->execute(['laporan_id' => $laporan_id]); + return $stmt->fetch(PDO::FETCH_ASSOC); +} + +// Ambil data hasil pengukuran +function getHasilPengukuran($conn, $laporan_id) { + $query = " + SELECT + h.*, + ls.nama_lokasi, + p.nama_parameter, p.satuan, + nab.nilai_minimal, nab.nilai_maksimal, nab.tipe_ruangan, + e.nama_peralatan, e.merk, e.model, e.nomor_seri + FROM + hasil_pengukuran_suhu h + JOIN + master_lokasi_sampling ls ON h.lokasi_id = ls.lokasi_id + JOIN + master_parameter p ON h.parameter_id = p.parameter_id + JOIN + master_nilai_ambang_batas nab ON h.nab_id = nab.nab_id + JOIN + master_peralatan e ON h.peralatan_id = e.peralatan_id + WHERE + h.laporan_id = :laporan_id + ORDER BY + h.hasil_id ASC + "; + + $stmt = $conn->prepare($query); + $stmt->execute(['laporan_id' => $laporan_id]); + return $stmt->fetchAll(PDO::FETCH_ASSOC); +} + +// Ambil data personel untuk tanda tangan +function getPersonelData($conn, $personel_id) { + $query = " + SELECT + * + FROM + master_personel + WHERE + personel_id = :personel_id + "; + + $stmt = $conn->prepare($query); + $stmt->execute(['personel_id' => $personel_id]); + return $stmt->fetch(PDO::FETCH_ASSOC); +} + +// Generate HTML laporan +function generateLaporanHTML($laporan, $hasil_pengukuran, $verifikator, $penguji) { + ob_start(); +?> + + + + + + Laporan Hasil Uji Iklim Kerja Suhu + + + +
+
Kode Lab: FLHU///
+ +
+

LAPORAN HASIL UJI

+

NO :

+
+ +
2
+ +
+
+
Nama Pelanggan
+
:
+
+
+
+
Alamat pelanggan
+
:
+
+
+
+
Petugas sampling
+
:
+
+
+
+
Tanggal pengukuran
+
:
+
+
+
+ +
+ Hasil Pengujian Iklim Kerja Suhu +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NoLokasi PengukuranKode sampelWaktu
Pengukuran
HasilSatuanMetodeReferensi : PMK RI No.2 Tahun 2023Keterangan
NABRuang
+ +
+ Diterbitkan tanggal : +
+ +
+
Catatan :
+ +
+ +
+
+
Diverifikasi oleh,
+
+
+
+
+
+
+
+
+
+
+
Diukur oleh,
+
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/iklim_kerja_suhu_report_template.html b/iklim_kerja_suhu_report_template.html new file mode 100644 index 0000000..ff155d9 --- /dev/null +++ b/iklim_kerja_suhu_report_template.html @@ -0,0 +1,319 @@ + + + + + + Laporan Hasil Uji Iklim Kerja Suhu + + + +
+
Kode Lab: FLHU/../../....
+ +
+

LAPORAN HASIL UJI

+

NO : ...../klim/bulan/tahun

+
+ +
2
+ +
+
+
Nama Pelanggan
+
:
+
+
+
+
Alamat pelanggan
+
:
+
+
+
+
Petugas sampling
+
:
+
+
+
+
Tanggal pengukuran
+
:
+
+
+
+ +
+ Hasil Pengujian Iklim Kerja Suhu +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NoLokasi PengukuranKode sampelWaktu
Pengukuran
HasilSatuanMetodeReferensi : PMK RI No.2 Tahun 2023Keterangan
NABRuang
1Ruang MeetingC250409000109.00 - 09.1521°CSNI 7062: 201920 - 25Administrasi
2Ruang KerjaC250409000209.30 - 09.4522°CSNI 7062: 201920 - 25Administrasi
3Ruang ServerC250409000310.00 - 10.1519°CSNI 7062: 201918 - 24Ruangan Khusus
4Ruang ProduksiC250409000410.30 - 10.4526°CSNI 7062: 201923 - 26Produksi
5Area KantinC250409000511.00 - 11.1524°CSNI 7062: 201922 - 28Ruang Umum
+ +
+ Diterbitkan tanggal : +
+ +
+
Catatan :
+
+ +
+
+
Diverifikasi oleh,
+
+
+
+
+
+
+
+
+
+
Diukur oleh,
+
+
+
+
+
+ + \ No newline at end of file diff --git a/isbb_measurement_database.sql b/isbb_measurement_database.sql new file mode 100644 index 0000000..b8214d6 --- /dev/null +++ b/isbb_measurement_database.sql @@ -0,0 +1,195 @@ +-- Database Structure and Sample Data for ISBB Work Climate Measurement +-- Based on Permenaker No.5 Tahun 2018 + +-- ------------------------------------------------------------------------------ +-- Master Tables - ISBB Specific +-- ------------------------------------------------------------------------------ + +-- Master Kategori Beban Kerja (Work Load Categories) +CREATE TABLE IF NOT EXISTS master_kategori_beban_kerja ( + id_kategori INT PRIMARY KEY, + nama_kategori VARCHAR(50) NOT NULL, + keterangan TEXT, + kisaran_energi VARCHAR(50), + contoh_aktivitas TEXT, + status BOOLEAN DEFAULT TRUE, + tanggal_input TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + user_input VARCHAR(50) +); + +-- Master Alokasi Kerja-Istirahat (Work-Rest Allocation) +CREATE TABLE IF NOT EXISTS master_alokasi_kerja_istirahat ( + id_alokasi INT PRIMARY KEY, + nama_alokasi VARCHAR(50) NOT NULL, + persentase_kerja VARCHAR(20) NOT NULL, + persentase_istirahat VARCHAR(20) NOT NULL, + keterangan TEXT, + status BOOLEAN DEFAULT TRUE, + tanggal_input TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + user_input VARCHAR(50) +); + +-- Master Baku Mutu ISBB (WBGT Standard Values) +CREATE TABLE IF NOT EXISTS master_bakumutu_isbb ( + id_bakumutu_isbb INT PRIMARY KEY, + id_regulasi INT NOT NULL, + id_kategori INT NOT NULL, + id_alokasi INT NOT NULL, + nilai_baku_mutu DECIMAL(5, 2) NOT NULL, + keterangan TEXT, + status BOOLEAN DEFAULT TRUE, + tanggal_input TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + user_input VARCHAR(50), + FOREIGN KEY (id_regulasi) REFERENCES master_regulasi(id_regulasi), + FOREIGN KEY (id_kategori) REFERENCES master_kategori_beban_kerja(id_kategori), + FOREIGN KEY (id_alokasi) REFERENCES master_alokasi_kerja_istirahat(id_alokasi) +); + +-- ------------------------------------------------------------------------------ +-- Transaction Tables - ISBB Specific +-- ------------------------------------------------------------------------------ + +-- Hasil Pengukuran ISBB (WBGT Measurement Results) +CREATE TABLE IF NOT EXISTS trx_hasil_ukur_isbb ( + id_hasil_ukur_isbb INT PRIMARY KEY, + id_sampling_plan INT NOT NULL, + kode_laporan VARCHAR(50) NOT NULL, + tanggal_sampling DATE NOT NULL, + waktu_mulai TIME, + waktu_selesai TIME, + kondisi_cuaca VARCHAR(100), + petugas_sampling VARCHAR(100), + status_laporan VARCHAR(20) DEFAULT 'DRAFT', + catatan TEXT, + tanggal_input TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + user_input VARCHAR(50), + FOREIGN KEY (id_sampling_plan) REFERENCES trx_sampling_plan_iklim(id_sampling_plan) +); + +-- Detail Hasil Pengukuran ISBB (WBGT Measurement Detail) +CREATE TABLE IF NOT EXISTS trx_hasil_ukur_isbb_detail ( + id_hasil_ukur_isbb_detail INT PRIMARY KEY, + id_hasil_ukur_isbb INT NOT NULL, + kode_titik VARCHAR(20) NOT NULL, + nama_lokasi VARCHAR(255) NOT NULL, + jenis_pekerjaan VARCHAR(255) NOT NULL, + id_kategori INT NOT NULL, + id_alokasi INT NOT NULL, + suhu_basah DECIMAL(5, 2) NOT NULL, -- natural wet bulb (Tnw) + suhu_bola DECIMAL(5, 2) NOT NULL, -- globe temperature (Tg) + suhu_kering DECIMAL(5, 2) NOT NULL, -- dry bulb (Ta) + nilai_isbb DECIMAL(5, 2) NOT NULL, -- calculated WBGT value + id_bakumutu_isbb INT NOT NULL, + status_kesesuaian VARCHAR(20), + rekomendasi TEXT, + lokasi_pengukuran VARCHAR(100), + tinggi_pengukuran DECIMAL(4, 2), + catatan TEXT, + tanggal_input TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + user_input VARCHAR(50), + FOREIGN KEY (id_hasil_ukur_isbb) REFERENCES trx_hasil_ukur_isbb(id_hasil_ukur_isbb), + FOREIGN KEY (id_kategori) REFERENCES master_kategori_beban_kerja(id_kategori), + FOREIGN KEY (id_alokasi) REFERENCES master_alokasi_kerja_istirahat(id_alokasi), + FOREIGN KEY (id_bakumutu_isbb) REFERENCES master_bakumutu_isbb(id_bakumutu_isbb) +); + +-- Rekomendasi Pengendalian (Control Recommendations) +CREATE TABLE IF NOT EXISTS trx_rekomendasi_pengendalian_isbb ( + id_rekomendasi INT PRIMARY KEY, + id_hasil_ukur_isbb_detail INT NOT NULL, + jenis_pengendalian VARCHAR(50) NOT NULL, + deskripsi_pengendalian TEXT NOT NULL, + prioritas INT, + estimasi_biaya DECIMAL(12, 2), + perkiraan_efektivitas TEXT, + status_implementasi VARCHAR(20) DEFAULT 'PLANNED', + tanggal_input TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + user_input VARCHAR(50), + FOREIGN KEY (id_hasil_ukur_isbb_detail) REFERENCES trx_hasil_ukur_isbb_detail(id_hasil_ukur_isbb_detail) +); + +-- ------------------------------------------------------------------------------ +-- Sample Data Insertion - Master Tables +-- ------------------------------------------------------------------------------ + +-- Insert Data Master Kategori Beban Kerja +INSERT INTO master_kategori_beban_kerja (id_kategori, nama_kategori, keterangan, kisaran_energi, contoh_aktivitas, status, user_input) +VALUES +(1, 'Ringan', 'Beban kerja ringan dengan pengeluaran energi minimal', '100-200 Kcal/jam', 'Pekerjaan administratif, kontrol ruangan, pekerjaan perakitan ringan, mengemudi', TRUE, 'admin'), +(2, 'Sedang', 'Beban kerja sedang dengan aktivitas fisik moderat', '200-350 Kcal/jam', 'Berjalan normal, mengangkat beban sedang, mendorong atau menarik, perakitan / perbaikan mesin', TRUE, 'admin'), +(3, 'Berat', 'Beban kerja berat dengan aktivitas fisik intens', '350-500 Kcal/jam', 'Berjalan cepat/naik tangga, mengangkat beban berat, pekerjaan konstruksi, penggalian, penambangan', TRUE, 'admin'); + +-- Insert Data Master Alokasi Kerja-Istirahat +INSERT INTO master_alokasi_kerja_istirahat (id_alokasi, nama_alokasi, persentase_kerja, persentase_istirahat, keterangan, status, user_input) +VALUES +(1, '75-100% Kerja', '75-100%', '0-25%', 'Alokasi 75-100% waktu untuk bekerja, 0-25% untuk istirahat dalam satu jam', TRUE, 'admin'), +(2, '50-75% Kerja', '50-75%', '25-50%', 'Alokasi 50-75% waktu untuk bekerja, 25-50% untuk istirahat dalam satu jam', TRUE, 'admin'), +(3, '25-50% Kerja', '25-50%', '50-75%', 'Alokasi 25-50% waktu untuk bekerja, 50-75% untuk istirahat dalam satu jam', TRUE, 'admin'), +(4, '0-25% Kerja', '0-25%', '75-100%', 'Alokasi 0-25% waktu untuk bekerja, 75-100% untuk istirahat dalam satu jam', TRUE, 'admin'); + +-- Insert Data Master Baku Mutu ISBB +INSERT INTO master_bakumutu_isbb (id_bakumutu_isbb, id_regulasi, id_kategori, id_alokasi, nilai_baku_mutu, keterangan, status, user_input) +VALUES +-- Kategori Ringan +(1, 2, 1, 1, 31.0, 'Nilai ISBB maksimum untuk beban kerja ringan dengan alokasi kerja 75-100%', TRUE, 'admin'), +(2, 2, 1, 2, 31.0, 'Nilai ISBB maksimum untuk beban kerja ringan dengan alokasi kerja 50-75%', TRUE, 'admin'), +(3, 2, 1, 3, 32.0, 'Nilai ISBB maksimum untuk beban kerja ringan dengan alokasi kerja 25-50%', TRUE, 'admin'), +(4, 2, 1, 4, 32.2, 'Nilai ISBB maksimum untuk beban kerja ringan dengan alokasi kerja 0-25%', TRUE, 'admin'), + +-- Kategori Sedang +(5, 2, 2, 1, 28.0, 'Nilai ISBB maksimum untuk beban kerja sedang dengan alokasi kerja 75-100%', TRUE, 'admin'), +(6, 2, 2, 2, 29.0, 'Nilai ISBB maksimum untuk beban kerja sedang dengan alokasi kerja 50-75%', TRUE, 'admin'), +(7, 2, 2, 3, 30.0, 'Nilai ISBB maksimum untuk beban kerja sedang dengan alokasi kerja 25-50%', TRUE, 'admin'), +(8, 2, 2, 4, 31.1, 'Nilai ISBB maksimum untuk beban kerja sedang dengan alokasi kerja 0-25%', TRUE, 'admin'), + +-- Kategori Berat +(9, 2, 3, 1, NULL, 'Untuk beban kerja berat tidak direkomendasikan alokasi kerja 75-100%', TRUE, 'admin'), +(10, 2, 3, 2, 27.5, 'Nilai ISBB maksimum untuk beban kerja berat dengan alokasi kerja 50-75%', TRUE, 'admin'), +(11, 2, 3, 3, 29.0, 'Nilai ISBB maksimum untuk beban kerja berat dengan alokasi kerja 25-50%', TRUE, 'admin'), +(12, 2, 3, 4, 30.0, 'Nilai ISBB maksimum untuk beban kerja berat dengan alokasi kerja 0-25%', TRUE, 'admin'); + +-- ------------------------------------------------------------------------------ +-- Sample Data Insertion - Transaction Tables +-- ------------------------------------------------------------------------------ + +-- Contoh Data Sampling Plan (Referensi dari tabel yang sudah ada) +INSERT INTO trx_sampling_plan_iklim (id_sampling_plan, kode_sampling_plan, nama_project, id_client, tanggal_rencana_sampling, lokasi_sampling, jumlah_titik, status_approval, catatan, tanggal_input, user_input) +VALUES +(2, 'SP-ISBB-2024-001', 'Pengukuran ISBB di PT. Indonesia Steel Manufacturing', 102, '2024-05-12', 'PT. Indonesia Steel Manufacturing, Jl. Industri Baja No. 75, Cikarang, Bekasi', 5, 'APPROVED', 'Pengukuran ISBB untuk area furnace, casting, rolling mill, welding, dan control room', '2024-05-01 10:30:00', 'supervisor'); + +-- Contoh Data Hasil Pengukuran ISBB +INSERT INTO trx_hasil_ukur_isbb (id_hasil_ukur_isbb, id_sampling_plan, kode_laporan, tanggal_sampling, waktu_mulai, waktu_selesai, kondisi_cuaca, petugas_sampling, status_laporan, catatan, tanggal_input, user_input) +VALUES +(1, 2, 'LHU/ISBB/05/2024/001', '2024-05-12', '10:00:00', '14:30:00', 'Cuaca cerah, suhu luar 33°C', 'Ahmad Kusuma, Budi Santoso', 'FINAL', 'Pengukuran berjalan dengan baik', '2024-05-12 16:45:00', 'analyst'); + +-- Contoh Data Detail Hasil Pengukuran ISBB +INSERT INTO trx_hasil_ukur_isbb_detail (id_hasil_ukur_isbb_detail, id_hasil_ukur_isbb, kode_titik, nama_lokasi, jenis_pekerjaan, id_kategori, id_alokasi, suhu_basah, suhu_bola, suhu_kering, nilai_isbb, id_bakumutu_isbb, status_kesesuaian, rekomendasi, lokasi_pengukuran, tinggi_pengukuran, catatan, tanggal_input, user_input) +VALUES +-- Furnace Operation Area +(1, 1, 'T1', 'Furnace Operation Area', 'Furnace monitoring and control', 2, 1, 27.8, 35.6, 32.5, 29.7, 5, 'NOT_COMPLY', 'Tingkatkan ventilasi, kurangi waktu paparan, atau ubah alokasi kerja', 'Dekat panel kontrol operator', 1.1, 'Pengukuran dilakukan saat furnace beroperasi normal', '2024-05-12 16:50:00', 'analyst'), + +-- Cold Rolling Mill +(2, 1, 'T2', 'Cold Rolling Mill', 'Machine operation and material handling', 2, 1, 25.2, 31.5, 30.1, 26.8, 5, 'COMPLY', '', 'Area operator mesin rolling', 1.1, 'Pengukuran dilakukan saat proses rolling berjalan normal', '2024-05-12 17:00:00', 'analyst'), + +-- Steel Casting Section +(3, 1, 'T3', 'Steel Casting Section', 'Heavy manual casting tasks', 3, 2, 28.4, 36.8, 33.2, 30.2, 10, 'NOT_COMPLY', 'Pasang pelindung panas tambahan, ubah alokasi kerja menjadi 25% kerja', 'Area penuangan logam', 1.1, 'Suhu sangat tinggi di sekitar area penuangan', '2024-05-12 17:15:00', 'analyst'), + +-- Welding Section +(4, 1, 'T4', 'Welding Section', 'Manual welding tasks', 2, 2, 24.6, 31.0, 29.5, 26.1, 6, 'COMPLY', '', 'Area pengelasan manual', 1.1, 'Pengukuran dilakukan pada jarak 1.5 meter dari titik pengelasan', '2024-05-12 17:30:00', 'analyst'), + +-- Production Control Room +(5, 1, 'T5', 'Production Control Room', 'Monitoring and administrative tasks', 1, 1, 23.8, 29.2, 28.6, 25.2, 1, 'COMPLY', '', 'Ruang kontrol produksi', 1.1, 'Ruangan ber-AC, kondisi stabil', '2024-05-12 17:45:00', 'analyst'); + +-- Contoh Data Rekomendasi Pengendalian +INSERT INTO trx_rekomendasi_pengendalian_isbb (id_rekomendasi, id_hasil_ukur_isbb_detail, jenis_pengendalian, deskripsi_pengendalian, prioritas, estimasi_biaya, perkiraan_efektivitas, status_implementasi, tanggal_input, user_input) +VALUES +-- Rekomendasi untuk Furnace Area +(1, 1, 'Pengendalian Teknik', 'Pemasangan local exhaust ventilation tambahan di area furnace', 1, 25000000.00, 'Diperkirakan dapat menurunkan ISBB 1.5-2°C', 'PLANNED', '2024-05-13 09:00:00', 'analyst'), +(2, 1, 'Pengendalian Administratif', 'Mengubah alokasi kerja menjadi 50% kerja, 50% istirahat', 1, 0.00, 'Memenuhi baku mutu untuk kategori kerja sedang', 'PLANNED', '2024-05-13 09:05:00', 'analyst'), +(3, 1, 'APD', 'Menyediakan cooling vest bagi operator furnace', 2, 5000000.00, 'Mengurangi beban panas pada pekerja', 'PLANNED', '2024-05-13 09:10:00', 'analyst'), + +-- Rekomendasi untuk Steel Casting Section +(4, 3, 'Pengendalian Teknik', 'Pemasangan heat shield tambahan di sekitar area penuangan', 1, 18000000.00, 'Diperkirakan dapat menurunkan ISBB 1-1.5°C', 'PLANNED', '2024-05-13 09:15:00', 'analyst'), +(5, 3, 'Pengendalian Teknik', 'Pemasangan spot cooling di area kerja manual', 1, 12000000.00, 'Diperkirakan dapat menurunkan ISBB 1-2°C', 'PLANNED', '2024-05-13 09:20:00', 'analyst'), +(6, 3, 'Pengendalian Administratif', 'Rotasi kerja dan mengubah alokasi menjadi 25% kerja, 75% istirahat', 1, 0.00, 'Memenuhi baku mutu untuk kategori kerja berat', 'PLANNED', '2024-05-13 09:25:00', 'analyst'), +(7, 3, 'APD', 'Menyediakan pakaian pelindung reflektif panas', 2, 7500000.00, 'Mengurangi beban panas radiasi pada pekerja', 'PLANNED', '2024-05-13 09:30:00', 'analyst'); \ No newline at end of file diff --git a/isbb_report_template.html b/isbb_report_template.html new file mode 100644 index 0000000..3e64177 --- /dev/null +++ b/isbb_report_template.html @@ -0,0 +1,477 @@ + + + + + + ISBB Work Climate Measurement Report + + + +
+
LABORATORY REPORT
+
+ +
+

ENVIRONMENTAL TESTING LABORATORY

+

Jl. Laboratorium Lingkungan No. 123, Jakarta

+

Phone: (021) 555-1234, Email: info@env-lab.co.id

+

ACCREDITED KAN: LP-001-IDN

+
+
+ +
+

INDEKS SUHU BASAH DAN BOLA (ISBB) MEASUREMENT REPORT

+

REPORT NUMBER: LHU/ISBB/05/2024/001

+

Based on Permenaker No.5 Tahun 2018

+
+ +
+
1. CLIENT INFORMATION
+ + + + + + + + + + + + + + + + + +
Client NamePT. Indonesia Steel Manufacturing
AddressJl. Industri Baja No. 75, Cikarang, Bekasi
Contact PersonIr. Adi Nugroho (HSE Manager)
Request NumberREQ/2024/05/002
+
+ +
+
2. MEASUREMENT INFORMATION
+ + + + + + + + + + + + + + + + + +
Measurement DateMay 12, 2024
Measurement Time10:00 - 14:30 WIB
Measurement OfficersAhmad Kusuma (Sampling Officer), Budi Santoso (Technical Analyst)
Weather ConditionSunny, 33°C (outdoor temperature)
+
+ +
+
3. EXPLANATION OF WORK LOAD CATEGORIES
+
+

According to Permenaker No.5 Tahun 2018, work loads are categorized as follows:

+
    +
  • Light Work: Activities that require 100-200 Kcal/hour energy expenditure, such as office work, control room operation, light assembly work.
  • +
  • Moderate Work: Activities that require 200-350 Kcal/hour energy expenditure, such as moderate lifting, pushing, or pulling tasks, walking at moderate pace.
  • +
  • Heavy Work: Activities that require 350-500 Kcal/hour energy expenditure, such as intensive manual labor, heavy lifting, shoveling, digging, etc.
  • +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Work AllocationLight Work (°C)Moderate Work (°C)Heavy Work (°C)
75% - 100% Work31.028.0--
50% - 75% Work31.029.027.5
25% - 50% Work32.030.029.0
0% - 25% Work32.231.130.0
+
+
+ +
+
4. MEASUREMENT RESULTS
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
No.LocationWork TypeWork CategoryWork-Rest AllocationTemperature (°C)ISBB Value (°C)ISBB Standard (°C)Compliance Status
Dry (Ta)Wet (Tnw)Globe (Tg)
1Furnace Operation AreaFurnace monitoring and controlModerate75% work, 25% rest32.527.835.629.728.0NOT COMPLY
2Cold Rolling MillMachine operation and material handlingModerate75% work, 25% rest30.125.231.526.828.0COMPLY
3Steel Casting SectionHeavy manual casting tasksHeavy50% work, 50% rest33.228.436.830.229.0NOT COMPLY
4Welding SectionManual welding tasksModerate50% work, 50% rest29.524.631.026.129.0COMPLY
5Production Control RoomMonitoring and administrative tasksLight75% work, 25% rest28.623.829.225.231.0COMPLY
+

Notes:

+
    +
  • ISBB (WBGT indoors) = 0.7 Tnw + 0.3 Tg
  • +
  • Ta = Dry bulb temperature, Tnw = Natural wet bulb temperature, Tg = Globe temperature
  • +
  • Measurement conducted at 1.1m height (standing worker's breathing zone)
  • +
+
+ +
+
5. MEASUREMENT METHOD
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterMethodEquipmentCalibration Status
ISBB (WBGT) IndexSNI 7062: 2019WBGT Meter Extech HT30 SN:EX55667788Valid until June 5, 2024
Dry Bulb TemperatureSNI 7062: 2019WBGT Meter Extech HT30 SN:EX55667788Valid until June 5, 2024
Wet Bulb TemperatureSNI 7062: 2019WBGT Meter Extech HT30 SN:EX55667788Valid until June 5, 2024
Globe TemperatureSNI 7062: 2019WBGT Meter Extech HT30 SN:EX55667788Valid until June 5, 2024
+
+ +
+
6. NOTES AND RECOMMENDATIONS
+

Based on the measurement results, the following findings and recommendations are provided:

+
    +
  1. Two areas (Furnace Operation Area and Steel Casting Section) exceed the ISBB threshold limits according to Permenaker No.5 Tahun 2018.
  2. +
  3. For the Furnace Operation Area with ISBB of 29.7°C (exceeding the 28.0°C limit for moderate work with 75% work allocation), it is recommended to: +
      +
    • Adjust work-rest allocation to 50% work, 50% rest to comply with the 29.0°C threshold for moderate work
    • +
    • Improve ventilation and heat controls in the area
    • +
    • Provide personal cooling garments for workers
    • +
    • Increase frequency of breaks in cool rest areas
    • +
    +
  4. +
  5. For the Steel Casting Section with ISBB of 30.2°C (exceeding the 29.0°C limit for heavy work with 50% work allocation), it is recommended to: +
      +
    • Reduce work allocation to 25% work, 75% rest or implement job rotation
    • +
    • Install additional heat shields near heat sources
    • +
    • Install additional local exhaust ventilation or spot cooling
    • +
    • Provide adequate cool drinking water and electrolyte replacement
    • +
    • Implement a heat acclimatization program for new workers
    • +
    +
  6. +
  7. Cold Rolling Mill, Welding Section and Production Control Room have ISBB values below the threshold limits and are in compliance.
  8. +
  9. General recommendations for all areas: +
      +
    • Ensure regular maintenance of ventilation systems
    • +
    • Provide training for workers on heat stress recognition and first aid
    • +
    • Conduct regular medical surveillance for workers in hot environments
    • +
    • Monitor ISBB values during peak hot season
    • +
    +
  10. +
+
+ +
+
7. REGULATION REFERENCES
+

This measurement report refers to:

+
    +
  1. Peraturan Menteri Ketenagakerjaan Republik Indonesia Nomor 5 Tahun 2018 tentang Keselamatan dan Kesehatan Kerja Lingkungan Kerja
  2. +
  3. SNI 7062: 2019 regarding Work Climate Measurement Methods
  4. +
  5. ACGIH (American Conference of Governmental Industrial Hygienists) Threshold Limit Values for Heat Stress
  6. +
+
+ + + +
+

*END OF REPORT*

+

Page 1 of 1

+
+
+ + \ No newline at end of file diff --git a/lab_env_app_features.md b/lab_env_app_features.md new file mode 100644 index 0000000..a4273b2 --- /dev/null +++ b/lab_env_app_features.md @@ -0,0 +1,186 @@ +# Fitur Sistem Aplikasi Laboratorium Lingkungan + +Berdasarkan struktur database dan alur pelayanan yang telah dibuat, berikut adalah fitur-fitur utama yang disarankan untuk sistem aplikasi laboratorium lingkungan: + +## 1. Modul Manajemen Pelanggan +- **Pendaftaran dan Profil Pelanggan** + - Pendaftaran pelanggan baru (internal dan eksternal) + - Pengelolaan profil pelanggan + - Riwayat permintaan analisis per pelanggan + - Riwayat pembayaran + +- **Dashboard Pelanggan** + - Status permintaan analisis (Perlu status: Baru, Proses, Selesai, Dibatalkan) + - Hasil analisis terbaru + - Notifikasi jadwal sampling + - Download laporan hasil pengujian + +## 2. Modul Permintaan Layanan +- **Pengelolaan Permintaan** + - Form permintaan analisis (sampling & analisis atau analisis saja) + - Pemilihan parameter yang akan dianalisis (Perlu fitur: Pilihan parameter dari template sampling, Pilihan parameter dari template analisis, Pilihan parameter dari template analisis non lab) + - Persetujuan permintaan (Perlu fitur: Persetujuan permintaan dari petugas sampling, Persetujuan permintaan dari petugas pengujian) + - Pelacakan status permintaan (Perlu fitur: Pelacakan status permintaan dari petugas sampling, Pelacakan status permintaan dari petugas pengujian) + +- **Penawaran dan Quotation** + - Pembuatan surat penawaran otomatis (Perlu fitur: Pembuatan surat penawaran otomatis dari template, Pembuatan surat penawaran otomatis dari template analisis non lab) + - Perhitungan biaya berdasarkan parameter yang dipilih + - Manajemen quotation dan persetujuan + - Pencatatan bukti pembayaran DP + +## 3. Modul Perencanaan Sampling +- **Manajemen Rencana Sampling** + - Pembuatan jadwal sampling + - Penugasan petugas sampling + - Pencatatan lokasi dan koordinat GPS + - Daftar peralatan yang diperlukan + +- **Aplikasi Mobile untuk Petugas Sampling** + - Daftar tugas sampling + - Pencatatan data sampling di lapangan + - Dokumentasi foto lokasi dan kondisi sampling + - Pelacakan GPS lokasi sampling + +## 4. Modul Penerimaan Sampel +- **Sistem Penerimaan dan Registrasi Sampel** + - Pencatatan penerimaan sampel di laboratorium + - Pembuatan kode sampel unik + - Pencatatan kondisi sampel saat diterima + - Alokasi sampel ke jenis pengujian + +- **Manajemen Preparasi Sampel** + - Pencatatan metode preparasi dan pengawetan + - Pembagian sampel untuk berbagai parameter + - Pelacakan status preparasi + - Pencetakan label sampel + +## 5. Modul Analisis Laboratorium +- **Sistem Manajemen Pengujian** + - Daftar sampel yang harus dianalisis + - Form pencatatan hasil pengujian + - Validasi hasil terhadap baku mutu + - Pencatatan metode analisis yang digunakan + +- **Integrasi dengan Peralatan Lab (Opsional)** + - Konfigurasi integrasi dengan instrumen lab + - Pengambilan hasil analisis otomatis + - Kalibrasi dan pemeliharaan alat + +## 6. Modul Verifikasi Hasil Uji +- **Sistem Verifikasi** + - Daftar hasil yang perlu diverifikasi + - Form persetujuan hasil + - Pencatatan koreksi dan komentar + - Notifikasi hasil tidak sesuai standar + +- **Manajemen Laporan** + - Pembuatan laporan hasil uji (LHU) + - Template laporan yang dapat dikonfigurasi + - Pencetakan dan ekspor laporan + - Distribusi laporan ke pelanggan + +## 7. Fitur Administrasi +- **Manajemen Pengguna** + - Pengelolaan akun pengguna + - Manajemen peran dan hak akses + - Audit trail aktivitas pengguna + - Reset password dan keamanan akun + +- **Pengelolaan Data Master** + - Manajemen parameter analisis dan harga + - Konfigurasi jenis sampel + - Manajemen metode analisis dan baku mutu + - Konfigurasi template dokumen + +## 8. Modul Pelaporan & Analitik +- **Laporan Operasional** + - Laporan jumlah sampel per periode + - Laporan pendapatan dan invoice + - Laporan kinerja laboratorium + - Statistik parameter tidak sesuai standar + +- **Dashboard Analitik** + - Visualisasi tren analisis + - Kinerja petugas dan waktu penyelesaian + - Analisis beban kerja laboratorium + - Prediksi permintaan analisis + +## 9. Fitur Integrasi & Ekspor +- **Integrasi Sistem** + - API untuk integrasi dengan sistem eksternal + - Ekspor data ke format Excel/CSV/PDF + - Notifikasi email dan SMS + - Backup dan restore database + +- **Mobile App & Web Responsif** + - Aplikasi mobile untuk petugas lapangan + - Web responsif untuk akses dari berbagai perangkat + - Notifikasi push untuk status permintaan + - Akses offline untuk pengumpulan data lapangan + +## 10. Fitur Kepatuhan & Dokumentasi +- **Manajemen Dokumen** + - Penyimpanan dokumen standar operasional + - Manajemen dokumen sertifikasi dan akreditasi + - Pencatatan kalibrasi peralatan + - Dokumentasi metode analisis + +- **Kepatuhan Regulasi** + - Pelacakan perubahan baku mutu + - Rekaman ketidaksesuaian dan tindakan koreksi + - Validasi metode analisis + - Jaminan kualitas hasil pengujian + +## Keuntungan Implementasi Sistem + +1. **Peningkatan Efisiensi** + - Otomatisasi alur kerja laboratorium + - Pengurangan kerja administratif manual + - Pelacakan sampel dan hasil pengujian yang lebih baik + +2. **Peningkatan Akurasi** + - Pengurangan kesalahan pencatatan manual + - Validasi data secara otomatis + - Pelacakan versi dan perubahan dokumen + +3. **Peningkatan Layanan Pelanggan** + - Akses pelanggan ke status pengujian secara real-time + - Pengiriman laporan hasil lebih cepat + - Pembuatan quotation dan penawaran lebih efisien + +4. **Kepatuhan dan Audit** + - Pencatatan lengkap untuk keperluan akreditasi + - Audit trail semua aktivitas sistem + - Dokumentasi yang lebih baik untuk inspeksi + +5. **Pengambilan Keputusan Berbasis Data** + - Analisis tren dan pola dari data historis + - Manajemen beban kerja laboratorium yang lebih baik + - Perencanaan sumber daya berdasarkan prediksi permintaan + +## Fase Implementasi yang Disarankan + +1. **Fase 1: Manajemen Pelanggan & Permintaan** + - Modul pelanggan dan permintaan layanan + - Pembuatan quotation dan penawaran + - Dashboard dasar + +2. **Fase 2: Sampling & Penerimaan Sampel** + - Modul perencanaan sampling + - Sistem penerimaan sampel + - Manajemen kode sampel + +3. **Fase 3: Analisis & Verifikasi** + - Pencatatan hasil analisis + - Sistem verifikasi hasil + - Pembuatan laporan hasil uji + +4. **Fase 4: Analitik & Integrasi** + - Dashboard analitik lanjutan + - Integrasi dengan peralatan lab + - Aplikasi mobile untuk petugas sampling + +5. **Fase 5: Optimasi & Skalabilitas** + - Pengembangan API untuk integrasi eksternal + - Optimasi performa sistem + - Fitur kepatuhan dan dokumentasi lanjutan \ No newline at end of file diff --git a/lab_env_case_study.md b/lab_env_case_study.md new file mode 100644 index 0000000..692763c --- /dev/null +++ b/lab_env_case_study.md @@ -0,0 +1,469 @@ +# Studi Kasus: Penawaran, Quotation, dan Pengelolaan Order Pelanggan + +## Kasus 1: Pemantauan Limbah Rutin Industri Tekstil + +### **Latar Belakang** +PT. Industri Tekstil Nusantara (ITN) adalah perusahaan tekstil yang beroperasi di Bandung. Sebagai bagian dari kepatuhan lingkungan, perusahaan ini diwajibkan melakukan pemantauan kualitas air limbah setiap tiga bulan dan melaporkan hasilnya ke Dinas Lingkungan Hidup setempat. Pada awal Januari 2025, Budi Santoso selaku Environmental Officer PT. ITN menghubungi laboratorium untuk melakukan analisis triwulanan. + +### **Alur Proses** + +#### 1. Permintaan Awal +- **Pelanggan:** Budi Santoso (PT. Industri Tekstil Nusantara) +- **Kontak:** 08123456789, budi@tekstilnusantara.com +- **Jenis Permintaan:** Sampling dan Analisis +- **Deskripsi:** Pemantauan Limbah Triwulan I 2025 +- **Lokasi Sampling:** Outlet IPAL PT. Industri Tekstil Nusantara, Jl. Industri No. 123, Bandung +- **Parameter yang diminta:** pH, TSS, COD, BOD, Ammonia (sesuai baku mutu air limbah industri tekstil) + +#### 2. Penerimaan dan Pencatatan oleh Admin +Admin Lab, Dini Wijaya, menerima permintaan dari Budi dan mencatat di sistem: + +```mermaid +sequenceDiagram + actor Customer as Budi Santoso + actor Admin as Dini Wijaya (Admin) + participant System as Sistem Lab + + Customer->>Admin: Menghubungi untuk pemantauan triwulanan + Admin->>System: Membuat entry permintaan baru + System-->>Admin: Form permintaan layanan + Admin->>System: Mengisi detail pelanggan & permintaan + System-->>Admin: Menyimpan data permintaan + Admin->>Customer: Konfirmasi penerimaan permintaan +``` + +Entry data di sistem: +``` +SERVICE_REQUESTS: +- request_id: 1 +- customer_id: 1 (PT. Industri Tekstil Nusantara) +- request_date: 2025-01-10 09:15:00 +- request_type: "Sampling and Analysis" +- project_name: "Pemantauan Limbah Triwulan I 2025" +- project_location: "Outlet IPAL PT. Industri Tekstil Nusantara, Bandung" +- status: "Draft" +- admin_id: 1 (Dini Wijaya) +- notes: "Permintaan rutin triwulanan untuk kepatuhan lingkungan" +``` + +#### 3. Penyiapan Penawaran +Admin Lab melakukan pengecekan terhadap parameter yang diminta dan menyiapkan surat penawaran: + +```mermaid +sequenceDiagram + actor Admin as Dini Wijaya (Admin) + participant System as Sistem Lab + participant Params as Master Parameter + + Admin->>System: Memilih parameter yang diminta + System->>Params: Query harga parameter + Params-->>System: Data harga parameter + System-->>Admin: Menampilkan daftar parameter & harga + Admin->>System: Mengisi jumlah sampel (1 outlet) + System-->>Admin: Menghitung total biaya + Admin->>System: Generate surat penawaran + System-->>Admin: Surat penawaran dalam format PDF +``` + +Entry data di sistem: +``` +REQUEST_PARAMETERS: +- parameter_id: 1 (pH), quantity: 1, price_per_unit: 50.000 +- parameter_id: 2 (TSS), quantity: 1, price_per_unit: 75.000 +- parameter_id: 3 (COD), quantity: 1, price_per_unit: 125.000 +- parameter_id: 4 (BOD), quantity: 1, price_per_unit: 150.000 +- parameter_id: 5 (Ammonia), quantity: 1, price_per_unit: 100.000 +``` + +#### 4. Pembuatan Quotation +Admin Lab menyiapkan quotation resmi berdasarkan parameter yang diminta: + +``` +Nomor: Q-2025-001 +Tanggal: 15 Januari 2025 +Kepada: PT. Industri Tekstil Nusantara + (Attn: Budi Santoso) +Perihal: Quotation Analisis Air Limbah Triwulan I 2025 + +Detail Analisis: ++--------+---------------+----------+--------+-------------+ +| No. | Parameter | Metode | Jumlah | Harga (Rp) | ++--------+---------------+----------+--------+-------------+ +| 1 | pH | SNI-01 | 1 | 50.000 | +| 2 | TSS | SNI-02 | 1 | 75.000 | +| 3 | COD | SNI-03 | 1 | 125.000 | +| 4 | BOD | SNI-04 | 1 | 150.000 | +| 5 | Ammonia | SNI-05 | 1 | 100.000 | ++--------+---------------+----------+--------+-------------+ +| Subtotal Analisis | 500.000 | ++------------------------------------------+---------------+ +| Biaya Sampling | 300.000 | +| Biaya Transport | 200.000 | +| Biaya Administrasi & Pelaporan | 100.000 | ++------------------------------------------+---------------+ +| Total | 1.100.000 | ++------------------------------------------+---------------+ + +Catatan: +- Harga belum termasuk PPN 11% +- Pembayaran DP 50% sebelum sampling dilakukan +- Hasil analisis akan diberikan 7 hari kerja setelah sampling +``` + +Update data di sistem: +``` +SERVICE_REQUESTS (update): +- quotation_number: "Q-2025-001" +- quotation_date: "2025-01-15" +- total_amount: 1100000 +- status: "Quotation Sent" +``` + +#### 5. Persetujuan Quotation oleh Pelanggan +Admin mengirimkan quotation kepada pelanggan dan pelanggan memberikan persetujuan: + +```mermaid +sequenceDiagram + actor Admin as Dini Wijaya (Admin) + actor Customer as Budi Santoso + participant System as Sistem Lab + + Admin->>Customer: Mengirim quotation via email + Customer->>Admin: Menyetujui quotation via email + Admin->>System: Mencatat persetujuan + Customer->>Admin: Mengirim bukti transfer DP 50% + Admin->>System: Upload bukti pembayaran + System-->>Admin: Update status permintaan +``` + +Update data di sistem: +``` +SERVICE_REQUESTS (update): +- status: "Approved" +- approved_date: "2025-01-20" +- payment_proof: "bukti_transfer_ITN_20250120.jpg" +- payment_date: "2025-01-20" +``` + +#### 6. Melengkapi Data Teknis Order Pelanggan +Admin melengkapi detail teknis terkait order berdasarkan kebutuhan pelanggan: + +```mermaid +sequenceDiagram + actor Admin as Dini Wijaya (Admin) + participant System as Sistem Lab + participant Sampling as Modul Sampling + + Admin->>System: Buka detail permintaan + Admin->>System: Tambahkan informasi teknis + System-->>Admin: Form data teknis + Admin->>System: Isi data titik sampling + Admin->>System: Isi data metode sampling + Admin->>System: Isi instruksi khusus + System->>Sampling: Siapkan jadwal sampling + Sampling-->>System: Konfirmasi jadwal + System-->>Admin: Tampilkan ringkasan order +``` + +Data teknis yang dilengkapi Admin: +``` +TECHNICAL_DETAILS: +- Jenis Sampling: Grab Sampling +- Metode Pengawetan: Sesuai SNI 6989.59:2008 +- Wadah Sampel: Botol kaca untuk BOD, botol plastik untuk parameter lain +- Preservasi Khusus: H₂SO₄ untuk COD, BOD, dan Ammonia +- Pengukuran In-situ: pH dan Suhu +- Instruksi Khusus: Sampel diambil saat produksi penuh (antara jam 10:00-12:00) +- Pelaporan Tambahan: Perbandingan dengan hasil triwulan sebelumnya +- Format Laporan: Digital (PDF) dan 2 hardcopy +``` + +``` +SAMPLING_PLANS: +- plan_id: 1 +- request_id: 1 +- planned_date: "2025-01-25" +- location: "Outlet IPAL PT. Industri Tekstil Nusantara" +- coordinates: "-6.914744, 107.609810" +- sampling_method: "Grab Sampling sesuai SNI 6989.59:2008" +- equipment_needed: "Botol sampling, pH meter, termometer, cool box" +- sampling_officer_id: 2 (Ahmad Ramadhan) +- status: "Planned" +- notes: "Sampling dilakukan saat produksi penuh (10:00-12:00)" +``` + +#### 7. Registrasi Order +Admin menyelesaikan proses registrasi order di sistem, yang mencakup: + +```mermaid +sequenceDiagram + actor Admin as Dini Wijaya (Admin) + participant System as Sistem Lab + participant DB as Database + + Admin->>System: Finalisasi order + System->>DB: Generate kode unik order + System->>DB: Assign petugas sampling + System->>DB: Create work order + DB-->>System: Konfirmasi registrasi + System-->>Admin: Tampilkan detail registrasi + Admin->>System: Cetak Surat Perintah Kerja (SPK) +``` + +Data registrasi order: +``` +ORDER_REGISTRATION: +- registration_number: "REG-2025-001" +- registration_date: "2025-01-22" +- assigned_officer: "Ahmad Ramadhan (Sampling), Ani Suryani (Analis)" +- estimated_completion: "2025-02-01" +- reporting_deadline: "2025-02-05" +``` + +## Kasus 2: Monitoring Kualitas Air Sungai Multi-titik + +### **Latar Belakang** +Dinas Lingkungan Hidup Kota (DLH) sedang melakukan program monitoring kualitas air Sungai Citarum di 5 titik sepanjang sungai yang melewati kota. Siti Aminah, selaku koordinator pemantauan kualitas air DLH, menghubungi laboratorium untuk melakukan sampling dan analisis di 5 titik yang telah ditentukan. + +### **Alur Proses** + +#### 1. Permintaan Awal +- **Pelanggan:** Siti Aminah (DLH Kota) +- **Kontak:** 08765432100, siti@dlh.kotabjb.go.id +- **Jenis Permintaan:** Sampling dan Analisis +- **Deskripsi:** Monitoring Kualitas Air Sungai Citarum +- **Lokasi Sampling:** 5 titik sepanjang Sungai Citarum (koordinat disediakan) +- **Parameter yang diminta:** pH, TSS, DO, BOD, COD, Total Coliform, Logam Berat (Pb, Cd, Hg) + +#### 2. Analisis Kebutuhan dan Penyiapan Penawaran Kompleks +Admin Lab melakukan analisis kebutuhan spesifik untuk monitoring multi-titik: + +```mermaid +sequenceDiagram + actor Admin as Faisal Rahman (Admin) + participant System as Sistem Lab + participant Mapping as Modul Pemetaan + + Admin->>System: Input permintaan multi-titik + System-->>Admin: Form entri lokasi multiple + Admin->>Mapping: Plot 5 titik sampling di peta + Mapping-->>Admin: Konfirmasi koordinat & jarak + Admin->>System: Hitung biaya per titik sampling + System-->>Admin: Kalkulasi estimasi biaya total + Admin->>System: Terapkan diskon volume + System-->>Admin: Generate penawaran multi-titik +``` + +Detail perhitungan biaya untuk multi-titik: +``` +Biaya per Parameter: +- pH: 50.000 x 5 titik = 250.000 +- TSS: 75.000 x 5 titik = 375.000 +- DO: 80.000 x 5 titik = 400.000 +- BOD: 150.000 x 5 titik = 750.000 +- COD: 125.000 x 5 titik = 625.000 +- Total Coliform: 175.000 x 5 titik = 875.000 +- Pb: 200.000 x 5 titik = 1.000.000 +- Cd: 200.000 x 5 titik = 1.000.000 +- Hg: 250.000 x 5 titik = 1.250.000 + +Subtotal Analisis: 6.525.000 +Diskon Volume (10%): -652.500 +Biaya Sampling (5 titik): 1.000.000 +Biaya Transport: 500.000 +Biaya Administrasi & Pelaporan: 250.000 + +Total setelah diskon: 7.622.500 +``` + +#### 3. Pembuatan Quotation Khusus +Admin menyiapkan quotation khusus yang mendetailkan biaya per titik sampling dan diskon volume: + +``` +Nomor: Q-2025-002 +Tanggal: 10 Februari 2025 +Kepada: Dinas Lingkungan Hidup Kota + (Attn: Siti Aminah) +Perihal: Quotation Monitoring Kualitas Air Sungai Citarum (5 Titik) + +Detail Analisis: ++--------+---------------+----------+--------+-------------+ +| No. | Parameter | Metode | Titik | Harga (Rp) | ++--------+---------------+----------+--------+-------------+ +| 1 | pH | SNI-01 | 5 | 250.000 | +| 2 | TSS | SNI-02 | 5 | 375.000 | +| 3 | DO | SNI-08 | 5 | 400.000 | +| 4 | BOD | SNI-04 | 5 | 750.000 | +| 5 | COD | SNI-03 | 5 | 625.000 | +| 6 | Total Coliform| SNI-07 | 5 | 875.000 | +| 7 | Logam Pb | SNI-06 | 5 | 1.000.000 | +| 8 | Logam Cd | SNI-09 | 5 | 1.000.000 | +| 9 | Logam Hg | SNI-10 | 5 | 1.250.000 | ++--------+---------------+----------+--------+-------------+ +| Subtotal Analisis | 6.525.000 | +| Diskon Volume 10% | -652.500 | ++------------------------------------------+---------------+ +| Biaya Sampling (5 titik) | 1.000.000 | +| Biaya Transport | 500.000 | +| Biaya Administrasi & Pelaporan | 250.000 | ++------------------------------------------+---------------+ +| Total | 7.622.500 | ++------------------------------------------+---------------+ + +Detail Lokasi Sampling: +1. Titik 1 (Hulu): Koordinat -6.947890, 107.632505 +2. Titik 2: Koordinat -6.933456, 107.621234 +3. Titik 3: Koordinat -6.925678, 107.612345 +4. Titik 4: Koordinat -6.912345, 107.603456 +5. Titik 5 (Hilir): Koordinat -6.901234, 107.594567 + +Catatan: +- Harga sudah termasuk PPN (DLH dibebaskan dari PPN) +- Pembayaran dapat dilakukan dengan mekanisme penagihan anggaran pemerintah +- Hasil analisis akan diberikan 10 hari kerja setelah sampling +- Laporan akan mencakup interpretasi hasil dan visualisasi spasial +``` + +#### 4. Melengkapi Data Teknis yang Kompleks +Admin melengkapi data teknis yang lebih kompleks karena melibatkan multiple titik dan parameter yang lebih banyak: + +```mermaid +sequenceDiagram + actor Admin as Faisal Rahman (Admin) + participant System as Sistem Lab + participant Schedule as Modul Penjadwalan + + Admin->>System: Buka modul data teknis + Admin->>System: Input detail protokol sampling multi-titik + Admin->>System: Upload peta lokasi sampling + Admin->>System: Input kebutuhan peralatan khusus + Admin->>System: Input metode preservasi per parameter + Admin->>Schedule: Buat jadwal tim sampling + Schedule-->>System: Konfirmasi ketersediaan personil + System-->>Admin: Tampilkan ringkasan teknis +``` + +Data teknis kompleks yang dilengkapi: +``` +MULTI_POINT_SAMPLING_DETAILS: +- Protokol Sampling: "Sesuai Permen LH No. 115 Tahun 2003" +- Urutan Pengambilan: "Dari hilir ke hulu untuk menghindari kontaminasi" +- Waktu Sampling: "Dilakukan pada pagi hari (07:00-10:00)" +- Tim Sampling: "2 petugas sampling + 1 petugas dokumentasi" +- Transportasi: "Perlu kendaraan 4WD untuk akses titik 1 dan 2" +- Peralatan Khusus: "DO meter, Multiparameter water quality tester, GPS" +- Metode Preservasi: "Cold storage untuk mikrobiologi, Asam nitrat untuk logam berat" +- Kebutuhan QA/QC: "Duplikat sampel untuk titik 3, Blank sample untuk parameter logam" +- Format Pelaporan: "Termasuk visualisasi spasial dan trend analisis" +``` + +``` +MULTI_POINT_SAMPLING_PLANS: +- Plan for Point 1 (Hulu): {...} +- Plan for Point 2: {...} +- Plan for Point 3: {...} +- Plan for Point 4: {...} +- Plan for Point 5 (Hilir): {...} + +EQUIPMENT_REQUISITION: +- Multiparameter water quality tester (YSI ProDSS): 1 unit +- DO meter: 1 unit +- pH meter (backup): 1 unit +- Botol sampel mikrobiologi (steril): 10 buah +- Botol sampel kaca amber (organik): 10 buah +- Botol sampel HDPE (anorganik): 25 buah +- Cool box besar: 2 unit +- GPS: 1 unit +- Kamera dokumentasi: 1 unit +- Kit preservasi sampel: 1 set +``` + +#### 5. Registrasi Order Kompleks +Admin melakukan registrasi order yang lebih kompleks dengan beberapa sub-order: + +```mermaid +sequenceDiagram + actor Admin as Faisal Rahman (Admin) + participant System as Sistem Lab + participant Order as Modul Order + participant Lab as Laboratorium + + Admin->>System: Finalisasi order multi-titik + System->>Order: Generate 5 sub-order (per titik) + Order->>Lab: Cek kapasitas lab untuk tanggal tersebut + Lab-->>Order: Konfirmasi kapasitas tersedia + Order-->>System: Assign kode sampel untuk 45 sampel (9 parameter x 5 titik) + System-->>Admin: Tampilkan ringkasan order kompleks + Admin->>System: Cetak dokumen Work Order +``` + +Data registrasi order kompleks: +``` +MULTI_POINT_ORDER_REGISTRATION: +- master_registration_number: "REG-2025-002" +- sub_registrations: ["REG-2025-002-T1", "REG-2025-002-T2", "REG-2025-002-T3", "REG-2025-002-T4", "REG-2025-002-T5"] +- total_samples: 5 +- total_analyses: 45 +- assigned_officers: ["Team A: Ahmad & Budi (Sampling)", "Team B: Ani, Dedi, Eva (Analis)"] +- estimated_field_work: "1 hari (20 Februari 2025)" +- estimated_lab_work: "7 hari kerja" +- reporting_deadline: "3 Maret 2025" +- special_instructions: "Prioritaskan analisis mikrobiologi, maksimal 6 jam setelah sampling" +``` + +## Ringkasan Proses Admin dalam Sistem Laboratorium + +Berdasarkan studi kasus di atas, berikut adalah ringkasan proses yang dilakukan oleh Admin Lab dalam sistem aplikasi laboratorium lingkungan: + +### 1. Penerimaan dan Pencatatan Permintaan +- Menerima permintaan dari pelanggan +- Mencatat detail pelanggan di sistem +- Membuat entry permintaan layanan baru +- Mencatat parameter yang diminta + +### 2. Penyiapan Penawaran +- Memeriksa ketersediaan parameter yang diminta +- Menghitung biaya berdasarkan parameter dan jumlah titik +- Menambahkan biaya tambahan (sampling, transport, dll) +- Menerapkan diskon jika diperlukan +- Menyiapkan dokumen penawaran + +### 3. Pembuatan Quotation +- Membuat dokumen quotation resmi +- Mencantumkan detail parameter, metode, dan biaya +- Menambahkan detail lokasi sampling +- Mencantumkan syarat dan ketentuan +- Mendapatkan persetujuan dari kepala laboratorium +- Mengirimkan quotation ke pelanggan + +### 4. Penerimaan Persetujuan dan Pembayaran +- Menerima persetujuan dari pelanggan +- Mencatat persetujuan di sistem +- Menerima bukti pembayaran DP +- Mengupload bukti pembayaran ke sistem +- Mengupdate status permintaan + +### 5. Melengkapi Data Teknis Order +- Mencatat detail lokasi sampling +- Menentukan metode sampling yang sesuai +- Mencatat kebutuhan peralatan +- Menentukan metode preservasi sampel +- Mencatat instruksi khusus dari pelanggan +- Mengupload dokumen pendukung (peta, foto lokasi, dll) + +### 6. Registrasi Order +- Membuat kode registrasi unik +- Menugaskan petugas sampling dan analis +- Menjadwalkan kegiatan sampling +- Mempersiapkan dokumen Work Order +- Mengkomunikasikan jadwal ke tim terkait +- Memastikan koordinasi antar departemen + +### 7. Monitoring dan Komunikasi +- Memantau status pelaksanaan sampling +- Memantau progres analisis di laboratorium +- Menginformasikan status ke pelanggan +- Mengelola perubahan permintaan jika ada +- Memastikan timeline sesuai dengan yang dijanjikan + +Proses-proses di atas menunjukkan peran krusial Admin Lab dalam menjembatani kebutuhan pelanggan dengan operasional laboratorium, memastikan data teknis yang lengkap dan akurat, serta menjamin kelancaran alur kerja laboratorium secara keseluruhan. \ No newline at end of file diff --git a/lab_env_database_erd.md b/lab_env_database_erd.md new file mode 100644 index 0000000..b5842c1 --- /dev/null +++ b/lab_env_database_erd.md @@ -0,0 +1,161 @@ +# Entity Relationship Diagram (ERD) - Sistem Aplikasi Laboratorium Lingkungan + +Berikut adalah representasi hubungan antar entitas dalam sistem aplikasi laboratorium lingkungan. + +``` ++----------------+ +-------------------+ +---------------------+ +| CUSTOMERS | | SERVICE REQUESTS | | REQUEST PARAMETERS | ++----------------+ +-------------------+ +---------------------+ +| PK customer_id |<------| FK customer_id | | PK request_param_id | +| customer_name | | PK request_id |<------| FK request_id | +| customer_type | | request_date | | FK parameter_id | +| contact_person | | request_type | | quantity | +| phone_number | | project_name | | price_per_unit | +| email | | project_location | +---------------------+ +| address | | status | ^ +| company_name | | admin_id | | ++----------------+ | quotation_number | | + | quotation_date | +---------------------+ + | approved_date | | ANALYSIS PARAMETERS | + | payment_proof | +---------------------+ + | payment_date | | PK parameter_id |------+ + | total_amount | | parameter_name | | + | notes | | unit | | + +-------------------+ | method | | + | | FK sample_type_id |---+ | + | | standard_value | | | + v | price | | | + +-------------------+ +---------------------+ | | + | SAMPLING PLANS | | | + +-------------------+ +---------------------+ | | + | PK plan_id | | SAMPLE TYPES | | | + | FK request_id | +---------------------+ | | + | planned_date | | PK sample_type_id |<---+ | + | location | | type_name | | + | coordinates | | description | | + | sampling_method | | standard_method | | + | equipment_needed | +---------------------+ | + | sampling_officer_id| | + | status | | + | notes | +---------------------+ | + +-------------------+ | SAMPLES | | + | +---------------------+ | + | | PK sample_id | | + +----------------->| FK request_id | | + | FK plan_id | | + | sample_code | | + | FK sample_type_id |------+ + | sampling_date | + | sampling_location | + | sampling_officer_id| + | received_date | + | received_by | + | sample_condition | + | preparation_notes | + | preservation_method| + | status | + +---------------------+ + | + | + v + +---------------------+ +----------------+ + | ANALYSIS RESULTS | | REPORTS | + +---------------------+ +----------------+ + | PK result_id | | PK report_id | + | FK sample_id | | FK request_id | + | FK parameter_id |------>| report_number | + | analyst_id | | report_date | + | analysis_date | | prepared_by | + | result_value | | verified_by | + | unit | | approved_by | + | method_used | | status | + | is_within_standard | | file_path | + | notes | | notes | + | status | +----------------+ + | verified_by | + | verification_date | + +---------------------+ + ++----------------+ +---------------------+ +| USERS | | ACTIVITY LOGS | ++----------------+ +---------------------+ +| PK user_id |<------| FK user_id | +| username | | PK log_id | +| password | | action | +| full_name | | table_name | +| email | | record_id | +| role | | details | +| department | | ip_address | +| is_active | | created_at | +| last_login | +---------------------+ ++----------------+ +``` + +## Keterangan Relasi + +1. **Customers** (1) -- (N) **Service Requests** + - Satu pelanggan (customer) dapat memiliki banyak permintaan layanan (service requests). + +2. **Service Requests** (1) -- (N) **Request Parameters** + - Satu permintaan layanan dapat meminta banyak parameter untuk diuji. + +3. **Analysis Parameters** (1) -- (N) **Request Parameters** + - Satu parameter analisis dapat diminta dalam banyak permintaan layanan. + +4. **Sample Types** (1) -- (N) **Analysis Parameters** + - Satu jenis sampel dapat memiliki banyak parameter analisis. + +5. **Service Requests** (1) -- (N) **Sampling Plans** + - Satu permintaan layanan dapat memiliki banyak rencana sampling. + +6. **Sampling Plans** (1) -- (N) **Samples** + - Satu rencana sampling dapat menghasilkan banyak sampel. + +7. **Service Requests** (1) -- (N) **Samples** + - Satu permintaan layanan dapat memiliki banyak sampel. + +8. **Sample Types** (1) -- (N) **Samples** + - Satu jenis sampel dapat memiliki banyak sampel. + +9. **Samples** (1) -- (N) **Analysis Results** + - Satu sampel dapat memiliki banyak hasil analisis. + +10. **Analysis Parameters** (1) -- (N) **Analysis Results** + - Satu parameter analisis dapat digunakan untuk banyak hasil analisis. + +11. **Service Requests** (1) -- (N) **Reports** + - Satu permintaan layanan dapat menghasilkan banyak laporan. + +12. **Users** (1) -- (N) **Activity Logs** + - Satu pengguna dapat memiliki banyak catatan aktivitas. + +13. **Users** berhubungan dengan banyak tabel lain melalui kolom seperti: + - admin_id pada Service Requests + - sampling_officer_id pada Sampling Plans + - sampling_officer_id pada Samples + - received_by pada Samples + - analyst_id pada Analysis Results + - verified_by pada Analysis Results + - prepared_by, verified_by, approved_by pada Reports + +Relasi ini menggambarkan alur layanan laboratorium lingkungan sesuai dengan diagram alur pelayanan yang disediakan. + +## Penjelasan Proses Bisnis berdasarkan Diagram ERD + +Dengan mengikuti ERD di atas, proses bisnis laboratorium lingkungan berjalan sebagai berikut: + +1. **Customer** (internal atau eksternal) mengajukan permintaan layanan (service request). + +2. **Admin Lab** memproses permintaan, membuat penawaran dan quotation, mencatat detail parameter yang akan dianalisis. + +3. **Petugas Sampling** membuat rencana sampling berdasarkan permintaan layanan. + +4. Sampel diambil oleh **Petugas Sampling** sesuai dengan rencana sampling. + +5. Sampel diterima oleh **Bagian Penerimaan Contoh Uji** yang mencatat kondisi sampel dan melakukan persiapan sampel. + +6. **Bagian Analisis Laboratorium** melakukan analisis sampel dan mencatat hasilnya di tabel Analysis Results. + +7. **Bagian Verifikasi Hasil Uji** memverifikasi hasil analisis dan menyiapkan laporan hasil uji. + +8. Semua aktivitas pengguna dicatat dalam Activity Logs untuk audit trail dan pelacakan. \ No newline at end of file diff --git a/lab_env_database_explanation.md b/lab_env_database_explanation.md new file mode 100644 index 0000000..c702ae7 --- /dev/null +++ b/lab_env_database_explanation.md @@ -0,0 +1,276 @@ +# Struktur Database Sistem Aplikasi Laboratorium Lingkungan + +Berikut adalah penjelasan struktur database yang dirancang untuk sistem aplikasi laboratorium lingkungan berdasarkan alur pelayanan yang ada pada diagram. + +## Gambaran Umum Alur Layanan + +Alur laboratorium lingkungan melibatkan beberapa tahapan utama: +1. **Customer** (internal/eksternal) mengajukan permintaan sampling dan analisis +2. **Admin Lab** memproses permintaan, menyiapkan surat penawaran, quotation, dan registrasi +3. **Petugas Sampling** menyiapkan rencana sampling dan peralatan +4. **Bagian Penerimaan Contoh Uji** menerima dan mempreparasi sampel +5. **Bagian Analisis Laboratorium** menganalisa sampel uji sesuai jenis sampel +6. **Bagian Verifikasi Hasil Uji** melakukan verifikasi hasil uji + +## Struktur Tabel + +### 1. Tabel Customers (Pelanggan) +Menyimpan data pelanggan baik internal maupun eksternal yang meminta layanan pengujian. + +| Field | Tipe Data | Keterangan | +|-------|-----------|------------| +| customer_id | INT | Primary Key, ID unik pelanggan | +| customer_name | VARCHAR(100) | Nama pelanggan | +| customer_type | ENUM | Tipe pelanggan: 'Internal' atau 'External' | +| contact_person | VARCHAR(100) | Nama kontak person | +| phone_number | VARCHAR(20) | Nomor telepon | +| email | VARCHAR(100) | Alamat email | +| address | TEXT | Alamat lengkap | +| company_name | VARCHAR(100) | Nama perusahaan/instansi | +| created_at | TIMESTAMP | Tanggal pembuatan record | +| updated_at | TIMESTAMP | Tanggal update terakhir | + +### 2. Tabel Sample Types (Jenis Sampel) +Menyimpan jenis-jenis sampel yang dapat dianalisis oleh laboratorium. + +| Field | Tipe Data | Keterangan | +|-------|-----------|------------| +| sample_type_id | INT | Primary Key, ID unik jenis sampel | +| type_name | VARCHAR(100) | Nama jenis sampel (contoh: Air Limbah, Air Permukaan, dll) | +| description | TEXT | Deskripsi jenis sampel | +| standard_method | TEXT | Metode standar untuk sampling dan analisis | +| created_at | TIMESTAMP | Tanggal pembuatan record | + +### 3. Tabel Analysis Parameters (Parameter Analisis) +Menyimpan parameter-parameter yang dapat dianalisis oleh laboratorium. + +| Field | Tipe Data | Keterangan | +|-------|-----------|------------| +| parameter_id | INT | Primary Key, ID unik parameter | +| parameter_name | VARCHAR(100) | Nama parameter (contoh: pH, BOD, COD, dll) | +| unit | VARCHAR(50) | Satuan parameter (mg/L, NTU, dll) | +| method | VARCHAR(100) | Metode analisis parameter | +| sample_type_id | INT | Foreign Key ke tabel sample_types | +| standard_value | VARCHAR(100) | Nilai baku mutu atau rentang standar | +| price | DECIMAL(10,2) | Harga analisis parameter | +| created_at | TIMESTAMP | Tanggal pembuatan record | + +### 4. Tabel Service Requests (Permintaan Layanan) +Menyimpan permintaan layanan dari pelanggan. + +| Field | Tipe Data | Keterangan | +|-------|-----------|------------| +| request_id | INT | Primary Key, ID unik permintaan | +| customer_id | INT | Foreign Key ke tabel customers | +| request_date | TIMESTAMP | Tanggal permintaan | +| request_type | ENUM | Tipe permintaan: 'Sampling and Analysis' atau 'Analysis Only' | +| project_name | VARCHAR(200) | Nama proyek | +| project_location | TEXT | Lokasi proyek | +| status | ENUM | Status permintaan (Draft, Submitted, Quotation Sent, Approved, dll) | +| admin_id | INT | ID admin yang menangani | +| quotation_number | VARCHAR(50) | Nomor quotation | +| quotation_date | DATE | Tanggal quotation | +| approved_date | DATE | Tanggal persetujuan | +| payment_proof | VARCHAR(255) | Bukti pembayaran DP | +| payment_date | DATE | Tanggal pembayaran | +| total_amount | DECIMAL(12,2) | Total biaya | +| notes | TEXT | Catatan tambahan | +| created_at | TIMESTAMP | Tanggal pembuatan record | +| updated_at | TIMESTAMP | Tanggal update terakhir | + +### 5. Tabel Request Parameters (Parameter yang Diminta) +Menyimpan parameter-parameter yang diminta untuk dianalisis dalam suatu permintaan. + +| Field | Tipe Data | Keterangan | +|-------|-----------|------------| +| request_parameter_id | INT | Primary Key, ID unik | +| request_id | INT | Foreign Key ke tabel service_requests | +| parameter_id | INT | Foreign Key ke tabel analysis_parameters | +| quantity | INT | Jumlah sampel untuk parameter | +| price_per_unit | DECIMAL(10,2) | Harga per unit | +| created_at | TIMESTAMP | Tanggal pembuatan record | + +### 6. Tabel Sampling Plans (Rencana Sampling) +Menyimpan rencana-rencana sampling. + +| Field | Tipe Data | Keterangan | +|-------|-----------|------------| +| plan_id | INT | Primary Key, ID unik rencana | +| request_id | INT | Foreign Key ke tabel service_requests | +| planned_date | DATE | Tanggal rencana sampling | +| location | TEXT | Lokasi sampling | +| coordinates | VARCHAR(100) | Koordinat GPS lokasi sampling | +| sampling_method | TEXT | Metode sampling yang digunakan | +| equipment_needed | TEXT | Peralatan yang dibutuhkan | +| sampling_officer_id | INT | ID petugas sampling | +| status | ENUM | Status rencana (Planned, Confirmed, Completed, Cancelled) | +| notes | TEXT | Catatan tambahan | +| created_at | TIMESTAMP | Tanggal pembuatan record | +| updated_at | TIMESTAMP | Tanggal update terakhir | + +### 7. Tabel Samples (Sampel) +Menyimpan data sampel yang diambil. + +| Field | Tipe Data | Keterangan | +|-------|-----------|------------| +| sample_id | INT | Primary Key, ID unik sampel | +| request_id | INT | Foreign Key ke tabel service_requests | +| plan_id | INT | Foreign Key ke tabel sampling_plans | +| sample_code | VARCHAR(50) | Kode unik sampel | +| sample_type_id | INT | Foreign Key ke tabel sample_types | +| sampling_date | DATETIME | Tanggal dan waktu pengambilan sampel | +| sampling_location | TEXT | Lokasi pengambilan sampel | +| sampling_officer_id | INT | ID petugas yang mengambil sampel | +| received_date | DATETIME | Tanggal dan waktu penerimaan sampel di lab | +| received_by | INT | ID petugas yang menerima sampel | +| sample_condition | TEXT | Kondisi sampel saat diterima | +| preparation_notes | TEXT | Catatan preparasi sampel | +| preservation_method | TEXT | Metode preservasi sampel | +| status | ENUM | Status sampel (Planned, Collected, Received, In Preparation, dll) | +| created_at | TIMESTAMP | Tanggal pembuatan record | +| updated_at | TIMESTAMP | Tanggal update terakhir | + +### 8. Tabel Analysis Results (Hasil Analisis) +Menyimpan hasil-hasil analisis laboratorium. + +| Field | Tipe Data | Keterangan | +|-------|-----------|------------| +| result_id | INT | Primary Key, ID unik hasil | +| sample_id | INT | Foreign Key ke tabel samples | +| parameter_id | INT | Foreign Key ke tabel analysis_parameters | +| analyst_id | INT | ID analis yang melakukan pengujian | +| analysis_date | DATETIME | Tanggal dan waktu analisis | +| result_value | VARCHAR(100) | Nilai hasil analisis | +| unit | VARCHAR(50) | Satuan hasil | +| method_used | VARCHAR(100) | Metode yang digunakan | +| is_within_standard | BOOLEAN | Apakah hasil dalam batas standar | +| notes | TEXT | Catatan analisis | +| status | ENUM | Status hasil (Planned, In Progress, Completed, Verified, Rejected) | +| verified_by | INT | ID petugas yang memverifikasi hasil | +| verification_date | DATETIME | Tanggal dan waktu verifikasi | +| created_at | TIMESTAMP | Tanggal pembuatan record | +| updated_at | TIMESTAMP | Tanggal update terakhir | + +### 9. Tabel Reports (Laporan) +Menyimpan laporan hasil uji. + +| Field | Tipe Data | Keterangan | +|-------|-----------|------------| +| report_id | INT | Primary Key, ID unik laporan | +| request_id | INT | Foreign Key ke tabel service_requests | +| report_number | VARCHAR(50) | Nomor laporan hasil uji | +| report_date | DATE | Tanggal laporan | +| prepared_by | INT | ID petugas yang menyiapkan laporan | +| verified_by | INT | ID petugas yang memverifikasi laporan | +| approved_by | INT | ID petugas yang menyetujui laporan | +| status | ENUM | Status laporan (Draft, Verified, Approved, Sent, Received) | +| file_path | VARCHAR(255) | Path ke file laporan | +| notes | TEXT | Catatan laporan | +| created_at | TIMESTAMP | Tanggal pembuatan record | +| updated_at | TIMESTAMP | Tanggal update terakhir | + +### 10. Tabel Users (Pengguna) +Menyimpan data pengguna sistem (staf laboratorium). + +| Field | Tipe Data | Keterangan | +|-------|-----------|------------| +| user_id | INT | Primary Key, ID unik pengguna | +| username | VARCHAR(50) | Username untuk login | +| password | VARCHAR(255) | Password terenkripsi | +| full_name | VARCHAR(100) | Nama lengkap pengguna | +| email | VARCHAR(100) | Email pengguna | +| role | ENUM | Peran pengguna (Admin, Sampling Officer, Lab Analyst, dll) | +| department | VARCHAR(100) | Departemen pengguna | +| is_active | BOOLEAN | Status aktif atau tidak | +| last_login | DATETIME | Waktu login terakhir | +| created_at | TIMESTAMP | Tanggal pembuatan record | +| updated_at | TIMESTAMP | Tanggal update terakhir | + +### 11. Tabel Activity Logs (Log Aktivitas) +Menyimpan log aktivitas pada sistem. + +| Field | Tipe Data | Keterangan | +|-------|-----------|------------| +| log_id | INT | Primary Key, ID unik log | +| user_id | INT | Foreign Key ke tabel users | +| action | VARCHAR(255) | Aksi yang dilakukan | +| table_name | VARCHAR(100) | Nama tabel yang berubah | +| record_id | INT | ID record yang berubah | +| details | TEXT | Detail perubahan | +| ip_address | VARCHAR(45) | Alamat IP | +| created_at | TIMESTAMP | Tanggal dan waktu log | + +## Contoh Data Real + +Berikut adalah contoh data nyata untuk beberapa tabel utama: + +### Contoh Data Customers +``` +1, 'PT. Industri Tekstil Nusantara', 'External', 'Budi Santoso', '08123456789', 'budi@tekstilnusantara.com', 'Jl. Industri No. 123, Bandung', 'PT. Industri Tekstil Nusantara' +2, 'Dinas Lingkungan Hidup Kota', 'External', 'Siti Aminah', '08765432100', 'siti@dlh.kotabjb.go.id', 'Jl. Pemkot No. 45, Kota BJB', 'Dinas Lingkungan Hidup Kota BJB' +3, 'Departemen Produksi', 'Internal', 'Rudi Hartono', '08567891234', 'rudi@internal.lab.com', 'Gedung Utama Lt. 2, Lab Lingkungan', 'Lab Lingkungan' +``` + +### Contoh Data Sample Types +``` +1, 'Air Limbah', 'Sampel air limbah dari industri atau fasilitas', 'SNI 6989.59:2008' +2, 'Air Permukaan', 'Sampel air sungai, danau, atau badan air lainnya', 'SNI 6989.57:2008' +3, 'Air Tanah', 'Sampel air dari sumur atau mata air', 'SNI 6989.58:2008' +``` + +### Contoh Data Analysis Parameters +``` +1, 'pH', '-', 'SNI 06-6989.11-2004', 1, '6-9', 50000.00 +2, 'TSS', 'mg/L', 'SNI 06-6989.3-2004', 1, '100', 75000.00 +3, 'COD', 'mg/L', 'SNI 6989.73:2009', 1, '100', 125000.00 +4, 'BOD', 'mg/L', 'SNI 6989.72:2009', 1, '30', 150000.00 +``` + +### Contoh Data Service Requests +``` +1, 1, '2025-01-15 09:30:00', 'Sampling and Analysis', 'Pemantauan Limbah Triwulan I 2025', 'Pabrik Tekstil Bandung', 'Approved', 1, 'Q-2025-001', '2025-01-15', '2025-01-20', 'payment_proof_001.jpg', '2025-01-18', 2500000.00, 'Permintaan rutin triwulanan' +``` + +### Contoh Data Sampling Plans +``` +1, 1, '2025-01-25', 'Outlet IPAL PT. Industri Tekstil Nusantara', '-6.914744, 107.609810', 'Grab Sampling sesuai SNI 6989.59:2008', 'Botol sampling, pH meter, termometer, cool box', 2, 'Completed', 'Sampling dilakukan pada pagi hari' +``` + +### Contoh Data Samples +``` +1, 1, 1, 'ITN-2025-001', 1, '2025-01-25 10:15:00', 'Outlet IPAL PT. Industri Tekstil Nusantara', 2, '2025-01-25 15:30:00', 3, 'Baik, suhu 20°C', 'Sampel disaring untuk analisis TSS', 'Preservation with H2SO4 for COD', 'Analysis Complete' +``` + +### Contoh Data Analysis Results +``` +1, 1, 1, 3, '2025-01-26 09:00:00', '7.6', '-', 'SNI 06-6989.11-2004', TRUE, 'pH diukur in-situ dan di laboratorium', 'Verified', 4, '2025-01-27 10:00:00' +2, 1, 2, 3, '2025-01-26 11:00:00', '45', 'mg/L', 'SNI 06-6989.3-2004', TRUE, 'Sampel disaring dengan kertas saring', 'Verified', 4, '2025-01-27 10:00:00' +``` + +## Kesesuaian dengan Alur Layanan + +Struktur database ini dirancang untuk mendukung alur layanan laboratorium lingkungan seperti pada diagram: + +1. **Customer (Internal dan eksternal)** + - Tabel `customers` menyimpan informasi pelanggan + - Tabel `service_requests` menyimpan permintaan sampling dan analisis + +2. **Admin Lab Ling** + - Tabel `service_requests` menyimpan data penawaran, quotation, order pelanggan + - Tabel `users` menyimpan data admin yang bertanggung jawab + +3. **Petugas Sampling** + - Tabel `sampling_plans` menyimpan rencana sampling + - Tabel `samples` menyimpan data sampel yang diambil + +4. **Bagian penerimaan contoh uji** + - Tabel `samples` menyimpan informasi penerimaan dan preparasi sampel + +5. **Bagian Analisis Laboratorium** + - Tabel `analysis_results` menyimpan hasil analisa sampel uji + +6. **Bagian Verifikasi Hasil Uji** + - Tabel `analysis_results` menyimpan data verifikasi hasil uji + - Tabel `reports` menyimpan laporan hasil uji yang telah diverifikasi + +Dengan struktur database ini, sistem dapat melacak seluruh alur dari permintaan pelanggan hingga penerbitan laporan hasil uji, sesuai dengan alur pelayanan pada diagram. \ No newline at end of file diff --git a/lab_env_database_mermaid_erd.md b/lab_env_database_mermaid_erd.md new file mode 100644 index 0000000..587938b --- /dev/null +++ b/lab_env_database_mermaid_erd.md @@ -0,0 +1,237 @@ +# Entity Relationship Diagram (ERD) - Sistem Aplikasi Laboratorium Lingkungan (Mermaid) + +Berikut adalah representasi hubungan antar entitas dalam sistem aplikasi laboratorium lingkungan menggunakan format Mermaid. + +```mermaid +erDiagram + CUSTOMERS ||--o{ SERVICE_REQUESTS : "mengajukan" + CUSTOMERS { + int customer_id PK + varchar customer_name + enum customer_type + varchar contact_person + varchar phone_number + varchar email + text address + varchar company_name + timestamp created_at + timestamp updated_at + } + + SERVICE_REQUESTS ||--o{ REQUEST_PARAMETERS : "memiliki" + SERVICE_REQUESTS ||--o{ SAMPLING_PLANS : "memiliki" + SERVICE_REQUESTS ||--o{ SAMPLES : "memiliki" + SERVICE_REQUESTS ||--o{ REPORTS : "menghasilkan" + SERVICE_REQUESTS { + int request_id PK + int customer_id FK + timestamp request_date + enum request_type + varchar project_name + text project_location + enum status + int admin_id + varchar quotation_number + date quotation_date + date approved_date + varchar payment_proof + date payment_date + decimal total_amount + text notes + timestamp created_at + timestamp updated_at + } + + SAMPLE_TYPES ||--o{ ANALYSIS_PARAMETERS : "mendefinisikan" + SAMPLE_TYPES ||--o{ SAMPLES : "dikategorikan sebagai" + SAMPLE_TYPES { + int sample_type_id PK + varchar type_name + text description + text standard_method + timestamp created_at + } + + ANALYSIS_PARAMETERS ||--o{ REQUEST_PARAMETERS : "diminta dalam" + ANALYSIS_PARAMETERS ||--o{ ANALYSIS_RESULTS : "digunakan untuk" + ANALYSIS_PARAMETERS { + int parameter_id PK + varchar parameter_name + varchar unit + varchar method + int sample_type_id FK + varchar standard_value + decimal price + timestamp created_at + } + + REQUEST_PARAMETERS { + int request_parameter_id PK + int request_id FK + int parameter_id FK + int quantity + decimal price_per_unit + timestamp created_at + } + + SAMPLING_PLANS ||--o{ SAMPLES : "menghasilkan" + SAMPLING_PLANS { + int plan_id PK + int request_id FK + date planned_date + text location + varchar coordinates + text sampling_method + text equipment_needed + int sampling_officer_id + enum status + text notes + timestamp created_at + timestamp updated_at + } + + SAMPLES ||--o{ ANALYSIS_RESULTS : "dianalisis menjadi" + SAMPLES { + int sample_id PK + int request_id FK + int plan_id FK + varchar sample_code + int sample_type_id FK + datetime sampling_date + text sampling_location + int sampling_officer_id + datetime received_date + int received_by + text sample_condition + text preparation_notes + text preservation_method + enum status + timestamp created_at + timestamp updated_at + } + + ANALYSIS_RESULTS { + int result_id PK + int sample_id FK + int parameter_id FK + int analyst_id + datetime analysis_date + varchar result_value + varchar unit + varchar method_used + boolean is_within_standard + text notes + enum status + int verified_by + datetime verification_date + timestamp created_at + timestamp updated_at + } + + REPORTS { + int report_id PK + int request_id FK + varchar report_number + date report_date + int prepared_by + int verified_by + int approved_by + enum status + varchar file_path + text notes + timestamp created_at + timestamp updated_at + } + + USERS ||--o{ ACTIVITY_LOGS : "melakukan" + USERS { + int user_id PK + varchar username + varchar password + varchar full_name + varchar email + enum role + varchar department + boolean is_active + datetime last_login + timestamp created_at + timestamp updated_at + } + + ACTIVITY_LOGS { + int log_id PK + int user_id FK + varchar action + varchar table_name + int record_id + text details + varchar ip_address + text user_agent + timestamp created_at + } +``` + +## Penjelasan Relasi + +1. **Customers** (1) -- (0..*) **Service Requests** + - Satu pelanggan (customer) dapat memiliki banyak permintaan layanan (service requests). + +2. **Service Requests** (1) -- (0..*) **Request Parameters** + - Satu permintaan layanan dapat meminta banyak parameter untuk diuji. + +3. **Analysis Parameters** (1) -- (0..*) **Request Parameters** + - Satu parameter analisis dapat diminta dalam banyak permintaan layanan. + +4. **Sample Types** (1) -- (0..*) **Analysis Parameters** + - Satu jenis sampel dapat memiliki banyak parameter analisis. + +5. **Service Requests** (1) -- (0..*) **Sampling Plans** + - Satu permintaan layanan dapat memiliki banyak rencana sampling. + +6. **Sampling Plans** (1) -- (0..*) **Samples** + - Satu rencana sampling dapat menghasilkan banyak sampel. + +7. **Service Requests** (1) -- (0..*) **Samples** + - Satu permintaan layanan dapat memiliki banyak sampel. + +8. **Sample Types** (1) -- (0..*) **Samples** + - Satu jenis sampel dapat memiliki banyak sampel. + +9. **Samples** (1) -- (0..*) **Analysis Results** + - Satu sampel dapat memiliki banyak hasil analisis. + +10. **Analysis Parameters** (1) -- (0..*) **Analysis Results** + - Satu parameter analisis dapat digunakan untuk banyak hasil analisis. + +11. **Service Requests** (1) -- (0..*) **Reports** + - Satu permintaan layanan dapat menghasilkan banyak laporan. + +12. **Users** (1) -- (0..*) **Activity Logs** + - Satu pengguna dapat memiliki banyak catatan aktivitas. + +13. **Users** berhubungan dengan banyak tabel lain melalui kolom seperti: + - admin_id pada Service Requests + - sampling_officer_id pada Sampling Plans + - sampling_officer_id pada Samples + - received_by pada Samples + - analyst_id pada Analysis Results + - verified_by pada Analysis Results + - prepared_by, verified_by, approved_by pada Reports + +## Cara Menggunakan Diagram Mermaid + +Diagram Mermaid ini dapat divisualisasikan dengan beberapa cara: + +1. **GitHub**: GitHub secara native mendukung rendering diagram Mermaid dalam file Markdown. + +2. **Mermaid Live Editor**: Kunjungi [Mermaid Live Editor](https://mermaid.live/) dan paste kode Mermaid di atas untuk melihat dan mengedit diagram secara interaktif. + +3. **Plugin VS Code**: Gunakan plugin Mermaid untuk Visual Studio Code untuk melihat diagram secara langsung saat mengedit. + +4. **Website Dengan Mermaid.js**: Tambahkan script Mermaid.js ke website Anda: + ```html + + + ``` + +5. **Export ke Image**: Gunakan Mermaid Live Editor untuk mengekspor diagram ke format PNG, SVG, atau PDF. \ No newline at end of file diff --git a/lab_env_database_structure.sql b/lab_env_database_structure.sql new file mode 100644 index 0000000..1223b38 --- /dev/null +++ b/lab_env_database_structure.sql @@ -0,0 +1,307 @@ +-- Database Structure for Environmental Laboratory Management System +-- Based on the workflow diagram provided + +-- Create database +CREATE DATABASE IF NOT EXISTS lab_lingkungan; +USE lab_lingkungan; + +-- Customers table (Internal and External) +CREATE TABLE customers ( + customer_id INT AUTO_INCREMENT PRIMARY KEY, + customer_name VARCHAR(100) NOT NULL, + customer_type ENUM('Internal', 'External') NOT NULL, + contact_person VARCHAR(100), + phone_number VARCHAR(20), + email VARCHAR(100), + address TEXT, + company_name VARCHAR(100), + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +); + +-- Sample Types table +CREATE TABLE sample_types ( + sample_type_id INT AUTO_INCREMENT PRIMARY KEY, + type_name VARCHAR(100) NOT NULL, + description TEXT, + standard_method TEXT, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); + +-- Analysis Parameters table +CREATE TABLE analysis_parameters ( + parameter_id INT AUTO_INCREMENT PRIMARY KEY, + parameter_name VARCHAR(100) NOT NULL, + unit VARCHAR(50), + method VARCHAR(100), + sample_type_id INT, + standard_value VARCHAR(100), + price DECIMAL(10, 2), + FOREIGN KEY (sample_type_id) REFERENCES sample_types(sample_type_id), + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); + +-- Service Requests table +CREATE TABLE service_requests ( + request_id INT AUTO_INCREMENT PRIMARY KEY, + customer_id INT NOT NULL, + request_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + request_type ENUM('Sampling and Analysis', 'Analysis Only') NOT NULL, + project_name VARCHAR(200), + project_location TEXT, + status ENUM('Draft', 'Submitted', 'Quotation Sent', 'Approved', 'Rejected', 'Completed', 'Cancelled') DEFAULT 'Draft', + admin_id INT, + quotation_number VARCHAR(50), + quotation_date DATE, + approved_date DATE, + payment_proof VARCHAR(255), + payment_date DATE, + total_amount DECIMAL(12, 2), + notes TEXT, + FOREIGN KEY (customer_id) REFERENCES customers(customer_id), + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +); + +-- Request Parameters (mapping between requests and required parameters) +CREATE TABLE request_parameters ( + request_parameter_id INT AUTO_INCREMENT PRIMARY KEY, + request_id INT NOT NULL, + parameter_id INT NOT NULL, + quantity INT DEFAULT 1, + price_per_unit DECIMAL(10, 2), + FOREIGN KEY (request_id) REFERENCES service_requests(request_id), + FOREIGN KEY (parameter_id) REFERENCES analysis_parameters(parameter_id), + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); + +-- Sampling Plans table +CREATE TABLE sampling_plans ( + plan_id INT AUTO_INCREMENT PRIMARY KEY, + request_id INT NOT NULL, + planned_date DATE NOT NULL, + location TEXT NOT NULL, + coordinates VARCHAR(100), + sampling_method TEXT, + equipment_needed TEXT, + sampling_officer_id INT, + status ENUM('Planned', 'Confirmed', 'Completed', 'Cancelled') DEFAULT 'Planned', + notes TEXT, + FOREIGN KEY (request_id) REFERENCES service_requests(request_id), + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +); + +-- Samples table +CREATE TABLE samples ( + sample_id INT AUTO_INCREMENT PRIMARY KEY, + request_id INT NOT NULL, + plan_id INT, + sample_code VARCHAR(50) NOT NULL, + sample_type_id INT NOT NULL, + sampling_date DATETIME, + sampling_location TEXT, + sampling_officer_id INT, + received_date DATETIME, + received_by INT, + sample_condition TEXT, + preparation_notes TEXT, + preservation_method TEXT, + status ENUM('Planned', 'Collected', 'Received', 'In Preparation', 'In Analysis', 'Analysis Complete', 'Verified', 'Reported') DEFAULT 'Planned', + FOREIGN KEY (request_id) REFERENCES service_requests(request_id), + FOREIGN KEY (plan_id) REFERENCES sampling_plans(plan_id), + FOREIGN KEY (sample_type_id) REFERENCES sample_types(sample_type_id), + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +); + +-- Analysis Results table +CREATE TABLE analysis_results ( + result_id INT AUTO_INCREMENT PRIMARY KEY, + sample_id INT NOT NULL, + parameter_id INT NOT NULL, + analyst_id INT, + analysis_date DATETIME, + result_value VARCHAR(100), + unit VARCHAR(50), + method_used VARCHAR(100), + is_within_standard BOOLEAN, + notes TEXT, + status ENUM('Planned', 'In Progress', 'Completed', 'Verified', 'Rejected') DEFAULT 'Planned', + verified_by INT, + verification_date DATETIME, + FOREIGN KEY (sample_id) REFERENCES samples(sample_id), + FOREIGN KEY (parameter_id) REFERENCES analysis_parameters(parameter_id), + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +); + +-- Reports table +CREATE TABLE reports ( + report_id INT AUTO_INCREMENT PRIMARY KEY, + request_id INT NOT NULL, + report_number VARCHAR(50) NOT NULL, + report_date DATE NOT NULL, + prepared_by INT, + verified_by INT, + approved_by INT, + status ENUM('Draft', 'Verified', 'Approved', 'Sent', 'Received') DEFAULT 'Draft', + file_path VARCHAR(255), + notes TEXT, + FOREIGN KEY (request_id) REFERENCES service_requests(request_id), + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +); + +-- Users table (Staff) +CREATE TABLE users ( + user_id INT AUTO_INCREMENT PRIMARY KEY, + username VARCHAR(50) NOT NULL UNIQUE, + password VARCHAR(255) NOT NULL, + full_name VARCHAR(100) NOT NULL, + email VARCHAR(100) UNIQUE, + role ENUM('Admin', 'Sampling Officer', 'Lab Analyst', 'Verification Officer', 'Manager') NOT NULL, + department VARCHAR(100), + is_active BOOLEAN DEFAULT TRUE, + last_login DATETIME, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +); + +-- Activity Logs table +CREATE TABLE activity_logs ( + log_id INT AUTO_INCREMENT PRIMARY KEY, + user_id INT, + action VARCHAR(255) NOT NULL, + table_name VARCHAR(100), + record_id INT, + details TEXT, + ip_address VARCHAR(45), + user_agent TEXT, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (user_id) REFERENCES users(user_id) +); + +-- Insert sample data for testing + +-- Sample Users +INSERT INTO users (username, password, full_name, email, role, department) VALUES +('admin1', '$2y$10$somehashedpassword1', 'Administrator 1', 'admin1@lab.com', 'Admin', 'Administration'), +('sampler1', '$2y$10$somehashedpassword2', 'Sampling Officer 1', 'sampler1@lab.com', 'Sampling Officer', 'Field Operations'), +('analyst1', '$2y$10$somehashedpassword3', 'Lab Analyst 1', 'analyst1@lab.com', 'Lab Analyst', 'Laboratory'), +('verifier1', '$2y$10$somehashedpassword4', 'Verification Officer 1', 'verifier1@lab.com', 'Verification Officer', 'Quality Control'), +('manager1', '$2y$10$somehashedpassword5', 'Manager 1', 'manager1@lab.com', 'Manager', 'Management'); + +-- Sample Types +INSERT INTO sample_types (type_name, description, standard_method) VALUES +('Air Limbah', 'Sampel air limbah dari industri atau fasilitas', 'SNI 6989.59:2008'), +('Air Permukaan', 'Sampel air sungai, danau, atau badan air lainnya', 'SNI 6989.57:2008'), +('Air Tanah', 'Sampel air dari sumur atau mata air', 'SNI 6989.58:2008'), +('Tanah', 'Sampel tanah untuk analisis parameter lingkungan', 'SNI 8520:2018'), +('Udara Ambien', 'Sampel udara ambient untuk analisis kualitas udara', 'SNI 7119:2017'); + +-- Analysis Parameters +INSERT INTO analysis_parameters (parameter_name, unit, method, sample_type_id, standard_value, price) VALUES +('pH', '-', 'SNI 06-6989.11-2004', 1, '6-9', 50000.00), +('TSS', 'mg/L', 'SNI 06-6989.3-2004', 1, '100', 75000.00), +('COD', 'mg/L', 'SNI 6989.73:2009', 1, '100', 125000.00), +('BOD', 'mg/L', 'SNI 6989.72:2009', 1, '30', 150000.00), +('Ammonia', 'mg/L', 'SNI 06-6989.30-2005', 1, '10', 100000.00), +('Logam Berat Pb', 'mg/L', 'SNI 6989.8:2009', 1, '0.1', 200000.00), +('Total Coliform', 'MPN/100mL', 'SNI 01-2897-1992', 2, '1000', 175000.00), +('DO', 'mg/L', 'SNI 06-6989.14-2004', 2, '4', 80000.00), +('Sulfida', 'mg/L', 'SNI 6989.70:2009', 1, '0.5', 125000.00), +('Minyak & Lemak', 'mg/L', 'SNI 6989.10:2011', 1, '10', 150000.00); + +-- Sample Customers +INSERT INTO customers (customer_name, customer_type, contact_person, phone_number, email, address, company_name) VALUES +('PT. Industri Tekstil Nusantara', 'External', 'Budi Santoso', '08123456789', 'budi@tekstilnusantara.com', 'Jl. Industri No. 123, Bandung', 'PT. Industri Tekstil Nusantara'), +('Dinas Lingkungan Hidup Kota', 'External', 'Siti Aminah', '08765432100', 'siti@dlh.kotabjb.go.id', 'Jl. Pemkot No. 45, Kota BJB', 'Dinas Lingkungan Hidup Kota BJB'), +('Departemen Produksi', 'Internal', 'Rudi Hartono', '08567891234', 'rudi@internal.lab.com', 'Gedung Utama Lt. 2, Lab Lingkungan', 'Lab Lingkungan'), +('PT. Kimia Farma', 'External', 'Diana Putri', '08123456790', 'diana@kimiafarma.co.id', 'Jl. Pahlawan No. 67, Jakarta', 'PT. Kimia Farma'), +('Departemen R&D', 'Internal', 'Hendra Wijaya', '08567891235', 'hendra@internal.lab.com', 'Gedung Riset Lt. 3, Lab Lingkungan', 'Lab Lingkungan'); + +-- Sample Service Requests +INSERT INTO service_requests (customer_id, request_type, project_name, project_location, status, quotation_number, quotation_date, approved_date, total_amount) VALUES +(1, 'Sampling and Analysis', 'Pemantauan Limbah Triwulan I 2025', 'Pabrik Tekstil Bandung', 'Approved', 'Q-2025-001', '2025-01-15', '2025-01-20', 2500000.00), +(2, 'Sampling and Analysis', 'Monitoring Kualitas Air Sungai Citarum', 'Sungai Citarum, 5 titik sampling', 'Completed', 'Q-2025-002', '2025-02-10', '2025-02-15', 3750000.00), +(3, 'Analysis Only', 'Analisis Limbah Internal Bulanan', 'IPAL Gedung Utama', 'In Progress', 'Q-2025-003', '2025-03-05', '2025-03-07', 1250000.00), +(4, 'Sampling and Analysis', 'Audit Lingkungan Semester I', 'Pabrik Farmasi Jakarta', 'Quotation Sent', 'Q-2025-004', '2025-03-20', NULL, 4500000.00), +(5, 'Analysis Only', 'Pengujian Efisiensi Filter Karbon', 'Lab R&D', 'Submitted', NULL, NULL, NULL, NULL); + +-- Sample Request Parameters +INSERT INTO request_parameters (request_id, parameter_id, quantity, price_per_unit) VALUES +(1, 1, 1, 50000.00), -- pH for Request 1 +(1, 2, 1, 75000.00), -- TSS for Request 1 +(1, 3, 1, 125000.00), -- COD for Request 1 +(1, 4, 1, 150000.00), -- BOD for Request 1 +(1, 5, 1, 100000.00), -- Ammonia for Request 1 +(2, 1, 5, 50000.00), -- pH for Request 2 (5 titik) +(2, 2, 5, 75000.00), -- TSS for Request 2 (5 titik) +(2, 7, 5, 175000.00), -- Total Coliform for Request 2 (5 titik) +(2, 8, 5, 80000.00), -- DO for Request 2 (5 titik) +(3, 1, 1, 50000.00), -- pH for Request 3 +(3, 2, 1, 75000.00), -- TSS for Request 3 +(3, 3, 1, 125000.00), -- COD for Request 3 +(3, 4, 1, 150000.00), -- BOD for Request 3 +(4, 1, 3, 50000.00), -- pH for Request 4 (3 titik) +(4, 2, 3, 75000.00), -- TSS for Request 4 (3 titik) +(4, 3, 3, 125000.00), -- COD for Request 4 (3 titik) +(4, 4, 3, 150000.00), -- BOD for Request 4 (3 titik) +(4, 6, 3, 200000.00), -- Logam Berat Pb for Request 4 (3 titik) +(4, 9, 3, 125000.00), -- Sulfida for Request 4 (3 titik) +(4, 10, 3, 150000.00);-- Minyak & Lemak for Request 4 (3 titik) + +-- Sample Sampling Plans +INSERT INTO sampling_plans (request_id, planned_date, location, coordinates, sampling_method, equipment_needed, sampling_officer_id, status) VALUES +(1, '2025-01-25', 'Outlet IPAL PT. Industri Tekstil Nusantara', '-6.914744, 107.609810', 'Grab Sampling sesuai SNI 6989.59:2008', 'Botol sampling, pH meter, termometer, cool box', 2, 'Completed'), +(2, '2025-02-20', 'Sungai Citarum - Titik 1 (Hulu)', '-6.947890, 107.632505', 'Grab Sampling sesuai SNI 6989.57:2008', 'Botol sampling, pH meter, DO meter, termometer, cool box', 2, 'Completed'), +(2, '2025-02-20', 'Sungai Citarum - Titik 2', '-6.933456, 107.621234', 'Grab Sampling sesuai SNI 6989.57:2008', 'Botol sampling, pH meter, DO meter, termometer, cool box', 2, 'Completed'), +(2, '2025-02-20', 'Sungai Citarum - Titik 3', '-6.925678, 107.612345', 'Grab Sampling sesuai SNI 6989.57:2008', 'Botol sampling, pH meter, DO meter, termometer, cool box', 2, 'Completed'), +(2, '2025-02-20', 'Sungai Citarum - Titik 4', '-6.912345, 107.603456', 'Grab Sampling sesuai SNI 6989.57:2008', 'Botol sampling, pH meter, DO meter, termometer, cool box', 2, 'Completed'), +(2, '2025-02-20', 'Sungai Citarum - Titik 5 (Hilir)', '-6.901234, 107.594567', 'Grab Sampling sesuai SNI 6989.57:2008', 'Botol sampling, pH meter, DO meter, termometer, cool box', 2, 'Completed'), +(4, '2025-04-05', 'Outlet IPAL PT. Kimia Farma', '-6.186486, 106.834091', 'Grab Sampling sesuai SNI 6989.59:2008', 'Botol sampling, pH meter, termometer, cool box', 2, 'Planned'), +(4, '2025-04-05', 'Area Produksi PT. Kimia Farma', '-6.186123, 106.833987', 'Grab Sampling sesuai SNI 6989.59:2008', 'Botol sampling, pH meter, termometer, cool box', 2, 'Planned'), +(4, '2025-04-05', 'Area Penyimpanan Bahan Baku PT. Kimia Farma', '-6.185789, 106.834567', 'Grab Sampling sesuai SNI 6989.59:2008', 'Botol sampling, pH meter, termometer, cool box', 2, 'Planned'); + +-- Sample Samples +INSERT INTO samples (request_id, plan_id, sample_code, sample_type_id, sampling_date, sampling_location, sampling_officer_id, received_date, received_by, sample_condition, preparation_notes, status) VALUES +(1, 1, 'ITN-2025-001', 1, '2025-01-25 10:15:00', 'Outlet IPAL PT. Industri Tekstil Nusantara', 2, '2025-01-25 15:30:00', 3, 'Baik, suhu 20°C', 'Sampel disaring untuk analisis TSS', 'Analysis Complete'), +(2, 2, 'SC-H-2025-001', 2, '2025-02-20 08:30:00', 'Sungai Citarum - Titik 1 (Hulu)', 2, '2025-02-20 16:00:00', 3, 'Baik, suhu 19°C', 'Sampel diawetkan dengan H₂SO₄ untuk COD', 'Analysis Complete'), +(2, 3, 'SC-2-2025-002', 2, '2025-02-20 09:45:00', 'Sungai Citarum - Titik 2', 2, '2025-02-20 16:00:00', 3, 'Baik, suhu 19°C', 'Sampel diawetkan dengan H₂SO₄ untuk COD', 'Analysis Complete'), +(2, 4, 'SC-3-2025-003', 2, '2025-02-20 11:00:00', 'Sungai Citarum - Titik 3', 2, '2025-02-20 16:00:00', 3, 'Baik, suhu 20°C', 'Sampel diawetkan dengan H₂SO₄ untuk COD', 'Analysis Complete'), +(2, 5, 'SC-4-2025-004', 2, '2025-02-20 13:15:00', 'Sungai Citarum - Titik 4', 2, '2025-02-20 16:00:00', 3, 'Baik, suhu 20°C', 'Sampel diawetkan dengan H₂SO₄ untuk COD', 'Analysis Complete'), +(2, 6, 'SC-I-2025-005', 2, '2025-02-20 14:30:00', 'Sungai Citarum - Titik 5 (Hilir)', 2, '2025-02-20 16:00:00', 3, 'Baik, suhu 21°C', 'Sampel diawetkan dengan H₂SO₄ untuk COD', 'Analysis Complete'), +(3, NULL, 'INT-2025-001', 1, NULL, 'IPAL Gedung Utama', NULL, '2025-03-10 10:00:00', 3, 'Baik, suhu 22°C', 'Sampel dikirim oleh Departemen Produksi', 'In Analysis'); + +-- Sample Analysis Results (for request 1 and 2) +INSERT INTO analysis_results (sample_id, parameter_id, analyst_id, analysis_date, result_value, unit, method_used, is_within_standard, status, verified_by, verification_date) VALUES +(1, 1, 3, '2025-01-26 09:00:00', '7.6', '-', 'SNI 06-6989.11-2004', TRUE, 'Verified', 4, '2025-01-27 10:00:00'), +(1, 2, 3, '2025-01-26 11:00:00', '45', 'mg/L', 'SNI 06-6989.3-2004', TRUE, 'Verified', 4, '2025-01-27 10:00:00'), +(1, 3, 3, '2025-01-26 13:00:00', '87', 'mg/L', 'SNI 6989.73:2009', TRUE, 'Verified', 4, '2025-01-27 10:00:00'), +(1, 4, 3, '2025-01-26 15:00:00', '28', 'mg/L', 'SNI 6989.72:2009', TRUE, 'Verified', 4, '2025-01-27 10:00:00'), +(1, 5, 3, '2025-01-26 16:00:00', '3.5', 'mg/L', 'SNI 06-6989.30-2005', TRUE, 'Verified', 4, '2025-01-27 10:00:00'), +(2, 1, 3, '2025-02-21 09:00:00', '7.2', '-', 'SNI 06-6989.11-2004', TRUE, 'Verified', 4, '2025-02-22 11:00:00'), +(2, 2, 3, '2025-02-21 11:00:00', '12', 'mg/L', 'SNI 06-6989.3-2004', TRUE, 'Verified', 4, '2025-02-22 11:00:00'), +(2, 7, 3, '2025-02-21 13:00:00', '210', 'MPN/100mL', 'SNI 01-2897-1992', TRUE, 'Verified', 4, '2025-02-22 11:00:00'), +(2, 8, 3, '2025-02-21 15:00:00', '5.6', 'mg/L', 'SNI 06-6989.14-2004', TRUE, 'Verified', 4, '2025-02-22 11:00:00'), +(3, 1, 3, '2025-02-21 09:30:00', '7.1', '-', 'SNI 06-6989.11-2004', TRUE, 'Verified', 4, '2025-02-22 11:00:00'), +(3, 2, 3, '2025-02-21 11:30:00', '18', 'mg/L', 'SNI 06-6989.3-2004', TRUE, 'Verified', 4, '2025-02-22 11:00:00'), +(3, 7, 3, '2025-02-21 13:30:00', '320', 'MPN/100mL', 'SNI 01-2897-1992', TRUE, 'Verified', 4, '2025-02-22 11:00:00'), +(3, 8, 3, '2025-02-21 15:30:00', '5.2', 'mg/L', 'SNI 06-6989.14-2004', TRUE, 'Verified', 4, '2025-02-22 11:00:00'); + +-- Sample Reports +INSERT INTO reports (request_id, report_number, report_date, prepared_by, verified_by, approved_by, status, file_path) VALUES +(1, 'LHU-2025-001', '2025-01-29', 3, 4, 5, 'Sent', '/reports/2025/LHU-2025-001.pdf'), +(2, 'LHU-2025-002', '2025-02-25', 3, 4, 5, 'Sent', '/reports/2025/LHU-2025-002.pdf'); + +-- Sample Activity Logs +INSERT INTO activity_logs (user_id, action, table_name, record_id, details, ip_address) VALUES +(1, 'CREATE', 'service_requests', 1, 'Created new service request for PT. Industri Tekstil Nusantara', '192.168.1.100'), +(1, 'UPDATE', 'service_requests', 1, 'Updated status to Approved', '192.168.1.100'), +(2, 'CREATE', 'sampling_plans', 1, 'Created sampling plan for request #1', '192.168.1.101'), +(2, 'CREATE', 'samples', 1, 'Collected sample ITN-2025-001', '192.168.1.101'), +(3, 'UPDATE', 'samples', 1, 'Sample received at laboratory', '192.168.1.102'), +(3, 'CREATE', 'analysis_results', 1, 'Recorded pH analysis result', '192.168.1.102'), +(4, 'UPDATE', 'analysis_results', 1, 'Verified analysis result', '192.168.1.103'), +(5, 'CREATE', 'reports', 1, 'Created report LHU-2025-001', '192.168.1.104'); \ No newline at end of file diff --git a/lab_env_db_class_diagram.md b/lab_env_db_class_diagram.md new file mode 100644 index 0000000..a2ba1ea --- /dev/null +++ b/lab_env_db_class_diagram.md @@ -0,0 +1,275 @@ +# Diagram Kelas Sistem Aplikasi Laboratorium Lingkungan + +Berikut adalah diagram kelas yang memvisualisasikan struktur database dan menunjukkan hubungannya dengan alur proses laboratorium lingkungan. + +```mermaid +classDiagram + class Customer { + +customer_id: int + +customer_name: varchar + +customer_type: enum + +contact_person: varchar + +phone_number: varchar + +email: varchar + +address: text + +company_name: varchar + +createRequest() + +viewRequestStatus() + +downloadReports() + } + + class ServiceRequest { + +request_id: int + +customer_id: int + +request_date: timestamp + +request_type: enum + +project_name: varchar + +project_location: text + +status: enum + +admin_id: int + +quotation_number: varchar + +quotation_date: date + +approved_date: date + +payment_proof: varchar + +payment_date: date + +total_amount: decimal + +notes: text + +createQuotation() + +updateStatus() + +assignToSampling() + +recordPayment() + } + + class RequestParameter { + +request_parameter_id: int + +request_id: int + +parameter_id: int + +quantity: int + +price_per_unit: decimal + +calculateCost() + } + + class AnalysisParameter { + +parameter_id: int + +parameter_name: varchar + +unit: varchar + +method: varchar + +sample_type_id: int + +standard_value: varchar + +price: decimal + +checkCompliance() + } + + class SampleType { + +sample_type_id: int + +type_name: varchar + +description: text + +standard_method: text + } + + class SamplingPlan { + +plan_id: int + +request_id: int + +planned_date: date + +location: text + +coordinates: varchar + +sampling_method: text + +equipment_needed: text + +sampling_officer_id: int + +status: enum + +notes: text + +scheduleSampling() + +assignSamplingOfficer() + +listEquipment() + } + + class Sample { + +sample_id: int + +request_id: int + +plan_id: int + +sample_code: varchar + +sample_type_id: int + +sampling_date: datetime + +sampling_location: text + +sampling_officer_id: int + +received_date: datetime + +received_by: int + +sample_condition: text + +preparation_notes: text + +preservation_method: text + +status: enum + +collectSample() + +receiveSample() + +prepareSample() + +trackStatus() + } + + class AnalysisResult { + +result_id: int + +sample_id: int + +parameter_id: int + +analyst_id: int + +analysis_date: datetime + +result_value: varchar + +unit: varchar + +method_used: varchar + +is_within_standard: boolean + +notes: text + +status: enum + +verified_by: int + +verification_date: datetime + +recordResult() + +verifyResult() + +compareToStandard() + } + + class Report { + +report_id: int + +request_id: int + +report_number: varchar + +report_date: date + +prepared_by: int + +verified_by: int + +approved_by: int + +status: enum + +file_path: varchar + +notes: text + +generateReport() + +approveReport() + +sendToCustomer() + } + + class User { + +user_id: int + +username: varchar + +password: varchar + +full_name: varchar + +email: varchar + +role: enum + +department: varchar + +is_active: boolean + +last_login: datetime + +login() + +updateProfile() + +resetPassword() + +assignTasks() + } + + class ActivityLog { + +log_id: int + +user_id: int + +action: varchar + +table_name: varchar + +record_id: int + +details: text + +ip_address: varchar + +created_at: timestamp + +recordActivity() + +viewAuditTrail() + } + + Customer "1" --> "*" ServiceRequest : mengajukan + ServiceRequest "1" --> "*" RequestParameter : memiliki + ServiceRequest "1" --> "*" SamplingPlan : menyertakan + ServiceRequest "1" --> "*" Sample : menghasilkan + ServiceRequest "1" --> "*" Report : melaporkan + + AnalysisParameter "1" --> "*" RequestParameter : diminta dalam + AnalysisParameter "1" --> "*" AnalysisResult : diuji dalam + + SampleType "1" --> "*" AnalysisParameter : mendefinisikan + SampleType "1" --> "*" Sample : mengkategorikan + + SamplingPlan "1" --> "*" Sample : menghasilkan + + Sample "1" --> "*" AnalysisResult : dianalisis menjadi + + User "1" --> "*" ActivityLog : merekam aktivitas + + %% Tambahan relasi untuk memetakan peran user + User "1" --> "*" ServiceRequest : mengelola sebagai admin + User "1" --> "*" SamplingPlan : bertugas sebagai sampling officer + User "1" --> "*" Sample : bertugas sebagai sampling officer/penerima + User "1" --> "*" AnalysisResult : bertugas sebagai analis/verifikator + User "1" --> "*" Report : menyiapkan/memverifikasi/menyetujui +``` + +## Penjelasan Diagram Kelas + +Diagram kelas di atas tidak hanya menampilkan struktur database, tetapi juga fungsionalitas utama dari setiap entitas dalam sistem aplikasi laboratorium lingkungan. + +### Entitas Utama dan Fungsinya + +1. **Customer** + - Mewakili pelanggan internal dan eksternal + - Fungsi: membuat permintaan, melihat status, mengunduh laporan + +2. **ServiceRequest** + - Mewakili permintaan layanan dari pelanggan + - Fungsi: membuat quotation, memperbarui status, merekam pembayaran + +3. **SamplingPlan** + - Mewakili rencana pengambilan sampel + - Fungsi: menjadwalkan sampling, menugaskan petugas, mencatat peralatan + +4. **Sample** + - Mewakili sampel yang diambil/diterima + - Fungsi: mencatat pengambilan, penerimaan, preparasi sampel + +5. **AnalysisResult** + - Mewakili hasil analisis laboratorium + - Fungsi: merekam hasil, memverifikasi, membandingkan dengan standar + +6. **Report** + - Mewakili laporan hasil uji + - Fungsi: membuat laporan, menyetujui, mengirim ke pelanggan + +7. **User** + - Mewakili pengguna sistem (admin, petugas sampling, analis, dll) + - Fungsi: login, mengelola profil, menugaskan aktivitas + +8. **ActivityLog** + - Mewakili catatan aktivitas sistem + - Fungsi: merekam aktivitas, menampilkan audit trail + +### Alur Proses dalam Sistem + +Diagram kelas ini memvisualisasikan alur proses berikut: + +1. **Permintaan Layanan** + - Customer mengajukan ServiceRequest + - ServiceRequest memiliki RequestParameter yang merinci parameter yang akan dianalisis + +2. **Proses Sampling (jika diperlukan)** + - ServiceRequest memicu pembuatan SamplingPlan + - SamplingPlan ditugaskan kepada User (Sampling Officer) + - SamplingPlan menghasilkan Sample + +3. **Penerimaan dan Preparasi Sampel** + - Sample diterima dan dipreparasi oleh User (Lab Staff) + - Sample dikategorikan menurut SampleType + +4. **Analisis Laboratorium** + - Sample menghasilkan AnalysisResult + - AnalysisResult dikaitkan dengan AnalysisParameter + - AnalysisResult dicatat dan diverifikasi oleh User (Analyst, Verifier) + +5. **Pelaporan Hasil** + - ServiceRequest menghasilkan Report + - Report disiapkan, diverifikasi, dan disetujui oleh User + - Report dikirimkan kepada Customer + +6. **Audit dan Pelacakan** + - Semua aktivitas User direkam dalam ActivityLog + - ActivityLog menyediakan audit trail untuk akreditasi dan kepatuhan + +## Cara Menggunakan Diagram + +Diagram kelas Mermaid ini dapat membantu: + +1. **Pengembang Sistem**: Untuk memahami struktur database dan hubungan antar entitas +2. **Analis Bisnis**: Untuk memahami alur proses laboratorium dan bagaimana data mengalir antar komponen +3. **Pengelola Laboratorium**: Untuk memvisualisasikan bagaimana peran staf terkait dengan proses bisnis +4. **Auditor**: Untuk memahami bagaimana sistem melacak aktivitas dan memastikan kepatuhan + +Seperti diagram Mermaid lainnya, diagram ini dapat dilihat menggunakan Mermaid Live Editor atau di platform yang mendukung rendering Mermaid seperti GitHub. \ No newline at end of file diff --git a/lab_env_quotation_flow_diagram.md b/lab_env_quotation_flow_diagram.md new file mode 100644 index 0000000..63c025d --- /dev/null +++ b/lab_env_quotation_flow_diagram.md @@ -0,0 +1,237 @@ +# Diagram Alur Penawaran, Quotation, dan Pengisian Data Teknis + +Berikut adalah diagram yang menggambarkan alur proses detail untuk penawaran, quotation, dan pengisian data teknis oleh Admin laboratorium lingkungan. + +## 1. Diagram Alur Keseluruhan + +```mermaid +flowchart TD + subgraph "Tahap 1: Permintaan & Penawaran" + A1[Permintaan Pelanggan] -->|Diterima oleh| A2[Admin Lab] + A2 -->|Mencatat Permintaan| A3[Entry Permintaan di Sistem] + A3 -->|Analisis Kebutuhan| A4[Identifikasi Parameter] + A4 -->|Kalkulasi Biaya| A5[Penyiapan Penawaran] + A5 -->|Generate Dokumen| A6[Penawaran] + end + + subgraph "Tahap 2: Quotation & Persetujuan" + B1[Pembuatan Quotation] -->|Generate Dokumen Resmi| B2[Quotation] + B2 -->|Pengiriman ke Pelanggan| B3[Menunggu Persetujuan] + B3 -->|Diterima| B4[Approval dari Pelanggan] + B4 -->|Pembayaran DP| B5[Verifikasi Pembayaran] + B5 -->|Konfirmasi| B6[Status Order: Approved] + end + + subgraph "Tahap 3: Data Teknis & Registrasi" + C1[Pengisian Data Teknis] -->|Detail Sampling| C2[Protokol Sampling] + C1 -->|Jadwal & Tim| C3[Penjadwalan Sampling] + C1 -->|Peralatan| C4[Requisition Peralatan] + C2 --> C5[Registrasi Order] + C3 --> C5 + C4 --> C5 + C5 -->|Generate| C6[Surat Perintah Kerja] + C6 -->|Pelaksanaan| C7[Sampling & Analisis] + end + + A6 --> B1 + B6 --> C1 + + classDef requestStage fill:#ffcccc,stroke:#ff6666 + classDef quotationStage fill:#ccffcc,stroke:#66ff66 + classDef technicalStage fill:#ccccff,stroke:#6666ff + + class A1,A2,A3,A4,A5,A6 requestStage + class B1,B2,B3,B4,B5,B6 quotationStage + class C1,C2,C3,C4,C5,C6,C7 technicalStage +``` + +## 2. Diagram Detail: Proses Pembuatan Quotation + +```mermaid +sequenceDiagram + actor Customer as Pelanggan + actor Admin as Admin Lab + participant QuotSystem as Sistem Quotation + participant PriceDB as Database Harga + participant ApprovalFlow as Alur Persetujuan + + Customer->>Admin: Permintaan Layanan + Admin->>QuotSystem: Login ke Modul Quotation + + QuotSystem->>Admin: Tampilkan Form Quotation Baru + + Admin->>QuotSystem: Input Data Pelanggan + Admin->>QuotSystem: Pilih Jenis Permintaan
(Sampling & Analisis/Analisis Saja) + + Admin->>QuotSystem: Tambahkan Parameter Analisis + QuotSystem->>PriceDB: Query Harga Parameter + PriceDB-->>QuotSystem: Return Data Harga + + Admin->>QuotSystem: Input Jumlah Titik/Sampel + Admin->>QuotSystem: Tambahkan Biaya Tambahan
(Sampling, Transport, dll) + + QuotSystem->>QuotSystem: Kalkulasi Total + QuotSystem-->>Admin: Tampilkan Preview Quotation + + Admin->>QuotSystem: Terapkan Diskon (jika ada) + Admin->>QuotSystem: Tambahkan Syarat & Ketentuan + + opt Quotation Kompleks/Nilai Besar + Admin->>ApprovalFlow: Submit untuk Persetujuan + ApprovalFlow->>ApprovalFlow: Review oleh Supervisor + ApprovalFlow-->>Admin: Persetujuan Diberikan + end + + Admin->>QuotSystem: Finalisasi Quotation + QuotSystem-->>Admin: Generate Dokumen PDF + + Admin->>Customer: Kirim Quotation via Email + + Customer->>Admin: Konfirmasi Persetujuan + Admin->>QuotSystem: Catat Persetujuan + + Customer->>Admin: Kirim Bukti Pembayaran DP + Admin->>QuotSystem: Upload Bukti Pembayaran + + QuotSystem->>QuotSystem: Update Status Order + QuotSystem-->>Admin: Konfirmasi Order Disetujui +``` + +## 3. Diagram Detail: Pengisian Data Teknis + +```mermaid +flowchart LR + A[Admin Lab] -->|Akses| B[Modul Data Teknis] + + subgraph "Pengisian Data Teknis" + B --> C1[Data Lokasi Sampling] + B --> C2[Metode Sampling] + B --> C3[Metode Preservasi] + B --> C4[Kebutuhan Peralatan] + B --> C5[Instruksi Khusus] + B --> C6[Tim & Jadwal] + + C1 --> D1[Koordinat GPS] + C1 --> D2[Deskripsi Lokasi] + C1 --> D3[Akses Lokasi] + + C2 --> E1[Protokol Sampling] + C2 --> E2[Jenis Sampling] + C2 --> E3[Volume Sampel] + + C3 --> F1[Preservasi Kimia] + C3 --> F2[Preservasi Fisik] + C3 --> F3[Waktu Holding] + + C4 --> G1[Alat Sampling] + C4 --> G2[Alat Uji Lapangan] + C4 --> G3[Media Preservasi] + + C5 --> H1[Persyaratan Pelanggan] + C5 --> H2[Kontrol Kualitas] + C5 --> H3[Dokumentasi] + + C6 --> I1[Petugas Sampling] + C6 --> I2[Tanggal & Waktu] + C6 --> I3[Durasi Pengerjaan] + end + + subgraph "Finalisasi" + J[Sistem Lab] <--> C1 & C2 & C3 & C4 & C5 & C6 + J --> K[Registrasi Order] + K --> L[Work Order] + L --> M[Pelaksanaan] + end + + classDef adminClass fill:#ffdddd,stroke:#ff9999 + classDef moduleClass fill:#ddffdd,stroke:#99ff99 + classDef dataClass fill:#ddddff,stroke:#9999ff + classDef detailClass fill:#ffffdd,stroke:#ffff99 + classDef finalClass fill:#ddffff,stroke:#99ffff + + class A adminClass + class B moduleClass + class C1,C2,C3,C4,C5,C6 dataClass + class D1,D2,D3,E1,E2,E3,F1,F2,F3,G1,G2,G3,H1,H2,H3,I1,I2,I3 detailClass + class J,K,L,M finalClass +``` + +## 4. Status Permintaan Layanan + +```mermaid +stateDiagram-v2 + [*] --> Draft: Admin membuat permintaan baru + + Draft --> Submitted: Admin submit permintaan ke sistem + + Submitted --> Quote_Preparation: Admin menyiapkan penawaran + Quote_Preparation --> Quotation_Sent: Penawaran dikirim ke pelanggan + + Quotation_Sent --> Approved: Pelanggan menyetujui + Quotation_Sent --> Rejected: Pelanggan menolak + Quotation_Sent --> Negotiation: Pelanggan minta revisi + + Negotiation --> Quote_Preparation: Perlu revisi penawaran + + Approved --> Technical_Details: Admin lengkapi data teknis + Technical_Details --> Registered: Order diregistrasi + + Registered --> In_Progress: Sampling/analisis dimulai + In_Progress --> Completed: Analisis selesai + Completed --> Verified: Hasil diverifikasi + Verified --> Reported: Laporan dibuat + + Rejected --> [*] + Reported --> [*] + + state Quotation_Process { + [*] --> Quote_Draft + Quote_Draft --> Quote_Review + Quote_Review --> Quote_Approval + Quote_Approval --> Quote_Final + Quote_Final --> [*] + } +``` + +## Penjelasan Diagram + +### 1. Diagram Alur Keseluruhan +Diagram ini menampilkan alur proses dari awal permintaan pelanggan hingga pelaksanaan sampling dan analisis, dibagi menjadi tiga tahap utama: +- **Tahap 1**: Proses menerima permintaan dan menyiapkan penawaran +- **Tahap 2**: Proses membuat quotation, mendapatkan persetujuan, dan verifikasi pembayaran +- **Tahap 3**: Proses melengkapi data teknis dan registrasi order + +### 2. Diagram Detail: Proses Pembuatan Quotation +Diagram sequence ini menunjukkan interaksi detail antara Pelanggan, Admin Lab, dan berbagai komponen sistem saat menyiapkan quotation, termasuk: +- Proses query harga parameter dari database +- Proses kalkulasi biaya +- Proses persetujuan internal (untuk quotation nilai besar) +- Proses pengiriman, persetujuan, dan verifikasi pembayaran + +### 3. Diagram Detail: Pengisian Data Teknis +Diagram ini memperlihatkan komponen-komponen data teknis yang perlu dilengkapi oleh Admin Lab, termasuk: +- Data lokasi sampling dengan detail koordinat dan akses +- Metode sampling dan preservasi +- Kebutuhan peralatan +- Instruksi khusus dari pelanggan +- Informasi tim dan jadwal + +### 4. Status Permintaan Layanan +Diagram status ini menunjukkan berbagai status yang mungkin dialami oleh permintaan layanan dari awal hingga akhir, termasuk: +- Proses persetujuan quotation +- Proses negosiasi jika diperlukan +- Alur kerja setelah order disetujui + +## Keuntungan Diagram Ini untuk Pengembangan Sistem + +1. **Pemahaman Alur Kerja yang Jelas**: Memberikan pemahaman yang jelas tentang alur kerja proses penawaran, quotation, dan pengisian data teknis. + +2. **Identifikasi Interaksi Sistem**: Memetakan interaksi antara pengguna (Admin dan Pelanggan) dengan berbagai komponen sistem. + +3. **Panduan Pengembangan UI/UX**: Dapat digunakan sebagai panduan untuk merancang antarmuka pengguna sesuai dengan alur kerja. + +4. **Dokumentasi Proses Bisnis**: Berfungsi sebagai dokumentasi proses bisnis yang dapat digunakan untuk pelatihan staf baru. + +5. **Identifikasi Kebutuhan Validasi Data**: Menunjukkan titik-titik di mana validasi data diperlukan dalam sistem. + +Diagram-diagram ini dapat digunakan sebagai referensi dalam pengembangan modul penawaran, quotation, dan pengisian data teknis dalam sistem aplikasi laboratorium lingkungan. \ No newline at end of file diff --git a/lab_env_workflow_flowchart.md b/lab_env_workflow_flowchart.md new file mode 100644 index 0000000..4c9d51c --- /dev/null +++ b/lab_env_workflow_flowchart.md @@ -0,0 +1,117 @@ +# Alur Pelayanan Laboratorium Lingkungan (Mermaid Flowchart) + +Berikut adalah representasi alur pelayanan laboratorium lingkungan dalam format diagram Mermaid. + +```mermaid +flowchart TD + A[Customer\nInternal & Eksternal] -->|Permintaan sampling\ndan analisis| B[Admin Lab Ling] + + subgraph Proses Admin + B -->|Menyiapkan| B1[Surat Penawaran] + B -->|Menyiapkan| B2[Quotation] + B -->|Melengkapi| B3[Data Teknis Order Pelanggan] + B -->|Mencatat| B4[Bukti Pembayaran DP] + B -->|Melakukan| B5[Registrasi] + end + + B -->|Perlu Sampling| C[Petugas Sampling] + B -.->|Hanya Analisis| D[Bagian Penerimaan\nContoh Uji] + + subgraph Proses Sampling + C -->|Menyiapkan| C1[Rencana Sampling] + C -->|Menyiapkan| C2[Peralatan Sampling] + C -->|Melakukan| C3[Pengambilan Sampel] + end + + C -->|Sampel Uji| D[Bagian Penerimaan\nContoh Uji] + + subgraph Proses Penerimaan Sampel + D -->|Menerima| D1[Sampel] + D -->|Melakukan| D2[Preparasi] + end + + D -->|Sampel Siap Uji| E[Bagian Analisis\nLaboratorium] + + subgraph Proses Analisis + E -->|Melakukan| E1[Analisa sampel uji] + E -->|Mencatat| E2[Hasil Analisis] + end + + E -->|Hasil Analisis| F[Bagian Verifikasi\nHasil Uji] + + subgraph Proses Verifikasi + F -->|Verifikasi| F1[Hasil Uji] + F -->|Menyiapkan| F2[Laporan Hasil Uji] + end + + F -->|Hasil Uji| B + B -->|Laporan Hasil Uji| A + + classDef customer fill:#f9f,stroke:#333,stroke-width:2px + classDef admin fill:#bbf,stroke:#333,stroke-width:2px + classDef sampling fill:#dfd,stroke:#333,stroke-width:2px + classDef receiving fill:#ffd,stroke:#333,stroke-width:2px + classDef analysis fill:#dff,stroke:#333,stroke-width:2px + classDef verification fill:#fdf,stroke:#333,stroke-width:2px + + class A customer + class B,B1,B2,B3,B4,B5 admin + class C,C1,C2,C3 sampling + class D,D1,D2 receiving + class E,E1,E2 analysis + class F,F1,F2 verification +``` + +## Penjelasan Alur Pelayanan + +1. **Customer (Internal dan Eksternal)** + - Mengajukan permintaan sampling dan analisis sampel + - Menerima laporan hasil uji dari Admin Lab + +2. **Admin Lab Ling** + - Menerima permintaan dari Customer + - Menyiapkan Surat Penawaran dan Quotation + - Melengkapi data teknis tentang order pelanggan + - Mencatat bukti pembayaran DP + - Melakukan registrasi permintaan + - Mengarahkan permintaan ke proses sampling (jika perlu) atau langsung ke penerimaan sampel + - Mengirimkan hasil uji ke Customer + +3. **Petugas Sampling** + - Menyiapkan rencana sampling (SDM, konfirmasi jadwal, dll) + - Menyiapkan peralatan sampling yang dibutuhkan + - Melakukan pengambilan sampel di lokasi + - Mengirim sampel ke bagian penerimaan contoh uji + +4. **Bagian Penerimaan Contoh Uji** + - Menerima sampel dari Petugas Sampling atau langsung dari Customer (untuk permintaan analisis saja) + - Melakukan preparasi sampel + - Mengirim sampel siap uji ke bagian analisis laboratorium + +5. **Bagian Analisis Laboratorium** + - Melakukan analisa sampel uji di laboratorium sesuai jenis sampel + - Mencatat hasil analisis + - Mengirim hasil analisis ke bagian verifikasi + +6. **Bagian Verifikasi Hasil Uji** + - Melakukan verifikasi hasil uji + - Menyiapkan laporan hasil uji + - Mengirim hasil uji terverifikasi ke Admin Lab + +## Cara Menggunakan Diagram Mermaid + +Diagram Mermaid ini dapat divisualisasikan dengan beberapa cara: + +1. **GitHub**: GitHub secara native mendukung rendering diagram Mermaid dalam file Markdown. + +2. **Mermaid Live Editor**: Kunjungi [Mermaid Live Editor](https://mermaid.live/) dan paste kode Mermaid di atas untuk melihat dan mengedit diagram secara interaktif. + +3. **Plugin VS Code**: Gunakan plugin Mermaid untuk Visual Studio Code untuk melihat diagram secara langsung saat mengedit. + +4. **Website Dengan Mermaid.js**: Tambahkan script Mermaid.js ke website Anda: + ```html + + + ``` + +5. **Export ke Image**: Gunakan Mermaid Live Editor untuk mengekspor diagram ke format PNG, SVG, atau PDF. \ No newline at end of file diff --git a/light_measurement_report_template.html b/light_measurement_report_template.html new file mode 100644 index 0000000..eb37d98 --- /dev/null +++ b/light_measurement_report_template.html @@ -0,0 +1,635 @@ + + + + + + Laporan Hasil Pengukuran Intensitas Cahaya + + + +
+ +
+ +
+

No. Laporan: LHU/CAH/2024/001

+

Tanggal Terbit: 25 Januari 2024

+

Halaman: 1 dari 4

+
+
+ + +
+

Laporan Hasil Pengukuran Intensitas Cahaya

+

Periode Pengukuran: Triwulan I 2024

+
+ + +
+
+

Informasi Client

+
+
Nama Client:
+
PT. Industri Tekstil Nusantara
+
+
+
Alamat:
+
Jl. Industri No. 123, Bandung, Jawa Barat 40123
+
+
+
Kontak Person:
+
Budi Santoso
+
+
+
Telepon:
+
08123456789
+
+
+ +
+

Informasi Sampling

+
+
Tanggal Sampling:
+
20 Januari 2024
+
+
+
Waktu Sampling:
+
09:00 - 14:00 WIB
+
+
+
Petugas Sampling:
+
Budi Santoso (EMP003)
+
+
+
Metode Sampling:
+
MS-CAHAYA-01 (SNI 16-7062-2004)
+
+
+
+ + +
+

Ringkasan Hasil

+

Berdasarkan hasil pengukuran intensitas cahaya yang dilakukan pada 5 lokasi di PT. Industri Tekstil Nusantara pada tanggal 20 Januari 2024, diperoleh hasil bahwa seluruh titik pengukuran (100%) memenuhi baku mutu yang dipersyaratkan sesuai dengan Permenaker No.5 Tahun 2018 dan PMK RI No.2 Tahun 2023.

+
+ + +
+

1. Hasil Pengukuran Intensitas Cahaya

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NoLokasiTitik PengukuranHasil (Lux)Baku Mutu (Lux)KeteranganStatus
1Area Kerja ProduksiTitik 1 (Depan)325.50200Permenaker No.5/2018 (Pekerjaan Sedang)Memenuhi
2Area Kerja ProduksiTitik 2 (Tengah)310.20200Permenaker No.5/2018 (Pekerjaan Sedang)Memenuhi
3Area Kerja ProduksiTitik 3 (Belakang)290.80200Permenaker No.5/2018 (Pekerjaan Sedang)Memenuhi
4Area IPALTitik 1 (Pintu Masuk)180.40100Permenaker No.5/2018 (Pekerjaan Kasar)Memenuhi
5Area IPALTitik 2 (Area Kontrol)165.30100Permenaker No.5/2018 (Pekerjaan Kasar)Memenuhi
6Ruang AdministrasiMeja Kerja Utama350.20300PMK RI No.2/2023 (Ruang Kerja Perkantoran)Memenuhi
7Ruang Desain ProdukMeja Kerja Utama520.40500PMK RI No.2/2023 (Ruang Komputer)Memenuhi
8Laboratorium QCArea Inspeksi Produk540.80500PMK RI No.2/2023 (Ruang Laboratorium)Memenuhi
+
+ + +
+

2. Hasil Pengukuran Luminansi

+ + + + + + + + + + + + + + + + + + + + + + + +
NoLokasiTitik PengukuranHasil (cd/m²)Baku Mutu (cd/m²)KeteranganStatus
1Ruang Desain ProdukLayar Monitor 1120.505000Permenaker No.5/2018 (Luminansi Maksimum)Memenuhi
+
+ + +
+

3. Visualisasi Data

+
+
+

Perbandingan Intensitas Cahaya Terhadap Baku Mutu

+
+ [Grafik Intensitas Cahaya - Bar Chart] +
+
+
+

Distribusi Intensitas Cahaya Per Area

+
+ [Grafik Distribusi - Pie Chart] +
+
+
+
+ + +
+

4. Informasi Peralatan Pengukuran

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Nama PeralatanKode AlatMerk/ModelNo. SeriTanggal KalibrasiKalibrasi Berikutnya
Lux Meter DigitalLUX001Testo 540TS540123415 November 202313 Mei 2024
Lux Meter DigitalLUX002Konica Minolta T-10AKM10A567820 Agustus 202316 Februari 2024
Luminance MeterLUM003Konica Minolta LS-150KM150123410 Agustus 20236 Februari 2024
+
+ + +
+

5. Kondisi Pengukuran

+ + + + + + + + + + + + + + + + + + + + + + + +
Kondisi CuacaCerah
Suhu Lingkungan28.5°C
Kelembaban Relatif65%
Sumber CahayaLampu fluorescent (area produksi, administrasi), Lampu LED (area IPAL), Kombinasi cahaya alami dan buatan (area kantor)
Kondisi OperasionalPengukuran dilakukan saat aktivitas produksi dan operasional normal
+
+ + +
+

Referensi Baku Mutu

+
+ 1. PMK RI No.2 Tahun 2023 tentang Standar Baku Mutu Kesehatan Lingkungan dan Persyaratan Kesehatan +
+
+ 2. Permenaker No.5 Tahun 2018 tentang Keselamatan dan Kesehatan Kerja Lingkungan Kerja +
+
+ + +
+

Catatan:

+
    +
  1. Hasil pengukuran hanya berlaku untuk lokasi dan waktu saat pengukuran dilakukan.
  2. +
  3. Laporan hasil pengukuran tidak boleh digandakan kecuali secara lengkap dan dengan izin tertulis dari laboratorium.
  4. +
  5. Pengukuran dilakukan sesuai dengan metode standar SNI 16-7062-2004 tentang Pengukuran Intensitas Cahaya di Tempat Kerja.
  6. +
  7. Ketidakpastian pengukuran intensitas cahaya: ± 3% dari nilai hasil pengukuran.
  8. +
+
+ + + +
+ + \ No newline at end of file diff --git a/masterdata.txt b/masterdata.txt new file mode 100644 index 0000000..35c8742 --- /dev/null +++ b/masterdata.txt @@ -0,0 +1,522 @@ +CREATE TABLE master_parameters ( + parameter_id INT PRIMARY KEY AUTO_INCREMENT, + parameter_code VARCHAR(20) NOT NULL, + parameter_name VARCHAR(100) NOT NULL, + parameter_group VARCHAR(50), -- misalnya: fisika, kimia, mikrobiologi, logam berat + standard_method VARCHAR(100), -- metode analisis sesuai SNI atau standard lain + unit VARCHAR(20), -- satuan parameter (mg/L, cfu/100mL, dsb) + price DECIMAL(12, 2), -- harga analisis per parameter + instrumentation VARCHAR(100), -- peralatan analisis yang diperlukan + mdl DECIMAL(12, 6), -- Method Detection Limit + container_type VARCHAR(50), -- jenis wadah (HDPE, kaca, dsb) + preservation VARCHAR(200), -- metode preservasi + holding_time VARCHAR(50), -- waktu simpan maksimum + remarks TEXT, + is_active BOOLEAN DEFAULT TRUE, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +); + +CREATE TABLE master_equipment ( + equipment_id INT PRIMARY KEY AUTO_INCREMENT, + equipment_code VARCHAR(20) NOT NULL, + equipment_name VARCHAR(100) NOT NULL, + equipment_type VARCHAR(50) NOT NULL, -- sampling, pengukuran lapangan, preservasi, dll + specifications TEXT, + brand VARCHAR(100), + model VARCHAR(100), + serial_number VARCHAR(100), + purchase_date DATE, + calibration_interval INT, -- interval kalibrasi dalam hari + last_calibration_date DATE, + next_calibration_date DATE, + status VARCHAR(20), -- available, in use, maintenance, retired + location VARCHAR(100), -- lokasi penyimpanan + remarks TEXT, + is_active BOOLEAN DEFAULT TRUE, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +); + +CREATE TABLE master_personnel ( + personnel_id INT PRIMARY KEY AUTO_INCREMENT, + employee_code VARCHAR(20) NOT NULL, + name VARCHAR(100) NOT NULL, + position VARCHAR(50), + department VARCHAR(50), + specialization VARCHAR(100), -- bidang keahlian/spesialisasi + certifications TEXT, -- sertifikasi yang dimiliki + contact_number VARCHAR(20), + email VARCHAR(100), + join_date DATE, + qualification TEXT, -- kualifikasi/pendidikan + status VARCHAR(20), -- active, inactive + remarks TEXT, + is_active BOOLEAN DEFAULT TRUE, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +); + +CREATE TABLE master_clients ( + client_id INT PRIMARY KEY AUTO_INCREMENT, + client_code VARCHAR(20) NOT NULL, + client_name VARCHAR(200) NOT NULL, + client_type VARCHAR(50), -- industry, government, private, etc + industry_sector VARCHAR(100), + address TEXT, + city VARCHAR(100), + province VARCHAR(100), + postal_code VARCHAR(20), + main_contact_person VARCHAR(100), + contact_position VARCHAR(100), + contact_phone VARCHAR(20), + contact_email VARCHAR(100), + tax_id VARCHAR(50), -- NPWP + payment_terms VARCHAR(50), + discount_rate DECIMAL(5, 2), + credit_limit DECIMAL(15, 2), + status VARCHAR(20), -- active, inactive + remarks TEXT, + is_active BOOLEAN DEFAULT TRUE, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +); + +CREATE TABLE master_sampling_locations ( + location_id INT PRIMARY KEY AUTO_INCREMENT, + location_code VARCHAR(20) NOT NULL, + location_name VARCHAR(200) NOT NULL, + client_id INT, + location_type VARCHAR(50), -- outlet, inlet, sungai, danau, sumur, dsb + address TEXT, + coordinates POINT, -- koordinat GPS (latitude, longitude) + elevation DECIMAL(10, 2), -- elevasi dalam meter + description TEXT, + access_information TEXT, + sampling_point_details TEXT, + remarks TEXT, + is_active BOOLEAN DEFAULT TRUE, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + FOREIGN KEY (client_id) REFERENCES master_clients(client_id) +); + +CREATE TABLE master_sampling_methods ( + method_id INT PRIMARY KEY AUTO_INCREMENT, + method_code VARCHAR(20) NOT NULL, + method_name VARCHAR(100) NOT NULL, + standard_reference VARCHAR(100), -- referensi standar (SNI, APHA, EPA, dsb) + applicable_matrix VARCHAR(50), -- air, tanah, udara, dsb + method_description TEXT, + equipment_needed TEXT, + procedure_summary TEXT, + qc_requirements TEXT, -- persyaratan quality control + limitations TEXT, + remarks TEXT, + is_active BOOLEAN DEFAULT TRUE, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +); + +CREATE TABLE master_preservation_methods ( + preservation_id INT PRIMARY KEY AUTO_INCREMENT, + preservation_code VARCHAR(20) NOT NULL, + preservation_name VARCHAR(100) NOT NULL, + chemical_used VARCHAR(100), + applicable_parameters TEXT, -- parameter yang menggunakan metode preservasi ini + procedure TEXT, + storage_condition VARCHAR(100), + holding_time VARCHAR(50), + safety_precautions TEXT, + remarks TEXT, + is_active BOOLEAN DEFAULT TRUE, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +); + +CREATE TABLE master_sample_containers ( + container_id INT PRIMARY KEY AUTO_INCREMENT, + container_code VARCHAR(20) NOT NULL, + container_name VARCHAR(100) NOT NULL, + material VARCHAR(50), -- HDPE, glass, amber glass, dsb + capacity VARCHAR(20), -- misalnya: 250mL, 1L + cap_type VARCHAR(50), -- jenis tutup + sterilization VARCHAR(50), -- metode sterilisasi jika perlu + applicable_parameters TEXT, -- parameter yang menggunakan wadah ini + washing_procedure TEXT, -- prosedur pencucian wadah + storage_requirements TEXT, + remarks TEXT, + is_active BOOLEAN DEFAULT TRUE, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +); + +CREATE TABLE master_regulations ( + regulation_id INT PRIMARY KEY AUTO_INCREMENT, + regulation_code VARCHAR(20) NOT NULL, + regulation_name VARCHAR(200) NOT NULL, + issuing_authority VARCHAR(100), -- instansi yang mengeluarkan regulasi + regulation_type VARCHAR(50), -- Peraturan Menteri, Peraturan Pemerintah, dsb + issue_date DATE, + effective_date DATE, + applicable_sector VARCHAR(100), -- sektor yang diregulasi + scope TEXT, + summary TEXT, + file_path VARCHAR(255), -- path ke file dokumen regulasi + remarks TEXT, + is_active BOOLEAN DEFAULT TRUE, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +); + +CREATE TABLE master_quality_standards ( + standard_id INT PRIMARY KEY AUTO_INCREMENT, + standard_code VARCHAR(20) NOT NULL, + standard_name VARCHAR(200) NOT NULL, + regulation_id INT, + matrix_type VARCHAR(50), -- air limbah, air sungai, air tanah, dsb + industry_type VARCHAR(100), -- tipe industri (jika spesifik) + parameter_id INT, + min_value DECIMAL(12, 6), + max_value DECIMAL(12, 6), + unit VARCHAR(20), + remarks TEXT, + is_active BOOLEAN DEFAULT TRUE, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + FOREIGN KEY (regulation_id) REFERENCES master_regulations(regulation_id), + FOREIGN KEY (parameter_id) REFERENCES master_parameters(parameter_id) +); + +CREATE TABLE parameter_method_mapping ( + mapping_id INT PRIMARY KEY AUTO_INCREMENT, + parameter_id INT, + method_id INT, + container_id INT, + preservation_id INT, + is_default BOOLEAN DEFAULT FALSE, -- metode default untuk parameter + remarks 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_parameters(parameter_id), + FOREIGN KEY (method_id) REFERENCES master_sampling_methods(method_id), + FOREIGN KEY (container_id) REFERENCES master_sample_containers(container_id), + FOREIGN KEY (preservation_id) REFERENCES master_preservation_methods(preservation_id) +); + +CREATE TABLE sampling_plans ( + plan_id INT PRIMARY KEY AUTO_INCREMENT, + plan_code VARCHAR(30) NOT NULL, + project_name VARCHAR(200) NOT NULL, + client_id INT, + contact_person_id INT, + request_date DATETIME, + planned_sampling_date DATE, + status VARCHAR(20), -- draft, submitted, approved, completed, cancelled + created_by INT, + approved_by INT, + approval_date DATETIME, + total_locations INT, + total_parameters INT, + remarks TEXT, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + FOREIGN KEY (client_id) REFERENCES master_clients(client_id), + FOREIGN KEY (created_by) REFERENCES master_personnel(personnel_id), + FOREIGN KEY (approved_by) REFERENCES master_personnel(personnel_id) +); + +CREATE TABLE sampling_plan_locations ( + plan_location_id INT PRIMARY KEY AUTO_INCREMENT, + plan_id INT, + location_id INT, + sampling_date DATE, + sampling_time TIME, + sampling_method_id INT, + sampling_personnel_id INT, + field_parameters TEXT, -- parameter yang diukur di lapangan + special_instructions TEXT, + status VARCHAR(20), -- planned, sampled, failed + remarks TEXT, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + FOREIGN KEY (plan_id) REFERENCES sampling_plans(plan_id), + FOREIGN KEY (location_id) REFERENCES master_sampling_locations(location_id), + FOREIGN KEY (sampling_method_id) REFERENCES master_sampling_methods(method_id), + FOREIGN KEY (sampling_personnel_id) REFERENCES master_personnel(personnel_id) +); + +CREATE TABLE sampling_plan_parameters ( + plan_parameter_id INT PRIMARY KEY AUTO_INCREMENT, + plan_id INT, + plan_location_id INT, + parameter_id INT, + container_id INT, + preservation_id INT, + quantity INT DEFAULT 1, + unit_price DECIMAL(12, 2), + remarks TEXT, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + FOREIGN KEY (plan_id) REFERENCES sampling_plans(plan_id), + FOREIGN KEY (plan_location_id) REFERENCES sampling_plan_locations(plan_location_id), + FOREIGN KEY (parameter_id) REFERENCES master_parameters(parameter_id), + FOREIGN KEY (container_id) REFERENCES master_sample_containers(container_id), + FOREIGN KEY (preservation_id) REFERENCES master_preservation_methods(preservation_id) +); + +CREATE TABLE equipment_requisitions ( + requisition_id INT PRIMARY KEY AUTO_INCREMENT, + requisition_code VARCHAR(30) NOT NULL, + plan_id INT, + requisition_date DATETIME, + requested_by INT, + approved_by INT, + approval_date DATETIME, + sampling_date DATE, + return_date DATE, + status VARCHAR(20), -- draft, submitted, approved, issued, returned + remarks TEXT, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + FOREIGN KEY (plan_id) REFERENCES sampling_plans(plan_id), + FOREIGN KEY (requested_by) REFERENCES master_personnel(personnel_id), + FOREIGN KEY (approved_by) REFERENCES master_personnel(personnel_id) +); + +CREATE TABLE equipment_requisition_items ( + requisition_item_id INT PRIMARY KEY AUTO_INCREMENT, + requisition_id INT, + equipment_id INT, + quantity INT, + issued_quantity INT, + issued_by INT, + issued_date DATETIME, + returned_quantity INT, + returned_condition VARCHAR(50), -- good, damaged, lost + returned_date DATETIME, + verified_by INT, + remarks TEXT, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + FOREIGN KEY (requisition_id) REFERENCES equipment_requisitions(requisition_id), + FOREIGN KEY (equipment_id) REFERENCES master_equipment(equipment_id), + FOREIGN KEY (issued_by) REFERENCES master_personnel(personnel_id), + FOREIGN KEY (verified_by) REFERENCES master_personnel(personnel_id) +); + +CREATE TABLE samples ( + sample_id INT PRIMARY KEY AUTO_INCREMENT, + sample_code VARCHAR(50) NOT NULL, + plan_id INT, + plan_location_id INT, + sampling_date DATE, + sampling_time TIME, + sampler_id INT, + preservation_time DATETIME, + temperature DECIMAL(5, 2), -- suhu sampel saat pengambilan + weather_condition VARCHAR(50), + field_ph DECIMAL(5, 2), + field_do DECIMAL(5, 2), + field_conductivity DECIMAL(10, 2), + field_turbidity DECIMAL(10, 2), + sample_matrix VARCHAR(50), -- air, tanah, sedimen, dsb + sample_source VARCHAR(100), + container_id INT, + preservation_id INT, + received_by INT, + received_date DATETIME, + received_condition VARCHAR(50), -- good, compromised, rejected + storage_location VARCHAR(100), + remarks TEXT, + status VARCHAR(20), -- collected, in transit, received, in analysis, reported + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + FOREIGN KEY (plan_id) REFERENCES sampling_plans(plan_id), + FOREIGN KEY (plan_location_id) REFERENCES sampling_plan_locations(plan_location_id), + FOREIGN KEY (sampler_id) REFERENCES master_personnel(personnel_id), + FOREIGN KEY (container_id) REFERENCES master_sample_containers(container_id), + FOREIGN KEY (preservation_id) REFERENCES master_preservation_methods(preservation_id), + FOREIGN KEY (received_by) REFERENCES master_personnel(personnel_id) +); + +CREATE TABLE measurement_results_light ( + result_id INT PRIMARY KEY AUTO_INCREMENT, + sample_id INT, + measurement_date DATE, + measurement_time TIME, + parameter_id INT, + measurement_value DECIMAL(10, 2), + measurement_unit VARCHAR(20), + measurement_point VARCHAR(50), + weather_condition VARCHAR(50), + light_source VARCHAR(100), + ambient_condition VARCHAR(200), + standard_id INT, + is_compliant BOOLEAN, + analyst_id INT, + verified_by INT, + verification_date DATETIME, + remarks TEXT, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + FOREIGN KEY (sample_id) REFERENCES samples(sample_id), + FOREIGN KEY (parameter_id) REFERENCES master_parameters(parameter_id), + FOREIGN KEY (standard_id) REFERENCES master_quality_standards(standard_id), + FOREIGN KEY (analyst_id) REFERENCES master_personnel(personnel_id), + FOREIGN KEY (verified_by) REFERENCES master_personnel(personnel_id) +); + +INSERT INTO master_parameters (parameter_id, parameter_code, parameter_name, parameter_group, standard_method, unit, price, instrumentation, mdl, container_type, preservation, holding_time, remarks, is_active) VALUES +(1, 'pH', 'pH', 'Fisika', 'SNI 06-6989.11-2019', 'unit', 50000.00, 'pH meter', 0.01, 'HDPE/Glass', 'Analisis segera', '15 menit (lapangan) / 24 jam', 'Parameter lapangan, prioritas analisis', TRUE), +(2, 'TSS', 'Total Suspended Solid', 'Fisika', 'SNI 06-6989.3-2019', 'mg/L', 75000.00, 'Analytical Balance, Oven', 1.00, 'HDPE/Glass', 'Pendinginan 4°C', '7 hari', NULL, TRUE), +(3, 'COD', 'Chemical Oxygen Demand', 'Kimia', 'SNI 6989.73:2019', 'mg/L', 125000.00, 'COD Reactor, Spektrofotometer', 5.00, 'Glass', 'H₂SO₄ hingga pH<2, pendinginan 4°C', '28 hari', NULL, TRUE), +(4, 'BOD', 'Biological Oxygen Demand', 'Kimia', 'SNI 6989.72:2009', 'mg/L', 150000.00, 'DO meter, BOD Incubator', 2.00, 'Glass', 'Pendinginan 4°C', '48 jam', 'Memerlukan inkubasi 5 hari', TRUE), +(5, 'DO', 'Dissolved Oxygen', 'Kimia', 'SNI 06-6989.14-2004', 'mg/L', 80000.00, 'DO meter', 0.10, 'Glass BOD bottle', 'Analisis segera/fiksasi di lapangan', '8 jam setelah fiksasi', 'Parameter lapangan, prioritas analisis', TRUE), +(6, 'NH3-N', 'Ammonia Nitrogen', 'Kimia', 'SNI 06-6989.30-2005', 'mg/L', 100000.00, 'Spektrofotometer UV-Vis', 0.01, 'HDPE/Glass', 'H₂SO₄ hingga pH<2, pendinginan 4°C', '28 hari', NULL, TRUE), +(7, 'NO3-N', 'Nitrate Nitrogen', 'Kimia', 'SNI 6989.79:2011', 'mg/L', 100000.00, 'Spektrofotometer UV-Vis', 0.01, 'HDPE/Glass', 'Pendinginan 4°C', '48 jam', NULL, TRUE), +(8, 'Pb', 'Timbal', 'Logam Berat', 'SNI 6989.8:2009', 'mg/L', 200000.00, 'AAS/ICP-MS', 0.01, 'HDPE/Glass', 'HNO₃ hingga pH<2', '6 bulan', 'Memerlukan digestion sebelum analisis', TRUE), +(9, 'Cd', 'Kadmium', 'Logam Berat', 'SNI 6989.16:2009', 'mg/L', 200000.00, 'AAS/ICP-MS', 0.005, 'HDPE/Glass', 'HNO₃ hingga pH<2', '6 bulan', 'Memerlukan digestion sebelum analisis', TRUE), +(10, 'Hg', 'Merkuri', 'Logam Berat', 'SNI 6989.78:2011', 'mg/L', 250000.00, 'Mercury Analyzer', 0.0005, 'Glass', 'HNO₃ hingga pH<2, pendinginan 4°C', '28 hari', 'Menggunakan wadah khusus bebas kontaminasi', TRUE), +(11, 'MBAS', 'Surfaktan Anionik', 'Kimia', 'SNI 06-6989.51-2005', 'mg/L', 150000.00, 'Spektrofotometer UV-Vis', 0.05, 'Glass', 'Pendinginan 4°C', '48 jam', NULL, TRUE), +(12, 'OG', 'Minyak & Lemak', 'Kimia', 'SNI 6989.10:2011', 'mg/L', 175000.00, 'Analytical Balance, Oven', 1.00, 'Glass', 'H₂SO₄ hingga pH<2, pendinginan 4°C', '28 hari', 'Hindari kontak dengan plastik', TRUE), +(13, 'TCOLI', 'Total Coliform', 'Mikrobiologi', 'SNI 01-2332.1-2006', 'MPN/100mL', 175000.00, 'Incubator, Laminar Flow', 1.80, 'Sterile Glass/Plastic', 'Na₂S₂O₃, pendinginan 4°C', '6 jam', 'Wadah steril, sampling aseptik', TRUE), +(14, 'ECOLI', 'Escherichia coli', 'Mikrobiologi', 'SNI 2897:2008', 'MPN/100mL', 200000.00, 'Incubator, Laminar Flow', 1.80, 'Sterile Glass/Plastic', 'Na₂S₂O₃, pendinginan 4°C', '6 jam', 'Wadah steril, sampling aseptik', TRUE), +(15, 'PO4', 'Fosfat', 'Kimia', 'SNI 06-6989.31-2005', 'mg/L', 110000.00, 'Spektrofotometer UV-Vis', 0.01, 'HDPE/Glass', 'Pendinginan 4°C', '48 jam', NULL, TRUE), +(16, 'CAHAYA', 'Intensitas Cahaya', 'Fisika', 'SNI 16-7062-2004', 'Lux', 75000.00, 'Lux meter', 1.00, 'N/A', 'Pengukuran langsung di lapangan', 'N/A', 'Parameter fisika untuk lingkungan dan ruang kerja', TRUE), +(17, 'LUMI', 'Luminansi', 'Fisika', 'IES LM-79-08', 'cd/m²', 85000.00, 'Luminance meter', 0.10, 'N/A', 'Pengukuran langsung di lapangan', 'N/A', 'Parameter untuk pengukuran kecerahan permukaan', TRUE), +(18, 'SILAU', 'Kesilauan', 'Fisika', 'CIE 112-1994', 'UGR', 90000.00, 'Glare meter', 1.00, 'N/A', 'Pengukuran langsung di lapangan', 'N/A', 'Pengukuran untuk menilai tingkat silau di ruang kerja', TRUE), +(19, 'CFLUKS', 'Fluks Cahaya', 'Fisika', 'IES LM-79-08', 'Lumen', 95000.00, 'Integrating Sphere', 10.00, 'N/A', 'Pengukuran langsung di lapangan', 'N/A', 'Parameter untuk mengukur total output cahaya dari sumber', TRUE); + +INSERT INTO master_equipment (equipment_id, equipment_code, equipment_name, equipment_type, specifications, brand, model, serial_number, purchase_date, calibration_interval, last_calibration_date, next_calibration_date, status, location, remarks, is_active) VALUES +(1, 'MULTIP001', 'Multiparameter Water Quality Meter', 'Field Measurement', 'Parameter: pH, DO, Conductivity, Temperature, Turbidity', 'YSI', 'ProDSS', 'YS19K12345', '2023-01-15', 180, '2023-12-10', '2024-06-08', 'available', 'Equipment Room A', 'Alat utama untuk pengukuran lapangan', TRUE), +(2, 'pH002', 'pH Meter Portable', 'Field Measurement', 'Range: 0-14, Resolution: 0.01, Accuracy: ±0.02', 'Hanna', 'HI98191', 'HI12345678', '2023-03-20', 90, '2024-01-05', '2024-04-04', 'available', 'Equipment Room A', 'Backup untuk pengukuran pH lapangan', TRUE), +(3, 'DO003', 'DO Meter Portable', 'Field Measurement', 'Range: 0-50 mg/L, Resolution: 0.01 mg/L', 'Lutron', 'DO-5519', 'LT5519876', '2022-11-10', 90, '2024-01-10', '2024-04-09', 'in use', 'Field Team B', NULL, TRUE), +(4, 'VDS004', 'Van Dorn Water Sampler', 'Sampling', 'Horizontal, 2.2L capacity, PVC material', 'Wildco', 'Alpha', 'WC1234567', '2023-02-18', 365, '2023-02-18', '2024-02-18', 'available', 'Equipment Room B', NULL, TRUE), +(5, 'VDS005', 'Van Dorn Water Sampler', 'Sampling', 'Horizontal, 4.2L capacity, PVC material', 'Wildco', 'Beta', 'WC8765432', '2023-02-18', 365, '2023-02-18', '2024-02-18', 'maintenance', 'Maintenance Room', 'Sedang perbaikan tali', TRUE), +(6, 'PER006', 'Peristaltic Pump', 'Sampling', 'Flow rate: 50-500 mL/min, Silicon tubing', 'Masterflex', 'L/S', 'MF987654', '2022-08-25', 180, '2023-08-25', '2024-02-21', 'available', 'Equipment Room B', NULL, TRUE), +(7, 'TSP007', 'Telescopic Sampling Pole', 'Sampling', 'Extendable 2-5m, Aluminum', 'In-house', 'Custom', 'N/A', '2023-05-10', 365, '2023-05-10', '2024-05-09', 'available', 'Equipment Room B', NULL, TRUE), +(8, 'COL008', 'Cooler Box (Large)', 'Transport', '50L capacity, Insulated, with ice pack slots', 'Coleman', 'Xtreme', 'N/A', '2023-04-12', 0, NULL, NULL, 'available', 'Equipment Room B', NULL, TRUE), +(9, 'COL009', 'Cooler Box (Medium)', 'Transport', '25L capacity, Insulated, with ice pack slots', 'Coleman', 'Xtreme', 'N/A', '2023-04-12', 0, NULL, NULL, 'in use', 'Field Team A', NULL, TRUE), +(10, 'GPS010', 'GPS Device', 'Field Measurement', 'Accuracy: 3m, Waterproof IPX7', 'Garmin', 'GPSMAP 65s', 'GM98765432', '2023-01-30', 365, '2023-01-30', '2024-01-30', 'available', 'Equipment Room A', NULL, TRUE), +(11, 'TUR011', 'Turbidity Meter', 'Field Measurement', 'Range: 0-1000 NTU, Accuracy: ±2%', 'Hach', '2100Q', 'HC2100123', '2022-10-15', 180, '2023-10-15', '2024-04-13', 'available', 'Equipment Room A', NULL, TRUE), +(12, 'FMT012', 'Flow Meter', 'Field Measurement', 'Range: 0.1-5 m/s, Digital display', 'Global Water', 'FP111', 'GW123456', '2023-06-20', 180, '2023-12-20', '2024-06-18', 'in use', 'Field Team C', NULL, TRUE), +(13, 'CAM013', 'Digital Camera', 'Documentation', 'Waterproof, 20MP, GPS tagging', 'Olympus', 'Tough TG-6', 'OL987654', '2023-03-15', 0, NULL, NULL, 'available', 'Equipment Room A', NULL, TRUE), +(14, 'SAU014', 'Soil Auger', 'Sampling', 'Hand-operated, 50cm depth', 'AMS', 'Standard', 'AMS12345', '2023-02-10', 0, NULL, NULL, 'available', 'Equipment Room C', NULL, TRUE), +(15, 'SGS015', 'Sediment Grab Sampler', 'Sampling', 'Petite Ponar type, Stainless steel', 'Wildco', 'Ponar', 'WC456789', '2023-02-18', 365, '2023-02-18', '2024-02-18', 'available', 'Equipment Room C', NULL, TRUE), +(16, 'LUX001', 'Lux Meter Digital', 'Field Measurement', 'Range: 0-200,000 lux, Resolution: 0.1 lux, Accuracy: ±3%', 'Testo', '540', 'TS5401234', '2023-05-15', 180, '2023-11-15', '2024-05-13', 'available', 'Equipment Room A', NULL, TRUE), +(17, 'LUX002', 'Lux Meter Digital', 'Field Measurement', 'Range: 0-100,000 lux, Resolution: 0.1 lux, Accuracy: ±2%', 'Konica Minolta', 'T-10A', 'KM10A5678', '2022-08-20', 180, '2023-08-20', '2024-02-16', 'available', 'Equipment Room A', NULL, TRUE), +(18, 'LUM003', 'Luminance Meter', 'Field Measurement', 'Range: 0.01-999,900 cd/m², Accuracy: ±2%', 'Konica Minolta', 'LS-150', 'KM1501234', '2023-02-10', 180, '2023-08-10', '2024-02-06', 'available', 'Equipment Room A', 'Untuk pengukuran kecerahan permukaan', TRUE), +(19, 'GLARE004', 'Glare Meter', 'Field Measurement', 'Range: UGR 5-40, Accuracy: ±1 UGR', 'GL Optic', 'GL Spectis 1.0 T Flicker', 'GL12345', '2023-01-25', 180, '2023-07-25', '2024-01-21', 'in use', 'Field Team A', 'Untuk pengukuran tingkat silau', TRUE), +(20, 'GRID005', 'Grid Mapping Kit', 'Sampling', 'Grid markers, Measuring tape, Laser distance meter', 'In-house', 'Custom', 'N/A', '2023-03-15', 0, NULL, NULL, 'available', 'Equipment Room B', 'Peralatan penunjang untuk mapping titik sampling', TRUE); + +INSERT INTO master_personnel (personnel_id, employee_code, name, position, department, specialization, certifications, contact_number, email, join_date, qualification, status, remarks, is_active) VALUES +(1, 'EMP001', 'Ahmad Ramadhan', 'Lab Manager', 'Laboratory', 'Environmental Analysis', 'KAN Lead Assessor, ISO 17025 Internal Auditor', '081234567890', 'ahmad@lab-env.co.id', '2015-03-10', 'M.Sc. Environmental Chemistry', 'active', NULL, TRUE), +(2, 'EMP002', 'Siti Aminah', 'Sampling Team Leader', 'Field Operations', 'Water Quality Sampling', 'Certified Environmental Sampler, First Aid', '082345678901', 'siti@lab-env.co.id', '2017-06-15', 'B.Sc. Environmental Science', 'active', NULL, TRUE), +(3, 'EMP003', 'Budi Santoso', 'Field Technician', 'Field Operations', 'Water & Soil Sampling', 'Certified Environmental Sampler', '083456789012', 'budi@lab-env.co.id', '2019-01-10', 'Diploma in Environmental Technology', 'active', NULL, TRUE), +(4, 'EMP004', 'Dini Wijaya', 'Admin Lab', 'Administration', 'Customer Service, Documentation', 'ISO 9001 Documentation', '084567890123', 'dini@lab-env.co.id', '2020-02-15', 'B.A. Business Administration', 'active', NULL, TRUE), +(5, 'EMP005', 'Faisal Rahman', 'Senior Analyst', 'Laboratory', 'Chemical Analysis', 'AAS Specialist, GC-MS Operator', '085678901234', 'faisal@lab-env.co.id', '2016-08-20', 'M.Sc. Analytical Chemistry', 'active', NULL, TRUE), +(6, 'EMP006', 'Eva Susanti', 'Microbiologist', 'Laboratory', 'Microbiological Analysis', 'Food Safety Microbiology', '086789012345', 'eva@lab-env.co.id', '2018-11-05', 'B.Sc. Microbiology', 'active', NULL, TRUE), +(7, 'EMP007', 'Dedi Kurniawan', 'Field Technician', 'Field Operations', 'Air Quality Sampling', 'Air Quality Monitoring, Stack Sampling', '087890123456', 'dedi@lab-env.co.id', '2021-03-15', 'B.Sc. Environmental Engineering', 'active', NULL, TRUE), +(8, 'EMP008', 'Yanti Susilo', 'QA/QC Officer', 'Quality Assurance', 'Quality Management System', 'ISO 17025 Lead Assessor, ISO 9001 Lead Auditor', '088901234567', 'yanti@lab-env.co.id', '2017-07-10', 'M.Sc. Quality Management', 'active', NULL, TRUE), +(9, 'EMP009', 'Hendra Gunawan', 'Field Technician', 'Field Operations', 'Water & Soil Sampling', 'Water Quality Sampling', '089012345678', 'hendra@lab-env.co.id', '2022-01-10', 'Diploma in Environmental Technology', 'active', NULL, TRUE), +(10, 'EMP010', 'Nita Anggraini', 'Analyst', 'Laboratory', 'Chemical Analysis', 'HPLC Operator', '081122334455', 'nita@lab-env.co.id', '2022-05-10', 'B.Sc. Chemistry', 'active', NULL, TRUE), +(11, 'EMP011', 'Rudi Hartono', 'IT Support', 'IT', 'LIMS, Network Management', 'CCNA, Microsoft Certified', '081234543210', 'rudi@lab-env.co.id', '2020-11-15', 'B.Sc. Information Technology', 'active', NULL, TRUE), +(12, 'EMP012', 'Dr. Surya Wijaya', 'Technical Director', 'Management', 'Environmental Analytics, Research', 'ISO 17025 Technical Expert', '087654321098', 'surya@lab-env.co.id', '2010-02-01', 'Ph.D. Environmental Chemistry', 'active', NULL, TRUE); + +INSERT INTO master_clients (client_id, client_code, client_name, client_type, industry_sector, address, city, province, postal_code, main_contact_person, contact_position, contact_phone, contact_email, tax_id, payment_terms, discount_rate, credit_limit, status, remarks, is_active) VALUES +(1, 'CL001', 'PT. Industri Tekstil Nusantara', 'industry', 'Textile', 'Jl. Industri No. 123', 'Bandung', 'Jawa Barat', '40123', 'Budi Santoso', 'Environmental Officer', '08123456789', 'budi@tekstilnusantara.com', '01.234.567.8-901.000', 'Net 30', 0.00, 10000000.00, 'active', 'Pelanggan reguler triwulanan', TRUE), +(2, 'CL002', 'PT. Kimia Farma Tbk', 'industry', 'Pharmaceutical', 'Jl. Veteran No. 45', 'Jakarta', 'DKI Jakarta', '10110', 'Ani Wijaya', 'EHS Manager', '08234567890', 'ani@kimiafarma.co.id', '02.345.678.9-012.000', 'Net 15', 5.00, 25000000.00, 'active', NULL, TRUE), +(3, 'CL003', 'Dinas Lingkungan Hidup Kota', 'government', 'Environmental Regulation', 'Jl. Ahmad Yani No. 35', 'Bandung', 'Jawa Barat', '40115', 'Siti Aminah', 'Koordinator Pemantauan Air', '08765432100', 'siti@dlh.kotabjb.go.id', '03.456.789.0-123.000', 'Government Invoice', 0.00, 50000000.00, 'active', 'Kontrak tahunan', TRUE), +(4, 'CL004', 'PT. Aneka Tambang Tbk', 'industry', 'Mining', 'Jl. TB Simatupang No. 67', 'Jakarta', 'DKI Jakarta', '12520', 'Hadi Sutrisno', 'Environmental Compliance Manager', '08345678901', 'hadi@antam.com', '04.567.890.1-234.000', 'Net 30', 0.00, 35000000.00, 'active', NULL, TRUE), +(5, 'CL005', 'PT. Tirta Investama (Aqua)', 'industry', 'Food & Beverage', 'Jl. Pulo Lentut No. 3', 'Bekasi', 'Jawa Barat', '17122', 'Maya Indah', 'Quality Assurance Manager', '08456789012', 'maya@aqua.com', '05.678.901.2-345.000', 'Net 15', 2.50, 20000000.00, 'active', NULL, TRUE), +(6, 'CL006', 'Balai Besar Wilayah Sungai Citarum', 'government', 'Water Resources', 'Jl. Braga No. 137', 'Bandung', 'Jawa Barat', '40111', 'Agus Hermawan', 'Kepala Seksi Kualitas Air', '08987654321', 'agus@bbwscitarum.com', '06.789.012.3-456.000', 'Government Invoice', 0.00, 40000000.00, 'active', 'Program Citarum Harum', TRUE), +(7, 'CL007', 'PT. Indofood CBP Sukses Makmur Tbk', 'industry', 'Food Processing', 'Jl. Industri Selatan No. 45', 'Bekasi', 'Jawa Barat', '17530', 'Dewi Sartika', 'EHS Compliance Officer', '08567890123', 'dewi@indofood.co.id', '07.890.123.4-567.000', 'Net 30', 0.00, 30000000.00, 'active', NULL, TRUE), +(8, 'CL008', 'PT. PLN (Persero)', 'government', 'Energy & Power', 'Jl. Trunojoyo Blok M-I No.135', 'Jakarta', 'DKI Jakarta', '12160', 'Bambang Irawan', 'Environmental Officer', '08678901234', 'bambang@pln.co.id', '08.901.234.5-678.000', 'Net 45', 0.00, 45000000.00, 'active', NULL, TRUE), +(9, 'CL009', 'PT. Pertamina EP', 'government', 'Oil & Gas', 'Jl. Medan Merdeka Timur No. 1A', 'Jakarta', 'DKI Jakarta', '10110', 'Joko Susilo', 'HSE Manager', '08789012345', 'joko@pertamina.com', '09.012.345.6-789.000', 'Net 45', 0.00, 50000000.00, 'active', NULL, TRUE), +(10, 'CL010', 'PT. Jakarta Propertindo', 'government', 'Property Development', 'Jl. Kebon Sirih No. 12', 'Jakarta', 'DKI Jakarta', '10340', 'Lina Hartati', 'Environmental Manager', '08890123456', 'lina@jakpro.co.id', '10.123.456.7-890.000', 'Net 30', 0.00, 25000000.00, 'active', NULL, TRUE); + +INSERT INTO master_sampling_locations (location_id, location_code, location_name, client_id, location_type, address, coordinates, elevation, description, access_information, sampling_point_details, remarks, is_active) VALUES +(1, 'LOC001', 'Outlet IPAL PT. ITN', 1, 'outlet', 'Jl. Industri No. 123, Bandung', POINT(-6.914744, 107.609810), 650.5, 'Outlet dari Instalasi Pengolahan Air Limbah utama', 'Akses melalui pintu belakang pabrik, koordinasi dengan security', 'Sampel diambil dari saluran outlet sebelum bercampur dengan badan air penerima', NULL, TRUE), +(2, 'LOC002', 'Inlet IPAL PT. ITN', 1, 'inlet', 'Jl. Industri No. 123, Bandung', POINT(-6.914789, 107.609835), 652.0, 'Inlet menuju Instalasi Pengolahan Air Limbah', 'Akses melalui area produksi, perlu ijin khusus', 'Sampel diambil dari bak ekualisasi sebelum treatment', 'Memerlukan APD lengkap, beresiko bau menyengat', TRUE), +(3, 'LOC003', 'Titik 1 Sungai Citarum (Hulu)', 3, 'sungai', 'Desa Cikitu, Kab. Bandung', POINT(-6.947890, 107.632505), 875.3, 'Lokasi hulu Sungai Citarum', 'Akses dengan kendaraan 4WD + jalan kaki 500m', 'Sampel diambil dari tengah sungai dengan perahu', 'Koordinasi dengan penduduk lokal untuk akses', TRUE), +(4, 'LOC004', 'Titik 2 Sungai Citarum', 3, 'sungai', 'Desa Dayeuhkolot, Kab. Bandung', POINT(-6.933456, 107.621234), 780.0, 'Lokasi setelah kawasan industri', 'Akses dari jembatan', 'Sampel diambil dari tengah sungai dengan tali dan ember', NULL, TRUE), +(5, 'LOC005', 'Titik 3 Sungai Citarum', 3, 'sungai', 'Kecamatan Baleendah, Kab. Bandung', POINT(-6.925678, 107.612345), 720.4, 'Lokasi dekat pemukiman padat', 'Akses dari jalan desa, parkir di lapangan', 'Sampel diambil dari tepi sungai dengan telescopic pole', NULL, TRUE), +(6, 'LOC006', 'Titik 4 Sungai Citarum', 3, 'sungai', 'Kecamatan Dayeuhkolot, Kab. Bandung', POINT(-6.912345, 107.603456), 680.2, 'Lokasi setelah pertemuan dengan anak sungai', 'Akses dari jalan provinsi, parkir di bahu jalan', 'Sampel diambil dari jembatan dengan tali dan ember', 'Arus cukup deras di lokasi ini', TRUE), +(7, 'LOC007', 'Titik 5 Sungai Citarum (Hilir)', 3, 'sungai', 'Kecamatan Bojongsoang, Kab. Bandung', POINT(-6.901234, 107.594567), 650.8, 'Lokasi hilir sebelum bendungan', 'Akses dari jalan desa, parkir di rumah penduduk', 'Sampel diambil dari tepi sungai dengan telescopic pole', NULL, TRUE), +(8, 'LOC008', 'Sumur Pantau 1 PT. Aneka Tambang', 4, 'sumur pantau', 'Area Tambang Timur, Kabupaten Bogor', POINT(-6.412345, 106.857654), 342.5, 'Sumur pantau untuk monitoring air tanah', 'Akses dengan kendaraan tambang, koordinasi dengan security', 'Sumur PVC 4 inch, kedalaman 15m, pakai bailer', 'Perlu pengukuran level air tanah sebelum sampling', TRUE), +(9, 'LOC009', 'Sumur Pantau 2 PT. Aneka Tambang', 4, 'sumur pantau', 'Area Tambang Barat, Kabupaten Bogor', POINT(-6.418765, 106.849876), 356.8, 'Sumur pantau untuk monitoring air tanah', 'Akses dengan kendaraan tambang, koordinasi dengan security', 'Sumur PVC 4 inch, kedalaman 20m, pakai bailer', 'Perlu pengukuran level air tanah sebelum sampling', TRUE), +(10, 'LOC010', 'Outlet IPAL PT. Kimia Farma', 2, 'outlet', 'Jl. Veteran No. 45, Jakarta', POINT(-6.183456, 106.823456), 12.5, 'Outlet IPAL produksi farmasi', 'Akses melalui laboratorium QC, koordinasi dengan staff EHS', 'Sampel diambil dari bak kontrol setelah IPAL', 'Kemungkinan mengandung residu antibiotik', TRUE), +(11, 'LOC011', 'Sumber Air Baku Aqua', 5, 'sumber air', 'Desa Babakan, Kabupaten Sukabumi', POINT(-6.912387, 106.912345), 875.4, 'Sumber mata air untuk produksi air minum', 'Akses terbatas, perlu ijin khusus dan didampingi staff', 'Sampel diambil langsung dari mata air', 'Area steril, perlu protokol khusus', TRUE), +(12, 'LOC012', 'Sungai Ciliwung Hulu', 10, 'sungai', 'Kebun Raya Bogor', POINT(-6.597890, 106.799012), 260.5, 'Bagian hulu sungai, kawasan konservasi', 'Akses dari Kebun Raya, perlu izin masuk', 'Sampel diambil dari jembatan dengan tali dan ember', 'Sampel baseline kualitas air', TRUE); + +INSERT INTO master_sampling_methods (method_id, method_code, method_name, standard_reference, applicable_matrix, method_description, equipment_needed, procedure_summary, qc_requirements, limitations, remarks, is_active) VALUES +(1, 'GS-001', 'Grab Sampling for Surface Water', 'SNI 6989.57:2008', 'air permukaan', 'Pengambilan sampel sesaat untuk air permukaan', 'Botol sampel sesuai parameter, tali, ember, tongkat sampling', 'Sampel diambil secara langsung dari badan air dengan kedalaman sekitar 30cm dari permukaan', 'Blanko lapangan, sampel duplikat 1 per 10 sampel', NULL, NULL, TRUE), +(2, 'MS-CAHAYA-01', 'Pengukuran Intensitas Cahaya Ruangan', 'SNI 16-7062-2004', 'ruang_kerja', 'Metode pengukuran intensitas cahaya dalam ruangan', 'Lux meter, tripod, meteran', 'Pengukuran dilakukan dengan menempatkan sensor lux meter pada bidang kerja (umumnya 0.75-0.85m dari lantai). Diambil minimal 3 titik pengukuran yang mewakili area kerja. Untuk ruangan <10m², minimal 1 titik di tengah ruangan.', 'Kalibrasi lux meter sebelum pengukuran, verifikasi dengan standar cahaya (jika ada)', 'Hasil dapat dipengaruhi oleh kondisi cuaca, bayangan, dan refleksi cahaya', NULL, TRUE), +(3, 'MS-CAHAYA-02', 'Pengukuran Intensitas Cahaya Area Kerja Industri', 'PERMENAKER No.5 Tahun 2018', 'area_kerja', 'Metode pengukuran intensitas cahaya untuk area kerja industri', 'Lux meter digital, tripod, meteran, lembar grid area kerja', 'Pengukuran dilakukan dengan membuat grid area kerja. Untuk area <100m², minimal 9 titik pengukuran (grid 3x3). Sensor diletakkan pada bidang kerja atau 0.85m dari lantai. Pengukuran dilakukan dalam kondisi operasional normal.', 'Kalibrasi lux meter, pengukuran duplikat minimal 10% dari total titik', 'Pengukuran optimal dilakukan saat aktivitas produksi normal. Perhatikan pengaruh bayangan mesin dan peralatan.', 'Untuk area produksi dengan pencahayaan kritis, perlu pengukuran pada waktu yang berbeda (pagi, siang, malam)', TRUE), +(4, 'MS-CAHAYA-03', 'Pengukuran Luminansi Permukaan', 'IES LM-79-08', 'permukaan_kerja', 'Metode pengukuran luminansi (kecerahan) permukaan', 'Luminance meter, tripod, material reflektansi standar', 'Pengukuran dilakukan dengan mengarahkan luminance meter ke permukaan yang diukur pada sudut pengamatan normal. Jarak pengukuran disesuaikan dengan spesifikasi alat.', 'Kalibrasi dengan material reflektansi standar', 'Refleksi cahaya dari permukaan lain dapat mempengaruhi hasil', 'Terutama untuk evaluasi silau dan kontras pencahayaan', TRUE), +(5, 'MS-CAHAYA-04', 'Pengukuran Distribusi Cahaya', 'CIE S 025/E:2015', 'ruang_tiga_dimensi', 'Metode pengukuran distribusi cahaya dalam ruang tiga dimensi', 'Lux meter dengan probe 3D, tripod, perangkat lunak pemetaan cahaya', 'Pengukuran dilakukan pada grid tiga dimensi dalam ruangan untuk memetakan distribusi cahaya. Pengukuran minimal pada 3 ketinggian berbeda.', 'Verifikasi dengan pengukuran pada titik referensi', 'Memerlukan waktu pengukuran yang lebih lama', 'Untuk analisis distribusi cahaya yang lebih komprehensif', TRUE); + +INSERT INTO master_regulations (regulation_id, regulation_code, regulation_name, issuing_authority, regulation_type, issue_date, effective_date, applicable_sector, scope, summary, file_path, remarks, is_active) VALUES +(1, 'PMK-02-2023', 'Peraturan Menteri Kesehatan Republik Indonesia Nomor 2 Tahun 2023', 'Kementerian Kesehatan', 'Peraturan Menteri', '2023-01-20', '2023-02-01', 'Kesehatan Lingkungan, Kesehatan Kerja', 'Standar Baku Mutu Kesehatan Lingkungan dan Persyaratan Kesehatan', 'Peraturan ini mengatur tentang standar baku mutu kesehatan lingkungan untuk media udara, air, tanah, pangan, dan sarana/bangunan, serta persyaratan kesehatan lainnya', '/dokumen/regulasi/PMK_02_2023.pdf', 'Menggantikan PMK No.32 Tahun 2017', TRUE), +(2, 'PERMENAKER-05-2018', 'Peraturan Menteri Ketenagakerjaan Republik Indonesia Nomor 5 Tahun 2018', 'Kementerian Ketenagakerjaan', 'Peraturan Menteri', '2018-04-25', '2018-05-10', 'Keselamatan dan Kesehatan Kerja', 'Keselamatan dan Kesehatan Kerja Lingkungan Kerja', 'Peraturan ini mengatur tentang standar K3 Lingkungan Kerja termasuk faktor fisika, kimia, biologi, ergonomi dan psikologi', '/dokumen/regulasi/PERMENAKER_05_2018.pdf', NULL, TRUE); + +INSERT INTO master_quality_standards (standard_id, standard_code, standard_name, regulation_id, matrix_type, industry_type, parameter_id, min_value, max_value, unit, remarks, is_active) VALUES +-- Berdasarkan PMK RI No.2 Tahun 2023 +(1, 'PMK-CAH-01', 'Intensitas Cahaya Ruang Kerja Perkantoran', 1, 'ruang_kerja', 'perkantoran', 16, 300.00, NULL, 'Lux', 'Intensitas cahaya untuk pekerjaan rutin', TRUE), +(2, 'PMK-CAH-02', 'Intensitas Cahaya Ruang Rapat', 1, 'ruang_rapat', NULL, 16, 300.00, NULL, 'Lux', NULL, TRUE), +(3, 'PMK-CAH-03', 'Intensitas Cahaya Ruang Arsip', 1, 'ruang_arsip', NULL, 16, 150.00, NULL, 'Lux', NULL, TRUE), +(4, 'PMK-CAH-04', 'Intensitas Cahaya Ruang Resepsionis', 1, 'ruang_resepsionis', NULL, 16, 300.00, NULL, 'Lux', NULL, TRUE), +(5, 'PMK-CAH-05', 'Intensitas Cahaya Ruang Komputer', 1, 'ruang_komputer', NULL, 16, 500.00, NULL, 'Lux', 'Untuk menghindari kelelahan mata dan refleksi layar', TRUE), +(6, 'PMK-CAH-06', 'Intensitas Cahaya Ruang Gambar', 1, 'ruang_gambar', NULL, 16, 750.00, NULL, 'Lux', 'Untuk pekerjaan detail tinggi', TRUE), +(7, 'PMK-CAH-07', 'Intensitas Cahaya Ruang Perpustakaan', 1, 'ruang_perpustakaan', NULL, 16, 300.00, NULL, 'Lux', NULL, TRUE), +(8, 'PMK-CAH-08', 'Intensitas Cahaya Ruang Laboratorium', 1, 'ruang_laboratorium', NULL, 16, 500.00, NULL, 'Lux', NULL, TRUE), +(9, 'PMK-CAH-09', 'Intensitas Cahaya Ruang Pemeriksaan', 1, 'ruang_pemeriksaan', 'kesehatan', 16, 500.00, NULL, 'Lux', NULL, TRUE), + +-- Berdasarkan Permenaker No.5 Tahun 2018 +(10, 'PMN-CAH-01', 'Intensitas Cahaya Pekerjaan Kasar', 2, 'area_kerja', 'industri', 16, 100.00, NULL, 'Lux', 'Pekerjaan dengan detail besar, tidak teliti', TRUE), +(11, 'PMN-CAH-02', 'Intensitas Cahaya Pekerjaan Sedang', 2, 'area_kerja', 'industri', 16, 200.00, NULL, 'Lux', 'Pekerjaan dengan detail sedang', TRUE), +(12, 'PMN-CAH-03', 'Intensitas Cahaya Pekerjaan Halus', 2, 'area_kerja', 'industri', 16, 500.00, NULL, 'Lux', 'Pekerjaan dengan detail kecil', TRUE), +(13, 'PMN-CAH-04', 'Intensitas Cahaya Pekerjaan Amat Halus', 2, 'area_kerja', 'industri', 16, 1000.00, NULL, 'Lux', 'Pekerjaan dengan detail sangat kecil', TRUE), +(14, 'PMN-CAH-05', 'Intensitas Cahaya Pekerjaan Terinci', 2, 'area_kerja', 'industri', 16, 2000.00, NULL, 'Lux', 'Pekerjaan yang membutuhkan ketelitian tinggi', TRUE), +(15, 'PMN-CAH-06', 'Intensitas Cahaya Lorong', 2, 'area_kerja', 'industri', 16, 50.00, NULL, 'Lux', 'Area sirkulasi', TRUE), +(16, 'PMN-CAH-07', 'Intensitas Cahaya Tangga', 2, 'area_kerja', 'industri', 16, 100.00, NULL, 'Lux', 'Area sirkulasi vertikal', TRUE), +(17, 'PMN-CAH-08', 'Intensitas Cahaya Gudang', 2, 'area_kerja', 'industri', 16, 100.00, NULL, 'Lux', 'Area penyimpanan dengan aktivitas rendah', TRUE), +(18, 'PMN-CAH-09', 'Luminansi Maksimum', 2, 'area_kerja', 'industri', 17, NULL, 5000.00, 'cd/m²', 'Untuk menghindari efek silau', TRUE), +(19, 'PMN-CAH-10', 'Indeks Kesilauan Maksimum', 2, 'area_kerja', 'industri', 18, NULL, 19.00, 'UGR', 'Batas kesilauan yang dapat ditoleransi', TRUE); + +INSERT INTO sampling_plans (plan_id, plan_code, project_name, client_id, contact_person_id, request_date, planned_sampling_date, status, created_by, approved_by, approval_date, total_locations, total_parameters, remarks, created_at) VALUES +(1, 'SP-LX-2024-001', 'Monitoring Pencahayaan Ruang Kerja Triwulan I 2024', 1, NULL, '2024-01-05 09:00:00', '2024-01-20', 'approved', 4, 1, '2024-01-10 14:30:00', 10, 1, 'Monitoring rutin triwulanan sesuai PMK No.2 Tahun 2023', '2024-01-05 09:15:20'); + +INSERT INTO sampling_plan_locations (plan_location_id, plan_id, location_id, sampling_date, sampling_time, sampling_method_id, sampling_personnel_id, field_parameters, special_instructions, status, remarks) VALUES +(1, 1, 1, '2024-01-20', '09:00:00', 2, 3, 'Intensitas Cahaya', 'Pengukuran dilakukan saat kondisi pencahayaan normal (tidak ada maintenance lampu)', 'planned', 'Area kerja produksi utama'), +(2, 1, 2, '2024-01-20', '10:30:00', 2, 3, 'Intensitas Cahaya', 'Pengukuran dilakukan saat kondisi pencahayaan normal (tidak ada maintenance lampu)', 'planned', 'Area IPAL'), +(3, 1, NULL, '2024-01-20', '11:30:00', 2, 3, 'Intensitas Cahaya', 'Pengukuran pada area kantor administrasi', 'planned', 'Ruang administrasi lantai 2'), +(4, 1, NULL, '2024-01-20', '13:00:00', 2, 3, 'Intensitas Cahaya, Luminansi', 'Pengukuran pada area kerja dengan penggunaan komputer', 'planned', 'Ruang desain produk'), +(5, 1, NULL, '2024-01-20', '14:00:00', 2, 3, 'Intensitas Cahaya', 'Pengukuran pada area QC', 'planned', 'Laboratorium QC'); + +INSERT INTO sampling_plan_parameters (plan_parameter_id, plan_id, plan_location_id, parameter_id, container_id, preservation_id, quantity, unit_price, remarks) VALUES +(1, 1, 1, 16, NULL, NULL, 1, 75000.00, 'Pengukuran grid 3x3'), +(2, 1, 2, 16, NULL, NULL, 1, 75000.00, 'Pengukuran grid 3x3'), +(3, 1, 3, 16, NULL, NULL, 1, 75000.00, 'Pengukuran pada meja kerja utama'), +(4, 1, 4, 16, NULL, NULL, 1, 75000.00, 'Pengukuran pada meja kerja utama'), +(5, 1, 4, 17, NULL, NULL, 1, 85000.00, 'Pengukuran luminansi layar monitor'), +(6, 1, 5, 16, NULL, NULL, 1, 75000.00, 'Pengukuran pada area inspeksi produk'); + +INSERT INTO equipment_requisitions (requisition_id, requisition_code, plan_id, requisition_date, requested_by, approved_by, approval_date, sampling_date, return_date, status, remarks) VALUES +(1, 'REQ-LX-2024-001', 1, '2024-01-15 10:30:00', 4, 1, '2024-01-16 09:15:00', '2024-01-20', '2024-01-21', 'approved', 'Peralatan untuk monitoring pencahayaan PT. ITN'); + +INSERT INTO equipment_requisition_items (requisition_item_id, requisition_id, equipment_id, quantity, issued_quantity, issued_by, issued_date, returned_quantity, returned_condition, returned_date, verified_by, remarks) VALUES +(1, 1, 16, 1, 1, 8, '2024-01-19 15:00:00', NULL, NULL, NULL, NULL, 'Lux meter utama'), +(2, 1, 17, 1, 1, 8, '2024-01-19 15:00:00', NULL, NULL, NULL, NULL, 'Lux meter backup'), +(3, 1, 18, 1, 1, 8, '2024-01-19 15:00:00', NULL, NULL, NULL, NULL, 'Untuk pengukuran luminansi layar monitor'), +(4, 1, 20, 1, 1, 8, '2024-01-19 15:00:00', NULL, NULL, NULL, NULL, 'Peralatan penunjang grid mapping'); + +INSERT INTO measurement_results_light (result_id, sample_id, measurement_date, measurement_time, parameter_id, measurement_value, measurement_unit, measurement_point, weather_condition, light_source, ambient_condition, standard_id, is_compliant, analyst_id, verified_by, verification_date, remarks) VALUES +(1, 1, '2024-01-20', '09:15:00', 16, 325.50, 'Lux', 'Titik 1 (Depan)', 'Cerah', 'Lampu fluorescent + Cahaya alami', 'Tirai jendela dibuka 50%', 11, TRUE, 3, 2, '2024-01-21 10:00:00', 'Memenuhi standar Permenaker'), +(2, 1, '2024-01-20', '09:20:00', 16, 310.20, 'Lux', 'Titik 2 (Tengah)', 'Cerah', 'Lampu fluorescent + Cahaya alami', 'Tirai jendela dibuka 50%', 11, TRUE, 3, 2, '2024-01-21 10:00:00', 'Memenuhi standar Permenaker'), +(3, 1, '2024-01-20', '09:25:00', 16, 290.80, 'Lux', 'Titik 3 (Belakang)', 'Cerah', 'Lampu fluorescent + Cahaya alami', 'Tirai jendela dibuka 50%', 11, TRUE, 3, 2, '2024-01-21 10:00:00', 'Memenuhi standar Permenaker'), +(4, 2, '2024-01-20', '10:45:00', 16, 180.40, 'Lux', 'Titik 1 (Pintu Masuk)', 'Cerah', 'Lampu LED', 'Indoor, pencahayaan buatan', 10, TRUE, 3, 2, '2024-01-21 10:15:00', 'Memenuhi standar untuk pekerjaan kasar'), +(5, 2, '2024-01-20', '10:50:00', 16, 165.30, 'Lux', 'Titik 2 (Area Kontrol)', 'Cerah', 'Lampu LED', 'Indoor, pencahayaan buatan', 10, TRUE, 3, 2, '2024-01-21 10:15:00', 'Memenuhi standar untuk pekerjaan kasar'), +(6, 4, '2024-01-20', '13:15:00', 17, 120.50, 'cd/m²', 'Layar Monitor 1', 'Cerah', 'Layar Monitor', 'Indoor, pencahayaan buatan dan alami', 18, TRUE, 3, 2, '2024-01-21 10:30:00', 'Luminansi layar dalam batas aman'); diff --git a/noise_measurement_database.sql b/noise_measurement_database.sql new file mode 100644 index 0000000..d88acf0 --- /dev/null +++ b/noise_measurement_database.sql @@ -0,0 +1,246 @@ +-- Database Structure and Sample Data for Environmental Noise Measurement +-- Based on PMK RI No.2 Tahun 2023 + +-- ------------------------------------------------------------------------------ +-- Master Tables - Noise Specific +-- ------------------------------------------------------------------------------ + +-- Master Area Types +CREATE TABLE IF NOT EXISTS master_area_types ( + area_type_id INT PRIMARY KEY, + area_type_name VARCHAR(100) NOT NULL, + description TEXT, + status BOOLEAN DEFAULT TRUE, + input_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + input_user VARCHAR(50) +); + +-- Master Noise Quality Standards +CREATE TABLE IF NOT EXISTS master_noise_standards ( + standard_id INT PRIMARY KEY, + regulation_id INT NOT NULL, + area_type_id INT NOT NULL, + standard_value DECIMAL(5, 1) NOT NULL, + unit VARCHAR(10) DEFAULT 'dB(A)', + measurement_time VARCHAR(50), + description TEXT, + status BOOLEAN DEFAULT TRUE, + input_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + input_user VARCHAR(50), + FOREIGN KEY (regulation_id) REFERENCES master_regulations(regulation_id), + FOREIGN KEY (area_type_id) REFERENCES master_area_types(area_type_id) +); + +-- Master Noise Measurement Methods +CREATE TABLE IF NOT EXISTS master_noise_methods ( + method_id INT PRIMARY KEY, + method_code VARCHAR(50) NOT NULL, + method_name VARCHAR(255) NOT NULL, + description TEXT, + standard_reference VARCHAR(100), + status BOOLEAN DEFAULT TRUE, + input_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + input_user VARCHAR(50) +); + +-- Master Noise Measurement Equipment +CREATE TABLE IF NOT EXISTS master_noise_equipment ( + equipment_id INT PRIMARY KEY, + equipment_code VARCHAR(20) NOT NULL, + equipment_name VARCHAR(100) NOT NULL, + equipment_type VARCHAR(50), + brand VARCHAR(100), + model VARCHAR(100), + serial_number VARCHAR(100), + accuracy_type VARCHAR(20), -- Type 0, 1, 2 for SLM + specifications TEXT, + calibration_date DATE, + next_calibration_date DATE, + calibration_status VARCHAR(20), + certificate_file VARCHAR(255), + status BOOLEAN DEFAULT TRUE, + input_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + input_user VARCHAR(50) +); + +-- ------------------------------------------------------------------------------ +-- Transaction Tables - Noise Specific +-- ------------------------------------------------------------------------------ + +-- Noise Sampling Plan +CREATE TABLE IF NOT EXISTS trx_noise_sampling_plan ( + sampling_plan_id INT PRIMARY KEY, + sampling_plan_code VARCHAR(50) NOT NULL, + project_name VARCHAR(255) NOT NULL, + client_id INT NOT NULL, + planned_sampling_date DATE NOT NULL, + sampling_location TEXT NOT NULL, + point_count INT, + approval_status VARCHAR(20) DEFAULT 'DRAFT', + notes TEXT, + input_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + input_user VARCHAR(50) +); + +-- Noise Measurement Results +CREATE TABLE IF NOT EXISTS trx_noise_measurement_results ( + measurement_id INT PRIMARY KEY, + sampling_plan_id INT NOT NULL, + report_code VARCHAR(50) NOT NULL, + sampling_date DATE NOT NULL, + start_time TIME, + end_time TIME, + weather_condition VARCHAR(100), + temperature DECIMAL(5, 2), + humidity DECIMAL(5, 2), + wind_speed DECIMAL(5, 2), + wind_direction VARCHAR(10), + sampling_officers VARCHAR(100), + report_status VARCHAR(20) DEFAULT 'DRAFT', + notes TEXT, + input_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + input_user VARCHAR(50), + FOREIGN KEY (sampling_plan_id) REFERENCES trx_noise_sampling_plan(sampling_plan_id) +); + +-- Noise Measurement Details +CREATE TABLE IF NOT EXISTS trx_noise_measurement_details ( + measurement_detail_id INT PRIMARY KEY, + measurement_id INT NOT NULL, + point_code VARCHAR(20) NOT NULL, + location_name VARCHAR(255) NOT NULL, + area_description TEXT, + area_type_id INT NOT NULL, + latitude DECIMAL(10, 6), + longitude DECIMAL(10, 6), + measurement_height DECIMAL(4, 2), + distance_from_source DECIMAL(6, 2), + noise_source TEXT, + noise_characteristics VARCHAR(50), -- Continuous, Intermittent, Impulsive, etc. + method_id INT NOT NULL, + equipment_id INT NOT NULL, + day_value DECIMAL(5, 1) NOT NULL, -- Ld (day) + evening_value DECIMAL(5, 1) NOT NULL, -- Le (evening) + night_value DECIMAL(5, 1) NOT NULL, -- Ln (night) + leq24_value DECIMAL(5, 1) NOT NULL, -- Leq 24 hours + standard_id INT NOT NULL, + compliance_status VARCHAR(20), + recommendations TEXT, + notes TEXT, + input_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + input_user VARCHAR(50), + FOREIGN KEY (measurement_id) REFERENCES trx_noise_measurement_results(measurement_id), + FOREIGN KEY (area_type_id) REFERENCES master_area_types(area_type_id), + FOREIGN KEY (method_id) REFERENCES master_noise_methods(method_id), + FOREIGN KEY (equipment_id) REFERENCES master_noise_equipment(equipment_id), + FOREIGN KEY (standard_id) REFERENCES master_noise_standards(standard_id) +); + +-- Noise Control Recommendations +CREATE TABLE IF NOT EXISTS trx_noise_control_recommendations ( + recommendation_id INT PRIMARY KEY, + measurement_detail_id INT NOT NULL, + control_type VARCHAR(50) NOT NULL, -- Engineering, Administrative, PPE + control_description TEXT NOT NULL, + priority INT, + estimated_cost DECIMAL(12, 2), + estimated_reduction DECIMAL(5, 1), + implementation_status VARCHAR(20) DEFAULT 'PLANNED', + input_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + input_user VARCHAR(50), + FOREIGN KEY (measurement_detail_id) REFERENCES trx_noise_measurement_details(measurement_detail_id) +); + +-- ------------------------------------------------------------------------------ +-- Sample Data Insertion - Master Tables +-- ------------------------------------------------------------------------------ + +-- Insert Data Master Area Types +INSERT INTO master_area_types (area_type_id, area_type_name, description, status, input_user) +VALUES +(1, 'Residential Areas', 'Residential housing and settlements', TRUE, 'admin'), +(2, 'Commercial and Trade Areas', 'Commercial and service areas, including offices', TRUE, 'admin'), +(3, 'Office and Commercial Areas', 'Office and commercial areas', TRUE, 'admin'), +(4, 'Industrial Areas', 'Manufacturing industrial areas', TRUE, 'admin'), +(5, 'Hospitals and Healthcare Facilities', 'Hospitals, health centers, and other healthcare facilities', TRUE, 'admin'), +(6, 'Schools and Educational Facilities', 'Educational areas including schools, madrasas, colleges', TRUE, 'admin'), +(7, 'Places of Worship', 'Worship areas such as mosques, churches, temples, and other religious buildings', TRUE, 'admin'); + +-- Insert Data Master Noise Standards +INSERT INTO master_noise_standards (standard_id, regulation_id, area_type_id, standard_value, unit, measurement_time, description, status, input_user) +VALUES +(1, 1, 1, 55.0, 'dB(A)', 'Leq 24 hours', 'Noise quality standard for residential areas', TRUE, 'admin'), +(2, 1, 2, 70.0, 'dB(A)', 'Leq 24 hours', 'Noise quality standard for commercial and trade areas', TRUE, 'admin'), +(3, 1, 3, 65.0, 'dB(A)', 'Leq 24 hours', 'Noise quality standard for office and commercial areas', TRUE, 'admin'), +(4, 1, 4, 70.0, 'dB(A)', 'Leq 24 hours', 'Noise quality standard for industrial areas', TRUE, 'admin'), +(5, 1, 5, 55.0, 'dB(A)', 'Leq 24 hours', 'Noise quality standard for hospitals and healthcare facilities', TRUE, 'admin'), +(6, 1, 6, 55.0, 'dB(A)', 'Leq during school hours', 'Noise quality standard for schools and educational facilities', TRUE, 'admin'), +(7, 1, 7, 55.0, 'dB(A)', 'Leq during worship times', 'Noise quality standard for places of worship', TRUE, 'admin'); + +-- Insert Data Master Noise Measurement Methods +INSERT INTO master_noise_methods (method_id, method_code, method_name, description, standard_reference, status, input_user) +VALUES +(1, 'SNI-7231-2009', 'SNI 7231:2009 - Environmental Noise Measurement Method', 'Method for measuring environmental noise levels using Sound Level Meter', 'SNI 7231:2009', TRUE, 'admin'), +(2, 'KEPMEN-LH-48-1996', 'Ministry of Environment Decree No. 48 of 1996 - Appendix II', 'Noise level measurement method based on the Ministry of Environment Decree', 'Ministry of Environment Decree No.48 of 1996', TRUE, 'admin'); + +-- Insert Data Master Noise Measurement Equipment +INSERT INTO master_noise_equipment (equipment_id, equipment_code, equipment_name, equipment_type, brand, model, serial_number, accuracy_type, specifications, calibration_date, next_calibration_date, calibration_status, certificate_file, status, input_user) +VALUES +(1, 'SLM-01', 'Sound Level Meter', 'SLM', 'RION', 'NL-52', '12345678', 'Type 1', 'Range: 20-130 dB, Accuracy: ±1.0 dB, Frequency range: 20 Hz - 20 kHz', '2024-02-15', '2025-02-15', 'VALID', '/documents/calibration/slm_rion_2024.pdf', TRUE, 'admin'), +(2, 'CAL-01', 'Acoustic Calibrator', 'Calibrator', 'RION', 'NC-74', '87654321', 'Class 1', 'Calibration level: 94 dB, Accuracy: ±0.3 dB', '2024-02-15', '2025-02-15', 'VALID', '/documents/calibration/cal_rion_2024.pdf', TRUE, 'admin'), +(3, 'SLM-02', 'Sound Level Meter', 'SLM', 'Cirrus', 'CR171B', 'CR123456', 'Type 1', 'Range: 20-140 dB, Accuracy: ±0.5 dB, Frequency range: 10 Hz - 20 kHz', '2023-11-20', '2024-11-20', 'VALID', '/documents/calibration/slm_cirrus_2023.pdf', TRUE, 'admin'), +(4, 'WS-01', 'Weather Station', 'Weather Meter', 'Kestrel', '5500', 'KW123456', 'N/A', 'Wind speed, direction, temperature, humidity, pressure measurement', '2023-10-10', '2024-10-10', 'VALID', '/documents/calibration/weather_kestrel_2023.pdf', TRUE, 'admin'); + +-- ------------------------------------------------------------------------------ +-- Sample Data Insertion - Transaction Tables +-- ------------------------------------------------------------------------------ + +-- Sample Noise Sampling Plan +INSERT INTO trx_noise_sampling_plan (sampling_plan_id, sampling_plan_code, project_name, client_id, planned_sampling_date, sampling_location, point_count, approval_status, notes, input_date, input_user) +VALUES +(1, 'SP-NOISE-2024-001', 'Environmental Noise Measurement at PT. Integrated Manufacturing Industries', 201, '2024-06-10', 'PT. Integrated Manufacturing Industries, Industrial Zone Block C5, Karawang, West Java', 6, 'APPROVED', 'Environmental noise measurement for compliance with standards', '2024-06-01 09:00:00', 'supervisor'); + +-- Sample Noise Measurement Results +INSERT INTO trx_noise_measurement_results (measurement_id, sampling_plan_id, report_code, sampling_date, start_time, end_time, weather_condition, temperature, humidity, wind_speed, wind_direction, sampling_officers, report_status, notes, input_date, input_user) +VALUES +(1, 1, 'LHU/NOISE/06/2024/003', '2024-06-10', '08:00:00', '17:00:00', 'Sunny', 30.0, 65.0, 1.5, 'East', 'Agus Setiawan, Dina Wijaya', 'FINAL', 'Measurement proceeded smoothly as planned', '2024-06-10 17:30:00', 'analyst'); + +-- Sample Noise Measurement Details +INSERT INTO trx_noise_measurement_details (measurement_detail_id, measurement_id, point_code, location_name, area_description, area_type_id, latitude, longitude, measurement_height, distance_from_source, noise_source, noise_characteristics, method_id, equipment_id, day_value, evening_value, night_value, leq24_value, standard_id, compliance_status, recommendations, notes, input_date, input_user) +VALUES +-- Main Factory Entrance +(1, 1, 'NL-1', 'Main Factory Entrance', 'Main factory gate area, moderate traffic level', 4, -6.372500, 107.524167, 1.5, 3.0, 'Vehicle traffic, loading/unloading activities', 'Intermittent', 1, 1, 67.8, 65.2, 62.1, 66.3, 4, 'COMPLY', '', 'Noise is quite high during morning and evening peak hours', '2024-06-10 17:35:00', 'analyst'), + +-- Production Building +(2, 1, 'NL-2', 'Production Building', 'Main production building area, high activity level', 4, -6.372778, 107.524444, 1.5, 1.0, 'Production machinery, stamping, air compressors', 'Continuous, Impulsive', 1, 1, 73.4, 72.1, 68.5, 72.2, 4, 'NOT_COMPLY', 'Install sound absorbers, check machine maintenance', 'High noise from stamping machines and compressors', '2024-06-10 17:40:00', 'analyst'), + +-- Office Building +(3, 1, 'NL-3', 'Office Building', 'Administrative office area, active HVAC system', 3, -6.372944, 107.525000, 1.5, 5.0, 'HVAC system, general office activities', 'Continuous, Low Frequency', 1, 1, 64.5, 62.3, 58.7, 63.2, 3, 'COMPLY', '', 'Noise primarily from air conditioning system', '2024-06-10 17:45:00', 'analyst'), + +-- Facility Boundary (East) +(4, 1, 'NL-4', 'Facility Boundary (East)', 'Eastern factory boundary, close to public road', 4, -6.373111, 107.526111, 1.5, 10.0, 'Factory operations, public road traffic', 'Intermittent', 1, 1, 68.9, 67.2, 65.6, 67.8, 4, 'COMPLY', '', 'Highest noise from road traffic', '2024-06-10 17:50:00', 'analyst'), + +-- Power Generator Area +(5, 1, 'NL-5', 'Power Generator Area', 'Generator area, very high noise level', 4, -6.373278, 107.524722, 1.5, 1.0, 'Power generators, cooling systems', 'Continuous, Tonal', 1, 1, 78.6, 77.5, 76.3, 77.9, 4, 'NOT_COMPLY', 'Install enclosure, add acoustic insulation', 'Noise very high even outside generator area', '2024-06-10 17:55:00', 'analyst'), + +-- Nearest Residential Area +(6, 1, 'NL-6', 'Nearest Residential Area', 'Nearest residential area to factory', 1, -6.374167, 107.527222, 1.5, 300.0, 'Factory noise, general traffic', 'Intermittent, Background', 1, 1, 57.3, 55.6, 52.1, 55.9, 1, 'NOT_COMPLY', 'Install sound barriers, limit night operations', 'Factory noise still audible in residential area', '2024-06-10 18:00:00', 'analyst'); + +-- Sample Noise Control Recommendations +INSERT INTO trx_noise_control_recommendations (recommendation_id, measurement_detail_id, control_type, control_description, priority, estimated_cost, estimated_reduction, implementation_status, input_date, input_user) +VALUES +-- Recommendations for Production Building +(1, 2, 'Engineering Control', 'Installation of sound absorbers on walls and ceiling of production area', 1, 75000000.00, 3.5, 'PLANNED', '2024-06-15 09:00:00', 'analyst'), +(2, 2, 'Engineering Control', 'Installation of enclosure for stamping machines', 1, 120000000.00, 8.0, 'PLANNED', '2024-06-15 09:05:00', 'analyst'), +(3, 2, 'Administrative Control', 'Preventive maintenance program for production machinery', 2, 0.00, 2.0, 'PLANNED', '2024-06-15 09:10:00', 'analyst'), +(4, 2, 'PPE', 'Provision of ear muffs for workers in production area', 1, 15000000.00, 0.0, 'PLANNED', '2024-06-15 09:15:00', 'analyst'), + +-- Recommendations for Power Generator Area +(5, 5, 'Engineering Control', 'Installation of acoustic enclosure for generators', 1, 200000000.00, 15.0, 'PLANNED', '2024-06-15 09:20:00', 'analyst'), +(6, 5, 'Engineering Control', 'Installation of silencers on air intake and exhaust', 1, 85000000.00, 6.0, 'PLANNED', '2024-06-15 09:25:00', 'analyst'), +(7, 5, 'Administrative Control', 'Relocate generators further from office areas and property boundaries', 2, 350000000.00, 10.0, 'PLANNED', '2024-06-15 09:30:00', 'analyst'), + +-- Recommendations for Nearest Residential Area +(8, 6, 'Engineering Control', 'Installation of noise barrier along factory boundary facing residential area', 1, 180000000.00, 5.0, 'PLANNED', '2024-06-15 09:35:00', 'analyst'), +(9, 6, 'Administrative Control', 'Restriction of noisy equipment operation during night time', 1, 0.00, 3.0, 'PLANNED', '2024-06-15 09:40:00', 'analyst'), +(10, 6, 'Administrative Control', 'Regular noise monitoring program at residential boundary', 2, 30000000.00, 0.0, 'PLANNED', '2024-06-15 09:45:00', 'analyst'); \ No newline at end of file diff --git a/noise_report_template.html b/noise_report_template.html new file mode 100644 index 0000000..6e39bec --- /dev/null +++ b/noise_report_template.html @@ -0,0 +1,552 @@ + + + + + + Environmental Noise Measurement Report + + + +
+
LABORATORY REPORT
+
+ +
+

ENVIRONMENTAL TESTING LABORATORY

+

Jl. Laboratorium Lingkungan No. 123, Jakarta

+

Phone: (021) 555-1234, Email: info@env-lab.co.id

+

ACCREDITED KAN: LP-001-IDN

+
+
+ +
+

ENVIRONMENTAL NOISE MEASUREMENT REPORT

+

REPORT NUMBER: LHU/BISING/06/2024/003

+

Based on PMK RI No.2 Tahun 2023

+
+ +
+
1. CLIENT INFORMATION
+ + + + + + + + + + + + + + + + + +
Client NamePT. Industri Manufaktur Terpadu
AddressJl. Kawasan Industri Blok C5, Karawang, Jawa Barat
Contact PersonIr. Budi Pratama (Environmental Manager)
Request NumberREQ/2024/06/005
+
+ +
+
2. MEASUREMENT INFORMATION
+ + + + + + + + + + + + + + + + + +
Measurement DateJune 10, 2024
Measurement Time08:00 - 17:00 WIB
Measurement OfficersAgus Setiawan (Sampling Officer), Dina Wijaya (Technical Analyst)
Weather ConditionSunny, 30°C, Humidity 65%, Wind speed 1.5 m/s
+
+ +
+
3. NOISE QUALITY STANDARDS
+
+

According to PMK RI No.2 Tahun 2023, noise level standards are as follows:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AreaNoise Level StandardTime Unit
Residential Areas55 dB(A)Leq 24 hours
Commercial and Office Areas70 dB(A)Leq 24 hours
Industrial Areas70 dB(A)Leq 24 hours
Schools and Educational Institutions55 dB(A)Leq during school hours
Hospitals and Health Facilities55 dB(A)Leq 24 hours
Places of Worship55 dB(A)Leq during worship times
+

Note: Leq = Equivalent Continuous Sound Level

+
+
+ +
+
4. MEASUREMENT RESULTS
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
No.Sampling LocationArea DescriptionArea TypeNoise Level dB(A)Leq 24 hour
dB(A)
Standard
dB(A)
Compliance Status
Daytime
(Ld)
Evening
(Le)
Night
(Ln)
1NL-1Main Factory EntranceIndustrial67.865.262.166.370.0COMPLY
2NL-2Production BuildingIndustrial73.472.168.572.270.0NOT COMPLY
3NL-3Office BuildingCommercial64.562.358.763.270.0COMPLY
4NL-4Facility Boundary (East)Industrial68.967.265.667.870.0COMPLY
5NL-5Power Generator AreaIndustrial78.677.576.377.970.0NOT COMPLY
6NL-6Nearest Residential AreaResidential57.355.652.155.955.0NOT COMPLY
+ +

Notes:

+
    +
  • Daytime (Ld): 06:00 - 18:00
  • +
  • Evening (Le): 18:00 - 22:00
  • +
  • Night (Ln): 22:00 - 06:00
  • +
  • Leq 24 hour calculation: Leq = 10 × log [1/24 × (12 × 10Ld/10 + 4 × 10Le/10 + 8 × 10Ln/10)]
  • +
+ +
+

[Noise Level Distribution Chart - This would display a bar graph comparing measured noise levels against standards for each location]

+
+
+ +
+
5. MEASUREMENT METHOD
+ + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterMethodEquipmentCalibration Status
Noise LevelSNI 7231:2009Sound Level Meter Type 1 - RION NL-52 SN:12345678Valid until August 15, 2024
Acoustic CalibratorANSI/ASA S1.40-2006Calibrator RION NC-74 SN:87654321Valid until August 15, 2024
Weather ParametersIn-situ measurementWeather Station Kestrel 5500 SN:KW123456Valid until October 10, 2024
+
+ +
+
6. NOISE SOURCES AND CHARACTERISTICS
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Location IDMajor Noise SourcesNoise CharacteristicsDistance to Nearest Receptor
NL-1Vehicle movement, loading/unloading activitiesIntermittent200 m to office building
NL-2Production machinery, metal stamping, air compressorsContinuous, impulsive150 m to office building
NL-3HVAC systems, general office activitiesContinuous, low frequencyWithin receptor area
NL-4General facility operations, traffic on adjacent roadIntermittent100 m to residential area
NL-5Power generators, cooling systemsContinuous, tonal120 m to office building
NL-6Industrial facility noise, traffic noiseIntermittent, backgroundWithin receptor area
+
+ +
+
7. NOTES AND RECOMMENDATIONS
+

Based on the measurement results, the following findings and recommendations are provided:

+
    +
  1. Three measurement locations exceed the noise threshold limits according to PMK RI No.2 Tahun 2023.
  2. +
  3. For the Production Building (NL-2) with noise level of 72.2 dB(A) (exceeding the 70.0 dB(A) standard), it is recommended to: +
      +
    • Install acoustic barriers or enclosures around high-noise machinery
    • +
    • Implement regular maintenance program to reduce noise from machinery
    • +
    • Provide hearing protection for workers in this area
    • +
    • Consider rescheduling noisy operations to reduce night time noise levels
    • +
    +
  4. +
  5. For the Power Generator Area (NL-5) with noise level of 77.9 dB(A) (significantly exceeding the 70.0 dB(A) standard), it is recommended to: +
      +
    • Install acoustic enclosures around generators
    • +
    • Add sound-absorbing materials to walls and ceilings in the generator room
    • +
    • Install silencers on air intakes and exhausts
    • +
    • Consider relocating generators further from office areas and property boundaries
    • +
    +
  6. +
  7. For the Nearest Residential Area (NL-6) with noise level of 55.9 dB(A) (slightly exceeding the 55.0 dB(A) residential standard), it is recommended to: +
      +
    • Construct a noise barrier or vegetative buffer along property boundary facing residential areas
    • +
    • Limit night-time operations of noisy equipment
    • +
    • Develop a noise monitoring program for the residential area boundary
    • +
    • Establish a community liaison program to address noise concerns
    • +
    +
  8. +
  9. General recommendations for the facility: +
      +
    • Develop and implement a comprehensive noise management plan
    • +
    • Conduct regular noise training for employees
    • +
    • Establish procedures for maintenance of equipment to minimize noise
    • +
    • Conduct follow-up measurements after implementing noise control measures
    • +
    +
  10. +
+
+ +
+
8. REGULATION REFERENCES
+

This measurement report refers to:

+
    +
  1. Peraturan Menteri Kesehatan Republik Indonesia Nomor 2 Tahun 2023 tentang Standar Baku Mutu Kesehatan Lingkungan dan Persyaratan Kesehatan
  2. +
  3. SNI 7231:2009 regarding Environmental Noise Measurement Methods
  4. +
  5. Keputusan Menteri Lingkungan Hidup No. 48 Tahun 1996 tentang Baku Tingkat Kebisingan
  6. +
+
+ + + +
+

*END OF REPORT*

+

Page 1 of 1

+
+
+ + \ No newline at end of file diff --git a/particulate_measurement_database.sql b/particulate_measurement_database.sql new file mode 100644 index 0000000..cb81923 --- /dev/null +++ b/particulate_measurement_database.sql @@ -0,0 +1,289 @@ +-- Database Structure and Sample Data for Total Particulate Measurement +-- Based on PMK RI No.2 Tahun 2023 + +-- ------------------------------------------------------------------------------ +-- Master Tables - Particulate Specific +-- ------------------------------------------------------------------------------ + +-- Master Area Types +CREATE TABLE IF NOT EXISTS master_area_types ( + area_type_id INT PRIMARY KEY, + area_type_name VARCHAR(100) NOT NULL, + description TEXT, + status BOOLEAN DEFAULT TRUE, + input_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + input_user VARCHAR(50) +); + +-- Master Particulate Standards +CREATE TABLE IF NOT EXISTS master_particulate_standards ( + standard_id INT PRIMARY KEY, + regulation_id INT NOT NULL, + area_type_id INT NOT NULL, + parameter_code VARCHAR(20) NOT NULL, -- TSP, PM10, PM2.5 + standard_value DECIMAL(7, 2) NOT NULL, + unit VARCHAR(20) DEFAULT 'μg/Nm³', + averaging_time VARCHAR(50), + description TEXT, + status BOOLEAN DEFAULT TRUE, + input_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + input_user VARCHAR(50), + FOREIGN KEY (regulation_id) REFERENCES master_regulations(regulation_id), + FOREIGN KEY (area_type_id) REFERENCES master_area_types(area_type_id) +); + +-- Master Particulate Measurement Methods +CREATE TABLE IF NOT EXISTS master_particulate_methods ( + method_id INT PRIMARY KEY, + method_code VARCHAR(50) NOT NULL, + method_name VARCHAR(255) NOT NULL, + parameter_code VARCHAR(20) NOT NULL, -- TSP, PM10, PM2.5 + description TEXT, + standard_reference VARCHAR(100), + status BOOLEAN DEFAULT TRUE, + input_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + input_user VARCHAR(50) +); + +-- Master Particulate Measurement Equipment +CREATE TABLE IF NOT EXISTS master_particulate_equipment ( + equipment_id INT PRIMARY KEY, + equipment_code VARCHAR(20) NOT NULL, + equipment_name VARCHAR(100) NOT NULL, + equipment_type VARCHAR(50), + brand VARCHAR(100), + model VARCHAR(100), + serial_number VARCHAR(100), + parameter_measured VARCHAR(100), -- TSP, PM10, PM2.5, Multi-parameter + specifications TEXT, + flow_rate VARCHAR(50), + filter_type VARCHAR(100), + calibration_date DATE, + next_calibration_date DATE, + calibration_status VARCHAR(20), + certificate_file VARCHAR(255), + status BOOLEAN DEFAULT TRUE, + input_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + input_user VARCHAR(50) +); + +-- ------------------------------------------------------------------------------ +-- Transaction Tables - Particulate Specific +-- ------------------------------------------------------------------------------ + +-- Particulate Sampling Plan +CREATE TABLE IF NOT EXISTS trx_particulate_sampling_plan ( + sampling_plan_id INT PRIMARY KEY, + sampling_plan_code VARCHAR(50) NOT NULL, + project_name VARCHAR(255) NOT NULL, + client_id INT NOT NULL, + planned_sampling_date DATE NOT NULL, + sampling_location TEXT NOT NULL, + point_count INT, + parameters VARCHAR(100), -- Comma separated list: TSP, PM10, PM2.5 + approval_status VARCHAR(20) DEFAULT 'DRAFT', + notes TEXT, + input_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + input_user VARCHAR(50) +); + +-- Particulate Measurement Results - Header +CREATE TABLE IF NOT EXISTS trx_particulate_measurement_results ( + measurement_id INT PRIMARY KEY, + sampling_plan_id INT NOT NULL, + report_code VARCHAR(50) NOT NULL, + sampling_date DATE NOT NULL, + start_time TIME, + end_time TIME, + weather_condition VARCHAR(100), + temperature DECIMAL(5, 2), + humidity DECIMAL(5, 2), + wind_speed DECIMAL(5, 2), + wind_direction VARCHAR(10), + pressure DECIMAL(7, 2), + sampling_officers VARCHAR(100), + report_status VARCHAR(20) DEFAULT 'DRAFT', + notes TEXT, + input_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + input_user VARCHAR(50), + FOREIGN KEY (sampling_plan_id) REFERENCES trx_particulate_sampling_plan(sampling_plan_id) +); + +-- Particulate Measurement Details +CREATE TABLE IF NOT EXISTS trx_particulate_measurement_details ( + measurement_detail_id INT PRIMARY KEY, + measurement_id INT NOT NULL, + point_code VARCHAR(20) NOT NULL, + location_name VARCHAR(255) NOT NULL, + area_description TEXT, + area_type_id INT NOT NULL, + latitude DECIMAL(10, 6), + longitude DECIMAL(10, 6), + sampling_height DECIMAL(4, 2), + sampling_duration DECIMAL(5, 2), + parameter_code VARCHAR(20) NOT NULL, -- TSP, PM10, PM2.5 + method_id INT NOT NULL, + equipment_id INT NOT NULL, + filter_id VARCHAR(50), + initial_weight DECIMAL(10, 5), + final_weight DECIMAL(10, 5), + flow_rate DECIMAL(7, 2), + volume_sampled DECIMAL(10, 2), + result_value DECIMAL(8, 2) NOT NULL, + standard_id INT NOT NULL, + compliance_status VARCHAR(20), + major_sources TEXT, + recommendations TEXT, + notes TEXT, + input_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + input_user VARCHAR(50), + FOREIGN KEY (measurement_id) REFERENCES trx_particulate_measurement_results(measurement_id), + FOREIGN KEY (area_type_id) REFERENCES master_area_types(area_type_id), + FOREIGN KEY (method_id) REFERENCES master_particulate_methods(method_id), + FOREIGN KEY (equipment_id) REFERENCES master_particulate_equipment(equipment_id), + FOREIGN KEY (standard_id) REFERENCES master_particulate_standards(standard_id) +); + +-- Dust Control Recommendations +CREATE TABLE IF NOT EXISTS trx_dust_control_recommendations ( + recommendation_id INT PRIMARY KEY, + measurement_detail_id INT NOT NULL, + control_type VARCHAR(50) NOT NULL, -- Engineering, Administrative, PPE + control_description TEXT NOT NULL, + priority INT, + estimated_cost DECIMAL(12, 2), + estimated_reduction DECIMAL(5, 1), + implementation_status VARCHAR(20) DEFAULT 'PLANNED', + input_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + input_user VARCHAR(50), + FOREIGN KEY (measurement_detail_id) REFERENCES trx_particulate_measurement_details(measurement_detail_id) +); + +-- ------------------------------------------------------------------------------ +-- Sample Data Insertion - Master Tables +-- ------------------------------------------------------------------------------ + +-- Insert Data Master Area Types +INSERT INTO master_area_types (area_type_id, area_type_name, description, status, input_user) +VALUES +(1, 'Industrial Areas', 'Manufacturing and industrial activity areas', TRUE, 'admin'), +(2, 'Residential Areas', 'Residential housing and settlements', TRUE, 'admin'), +(3, 'Office and Commercial Areas', 'Office buildings and commercial areas', TRUE, 'admin'), +(4, 'Parks and Green Areas', 'Public parks and green spaces', TRUE, 'admin'), +(5, 'Sensitive Areas', 'Hospitals, schools, and other sensitive locations', TRUE, 'admin'); + +-- Insert Data Master Particulate Standards +INSERT INTO master_particulate_standards (standard_id, regulation_id, area_type_id, parameter_code, standard_value, unit, averaging_time, description, status, input_user) +VALUES +-- TSP/Total Particulate Matter Standards +(1, 1, 1, 'TSP', 230.00, 'μg/Nm³', '24 hours', 'Industrial areas TSP standard', TRUE, 'admin'), +(2, 1, 2, 'TSP', 90.00, 'μg/Nm³', '24 hours', 'Residential areas TSP standard', TRUE, 'admin'), +(3, 1, 3, 'TSP', 90.00, 'μg/Nm³', '24 hours', 'Office and commercial areas TSP standard', TRUE, 'admin'), +(4, 1, 4, 'TSP', 90.00, 'μg/Nm³', '24 hours', 'Parks and green areas TSP standard', TRUE, 'admin'), +(5, 1, 5, 'TSP', 90.00, 'μg/Nm³', '24 hours', 'Sensitive areas TSP standard', TRUE, 'admin'), + +-- PM10 Standards +(6, 1, 1, 'PM10', 150.00, 'μg/Nm³', '24 hours', 'Industrial areas PM10 standard', TRUE, 'admin'), +(7, 1, 2, 'PM10', 75.00, 'μg/Nm³', '24 hours', 'Residential areas PM10 standard', TRUE, 'admin'), +(8, 1, 3, 'PM10', 75.00, 'μg/Nm³', '24 hours', 'Office and commercial areas PM10 standard', TRUE, 'admin'), +(9, 1, 4, 'PM10', 75.00, 'μg/Nm³', '24 hours', 'Parks and green areas PM10 standard', TRUE, 'admin'), +(10, 1, 5, 'PM10', 75.00, 'μg/Nm³', '24 hours', 'Sensitive areas PM10 standard', TRUE, 'admin'), + +-- PM2.5 Standards +(11, 1, 1, 'PM2.5', 55.00, 'μg/Nm³', '24 hours', 'Industrial areas PM2.5 standard', TRUE, 'admin'), +(12, 1, 2, 'PM2.5', 55.00, 'μg/Nm³', '24 hours', 'Residential areas PM2.5 standard', TRUE, 'admin'), +(13, 1, 3, 'PM2.5', 55.00, 'μg/Nm³', '24 hours', 'Office and commercial areas PM2.5 standard', TRUE, 'admin'), +(14, 1, 4, 'PM2.5', 55.00, 'μg/Nm³', '24 hours', 'Parks and green areas PM2.5 standard', TRUE, 'admin'), +(15, 1, 5, 'PM2.5', 55.00, 'μg/Nm³', '24 hours', 'Sensitive areas PM2.5 standard', TRUE, 'admin'); + +-- Insert Data Master Particulate Measurement Methods +INSERT INTO master_particulate_methods (method_id, method_code, method_name, parameter_code, description, standard_reference, status, input_user) +VALUES +(1, 'SNI-7119.3-2005', 'High Volume Method for TSP', 'TSP', 'Gravimetric method for TSP using high volume sampler', 'SNI 19-7119.3-2005', TRUE, 'admin'), +(2, 'SNI-7119.15-2016', 'High Volume Method for PM10', 'PM10', 'Gravimetric method for PM10 using high volume sampler with PM10 inlet', 'SNI 19-7119.15-2016', TRUE, 'admin'), +(3, 'SNI-7119.14-2016', 'Gravimetric Method for PM2.5', 'PM2.5', 'Gravimetric method for PM2.5 using low volume sampler with PM2.5 inlet', 'SNI 19-7119.14-2016', TRUE, 'admin'), +(4, 'US-EPA-IO-2.1', 'EPA Method IO-2.1 for TSP', 'TSP', 'EPA Method for sampling TSP using high volume samplers', 'US EPA IO-2.1', TRUE, 'admin'), +(5, 'US-EPA-IO-3.1', 'EPA Method IO-3.1 for PM10', 'PM10', 'EPA Method for PM10 sampling', 'US EPA IO-3.1', TRUE, 'admin'); + +-- Insert Data Master Particulate Measurement Equipment +INSERT INTO master_particulate_equipment (equipment_id, equipment_code, equipment_name, equipment_type, brand, model, serial_number, parameter_measured, specifications, flow_rate, filter_type, calibration_date, next_calibration_date, calibration_status, certificate_file, status, input_user) +VALUES +(1, 'HVAS-01', 'High Volume Air Sampler', 'HVAS', 'Tisch Environmental', 'TE-5000', 'HV12345', 'TSP', 'Flow rate: 1.13-1.70 m³/min, Motor: Continuous duty brushes', '1.13-1.70 m³/min', 'Glass Fiber Filter 8×10 inch', '2024-04-05', '2025-04-05', 'VALID', '/documents/calibration/hvas_tisch_2024.pdf', TRUE, 'admin'), +(2, 'PM10-01', 'PM10 High Volume Sampler', 'PM10 HVAS', 'Tisch Environmental', 'TE-6070', 'PM10-7890', 'PM10', 'Flow rate: 1.13-1.70 m³/min, Size-selective inlet', '1.13-1.70 m³/min', 'Quartz Fiber Filter 8×10 inch', '2024-04-10', '2025-04-10', 'VALID', '/documents/calibration/pm10_tisch_2024.pdf', TRUE, 'admin'), +(3, 'PM25-01', 'Low Volume PM2.5 Sampler', 'PM2.5 LVS', 'BGI', 'PQ200', 'PQ-5678', 'PM2.5', 'Flow rate: 16.7 L/min, WINS impactor', '16.7 L/min', '47mm PTFE membrane filter', '2024-03-15', '2025-03-15', 'VALID', '/documents/calibration/pm25_bgi_2024.pdf', TRUE, 'admin'), +(4, 'MET-01', 'Weather Station', 'Weather Monitor', 'Davis', 'Vantage Pro2', 'WS78901', 'Meteorological Parameters', 'Temperature, humidity, pressure, wind speed/direction', 'N/A', 'N/A', '2024-03-15', '2025-03-15', 'VALID', '/documents/calibration/met_davis_2024.pdf', TRUE, 'admin'), +(5, 'BAL-01', 'Analytical Balance', 'Microbalance', 'Mettler Toledo', 'XPR2U', 'MT34567', 'Filter Weighing', 'Range: 0-2.1g, Readability: 0.1μg, Repeatability: 0.15μg', 'N/A', 'N/A', '2024-02-20', '2025-02-20', 'VALID', '/documents/calibration/bal_mettler_2024.pdf', TRUE, 'admin'); + +-- ------------------------------------------------------------------------------ +-- Sample Data Insertion - Transaction Tables +-- ------------------------------------------------------------------------------ + +-- Sample Particulate Sampling Plan +INSERT INTO trx_particulate_sampling_plan (sampling_plan_id, sampling_plan_code, project_name, client_id, planned_sampling_date, sampling_location, point_count, parameters, approval_status, notes, input_date, input_user) +VALUES +(1, 'SP-PART-2024-002', 'Total Particulate Measurement at PT. Integrated Manufacturing Industries', 201, '2024-06-15', 'PT. Integrated Manufacturing Industries, Industrial Zone Block C5, Karawang, West Java', 6, 'TSP,PM10', 'APPROVED', 'Particulate measurement for environmental compliance monitoring', '2024-06-05 10:00:00', 'supervisor'); + +-- Sample Particulate Measurement Results - Header +INSERT INTO trx_particulate_measurement_results (measurement_id, sampling_plan_id, report_code, sampling_date, start_time, end_time, weather_condition, temperature, humidity, wind_speed, wind_direction, pressure, sampling_officers, report_status, notes, input_date, input_user) +VALUES +(1, 1, 'LHU/PART/06/2024/005', '2024-06-15', '08:30:00', '16:30:00', 'Sunny', 31.0, 68.0, 1.2, 'North', 760.0, 'Rudi Hartono, Siti Fauziah', 'FINAL', 'Measurement conducted during normal operations', '2024-06-15 17:00:00', 'analyst'); + +-- Sample Particulate Measurement Details +INSERT INTO trx_particulate_measurement_details (measurement_detail_id, measurement_id, point_code, location_name, area_description, area_type_id, latitude, longitude, sampling_height, sampling_duration, parameter_code, method_id, equipment_id, filter_id, initial_weight, final_weight, flow_rate, volume_sampled, result_value, standard_id, compliance_status, major_sources, recommendations, notes, input_date, input_user) +VALUES +-- Main Factory Entrance - TSP +(1, 1, 'TPM-1', 'Main Factory Entrance', 'Main entrance with moderate traffic', 1, -6.372500, 107.524167, 1.5, 8.0, 'TSP', 1, 1, 'GF-20240615-01', 4.52130, 4.62875, 1.15, 552.0, 215.4, 1, 'COMPLY', 'Vehicle traffic, material transport activities', '', 'Moderate traffic flow during sampling', '2024-06-15 17:05:00', 'analyst'), + +-- Main Factory Entrance - PM10 +(2, 1, 'TPM-1', 'Main Factory Entrance', 'Main entrance with moderate traffic', 1, -6.372500, 107.524167, 1.5, 8.0, 'PM10', 2, 2, 'QF-20240615-01', 4.48730, 4.54947, 1.15, 552.0, 112.7, 6, 'COMPLY', 'Vehicle traffic, material transport activities', '', 'PM10 fraction shows significant contribution', '2024-06-15 17:10:00', 'analyst'), + +-- Production Area (Crusher Unit) - TSP +(3, 1, 'TPM-2', 'Production Area (Crusher Unit)', 'Area with crushing equipment and high dust generation', 1, -6.372778, 107.524444, 1.5, 8.0, 'TSP', 1, 1, 'GF-20240615-02', 4.51890, 4.67765, 1.15, 552.0, 287.6, 1, 'NOT_COMPLY', 'Crushing activities, material handling, conveyor transfer points', 'Install dust suppression systems, implement proper enclosure', 'Visible dust emissions during crusher operation', '2024-06-15 17:15:00', 'analyst'), + +-- Production Area (Crusher Unit) - PM10 +(4, 1, 'TPM-2', 'Production Area (Crusher Unit)', 'Area with crushing equipment and high dust generation', 1, -6.372778, 107.524444, 1.5, 8.0, 'PM10', 2, 2, 'QF-20240615-02', 4.49120, 4.57748, 1.15, 552.0, 156.3, 6, 'NOT_COMPLY', 'Crushing activities, material handling, conveyor transfer points', 'Install dust collection systems with adequate filtration', 'High respirable fraction indicates health concerns', '2024-06-15 17:20:00', 'analyst'), + +-- Office Building - TSP +(5, 1, 'TPM-3', 'Office Building', 'Administrative office area', 3, -6.372944, 107.525000, 1.5, 8.0, 'TSP', 1, 1, 'GF-20240615-03', 4.52670, 4.57255, 1.15, 552.0, 83.1, 3, 'COMPLY', 'Limited sources, mainly from HVAC system', '', 'Indoor air quality with minimal outdoor influence', '2024-06-15 17:25:00', 'analyst'), + +-- Office Building - PM10 +(6, 1, 'TPM-3', 'Office Building', 'Administrative office area', 3, -6.372944, 107.525000, 1.5, 8.0, 'PM10', 2, 2, 'QF-20240615-03', 4.48950, 4.51467, 1.15, 552.0, 45.6, 8, 'COMPLY', 'Limited sources, mainly from HVAC system', '', 'Low PM10 levels indicate good air filtration', '2024-06-15 17:30:00', 'analyst'), + +-- Eastern Facility Boundary - TSP +(7, 1, 'TPM-4', 'Eastern Facility Boundary', 'Eastern boundary of the facility', 1, -6.373111, 107.526111, 1.5, 8.0, 'TSP', 1, 1, 'GF-20240615-04', 4.53010, 4.62778, 1.15, 552.0, 176.8, 1, 'COMPLY', 'General facility operations, stockpiles, road dust', '', 'Unpaved areas contributing to dust levels', '2024-06-15 17:35:00', 'analyst'), + +-- Eastern Facility Boundary - PM10 +(8, 1, 'TPM-4', 'Eastern Facility Boundary', 'Eastern boundary of the facility', 1, -6.373111, 107.526111, 1.5, 8.0, 'PM10', 2, 2, 'QF-20240615-04', 4.49070, 4.53997, 1.15, 552.0, 89.3, 6, 'COMPLY', 'General facility operations, stockpiles, road dust', '', 'PM10 levels below industrial standard', '2024-06-15 17:40:00', 'analyst'), + +-- Material Storage Area - TSP +(9, 1, 'TPM-5', 'Material Storage Area', 'Raw material storage with open piles', 1, -6.373278, 107.524722, 1.5, 8.0, 'TSP', 1, 1, 'GF-20240615-05', 4.52230, 4.67025, 1.15, 552.0, 268.2, 1, 'NOT_COMPLY', 'Raw material stockpiles, loading/unloading operations', 'Cover stockpiles, implement water spraying', 'Wind-blown dust from uncovered material piles', '2024-06-15 17:45:00', 'analyst'), + +-- Material Storage Area - PM10 +(10, 1, 'TPM-5', 'Material Storage Area', 'Raw material storage with open piles', 1, -6.373278, 107.524722, 1.5, 8.0, 'PM10', 2, 2, 'QF-20240615-05', 4.48870, 4.56737, 1.15, 552.0, 142.5, 6, 'COMPLY', 'Raw material stockpiles, loading/unloading operations', 'Minimize material handling during high winds', 'PM10 fraction still within limits but elevated', '2024-06-15 17:50:00', 'analyst'), + +-- Nearest Residential Area - TSP +(11, 1, 'TPM-6', 'Nearest Residential Area', 'Residential area near the industrial facility', 2, -6.374167, 107.527222, 1.5, 8.0, 'TSP', 1, 1, 'GF-20240615-06', 4.52450, 4.57884, 1.15, 552.0, 98.5, 2, 'NOT_COMPLY', 'Industrial facility emissions, community activities', 'Establish vegetation buffer, improve dust control', 'Residential area ~500m from facility boundary', '2024-06-15 17:55:00', 'analyst'), + +-- Nearest Residential Area - PM10 +(12, 1, 'TPM-6', 'Nearest Residential Area', 'Residential area near the industrial facility', 2, -6.374167, 107.527222, 1.5, 8.0, 'PM10', 2, 2, 'QF-20240615-06', 4.49210, 4.52103, 1.15, 552.0, 52.4, 7, 'COMPLY', 'Industrial facility emissions, community activities', '', 'PM10 levels within residential standard', '2024-06-15 18:00:00', 'analyst'); + +-- Sample Dust Control Recommendations +INSERT INTO trx_dust_control_recommendations (recommendation_id, measurement_detail_id, control_type, control_description, priority, estimated_cost, estimated_reduction, implementation_status, input_date, input_user) +VALUES +-- Recommendations for Production Area (Crusher Unit) +(1, 3, 'Engineering Control', 'Installation of water spray systems at crusher loading and discharge points', 1, 45000000.00, 30.0, 'PLANNED', '2024-06-20 09:00:00', 'analyst'), +(2, 3, 'Engineering Control', 'Enclosure of crushing and screening equipment with appropriate dust collection', 1, 120000000.00, 50.0, 'PLANNED', '2024-06-20 09:05:00', 'analyst'), +(3, 3, 'Administrative Control', 'Implement preventive maintenance program for dust collection systems', 2, 0.00, 15.0, 'PLANNED', '2024-06-20 09:10:00', 'analyst'), +(4, 4, 'PPE', 'Provision of N95 respirators for workers in crushing area', 1, 15000000.00, 0.0, 'PLANNED', '2024-06-20 09:15:00', 'analyst'), + +-- Recommendations for Material Storage Area +(5, 9, 'Engineering Control', 'Installation of wind barriers around material storage area', 1, 75000000.00, 25.0, 'PLANNED', '2024-06-20 09:20:00', 'analyst'), +(6, 9, 'Engineering Control', 'Coverage of stockpiles with tarpaulins or other appropriate materials', 1, 30000000.00, 35.0, 'PLANNED', '2024-06-20 09:25:00', 'analyst'), +(7, 9, 'Engineering Control', 'Installation of fixed water sprinkler system for storage area', 2, 60000000.00, 30.0, 'PLANNED', '2024-06-20 09:30:00', 'analyst'), +(8, 9, 'Administrative Control', 'Implement SOP for minimizing drop heights during material transfer', 1, 5000000.00, 10.0, 'PLANNED', '2024-06-20 09:35:00', 'analyst'), + +-- Recommendations for Nearest Residential Area +(9, 11, 'Engineering Control', 'Establishment of vegetation buffer zone between facility and residential areas', 1, 90000000.00, 15.0, 'PLANNED', '2024-06-20 09:40:00', 'analyst'), +(10, 11, 'Engineering Control', 'Paving of unpaved roads near residential boundary', 2, 120000000.00, 20.0, 'PLANNED', '2024-06-20 09:45:00', 'analyst'), +(11, 11, 'Administrative Control', 'Implementation of community notification system for high-dust activities', 1, 25000000.00, 0.0, 'PLANNED', '2024-06-20 09:50:00', 'analyst'), +(12, 11, 'Administrative Control', 'Schedule dust-generating activities based on wind direction and speed', 1, 0.00, 10.0, 'PLANNED', '2024-06-20 09:55:00', 'analyst'); \ No newline at end of file diff --git a/particulate_report_template.html b/particulate_report_template.html new file mode 100644 index 0000000..d7e658a --- /dev/null +++ b/particulate_report_template.html @@ -0,0 +1,534 @@ + + + + + + Total Particulate Measurement Report + + + +
+
LABORATORY REPORT
+
+ +
+

ENVIRONMENTAL TESTING LABORATORY

+

Jl. Laboratorium Lingkungan No. 123, Jakarta

+

Phone: (021) 555-1234, Email: info@env-lab.co.id

+

ACCREDITED KAN: LP-001-IDN

+
+
+ +
+

TOTAL PARTICULATE MATTER (TPM) MEASUREMENT REPORT

+

REPORT NUMBER: LHU/PART/06/2024/005

+

Based on PMK RI No.2 Tahun 2023

+
+ +
+
1. CLIENT INFORMATION
+ + + + + + + + + + + + + + + + + +
Client NamePT. Industri Manufaktur Terpadu
AddressJl. Kawasan Industri Blok C5, Karawang, Jawa Barat
Contact PersonIr. Budi Pratama (Environmental Manager)
Request NumberREQ/2024/06/008
+
+ +
+
2. MEASUREMENT INFORMATION
+ + + + + + + + + + + + + + + + + +
Measurement DateJune 15, 2024
Measurement Time08:30 - 16:30 WIB
Measurement OfficersRudi Hartono (Sampling Officer), Siti Fauziah (Technical Analyst)
Weather ConditionSunny, 31°C, Humidity 68%, Wind speed 1.2 m/s
+
+ +
+
3. PARTICULATE MATTER QUALITY STANDARDS
+
+

According to PMK RI No.2 Tahun 2023, total particulate matter (TPM) standards are as follows:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Area TypeTPM StandardAveraging Time
Industrial Areas230 μg/Nm³24 hours
Residential Areas90 μg/Nm³24 hours
Office and Commercial Areas90 μg/Nm³24 hours
Parks and Green Areas90 μg/Nm³24 hours
Sensitive Areas (Hospitals, Schools)90 μg/Nm³24 hours
+

Note: μg/Nm³ = micrograms per normal cubic meter at 25°C and 760 mmHg

+
+
+ +
+
4. MEASUREMENT RESULTS
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
No.Sampling LocationArea TypeSampling Time
(hours)
ParametersStandard
(μg/Nm³)
Compliance Status
TSP/TPM
(μg/Nm³)
PM10
(μg/Nm³)
1TPM-1Main Factory Entrance8215.4112.7230COMPLY
2TPM-2Production Area (Crusher Unit)8287.6156.3230NOT COMPLY
3TPM-3Office Building883.145.690COMPLY
4TPM-4Eastern Facility Boundary8176.889.3230COMPLY
5TPM-5Material Storage Area8268.2142.5230NOT COMPLY
6TPM-6Nearest Residential Area898.552.490NOT COMPLY
+ +

Notes:

+
    +
  • TSP/TPM = Total Suspended Particulates/Total Particulate Matter
  • +
  • PM10 = Particulate Matter with diameter ≤ 10 μm
  • +
  • Results are the average of measurements taken throughout the sampling period
  • +
  • All measurements have been corrected to standard conditions (25°C, 760 mmHg)
  • +
+ +
+

[Particulate Concentration Chart - This would display a bar graph comparing measured particulate levels against standards for each location]

+
+
+ +
+
5. MEASUREMENT METHOD
+ + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterMethodEquipmentCalibration Status
Total Particulate Matter (TPM)SNI 19-7119.3-2005High Volume Air Sampler (HVAS) Tisch TE-5000, SN: HV12345Valid until October 5, 2024
PM10SNI 19-7119.15-2016PM10 Hi-Vol Sampler Tisch TE-6070, SN: PM10-7890Valid until October 10, 2024
Weather ParametersDirect measurementWeather Station Davis Vantage Pro2, SN: WS78901Valid until September 15, 2024
+
+ +
+
6. PARTICULATE SOURCES AND METEOROLOGICAL CONDITIONS
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Location IDMajor Particulate SourcesWind DirectionAdditional Observations
TPM-1Vehicle traffic, material transport activitiesNorthwest (NW)Traffic intensity: medium
TPM-2Crushing activities, material handling, conveyor transfer pointsNorth (N)Visible dust emissions during crusher operation
TPM-3Limited sources, mainly from HVAC systemEast (E)Indoor air quality; minimal outdoor influence
TPM-4General facility operations, stockpiles, road dustSoutheast (SE)Unpaved areas contributing to dust
TPM-5Raw material stockpiles, loading/unloading operationsSouthwest (SW)Wind-blown dust from uncovered material piles
TPM-6Industrial facility emissions, community activitiesWest (W)Residential area ~500m from facility boundary
+
+ +
+
7. NOTES AND RECOMMENDATIONS
+

Based on the measurement results, the following findings and recommendations are provided:

+
    +
  1. Three measurement locations exceed the particulate threshold limits according to PMK RI No.2 Tahun 2023.
  2. +
  3. For the Production Area (Crusher Unit) with TPM level of 287.6 μg/Nm³ (exceeding the 230 μg/Nm³ standard), it is recommended to: +
      +
    • Install additional dust suppression systems (water sprays) at crusher loading and discharge points
    • +
    • Implement proper enclosure of crushing and screening equipment
    • +
    • Increase frequency of dust collection system maintenance
    • +
    • Consider installation of local exhaust ventilation with dust collectors
    • +
    +
  4. +
  5. For the Material Storage Area with TPM level of 268.2 μg/Nm³ (exceeding the 230 μg/Nm³ standard), it is recommended to: +
      +
    • Cover or enclose raw material stockpiles to prevent wind erosion
    • +
    • Implement regular water spraying of storage areas during dry conditions
    • +
    • Establish windbreaks around storage areas
    • +
    • Minimize drop heights during material transfer operations
    • +
    +
  6. +
  7. For the Nearest Residential Area with TPM level of 98.5 μg/Nm³ (exceeding the 90 μg/Nm³ residential standard), it is recommended to: +
      +
    • Establish a vegetation buffer zone between the facility and residential areas
    • +
    • Improve dust control measures at the facility boundaries nearest to residential areas
    • +
    • Schedule dust-generating activities to consider wind direction and speed
    • +
    • Implement a community complaint response system and regular monitoring program
    • +
    +
  8. +
  9. General recommendations for the facility: +
      +
    • Develop and implement a comprehensive dust management plan
    • +
    • Pave unpaved roads and implement regular road cleaning
    • +
    • Install wheel washing stations at facility exits
    • +
    • Train employees on dust control practices and proper equipment operation
    • +
    • Conduct follow-up measurements after implementing dust control measures
    • +
    +
  10. +
+
+ +
+
8. REGULATION REFERENCES
+

This measurement report refers to:

+
    +
  1. Peraturan Menteri Kesehatan Republik Indonesia Nomor 2 Tahun 2023 tentang Standar Baku Mutu Kesehatan Lingkungan dan Persyaratan Kesehatan
  2. +
  3. SNI 19-7119.3-2005 regarding Ambient Air - Part 3: Method for Sampling and Measurement of Total Suspended Particulate Using High Volume Air Sampler
  4. +
  5. SNI 19-7119.15-2016 regarding Ambient Air Quality - Part 15: Method for Sampling and Measurement of PM10 Using High Volume Air Sampler with PM10 Inlet
  6. +
+
+ + + +
+

*END OF REPORT*

+

Page 1 of 1

+
+
+ + \ No newline at end of file diff --git a/total_particulate_report_template.html b/total_particulate_report_template.html new file mode 100644 index 0000000..91028a2 --- /dev/null +++ b/total_particulate_report_template.html @@ -0,0 +1,524 @@ + + + + + + Total Particulate Matter Measurement Report + + + +
+
LABORATORY REPORT
+
+ +
+

ENVIRONMENTAL TESTING LABORATORY

+

Jl. Laboratorium Lingkungan No. 123, Jakarta

+

Phone: (021) 555-1234, Email: info@env-lab.co.id

+

ACCREDITED KAN: LP-001-IDN

+
+
+ +
+

TOTAL PARTICULATE MATTER MEASUREMENT REPORT

+

REPORT NUMBER: LHU/TPM/06/2024/005

+

Based on PMK RI No.2 Tahun 2023

+
+ +
+
1. CLIENT INFORMATION
+ + + + + + + + + + + + + + + + + +
Client NamePT. Industrial Manufacturing Company
AddressJl. Industrial Zone Block D7, Bekasi, West Java
Contact PersonIr. Ahmad Sanjaya (EHS Manager)
Request NumberREQ/2024/06/012
+
+ +
+
2. MEASUREMENT INFORMATION
+ + + + + + + + + + + + + + + + + +
Measurement DateJune 15, 2024
Measurement Time09:00 - 15:00 WIB
Measurement OfficersBudi Santoso (Sampling Officer), Lisa Anggraini (Technical Analyst)
Weather ConditionPartly Cloudy, 29°C, Humidity 68%, Wind speed 1.2 m/s
+
+ +
+
3. TOTAL PARTICULATE MATTER QUALITY STANDARDS
+
+

According to PMK RI No.2 Tahun 2023, Total Suspended Particulate (TSP) standards are as follows:

+ + + + + + + + + + + + + + + + + + + + + + +
ParameterStandard ValueTime Unit
Total Suspended Particulate (TSP)90 µg/m³24 hours
PM1075 µg/m³24 hours
PM2.555 µg/m³24 hours
+

Note: TSP = Total Suspended Particulate, PM10 = Particulate Matter with diameter ≤ 10 µm, PM2.5 = Particulate Matter with diameter ≤ 2.5 µm

+
+
+ +
+
4. MEASUREMENT RESULTS
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
No.Sampling LocationLocation DescriptionParticulate Matter ConcentrationStandard
µg/m³
Compliance Status
TSP
(µg/m³)
PM10
(µg/m³)
PM2.5
(µg/m³)
1TPM-1Main Factory Entrance76.462.741.290.0COMPLY
2TPM-2Production Building105.383.148.690.0NOT COMPLY
3TPM-3Office Building52.837.422.390.0COMPLY
4TPM-4Raw Material Storage118.791.562.490.0NOT COMPLY
5TPM-5Facility Boundary (West)81.467.345.890.0COMPLY
6TPM-6Nearest Residential Area58.342.628.190.0COMPLY
+ +

Notes:

+
    +
  • Sampling duration: 8 hours for each location
  • +
  • TSP = Total Suspended Particulate
  • +
  • PM10 = Particulate Matter with diameter ≤ 10 µm
  • +
  • PM2.5 = Particulate Matter with diameter ≤ 2.5 µm
  • +
+ +
+

[Particulate Matter Concentration Chart - This would display a bar graph comparing measured TSP, PM10, and PM2.5 levels against standards for each location]

+
+
+ +
+
5. MEASUREMENT METHOD
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterMethodEquipmentCalibration Status
TSPSNI 19-7119.3-2005High Volume Air Sampler (HVAS) - Staplex TFIA SN:12345Valid until September 10, 2024
PM10SNI 19-7119.3-2005PM10 High Volume Sampler - Graseby-Andersen SN:PM10-789Valid until August 22, 2024
PM2.5USEPA Compendium Method IO-2.1PM2.5 Low Volume Sampler - BGI PQ200 SN:2675BGValid until July 15, 2024
Weather ParametersIn-situ measurementWeather Station Kestrel 5500 SN:KW456789Valid until October 30, 2024
+
+ +
+
6. PARTICULATE SOURCES AND CHARACTERISTICS
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Location IDMajor Particulate SourcesWind DirectionDistance to Nearest Receptor
TPM-1Vehicle movement, road dustNE, 1.3 m/s180 m to office building
TPM-2Production machinery, material processing, grinding operationsE, 1.1 m/s120 m to office building
TPM-3HVAC systems, minor infiltration from outsideSE, 0.8 m/sWithin receptor area
TPM-4Material handling, loading/unloading operations, powder materialsS, 1.2 m/s160 m to office building
TPM-5General facility operations, boundary conditionsSW, 1.4 m/s90 m to residential area
TPM-6Background sources, traffic, general community activitiesW, 1.0 m/sWithin receptor area
+
+ +
+
7. NOTES AND RECOMMENDATIONS
+

Based on the measurement results, the following findings and recommendations are provided:

+
    +
  1. Two measurement locations exceed the TSP threshold limits according to PMK RI No.2 Tahun 2023.
  2. +
  3. For the Production Building (TPM-2) with TSP level of 105.3 µg/m³ (exceeding the 90.0 µg/m³ standard), it is recommended to: +
      +
    • Install or upgrade dust collection systems at source points
    • +
    • Implement wet suppression methods for dust control during material processing
    • +
    • Improve ventilation systems with appropriate filters
    • +
    • Provide respiratory protection for workers in this area
    • +
    +
  4. +
  5. For the Raw Material Storage (TPM-4) with TSP level of 118.7 µg/m³ (significantly exceeding the 90.0 µg/m³ standard), it is recommended to: +
      +
    • Enclose storage areas for dusty raw materials
    • +
    • Implement water spraying systems for bulk material piles
    • +
    • Improve material handling procedures to minimize dust generation
    • +
    • Install windbreaks or barriers around storage areas
    • +
    • Consider covered storage solutions for dusty materials
    • +
    +
  6. +
  7. The PM10 level at the Raw Material Storage (91.5 µg/m³) also exceeds the standard (75 µg/m³), indicating that fine particulates may be spreading beyond the immediate area.
  8. +
  9. General recommendations for the facility: +
      +
    • Develop and implement a comprehensive dust control management plan
    • +
    • Conduct regular maintenance on dust control equipment
    • +
    • Establish regular cleaning protocols for work areas
    • +
    • Conduct follow-up measurements after implementing dust control measures
    • +
    • Provide training for employees on dust control practices
    • +
    +
  10. +
+
+ +
+
8. REGULATION REFERENCES
+

This measurement report refers to:

+
    +
  1. Peraturan Menteri Kesehatan Republik Indonesia Nomor 2 Tahun 2023 tentang Standar Baku Mutu Kesehatan Lingkungan dan Persyaratan Kesehatan
  2. +
  3. SNI 19-7119.3-2005 regarding Air Quality - Ambient Air - Part 3: Method of sampling and measurement of suspended particulate using High Volume Air Sampler
  4. +
  5. USEPA Compendium Method IO-2.1 for Sampling of Ambient Air for PM10 and PM2.5
  6. +
+
+ + + +
+

*END OF REPORT*

+

Page 1 of 1

+
+
+ + \ No newline at end of file diff --git a/work_climate_temp_masterdata.sql b/work_climate_temp_masterdata.sql new file mode 100644 index 0000000..4ee7085 --- /dev/null +++ b/work_climate_temp_masterdata.sql @@ -0,0 +1,302 @@ +-- Master Data for Work Climate Temperature Measurement System +-- Based on Ministry of Health Regulation No. 2 Year 2023 + +-- Master Regulations Table +CREATE TABLE master_regulations ( + regulation_id INT PRIMARY KEY AUTO_INCREMENT, + regulation_code VARCHAR(50) NOT NULL, + regulation_name VARCHAR(200) NOT NULL, + issuing_authority VARCHAR(100) NOT NULL, + regulation_type VARCHAR(50), + issue_date DATE, + effective_date DATE, + description 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 +); + +-- Master Climate Parameters Table +CREATE TABLE master_climate_parameters ( + parameter_id INT PRIMARY KEY AUTO_INCREMENT, + parameter_code VARCHAR(50) NOT NULL, + parameter_name VARCHAR(100) NOT NULL, + parameter_group VARCHAR(50), -- Physical, Chemical, Biological + unit VARCHAR(20), + analysis_method VARCHAR(100), + description TEXT, + price DECIMAL(12, 2), + is_active BOOLEAN DEFAULT TRUE, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +); + +-- Master Threshold Limit Values (TLV) Table +CREATE TABLE master_threshold_values ( + threshold_id INT PRIMARY KEY AUTO_INCREMENT, + regulation_id INT, + parameter_id INT, + room_type VARCHAR(100) NOT NULL, + min_value DECIMAL(8, 2), + max_value DECIMAL(8, 2), + unit VARCHAR(20), + description TEXT, + is_active BOOLEAN DEFAULT TRUE, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + FOREIGN KEY (regulation_id) REFERENCES master_regulations(regulation_id), + FOREIGN KEY (parameter_id) REFERENCES master_climate_parameters(parameter_id) +); + +-- Master Clients Table +CREATE TABLE master_clients ( + client_id INT PRIMARY KEY AUTO_INCREMENT, + client_code VARCHAR(50) NOT NULL, + client_name VARCHAR(200) NOT NULL, + address TEXT, + city VARCHAR(100), + province VARCHAR(100), + postal_code VARCHAR(20), + phone_number VARCHAR(50), + email VARCHAR(100), + contact_person VARCHAR(100), + contact_position VARCHAR(100), + business_field VARCHAR(100), + is_active BOOLEAN DEFAULT TRUE, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +); + +-- Master Personnel Table (Sampling Officers, Analysts, etc.) +CREATE TABLE master_personnel ( + personnel_id INT PRIMARY KEY AUTO_INCREMENT, + employee_id VARCHAR(50) NOT NULL, + name VARCHAR(100) NOT NULL, + position VARCHAR(100), + department VARCHAR(100), + email VARCHAR(100), + phone_number VARCHAR(50), + certifications TEXT, + is_active BOOLEAN DEFAULT TRUE, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +); + +-- Master Measurement Equipment Table +CREATE TABLE master_equipment ( + equipment_id INT PRIMARY KEY AUTO_INCREMENT, + equipment_code VARCHAR(50) NOT NULL, + equipment_name VARCHAR(100) NOT NULL, + brand VARCHAR(100), + model VARCHAR(100), + serial_number VARCHAR(100), + calibration_date DATE, + next_calibration_date DATE, + parameter_id INT, + specifications 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_climate_parameters(parameter_id) +); + +-- Master Sampling Locations Table +CREATE TABLE master_sampling_locations ( + location_id INT PRIMARY KEY AUTO_INCREMENT, + client_id INT, + location_name VARCHAR(200) NOT NULL, + address TEXT, + latitude DECIMAL(10, 8), + longitude DECIMAL(11, 8), + room_type VARCHAR(100), + description TEXT, + is_active BOOLEAN DEFAULT TRUE, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + FOREIGN KEY (client_id) REFERENCES master_clients(client_id) +); + +-- Measurement Requests Table (Request Form) +CREATE TABLE measurement_requests ( + request_id INT PRIMARY KEY AUTO_INCREMENT, + request_number VARCHAR(50) NOT NULL, + client_id INT, + request_date DATE, + planned_sampling_date DATE, + contact_person VARCHAR(100), + status VARCHAR(50), -- draft, submitted, approved, scheduled, completed, canceled + notes TEXT, + created_by INT, + approved_by INT, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + FOREIGN KEY (client_id) REFERENCES master_clients(client_id), + FOREIGN KEY (created_by) REFERENCES master_personnel(personnel_id), + FOREIGN KEY (approved_by) REFERENCES master_personnel(personnel_id) +); + +-- Measurement Request Details Table +CREATE TABLE measurement_request_details ( + detail_id INT PRIMARY KEY AUTO_INCREMENT, + request_id INT, + parameter_id INT, + location_id INT, + points_count INT DEFAULT 1, + unit_price 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 (request_id) REFERENCES measurement_requests(request_id), + FOREIGN KEY (parameter_id) REFERENCES master_climate_parameters(parameter_id), + FOREIGN KEY (location_id) REFERENCES master_sampling_locations(location_id) +); + +-- Measurement Schedules Table +CREATE TABLE measurement_schedules ( + schedule_id INT PRIMARY KEY AUTO_INCREMENT, + schedule_number VARCHAR(50) NOT NULL, + request_id INT, + measurement_date DATE, + officer_id INT, + status VARCHAR(50), -- scheduled, completed, rescheduled, canceled + notes TEXT, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + FOREIGN KEY (request_id) REFERENCES measurement_requests(request_id), + FOREIGN KEY (officer_id) REFERENCES master_personnel(personnel_id) +); + +-- Test Reports Table +CREATE TABLE test_reports ( + report_id INT PRIMARY KEY AUTO_INCREMENT, + report_number VARCHAR(50) NOT NULL, + request_id INT, + schedule_id INT, + measurement_date DATE, + issue_date DATE, + client_id INT, + officer_id INT, + verified_by INT, + approved_by INT, + status VARCHAR(50), -- draft, verification, approved, published, revised + page_count INT DEFAULT 1, + notes TEXT, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + FOREIGN KEY (request_id) REFERENCES measurement_requests(request_id), + FOREIGN KEY (schedule_id) REFERENCES measurement_schedules(schedule_id), + FOREIGN KEY (client_id) REFERENCES master_clients(client_id), + FOREIGN KEY (officer_id) REFERENCES master_personnel(personnel_id), + FOREIGN KEY (verified_by) REFERENCES master_personnel(personnel_id), + FOREIGN KEY (approved_by) REFERENCES master_personnel(personnel_id) +); + +-- Temperature Measurement Results Table +CREATE TABLE temperature_measurement_results ( + result_id INT PRIMARY KEY AUTO_INCREMENT, + report_id INT, + location_id INT, + sample_code VARCHAR(50) NOT NULL, + measurement_time_start TIME, + measurement_time_end TIME, + parameter_id INT, + measurement_value DECIMAL(8, 2), + unit VARCHAR(20), + method VARCHAR(100), + threshold_id INT, + notes TEXT, + equipment_id INT, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + FOREIGN KEY (report_id) REFERENCES test_reports(report_id), + FOREIGN KEY (location_id) REFERENCES master_sampling_locations(location_id), + FOREIGN KEY (parameter_id) REFERENCES master_climate_parameters(parameter_id), + FOREIGN KEY (threshold_id) REFERENCES master_threshold_values(threshold_id), + FOREIGN KEY (equipment_id) REFERENCES master_equipment(equipment_id) +); + +-- ================================ +-- SAMPLE DATA INSERTION +-- ================================ + +-- Insert Regulations +INSERT INTO master_regulations (regulation_id, regulation_code, regulation_name, issuing_authority, regulation_type, issue_date, effective_date, description, file_path, is_active) VALUES +(1, 'PMK-02-2023', 'Ministry of Health Regulation No. 2 Year 2023', 'Ministry of Health of Indonesia', 'Ministerial Regulation', '2023-01-20', '2023-02-01', 'Regulation on Environmental Health Quality Standards and Health Requirements', '/documents/regulations/PMK_02_2023.pdf', TRUE), +(2, 'PERMENAKER-05-2018', 'Ministry of Manpower Regulation No. 5 Year 2018', 'Ministry of Manpower of Indonesia', 'Ministerial Regulation', '2018-04-25', '2018-05-10', 'Regulation on Occupational Safety and Health for the Work Environment', '/documents/regulations/PERMENAKER_05_2018.pdf', TRUE); + +-- Insert Climate Parameters +INSERT INTO master_climate_parameters (parameter_id, parameter_code, parameter_name, parameter_group, unit, analysis_method, description, price, is_active) VALUES +(1, 'TEMP', 'Temperature', 'Physical', '°C', 'SNI 7062: 2019', 'Work climate parameter for room temperature measurement', 75000.00, TRUE), +(2, 'HUMID', 'Humidity', 'Physical', '%RH', 'SNI 7062: 2019', 'Work climate parameter for relative humidity measurement', 75000.00, TRUE), +(3, 'WBGT', 'Wet Bulb Globe Temperature', 'Physical', '°C', 'SNI 7062: 2019', 'Work climate parameter for indoor/outdoor WBGT measurement', 100000.00, TRUE), +(4, 'AIRVEL', 'Air Velocity', 'Physical', 'm/s', 'SNI 7062: 2019', 'Work climate parameter for air velocity measurement', 75000.00, TRUE); + +-- Insert Threshold Values for Temperature +INSERT INTO master_threshold_values (threshold_id, regulation_id, parameter_id, room_type, min_value, max_value, unit, description, is_active) VALUES +(1, 1, 1, 'Administration', 20.00, 25.00, '°C', 'Administration and office work area', TRUE), +(2, 1, 1, 'Special Room', 18.00, 24.00, '°C', 'Server room, laboratory, etc.', TRUE), +(3, 1, 1, 'Production', 23.00, 26.00, '°C', 'Production area', TRUE), +(4, 1, 1, 'Common Area', 22.00, 28.00, '°C', 'Common area, canteen, lobby', TRUE), +(5, 1, 1, 'Restroom', 22.00, 28.00, '°C', 'Bathroom, toilet', TRUE), +(6, 1, 1, 'Storage', 16.00, 30.00, '°C', 'Storage room, warehouse', TRUE); + +-- Insert Clients +INSERT INTO master_clients (client_id, client_code, client_name, address, city, province, postal_code, phone_number, email, contact_person, contact_position, business_field, is_active) VALUES +(1, 'CLT-001', 'PT. Indonesia Manufacturing Industry', 'Jl. Industry Raya No. 123', 'Jakarta', 'DKI Jakarta', '12950', '021-5551234', 'contact@manufacturingindonesia.com', 'Budi Santoso', 'HSE Manager', 'Manufacturing', TRUE), +(2, 'CLT-002', 'PT. Digital Technology Nusantara', 'Jl. Gatot Subroto Kav. 52-53', 'Jakarta', 'DKI Jakarta', '12710', '021-5552345', 'hrd@dtn.co.id', 'Siti Rahma', 'HR Director', 'Information Technology', TRUE), +(3, 'CLT-003', 'City Public Hospital', 'Jl. Health No. 45', 'Bandung', 'West Java', '40112', '022-7654321', 'info@cityhospital.go.id', 'Dr. Ahmad Hidayat', 'Director', 'Healthcare', TRUE); + +-- Insert Personnel +INSERT INTO master_personnel (personnel_id, employee_id, name, position, department, email, phone_number, certifications, is_active) VALUES +(1, 'EMP-001', 'Hendra Wijaya', 'Testing Supervisor', 'Laboratory', 'hendra@lab-env.co.id', '081234567890', 'Work Environment Sampling Certification', TRUE), +(2, 'EMP-002', 'Ratna Dewi', 'Senior Analyst', 'Laboratory', 'ratna@lab-env.co.id', '081234567891', 'Laboratory Analyst Certification, General OSH Certification', TRUE), +(3, 'EMP-003', 'Deni Hermawan', 'Sampling Officer', 'Laboratory', 'deni@lab-env.co.id', '081234567892', 'Test Sample Collection Certification', TRUE), +(4, 'EMP-004', 'Farida Nurhasanah', 'Laboratory Manager', 'Laboratory', 'farida@lab-env.co.id', '081234567893', 'Quality Manager Certification, OSH Certification', TRUE); + +-- Insert Measurement Equipment +INSERT INTO master_equipment (equipment_id, equipment_code, equipment_name, brand, model, serial_number, calibration_date, next_calibration_date, parameter_id, specifications, is_active) VALUES +(1, 'EQP-TH001', 'Thermohygrometer', 'Lutron', 'PHB-318', 'LT12345678', '2023-11-10', '2024-05-10', 1, 'Temperature range: -20°C to 60°C, accuracy ±0.8°C', TRUE), +(2, 'EQP-TH002', 'Thermohygrometer', 'Extech', 'RHT50', 'EX87654321', '2023-10-15', '2024-04-15', 1, 'Temperature range: -30°C to 70°C, accuracy ±0.5°C', TRUE), +(3, 'EQP-WBGT001', 'WBGT Meter', 'Lutron', 'WBGT-2010SD', 'LW12348765', '2023-11-05', '2024-05-05', 3, 'WBGT range: 15°C to 59°C, accuracy ±0.8°C', TRUE), +(4, 'EQP-ANM001', 'Anemometer', 'Lutron', 'AM-4214SD', 'LA23456789', '2023-09-20', '2024-03-20', 4, 'Air velocity range: 0.2 m/s to 35 m/s, accuracy ±2%', TRUE); + +-- Insert Sampling Locations for PT. Indonesia Manufacturing Industry +INSERT INTO master_sampling_locations (location_id, client_id, location_name, address, room_type, description, is_active) VALUES +(1, 1, 'Main Meeting Room', 'Floor 2, Main Building', 'Administration', 'Meeting room with 20 person capacity', TRUE), +(2, 1, 'HR Work Area', 'Floor 2, Main Building', 'Administration', 'HR staff work area', TRUE), +(3, 1, 'Server Room', 'Floor 1, Main Building', 'Special Room', 'Server room with special cooling', TRUE), +(4, 1, 'Production Line A', 'Floor 1, Production Building', 'Production', 'Main production area line A', TRUE), +(5, 1, 'Canteen Area', 'Floor 1, Support Building', 'Common Area', 'Employee canteen with 100 person capacity', TRUE); + +-- ================================ +-- TRANSACTION DATA EXAMPLE +-- ================================ + +-- Measurement Request Example +INSERT INTO measurement_requests (request_id, request_number, client_id, request_date, planned_sampling_date, contact_person, status, notes, created_by, approved_by) VALUES +(1, 'REQ/2024/04/001', 1, '2024-04-05', '2024-04-25', 'Budi Santoso', 'approved', 'Quarterly routine measurement for work climate parameters', 3, 4); + +-- Request Details +INSERT INTO measurement_request_details (detail_id, request_id, parameter_id, location_id, points_count, unit_price, 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); + +-- Measurement Schedule +INSERT INTO measurement_schedules (schedule_id, schedule_number, request_id, measurement_date, officer_id, status, notes) VALUES +(1, 'SCH/2024/04/001', 1, '2024-04-25', 3, 'completed', 'Measurement conducted during normal operating hours'); + +-- Test Report +INSERT INTO test_reports (report_id, report_number, request_id, schedule_id, measurement_date, issue_date, client_id, officer_id, verified_by, approved_by, status, page_count, notes) VALUES +(1, 'LHU/TEMP/04/2024/001', 1, 1, '2024-04-25', '2024-04-28', 1, 3, 2, 4, 'published', 2, 'Measurement results show all parameters within normal limits'); + +-- Temperature Measurement Results +INSERT INTO temperature_measurement_results (result_id, report_id, location_id, sample_code, measurement_time_start, measurement_time_end, parameter_id, measurement_value, unit, method, threshold_id, notes, equipment_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); \ No newline at end of file