# Production Guide SIPM

## 1. Ringkasan

SIPM yang terpasang di server ini adalah aplikasi web berbasis CodeIgniter 3 untuk mendukung siklus penjaminan mutu internal, mulai dari master data, standar, indikator, target, capaian, audit, hingga jadwal audit.

Deployment aktif:

- Domain: `https://sipm.undikma.ac.id`
- Document root: `/gopanel/sites/sipm_undikma_ac_id/public`
- Web server: Apache
- Runtime PHP terpasang: PHP 8.1.2
- Database aktif aplikasi: MySQL lokal `sipm_undikma`
- Sumber data awal database: hasil salin dari `15.235.153.93`, database `db2_083022_siakad`, tabel `sipm_*`

Status data saat dokumentasi ini dibuat:

- Unit Pengelola: 6
- Kriteria referensi: 13
- Mapping kriteria ke Unit Pengelola: 4
- Standar: 18
- Indikator: 111
- Target: 21
- Capaian: 7
- Audit hasil: 5
- Jadwal audit: 0

## 2. Stack Produksi

- Framework: CodeIgniter 3
- Pola aplikasi: MVC server-rendered
- PHP: 8.1.x
- Database: MySQL lokal dengan driver `mysqli`
- Session: file-based session di `application/cache/sessions`
- Frontend: PHP view + `style.css` global + JavaScript vanilla
- Upload path:
  - `uploads/sipm_capaian/`
  - `uploads/sipm_jadwal_audit/`

File penting produksi:

- [index.php](/gopanel/sites/sipm_undikma_ac_id/public/index.php)
- [application/config/config.php](/gopanel/sites/sipm_undikma_ac_id/public/application/config/config.php)
- [application/config/database.php](/gopanel/sites/sipm_undikma_ac_id/public/application/config/database.php)
- [application/config/routes.php](/gopanel/sites/sipm_undikma_ac_id/public/application/config/routes.php)
- [application/core/MY_Controller.php](/gopanel/sites/sipm_undikma_ac_id/public/application/core/MY_Controller.php)
- [style.css](/gopanel/sites/sipm_undikma_ac_id/public/style.css)
- [.htaccess](/gopanel/sites/sipm_undikma_ac_id/public/.htaccess)

## 3. Struktur Aplikasi

Struktur utama:

```text
/gopanel/sites/sipm_undikma_ac_id/public
├── application/
│   ├── config/
│   ├── controllers/
│   ├── core/
│   ├── models/
│   └── views/
├── system/
├── uploads/
│   ├── sipm_capaian/
│   └── sipm_jadwal_audit/
├── index.php
├── style.css
├── development.md
└── production.md
```

Makna folder:

- `application/controllers`: endpoint dan orkestrasi tiap modul
- `application/models`: query dan operasi data
- `application/views`: halaman, partial layout, dan tampilan cetak
- `application/core/MY_Controller.php`: guard login umum
- `uploads/`: evidensi file capaian dan lampiran jadwal audit

## 4. Konfigurasi Produksi

### 4.1 Base URL

`base_url` dibentuk dinamis dari host aktif dan path script, sehingga deployment domain produksi saat ini tidak bergantung pada host hard-coded.

Referensi:

- [application/config/config.php](/gopanel/sites/sipm_undikma_ac_id/public/application/config/config.php)

### 4.2 Rewrite

Permalink tanpa `index.php` mengandalkan Apache rewrite di [.htaccess](/gopanel/sites/sipm_undikma_ac_id/public/.htaccess).

Selain rewrite utama, file sensitif seperti dump SQL dan zip aplikasi sudah diblok agar tidak bisa diunduh publik.

### 4.3 Timezone

Timezone global aplikasi ditetapkan di [index.php](/gopanel/sites/sipm_undikma_ac_id/public/index.php):

- `Asia/Makassar`

### 4.4 Session

Session menggunakan file driver.

Konfigurasi penting:

- `sess_driver = files`
- `sess_save_path = APPPATH . 'cache/sessions'`

Implikasi:

- folder `application/cache/sessions` harus writable oleh user web server
- jika permission salah, login akan gagal

### 4.5 Database

Konfigurasi aktif saat ini:

- host: `localhost`
- port: `3306`
- database: `sipm_undikma`
- user aplikasi: `sipm_undikma`

