Anda di halaman 1dari 81

Modul Bimbingan Teknis

Konsolidasi Data
SP4N Lapor!
30 Agustus 2022
Outline Bimtek Konsolidasi Data
• Pengenalan konsolidasi data
• Pengenalan aplikasi konsolidasi data
https://konsolidasidev.layanan.go.id
• Kamus Data SP4N Lapor
• Tutorial perancangan konsolidasi data
• Tutorial penggunaan aplikasi konsolidasi data
• Tutorial eksekusi konsolidasi data

2
Manfaat Konsolidasi Data

Upgrade aplikasi Pindah aplikasi Agregasi data dari


[App ver X => App ver Y] [Sistem A => Sistem B] berbagai aplikasi

• Contoh: Aplikasi LPSE • Contoh: Aplikasi • Contoh: Aplikasi


Versi 5 ke LPSE Versi 6 persuratan milik instansi manajemen lab ke NAR
• Sumber dan tujuan (aplikasi sejenis) ke • Aplikasi sumber dan
masing-masing 1 pasang aplikasi umum kearsipan tujuan tetap operasional
• sumber di-shutdown SRIKANDI
• Aplikasi lama di-shutdown
Instansi Pusat
A Data
Instansi Nasi-
B onal
3
Contoh Konsolidasi Aplikasi Umum: SRIKANDI

• Konsolidasi jutaan data naskah masuk, naskah keluar, disposisi, dan


tindak lanjut
• Migrasi file digital dari berbagai macam format seperti file, BLOB, Base 64
BLOB
• Ada banyak aplikasi sejenis yang digunakan oleh Instansi Pemerintahan
4
Topik Tutorial: Konsolidasi Data Pengaduan
• Dalam bimtek ini, Anda akan dipandu bagaimana melakukan
konsolidasi data pengaduan dari instansi Anda ke aplikasi umum
pengaduan masyarakat
• Mohon persiapkan koneksi ke Basis Data (staging / live) ataupun
dump database dari aplikasi sejenis yang dikelola
• Untuk memperdalam pemahaman, modul tutorial ini dapat
dikerjakan di luar waktu bimtek
• Materi dapat diakses pada https://s.id/konsolidasilapor
• Harap perhatikan materi pada bimtek / video ini

5
Teknik Mapping

6
Teknik Mapping: Entity-Relationship +
Ontology Matching
• Memetakan entitas data yang sejenis
• “Pengaduan” ⬄ “Pengaduan” [Nama sama]
• “Complaints” => “Lapor” [Komplain adalah bagian dari laporan]
• “Pengaduan” => “Complaints” [Alih bahasa]
• “Pengaduan” ≠ “Respon Aduan” [Walaupun ada hubungannya, tapi 2 entitas ini
berbeda]
• Memetakan kolom data yang kongruen
• “nama” => “nama” [Label sama]
• “nama_pengadu” => “name” [Menunjuk ke hal yang sama]
• “kel” … “location_id” [biasanya kolom kel hanya menyimpan nama kelurahan lokasi
laporan. Jika ingin dipetakan, perlu transformasi terlebih dahulu dan nilai komposit
dari provinsi+kota+kecamatan+kelurahan-nya supaya location_id dapat diperoleh]
7
Teknik Mapping: Master-Data Management
(MDM)
• Tabel pada basis data dapat diklasifikasi menjadi 5 level:
1. Reference: Data referensi. Tidak berubah
2. Master: Data yang bertambah dengan volume kecil. Perubahannya minor dan
relatif jarang
3. Master Detail: Data yang menjelaskan tentang Master
4. Transaction: Data yang bertambah dengan volume besar
5. Transaction Detail: Data yang menjelaskan tentang Transaction
• Hubungan data hanya dapat dilakukan dengan level di atasnya atau yang
selevel
• Master bisa mengacu ke reference / master lainnya
• Master detail bisa mengacu ke Master / reference / master detail lainnya
• Master detail tidak bisa mengacu ke Transaction / Transaction detail
8
Mapping Tabel

App Lapor Sejenis MDM MDM SP4N Lapor


kategori Master / Reference Master lapor_complaint_categories
Reference lapor_complaint_classificati
skpd Master ons
Master lapor_admin_institutions

pengaduan Transaction
Transaction lapor_complaint_complaint
s
Transaction lapor_complaint_followups

