# ERD - Entity Relationship Diagram Sistem Informasi Desa

---

## ENTITAS DAN ATRIBUT

### 1. users (Akun Admin)
| Kolom | Tipe | Keterangan |
|-------|------|------------|
| **PK** id | bigint | ID unik admin |
| name | varchar(255) | Nama lengkap admin |
| email | varchar(255) | Email (unique) |
| email_verified_at | timestamp | Verifikasi email |
| password | varchar(255) | Password terenkripsi |
| remember_token | varchar(100) | Token sesi |
| created_at | timestamp | Dibuat |
| updated_at | timestamp | Diupdate |

### 2. password_reset_tokens (Token Reset Password)
| Kolom | Tipe | Keterangan |
|-------|------|------------|
| email | varchar(255) | Email admin (FK ke users) |
| token | varchar(255) | Token reset |
| otp | varchar(6) | Kode OTP 6 digit |
| created_at | timestamp | Dibuat |

### 3. homebanners (Banner Halaman Utama)
| Kolom | Tipe | Keterangan |
|-------|------|------------|
| **PK** id | bigint | ID unik banner |
| title | varchar(255) | Judul banner |
| image | varchar(255) | Path file gambar |
| order | int | Urutan tampil (default 0) |
| is_active | boolean | Status aktif (default true) |
| created_at | timestamp | Dibuat |
| updated_at | timestamp | Diupdate |

### 4. village_profiles (Profil Desa)
| Kolom | Tipe | Keterangan |
|-------|------|------------|
| **PK** id | bigint | ID unik |
| visi | text | Visi desa |
| misi | text | Misi desa |
| sejarah | text | Sejarah desa |
| sejarah_image | varchar(255) | Gambar sejarah |
| sejarah_asal_usul | text | Asal usul desa |
| logo_kabupaten | varchar(255) | Logo kabupaten |
| luas_wilayah | varchar(255) | Luas wilayah |
| jumlah_penduduk | varchar(255) | Jumlah penduduk |
| jumlah_kk | varchar(255) | Jumlah KK |
| jumlah_rt | varchar(255) | Jumlah RT |
| jumlah_dusun | varchar(255) | Jumlah dusun |
| batas_utara | varchar(255) | Batas utara |
| batas_timur | varchar(255) | Batas timur |
| batas_selatan | varchar(255) | Batas selatan |
| batas_barat | varchar(255) | Batas barat |
| kades_name | varchar(255) | Nama kepala desa |
| kades_image | varchar(255) | Foto kepala desa |
| sekdes_name | varchar(255) | Nama sekretaris desa |
| sekdes_image | varchar(255) | Foto sekretaris desa |
| kaur_keuangan_name | varchar(255) | Nama KAUR keuangan |
| kaur_keuangan_image | varchar(255) | Foto KAUR keuangan |
| kaur_perencanaan_name | varchar(255) | Nama KAUR perencanaan |
| kaur_perencanaan_image | varchar(255) | Foto KAUR perencanaan |
| kaur_tu_name | varchar(255) | Nama KAUR TU |
| kaur_tu_image | varchar(255) | Foto KAUR TU |
| kasi_pemerintahan_name | varchar(255) | Nama KASI pemerintahan |
| kasi_pemerintahan_image | varchar(255) | Foto KASI pemerintahan |
| kasi_kesejahteraan_name | varchar(255) | Nama KASI kesejahteraan |
| kasi_kesejahteraan_image | varchar(255) | Foto KASI kesejahteraan |
| kasi_pelayanan_name | varchar(255) | Nama KASI pelayanan |
| kasi_pelayanan_image | varchar(255) | Foto KASI pelayanan |
| ketua_bpd_name | varchar(255) | Nama ketua BPD |
| ketua_bpd_image | varchar(255) | Foto ketua BPD |
| kadus_1_name | varchar(255) | Nama kadus 1 |
| kadus_1_image | varchar(255) | Foto kadus 1 |
| kadus_2_name | varchar(255) | Nama kadus 2 |
| kadus_2_image | varchar(255) | Foto kadus 2 |
| created_at | timestamp | Dibuat |
| updated_at | timestamp | Diupdate |