Referensi:

- [application/config/database.php](/gopanel/sites/sipm_undikma_ac_id/public/application/config/database.php)

Catatan:

- data lokal saat ini adalah salinan dari database remote `15.235.153.93`
- aplikasi tidak lagi memakai tunnel SSH

## 5. Role dan User

### 5.1 Role

Role utama aplikasi:

- `lpmi`: super user manajemen mutu dan audit
- `prodi`: user Unit Pengelola
- `auditor`: auditor dengan mapping Unit Pengelola tertentu

Hak akses secara umum:

- `lpmi`: dashboard, master data, mapping kriteria, unit pengelola, auditor, standar, indikator, audit, jadwal audit, ganti password
- `prodi`: dashboard, standar, indikator, target, capaian, ganti password
- `auditor`: dashboard, standar, indikator, audit, ganti password

### 5.2 User Aktif Saat Ini

Dokumentasi ini sengaja hanya mencatat identitas user, tanpa menuliskan password.

`lpmi`

- `lpmi`

`prodi`

- `admin_bidan` -> `15301`
- `admin_profesi` -> `14901`
- `elly` -> `14901`
- `kadek_1192` -> `14201`
- `ketua2` -> `00001`
- `nurhayati` -> `15301`
- `rektorat` -> `00000`
- `rista` -> `15301`
- `rista24` -> `15903`
- `sahnun` -> `15301`
- `wiwik` -> `14901`

`auditor`

- `auditor` -> `00000`, `14201`, `15903`
- `auditor2` -> `00001`, `14201`, `15903`

Referensi data:

- tabel `sipm_auth_user`
- tabel `sipm_auth_user_upps`
- tabel `sipm_auth_auditor_upps`

## 6. Workflow Aplikasi

### 6.1 Setup Master oleh LPMI

Urutan setup yang relevan:

1. Kelola jenis kriteria dan kriteria di modul `Kriteria`
2. Mapping jenis kriteria ke Unit Pengelola di modul `Mapping Kriteria`
3. Kelola master Unit Pengelola
4. Kelola user Unit Pengelola per `kode_upps`
5. Kelola user auditor dan mapping auditor ke Unit Pengelola

Catatan:

- `Mapping Kriteria` menentukan jenis kriteria yang dipakai Unit Pengelola
- auditor tidak memakai satu `prodi` tunggal, melainkan banyak mapping `kode_upps`

### 6.2 Pengisian oleh Unit Pengelola

Alur kerja utama `prodi`:

1. Menyusun `Standar`
2. Menyusun `Indikator Kinerja` berdasarkan standar
3. Mengisi `Target Kinerja` per indikator dan tahun
4. Mengisi `Capaian Kinerja` per indikator dan tahun
5. Mengunggah dokumen evidensi capaian

Catatan perilaku:

- data `standar`, `indikator`, `target`, dan `capaian` dibatasi oleh `kode_upps` dari session
- status audit di `capaian` akan diperbarui menjadi `belum diaudit`, `sesuai`, atau `tidak sesuai`

### 6.3 Audit oleh LPMI atau Auditor

Alur kerja audit:

1. Pilih Unit Pengelola
2. Pilih tahun audit
3. Tinjau target, capaian, dan dokumen evidensi
4. Isi hasil audit per indikator:
   - `kesesuaian_capaian`
   - `status`
   - `rekomendasi`
   - `skor`
   - `bobot`
5. Simpan hasil audit

Catatan:

- `lpmi` dapat mengaudit seluruh Unit Pengelola
- `auditor` hanya dapat mengaudit `kode_upps` sesuai mapping pada session
- penyimpanan audit ikut mengubah `status_audit` pada tabel `sipm_capaian_kinerja`

### 6.4 Jadwal Audit

Modul `Jadwal Audit` hanya untuk `lpmi`.

Fungsi utama:

- input jadwal audit per Unit Pengelola dan tahun
- menetapkan sampai tiga auditor
- upload dokumen pendukung jadwal
- toggle status `aktif` atau `nonaktif`

Saat dokumentasi ini dibuat:

- belum ada data jadwal audit aktif di database produksi lokal

## 7. Menu dan Endpoint Penting

Route utama:

