Files
LAB_LINGKUNGAN/lab_env_db_class_diagram.md
2025-04-24 10:25:31 +07:00

8.1 KiB

Diagram Kelas Sistem Aplikasi Laboratorium Lingkungan

Berikut adalah diagram kelas yang memvisualisasikan struktur database dan menunjukkan hubungannya dengan alur proses laboratorium lingkungan.

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.