# Modul Frekuensi Kejadian

## Struktur database

Tabel master:

```sql
frekuensi_kejadian
```

Kolom utama:

- `id`: primary key auto increment.
- `level`: tingkat frekuensi 1 sampai 5.
- `kategori`: label frekuensi, misalnya `Sangat Tinggi`.
- `periode_hari`: rentang pengamatan dalam hari.
- `deskripsi`: penjelasan periode.
- `bobot`: nilai bobot untuk perhitungan risk score.
- `created_at` dan `updated_at`: audit waktu data.

Tabel transaksi yang dipakai:

```sql
hazard_reports
```

Kolom yang digunakan:

- `identification`
- `dateReported`

Index optimasi:

- `idx_hazard_identification_date` pada `identification` dan `dateReported`.
- `idx_hazard_date_reported` pada `dateReported`.

## Data default frekuensi

| Level | Kategori | Periode | Bobot |
| --- | --- | ---: | ---: |
| 1 | Sangat Tinggi | 30 hari | 1 |
| 2 | Tinggi | 90 hari | 2 |
| 3 | Menengah | 180 hari | 3 |
| 4 | Rendah | 365 hari | 4 |
| 5 | Sangat Rendah | 1095 hari | 5 |

## Alur perhitungan frekuensi

Fungsi utama:

```php
calculateFrequencyRating($identification)
```

Alurnya:

1. Sistem menerima teks `identification`.
2. Sistem membaca master `frekuensi_kejadian` berdasarkan `level ASC`.
3. Sistem menghitung jumlah data `hazard_reports` dengan `identification` yang sama pada periode master.
4. Pengecekan dimulai dari periode paling ketat:
   - 30 hari
   - 90 hari
   - 180 hari
   - 365 hari
   - 1095 hari
5. Level pertama yang memiliki minimal 1 kejadian menjadi hasil rating.

Output:

```php
[
    'level' => 2,
    'kategori' => 'Tinggi',
    'bobot' => 2,
    'jumlah_kejadian' => 3,
    'periode_pengamatan' => '90 hari',
]
```

## Cara penggunaan modul

1. Login sebagai Admin.
2. Buka menu `Administrasi > Master Frekuensi`.
3. Tambah, edit, atau hapus master frekuensi.
4. Buka Dashboard untuk melihat:
   - Total hazard berdasarkan kategori frekuensi.
   - Grafik jumlah hazard berdasarkan frekuensi.
   - Top 10 hazard berdasarkan frekuensi tertinggi.

## Persiapan Risk Matrix

Modul ini sudah menyiapkan bobot frekuensi untuk formula:

```text
Risk Score = Bobot Frekuensi × Bobot Tingkat Cedera
```

Bobot tingkat cedera dapat diambil dari tabel `tingkat_cedera`.