### 5. village_potentials (Potensi Desa)
| Kolom | Tipe | Keterangan |
|-------|------|------------|
| **PK** id | bigint | ID unik |
| title | varchar(255) | Judul potensi |
| image | varchar(255) | Gambar potensi |
| description | text | Deskripsi potensi |
| created_at | timestamp | Dibuat |
| updated_at | timestamp | Diupdate |

### 6. news_categories (Kategori Berita)
| Kolom | Tipe | Keterangan |
|-------|------|------------|
| **PK** id | bigint | ID unik kategori |
| title | varchar(255) | Nama kategori |
| slug | varchar(255) | Slug URL (unique) |
| created_at | timestamp | Dibuat |
| updated_at | timestamp | Diupdate |

### 7. authors (Penulis Berita)
| Kolom | Tipe | Keterangan |
|-------|------|------------|
| **PK** id | bigint | ID unik penulis |
| name | varchar(255) | Nama penulis |
| username | varchar(255) | Username (unique) |
| avatar | varchar(255) | Path avatar |
| bio | longtext | Biografi penulis |
| created_at | timestamp | Dibuat |
| updated_at | timestamp | Diupdate |

### 8. news (Berita/Artikel)
| Kolom | Tipe | Keterangan |
|-------|------|------------|
| **PK** id | bigint | ID unik berita |
| **FK** author_id | bigint | ID penulis (FK ke authors) |
| **FK** news_category_id | bigint | ID kategori (FK ke news_categories) |
| title | varchar(255) | Judul berita |
| slug | varchar(255) | Slug URL (unique) |
| thumbnail | varchar(255) | Path gambar thumbnail |
| content | longtext | Isi/konten berita |
| is_featured | boolean | Berita unggulan (default false) |
| views | bigint | Jumlah dilihat (default 0) |
| created_at | timestamp | Dibuat |
| updated_at | timestamp | Diupdate |

### 9. banners (Banner Berita)
| Kolom | Tipe | Keterangan |
|-------|------|------------|
| **PK** id | bigint | ID unik banner |
| **FK** news_id | bigint | ID berita (FK ke news) |
| created_at | timestamp | Dibuat |
| updated_at | timestamp | Diupdate |

### 10. dokumen_desas (Dokumen Desa)
| Kolom | Tipe | Keterangan |
|-------|------|------------|
| **PK** id | bigint | ID unik dokumen |
| nama | varchar(255) | Nama/judul dokumen |
| file | varchar(255) | Path file dokumen |
| created_at | timestamp | Dibuat |
| updated_at | timestamp | Diupdate |

### 11. pengaduans (Pengaduan Masyarakat)
| Kolom | Tipe | Keterangan |
|-------|------|------------|
| **PK** id | bigint | ID unik pengaduan |
| nama_lengkap | varchar(255) | Nama pelapor |
| nik | text | NIK (dienkripsi) |
| email | varchar(255) | Email pelapor |
| telepon | varchar(20) | No. telepon |
| kategori | varchar(255) | Kategori pengaduan |
| isi_pengaduan | text | Isi pengaduan |
| lampiran | varchar(255) | File lampiran (dienkripsi) |
| nomor_tiket | varchar(20) | Nomor tiket (TKT-XXXXXXXX, unique) |
| status | enum(Pending/Diproses/Selesai) | Status pengaduan (default: Pending) |
| created_at | timestamp | Dibuat |
| updated_at | timestamp | Diupdate |
| deleted_at | timestamp | Hapus lunak (soft delete) |

### 12. contact_messages (Pesan Kontak)
| Kolom | Tipe | Keterangan |
|-------|------|------------|
| **PK** id | bigint | ID unik pesan |
| nama | varchar(255) | Nama pengirim |
| email | varchar(255) | Email pengirim |
| subjek | varchar(255) | Subjek pesan |
| pesan | text | Isi pesan |
| created_at | timestamp | Dibuat |
| updated_at | timestamp | Diupdate |

