52 KiB
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:
- Customer (internal/eksternal) mengajukan permintaan sampling dan analisis
- Admin Lab memproses permintaan, menyiapkan surat penawaran, quotation, dan registrasi
- Petugas Sampling menyiapkan rencana sampling dan peralatan
- Bagian Penerimaan Contoh Uji menerima dan mempreparasi sampel
- Bagian Analisis Laboratorium menganalisa sampel uji sesuai jenis sampel
- 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 |
| 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 |
| 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 |
5. master_parameters
Tabel ini menyimpan informasi tentang parameter-parameter yang dapat diuji oleh laboratorium.
| Kolom | Tipe Data | Deskripsi |
|---|---|---|
| MasterParameterID | INT | Primary key, ID unik parameter |
| MasterParameterCode | VARCHAR(20) | Kode unik parameter (mis: BOD5, COD) |
| MasterParameterName | VARCHAR(100) | Nama lengkap parameter |
| MasterParameterGroup | VARCHAR(50) | Kelompok parameter (Fisika/Kimia/Biologi) |
| MasterParameterStandardMethod | VARCHAR(100) | Metode standar pengujian |
| MasterParameterUnit | VARCHAR(20) | Satuan pengukuran |
| MasterParameterPrice | DECIMAL(12,2) | Harga analisis parameter |
| MasterParameterInstrumentation | VARCHAR(100) | Instrumen yang digunakan |
| MasterParameterMDL | DECIMAL(12,6) | Method Detection Limit |
| MasterParameterContainerType | VARCHAR(50) | Jenis wadah sampel yang sesuai |
| MasterParameterPreservation | VARCHAR(200) | Metode preservasi sampel |
| MasterParameterHoldingTime | VARCHAR(50) | Waktu simpan maksimum |
| MasterParameterIsActive | BOOLEAN | Status aktif parameter |
| MasterParameterCreatedAt | DATETIME | Waktu pembuatan record |
| MasterParameterCreatedUserID | INT | ID user yang membuat |
| MasterParameterUpdatedAt | DATETIME | Waktu terakhir update |
| MasterParameterUpdatedUserID | INT | ID user yang update |
| MasterParameterDeletedAt | DATETIME | Waktu penghapusan |
| MasterParameterDeletedUserID | INT | ID user yang menghapus |
6. master_equipment
Tabel ini menyimpan data peralatan laboratorium dan sampling.
| Kolom | Tipe Data | Deskripsi |
|---|---|---|
| MasterEquipmentID | INT | Primary key, ID unik peralatan |
| MasterEquipmentCode | VARCHAR(20) | Kode unik peralatan |
| MasterEquipmentName | VARCHAR(100) | Nama peralatan |
| MasterEquipmentType | VARCHAR(50) | Tipe peralatan (Sampling/Lab/Field) |
| MasterEquipmentSpecifications | TEXT | Spesifikasi teknis peralatan |
| MasterEquipmentBrand | VARCHAR(100) | Merk peralatan |
| MasterEquipmentModel | VARCHAR(100) | Model peralatan |
| MasterEquipmentSerialNumber | VARCHAR(100) | Nomor seri peralatan |
| MasterEquipmentPurchaseDate | DATE | Tanggal pembelian |
| MasterEquipmentCalibrationInterval | INT | Interval kalibrasi (hari) |
| MasterEquipmentLastCalibrationDate | DATE | Tanggal kalibrasi terakhir |
| MasterEquipmentNextCalibrationDate | DATE | Tanggal kalibrasi berikutnya |
| MasterEquipmentStatus | VARCHAR(20) | Status peralatan (Available/In Use/Maintenance) |
| MasterEquipmentLocation | VARCHAR(100) | Lokasi penyimpanan |
| MasterEquipmentIsActive | BOOLEAN | Status aktif peralatan |
| MasterEquipmentCreatedAt | DATETIME | Waktu pembuatan record |
| MasterEquipmentCreatedUserID | INT | ID user yang membuat |
| MasterEquipmentUpdatedAt | DATETIME | Waktu terakhir update |
| MasterEquipmentUpdatedUserID | INT | ID user yang update |
| MasterEquipmentDeletedAt | DATETIME | Waktu penghapusan |
| MasterEquipmentDeletedUserID | INT | ID user yang menghapus |
7. master_personnel
Tabel ini menyimpan data personel laboratorium.
| Kolom | Tipe Data | Deskripsi |
|---|---|---|
| MasterPersonnelID | INT | Primary key, ID unik personel |
| MasterPersonnelCode | VARCHAR(20) | Kode unik personel |
| MasterPersonnelName | VARCHAR(100) | Nama lengkap personel |
| MasterPersonnelPosition | VARCHAR(50) | Jabatan |
| MasterPersonnelDepartment | VARCHAR(50) | Departemen |
| MasterPersonnelSpecialization | VARCHAR(100) | Bidang keahlian |
| MasterPersonnelCertifications | TEXT | Sertifikasi yang dimiliki |
| MasterPersonnelContactNumber | VARCHAR(20) | Nomor kontak |
| MasterPersonnelEmail | VARCHAR(100) | Alamat email |
| MasterPersonnelJoinDate | DATE | Tanggal bergabung |
| MasterPersonnelQualification | TEXT | Kualifikasi/pendidikan |
| MasterPersonnelStatus | VARCHAR(20) | Status personel (Active/Inactive) |
| MasterPersonnelIsActive | BOOLEAN | Status aktif record |
| MasterPersonnelCreatedAt | DATETIME | Waktu pembuatan record |
| MasterPersonnelCreatedUserID | INT | ID user yang membuat |
| MasterPersonnelUpdatedAt | DATETIME | Waktu terakhir update |
| MasterPersonnelUpdatedUserID | INT | ID user yang update |
| MasterPersonnelDeletedAt | DATETIME | Waktu penghapusan |
| MasterPersonnelDeletedUserID | INT | ID user yang menghapus |
8. master_clients
Tabel ini menyimpan data klien/pelanggan laboratorium.
| Kolom | Tipe Data | Deskripsi |
|---|---|---|
| MasterClientID | INT | Primary key, ID unik klien |
| MasterClientCode | VARCHAR(20) | Kode unik klien |
| MasterClientName | VARCHAR(200) | Nama klien/perusahaan |
| MasterClientType | VARCHAR(50) | Tipe klien (Industry/Government/Private) |
| MasterClientIndustrySector | VARCHAR(100) | Sektor industri |
| MasterClientAddress | TEXT | Alamat lengkap |
| MasterClientCity | VARCHAR(100) | Kota |
| MasterClientProvince | VARCHAR(100) | Provinsi |
| MasterClientPostalCode | VARCHAR(20) | Kode pos |
| MasterClientContactPerson | VARCHAR(100) | Nama kontak person |
| MasterClientContactPosition | VARCHAR(100) | Jabatan kontak person |
| MasterClientContactPhone | VARCHAR(20) | Nomor telepon kontak |
| MasterClientContactEmail | VARCHAR(100) | Email kontak |
| MasterClientTaxID | VARCHAR(50) | NPWP |
| MasterClientPaymentTerms | VARCHAR(50) | Ketentuan pembayaran |
| MasterClientDiscountRate | DECIMAL(5,2) | Persentase diskon |
| MasterClientCreditLimit | DECIMAL(15,2) | Limit kredit |
| MasterClientStatus | VARCHAR(20) | Status klien |
| MasterClientIsActive | BOOLEAN | Status aktif record |
| MasterClientCreatedAt | DATETIME | Waktu pembuatan record |
| MasterClientCreatedUserID | INT | ID user yang membuat |
| MasterClientUpdatedAt | DATETIME | Waktu terakhir update |
| MasterClientUpdatedUserID | INT | ID user yang update |
| MasterClientDeletedAt | DATETIME | Waktu penghapusan |
| MasterClientDeletedUserID | INT | ID user yang menghapus |
9. quality_control_samples
Tabel ini menyimpan data sampel quality control.
| Kolom | Tipe Data | Deskripsi |
|---|---|---|
| QualityControlSampleID | INT | Primary key, ID unik sampel QC |
| QualityControlSampleCode | VARCHAR(20) | Kode unik sampel QC |
| QualityControlSampleType | ENUM | Tipe QC (Blank/Duplicate/Spike/CRM) |
| MasterParameterID | INT | Foreign key ke master_parameters |
| QualityControlSampleBatch | VARCHAR(50) | Nomor batch analisis |
| QualityControlSampleValue | DECIMAL(10,4) | Nilai hasil QC |
| QualityControlSampleExpectedValue | DECIMAL(10,4) | Nilai yang diharapkan |
| QualityControlSampleDeviation | DECIMAL(10,4) | Deviasi dari nilai harapan |
| QualityControlSampleIsAcceptable | BOOLEAN | Status penerimaan hasil QC |
| QualityControlSampleNotes | TEXT | Catatan QC |
| QualityControlSampleCreatedAt | DATETIME | Waktu pembuatan record |
| QualityControlSampleCreatedUserID | INT | ID user yang membuat |
| QualityControlSampleUpdatedAt | DATETIME | Waktu terakhir update |
| QualityControlSampleUpdatedUserID | INT | ID user yang update |
| QualityControlSampleDeletedAt | DATETIME | Waktu penghapusan |
| QualityControlSampleDeletedUserID | INT | ID user yang menghapus |
10. method_validations
Tabel ini menyimpan data validasi metode analisis.
| Kolom | Tipe Data | Deskripsi |
|---|---|---|
| MethodValidationID | INT | Primary key, ID unik validasi |
| MasterParameterID | INT | Foreign key ke master_parameters |
| MethodValidationCode | VARCHAR(20) | Kode validasi metode |
| MethodValidationDate | DATE | Tanggal validasi |
| MethodValidationLOD | DECIMAL(10,6) | Limit of Detection |
| MethodValidationLOQ | DECIMAL(10,6) | Limit of Quantification |
| MethodValidationPrecision | DECIMAL(5,2) | Nilai presisi (%) |
| MethodValidationAccuracy | DECIMAL(5,2) | Nilai akurasi (%) |
| MethodValidationUncertainty | DECIMAL(5,2) | Ketidakpastian pengukuran |
| MethodValidationLinearityR2 | DECIMAL(5,4) | Nilai R² linearitas |
| MethodValidationStatus | ENUM | Status (Valid/Invalid/In Review) |
| MethodValidationNotes | TEXT | Catatan validasi |
| MethodValidationCreatedAt | DATETIME | Waktu pembuatan record |
| MethodValidationCreatedUserID | INT | ID user yang membuat |
| MethodValidationUpdatedAt | DATETIME | Waktu terakhir update |
| MethodValidationUpdatedUserID | INT | ID user yang update |
| MethodValidationDeletedAt | DATETIME | Waktu penghapusan |
| MethodValidationDeletedUserID | INT | ID user yang menghapus |
11. equipment_calibrations
Tabel ini mencatat kalibrasi peralatan laboratorium.
| Kolom | Tipe Data | Deskripsi |
|---|---|---|
| EquipmentCalibrationID | INT | Primary key, ID unik kalibrasi |
| MasterEquipmentID | INT | Foreign key ke master_equipment |
| EquipmentCalibrationDate | DATE | Tanggal kalibrasi |
| EquipmentCalibrationDueDate | DATE | Tanggal kalibrasi berikutnya |
| EquipmentCalibrationProvider | VARCHAR(100) | Penyedia layanan kalibrasi |
| EquipmentCalibrationCertificateNo | VARCHAR(50) | Nomor sertifikat kalibrasi |
| EquipmentCalibrationResult | TEXT | Hasil kalibrasi |
| EquipmentCalibrationStatus | ENUM | Status (Pass/Fail/Limited Use) |
| EquipmentCalibrationNotes | TEXT | Catatan kalibrasi |
| EquipmentCalibrationCreatedAt | DATETIME | Waktu pembuatan record |
| EquipmentCalibrationCreatedUserID | INT | ID user yang membuat |
| EquipmentCalibrationUpdatedAt | DATETIME | Waktu terakhir update |
| EquipmentCalibrationUpdatedUserID | INT | ID user yang update |
| EquipmentCalibrationDeletedAt | DATETIME | Waktu penghapusan |
| EquipmentCalibrationDeletedUserID | INT | ID user yang menghapus |
12. document_controls
Tabel ini mengelola dokumen sistem mutu laboratorium.
| Kolom | Tipe Data | Deskripsi |
|---|---|---|
| DocumentControlID | INT | Primary key, ID unik dokumen |
| DocumentCode | VARCHAR(50) | Kode dokumen |
| DocumentTitle | VARCHAR(200) | Judul dokumen |
| DocumentType | ENUM | Tipe (SOP/Work Instruction/Form/Manual) |
| DocumentVersion | VARCHAR(10) | Versi dokumen |
| DocumentEffectiveDate | DATE | Tanggal berlaku |
| DocumentReviewDate | DATE | Tanggal review berikutnya |
| DocumentStatus | ENUM | Status (Draft/Released/Obsolete) |
| DocumentFilePath | VARCHAR(255) | Path file dokumen |
| DocumentDepartment | VARCHAR(100) | Departemen terkait |
| DocumentPreparedByID | INT | ID pembuat dokumen |
| DocumentReviewedByID | INT | ID reviewer |
| DocumentApprovedByID | INT | ID yang menyetujui |
| DocumentIsActive | BOOLEAN | Status aktif dokumen |
| DocumentCreatedAt | DATETIME | Waktu pembuatan record |
| DocumentCreatedUserID | INT | ID user yang membuat |
| DocumentUpdatedAt | DATETIME | Waktu terakhir update |
| DocumentUpdatedUserID | INT | ID user yang update |
| DocumentDeletedAt | DATETIME | Waktu penghapusan |
| DocumentDeletedUserID | INT | ID user yang menghapus |
13. proficiency_tests
Tabel ini mencatat partisipasi dalam uji profisiensi.
| Kolom | Tipe Data | Deskripsi |
|---|---|---|
| ProficiencyTestID | INT | Primary key, ID unik PT |
| ProficiencyTestCode | VARCHAR(50) | Kode uji profisiensi |
| ProficiencyTestProvider | VARCHAR(100) | Penyelenggara PT |
| ProficiencyTestMatrix | VARCHAR(50) | Matriks sampel PT |
| ProficiencyTestParameter | VARCHAR(100) | Parameter yang diuji |
| ProficiencyTestSchedule | DATE | Jadwal pelaksanaan |
| ProficiencyTestReportDue | DATE | Batas waktu laporan |
| ProficiencyTestResult | DECIMAL(10,4) | Hasil pengujian lab |
| ProficiencyTestAssignedValue | DECIMAL(10,4) | Nilai yang ditugaskan |
| ProficiencyTestZScore | DECIMAL(5,2) | Nilai Z-Score |
| ProficiencyTestStatus | ENUM | Status (Registered/Completed/Evaluated) |
| ProficiencyTestConclusion | VARCHAR(50) | Kesimpulan (Satisfactory/Questionable/Unsatisfactory) |
| ProficiencyTestNotes | TEXT | Catatan PT |
| ProficiencyTestCreatedAt | DATETIME | Waktu pembuatan record |
| ProficiencyTestCreatedUserID | INT | ID user yang membuat |
| ProficiencyTestUpdatedAt | DATETIME | Waktu terakhir update |
| ProficiencyTestUpdatedUserID | INT | ID user yang update |
| ProficiencyTestDeletedAt | DATETIME | Waktu penghapusan |
| ProficiencyTestDeletedUserID | INT | ID user yang menghapus |
14. internal_audits
Tabel ini mencatat pelaksanaan audit internal.
| Kolom | Tipe Data | Deskripsi |
|---|---|---|
| InternalAuditID | INT | Primary key, ID unik audit |
| InternalAuditCode | VARCHAR(50) | Kode audit |
| InternalAuditDate | DATE | Tanggal pelaksanaan |
| InternalAuditScope | TEXT | Ruang lingkup audit |
| InternalAuditAuditorID | INT | ID auditor |
| InternalAuditAuditeeID | INT | ID auditee |
| InternalAuditFindings | TEXT | Temuan audit |
| InternalAuditRecommendations | TEXT | Rekomendasi |
| InternalAuditStatus | ENUM | Status (Planned/In Progress/Completed) |
| InternalAuditFollowUpDate | DATE | Tanggal tindak lanjut |
| InternalAuditClosureDate | DATE | Tanggal penutupan |
| InternalAuditNotes | TEXT | Catatan audit |
| InternalAuditCreatedAt | DATETIME | Waktu pembuatan record |
| InternalAuditCreatedUserID | INT | ID user yang membuat |
| InternalAuditUpdatedAt | DATETIME | Waktu terakhir update |
| InternalAuditUpdatedUserID | INT | ID user yang update |
| InternalAuditDeletedAt | DATETIME | Waktu penghapusan |
| InternalAuditDeletedUserID | INT | ID user yang menghapus |
15. inventory_items
Tabel ini mengelola stok bahan kimia dan supplies laboratorium.
| Kolom | Tipe Data | Deskripsi |
|---|---|---|
| InventoryItemID | INT | Primary key, ID unik item |
| InventoryItemCode | VARCHAR(50) | Kode item |
| InventoryItemName | VARCHAR(200) | Nama item |
| InventoryItemCategory | ENUM | Kategori (Chemical/Consumable/Glassware) |
| InventoryItemSpecification | TEXT | Spesifikasi teknis |
| InventoryItemBrand | VARCHAR(100) | Merk item |
| InventoryItemUnitType | VARCHAR(20) | Satuan (mL/gram/piece) |
| InventoryItemCurrentStock | DECIMAL(10,2) | Stok saat ini |
| InventoryItemMinimumStock | DECIMAL(10,2) | Batas minimum stok |
| InventoryItemLocation | VARCHAR(100) | Lokasi penyimpanan |
| InventoryItemExpiryDate | DATE | Tanggal kedaluwarsa |
| InventoryItemMSDS | VARCHAR(255) | Path file MSDS |
| InventoryItemStatus | ENUM | Status (Available/Low Stock/Empty) |
| InventoryItemNotes | TEXT | Catatan tambahan |
| InventoryItemCreatedAt | DATETIME | Waktu pembuatan record |
| InventoryItemCreatedUserID | INT | ID user yang membuat |
| InventoryItemUpdatedAt | DATETIME | Waktu terakhir update |
| InventoryItemUpdatedUserID | INT | ID user yang update |
| InventoryItemDeletedAt | DATETIME | Waktu penghapusan |
| InventoryItemDeletedUserID | INT | ID user yang menghapus |
16. inventory_transactions
Tabel ini mencatat pergerakan stok inventaris.
| Kolom | Tipe Data | Deskripsi |
|---|---|---|
| InventoryTransactionID | INT | Primary key, ID unik transaksi |
| InventoryItemID | INT | Foreign key ke inventory_items |
| InventoryTransactionType | ENUM | Tipe (In/Out/Adjustment) |
| InventoryTransactionQuantity | DECIMAL(10,2) | Jumlah item |
| InventoryTransactionDate | DATETIME | Waktu transaksi |
| InventoryTransactionReference | VARCHAR(50) | Nomor referensi dokumen |
| InventoryTransactionPIC | INT | ID penanggung jawab |
| InventoryTransactionPurpose | TEXT | Tujuan penggunaan |
| InventoryTransactionNotes | TEXT | Catatan transaksi |
| InventoryTransactionCreatedAt | DATETIME | Waktu pembuatan record |
| InventoryTransactionCreatedUserID | INT | ID user yang membuat |
| InventoryTransactionUpdatedAt | DATETIME | Waktu terakhir update |
| InventoryTransactionUpdatedUserID | INT | ID user yang update |
| InventoryTransactionDeletedAt | DATETIME | Waktu penghapusan |
| InventoryTransactionDeletedUserID | INT | ID user yang menghapus |
17. purchase_requests
Tabel ini mencatat permintaan pembelian barang.
| Kolom | Tipe Data | Deskripsi |
|---|---|---|
| PurchaseRequestID | INT | Primary key, ID unik PR |
| PurchaseRequestNumber | VARCHAR(50) | Nomor PR |
| PurchaseRequestDate | DATE | Tanggal permintaan |
| PurchaseRequestDepartment | VARCHAR(100) | Departemen pemohon |
| PurchaseRequestPIC | INT | ID pemohon |
| PurchaseRequestStatus | ENUM | Status (Draft/Submitted/Approved/Rejected) |
| PurchaseRequestUrgency | ENUM | Tingkat urgensi (Normal/Urgent) |
| PurchaseRequestTotalAmount | DECIMAL(12,2) | Total estimasi biaya |
| PurchaseRequestNotes | TEXT | Catatan PR |
| PurchaseRequestApprovedByID | INT | ID yang menyetujui |
| PurchaseRequestApprovedDate | DATE | Tanggal persetujuan |
| PurchaseRequestCreatedAt | DATETIME | Waktu pembuatan record |
| PurchaseRequestCreatedUserID | INT | ID user yang membuat |
| PurchaseRequestUpdatedAt | DATETIME | Waktu terakhir update |
| PurchaseRequestUpdatedUserID | INT | ID user yang update |
| PurchaseRequestDeletedAt | DATETIME | Waktu penghapusan |
| PurchaseRequestDeletedUserID | INT | ID user yang menghapus |
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:
-
Customer (Internal dan eksternal)
- Tabel
customersmenyimpan informasi pelanggan - Tabel
service_requestsmenyimpan permintaan sampling dan analisis
- Tabel
-
Admin Lab Ling
- Tabel
service_requestsmenyimpan data penawaran, quotation, order pelanggan - Tabel
usersmenyimpan data admin yang bertanggung jawab
- Tabel
-
Petugas Sampling
- Tabel
sampling_plansmenyimpan rencana sampling - Tabel
samplesmenyimpan data sampel yang diambil
- Tabel
-
Bagian penerimaan contoh uji
- Tabel
samplesmenyimpan informasi penerimaan dan preparasi sampel
- Tabel
-
Bagian Analisis Laboratorium
- Tabel
analysis_resultsmenyimpan hasil analisa sampel uji
- Tabel
-
Bagian Verifikasi Hasil Uji
- Tabel
analysis_resultsmenyimpan data verifikasi hasil uji - Tabel
reportsmenyimpan laporan hasil uji yang telah diverifikasi
- Tabel
Dengan struktur database ini, sistem dapat melacak seluruh alur dari permintaan pelanggan hingga penerbitan laporan hasil uji, sesuai dengan alur pelayanan pada diagram.
Tabel Master
1. master_sampling_methods
Tabel ini menyimpan informasi tentang metode-metode sampling yang digunakan laboratorium.
| Kolom | Tipe Data | Deskripsi |
|---|---|---|
| MasterSamplingMethodID | INT | Primary key, ID unik untuk metode sampling |
| MasterSamplingMethodCode | VARCHAR(20) | Kode unik metode (mis: WW-GRAB, EMI-ISO) |
| MasterSamplingMethodName | VARCHAR(100) | Nama lengkap metode sampling |
| MasterSamplingMethodStandardRef | VARCHAR(100) | Referensi standar (SNI/standar lain) |
| MasterSamplingMethodMatrix | VARCHAR(50) | Jenis matriks yang disampling (Air, Udara, dll) |
| MasterSamplingMethodDescription | TEXT | Deskripsi lengkap metode sampling |
| MasterSamplingMethodEquipment | TEXT | Daftar peralatan yang dibutuhkan |
| MasterSamplingMethodProcedure | TEXT | Prosedur detail sampling |
| MasterSamplingMethodQCRequirements | TEXT | Persyaratan quality control |
| MasterSamplingMethodSamplingPoint | TEXT | Informasi titik sampling |
| MasterSamplingMethodPreservation | TEXT | Metode preservasi sampel |
| MasterSamplingMethodContainerType | VARCHAR(100) | Jenis wadah yang digunakan |
| MasterSamplingMethodMinVolume | DECIMAL(10,2) | Volume minimum sampel yang dibutuhkan |
| MasterSamplingMethodHoldingTime | VARCHAR(50) | Waktu maksimum penyimpanan sampel |
| MasterSamplingMethodInterference | TEXT | Interferensi yang mungkin terjadi |
| MasterSamplingMethodLimitation | TEXT | Batasan metode sampling |
| MasterSamplingMethodSafetyMeasures | TEXT | Tindakan keselamatan yang diperlukan |
| MasterSamplingMethodFieldParameters | TEXT | Parameter yang diukur di lapangan |
| MasterSamplingMethodIsActive | BOOLEAN | Status aktif metode sampling |
| MasterSamplingMethodCreatedAt | DATETIME | Waktu pembuatan record |
| MasterSamplingMethodCreatedUserID | INT | ID user yang membuat record |
| MasterSamplingMethodUpdatedAt | DATETIME | Waktu terakhir update |
| MasterSamplingMethodUpdatedUserID | INT | ID user yang terakhir update |
| MasterSamplingMethodDeletedAt | DATETIME | Waktu penghapusan record |
| MasterSamplingMethodDeletedUserID | INT | ID user yang menghapus record |
2. master_sampling_method_parameters
Tabel ini menghubungkan metode sampling dengan parameter yang dapat diuji.
| Kolom | Tipe Data | Deskripsi |
|---|---|---|
| MasterSamplingMethodParameterID | INT | Primary key, ID unik |
| MasterSamplingMethodID | INT | Foreign key ke master_sampling_methods |
| MasterParameterID | INT | Foreign key ke master_parameters |
| MasterSamplingMethodParameterIsDefault | BOOLEAN | Menandakan parameter default |
| MasterSamplingMethodParameterIsActive | BOOLEAN | Status aktif relasi |
| MasterSamplingMethodParameterCreatedAt | DATETIME | Waktu pembuatan record |
| MasterSamplingMethodParameterCreatedUserID | INT | ID user yang membuat |
| MasterSamplingMethodParameterUpdatedAt | DATETIME | Waktu terakhir update |
| MasterSamplingMethodParameterUpdatedUserID | INT | ID user yang update |
| MasterSamplingMethodParameterDeletedAt | DATETIME | Waktu penghapusan |
| MasterSamplingMethodParameterDeletedUserID | INT | ID user yang menghapus |
3. master_sampling_method_equipment
Tabel ini mencatat peralatan yang dibutuhkan untuk setiap metode sampling.
| Kolom | Tipe Data | Deskripsi |
|---|---|---|
| MasterSamplingMethodEquipmentID | INT | Primary key, ID unik |
| MasterSamplingMethodID | INT | Foreign key ke master_sampling_methods |
| MasterEquipmentID | INT | Foreign key ke master_equipment |
| MasterSamplingMethodEquipmentQuantity | INT | Jumlah peralatan yang dibutuhkan |
| MasterSamplingMethodEquipmentIsRequired | BOOLEAN | Apakah peralatan wajib ada |
| MasterSamplingMethodEquipmentNotes | TEXT | Catatan penggunaan peralatan |
| MasterSamplingMethodEquipmentIsActive | BOOLEAN | Status aktif relasi |
| MasterSamplingMethodEquipmentCreatedAt | DATETIME | Waktu pembuatan record |
| MasterSamplingMethodEquipmentCreatedUserID | INT | ID user yang membuat |
| MasterSamplingMethodEquipmentUpdatedAt | DATETIME | Waktu terakhir update |
| MasterSamplingMethodEquipmentUpdatedUserID | INT | ID user yang update |
| MasterSamplingMethodEquipmentDeletedAt | DATETIME | Waktu penghapusan |
| MasterSamplingMethodEquipmentDeletedUserID | INT | ID user yang menghapus |
4. master_sampling_method_competencies
Tabel ini mencatat kompetensi yang diperlukan untuk setiap metode sampling.
| Kolom | Tipe Data | Deskripsi |
|---|---|---|
| MasterSamplingMethodCompetencyID | INT | Primary key, ID unik |
| MasterSamplingMethodID | INT | Foreign key ke master_sampling_methods |
| MasterCompetencyID | INT | Foreign key ke master_competencies |
| MasterSamplingMethodCompetencyIsRequired | BOOLEAN | Apakah kompetensi wajib |
| MasterSamplingMethodCompetencyNotes | TEXT | Catatan tentang kompetensi |
| MasterSamplingMethodCompetencyIsActive | BOOLEAN | Status aktif relasi |
| MasterSamplingMethodCompetencyCreatedAt | DATETIME | Waktu pembuatan record |
| MasterSamplingMethodCompetencyCreatedUserID | INT | ID user yang membuat |
| MasterSamplingMethodCompetencyUpdatedAt | DATETIME | Waktu terakhir update |
| MasterSamplingMethodCompetencyUpdatedUserID | INT | ID user yang update |
| MasterSamplingMethodCompetencyDeletedAt | DATETIME | Waktu penghapusan |
| MasterSamplingMethodCompetencyDeletedUserID | INT | ID user yang menghapus |
Relasi Antar Tabel
erDiagram
master_sampling_methods ||--o{ master_sampling_method_parameters : "memiliki parameter"
master_sampling_methods ||--o{ master_sampling_method_equipment : "membutuhkan peralatan"
master_sampling_methods ||--o{ master_sampling_method_competencies : "memerlukan kompetensi"
master_sampling_method_parameters }o--|| master_parameters : "menggunakan"
master_sampling_method_equipment }o--|| master_equipment : "menggunakan"
master_sampling_method_competencies }o--|| master_competencies : "menggunakan"
Penggunaan
- Tabel
master_sampling_methodsadalah tabel utama yang menyimpan semua informasi tentang metode sampling. - Tabel
master_sampling_method_parametersmenentukan parameter apa saja yang bisa diuji dengan metode sampling tertentu. - Tabel
master_sampling_method_equipmentmencatat peralatan apa saja yang diperlukan untuk melakukan sampling. - Tabel
master_sampling_method_competenciesmendefinisikan kompetensi yang harus dimiliki petugas sampling.
Contoh Penggunaan
- Saat membuat rencana sampling, sistem akan mengacu ke tabel-tabel ini untuk:
- Memastikan metode sampling sesuai dengan jenis sampel
- Menyiapkan daftar peralatan yang diperlukan
- Memilih petugas sampling dengan kompetensi yang sesuai
- Menentukan parameter yang akan diuji
Tabel Transaksi
1. service_requests
Tabel ini mencatat semua permintaan layanan dari pelanggan.
| Kolom | Tipe Data | Deskripsi |
|---|---|---|
| ServiceRequestID | INT | Primary key, ID unik permintaan |
| ServiceRequestCode | VARCHAR(20) | Kode unik permintaan |
| MasterClientID | INT | Foreign key ke master_clients |
| ServiceRequestType | ENUM | Tipe permintaan (Sampling and Analysis/Analysis Only) |
| ServiceRequestProjectName | VARCHAR(200) | Nama proyek |
| ServiceRequestProjectLocation | TEXT | Lokasi proyek |
| ServiceRequestSamplingDate | DATE | Tanggal sampling yang diminta |
| ServiceRequestStatus | ENUM | Status permintaan (Draft/Submitted/Approved/etc) |
| ServiceRequestQuotationNumber | VARCHAR(50) | Nomor penawaran |
| ServiceRequestQuotationDate | DATE | Tanggal penawaran |
| ServiceRequestApprovedDate | DATE | Tanggal persetujuan |
| ServiceRequestTotalAmount | DECIMAL(12,2) | Total biaya |
| ServiceRequestDPAmount | DECIMAL(12,2) | Jumlah uang muka |
| ServiceRequestDPStatus | ENUM | Status uang muka (Unpaid/Paid) |
| ServiceRequestNotes | TEXT | Catatan tambahan |
| ServiceRequestCreatedAt | DATETIME | Waktu pembuatan record |
| ServiceRequestCreatedUserID | INT | ID user yang membuat |
| ServiceRequestUpdatedAt | DATETIME | Waktu terakhir update |
| ServiceRequestUpdatedUserID | INT | ID user yang update |
| ServiceRequestDeletedAt | DATETIME | Waktu penghapusan |
| ServiceRequestDeletedUserID | INT | ID user yang menghapus |
2. request_parameters
Tabel ini mencatat parameter-parameter yang diminta untuk diuji.
| Kolom | Tipe Data | Deskripsi |
|---|---|---|
| RequestParameterID | INT | Primary key, ID unik |
| ServiceRequestID | INT | Foreign key ke service_requests |
| MasterParameterID | INT | Foreign key ke master_parameters |
| RequestParameterPrice | DECIMAL(10,2) | Harga parameter saat request |
| RequestParameterStatus | ENUM | Status parameter (Pending/In Progress/Completed) |
| RequestParameterResultValue | VARCHAR(50) | Nilai hasil pengujian |
| RequestParameterResultUnit | VARCHAR(20) | Satuan hasil |
| RequestParameterIsCompliant | BOOLEAN | Status kesesuaian dengan baku mutu |
| RequestParameterNotes | TEXT | Catatan tambahan |
| RequestParameterCreatedAt | DATETIME | Waktu pembuatan record |
| RequestParameterCreatedUserID | INT | ID user yang membuat |
| RequestParameterUpdatedAt | DATETIME | Waktu terakhir update |
| RequestParameterUpdatedUserID | INT | ID user yang update |
| RequestParameterDeletedAt | DATETIME | Waktu penghapusan |
| RequestParameterDeletedUserID | INT | ID user yang menghapus |
3. sampling_plans
Tabel ini mencatat rencana sampling yang akan dilakukan.
| Kolom | Tipe Data | Deskripsi |
|---|---|---|
| SamplingPlanID | INT | Primary key, ID unik rencana |
| SamplingPlanCode | VARCHAR(20) | Kode unik rencana sampling |
| ServiceRequestID | INT | Foreign key ke service_requests |
| MasterSamplingMethodID | INT | Foreign key ke master_sampling_methods |
| SamplingPlanDate | DATE | Tanggal rencana sampling |
| SamplingPlanLocation | TEXT | Lokasi sampling |
| SamplingPlanGPSCoordinates | VARCHAR(50) | Koordinat GPS lokasi |
| SamplingPlanOfficerID | INT | Foreign key ke master_personnel |
| SamplingPlanStatus | ENUM | Status rencana (Planned/Completed/Cancelled) |
| SamplingPlanWeatherCondition | VARCHAR(100) | Kondisi cuaca saat sampling |
| SamplingPlanNotes | TEXT | Catatan tambahan |
| SamplingPlanCreatedAt | DATETIME | Waktu pembuatan record |
| SamplingPlanCreatedUserID | INT | ID user yang membuat |
| SamplingPlanUpdatedAt | DATETIME | Waktu terakhir update |
| SamplingPlanUpdatedUserID | INT | ID user yang update |
| SamplingPlanDeletedAt | DATETIME | Waktu penghapusan |
| SamplingPlanDeletedUserID | INT | ID user yang menghapus |
4. samples
Tabel ini mencatat sampel-sampel yang diambil dan dianalisis.
| Kolom | Tipe Data | Deskripsi |
|---|---|---|
| SampleID | INT | Primary key, ID unik sampel |
| SampleCode | VARCHAR(50) | Kode unik sampel |
| ServiceRequestID | INT | Foreign key ke service_requests |
| SamplingPlanID | INT | Foreign key ke sampling_plans |
| MasterSamplingMethodID | INT | Foreign key ke master_sampling_methods |
| SampleMatrix | VARCHAR(50) | Jenis matriks sampel |
| SampleDateTime | DATETIME | Waktu pengambilan sampel |
| SampleLocation | TEXT | Lokasi pengambilan |
| SampleOfficerID | INT | Foreign key ke master_personnel |
| SampleReceiveDateTime | DATETIME | Waktu penerimaan di lab |
| SampleReceiverID | INT | ID petugas yang menerima |
| SampleCondition | TEXT | Kondisi sampel saat diterima |
| SamplePreservation | TEXT | Metode preservasi yang digunakan |
| SampleStorageLocation | VARCHAR(100) | Lokasi penyimpanan di lab |
| SampleStatus | ENUM | Status sampel (Collected/In Analysis/Completed) |
| SampleNotes | TEXT | Catatan tambahan |
| SampleCreatedAt | DATETIME | Waktu pembuatan record |
| SampleCreatedUserID | INT | ID user yang membuat |
| SampleUpdatedAt | DATETIME | Waktu terakhir update |
| SampleUpdatedUserID | INT | ID user yang update |
| SampleDeletedAt | DATETIME | Waktu penghapusan |
| SampleDeletedUserID | INT | ID user yang menghapus |
Relasi Antar Tabel (Transaksi)
erDiagram
service_requests ||--o{ request_parameters : includes
service_requests ||--o{ sampling_plans : generates
sampling_plans ||--o{ samples : collects
service_requests {
int ServiceRequestID PK
string ServiceRequestCode
int MasterClientID FK
enum ServiceRequestStatus
}
request_parameters {
int RequestParameterID PK
int ServiceRequestID FK
int MasterParameterID FK
decimal RequestParameterPrice
}
sampling_plans {
int SamplingPlanID PK
int ServiceRequestID FK
date SamplingPlanDate
enum SamplingPlanStatus
}
samples {
int SampleID PK
string SampleCode
int SamplingPlanID FK
datetime SampleDateTime
}
Alur Proses Transaksi
-
Permintaan Layanan
- Client membuat permintaan (service_requests)
- Menentukan parameter yang akan diuji (request_parameters)
- Menyetujui penawaran harga
-
Perencanaan Sampling
- Membuat rencana sampling (sampling_plans)
- Menentukan metode dan peralatan
- Menetapkan petugas sampling
-
Pengambilan Sampel
- Mencatat sampel yang diambil (samples)
- Melakukan preservasi
- Mengirim ke laboratorium
-
Analisis dan Pelaporan
- Mencatat hasil analisis (request_parameters)
- Memverifikasi hasil
- Membuat laporan akhir
5. analysis_results (Hasil Analisis)
Tabel ini menyimpan hasil-hasil pengujian laboratorium.
| Kolom | Tipe Data | Deskripsi |
|---|---|---|
| AnalysisResultID | INT | Primary key, ID unik hasil analisis |
| SampleID | INT | Foreign key ke samples |
| MasterParameterID | INT | Foreign key ke master_parameters |
| AnalysisResultValue | VARCHAR(100) | Nilai hasil analisis |
| AnalysisResultUnit | VARCHAR(20) | Satuan hasil |
| AnalysisResultMethod | VARCHAR(100) | Metode yang digunakan |
| AnalysisResultEquipment | VARCHAR(100) | Peralatan yang digunakan |
| AnalysisResultAnalystID | INT | ID analis yang melakukan pengujian |
| AnalysisResultDate | DATETIME | Waktu analisis |
| AnalysisResultVerifierID | INT | ID verifikator hasil |
| AnalysisResultVerificationDate | DATETIME | Waktu verifikasi |
| AnalysisResultIsCompliant | BOOLEAN | Kesesuaian dengan baku mutu |
| AnalysisResultStatus | ENUM | Status (Draft/Verified/Approved) |
| AnalysisResultNotes | TEXT | Catatan analisis |
| AnalysisResultCreatedAt | DATETIME | Waktu pembuatan record |
| AnalysisResultCreatedUserID | INT | ID user yang membuat |
| AnalysisResultUpdatedAt | DATETIME | Waktu terakhir update |
| AnalysisResultUpdatedUserID | INT | ID user yang update |
| AnalysisResultDeletedAt | DATETIME | Waktu penghapusan |
| AnalysisResultDeletedUserID | INT | ID user yang menghapus |
6. reports (Laporan Hasil Uji)
Tabel ini menyimpan laporan hasil pengujian.
| Kolom | Tipe Data | Deskripsi |
|---|---|---|
| ReportID | INT | Primary key, ID unik laporan |
| ReportNumber | VARCHAR(50) | Nomor laporan hasil uji |
| ServiceRequestID | INT | Foreign key ke service_requests |
| ReportDate | DATE | Tanggal laporan |
| ReportTitle | VARCHAR(200) | Judul laporan |
| ReportPreparedByID | INT | ID pembuat laporan |
| ReportVerifiedByID | INT | ID verifikator laporan |
| ReportApprovedByID | INT | ID yang menyetujui laporan |
| ReportStatus | ENUM | Status (Draft/Verified/Approved/Released) |
| ReportFilePath | VARCHAR(255) | Path file laporan |
| ReportNotes | TEXT | Catatan laporan |
| ReportCreatedAt | DATETIME | Waktu pembuatan record |
| ReportCreatedUserID | INT | ID user yang membuat |
| ReportUpdatedAt | DATETIME | Waktu terakhir update |
| ReportUpdatedUserID | INT | ID user yang update |
| ReportDeletedAt | DATETIME | Waktu penghapusan |
| ReportDeletedUserID | INT | ID user yang menghapus |
7. quotations (Penawaran Harga)
Tabel ini menyimpan penawaran harga untuk pelanggan.
| Kolom | Tipe Data | Deskripsi |
|---|---|---|
| QuotationID | INT | Primary key, ID unik quotation |
| QuotationNumber | VARCHAR(50) | Nomor penawaran |
| ServiceRequestID | INT | Foreign key ke service_requests |
| QuotationDate | DATE | Tanggal penawaran |
| QuotationValidUntil | DATE | Masa berlaku penawaran |
| QuotationSubtotal | DECIMAL(12,2) | Total harga sebelum pajak |
| QuotationTaxPercentage | DECIMAL(5,2) | Persentase pajak |
| QuotationTaxAmount | DECIMAL(12,2) | Jumlah pajak |
| QuotationTotal | DECIMAL(12,2) | Total harga setelah pajak |
| QuotationStatus | ENUM | Status (Draft/Sent/Approved/Rejected) |
| QuotationTerms | TEXT | Syarat dan ketentuan |
| QuotationNotes | TEXT | Catatan tambahan |
| QuotationCreatedAt | DATETIME | Waktu pembuatan record |
| QuotationCreatedUserID | INT | ID user yang membuat |
| QuotationUpdatedAt | DATETIME | Waktu terakhir update |
| QuotationUpdatedUserID | INT | ID user yang update |
| QuotationDeletedAt | DATETIME | Waktu penghapusan |
| QuotationDeletedUserID | INT | ID user yang menghapus |
8. quotation_details (Detail Penawaran)
Tabel ini menyimpan rincian item dalam penawaran.
| Kolom | Tipe Data | Deskripsi |
|---|---|---|
| QuotationDetailID | INT | Primary key, ID unik detail |
| QuotationID | INT | Foreign key ke quotations |
| MasterParameterID | INT | Foreign key ke master_parameters |
| QuotationDetailQuantity | INT | Jumlah parameter |
| QuotationDetailUnitPrice | DECIMAL(10,2) | Harga per unit |
| QuotationDetailDiscount | DECIMAL(10,2) | Diskon per item |
| QuotationDetailTotal | DECIMAL(12,2) | Total harga item |
| QuotationDetailNotes | TEXT | Catatan item |
| QuotationDetailCreatedAt | DATETIME | Waktu pembuatan record |
| QuotationDetailCreatedUserID | INT | ID user yang membuat |
| QuotationDetailUpdatedAt | DATETIME | Waktu terakhir update |
| QuotationDetailUpdatedUserID | INT | ID user yang update |
| QuotationDetailDeletedAt | DATETIME | Waktu penghapusan |
| QuotationDetailDeletedUserID | INT | ID user yang menghapus |
Relasi Antar Tabel (Lanjutan)
erDiagram
service_requests ||--o{ quotations : generates
quotations ||--o{ quotation_details : contains
samples ||--o{ analysis_results : produces
service_requests ||--o{ reports : generates
quotations {
int QuotationID PK
string QuotationNumber
decimal QuotationTotal
enum QuotationStatus
}
quotation_details {
int QuotationDetailID PK
int QuotationID FK
int Quantity
decimal UnitPrice
}
analysis_results {
int AnalysisResultID PK
int SampleID FK
string ResultValue
boolean IsCompliant
}
reports {
int ReportID PK
string ReportNumber
enum ReportStatus
}
Penggunaan (Lanjutan)
-
Penawaran Harga
- Membuat penawaran berdasarkan permintaan layanan
- Menghitung total biaya dengan pajak dan diskon
- Melacak status persetujuan penawaran
-
Hasil Analisis
- Mencatat hasil pengujian parameter
- Memverifikasi hasil dengan baku mutu
- Melacak status verifikasi hasil
-
Laporan
- Menghasilkan laporan hasil uji
- Mengelola proses persetujuan laporan
- Menyimpan riwayat laporan
Relasi Antar Tabel (Quality Control)
erDiagram
master_parameters ||--o{ quality_control_samples : "diuji dengan"
master_parameters ||--o{ method_validations : "divalidasi"
master_equipment ||--o{ equipment_calibrations : "dikalibrasi"
quality_control_samples {
int QualityControlSampleID PK
string QualityControlSampleCode
enum QualityControlSampleType
decimal QualityControlSampleValue
}
method_validations {
int MethodValidationID PK
int MasterParameterID FK
decimal MethodValidationLOD
decimal MethodValidationUncertainty
}
equipment_calibrations {
int EquipmentCalibrationID PK
int MasterEquipmentID FK
date EquipmentCalibrationDate
enum EquipmentCalibrationStatus
}
Alur Quality Control
-
Validasi Metode
- Menentukan karakteristik metode
- Menetapkan batas deteksi dan kuantifikasi
- Menghitung ketidakpastian pengukuran
-
Kalibrasi Peralatan
- Menjadwalkan kalibrasi rutin
- Mencatat hasil kalibrasi
- Memantau status peralatan
-
Quality Control Sampel
- Menjalankan sampel kontrol
- Memverifikasi hasil QC
- Mengambil tindakan korektif jika diperlukan
Relasi Antar Tabel (Sistem Mutu)
erDiagram
document_controls ||--o{ master_personnel : "dikelola oleh"
proficiency_tests ||--o{ master_parameters : "menguji"
internal_audits ||--o{ master_personnel : "melibatkan"
document_controls {
int DocumentControlID PK
string DocumentCode
string DocumentTitle
enum DocumentStatus
}
proficiency_tests {
int ProficiencyTestID PK
string ProficiencyTestCode
decimal ProficiencyTestZScore
string ProficiencyTestConclusion
}
internal_audits {
int InternalAuditID PK
string InternalAuditCode
text InternalAuditFindings
date InternalAuditClosureDate
}
Alur Manajemen Mutu
-
Pengendalian Dokumen
- Pembuatan dan revisi dokumen
- Distribusi dan pengendalian akses
- Peninjauan berkala
-
Uji Profisiensi
- Pendaftaran program PT
- Pelaksanaan pengujian
- Evaluasi hasil dan tindak lanjut
-
Audit Internal
- Perencanaan audit
- Pelaksanaan dan temuan
- Tindak lanjut dan verifikasi
18. invoices (Faktur)
Tabel ini mencatat faktur untuk layanan laboratorium.
| Kolom | Tipe Data | Deskripsi |
|---|---|---|
| InvoiceID | INT | Primary key, ID unik faktur |
| InvoiceNumber | VARCHAR(50) | Nomor faktur |
| ServiceRequestID | INT | Foreign key ke service_requests |
| InvoiceDate | DATE | Tanggal faktur |
| InvoiceDueDate | DATE | Tanggal jatuh tempo |
| InvoiceAmount | DECIMAL(12,2) | Total tagihan |
| InvoiceStatus | ENUM | Status (Draft/Sent/Paid/Overdue) |
| InvoiceNotes | TEXT | Catatan faktur |
| InvoiceCreatedAt | DATETIME | Waktu pembuatan record |
| InvoiceCreatedUserID | INT | ID user yang membuat |
19. payments (Pembayaran)
Tabel ini mencatat pembayaran dari klien.
| Kolom | Tipe Data | Deskripsi |
|---|---|---|
| PaymentID | INT | Primary key, ID unik pembayaran |
| InvoiceID | INT | Foreign key ke invoices |
| PaymentDate | DATE | Tanggal pembayaran |
| PaymentAmount | DECIMAL(12,2) | Jumlah pembayaran |
| PaymentMethod | ENUM | Metode (Transfer/Cash/Credit Card) |
| PaymentReference | VARCHAR(100) | Nomor referensi pembayaran |
| PaymentNotes | TEXT | Catatan pembayaran |
| PaymentCreatedAt | DATETIME | Waktu pembuatan record |
| PaymentCreatedUserID | INT | ID user yang membuat |
Relasi Antar Tabel (Keuangan)
erDiagram
service_requests ||--o{ invoices : generates
invoices ||--o{ payments : receives
invoices {
int InvoiceID PK
string InvoiceNumber
decimal InvoiceAmount
enum InvoiceStatus
}
payments {
int PaymentID PK
int InvoiceID FK
decimal PaymentAmount
enum PaymentMethod
}