Aplikasi ini adalah aplikasi penghitung suara yang digunakan dalam Pemilu mahasiswa UTM 2020.
Aplikasi ini dikembangkan dengan menggunakan tool frm-adiputra/csv2postgres. Sehingga pada dasarnya, aplikasi ini adalah aplikasi untuk membuat table dan view pada PostgreSQL serta mengimpor data ke dalamnya.
Untuk melakukan penghitungan suara, aplikasi ini akan melakukan hal-hal sebagai berikut:
- Inisiasi: generate salt, generate kode program untuk mengolah database.
- Membuat berbagai table dan view pada database.
- Mengimpor berbagai data pemilu ke dalam database.
Hasil penghitungan akan dapat dilihat melalui berbagai view yang ada pada database.
Dokumen ini adalah petunjuk penggunaan dari aplikasi penghitung suara. Dokumen-dokumen lainnya terkait aplikasi ini dapat dilihat melalui link berikut:
- Go 1.15+
- Node 14+
- PostgreSQL 9+
Clone repository ini.
Buat file db.yaml
pada project root.
File db.yaml
berisi konfigurasi koneksi database, dengan contoh pengisiannya dapat dilihat pada file db.example.yaml
.
Secara default, aplikasi ini berjalan dalam mode testing. Untuk menjalankan dalam mode production, baca penjelasan pada bab Production.
Buat schema pada database dengan nama tahap1
.
Selama berjalan dalam mode testing, aplikasi ini akan menggunakan data-data yang ada pada folder test-data
.
Folder test-data
pada awalnya tidak akan berisi seluruh data yang dibutuhkan untuk testing.
Untuk meng-generate data testing pada folder tersebut, jalankan perintah berikut:
# instalasi dependency
# (membutuhkan koneksi internet untuk mengunduh dependency)
npm install
# generate data ujicoba
npm run gen
Untuk menjalankan dalam mode production ada beberapa hal yang harus dilakukan.
Dalam folder data
sediakan file-file berikut ini:
daftar-pemilih.csv
: berisi daftar pemilihdata-verifikasi.csv
: berisi data yang dibutuhkan untuk memverifikasi pemilihPEMILIHAN UMUM MAHASISWA ELECTRONIC VOTE UNIVERSITAS TRUNOJOYO MADURA 2020.csv
: berisi data respon yang diunduh dari Google Formsref-paslon-presma.csv
: berisi daftar paslon presmaref-calon-dpm-fh.csv
: berisi daftar calon DPM dapil FHref-calon-dpm-feb.csv
: berisi daftar calon DPM dapil FEBref-calon-dpm-fp.csv
: berisi daftar calon DPM dapil FPref-calon-dpm-ft.csv
: berisi daftar calon DPM dapil FTref-calon-dpm-fisib.csv
: berisi daftar calon DPM dapil FISIBref-calon-dpm-fip.csv
: berisi daftar calon DPM dapil FIPref-calon-dpm-fkis.csv
: berisi daftar calon DPM dapil FKis
Edit file-file berikut ini dengan cara mengganti isian pada field csv
yang awalnya merujuk ke file yang ada dalam folder test-data
dengan merujuk ke file yang ada dalam folder data
:
tables/daftar_pemilih.yaml
tables/daftar_pilihan.yaml
tables/data_verifikasi.yaml
tables/ref_paslon_presma.yaml
tables/ref_calon_dpm_fh.yaml
tables/ref_calon_dpm_feb.yaml
tables/ref_calon_dpm_fp.yaml
tables/ref_calon_dpm_ft.yaml
tables/ref_calon_dpm_fisib.yaml
tables/ref_calon_dpm_fip.yaml
tables/ref_calon_dpm_fkis.yaml
Setelah melakukan hal-hal di atas, silahkan melanjutkan ke proses inisiasi.
Sebelum melakukan langkah inisiasi, ikuti terlebih dahulu langkah-langkah yang ada pada bab Setup sesuai dengan mode eksekusi yang diinginkan (testing atau production).
# Kedua perintah berikut ini membutuhkan koneksi internet
# untuk mengunduh dependency
# Meng-generate kode program untuk mengolah database
go generate .
# Perintah ini akan mengeksekusi program tanpa benar-benar
# melakukan impor data ke database.
# Pastikan perintah ini berjalan tanpa ada error
go run . --dry-run allUp
Jalankan perintah berikut ini untuk mengimpor data ke dalam database.
Database schema yang menjadi target dari impor data ini adalah schema dengan
nama tahap1
yang ada pada database yang ditentukan dalam file db.yaml
.
Apabila database telah berisi data maka, data yang ada akan dihapus terlebih
dahulu.
go run . allUp
Setelah menjalankan perintah di atas, semua data akan berada dalam database dan hasil penghitungan dapat dilihat melalui berbagai view yang ada.
Setelah impor data dilakukan, maka hasil penghitungan akan dapat dilihat pada
view dalam database atau pada hasil ekspor dari view tersebut yang tersimpan
dalam folder out
.
Berikut ini adalah database view hasil penghitungan (dalam schema tahap1
):
vw_pilihan
adalah view yang mempresentasikan data pilihan setiap pemilih.
Dalam view ini juga ditampilkan status dari setiap persyaratan sahnya suara.
View ini juga diekspor ke dalam file dalam format CSV dengan nama out/vw_pilihan.csv
.
Berikut ini adalah penjelasan setiap field yang ada di dalamnya:
suara_presma_sah
: akan bernilaitrue
bila semua persyaratan suara sah untuk pilihan Presma terpenuhi.alasan_suara_presma_tidak_sah
: berisi alasan suara pilihan Presma ini dianggap tidak sah.suara_dpm_sah
: akan bernilaitrue
bila semua persyaratan suara sah untuk pilihan Presma terpenuhi.alasan_suara_dpm_tidak_sah
: berisi alasan suara pilihan DPM ini dianggap tidak sah.waktu
: waktu pemilih men-submit pilihannya.dalam_waktu_pemungutan
: akan bernilaitrue
jika pemilih men-submit pilihannya dalam rentang waktu yang ditentukan.nim_email_hashed
: nilai hash dari alamat email pemilih (email mahasiswa adalah NIM dengan domain @student.trunojoyo.ac.id)jenis_email
: berisi nilaistudent
apabila domain email yang digunakan pemilih adalah domain email untuk student. Selain itu akan bernilaibukan student
input_fakultas
: nama fakultas yang diinputkan oleh pemilih (oleh aplikasi dikonversi menjadi singkatannya).fakultas_tercatat
: nama fakultas yang tercatat pada daftar pemilih (oleh aplikasi dikonversi menjadi singkatannya).terdaftar
: akan bernilaitrue
jika dan hanya jika NIM tercatat pada daftar pemilih dan email yang digunakan adalah email student.fakultas_benar
: akan bernilaitrue
jika dan hanya jika fakultas yang diinputkan oleh pemilih sama dengan fakultas yang tercatat pada daftar pemilih.input_verifikasi_hashed
: berisi data yang diinputkan oleh pemilih untuk kebutuhan verifikasi yang telah di-hash.sumber_verifikasi_hashed
: berisi data yang disediakan oleh KPUM untuk kebutuhan verifikasi pemilih (data telah di-hash).verified
: akan bernilaitrue
jika dan hanya jikainput_verifikasi_hashed
berisi data yang sama dengansumber_verifikasi_hashed
.dapil_sesuai
: akan bernilaitrue
jika dan hanya jika pemilih memberikan suara pilihan DPM-nya pada dapil yang sesuai dengan fakultas yang tercatat pada daftar pemilih.pilihan_presma
: berisi paslon Presma yang dipilih.pilihan_dpm_fh
: berisi calon DPM yang dipilih.pilihan_dpm_feb
: berisi calon DPM yang dipilih.pilihan_dpm_fp
: berisi calon DPM yang dipilih.pilihan_dpm_ft
: berisi calon DPM yang dipilih.pilihan_dpm_fisib
: berisi calon DPM yang dipilih.pilihan_dpm_fip
: berisi calon DPM yang dipilih.pilihan_dpm_fkis
: berisi calon DPM yang dipilih.
View ini mempresentasikan data hasil penghitungan suara untuk Presma.
Dalam view ini akan ditampilkan dua kategori suara, yaitu suara sah dan suara
tidak sah.
Pada kategori suara sah, akan ditunjukkan daftar nama paslon serta jumlah dan persentase suaranya.
Pada kategori suara tidak sah, akan ditunjukkan daftar alasan serta jumlah dan persentase suaranya.
View ini juga diekspor ke dalam file dalam format CSV dengan nama out/vw_hasil_presma.csv
.
Berikut ini adalah penjelasan setiap field yang ada di dalamnya:
sah
: bernilaitrue
untuk kategori suara sah, danfalse
untuk kategori suara tidak sah.suara
: untuk kategori suara sah akan berisi nama-nama paslon dan untuk kategori suara tidak sah berisi alasan suara tidak sah.jumlah
: jumlah suara yang masuk dalam kategoripersentase_dari_suara_sah
: persentase jumlah suara bila dihitung berdasarkan jumlah suara sah.persentase_dari_seluruh_suara
: persentase jumlah suara bila dihitung berdasarkan jumlah total suara (baik sah maupun tidak).
View ini mempresentasikan data hasil penghitungan suara untuk DPM. Dalam view ini, untuk setiap dapil akan ditampilkan dua kategori suara, yaitu suara sah dan suara tidak sah. Pada kategori suara sah, akan ditunjukkan daftar nama calon serta jumlah dan persentase suaranya. Pada kategori suara tidak sah, akan ditunjukkan daftar alasan serta jumlah dan persentase suaranya.
Khusus untuk kategori suara tidak sah dengan alasan "(a) Tidak terdaftar dalam daftar pemilih", tidak akan ditampilkan per fakultas. Karena pemilih yang tidak terdaftar tidak dapat diverifikasi kebenaran dapilnya.
View ini juga diekspor ke dalam file dalam format CSV dengan nama out/vw_hasil_dpm.csv
.
Berikut ini adalah penjelasan setiap field yang ada di dalamnya:
fakultas
: dapil fakultassah
: bernilaitrue
untuk kategori suara sah, danfalse
untuk kategori suara tidak sah.suara
: untuk kategori suara sah akan berisi nama-nama calon dan untuk kategori suara tidak sah berisi alasan suara tidak sah.jumlah
: jumlah suara yang masuk dalam kategoripersentase_dari_suara_sah_dalam_dapil
: persentase jumlah suara bila dihitung berdasarkan jumlah suara sah dalam dapil.persentase_dari_seluruh_suara_dalam_dapil
: persentase jumlah suara bila dihitung berdasarkan jumlah total suara dalam dapil (baik sah maupun tidak).