### 13. jenis_surats (Master Jenis Surat)
| Kolom | Tipe | Keterangan |
|-------|------|------------|
| **PK** id | bigint | ID unik jenis surat |
| nama | varchar(255) | Nama jenis surat (unique) |
| created_at | timestamp | Dibuat |
| updated_at | timestamp | Diupdate |

### 14. pengajuan_surats (Pengajuan Surat Warga)
| Kolom | Tipe | Keterangan |
|-------|------|------------|
| **PK** id | bigint | ID unik pengajuan |
| nama_lengkap | varchar(255) | Nama pemohon |
| nik | text | NIK (dienkripsi) |
| email | varchar(255) | Email pemohon |
| telepon | varchar(20) | No. telepon |
| jenis_surat | varchar(255) | Nama jenis surat (FK ke jenis_surats.nama) |
| keterangan | text | Keperluan pengajuan |
| lampiran | varchar(255) | File lampiran (dienkripsi) |
| nomor_tiket | varchar(20) | Nomor tiket (TKT-XXXXXXXX, unique) |
| status | enum(Pending/Diproses/Selesai) | Status pengajuan (default: Pending) |
| created_at | timestamp | Dibuat |
| updated_at | timestamp | Diupdate |
| deleted_at | timestamp | Hapus lunak (soft delete) |
| Kolom | Tipe | Keterangan |
|-------|------|------------|
| **PK** id | bigint | ID unik pesan |
| nama | varchar(255) | Nama pengirim |
| email | varchar(255) | Email pengirim |
| subjek | varchar(255) | Subjek pesan |
| pesan | text | Isi pesan |
| created_at | timestamp | Dibuat |
| updated_at | timestamp | Diupdate |

---

## RELASI ANTAR ENTITAS

