Soal Ujian Test

Question Type: backend

Table of Content

Ketentuan

  • Kandidat dapat mengerjakan tugas ini pada word processing application (misalnya microsoft word) atau text processing application (misalnya notepad++).
  • Kandidat tidak boleh menggunakan database dalam mengerjakan tugas ini.
  • Jawaban disampaikan dalam 2 format:
    • tulisan dalam bentuk code (bebas menggunakan bahasa pemrograman apa saja)
    • Video running program sesuai dengan skenario yang dipersyaratkan. Unggah video tersebut ke cloud storage (misalnya youtube, google drive, dll), kemudian share link video tersebut pada lembar jawaban saudara.

Penjadwalan Kamar Operasi

Tag: Struktur Data, Algoritma

Buatlah kode REST API untuk penjadwalan kamar operasi, dimana jarak antara satu operasi dengan operasi yang lain minimal 2 jam. Jika seorang dokter ingin booking kamar operasi, dokter tersebut harus menyampaikan tanggal dan jam kapan dia mau menggunakan kamar operasi, dan estimasi durasi operasi tersebut. endpoint untuk REST API adalah berikut ini:

localhost:8080/bookingkamaroperasi/{bookingdate}/{durasi};

Response dari API tersebut ada dalam body, berisi hanya 2 kemungkinan saja: true atau false.

Skenario

Jalakan service REST API yang sudah dibuat, kemudian panggil bookingkamaroperasi berturut-turut seperti dibawah ini:

  1. Ada seorang dokter yang meminta booking kamar operasi, untuk tanggal 01/01/2022 jam 10:00 selama 2 jam. Karena belum ada yang booking, maka permintaan booking ini akan berhasil, hasil pemanggilan method bookingkamaroperasi akan bernilai true.

  2. Kemudian ada dokter lain yang meminta booking kamar operasi, untuk tanggal 01/01/2022 jam 15:00 selama 2 jam. Booking pertama ada pada pukul 10, dan durasi booking pertama 2 jam, maka operasi berikutnya baru boleh paling cepat pada pukul 14:00. Karena permintaan booking untuk pukul 15:00, maka maka permintaan booking ini akan berhasil, hasil pemanggilan method bookingkamaroperasi akan bernilai true.

  3. Kemudian ada dokter lain yang meminta booking kamar operasi, untuk tanggal 01/01/2022 jam 18:00 selama 2 jam. Booking pertama ada pada pukul 10, dan durasi booking pertama 2 jam, maka operasi berikutnya baru boleh paling cepat pada pukul 14:00. Kemudian ada booking kedua pada pukul 15:00 selama 2 jam, maka operasi berikutnya paling cepat pada pukul 19.00. Karena permintaan booking ini untuk pukul 15:00, maka maka permintaan booking ini akan gagal, hasil pemanggilan method bookingkamaroperasi akan bernilai false.

  4. Kemudian ada dokter lain yang meminta booking kamar operasi, untuk tanggal 01/01/2022 jam 07:00 selama 2 jam. Booking pertama ada pada pukul 10, dan karena jarak antar operasi adalah 2 jam, maka operasi sebelumnya harus selesai pada jam 08:00. Karena permintaan booking ini untuk pukul 07:00 dan durasi 2 jam, maka selesainya operasi pada jam 09:00, maka maka permintaan booking ini akan gagal, hasil pemanggilan method bookingkamaroperasi akan bernilai false.

Penggajian

Tag: Modularity, Design Pattern

Dalam perusahaan global, dimana karyawan ada di berbagai negara, maka besar kemungkinan untuk membayar gaji pegawai di beberapa negara, dimana tiap-tiap negara memiliki regulasi penggajian yang berbeda beda. Katakanlah kita akan melalukan pembayaran gaji untuk karyawan di Indonesia dan di Vietnam. Gaji karyawan di Indonesia dalam Rupiah (IDR) dan karyawan di Vietnam dalam Dong (VND).

Indonesia

Di Indonesia, dalam menghitung pajak penghasilan, digunakan rumus berikut:

penghasilan netto = semua penghasilan - PTKP

PTKP = penghasilan tidak kena pajak, sesuai dengan tarif berikut:

Status PerkawinanSimbolTarif PTKP (dalam juta IDR)
Belum KawinTK25
Kawin dan belum punya anakK050
Kawin dan sudah punya anakK175

Tarif pajak penghasilan tahunan:

Rentang penghasilan netto (dalam juta IDR)Tarif pajak
0 - 505 %
50 - 25010 %
> 25015 %

Vietnam

Di Vietnam, dalam menghitung pajak penghasilan, digunakan rumus berikut:

penghasilan netto = semua penghasilan - asuransi - PTKP

PTKP = penghasilan tidak kena pajak, sesuai dengan tarif berikut:

Status PerkawinanTarif PTKP (dalam juta VND)
Belum Kawin15
Sudah Kawin30

Tarif pajak penghasilan tahunan:

Rentang penghasilan netto (dalam juta VND)Tarif pajak
0 - 502.5 %
> 507.5 %

Tugas

Buatlah REST API untuk menghitung gaji, dengan http POST endpoint seperti dibawah ini:

localhost:8080/hitunggaji

dengan request body berbentuk json seperti ini:

{
  "employee": {},
  "komponengaji": [{}, {}]
}

Pada json diatas, employee masih kosong, silahkan diimplementasikan struktur data yang cocok untuk merepresentasikan object employee.