9
Mapping Kolom
lapor_admin_institutions
id
name
skpd slug
id
nama_skpd ? alias
institution_type_id
alamat location_code
parent_id
email
address
website
phone
fax
10
Teknik Mapping Kolom
• Identifikasi Domain, Ko-Domain, Range, dan Undefined dari kedua
belah data
• Domain: Data yang ada pada sumber data
• Ko-Domain: Data yang ada pada tujuan data
• Range: Data yang berhasil di-mapping ke
tujuan data 7
7
• Undefined: Data dari sumber data yang
tidak dapat di-mapping ke tujuan data
• Domain: {1,2,3,4,5}
• Ko-Domain: {4,8,12,16,20,22,24}
• Range: {4,8,12,16,20}
• Undefined: {77} 11
Teknik Mapping Kolom
• 4 jenis mapping kolom
• Perfect mapping: Domain ≡ Ko-Domain
Cukup perlu mapping sederhana
• Perfect transformable mapping: F(Domain) ≡ Ko-Domain
- Perlu definisi fungsi transformasi yang sesuai
- Seluruh kolom yang mengacu ke ini perlu di-transformasi juga
• Whole transformable mapping: F(Domain) ≡ Range ⊂ Ko-Domain
- Perlu definisi fungsi transformasi yang sesuai
• Imperfect mapping: F(Domain) ⊄ Ko-Domain (Ada Undefined)
- Perlu ada kompromi untuk menentukan data yang Undefined disubstitusi
oleh value apa

12
Mapping Data
id nama_skpd alama id name address
t 127334 Dinas Komunikasi dan Informatika -
111Dinas Kependudukan dan Pencatatan Sipil - Dinas Kependudukan dan
131882 Pencatatan Sipil -
112Dinas Komunikasi dan Informatika -

13
Mapping Kolom

skpd lapor_admin_institutions
Perfect transformable
id mapping id
nama_skpd Perfect name
mapping
Perfect
alamat address
mapping

Implikasinya, semua kolom yang


mengacu ke id skpd harus di-mapping
dengan fungsi transformasi tersebut

14
Overview Kamus Data
SP4N Lapor!

15
16
Tutorial Penggunaan Aplikasi
Konsolidasi Data

17
Buka alamat
https://konsolidasidev.layanan.go.id/
Kemudian klik tombol Log In

18
Masukkan email dan password,
kemudian klik Log In

19
Tampilan setelah login sukses

20
Pembuatan Proyek
Konsolidasi Data

21
Klik menu “Aplikasi Umum”
pada daftar menu

22
Klik nama aplikasi LAPOR!

23
Klik “Gunakan Template” pada
template “Lapor Masyarakat”

24
Masukkan informasi nama
proyek konsolidasi kemudian
klik “Simpan”
25
Proyek konsolidasi berhasil
tersimpan

26
Input Definisi Sumber Basis Data

27
Klik nama proyek

28
Klik menu Sumber Basis Data

29
Klik tombol Tambah (+)

30
Masukkan definisi
koneksi basis data
aplikasi Anda

Password: generate

31
Klik Tombol Tes Koneksi
Jika sudah benar, akan muncul
pesan “Koneksi Berhasil”
32
Klik tombol “Simpan”
33
Definisi koneksi basis data
sumber berhasil ditambahkan

34
Input Definisi Tujuan API

35
Klik menu “Tujuan Data”
kemudian “Tujuan API JSON”

36
Klik tombol edit (pensil)
Pada halaman ini dapat
dilihat definisi API JSON
yang menjadi tujuan
penyimpanan data

37
Berikut adalah definisi API
yang digunakan pada
konsolidasi data Post Aduan
Nama: Nama dari tujuan data
Base Endpoint: alamat dasar
dari suatu API, bisa diubah
sesuai kebutuhan
Function Getendpoint: daftar
API yang digunakan
Function Pengambilan Data:38
implementasi fungsi konsolidasi
Function doInsert
'doInsert' => function($params, $variables, $endpoints, $data, $job_execution) {
return;
try {
$respdata = postJson($endpoints[0], [
'json' => [
'data' => $data,
],
]);
logJobExecution($job_execution, "info", "Response: " . json_encode($respdata));
} catch (\Exception $e) {
logJobExecution($job_execution, "info", "Error #1: " . $e->getMessage());
}
},

Melakukan inserting terhadap data


