# Detective Investigation Management System (DIMS)

[![Laravel 11](https://img.shields.io/badge/Laravel-11.x-red.svg)](https://laravel.com)
[![PHP 8.2+](https://img.shields.io/badge/PHP-8.2+-blue.svg)](https://php.net)
[![TailwindCSS](https://img.shields.io/badge/Tailwind-3.4-cyan.svg)](https://tailwindcss.com)
[![Sanctum API](https://img.shields.io/badge/Auth-Sanctum-purple.svg)](https://laravel.com/docs/sanctum)
[![Tests](https://img.shields.io/badge/Tests-Passing-brightgreen.svg)]()

**Detective Investigation Management System (DIMS)** adalah platform manajemen investigasi kriminal dan intelijen digital kelas enterprise yang dibangun menggunakan **Laravel 11**, **PHP 8.2+**, **Tailwind CSS**, **Alpine.js**, dan **Laravel Sanctum**.

DIMS mengintegrasikan manajemen berkas kasus, basis data intelijen berstandar **Admiralty Code (6x6 Matrix)**, pelacakan sindikat dan geng kriminal, profil tersangka (Persons of Interest), pelacak rantai pengawasan bukti forensik (**Chain of Custody** dengan verifikasi hash kriptografi SHA-256), serta **Investigation Board interaktif bergaya Miro** dengan infinite canvas dan koneksi benang merah (*red thread bezier curves*).

---

## ðŸ›ï¸ System Architecture

DIMS dirancang dengan arsitektur bersih (*Clean Architecture*), memisahkan layer presentasi Blade, RESTful API versioning (`/api/v1`), Model Eloquent dengan relasi polimorfik, serta layer audit trail otomatis.

```
dims-laravel/
â”œâ”€â”€ app/
â”‚   â”œâ”€â”€ Http/
â”‚   â”‚   â”œâ”€â”€ Controllers/
â”‚   â”‚   â”‚   â”œâ”€â”€ Api/V1/          # RESTful API Controllers (/api/v1)
â”‚   â”‚   â”‚   â””â”€â”€ Web/             # Server-Side Blade Controllers
â”‚   â”‚   â”œâ”€â”€ Resources/V1/        # JSON API Transformers
â”‚   â”œâ”€â”€ Models/                  # Eloquent Models (Case, Person, Gang, Evidence, Board...)
â”œâ”€â”€ database/
â”‚   â”œâ”€â”€ migrations/              # 15 Schemas (28+ tables, foreign keys & soft deletes)
â”‚   â””â”€â”€ seeders/DatabaseSeeder.php # Realistic seeder (10 users, 20 cases, 50 persons, 15 gangs, 100 intel, 100 evidence, 5 boards)
â”œâ”€â”€ resources/
â”‚   â”œâ”€â”€ css/app.css              # Dark theme styling, tactical dot grid & scrollbars
â”‚   â”œâ”€â”€ js/app.js                # Alpine.js, Lucide Icons, & DimsBoardEngine
â”‚   â””â”€â”€ views/                   # Dark mode Blade views (Dashboard, Cases, Persons, Boards...)
â”œâ”€â”€ routes/
â”‚   â”œâ”€â”€ web.php                  # Web session routes
â”‚   â””â”€â”€ api.php                  # Sanctum token REST routes
â””â”€â”€ tests/
    â””â”€â”€ Feature/                 # Automated PHPUnit / Pest Feature tests
```

---

## ðŸ” Role-Based Access Control (RBAC) & Demo Accounts

Sistem telah dilengkapi seeder akun untuk seluruh level hierarki kepolisian dan investigasi. **Password default untuk semua akun adalah:** `password`.

| Role | Nama | Email / Login | Clearance Level | Wewenang Utama |
| :--- | :--- | :--- | :--- | :--- |
| **Super Admin** | Arthur Vance | `superadmin@dims.local` | Level 5 (Top Secret) | Akses mutlak ke seluruh sistem, audit log, konfigurasi sistem |
| **Chief Detective** | Marcus Brody | `chief@dims.local` | Level 4 (Secret) | Supervisi seluruh kasus, penugasan investigator, persetujuan penutupan |
| **Lead Detective** | John Doe | `detective.doe@dims.local` | Level 3 (Confidential) | Penyelidikan kasus aktif, pencatatan bukti, pembuat Investigation Board |
| **Special Investigator**| Sarah Smith | `detective.smith@dims.local` | Level 3 (Confidential) | Kasus orang hilang dan investigasi khusus |
| **Forensic Specialist** | Dr. Evelyn Wong | `analyst.wong@dims.local` | Level 3 (Confidential) | Manajemen bukti laboratorium, ekstraksi DNA, AFIS, dan perangkat digital |
| **Viewer / Liaison** | Rachel Adams | `viewer.adams@dims.local` | Level 1 (Restricted) | Akses read-only dokumen terbuka untuk koordinasi kejaksaan |

---

## ðŸš€ Panduan Instalasi & Menjalankan Aplikasi

### 1. Kebutuhan Sistem (Prerequisites)
- **PHP 8.2+** dengan ekstensi: `pdo_mysql`, `mbstring`, `openssl`, `curl`, `fileinfo`, `gd`, `zip`
- **Composer 2.x**
- **Node.js v18+ & NPM**
- **MySQL 8.0+** atau MariaDB

### 2. Konfigurasi Database
Buat database MySQL baru bernama `dims_db`:
```sql
CREATE DATABASE dims_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```

### 3. Setup Project
Salin atau navigasikan ke direktori project:
```bash
cd C:\Users\Nitro5-Panca\.gemini\antigravity\scratch\dims-laravel
```

Konfigurasi file `.env`:
```env
APP_NAME="Detective Investigation Management System"
APP_ENV=local
APP_KEY=base64:...
APP_DEBUG=true
APP_URL=http://localhost:8000

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=dims_db
DB_USERNAME=root
DB_PASSWORD=

SESSION_DRIVER=file
CACHE_STORE=file
```

### 4. Eksekusi Migrasi & Dummy Data Seeder
Jalankan migrasi database dan pengisian dummy data lengkap:
```bash
php artisan migrate:fresh --seed
```
*Perintah ini akan secara otomatis membuat 28+ tabel dan mengisikan 10 Users, 20 Kasus, 50 Persons, 15 Gangs, 100 Intelijen, 100 Bukti, dan 5 Investigation Board lengkap dengan relasi.*

### 5. Kompilasi Aset Frontend
```bash
npm install
npm run build
```

### 6. Menjalankan Server Aplikasi
Jalankan development server:
```bash
php artisan serve --port=8000
```
Buka browser di: **`http://localhost:8000`**

---

## ðŸŽ¨ Fitur Utama & Visual Investigation Board

### 1. Visual Investigation Board (Miro-like Canvas)
- **Infinite Virtual Canvas**: Dukungan drag-to-pan dan zoom (`0.3x` hingga `2.5x`) dengan dot-grid tactical pattern.
- **Kartu Entitas Interaktif**: Drag-and-drop kartu langsung di canvas (Kasus, Tersangka, Bukti, Geng, Intelijen, dan Catatan Post-it).
- **Red String Bezier Connections**: Hubungkan simpul-simpul kasus dengan benang merah investigasi (solid, dashed, dotted) lengkap dengan panah direksional dan label relasi (*"Target of Warrant"*, *"Fingerprint Match"*, *"Syndicate Leader"*).
- **Auto-Save REST Sync**: Setiap pergeseran koordinat kartu atau pembuatan relasi tersimpan secara realtime ke endpoint API `/api/v1/boards/{id}/nodes` dan `/connections`.
- **Export**: Mendukung ekspor struktur visual graph ke format file JSON.

### 2. Information & Intelligence (Admiralty Matrix 6x6)
Mengimplementasikan standar Admiralty Code internasional:
- **Source Reliability**: `A` (Completely Reliable) hingga `F` (Unknown)
- **Information Credibility**: `1` (Confirmed) hingga `6` (Cannot Be Judged)

### 3. Evidence Locker & Chain of Custody Tracker
- Pencatatan bukti fisik dan digital lengkap dengan kalkulasi dan verifikasi **SHA-256 hash**.
- Modal interaktif pengalihan rantai pengawasan (*Chain of Custody Transfer*) dengan tanda tangan digital dan log lokasi.

### 4. Laboratorium Forensik
- **Digital Devices**: Hasil ekstraksi chip-off / image disk forensic.
- **DNA Registry**: Profil STR alleles (`D3S1358`, `TH01`, `D21S11`, `vWA`) dengan persentase kecocokan.
- **AFIS Fingerprints**: Minutiae ridge matching dan skor pencocokan.
- **Communication & Financial AML**: Transkrip penyadapan wiretap dan pelacakan transaksi mencurigakan (SAR).

---

## ðŸ“¡ RESTful API Documentation (`/api/v1`)

Semua endpoint API terproteksi menggunakan token **Laravel Sanctum Bearer Token** (kecuali `POST /api/v1/auth/login`). Format response konsisten mengikuti format:
```json
{
  "success": true,
  "message": "Resource retrieved successfully",
  "data": { ... },
  "meta": { ... }
}
```

### Contoh Autentikasi API:
```bash
curl -X POST http://localhost:8000/api/v1/auth/login \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"email":"detective.doe@dims.local","password":"password"}'
```

Response:
```json
{
  "success": true,
  "message": "Authenticated successfully.",
  "data": {
    "user": {
      "id": 3,
      "name": "John Doe",
      "email": "detective.doe@dims.local",
      "badge_number": "BADGE-204",
      "role": "detective"
    },
    "token": "1|qPzU...bearerToken",
    "token_type": "Bearer"
  }
}
```

### Daftar Endpoint Inti:
| Modul | Method | Endpoint | Deskripsi |
| :--- | :--- | :--- | :--- |
| **Auth** | `POST` | `/api/v1/auth/login` | Memperoleh Sanctum Bearer Token |
| | `GET` | `/api/v1/auth/me` | Profil pengguna saat ini |
| | `POST` | `/api/v1/auth/logout` | Revoke token aktif |
| **Dashboard** | `GET` | `/api/v1/dashboard/stats` | Agregasi metrik, ringkasan kasus, dan alert |
| **Cases** | `GET` | `/api/v1/cases` | Daftar kasus (filter `status`, `priority`, `search`) |
| | `POST` | `/api/v1/cases` | Buat berkas kasus baru |
| | `GET` | `/api/v1/cases/{id}` | Detail lengkap kasus dan relasinya |
| | `PUT` | `/api/v1/cases/{id}` | Update status / data kasus |
| | `DELETE` | `/api/v1/cases/{id}` | Arsip / hapus kasus |
| **Persons** | `GET` | `/api/v1/persons` | Daftar tersangka, saksi, dan informan |
| | `POST` | `/api/v1/persons` | Daftarkan profil person baru |
| | `GET` | `/api/v1/persons/{id}` | Detail biometrik dan afiliasi kriminal |
| **Gangs** | `GET` | `/api/v1/gangs` | Katalog sindikat kriminal dan wilayah |
| | `GET` | `/api/v1/gangs/{id}` | Struktur hierarki pemimpin dan perseteruan |
| **Intelligence** | `GET` | `/api/v1/intelligence` | Memorandum intelijen bergradasi Admiralty |
| | `POST` | `/api/v1/intelligence` | Catat memo intelijen baru |
| **Evidence** | `GET` | `/api/v1/evidence` | Inventaris loker bukti dan status analisis |
| | `POST` | `/api/v1/evidence/{id}/custody-transfer` | Alihkan rantai pengawasan bukti |
| **Boards** | `GET` | `/api/v1/boards` | Daftar visual board |
| | `GET` | `/api/v1/boards/{id}` | Data state canvas, nodes, dan connections |
| | `POST` | `/api/v1/boards/{id}/nodes` | Tambah simpul / kartu ke canvas |
| | `PUT` | `/api/v1/boards/{id}/nodes/{node}` | Update koordinat `(x, y)` kartu (Auto-Save) |
| | `DELETE` | `/api/v1/boards/{id}/nodes/{node}` | Hapus kartu dari canvas |
| | `POST` | `/api/v1/boards/{id}/connections` | Buat garis benang merah antar simpul |
| | `DELETE` | `/api/v1/boards/{id}/connections/{id}` | Hapus garis koneksi |
| **Forensics** | `GET` | `/api/v1/forensics` | Rekaman hasil uji DNA, balistik, dan chip-off |
| | `GET` | `/api/v1/forensics/communications` | Transkrip penyadapan dan data cell-tower |
| | `GET` | `/api/v1/forensics/financial` | Log transaksi perbankan AML dan SAR |

---

## ðŸ§ª Menjalankan Automated Tests

DIMS dilengkapi dengan test suite lengkap untuk memverifikasi autentikasi, otorisasi token Sanctum, manajemen kasus, dan pengalihan rantai pengawasan bukti:
```bash
php artisan test
```

Hasil eksekusi:
```
PASS  Tests\Unit\ExampleTest
âœ“ that true is true

PASS  Tests\Feature\AuthTest
âœ“ user can view login screen
âœ“ user can login with valid credentials
âœ“ api authentication returns bearer token

PASS  Tests\Feature\CaseManagementTest
âœ“ authenticated user can access cases api
âœ“ can view specific case detail

PASS  Tests\Feature\EvidenceChainOfCustodyTest
âœ“ evidence custody transfer

PASS  Tests\Feature\InvestigationBoardApiTest
âœ“ can create board node via api

Tests:    9 passed (31 assertions)
```

---

## âš–ï¸ Keamanan Data Investigasi
- **Audit Logging**: Setiap pembuatan, pembaruan, penampilan kasus, dan pengalihan bukti dicatat dalam tabel `audit_logs` bersama alamat IP dan User-Agent.
- **Hash Integrity**: Setiap bukti digital memiliki hash kriptografi SHA-256 yang divalidasi pada setiap perpindahan pengawasan.
- **SQL Injection & XSS Protection**: Seluruh query menggunakan parameter binding Eloquent, validasi Form Request yang ketat, dan CSRF protection pada seluruh form Blade.