# Neo Feeder Production Adoption

Dokumen ini merangkum apa saja yang perlu diambil dari folder `feeder-importer-master` untuk project produksi Laravel ini, dan apa saja yang sebaiknya tidak dibawa apa adanya.

## Ringkasan status project saat ini

- Pondasi Neo Feeder di Laravel sudah ada: kolom `feeder_id`/`feeder_registrasi_id`, antrean sinkron, log, dan request import sudah dibuat di [database/migrations/2026_04_30_000300_build_neo_feeder_foundation.php](../database/migrations/2026_04_30_000300_build_neo_feeder_foundation.php).
- Import dari Neo Feeder ke SIAKAD sudah berjalan lewat agent untuk `prodi`, `dosen`, `mahasiswa`, dan `mata_kuliah` di [scripts/neo-feeder-import-agent.ps1](../scripts/neo-feeder-import-agent.ps1) dan [app/Support/NeoFeeder/NeoFeederSyncService.php](../app/Support/NeoFeeder/NeoFeederSyncService.php).
- Mode `direct/live` di client Laravel belum diimplementasikan. Saat ini `dispatch()` masih mengembalikan `not_implemented` di [app/Support/NeoFeeder/NeoFeederClient.php](../app/Support/NeoFeeder/NeoFeederClient.php).
- Repo ini belum punya script agent lokal untuk `push` batch dari endpoint `/neo-feeder/agent/batch`. Yang ada baru agent `import`.

## Yang perlu diambil sekarang

### 1. Helper koneksi Neo Feeder

Ambil pola koneksi WS Neo Feeder dari aplikasi lama, lalu pindahkan ke layer service Laravel, bukan ke UI lama.

Sumber:
- [feeder-importer-master/admina/inc/feeder_function.php](../feeder-importer-master/admina/inc/feeder_function.php)

Bagian penting:
- `GetToken`
- pembentukan URL `http://{host}:{port}/ws/live2.php`
- `service_request()` dengan payload JSON

Tujuan di project produksi:
- melengkapi `NeoFeederClient` agar mode `direct/live` benar-benar bisa dipakai
- atau menjadi fondasi script agent `push` lokal yang belum ada

### 2. Daftar aksi WS Neo Feeder yang sudah terbukti dipakai

Ini justru nilai utama dari folder lama. Bukan UI-nya, tapi nama aksi dan pola dependensi datanya.

Sumber aksi:
- Mahasiswa: [feeder-importer-master/admina/modul/mahasiswa/push_mhs.php](../feeder-importer-master/admina/modul/mahasiswa/push_mhs.php)
- AKM: [feeder-importer-master/admina/modul/akm/push_akm.php](../feeder-importer-master/admina/modul/akm/push_akm.php)
- Kurikulum dan mata kuliah: [feeder-importer-master/admina/modul/kurikulum/push_kur.php](../feeder-importer-master/admina/modul/kurikulum/push_kur.php)
- Kelas kuliah: [feeder-importer-master/admina/modul/kelas_kuliah/push_kelas.php](../feeder-importer-master/admina/modul/kelas_kuliah/push_kelas.php)
- Dosen ajar: [feeder-importer-master/admina/modul/dosen_ajar/push_dosen_ajar.php](../feeder-importer-master/admina/modul/dosen_ajar/push_dosen_ajar.php)
- KRS: [feeder-importer-master/admina/modul/krs/push_krs.php](../feeder-importer-master/admina/modul/krs/push_krs.php)
- Nilai: [feeder-importer-master/admina/modul/nilai_perkuliahan/push_nilai.php](../feeder-importer-master/admina/modul/nilai_perkuliahan/push_nilai.php)
- Kelulusan: [feeder-importer-master/admina/modul/kelulusan/push_kelulusan.php](../feeder-importer-master/admina/modul/kelulusan/push_kelulusan.php)

Aksi yang layak dipakai sebagai acuan implementasi:
- `InsertBiodataMahasiswa`
- `InsertRiwayatPendidikanMahasiswa`
- `InsertPerkuliahanMahasiswa`
- `UpdatePerkuliahanMahasiswa`
- `InsertKurikulum`
- `InsertMataKuliah`
- `InsertMatkulKurikulum`
- `InsertKelasKuliah`
- `InsertDosenPengajarKelasKuliah`
- `InsertPesertaKelasKuliah`
- `UpdateNilaiPerkuliahanKelas`
- `InsertMahasiswaLulusDO`

### 3. Logika lookup dependensi sebelum push