```
┌─────────────────────────────────────────────────────────────────────┐
│                                                                     │
│  ┌──────────────┐       ┌──────────────────┐                       │
│  │ news_categori│       │     authors      │                       │
│  │     es       │       │                  │                       │
│  │ PK id        │       │ PK id            │                       │
│  │ title        │       │ name             │                       │
│  │ slug         │       │ username         │                       │
│  └──────┬───────┘       │ avatar           │                       │
│         │               │ bio              │                       │
│         │ 1             └────────┬─────────┘                       │
│         │                       │ 1                                │
│         │ hasMany              │ hasMany                          │
│         │                       │                                  │
│         │ N                    N                                  │
│         └──────┐      ┌────────┘                                  │
│                │      │                                            │
│         ┌──────┴──────┴────────────────┐                           │
│         │            news              │                           │
│         │                              │                           │
│         │ PK id                        │                           │
│         │ FK author_id                 │──┐                        │
│         │ FK news_category_id          │  │                        │
│         │ title                        │  │                        │
│         │ slug                         │  │ 1                      │
│         │ thumbnail                    │  │                        │
│         │ content                      │  │                        │
│         │ is_featured                  │  │                        │
│         │ views                        │  │                        │
│         └──────────────────────────────┘  │                        │
│                                           │                        │
│                                           │ 1                      │
│                                           │                        │
│                                     ┌─────┴──────────┐             │
│                                     │    banners     │             │
│                                     │                │             │
│                                     │ PK id          │             │
│                                     │ FK news_id     │             │
│                                     └────────────────┘             │
│                                                                     │
│  ┌──────────────────┐    ┌──────────────────┐                      │
│  │  village_profiles│    │village_potentials│                      │
│  │                  │    │                  │                      │
│  │ PK id            │    │ PK id            │                      │
│  │ visi             │    │ title            │                      │
│  │ misi             │    │ image            │                      │
│  │ sejarah          │    │ description      │                      │
│  │ ...              │    └──────────────────┘                      │
│  └──────────────────┘                                               │
│                                                                     │
│  ┌──────────────┐    ┌──────────────┐    ┌──────────────────┐      │
│  │ homebanners  │    │dokumen_desas │    │ contact_messages │      │
│  │              │    │              │    │                  │      │
│  │ PK id        │    │ PK id        │    │ PK id            │      │
│  │ title        │    │ nama         │    │ nama             │      │
│  │ image        │    │ file         │    │ email            │      │
│  │ order        │    └──────────────┘    │ subjek           │      │
│  │ is_active    │                        │ pesan            │      │
│  └──────────────┘                        └──────────────────┘      │
│                                                                     │
│  ┌────────────────────────────────────┐                             │
│  │           pengaduans              │                             │
│  │                                   │                             │
│  │ PK id                             │                             │
│  │ nama_lengkap                      │                             │
│  │ nik (encrypted)                   │                             │
│  │ email                             │                             │
│  │ telepon                           │                             │
│  │ kategori                          │                             │
│  │ isi_pengaduan                     │                             │
│  │ lampiran (encrypted)              │                             │
│  │ nomor_tiket (unique)              │                             │
│  │ status (Pending/Diproses/Selesai) │                             │
│  │ deleted_at (soft delete)          │                             │
│  └────────────────────────────────────┘                             │
│                                                                     │
│  ┌──────────────┐    ┌──────────────────┐                          │
│  │    users     │    │password_reset_   │                          │
│  │              │    │tokens            │                          │
│  │ PK id        │ 1  │                  │                          │
│  │ name         │────│ email            │                          │
│  │ email        │    │ token            │                          │
│  │ password     │    │ otp              │                          │
│  └──────────────┘    │ created_at       │                          │
│                       └──────────────────┘                          │
│                                                                     │
│  ┌────────────────────────────────────────────────────────┐         │
│  │                   jenis_surats                         │         │
│  │                                                        │         │
│  │ PK id                                                  │         │
│  │ nama (unique)                                          │         │
│  └────────────────────────┬───────────────────────────────┘         │
│                           │ 1                                       │
│                           │                                         │
│                           │ hasMany                                 │
│                           │                                         │
│                           │ N                                       │
│  ┌────────────────────────┴───────────────────────────────┐         │
│  │                 pengajuan_surats                       │         │
│  │                                                        │         │
│  │ PK id                                                  │         │
│  │ nama_lengkap                                           │         │
│  │ nik (encrypted)                                        │         │
│  │ email                                                  │         │
│  │ telepon                                                │         │
│  │ FK jenis_surat                                         │──┘      │
│  │ keterangan                                             │         │
│  │ lampiran (encrypted)                                   │         │
│  │ nomor_tiket (unique)                                   │         │
│  │ status (Pending/Diproses/Selesai)                      │         │
│  │ deleted_at (soft delete)                               │         │
│  └────────────────────────────────────────────────────────┘         │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘
```

---

## RINGKASAN RELASI (CARDINALITY)

| # | Entitas Sumber | Relasi | Entitas Tujuan | Keterangan |
|---|---------------|--------|---------------|------------|
| 1 | **news_categories** | 1 ── N | **news** | Satu kategori memiliki banyak berita |
| 2 | **authors** | 1 ── N | **news** | Satu penulis dapat menulis banyak berita |
| 3 | **news** | 1 ── 1 | **banners** | Satu berita memiliki satu banner (opsional) |
| 4 | **users** | 1 ── N | **password_reset_tokens** | Satu user dapat memiliki banyak token reset |
| 5 | **jenis_surats** | 1 ── N | **pengajuan_surats** | Satu jenis surat dapat diajukan berkali-kali |

### Entitas Mandiri (Tidak memiliki relasi FK ke entitas lain)

| Entitas | Keterangan |
|---------|------------|
| **homebanners** | Banner utama homepage, berdiri sendiri |
| **village_profiles** | Profil desa, record tunggal (single row) |
| **village_potentials** | Potensi desa, berdiri sendiri |
| **dokumen_desas** | Dokumen layanan, berdiri sendiri |
| **pengaduans** | Pengaduan masyarakat, berdiri sendiri |
| **contact_messages** | Pesan kontak, berdiri sendiri |
| **agents** | Entitas cadangan (belum digunakan) |

---

