# Aturan Konsistensi Database dengan Skripsi

Dokumen ini menjadi acuan implementasi ketika dokumen lama memiliki rancangan yang lebih luas.

## Tabel Inti

```text
users
assets
tickets
ticket_files
verifications
approvals
assignments
notifications
work_logs
ticket_logs
```

## Kolom Inti

### users

```text
user_id
name
username
password_hash
peran_name
unit
is_active
```

### assets

```text
asset_id
asset_code
asset_name
category
location
condition_text
```

### tickets

```text
ticket_id
ticket_no
reported_by
asset_id
title
description
location_detail
category_issue
priority
status
sla_due_at
```

### ticket_files

```text
file_id
ticket_id
uploaded_by
file_type
file_name
file_path
uploaded_at
```

Nilai `file_type`:

```text
BUKTI_KERUSAKAN
BUKTI_SELESAI
NOTA
```

### verifications

```text
verification_id
ticket_id
verifier_id
result
note
```

Nilai `result`:

```text
VALID
REVISI
```

### approvals

```text
approval_id
ticket_id
approver_id
decision
note
```

Nilai `decision`:

```text
SETUJU
TOLAK
```

### assignments

```text
assignment_id
ticket_id
technician_id
assigned_by
assigned_note
assigned_at
started_at
completed_at
```

### notifications

```text
notification_id
user_id
ticket_id
notification_type
message
is_read
created_at
read_at
```

### work_logs

```text
work_log_id
assignment_id
technician_id
progress_status
action_taken
cost
note
logged_at
```

### ticket_logs

```text
ticket_log_id
ticket_id
changed_by
status_before
status_after
note
changed_at
```

## Status Tiket yang Disarankan

Gunakan konstanta konsisten:

```text
DIAJUKAN
REVISI
REVISI_DIAJUKAN
TERVERIFIKASI
MENUNGGU_PERSETUJUAN
DISETUJUI
DITOLAK
DITUGASKAN
DIKERJAKAN
SELESAI
```

Jangan memakai status keterlambatan sebagai pengganti status proses. Keterlambatan dihitung dari `sla_due_at` ketika tiket belum `SELESAI`.

## Penambahan Teknis

Kolom seperti `created_at`, `updated_at`, MIME type, ukuran file, atau checksum boleh ditambahkan untuk kebutuhan teknis. Setiap penambahan harus didokumentasikan dan tidak boleh mengganti kolom inti.

## Tabel yang Tidak Wajib

Jangan menjadikan tabel berikut sebagai kebutuhan wajib tanpa revisi skripsi:

```text
units
ticket_categories
roles
```

Nilai unit, kategori aset, kategori kerusakan, dan role sudah direpresentasikan oleh kolom pada tabel inti.
