Civil Service HR Core API
On this page
- Sekilas
- Yang dikerjakannya
- A. Menyimpan record pegawai yang lengkap
- B. Memperlakukan keluarga sebagai graf
- C. Membawa usulan pegawai melewati pemeriksaan
- D. Menyiapkan keputusan kenaikan gaji berkala, kenaikan pangkat, dan pensiun
- E. Menerapkan aturan yang diambil dari peraturan
- F. Menyimpan bagan organisasi berversi
- G. Memberi lingkup pada setiap akses
- H. Melapor, mengingatkan, dan mengundang
- I. Memasukkan data dari sistem lama
- J. Menandatangani dokumen di platform tanda tangan
- K. Melindungi akun dan identitas
- Antarmuka
- Standar
- Di dalamnya
- Keputusan rancangan
- Terkait
- Istilah
Civil Service HR Core API adalah inti sistem kepegawaian untuk aparatur sipil negara: aplikasi Laravel yang memegang setiap record pegawai dan setiap aturan yang berlaku atasnya. Ia menyimpan data personal, penempatan, keluarga, dan lebih dari dua puluh jenis riwayat karier, membawa usulan perubahan dari pegawai sendiri melewati pemeriksaan, menyiapkan keputusan kenaikan gaji berkala, kenaikan pangkat, dan pensiun, menerapkan aturan gaji dan pensiun yang diambil dari peraturan pemerintah, menyimpan bagan organisasi berversi, dan memutuskan siapa boleh melihat dan mengubah apa, sampai ke satu unit.
Ia dibangun untuk organisasi yang susunan dan aturannya ditetapkan peraturan dan berubah dari waktu ke waktu. Setiap aturan yang diterapkannya bisa ditelusuri ke peraturan yang diimplementasikannya, setiap angka turunan dihitung dari sumbernya dan tidak diketik, dan setiap akses adalah pemberian yang tercatat dan dibatasi waktunya.
Sekilas
| Bahasa & framework | PHP, dengan Laravel, di atas PostgreSQL dan Redis |
|---|---|
| Arsitektur | Stateless Laravel Core |
| Versi | 2.1.0 |
| Status | Dalam pengembangan |
| Bentuk | HTTP API dengan background worker; antarmuka user adalah aplikasi web terpisah |
| Kode sumber | Privat |
Yang dikerjakannya
A. Menyimpan record pegawai yang lengkap
Setiap orang punya data personal, kontak, alamat, dan gelar; setiap pegawai punya penempatan dan unit. Di sekelilingnya ada lebih dari dua puluh jenis riwayat karier — pendidikan, pangkat, jabatan, kenaikan gaji berkala, kinerja, cuti, pelatihan, penghargaan, mutasi, disiplin, dan lainnya — masing-masing dengan aturannya sendiri dan dokumen pendukung yang diwajibkan jenis itu. Kedudukan hukum seseorang berubah otomatis saat peristiwa yang ditetapkan peraturan, seperti cuti di luar tanggungan negara atau tugas belajar, dimulai dan berakhir.
B. Memperlakukan keluarga sebagai graf
Pasangan, orang tua, dan anak adalah hubungan antarorang, bukan field pada data pegawai, jadi anggota keluarga dicatat sekali dan ditautkan ke semua orang yang terkait dengannya. Status perkawinan diturunkan dari hubungan itu, dan module ini menyarankan siapa yang berhak atas tunjangan keluarga, lengkap dengan alasannya, untuk diputuskan admin.
C. Membawa usulan pegawai melewati pemeriksaan
Pegawai mengusulkan perubahan atas record-nya sendiri — ijazah baru, pernikahan, tanggal yang dikoreksi — beserta lampirannya. Pemeriksa menyetujui, mengembalikan, atau menolak setiap usulan, dan saat disetujui perubahan beserta lampirannya pindah ke record itu sendiri.
D. Menyiapkan keputusan kenaikan gaji berkala, kenaikan pangkat, dan pensiun
Module ini mendaftar siapa yang jatuh tempo kenaikan gaji berkala, kenaikan pangkat, atau pensiun, memberi tahu orang yang bertanggung jawab, dan membawa setiap kasus sampai keputusannya. Untuk kenaikan gaji berkala ia juga menyusun draf SK dalam PDF yang setiap angkanya berasal dari record dan bagian pertimbangannya mengutip peraturan yang menjadi dasarnya.
E. Menerapkan aturan yang diambil dari peraturan
Tabel gaji disimpan per peraturan beserta tanggal mulai berlakunya, sehingga gaji benar untuk tanggal mana pun, lampau maupun sekarang. Batas usia pensiun diambil dari jabatan yang dipegang, tanggal kenaikan pangkat menerapkan syaratnya berurutan, dan nilai kinerja dinilai menurut cara di zamannya sendiri.
F. Menyimpan bagan organisasi berversi
Susunan setiap perangkat daerah milik peraturan yang menetapkannya dan berlaku pada tanggalnya sendiri. Seluruh pemerintah bisa dibaca sebagaimana adanya pada hari apa pun, jabatan membentuk hirarkinya sendiri di atas unit, dan jumlah orang di setiap jabatan dihitung dari data pengangkatan.
G. Memberi lingkup pada setiap akses
Akses diberikan sebagai peran pada satu lingkup — seluruh sistem, kantor kepegawaian pusat, satu perangkat daerah, atau satu unit beserta unit di bawahnya. Pemberian akses diajukan dan disetujui oleh orang yang berbeda, kedaluwarsa dengan sendirinya, dan mengikuti pemegangnya saat ia pindah.
H. Melapor, mengingatkan, dan mengundang
Laporan mencakup daftar pegawai, daftar urut kepangkatan, rekapitulasi menurut dimensi apa pun, bezetting per perangkat daerah, pemberhentian, pelatihan, dan penghargaan, semuanya disaring menurut lingkup pembacanya. Pengingat jatuh tempo dikirim lewat email, dan undangan untuk membuat akun dikirim dalam gelombang harian.
I. Memasukkan data dari sistem lama
Record dari sistem yang digantikannya diimpor bertahap, dari sumber yang hanya dibaca, bisa diulang, dengan laporan setiap masalah yang ditemukan dan tanpa data pribadi di laporan itu.
J. Menandatangani dokumen di platform tanda tangan
Dokumen yang perlu ditandatangani diproses di platform tanda tangan eksternal, dengan module ini sebagai client-nya. User menautkan akunnya sekali lewat persetujuan; setiap tahap penandatangan didaftarkan ke platform, penandatangan menandatangani di sana dengan sertifikatnya sendiri, dan hasilnya dikabarkan balik sehingga PDF bertanda tangan disalin ke storage module ini. Bila kabar terlewat, statusnya bisa ditarik ulang.
K. Melindungi akun dan identitas
Orang login dengan token milik module ini sendiri atau lewat single sign-on eksternal, dengan autentikasi dua faktor. Identitas seseorang diverifikasi pada dua tingkat: tingkat dokumen, diperiksa petugas dari pindaian dokumen untuk orang tanpa akun seperti anggota keluarga, dan tingkat aktual, yang hanya dicapai pemilik akun lewat KTP dan tantangan wajah langsung. Data pribadi dienkripsi di database, dan foto identitas yang diperlihatkan kepada pemeriksa diberi watermark berisi nama yang melihatnya.
Antarmuka
| Area | Yang disediakannya |
|---|---|
| Autentikasi | login, refresh token yang berotasi, dua faktor, sign-on eksternal, public key token-nya |
| Orang dan identitas | data personal, tingkat identitas, verifikasi identitas dan antrean pemeriksaannya |
| Pegawai dan keluarga | record pegawai, penempatan, hubungan keluarga, saran tunjangan |
| Riwayat karier | setiap jenis record riwayat beserta dokumennya |
| Usulan | usulan perubahan dari pegawai dan pemeriksaannya |
| Layanan | kasus kenaikan gaji berkala, kenaikan pangkat, dan pensiun, keputusan, dan draf SK |
| Organisasi | peraturan, perangkat daerah, susunan berversi, peta jabatan, log perubahannya |
| Akses | pengajuan peran, persetujuan, pencabutan, katalog peran |
| Laporan | daftar, rekapitulasi, bezetting, dashboard |
| Data referensi | katalog semua tabel referensi, tempat antarmuka membangun form-nya |
| File dan tanda tangan | unggah lewat tautan berumur pendek, tahap penandatangan dan statusnya |
| Kesiapan | satu pemeriksaan untuk database, cache, storage, dan setiap service yang dibutuhkan inti |
Standar
| Standar | Yang dijaminnya di sini |
|---|---|
| JSON Web Token dengan RS256, dan JWKS yang dipublikasikan | satu format token untuk setiap login, bisa diverifikasi service mana pun tanpa memanggil inti |
| OAuth 2.0 dan OpenID Connect, dengan PKCE | login lewat identity provider eksternal, ditukar dengan token milik inti |
| TOTP (RFC 6238) | autentikasi dua faktor dengan aplikasi authenticator apa pun |
| Presigned URL, AWS Signature Version 4 | file berpindah antara browser dan storage tanpa melewati inti |
| W3C Trace Context dan OpenTelemetry | satu jejak dari request user sampai setiap background job dan panggilan service |
| UUIDv7 | ID publik yang terurut waktu dan tak membuka urutan internal |
| ISO 8583 dan ISO 4217 | setiap nominal disimpan sebagai integer dalam satuan terkecil mata uangnya |
| Surat edaran nasional tentang pengelolaan akses kepegawaian | akses diajukan dan disetujui, verifikator bukan penyetuju, pemberian akses paling lama dua tahun |
| Peraturan kepegawaian tentang gaji, pangkat, pensiun, dan tunjangan | setiap aturan yang diterapkan adalah yang berlaku pada tanggal yang dimaksud, dan mengutip dasar hukumnya |
Di dalamnya
Inti ini mengikuti Stateless Laravel Core: node tak menyimpan apa pun, pekerjaan lambat berjalan sebagai job antrean, file tak pernah menyentuh server, setiap login berakhir pada token milik inti, dan setiap request, job, dan panggilan keluar ditelusuri. Setiap service eksternal dijangkau lewat satu class tersendiri, dengan konfigurasi, timeout, dan keluarga error-nya sendiri, dan setiap domain bisnis — orang, keluarga, riwayat, usulan, layanan, organisasi, akses — punya service-nya sendiri yang dilewati baik route admin maupun usulan pegawai.
Keputusan rancangan
Usulan melewati aturan yang sama dengan suntingan admin. Perubahan yang diusulkan pegawai divalidasi oleh service domain yang sama dengan yang dipakai admin, jadi tak ada pintu samping yang lebih longgar ke dalam record. Usulan disimpan terenkripsi bersama snapshot record yang menjadi dasarnya, dan persetujuan ditolak bila record itu sudah berubah sejak diajukan — pemeriksa tak mungkin menyetujui usulan yang diam-diam menimpa koreksi orang lain yang datang belakangan. Pemeriksa tak boleh memutus usulan tentang dirinya sendiri atau keluarga intinya.
Aturan berasal dari peraturan, sebagai data bertanggal dan kode yang mengutip. Yang diubah peraturan — tabel gaji, cara penilaian — disimpan sebagai data dengan tanggal mulai berlakunya, sehingga peraturan baru ditambahkan, tidak ditulis menimpa yang lama, dan tanggal lampau tetap memakai aturannya sendiri. Yang tetap — menghitung masa kerja, membulatkan tanggal ke periode kenaikan pangkat berikutnya — adalah kode yang menyebut peraturan yang diimplementasikannya.
Hirarki tetap relasional, dan berversi. Bagan organisasi adalah data master bagi pegawai, jabatan, dan akses, jadi ia tinggal di database relasional yang sama, dengan foreign key yang melindungi setiap record yang menunjuk ke dalamnya. Setiap susunan adalah versi dengan tanggalnya sendiri, dan unit ditautkan ke pendahulunya, bukan dicocokkan lewat nama.
Lingkup adalah data, dan kode bertanya tentang izin. Pemberian akses adalah satu baris berisi user, peran, dan lingkup. Satu fungsi memutuskan apakah grant menjangkau sepotong data, daftar disaring dengan gabungan lingkup user, dan kode tak pernah memeriksa nama peran, jadi jenis pemeriksa baru cukup satu entri katalog.
Uang adalah integer. Setiap nominal disimpan, dihitung, dan dikirim sebagai bilangan bulat seperseratus rupiah, dinamai dengan sufiks yang menyatakan skalanya, sehingga tak ada lapisan yang bisa menghilangkan atau menambahkan pecahan rupiah.
Turunkan, jangan simpan. Jumlah orang di satu jabatan, unit kerja pegawai saat ini, lingkup tempat satu record berada, dan status perkawinan seseorang semuanya dihitung dari sumbernya. Angka turunan tak mungkin melenceng dari asalnya, dan bisa ditanyakan untuk tanggal berapa pun.
Sistem menyarankan; manusia memutuskan. Bila aturannya bergantung pada fakta yang tak sepenuhnya bisa dipercaya sistem — siapa yang masih berhak atas tunjangan keluarga, nilai ambigu masuk zaman yang mana — module ini menjawab ya, tidak, atau perlu ditinjau, beserta alasannya, dan admin yang mengambil keputusan.
Identitas punya dua tingkat. Anggota keluarga yang tak akan pernah punya akun tetap bisa dicatat dengan identitas yang diperiksa pada tingkat dokumen, sedangkan tingkat aktual disediakan bagi pemilik akun yang lolos pemeriksaan KTP dan wajah. Tak satu tingkat pun berpura-pura menjadi tingkat lainnya.
Data lama masuk bertahap. Database sistem lama dibaca tanpa pernah ditulisi, setiap tahap aman dijalankan ulang, dan setiap masalah yang ditemukan dilaporkan tanpa data pribadi, sehingga perpindahan ke module ini adalah rangkaian langkah yang diperiksa, bukan satu kali peralihan yang berisiko.
Terkait
Service storage tempat setiap dokumen dan lampiran berpindah.
Service alamat yang menyediakan wilayah untuk alamat setiap orang.
Tantangan wajah yang membuktikan pemilik akun benar-benar hadir saat verifikasi identitas.
Renderer yang memberi setiap dokumen unggahan pratinjau halaman pertamanya.
Platform tanda tangan tempat dokumen ditandatangani, dengan module ini sebagai salah satu client eksternalnya.
Tempat jejak satu request melewati semua service ini berakhir.
Bagaimana record sistem lama dimasukkan, tahap demi tahap.
Bagaimana aturan gaji, kenaikan pangkat, dan pensiun tetap sejalan dengan peraturan.
Kenapa setiap nominal adalah integer dalam satuan terkecil mata uangnya.
Bagaimana bagan organisasi berversi disimpan dan dibaca.
Bagaimana setiap admin mendapat akses tepat ke bagian organisasinya sendiri.
Istilah
- Riwayat karier
- Record bertanggal tentang perjalanan kerja pegawai — pangkat, jabatan, kenaikan gaji berkala, pendidikan, cuti, dan sejenisnya — masing-masing dengan dokumen pendukungnya.
- Usulan
- Perubahan yang diminta pegawai atas record-nya sendiri, baru diterapkan sesudah pemeriksa menyetujuinya.
- Lingkup
- Bagian organisasi tempat pemberian akses berlaku: semuanya, satu perangkat daerah, atau satu unit beserta unit di bawahnya.
- SK
- Surat keputusan, dokumen resmi yang mencatat keputusan tentang seorang pegawai, misalnya kenaikan gaji berkala.
- Perangkat daerah
- Dinas atau badan pemerintah yang susunannya ditetapkan peraturannya sendiri.
Technologies covered
- PHP
- Laravel
- PostgreSQL
- Redis
- FrankenPHP
- OpenTelemetry
- ISO 8583
- JWT
- OAuth 2.0
- OpenID Connect