## STRUKTUR DATABASE (SQL)

```sql
CREATE TABLE `homebanners` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `image` varchar(255) NOT NULL,
  `order` int NOT NULL DEFAULT '0',
  `is_active` tinyint(1) NOT NULL DEFAULT '1',
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
);

CREATE TABLE `village_profiles` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `visi` text,
  `misi` text,
  `sejarah` text,
  `sejarah_image` varchar(255) DEFAULT NULL,
  `sejarah_asal_usul` text,
  `logo_kabupaten` varchar(255) DEFAULT NULL,
  `luas_wilayah` varchar(255) DEFAULT NULL,
  `jumlah_penduduk` varchar(255) DEFAULT NULL,
  `jumlah_kk` varchar(255) DEFAULT NULL,
  `jumlah_rt` varchar(255) DEFAULT NULL,
  `jumlah_dusun` varchar(255) DEFAULT NULL,
  `batas_utara` varchar(255) DEFAULT NULL,
  `batas_timur` varchar(255) DEFAULT NULL,
  `batas_selatan` varchar(255) DEFAULT NULL,
  `batas_barat` varchar(255) DEFAULT NULL,
  `kades_name` varchar(255) DEFAULT NULL,
  `kades_image` varchar(255) DEFAULT NULL,
  `sekdes_name` varchar(255) DEFAULT NULL,
  `sekdes_image` varchar(255) DEFAULT NULL,
  `kaur_keuangan_name` varchar(255) DEFAULT NULL,
  `kaur_keuangan_image` varchar(255) DEFAULT NULL,
  `kaur_perencanaan_name` varchar(255) DEFAULT NULL,
  `kaur_perencanaan_image` varchar(255) DEFAULT NULL,
  `kaur_tu_name` varchar(255) DEFAULT NULL,
  `kaur_tu_image` varchar(255) DEFAULT NULL,
  `kasi_pemerintahan_name` varchar(255) DEFAULT NULL,
  `kasi_pemerintahan_image` varchar(255) DEFAULT NULL,
  `kasi_kesejahteraan_name` varchar(255) DEFAULT NULL,
  `kasi_kesejahteraan_image` varchar(255) DEFAULT NULL,
  `kasi_pelayanan_name` varchar(255) DEFAULT NULL,
  `kasi_pelayanan_image` varchar(255) DEFAULT NULL,
  `ketua_bpd_name` varchar(255) DEFAULT NULL,
  `ketua_bpd_image` varchar(255) DEFAULT NULL,
  `kadus_1_name` varchar(255) DEFAULT NULL,
  `kadus_1_image` varchar(255) DEFAULT NULL,
  `kadus_2_name` varchar(255) DEFAULT NULL,
  `kadus_2_image` varchar(255) DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
);

CREATE TABLE `village_potentials` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `image` varchar(255) DEFAULT NULL,
  `description` text,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
);

CREATE TABLE `news_categories` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `slug` varchar(255) NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY (`slug`)
);

CREATE TABLE `authors` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `username` varchar(255) NOT NULL,
  `avatar` varchar(255) NOT NULL,
  `bio` longtext NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY (`username`)
);

CREATE TABLE `news` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `author_id` bigint unsigned NOT NULL,
  `news_category_id` bigint unsigned NOT NULL,
  `title` varchar(255) NOT NULL,
  `slug` varchar(255) NOT NULL,
  `thumbnail` varchar(255) NOT NULL,
  `content` longtext NOT NULL,
  `is_featured` tinyint(1) NOT NULL DEFAULT '0',
  `views` bigint unsigned NOT NULL DEFAULT '0',
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY (`slug`),
  KEY `news_author_id_foreign` (`author_id`),
  KEY `news_news_category_id_foreign` (`news_category_id`),
  CONSTRAINT `news_author_id_foreign` FOREIGN KEY (`author_id`) REFERENCES `authors` (`id`),
  CONSTRAINT `news_news_category_id_foreign` FOREIGN KEY (`news_category_id`) REFERENCES `news_categories` (`id`)
);

CREATE TABLE `banners` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `news_id` bigint unsigned NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `banners_news_id_foreign` (`news_id`),
  CONSTRAINT `banners_news_id_foreign` FOREIGN KEY (`news_id`) REFERENCES `news` (`id`)
);

CREATE TABLE `dokumen_desas` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `nama` varchar(255) NOT NULL,
  `file` varchar(255) NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
);

CREATE TABLE `pengaduans` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `nama_lengkap` varchar(255) NOT NULL,
  `nik` text NOT NULL,
  `email` varchar(255) DEFAULT NULL,
  `telepon` varchar(20) NOT NULL,
  `kategori` varchar(255) NOT NULL,
  `isi_pengaduan` text NOT NULL,
  `lampiran` varchar(255) DEFAULT NULL,
  `nomor_tiket` varchar(20) NOT NULL,
  `status` enum('Pending','Diproses','Selesai') NOT NULL DEFAULT 'Pending',
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  `deleted_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY (`nomor_tiket`),
  KEY `pengaduans_status_index` (`status`),
  KEY `pengaduans_created_at_index` (`created_at`)
);