Melakukan insert data dengan
memetakan ID Sumber data
Function doInsertIdMap dengan ID Tujuan Data
'doInsertIdMap' => function($params, $variables, $endpoints, $data, $job_execution, $previds, &$new_idmaps) {
$error = false;
$institution_id = $variables['institution_id'];
$ip_address = $variables['ip_address']; Penggunaan variabel
$user_id = $variables['user_id'];
$auth = [ authentikasi (
'login' => $variables['auth_login'],
'password' => $variables['auth_password'],
https://s.id/tutorialapilapor)
'fcm_token' => $variables['auth_fcm_token']
];
try {
$resptoken = fetchJson($endpoints['instansi_token'].'?institution_id='.$institution_id.'&ip_address='.$ip_address)
;
if(isset($resptoken->results)){
// get token user api
$resptokenuser = postJson($endpoints['token'], [
Get token authentikasi terlebih
'headers' => [ dahulu
'token' => $resptoken->results->token
],
'form_params' => $auth,
]);
Melakukan insert data dengan
memetakan ID Sumber data
Function doInsertIdMap dengan ID Tujuan Data
if(isset($resptokenuser->results)){
if(count($data) == 0){
throw new \Exception("Data yang akan di proses kosong");
}
} else {
$error = true;
logJobExecution($job_execution, "info", "Error: Gagal mengambil token user API");
}
} else {
$error = true;
logJobExecution($job_execution, "info", "Error: Gagal mengambil token instansi");
}
} catch (\Exception $e) {
$error = true;
logJobExecution($job_execution, "info", "Error #2: " . $e->getMessage());
return;
}
if($error){
Fungsi validasi jika terjadi error
throw new \Exception("Terjadi kesalahan pada pengambilan token");
}
Mapping data
Function doInsertIdMap
foreach($data as $i => $row) {
$row = (object)$row;
$row->tanggal_input = ($row->tanggal_input != "0000-00-00"?$row->tanggal_input:"1970-01-01");
// mapping data to data post
$followupContent = substr(($row->pesan_progres?("[Progres] ".($row->pesan_progres?(!empty($row-
>pesan_progres)?$row->pesan_progres:"Tidak Ada Pesan"):"Tidak Ada Pesan")):"[Progres] Tidak Ada Pesan"),0,1000);
$post = [
"title" => $row->title,
"content" => $row->content?(!empty($row->content)?$row->content:"Tidak Ada Konten"):"Tidak Ada Konten",
"channel" => 3, // 3 = API
"is_new_user_slider" => false,
"user_id" => $user_id, // by create user and check user in api LAPOR
"emailUser" => !empty($row->email)?substr($row->email,149):"",
"nameUser" => !empty($row->nama)?substr($row->nama,149):'Anonim',
"phoneUser" => $row->hp??null,
"is_disposisi_slider" => false,
"is_process_slider" => true,
"classification_id" => 6, // check by api clasisification, default : 6 is "Pengaduan Tidak Berkadar Pengawasan"
"disposition_id" => null, // check by id disposisi(optional)
"category_id" => $row->category_id, // check by api category, default : 110 is "Topik Lainnya"
"priority_program_id" => null, // check by api program(optional)
Mapping data
Function doInsertIdMap

"location_id" => null, // check by api location(optional)


"community_id" => null, // check by api community(optional)
"date_of_incident" => date("Y-m-d", strtotime($row->tanggal_input)),
"copy_externals" => [0], // (optional)
"info_disposition" => " ", // (optional)
"info_attachments" => [], // check by api upload acuan file(optional)
"tags_raw" => "", // (optional)
"is_approval" => true, // (optional)
"is_anonymous" => empty($row->nama), // (optional)
"is_secret" => false, // (optional)
"is_priority" => false, // (optional)
"attachments" => [], // check by api upload acuan lampiran(optional)
"followup-secret" => " ",
"followup-content" => $followupContent // konten progress
];
Function doInsertIdMap
Post data ke JSON

$respAcuan = postJson($endpoints['add_aduan'], [
'headers' => [
'token' => $resptoken->results->token,
'Authorization' => "Bearer ".$resptokenuser->results->token
],
'form_params' => $post,
]);
$respAcuan = (object)$respAcuan;
$new_idmaps[$previds[$i]] = $respAcuan->complaint_id;
logJobExecution($job_execution, "info", "Response: " . json_encode($respAcuan));
}

Mapping ID yang didapatkan ke


$new_idmaps
Klik Tombol Simpan untuk
menyimpan konfigurasi fungsi
API JSON 45
Input Konfigurasi Variabel

46
Klik Menu “Lainnya” kemudian menu
“Variables”

47
Masukkan informasi
authentikasi instansi Anda (
https://s.id/tutorialapilapor)

Klik tombol “Simpan”

48
Pembuatan Job Konsolidasi Data

49
Klik navigasi “Menu”

50
Klik menu “Definisi Jobs”

51
Pada baris #1, klik tombol
“Aksi” kemudian “Edit”

52
Akan muncul halaman
“Edit Job”
Isikan dengan nama mapping

Isikan dengan deskripsi


Pilih sumber yang sesuai
Pilih koneksi yang sesuai

Pilih tujuan yang sesuai Pilih koneksi yang sesuai

Klik tombol Ambil metadata


untuk membaca metadata dari
basis data

Definisi sumber nilai data Pilih tipe cara pengambilan Pilih kolom yang hendak diisi
data yang sesuai

53
Klik “Lihat Tabel” untuk
melihat isi dari sumber

54
Contoh sumber data
“pengaduan”

55
Contoh sumber data
“pengaduan”

56
Sumber data dari
query ke database

Sambungkan ke API [Lapor]


Post Aduan

57
Mapping data per
kolom, ikuti template

58
Pendefinisian Konsolidasi Nilai
Data per Pemetaan

59
Tipe Konsolidasi Nilai Data

Map • Pemetaan langsung dari sumber data


• Nilai akan diset sama dengan sumber

Lookup • Pemetaan menggunakan konversi kode dari definisi excel / csv


• Cocok untuk pemetaan kode yang berbeda seperti id_kategori

Function • Pemetaan menggunakan fungsi dalam Bahasa PHP


• Cocok untuk pemrosesan data yang kompleks

Constant • Pemetaan menggunakan nilai konstanta


• Contoh: null, 1, 100, "test" (string menggunakan kutip 1 / kutip 2)

Expression • Pemetaan menggunakan variabel sederhana atau komposisinya


• Contoh: $params['row']->col1 + $params['row']->col2

60
Pilih kolom ‘id’ untuk
dipetakan dari sumber
61
Pilih kolom ‘id’ untuk
dipetakan ke tujuan data

62
Mapping id ke id terdefinisi

63
Klik tombol Simpan
64
Konsolidasi IDMap

65
Map vs IDMap
• Konsolidasi nilai tipe map hanya akan menyalin nilai saja
• Pada aplikasi tujuan, seringkali data baru diterima dengan ID increment / rule
tertentu (istilahnya surrogate key)
• Sangat sulit jika memetakan nilainya satu per satu
• Belum lagi untuk nilai pada tabel lain yang mengacu pada ID tersebut

Map • Pemetaan langsung dari sumber data


• Nilai akan diset sama dengan sumber

IDMap • Pemetaan kolom ID yang nilainya mengikuti aturan ID pada basis data tujuan
• Cocok untuk surrogate key

IDMap Lookup • Pemetaan pada kolom yang mengacu pada ID yang dipetakan dengan IDMap
• Cocok untuk foreign key

66
Klik menu Transformasi di
bagian atas lalu pilih
submenu IDMap

67
Klik tombol Tambah ID Maps

68
Masukkan nama ID Complaints
lalu klik simpan

69
Kembali ke menu Transformasi
lalu pilih submenu Definisi Jobs

70
Klik tombol “Aksi” pada job Sync
Pengaduan lalu klik tombol Edit

71
Ubah jenis mapping pada id
menjadi IDMap

72
Pilih nama IDMap “ID
Complaints”

73
Eksekusi Konsolidasi Data

74
Buka halaman definisi Job

Klik tombol “Run”

75
Jika pesan sukses sudah muncul akan muncul
loading bar penanda proses eksekusi

76
Melihat Hasil Konsolidasi Data

77
Buka halaman
https://lapor.konsolidasiapp.layanan.go.id/

78
Login dengan akun
konsolidasi lapor
79
Data laporan sudah muncul

80
Mapping Berikutnya
• Data kategori pengaduan
• Pengguna / akun aplikasi pengaduan
• Mapping pengaduan eksisting ke kategori pada SP4N Lapor
• Tindak lanjut pengaduan
• Tanggapan pelapor
• Status pengaduan
• Linking SKPD penjawab pengaduan
• Lampiran pengaduan

81

Anda mungkin juga menyukai