2026-04-03 08:51:47 +07:00
|
|
|
|
# Persegi — Sistem Manajemen Organisasi Pemuda Desa
|
2026-04-03 03:50:40 +07:00
|
|
|
|
|
2026-04-03 08:51:47 +07:00
|
|
|
|
Sistem web production-ready untuk **Organisasi Pemuda Desa Persegi**, berlokasi di Desa Karangdadap, Kecamatan Kalibagor, Kabupaten Banyumas.
|
2026-04-03 03:50:40 +07:00
|
|
|
|
|
2026-04-03 08:51:47 +07:00
|
|
|
|
---
|
2026-04-03 03:50:40 +07:00
|
|
|
|
|
2026-04-03 08:51:47 +07:00
|
|
|
|
## Teknologi
|
2026-04-03 03:50:40 +07:00
|
|
|
|
|
2026-04-03 08:51:47 +07:00
|
|
|
|
| Layer | Stack |
|
|
|
|
|
|
|---|---|
|
|
|
|
|
|
| Backend | Laravel 13 |
|
|
|
|
|
|
| Admin Panel | Filament 5.x |
|
|
|
|
|
|
| Authorization | Filament Shield + Spatie Permission |
|
|
|
|
|
|
| Database | MySQL |
|
|
|
|
|
|
| Frontend Publik | Blade |
|
|
|
|
|
|
| Realtime | Livewire |
|
2026-04-03 03:50:40 +07:00
|
|
|
|
|
2026-04-03 08:51:47 +07:00
|
|
|
|
---
|
2026-04-03 03:50:40 +07:00
|
|
|
|
|
2026-04-03 08:51:47 +07:00
|
|
|
|
## Struktur Direktori
|
2026-04-03 03:50:40 +07:00
|
|
|
|
|
2026-04-03 08:51:47 +07:00
|
|
|
|
```
|
|
|
|
|
|
app/
|
|
|
|
|
|
├── Filament/
|
|
|
|
|
|
│ ├── Resources/ # Admin panel resources
|
|
|
|
|
|
│ │ ├── Activities/ # Manajemen kegiatan
|
|
|
|
|
|
│ │ ├── Approvals/ # Multi-approval
|
|
|
|
|
|
│ │ ├── Audits/ # Audit internal
|
|
|
|
|
|
│ │ ├── CashCategories/ # Kategori kas
|
|
|
|
|
|
│ │ ├── CashRecords/ # Transaksi kas
|
|
|
|
|
|
│ │ ├── ContactMessages/# Pesan dari publik
|
|
|
|
|
|
│ │ ├── Divisions/ # Divisi organisasi
|
|
|
|
|
|
│ │ ├── Posts/ # Konten publik
|
|
|
|
|
|
│ │ ├── Users/ # Manajemen anggota
|
|
|
|
|
|
│ │ └── Votes/ # Sistem voting
|
|
|
|
|
|
│ └── Widgets/
|
|
|
|
|
|
│ ├── StatsOverview.php # Widget dashboard utama
|
|
|
|
|
|
│ ├── CashStatsWidget.php # Widget statistik kas (halaman transaksi)
|
|
|
|
|
|
│ └── ActivityLogWidget.php # Widget log aktivitas
|
|
|
|
|
|
├── Models/
|
|
|
|
|
|
│ ├── User.php # Anggota / pengguna sistem
|
|
|
|
|
|
│ ├── Division.php # Divisi organisasi
|
|
|
|
|
|
│ ├── Activity.php # Kegiatan
|
|
|
|
|
|
│ ├── CashRecord.php # Transaksi kas
|
|
|
|
|
|
│ ├── CashCategory.php # Kategori kas (pemasukan/pengeluaran)
|
|
|
|
|
|
│ ├── Vote.php # Voting
|
|
|
|
|
|
│ ├── VoteItem.php # Pilihan suara per user
|
|
|
|
|
|
│ ├── Approval.php # Multi-approval
|
|
|
|
|
|
│ ├── ApprovalItem.php # Keputusan per approver
|
|
|
|
|
|
│ ├── Audit.php # Temuan audit
|
|
|
|
|
|
│ ├── AuditResponse.php # Respons atas temuan audit
|
|
|
|
|
|
│ ├── MemberStatusLog.php # Riwayat perubahan status anggota
|
|
|
|
|
|
│ ├── ActivityLog.php # Log global semua aksi
|
|
|
|
|
|
│ ├── Post.php # Artikel/berita publik
|
|
|
|
|
|
│ └── ContactMessage.php # Pesan kontak dari publik
|
|
|
|
|
|
└── Observers/
|
|
|
|
|
|
├── CashRecordObserver.php
|
|
|
|
|
|
├── ActivityObserver.php
|
|
|
|
|
|
└── UserObserver.php
|
|
|
|
|
|
```
|
2026-04-03 03:50:40 +07:00
|
|
|
|
|
2026-04-03 08:51:47 +07:00
|
|
|
|
---
|
2026-04-03 03:50:40 +07:00
|
|
|
|
|
2026-04-03 08:51:47 +07:00
|
|
|
|
## Role & Hak Akses
|
2026-04-03 03:50:40 +07:00
|
|
|
|
|
2026-04-03 08:51:47 +07:00
|
|
|
|
| Role | Deskripsi |
|
|
|
|
|
|
|---|---|
|
|
|
|
|
|
| `super_admin` | Full akses, bisa override semua, semua aksi di-log |
|
|
|
|
|
|
| `ketua` | Approval kegiatan, verifikasi kas, lihat semua data |
|
|
|
|
|
|
| `bendahara` | Input & kelola transaksi kas |
|
|
|
|
|
|
| `pengurus` | Submit kegiatan ke pending |
|
|
|
|
|
|
| `anggota` | Akses terbatas, lihat data sendiri |
|
|
|
|
|
|
| `auditor` | Read-only + bisa buat temuan audit |
|
2026-04-03 03:50:40 +07:00
|
|
|
|
|
2026-04-03 08:51:47 +07:00
|
|
|
|
---
|
2026-04-03 03:50:40 +07:00
|
|
|
|
|
2026-04-03 08:51:47 +07:00
|
|
|
|
## Fitur & Use Case
|
|
|
|
|
|
|
|
|
|
|
|
### 1. Manajemen Anggota
|
|
|
|
|
|
|
|
|
|
|
|
**Aktor:** ketua, pengurus, super_admin
|
|
|
|
|
|
|
|
|
|
|
|
| Use Case | Deskripsi |
|
|
|
|
|
|
|---|---|
|
|
|
|
|
|
| Tambah anggota | Input data: nama, telepon, alamat, divisi, status |
|
|
|
|
|
|
| Ubah status anggota | Aktif → Nonaktif wajib isi `inactive_reason` |
|
|
|
|
|
|
| Lihat riwayat status | Semua perubahan status tercatat di `member_status_logs` |
|
|
|
|
|
|
| Filter per divisi | Anggota bisa difilter berdasarkan divisi |
|
|
|
|
|
|
|
|
|
|
|
|
**Business rule:**
|
|
|
|
|
|
- Hanya ketua, pengurus, super_admin yang bisa ubah status
|
|
|
|
|
|
- Setiap perubahan status otomatis dicatat ke `member_status_logs` via Observer
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
### 2. Struktur Organisasi (Divisi)
|
|
|
|
|
|
|
|
|
|
|
|
**Aktor:** ketua, super_admin
|
|
|
|
|
|
|
|
|
|
|
|
| Use Case | Deskripsi |
|
|
|
|
|
|
|---|---|
|
|
|
|
|
|
| Kelola divisi | CRUD divisi organisasi |
|
|
|
|
|
|
| Lihat anggota per divisi | Relasi one-to-many ke User |
|
|
|
|
|
|
|
|
|
|
|
|
---
|
2026-04-03 03:50:40 +07:00
|
|
|
|
|
2026-04-03 08:51:47 +07:00
|
|
|
|
### 3. Kegiatan
|
|
|
|
|
|
|
|
|
|
|
|
**Aktor:** pengurus (buat), ketua (approve), semua (lihat)
|
|
|
|
|
|
|
|
|
|
|
|
| Use Case | Deskripsi |
|
|
|
|
|
|
|---|---|
|
|
|
|
|
|
| Buat kegiatan | Status awal: `draft` |
|
|
|
|
|
|
| Submit ke review | `draft` → `pending` (oleh pengurus) |
|
|
|
|
|
|
| Approve/Tolak | `pending` → `approved` / `rejected` (oleh ketua) |
|
|
|
|
|
|
| Tandai selesai | Wajib isi `executed_at` + `execution_notes` |
|
|
|
|
|
|
| Kelola peserta | Many-to-many anggota ↔ kegiatan |
|
|
|
|
|
|
|
|
|
|
|
|
**Workflow status:**
|
2026-04-03 03:50:40 +07:00
|
|
|
|
```
|
2026-04-03 08:51:47 +07:00
|
|
|
|
draft → pending → approved → (executed_at diisi)
|
|
|
|
|
|
→ rejected
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
### 4. Keuangan (Kas)
|
|
|
|
|
|
|
|
|
|
|
|
**Aktor:** bendahara (input), ketua & super_admin (verifikasi & lihat)
|
|
|
|
|
|
|
|
|
|
|
|
| Use Case | Deskripsi |
|
|
|
|
|
|
|---|---|
|
|
|
|
|
|
| Input transaksi | Bendahara input pemasukan/pengeluaran |
|
|
|
|
|
|
| Verifikasi transaksi | Ketua/super_admin verifikasi, setelah itu data terkunci |
|
|
|
|
|
|
| Lihat statistik kas | Widget di halaman transaksi: total saldo, pemasukan/pengeluaran bulan ini, saldo bulan lalu |
|
|
|
|
|
|
| Filter transaksi | Filter per kategori, tanggal, status verifikasi |
|
|
|
|
|
|
|
|
|
|
|
|
**Business rule:**
|
|
|
|
|
|
- Setelah `verified_at` terisi, data tidak bisa diubah/dihapus
|
|
|
|
|
|
- Threshold keuangan:
|
|
|
|
|
|
- < Rp 500.000 → bendahara saja
|
|
|
|
|
|
- Rp 500.000 – Rp 2.000.000 → butuh persetujuan ketua
|
|
|
|
|
|
- > Rp 2.000.000 → multi-approval atau voting
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
### 5. Voting
|
|
|
|
|
|
|
|
|
|
|
|
**Aktor:** semua role (sesuai permission)
|
2026-04-03 03:50:40 +07:00
|
|
|
|
|
2026-04-03 08:51:47 +07:00
|
|
|
|
| Use Case | Deskripsi |
|
|
|
|
|
|
|---|---|
|
|
|
|
|
|
| Buat voting | Tipe: `activity`, `finance`, `general` |
|
|
|
|
|
|
| Beri suara | Pilihan: `approve`, `reject`, `abstain` |
|
|
|
|
|
|
| Tutup voting | Status: `open` → `closed` |
|
|
|
|
|
|
| Lihat hasil | Mayoritas >50% untuk lolos |
|
2026-04-03 03:50:40 +07:00
|
|
|
|
|
2026-04-03 08:51:47 +07:00
|
|
|
|
---
|
2026-04-03 03:50:40 +07:00
|
|
|
|
|
2026-04-03 08:51:47 +07:00
|
|
|
|
### 6. Multi-Approval
|
2026-04-03 03:50:40 +07:00
|
|
|
|
|
2026-04-03 08:51:47 +07:00
|
|
|
|
**Aktor:** role yang ditentukan per approval
|
2026-04-03 03:50:40 +07:00
|
|
|
|
|
2026-04-03 08:51:47 +07:00
|
|
|
|
| Use Case | Deskripsi |
|
|
|
|
|
|
|---|---|
|
|
|
|
|
|
| Buat approval | Tentukan jumlah approval yang dibutuhkan |
|
|
|
|
|
|
| Beri keputusan | Tiap approver bisa approve/reject + catatan |
|
|
|
|
|
|
| Cek status | Lolos jika jumlah approve terpenuhi |
|
2026-04-03 03:50:40 +07:00
|
|
|
|
|
2026-04-03 08:51:47 +07:00
|
|
|
|
---
|
2026-04-03 03:50:40 +07:00
|
|
|
|
|
2026-04-03 08:51:47 +07:00
|
|
|
|
### 7. Audit Internal
|
2026-04-03 03:50:40 +07:00
|
|
|
|
|
2026-04-03 08:51:47 +07:00
|
|
|
|
**Aktor:** auditor (buat temuan), pengurus/ketua (respons)
|
|
|
|
|
|
|
|
|
|
|
|
| Use Case | Deskripsi |
|
|
|
|
|
|
|---|---|
|
|
|
|
|
|
| Buat temuan | Tipe: `warning` / `critical`, bisa terkait model apapun |
|
|
|
|
|
|
| Respons temuan | Pihak terkait bisa balas temuan audit |
|
|
|
|
|
|
| Pantau status | Auditor bisa track status penyelesaian |
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
### 8. Konten Publik
|
|
|
|
|
|
|
|
|
|
|
|
**Aktor:** pengurus, ketua, super_admin
|
|
|
|
|
|
|
|
|
|
|
|
| Use Case | Deskripsi |
|
|
|
|
|
|
|---|---|
|
|
|
|
|
|
| Buat artikel/berita | Post dengan status `draft` / `published` |
|
|
|
|
|
|
| Website publik | Halaman publik berbasis Blade untuk masyarakat |
|
|
|
|
|
|
| Pesan kontak | Masyarakat bisa kirim pesan, admin bisa lihat & balas |
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
### 9. Dashboard
|
|
|
|
|
|
|
|
|
|
|
|
Widget yang tampil di halaman utama admin:
|
|
|
|
|
|
|
|
|
|
|
|
| Widget | Isi |
|
|
|
|
|
|
|---|---|
|
|
|
|
|
|
| StatsOverview | Anggota aktif, total kas, kegiatan berjalan, kegiatan pending |
|
|
|
|
|
|
| ActivityLogWidget | Log aktivitas terbaru di sistem |
|
|
|
|
|
|
|
|
|
|
|
|
Widget khusus halaman transaksi:
|
|
|
|
|
|
|
|
|
|
|
|
| Widget | Isi |
|
|
|
|
|
|
|---|---|
|
|
|
|
|
|
| CashStatsWidget | Total saldo, pemasukan bulan ini, pengeluaran bulan ini, saldo bulan lalu |
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Log & Audit Trail
|
|
|
|
|
|
|
|
|
|
|
|
Semua aksi penting otomatis dicatat via Observer:
|
|
|
|
|
|
|
|
|
|
|
|
| Event | Dicatat di |
|
|
|
|
|
|
|---|---|
|
|
|
|
|
|
| Perubahan status anggota | `member_status_logs` |
|
|
|
|
|
|
| Transaksi kas baru | `activity_logs` |
|
|
|
|
|
|
| Verifikasi kas | `activity_logs` |
|
|
|
|
|
|
| Approval kegiatan | `activity_logs` |
|
|
|
|
|
|
| Eksekusi kegiatan | `activity_logs` |
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Keamanan
|
|
|
|
|
|
|
|
|
|
|
|
- Setiap resource dilindungi Laravel Policy
|
|
|
|
|
|
- Permission granular dikelola via Filament Shield
|
|
|
|
|
|
- Fitur impersonate: super_admin bisa login sebagai user lain (untuk debugging/support)
|
|
|
|
|
|
- Input divalidasi di semua form
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Instalasi
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
composer install
|
|
|
|
|
|
cp .env.example .env
|
|
|
|
|
|
php artisan key:generate
|
|
|
|
|
|
php artisan migrate --seed
|
|
|
|
|
|
php artisan shield:generate --all
|
|
|
|
|
|
php artisan shield:super-admin --user=1
|
|
|
|
|
|
```
|
2026-04-03 03:50:40 +07:00
|
|
|
|
|
2026-04-03 08:51:47 +07:00
|
|
|
|
Akses admin panel: `/dashboard`
|