CREATE TABLE `contact_messages` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `nama` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `subjek` varchar(255) DEFAULT NULL,
  `pesan` text NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
);

CREATE TABLE `users` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `email_verified_at` timestamp NULL DEFAULT NULL,
  `password` varchar(255) NOT NULL,
  `remember_token` varchar(100) DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY (`email`)
);

CREATE TABLE `password_reset_tokens` (
  `email` varchar(255) NOT NULL,
  `token` varchar(255) NOT NULL,
  `otp` varchar(6) DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`email`)
);

CREATE TABLE `jenis_surats` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `nama` varchar(255) NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY (`nama`)
);

CREATE TABLE `pengajuan_surats` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `nama_lengkap` varchar(255) NOT NULL,
  `nik` text NOT NULL,
  `email` varchar(255) DEFAULT NULL,
  `telepon` varchar(20) NOT NULL,
  `jenis_surat` varchar(255) NOT NULL,
  `keterangan` text NOT NULL,
  `lampiran` varchar(255) DEFAULT NULL,
  `nomor_tiket` varchar(20) NOT NULL,
  `status` enum('Pending','Diproses','Selesai') NOT NULL DEFAULT 'Pending',
  `deleted_at` timestamp NULL DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY (`nomor_tiket`),
  KEY `pengajuan_surats_status_index` (`status`),
  KEY `pengajuan_surats_created_at_index` (`created_at`)
);
```

---

## DATA AWAL (Seed) JENIS SURAT

Migration `2026_07_19_000000_create_jenis_surats_table.php` mengisi 13 data awal:

| No | Nama Jenis Surat |
|----|-----------------|
| 1 | Pengajuan Surat Keterangan Domisili |
| 2 | Pengajuan Surat Keterangan Usaha |
| 3 | Pengajuan Surat Keterangan Kematian |
| 4 | Pengajuan Surat Keterangan Tidak Mampu (SKTM) |
| 5 | Pengajuan Surat Keterangan Penghasilan Orang Tua |
| 6 | Pengajuan Surat Keterangan Pindah/Datang WNI |
| 7 | Pengajuan Surat Keterangan Kehilangan |
| 8 | Pengajuan Surat Keterangan Kuasa Ahli Waris |
| 9 | Pengajuan Surat Keterangan Jual Beli Tanah |
| 10 | Pengajuan Surat Keterangan Pengantar Perkawinan |
| 11 | Pengajuan Surat Keterangan Belum Menikah |
| 12 | Pengajuan Surat Keterangan Hibah/Wakaf |
| 13 | Lainnya |

## LEGENDA

| Simbol | Arti |
|--------|------|
| **PK** | Primary Key (Kunci Utama) |
| **FK** | Foreign Key (Kunci Tamu) |
| ── | Relasi satu ke satu (1 to 1) |
| ─< | Relasi satu ke banyak (1 to N) |
| Entitas Mandiri | Tidak memiliki relasi FK ke entitas lain |