Pada json diatas, komponengaji adalah json array yang masih kosong. disini dipakai json array karena komponen gaji bisa lebih dari satu. silahkan diimplementasikan struktur data yang cocok untuk merepresentasikan object komponengaji.

Skenario

Jalankan REST API service yang sudah dibuat, kemudian lakukan pemanggilan berikut:

Indonesia

seorang karyawan di Indonesia yang sudah menikah dah memiliki anak dengan gaji bersih 30 juta perbulan akan mendapatkan pajak berikut:

penghasilan netto pertahun = (30 juta x 12 bulan ) - 75 = 360-75 = 285

pajak penghasilan:

layerrumuspajak (dalam juta IDR)
5050 * 5 %2.5
50 - 250(285 - 50) * 15 %35.25

total pajak setahun = 2.5+32.25 = 37.75 juta

total pajak bulan ini = 37.75 / 12 = 3.146 juta

Tentukan request body yang merepresentasikan skenario ini, kemudian panggil API hitunggaji, maka response body adalah 3.146.000.

Vietnam

seorang karyawan di Vietnam yang sudah menikah dengan gaji bersih 30 juta perbulan dan tunjangan asuransi 1 juta per bulan, akan mendapatkan pajak berikut:

penghasilan netto pertahun = (30 juta x 12 bulan) - (1 juta x 12 bulan) - 30 = 360-12-30 = 318

pajak penghasilan:

layerrumuspajak (dalam juta VND)
5050 * 2.5 %1.25
> 50(285 - 50) * 7.5 %20.1

total pajak setahun = 1.25+20.1 =21.35 juta

total pajak bulan ini = 21.35 / 12 = 1.779 juta

Tentukan request body yang merepresentasikan skenario ini, kemudian panggil API hitunggaji, maka response body adalah 1.779.000.

Mendeteksi Alergi Obat

Tag: Struktur Data, Searching

Beberapa pasien memiliki alergi terhadap obat tertentu, misalnya obat yang mengandung aspirin, ibuprofen, dan naproxen.

Tugas

Buatlah REST API yang dapat mengevaluasi potensi alergi obat pada seorang pasien atas sebuah resep.

Code Snippet

Berikut endpoint API dari service tersebut:

localhost:8080/validasialergiobat

Dengan request body berbentuk json seperti ini:

{
  "pasien": {},
  "resep": [{}, {}]
}

Pada json diatas, pasien masih kosong, silahkan diimplementasikan struktur data yang cocok untuk merepresentasikan object pasien.

Pada json diatas, resep adalah json array yang masih kosong. disini dipakai json array karena resep bisa lebih dari satu. silahkan diimplementasikan struktur data yang cocok untuk merepresentasikan object resep.

Yang mendapat perhatian lebih

Satu obat, dapat memiliki beberapa kandungan sekaligus. Satu obat boleh jadi memiliki 1 kandungan utama. Contohnya Paratusin yang memiliki kandungan utama paracetamol 125 mg, disamping kandungan lainnya terdiri dari pseudoepedrid 7.5 mg, noscapine 10 mg, ctm 0.5 mg, guafenisin 25 mg, succus liquiritae 125 ethanol 10 %

Yang tidak boleh dilakukan

Mendelegasikan search problem pada database. Milsalnya, untuk mencari obat dengan yang memiliki kandungan ibuprofen, maka dicari dengan sql berikut:

select obat from obat where lower(kandungan) like '%ibuprofen%'

Search diatas dilarang dilakukan, sebab kami ingin mengetahui kemampuan logika yang dimiliki kandidat. Untuk hal itu, kandidat bisa menggunakan array atau collection untuk menyimpan data obat dan kandungannya, kemudian menggunakan trik pemrograman untuk mendapatkan data yang dimaksud.

Yang harus diperhatikan

  1. Kebersihan kode. buatlah kode yang sebersih mungkin dengan menerapkan SOLID principle, dan design pattern yang mungkin bermanfaat.
  2. Performa. Perhatikan jumlah loop/iterasi yang digunakan. Bayangkan jika katalog obat sudah mencapai 2 juta jenis obat, dan 500 ribu merek obat.

Skenario

Misalanya pasien anak atas nama Bejo, mengidap alergi ibuprofen. Setelah konsultasi rawat jalan, dokter memberi resep berupa: Proris sirup 60ml dan Paratusin sirup 60ml. Maka ketika validasiAlergiObat dipanggil, dia akan me-return collection Obat dengan panjang 1, berisi Proris. Hal ini dikarenakan Proris mengandung ibuprofen dimana Bejo alergi terhadapnya

{
  "resep": [{ "obat": "Proris" }]
}

Memperbaharui data secara otomatis dan terjadwal

Tag: Basic Programming

Dalam dunia medis, umur merupakan data yang penting. Tidak seperti orang awam yang menyebut umur dalam magnitude tahun, dalam dunia medis, umur sangat detail yakni terdiri dari Tahun Bulan dan Hari.

Misalnya seorang pasien yang lahir tanggal 28 Oktober 1983, maka pada tanggal 3 Oktober 2022 umurnya 38 tahun 11 bulan dan 6 hari.

Tugas

Buatlah REST API menghitung umur pada data pasien.

Endpoint

localhost:8080/calculateage/{dateofbirth}

yang memiliki response body

{
  "umur": {
    "year": 1,
    "month": 1,
    "day": 1
  }
}

Skenario

Tanggal LahirREST API dipanggil pada tanggalresponse body jika diubah dalam string berformat yy/mm/dd
28-10-198303-10-202238/11/06
04-10-202238/11/07
13-11-198203-10-202239/10/20
04-10-202239/10/21