- `/login`
- `/dashboard`
- `/standar`
- `/indikator-kinerja`
- `/target-kinerja`
- `/capaian-kinerja`
- `/audit`
- `/kriteria`
- `/mapping-kriteria`
- `/unit-pengelola`
- `/auditor`
- `/jadwal-audit`
- `/ganti-password`

Referensi:

- [application/config/routes.php](/gopanel/sites/sipm_undikma_ac_id/public/application/config/routes.php)

## 8. Detail Penting untuk Developer

### 8.1 Guard Login dan Session Shape

Session utama memakai key `sipm_user`.

Bentuk data session bergantung role:

- `lpmi`: `role`, `username`, `display_name`, `level`
- `prodi`: tambahan `prodi`, `nama_prodi`
- `auditor`: tambahan `auditor_upps_codes`, `auditor_upps_list`

Referensi:

- [application/models/Auth_model.php](/gopanel/sites/sipm_undikma_ac_id/public/application/models/Auth_model.php)
- [application/core/MY_Controller.php](/gopanel/sites/sipm_undikma_ac_id/public/application/core/MY_Controller.php)

### 8.2 Kontrol Akses Nyata

Sebagian modul mengandalkan:

- pengecekan `role`
- atau pengecekan `level === 87`

Artinya:

- `lpmi` secara implementasi saat ini identik dengan user level `87`
- beberapa tampilan memakai kombinasi `role` dan `level`, jadi perubahan skema role harus diuji menyeluruh

### 8.3 Pola Data Per Modul

Tabel inti:

- `sipm_upps`
- `sipm_ref_kriteria`
- `sipm_ref_kriteria_jenis`
- `sipm_prodi_kriteria`
- `sipm_standar`
- `sipm_indikator_kinerja`
- `sipm_target_kinerja`
- `sipm_capaian_kinerja`
- `sipm_capaian_dokumen`
- `sipm_audit_hasil`
- `sipm_jadwal_audit`
- `sipm_jadwal_audit_dokumen`
- `sipm_auth_user`
- `sipm_auth_user_upps`
- `sipm_auth_auditor_upps`

Relasi praktis:

- `prodi` pada banyak tabel mengacu ke `sipm_upps.kode_upps`
- indikator mengacu ke standar
- target, capaian, dan audit mengacu ke indikator + tahun + prodi

### 8.4 Upload dan File Storage

Upload tidak memakai object storage.

Semua file tersimpan di local filesystem:

- capaian: `uploads/sipm_capaian/`
- jadwal audit: `uploads/sipm_jadwal_audit/`

Kalau pindah server:

- file database saja tidak cukup
- folder `uploads/` juga harus ikut disalin

### 8.5 Password dan Reset

Perilaku implementasi saat ini:

- reset password user prodi menjadikan password = `username`
- reset password auditor menjadikan password = `username`
- ganti password user mengganti nilai di tabel `sipm_auth_user`

Developer perlu berhati-hati karena mekanisme password saat ini belum memakai standar hashing modern.

### 8.6 Area Sensitif Saat Maintenance

Saat mengubah aplikasi ini, cek ulang:

- permission `application/cache`, `application/logs`, `uploads`
- rewrite Apache dan `.htaccess`
- route yang dipakai oleh JavaScript modal/detail
- query yang membedakan `lpmi`, `prodi`, dan `auditor`
- data `kode_upps` di session agar tetap sinkron dengan master

### 8.7 Dokumen Referensi Internal

Referensi pengembangan lama:

- [development.md](/gopanel/sites/sipm_undikma_ac_id/public/development.md)

Catatan:

- `development.md` masih memakai konteks environment development lama
- untuk konteks server aktif saat ini, gunakan dokumen ini sebagai acuan utama

## 9. Checklist Operasional

Jika ada deploy atau migrasi berikutnya, minimum cek:

1. `application/config/database.php` mengarah ke DB lokal yang benar
2. Apache virtual host mengarah ke `/gopanel/sites/sipm_undikma_ac_id/public`
3. `.htaccess` aktif dan file sensitif tetap terblok
4. folder session, logs, dan uploads writable
5. login `lpmi`, satu user `prodi`, dan satu user `auditor` berhasil
6. halaman `standar`, `indikator`, `target`, `capaian`, dan `audit` bisa dimuat normal