Folder lama tidak pernah push data mentah begitu saja. Hampir semua modul melakukan lookup dulu ke Neo Feeder:
- cari `id_registrasi_mahasiswa` dari `nim`
- cari `id_kelas_kuliah` dari kombinasi `kode_mk`, `kelas`, `semester`
- cari `id_matkul` dari `kode_mk`
- cari `id_prodi` feeder dari `kode_prodi`

Logika ini perlu diambil dan dipindahkan ke service Laravel atau agent `push`, karena saat ini payload Laravel masih baru berupa data lokal, belum semua ID referensi Neo Feeder.

## Yang sudah terserap ke project Laravel

Bagian yang sudah berhasil diadopsi dari konsep folder lama:
- import `prodi`, `dosen`, `mahasiswa`, `mata_kuliah` dari Neo Feeder ke SIAKAD
- mapping field dasar untuk empat entitas itu
- request import, claim oleh agent, callback hasil, dan logging

Referensi:
- [scripts/neo-feeder-import-agent.ps1](../scripts/neo-feeder-import-agent.ps1)
- [app/Support/NeoFeeder/NeoFeederSyncService.php](../app/Support/NeoFeeder/NeoFeederSyncService.php)
- [app/Http/Controllers/NeoFeederAgentController.php](../app/Http/Controllers/NeoFeederAgentController.php)

## Yang siap ditambahkan berikutnya

Ini entitas yang paling masuk akal ditambahkan dulu ke project produksi karena schema dasarnya sudah cocok atau hampir cocok:

### Prioritas tinggi

- `kurikulum`
  - kolom `feeder_id` sudah ada di schema Laravel
  - aksi lama sudah ada: `InsertKurikulum`
- `mata_kuliah`
  - saat ini sudah bisa import, tapi push direct/agent masih perlu aksi WS yang lebih lengkap
- `jadwal_kuliah`
  - aksi lama sudah ada: `InsertKelasKuliah`
- `krs`
  - aksi lama sudah ada: `InsertPesertaKelasKuliah`
- `nilai`
  - aksi lama sudah ada: `UpdateNilaiPerkuliahanKelas`

### Prioritas menengah

- `akm`
  - di aplikasi lama memakai `InsertPerkuliahanMahasiswa` dan `UpdatePerkuliahanMahasiswa`
  - di Laravel sekarang belum ada model/fitur Neo Feeder khusus untuk AKM
- `dosen_ajar`
  - di aplikasi lama menjadi modul tersendiri
  - di Laravel sekarang masih terwakili sederhana lewat relasi `jadwal_kuliah -> dosen`
- `kelulusan`
  - ada aksi lama `InsertMahasiswaLulusDO`
  - perlu dipastikan dulu target model produksi yang akan menyimpan status lulus/yudisium

## Yang jangan diambil apa adanya

Bagian ini sebaiknya tidak dibawa mentah ke project produksi:

- seluruh UI `admina/`
- `db.sql`
- login dan user management legacy dengan `md5`
- file `info.php`
- path hardcoded seperti `DIR_MAIN` dan `DIR_ADMIN`
- penyimpanan kredensial WS Neo Feeder di tabel lama dengan pola encode custom

Referensi risiko:
- [feeder-importer-master/admina/inc/login.php](../feeder-importer-master/admina/inc/login.php)
- [feeder-importer-master/info.php](../feeder-importer-master/info.php)
- [feeder-importer-master/admina/inc/config.php](../feeder-importer-master/admina/inc/config.php)

## Rekomendasi implementasi untuk project produksi

Urutan aman:

1. Lengkapi `NeoFeederClient` atau buat agent `push` lokal dengan helper WS dari folder lama.
2. Tambahkan entitas `kurikulum` ke `NeoFeederSyncService`, karena schema `feeder_id` sudah ada dan aksi WS lamanya jelas.
3. Tambahkan dukungan `jadwal_kuliah`, `krs`, dan `nilai` di jalur `push` agent/direct.
4. Tambahkan `AKM` hanya setelah model dan tabel lokalnya disepakati.
5. Biarkan `prodi` dan `dosen` tetap fokus di jalur `import` dulu, kecuali memang ada kebutuhan nyata untuk push dari SIAKAD ke Neo Feeder.

## Kesimpulan singkat

Yang perlu diambil dari `feeder-importer-master` adalah:
- helper koneksi WS Neo Feeder
- daftar aksi WS yang benar
- logika lookup ID referensi sebelum push
- urutan dependensi antar entitas

Yang tidak perlu diambil:
- tampilan admin lama
- database lama
- auth lama
- konfigurasi hardcoded
