# Mapping Awal Neo Feeder dari Koleksi Postman

**Status:** draft eksplorasi berdasarkan `Restful Neo Feeder.postman_collection.json` yang diberikan pengguna. Bukan kontrak resmi terverifikasi untuk Feeder 3.1.0 / DB 3.55. Contoh payload dalam koleksi memuat data sintetis/placeholder dan beberapa nilai tampak tidak realistis; jangan kirim contoh mentah ke Feeder.

**Pemeriksaan struktur 2026-11-05:** koleksi berisi 244 request. Sebanyak 17 label request tidak sama dengan nilai `act` pada contoh body; terdapat juga request ganda. Hasil pemeriksaan hanya mencatat nama/field, tidak menyalin nilai contoh yang dapat berisi data sensitif. Pemetaan per method wajib memakai nilai `act` dan body resmi untuk versi kampus, bukan label item Postman saja.

**Catatan kecocokan versi (2026-11-05):** halaman login publik yang menampilkan Neo Feeder `3.1.0` / database `3.55` mengonfirmasi bahwa pasangan versi tersebut digunakan pada suatu instalasi publik, tetapi tidak menyediakan kontrak Web Service. Panduan Web Service publik LLDIKTI III yang ditemukan berlabel `2.4.0`; koleksi Postman yang diberikan pengguna juga tidak menyatakan versi. Karena itu belum ada bukti publik yang mengikat nama method, field, dan payload koleksi tersebut ke Feeder kampus `3.1.0` / DB `3.55`.

## Cakupan awal yang relevan

| Domain SIAKAD | Method yang terlihat di koleksi | Catatan pemetaan awal |
|---|---|---|
| Autentikasi/metadata | `GetToken`, `getDictionary` | Adapter harus mengelola token dan dictionary; rahasia tidak masuk log. |
| Institusi/periode/prodi | `GetProfilPT`, `GetSemester`, `GetProdi`, `GetAllProdi` | Referensi eksternal dan kode semester disimpan terpetakan, bukan menjadi primary key lokal. |
| Mahasiswa | `GetListMahasiswa`, `GetBiodataMahasiswa`, `InsertBiodataMahasiswa`, `UpdateBiodataMahasiswa` | Pisahkan orang/biodata dari riwayat pendidikan/registrasi. PII sangat sensitif. |
| Riwayat pendidikan | `GetListRiwayatPendidikanMahasiswa`, `InsertRiwayatPendidikanMahasiswa`, `UpdateRiwayatPendidikanMahasiswa` | Contoh insert mencakup `id_mahasiswa`, `nim`, `id_periode_masuk`, `id_prodi`, dan atribut pendaftaran. Perlu detail response dan key aktual. |
| Kurikulum/mata kuliah | `GetListMataKuliah`, `Insert/UpdateMataKuliah`, `GetListKurikulum`, `Insert/UpdateKurikulum`, `InsertMatkulKurikulum` | Entitas mata kuliah, versi kurikulum, dan anggota kurikulum terpisah. |
| Kelas/pengajar/peserta | `GetListKelasKuliah`, `Insert/UpdateKelasKuliah`, `InsertDosenPengajarKelasKuliah`, `InsertPesertaKelasKuliah` | Kelas ditautkan ke prodi, semester, mata kuliah; dosen dan peserta berupa relasi tersendiri. |
| Nilai/hasil studi | `GetListNilaiPerkuliahanKelas`, `UpdateNilaiPerkuliahanKelas`, `Get/Insert/UpdatePerkuliahanMahasiswa`, `GetRiwayatNilaiMahasiswa` | Bedakan nilai per kelas dari ringkasan status/IPS/IPK/AKM per semester. Aturan kalkulasi kampus tetap otoritatif. |
| Kelulusan | `GetListMahasiswaLulusDO`, `Insert/UpdateMahasiswaLulusDO` | Simpan peristiwa/status kelulusan dengan riwayat dan persetujuan; jangan hard delete setelah pelaporan. |
| Ekspor/rekap | `ExportDataMahasiswa`, `ExportDataMahasiswaKRS`, `ExportDataKelasPerkuliahan`, `ExportDataAktivitasKuliah`, serta fungsi rekap | Nama menunjukkan kemampuan ekspor; semantik, format, dan side effect harus diperiksa sebelum dipakai. |

## Prinsip skema lokal
- Primary key internal SIAKAD tetap milik domain lokal. Pemetaan eksternal disimpan di tabel integrasi dengan `entity_type`, `local_id`, `external_system`, `external_id`, status, versi mapping, dan timestamps; constraint unik sesuai sistem dan entitas.
- Pisahkan `students`/biodata dari `student_academic_records` (riwayat registrasi per prodi/jenjang). Seorang individu dapat memiliki lebih dari satu riwayat pendidikan.
- Model periode akademik lokal tetap dapat dikonfigurasi. `id_periode_masuk` adalah kode periode masuk eksternal; jangan menganggapnya sama dengan PK `th_akademik_id`. Konversi lewat tabel periode dan validasi kode.
- Pisahkan mata kuliah, versi kurikulum, anggota kurikulum, kelas kuliah, pengajar kelas, peserta/KRS, nilai, dan ringkasan aktivitas kuliah per semester.
- Simpan batch dan item sinkronisasi terpisah dari data bisnis; impor masuk ke staging/review. Retry harus tercatat dan tidak otomatis menggandakan record.
- Field Feeder yang belum dimodelkan dapat tinggal di adapter/mapping versioned, bukan menjadi kolom spekulatif atau JSON bebas di seluruh tabel inti.

## Observasi kualitas koleksi
Koleksi menyediakan contoh POST berisi `act`, `token`, serta pola `filter/order/limit/offset` untuk query, dan `record`/`key` pada beberapa operasi tulis. Ini hanya pola yang tampak pada sampel. Koleksi mengandung variasi penamaan field (contoh insert/update kelas) dan nilai contoh yang perlu diverifikasi. Respons examples tidak menjamin field wajib atau batasan API pada versi 3.1.0.

## Penerimaan bertahap
1. Uji `GetToken` dan operasi baca yang diperlukan di sandbox; catat request/response tanpa menyimpan token atau PII.
2. Validasi key, tipe, nullability, dictionary, pagination, error, dan perilaku token terhadap respons sandbox.
3. Setujui pemilik data dan konflik untuk setiap entitas/field.
4. Baru aktifkan preview/staging dan operasi tulis; gunakan operator berwenang dan urutan dependensi referensial.

## Referensi
- [Spesifikasi Neo Feeder](09-neo-feeder.md)
- [Model data/domain](05-model-data.md)
- [Alur kerja](07-alur-kerja.md)
- [Catatan keputusan](15-catatan-keputusan.md)
