ai-startup-skills
AI 제품을 만드는 스타트업을 위한 7단계 에이전트 스킬: 검증 → 비즈플랜 → 정책 → 로드쇼 → 고객 확보 → 가격 책정 → 등록
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Aplikasi web Laporan Integritas (bisa dipasang di HP): tab Lapor CW untuk Pengaturan Pagi (CW Pagi) dan tab Ceklok Satpas untuk absen dinas kantor Satpas. Untuk CW Pagi: anggota melapor sendiri dengan NRP, lokasi GPS, dan foto; admin melihat Rekap per simpul dan mengirim teks laporan ke grup WhatsApp.
cw-pagi-app) (folder web/)Aplikasi tidak bergantung pada Claude atau layanan berbayar: semuanya berjalan di GitHub Pages, Google Apps Script, Google Sheets, dan Google Drive milik satuan.
HP anggota / admin Google (akun satuan) GitHub
┌───────────────────┐ JSON ┌──────────────────────────┐ ┌──────────────────┐
│ Aplikasi web │ ──────▶ │ Apps Script (Kode.gs) │ │ Repo integritas- │
│ (folder web/) │ ◀────── │ = API, cek NRP/jam/GPS │ │ satuan-app, web/ │
└───────────────────┘ └────────────┬─────────────┘ └────────┬─────────┘
▲ │ baca/tulis │ otomatis
│ ▼ ▼
│ ┌──────────────────────────┐ ┌──────────────────┐
└──── dibuka dari ─── │ Spreadsheet + Drive │ │ GitHub Pages │
github.io │ ABSENSI, ANGGOTA, JADWAL │ │ (situs aplikasi) │
│ KOORDINAT, LOG LAPOR, … │ └──────────────────┘
└──────────────────────────┘
| Login dengan | Menu | Bisa melakukan |
|---|---|---|
| NRP anggota (sheet ANGGOTA) | Lapor CW | Lapor Datang, Lapor Selesai, atau lapor Tidak Hadir untuk dirinya sendiri |
NRP admin (daftar ADMIN_NRP di Kode.gs) + kode admin | Lapor CW + Rekap | Semua di atas + lihat/ubah status semua personil, catatan, kirim teks WhatsApp |
Tidak ada lagi PIN bersama. NRP yang tidak terdaftar ditolak ("NRP tidak terdaftar").
Tab yang tampil setelah login (otomatis dari sheet Data spreadsheet Satpas, tidak perlu daftar NRP di kode):
| NRP | Tab |
|---|---|
| Anggota Polri Satpas (PANGKAT bukan PHL di sheet Data) | Lapor CW + Ceklok Satpas |
PHL Satpas (PANGKAT PHL, nomor pendek mis. 23) | Ceklok Satpas saja |
| Selain itu (hanya di sheet ANGGOTA) | Lapor CW saja |
Menambah/mengurangi anggota Satpas atau PHL cukup di sheet Data (berlaku ±10 menit kemudian).
Kode admin (pengaman kedua): NRP admin saja hanya membuka Lapor CW. Untuk membuka Rekap, admin mengetik kode admin di kotak "Admin – buka menu Rekap" di bawah Lapor CW.
| Jam (bawaan) | Yang bisa dilakukan |
|---|---|
| sebelum 06.00 | Belum dibuka |
| 06.00 – 06.30 | Lapor Datang (langkah 1) – wajib di dalam radius titik |
| 06.30 – 07.15 | Lapor Datang masih bisa, tercatat TERLAMBAT (LOG LAPOR: [TERLAMBAT x mnt …]) |
| 06.30 – 07.00 | Yang sudah datang: tetap di lokasi, ada hitung mundur |
| 07.00 – 07.15 | Lapor Selesai (langkah 2) – wajib di dalam radius titik |
| setelah 07.15 | Ditutup |
UJI_COBA = true belum ditolak.infoGps di app.js) dan server menilainya (cekPolaGps_ di Kode.gs): ketelitian GPS yang tidak berubah
sama sekali (≥ 15 sampel), tanpa ketinggian (altitude) padahal ketelitian ≤ 10 m, koordinat bergeser > 3 m/dtk sementara
kecepatan GPS 0 / kosong (≥ 80% sampel), waktu fix GPS di depan jam HP, masing-masing 1 tanda; lompatan
(> 250 km/jam antar-sampel yang sama-sama teliti, menurut waktu fix GPS; posisi cache HP > 5 dtk diabaikan) juga 1 tanda. Jumlah ≥ 2 () → ⚠️ "pola GPS janggal: …"
(bukti lemah, diputuskan atasan di Pantauan). Satu tanda saja tidak ditandai agar HP asli tidak terbebani.| Ingin mengubah | Caranya |
|---|---|
| Jam lapor / radius | Sheet JADWAL, kolom B (mis. 06:45, radius 150). Berlaku langsung. |
| Anggota & NRP | Sheet ANGGOTA: kolom A = nama persis seperti kolom B (PETUGAS) di ABSENSI, kolom B = NRP. |
| Koordinat titik | Sheet KOORDINAT: kolom A = nama lokasi (sama dengan ABSENSI), kolom B = lat, lng dari Google Maps (tekan lama titik → salin angka). Wajib diisi: titik tanpa koordinat tidak bisa lapor. |
| Plotting petugas | Sheet ABSENSI seperti biasa. Lokasi baru otomatis ditambahkan ke KOORDINAT. |
| Personel pos jaga (BM) | Baris ABSENSI "Pos 12.04 Karangente / Pos 12.02 Ketapang" tidak memuat nama. Saat login, server membaca spreadsheet Jadwal Piket BM (sheet Piket BM) dan mengarahkan ke baris sesuai shift hari itu: KETERANGAN TUGAS "…Piket Malam" = M, "…Lepas Dinas" = LD, "Piket Siang" = S. Nama di ANGGOTA kolom A harus sama persis dengan nama di jadwal (mis. AIPTU SUGIHARTO). LOG LAPOR dan CATATAN mencatat nama asli pelapor. |
| Personel Patwal R4 | Baris ABSENSI "Patwal R4" dengan KETERANGAN TUGAS "Cadangan 1 Wal R4" / "Cadangan 2 Wal R4" diisi unit CADANGAN 1 / CADANGAN 2 hari itu menurut spreadsheet Piket Patwal (sheet Patwal). Personel dicocokkan lewat NRP di tabel PERSONIL sheet Patwal (unit 503/504/506/507), jadi NRP di ANGGOTA harus sama dengan NRP di sheet Patwal. Jadwal hanya punya kolom PIKET, LEPAS DINAS, CADANGAN 1, CADANGAN 2, jadi "Cadangan 3 Wal R4" = unit PIKET dan "Cadangan 4 Wal R4" = unit LEPAS DINAS (PATWAL_PERAN_PENGGANTI di Kode.gs; bila kolom CADANGAN 3 / CADANGAN 4 ditambahkan di sheet Patwal, kolom itu yang dipakai). |
| Personel Piket Laka Lantas | Baris ABSENSI "2 Pers Laka" dengan KETERANGAN TUGAS "Akan Naik Piket Laka" diisi regu Piket hari itu, "Cadangan Laka" diisi regu Cadangan, menurut spreadsheet Jadwal Piket Laka (sheet Jadwal Piket & Data Regu). Regu Lepas Dinas tidak punya plotting. Dicocokkan lewat NRP di Data Regu; bila NRP di sana salah/ganda, dicocokkan lewat nama di ANGGOTA (nama Data Regu tanpa gelar harus terkandung di nama ANGGOTA). |
Catatan:
00012345) tidak hilang.| Sheet | Isi | Dibuat oleh |
|---|---|---|
| ABSENSI | Plotting & kode harian (H/S/I/…) per tanggal | sudah ada |
| PENGATURAN | Bulan, tahun, tanggal akhir (C7), kode & status | sudah ada |
| CATATAN | Catatan / pengganti per tanggal & no plotting | sudah ada (aplikasi ikut menulis) |
| ANGGOTA | Nama petugas ↔ NRP (untuk login) | aplikasi |
| KOORDINAT | Nama lokasi ↔ koordinat titik | aplikasi |
| JADWAL | Jam lapor & radius | aplikasi |
| LOG LAPOR | Riwayat setiap laporan: waktu, status (DATANG/H/kode), jarak, akurasi, peta, foto, catatan | aplikasi |
cw-pagi-app/
├── web/ ← aplikasi (ikut ke GitHub, tampil di github.io)
│ ├── index.html, app.js, style.css
│ ├── config.js ← URL Apps Script (/exec)
│ ├── sw.js, manifest.json ← agar bisa dipasang di HP
│ └── logo.png, icon-*.png ← logo Lalu Lintas & ikon
├── .github/workflows/pages.yml ← publish otomatis folder web/ ke GitHub Pages
├── apps-script/Code.gs ← salinan kode server (TIDAK ke GitHub, lihat §9)
├── README.md ← panduan ini
└── _arsip-lokal/ ← salinan lama, tidak dipakai (TIDAK ke GitHub)
Folder ini sudah tersambung ke repo GitHub (Git). Setelah mengubah file di web/:
Cara A – GitHub Desktop (paling mudah)
cw-pagi-app.Cara B – perintah Git
git add web
git commit -m "Ubah ..."
git push
Cara C – lewat browser: github.com → repo → masuk folder web → Add file →
Upload files → pastikan jalurnya integritas-satuan-app / web / → Commit changes.
Setelah push, tab Actions di GitHub menjalankan "Deploy ke GitHub Pages" (±1 menit). Jika hijau, situs sudah memakai versi baru. Di HP: tutup lalu buka ulang aplikasi.
apps-script/Code.gs di laptop (simpan sebagai cadangan)./exec tidak berubah, jadi web/config.js tidak perlu diubah.Pengaturan penting di Kode.gs:
ADMIN_NRP – daftar NRP yang boleh membuka Rekap (tetap wajib kode admin).JADWAL, RADIUS_M – nilai bawaan (dipakai jika sheet JADWAL kosong/salah).Catatan proyek Apps Script:
onOpen): 📱 Buka Aplikasi & QR Code, 🩺 Cek & Perbaiki,
📅 Ganti Bulan, 📆 Jadwal Piket BM, 🔐 Atur Kode Admin, 📊 Hitung Durasi & Poin. File lama AutoDeploy.gs
(Auto-Deploy 1-Klik ke repo terpisah, QR ke URL API) sudah dibuang (21 Okt 2026); aplikasi di-publish dari repo ini.
Hanya boleh ada satu doGet/doPost, yaitu API di Kode.gs.appsscript.json memuat oauthScopes (Spreadsheet, Drive, menu, akses internet).
Jika menambah layanan Google baru di kode, tambahkan juga cakupannya di sini.izinkanAkses untuk dijalankan sekali bila izin Drive perlu diberikan ulang..gitignore):
apps-script/ (memuat NRP admin), dokumen jadwal .docx/.pdf (nama personel), _arsip-lokal/.apps-script/Code.gs (mis. salin ke Google Drive), karena tidak ada di GitHub.Setelah Lapor Datang (kapan saja, meski baru 1 menit), anggota bisa mengetuk 🚨 Ada Tugas/Kepentingan? Tinggalkan Lokasi, memilih jenis tugas / kepentingan (Perintah pimpinan · Pelayanan · Rapat/Dinas · Keluarga · Lainnya) dan mengisi keterangan singkat. Tanpa foto, tanpa cek radius, dan Lapor Selesai tidak diperlukan lagi.
Setiap laporan disimpan di HP dulu, baru dikirim. Bila sinyal putus, server tidak menjawab, atau aplikasi tertutup saat mengirim, laporan tetap tersimpan dan muncul kotak ⏳ Laporan tersimpan di HP, belum terkirim. Anggota bisa lanjut ke langkah berikutnya (mis. Lapor Selesai), dan semuanya dikirim berurutan.
ANTRE_MAKS_MENIT di Kode.gs). Lebih dari itu, atau sudah ganti hari, laporan ditolak dan anggota melihat
alasannya. Kolom CATATAN di LOG LAPOR diberi tanda [terkirim 06.41, tertunda 12 mnt – sinyal putus].action=jam dan data login) server memberi
tanda tangan jam (tandaJam_, HMAC dengan rahasia di Script Properties JAM_RAHASIA). Laporan tertunda membawa tanda
terakhir + selang sejak sinkron menurut performance.now() (tidak ikut berubah bila jam HP diubah) dan menurut jam HP.
Server (periksaJamHp_) memakai jam lapor = jam server bertanda + selang terbesar, jadi jam HP yang dimundurkan maupun HP
yang tidur tidak membuat jam lapor lebih awal. Jam HP mundur > 2 menit dari selang performance.now(), atau lebih awal dari
jam terbesar yang pernah dilihat aplikasi (dicatat tiap 20 detik di HP), ditandai ⚠️ "jam HP dimundurkan" = bukti kuat
(otomatis PALSU, atasan tetap bisa mengubah). Aplikasi dibuka ulang tanpa sinyal / tanpa tanda sah = bukti lemah.Setiap hari ±07.30 (pemicu hitungDurasiPoin, atau menu 📊 Hitung Durasi & Poin) server menulis ulang:
Golongan bawaan: Baik ≥ 60 menit (3 poin) · Sedang 45–59 (2) · Kurang < 45 (1) · Tidak lengkap / Diragukan ⚠️ = 0 · Tidak hadir (S/I/LD/D/P) tidak dihitung. Ambang & poin diubah di sheet JADWAL (baris "Durasi Baik (menit)", "Durasi Sedang (menit)", "Poin Baik/Sedang/Kurang"). Pasangan Datang–Selesai dicocokkan per nama petugas, jadi dua orang di baris pos yang sama dihitung terpisah.
Anggota Satpas (NRP ada di sheet Data spreadsheet Satpas) melihat tab Ceklok Satpas di aplikasi. Anggota Satpas yang tidak ada di plotting CW Pagi tetap bisa masuk dengan NRP dan langsung diarahkan ke tab ini.
CEKLOK.tutupLembur; ceklok lain tetap ditutup 15.00).
Pulang ≥ 30 menit setelah jam pulang (LEMBUR_MIN) = lembur: aplikasi meminta alasan lembur (wajib),
tercatat di LOG CEKLOK kolom CATATAN (LEMBUR 3 j 40 m: alasan). Nilai Ceklok hari itu tetap 100
(lengkap), dan lembur memberi bonus kecil di skor akhir: +1 per hari lembur, maks +3 per periode
(harian / mingguan / bulanan; BONUS_LEMBUR, BONUS_LEMBUR_MAKS), skor tetap maks 100, tidak diberikan bila ada
⚠️ PALSU di periode itu. Jumlah & total jam lembur tampil di CATATAN PENILAIAN INTEGRITAS dan di
INTEGRITAS HARIAN (kolom Ceklok Pulang). Anggota yang masih di kantor saat hitungan sore ±15.15 belum dinilai
("belum pulang – lembur?"), lalu dinilai final oleh hitungan pagi berikutnya. Lewat 21.00 tanpa Ceklok Pulang =
tanpa pulang (nilai 50).NILAI_IZIN di Kode.gs).UJI_COBA = true): bisa diulang. Setelah Lapor CW atau Ceklok Satpas selesai, muncul tombol
🔁 Ulangi (uji coba) untuk mencoba lagi dari awal di hari yang sama. Semua putaran tetap tercatat di LOG
LAPOR / LOG CEKLOK; aplikasi dan penilaian memakai . Tombol hilang otomatis saat .Sheet PENILAIAN INTEGRITAS di spreadsheet Data Satpas (SATPAS_SS_ID di Kode.gs) ditulis ulang
otomatis setiap kali hitungDurasiPoin berjalan (pemicu ±07.30) dan sore ±15.15 setelah ceklok ditutup
(pemicu hitungIntegritasSore, pasang sekali dengan fungsi pasangPemicuIntegritasSore). Bisa juga dijalankan
kapan saja lewat menu 🖨️ REKAP CETAK → Integritas – Hitung sekarang.
Anggota diambil dari sheet Data (PETUGAS, JABATAN, PANGKAT, NRP, POKJA). Kolom dicari lewat judul (barisDataSatpas_),
jadi boleh disisipkan / digeser; PHL = JABATAN atau PANGKAT PHL. Pencocokan dengan CW Pagi lewat NRP
(sheet ANGGOTA), dan dengan LOG CEKLOK juga lewat NRP.
Skor 0–100 (BOBOT_INTEGRITAS):
| Unsur | Bobot | Cara hitung |
|---|---|---|
| Kehadiran CW | 25% | hari H ÷ hari wajib di ABSENSI; S (sakit), D (dinas), P (pelayanan) disetujui = 0,9 hari, I (izin) = 0,8 hari (NILAI_IZIN); LD (lepas dinas piket) dan - tidak dinilai |
| Ceklok Satpas | 25% | rata-rata per hari kerja: lengkap / tugas mendadak 100 · pulang cepat ≤ 15 mnt 90 · 16–60 mnt 70 · > 60 mnt 50 (NILAI_PULANG_CEPAT) · tanpa Ceklok Pulang 50 · tidak ceklok 0 · sakit / dinas / pelayanan disetujui 90 · izin / cuti disetujui 80 |
| Kejujuran lokasi & foto | 20% | 100 − 25 per ⚠️ terbukti (POTONG_PALSU), lalu dipotong lagi per CEK FOTO atasan (lihat Bukti foto di bawah) |
| Ketepatan waktu | 10% | Lapor Datang ≤ 06.15 dan Ceklok Masuk ≤ 08.00 = 100, lalu −2 per menit (BATAS_AMAN_CW, POTONG_PER_MENIT) |
| Kelengkapan lapor CW | 10% | hari Datang + Selesai (atau tugas mendadak) ÷ hari Lapor Datang |
| Durasi tugas (CW + Satpas) | 10% | rata-rata dua nilai: CW = poin harian ÷ poin Baik; Satpas = jam efektif Masuk–Pulang yang berada di dalam jam dinas ÷ jam dinas (mis. 08.00–11.30 dari 08.00–13.00 = 70). Tinggalkan Kantor dan hari tanpa Ceklok Pulang tidak dihitung di sini. Hanya punya satu data = nilai itu saja |
Verifikasi ⚠️ semi-otomatis (file Verifikasi.gs, jalan otomatis di pemicu harian ±07.30, juga bisa
dijalankan manual: fungsi verifikasiOtomatis). Kolom VERIFIKASI (ASLI / PALSU) ada di LOG LAPOR dan LOG CEKLOK.
File PenilaianCw.gs (salinan di apps-script/) menulis sheet PENILAIAN CW di spreadsheet CW Pagi: indikator
penilaian semua personel CW Pagi (baris ABSENSI + personel jadwal Piket BM / Patwal / Laka), bukan hanya
anggota Satpas.
Personel jadwal piket dinilai dari jadwalnya (file JadwalNilai.gs). Sheet JADWAL PIKET HARIAN di spreadsheet
CW Pagi mencatat siapa terjadwal di baris ABSENSI mana per tanggal (aturan pemilihan baris sama dengan login: Piket BM →
Patwal Cadangan 1–4 → Piket Laka). Hari ini ditulis ulang tiap hitungan (±00.30, 07.30, 09.00, 11.00, 13.00, 15.15, 15.30),
jadi tukar dinas / mutasi yang diubah di spreadsheet jadwal langsung terbaca; hari yang sudah lewat tidak diubah lagi.
Hari terjadwal = hari wajib CW: Lapor Selesai = hadir, tidak lapor = tidak hadir (dulu tidak tercatat sama sekali). Tidak
dinilai: baris yang hari itu dilapori personel lain yang tidak terjadwal (tukar dinas, ditulis di CATATAN), baris yang
diisi - oleh admin, Sabtu–Minggu, Stand By / regu Lepas Dinas Laka (tanpa plotting). Uji dari editor: ujiJadwalNilai. Ditulis ulang otomatis di hitungan pagi (±07.30) dan sore (±15.15), atau lewat menu
🖨️ REKAP CETAK → Integritas – Hitung sekarang. Bisa juga dijalankan langsung: fungsi hitungPenilaianCw.
| Unsur | Bobot (BOBOT_CW) | Cara hitung |
|---|---|---|
| Kehadiran | 35% | hari H ÷ hari wajib di ABSENSI; S, D, P disetujui = 0,9 hari, I = 0,8 hari; LD dan - tidak dinilai |
| Kejujuran lokasi & foto | 25% | 100 − 25 per ⚠️ PALSU, dikurangi CEK FOTO atasan |
| Ketepatan waktu | 15% | Lapor Datang ≤ 15 menit setelah buka = 100, lalu −2 per menit |
| Kelengkapan lapor | 15% | hari Datang + Selesai (atau Tinggalkan Lokasi) ÷ hari lapor |
| Durasi tugas | 10% | rata-rata poin harian ÷ poin Baik |
TGL_MULAI_INTEGRITAS).Setiap anggota bisa melihat nilainya sendiri di tab Nilai Saya: pilihan Harian · Mingguan · Bulanan, skor 0–100 dalam lingkaran berwarna, predikat, peringkat (mis. "Peringkat 3 dari 24"), rincian tiap unsur (batang), daftar "Perlu diperhatikan" dari CATATAN penilaian, dan kalimat penyemangat sesuai predikat. Tujuannya memotivasi anggota.
hitungPenilaianCw({dari, sampai, tanpaTulis}).GET ?action=nilai; server hanya mengirim nilai milik NRP yang login.cw_nilai_d) dan langsung tampil; diambil ulang dari server di latar
belakang setelah aplikasi dibuka, lalu paling sering tiap 10 menit (NILAI_SEGAR_MS) atau saat tab diketuk lagi /
⟳ Muat ulang. Pindah tab Lapor CW · Ceklok Satpas · Nilai Saya tidak lagi menunggu data server selesai dimuat.mingguan_final /
bulanan_final; yang masih berjalan (mingguan, bulanan) tidak ditampilkan.| Daftar | NRP | Aturan |
|---|---|---|
NRP_PENGAWAS | 86071494 (Baur SIM) | Tidak wajib CW Pagi & Ceklok, tidak dinilai dan tidak masuk peringkat, tidak tercetak di rekap ceklok, tidak dianggap "tanpa plotting" di 🩺. Di aplikasi hanya tab Rekap Integritas. |
CEKLOK_KHUSUS | 83050535 (operator SIM keliling) | Ceklok dibuka 06.00, jam masuk 06.00, jam pulang 17.00 (Senin–Sabtu), lembur sesudah 17.30 s.d. 21.00, boleh ceklok di mana saja (GPS, peta, foto tetap wajib & dicatat). |
Kecepatan Rekap Integritas: rekap terakhir (harian, mingguan & bulanan sekaligus) disimpan di HP (cw_rekap_d) dan
langsung tampil saat tab dibuka; diambil ulang dari server di latar belakang paling sering tiap 10 menit, atau saat tab
diketuk lagi / ⟳ Muat ulang. Bila sinyal putus, rekap tersimpan tetap tampil.
Tab Rekap Integritas (pengawas): pilihan Harian (selalu) · Mingguan · Bulanan (setelah final), hanya kelompok
Anggota Satpas (Personel CW Pagi tidak ditampilkan). Isinya: rata-rata skor, sebaran predikat, kotak cari nama, daftar urut peringkat
(skor, predikat, pokja/lokasi, dan untuk harian jam CW / Ceklok Masuk / Pulang berwarna). Ketuk nama = rincian unsur dan
catatan. Anggota Satpas dipisah Polri · PHL · Semua (sub-tab), masing-masing dengan rata-rata, sebaran, dan peringkat
sendiri; di Semua, PHL diberi lencana. Angka aturan nilai seperti "(nilai 90)" atau "(−10 per kali)" tidak ditampilkan di
rekap ini (Harian, Mingguan, Bulanan); di sheet tetap tertulis. Anggota dengan ⚠️ PALSU diberi tanda merah "⚠️ PALSU –
diurutkan di bawah" (dan catatan yang sama di sheet), agar jelas kenapa peringkatnya di bawah anggota bernilai lebih rendah. Server: GET ?action=rekap hanya untuk pengawas dan admin (tiap baris membawa tanda phl). Menambah pengawas / jadwal khusus cukup mengubah
daftar di AturanKhusus.gs, simpan, lalu deploy versi baru.
Rekap harian berkala (rekapHarianBerkala, IntegritasHarian.gs): hari ini dihitung ulang otomatis ±09.00, ±11.00,
±13.00 (label update pukul …, tanda sementara) dan ±15.30 (label final pukul …, sesudah ceklok ditutup). Pada update,
ceklok hari ini ikut dinilai: belum Ceklok Masuk = Belum ceklok masuk, sudah masuk tetapi belum pulang = Belum ceklok
pulang (belum dinilai). Pemicu dipasang dengan pasangPemicuRekapBerkala (diperiksa juga oleh 🩺 Cek & Perbaiki).
Sheet Data Satpas: 🩺 Cek & Perbaiki memeriksa anggota tanpa NRP / nomor; PHL tanpa nomor diberi tombol
Beri nomor PHL (nomor PHL terbesar + 1, fungsi beriNomorPhl). Perubahan nama/pokja di sheet Data terbaca
otomatis paling lambat 10 menit (cache).
Skor tetap maksimal 100. Bila skor sama (mis. banyak yang 100), peringkat diurutkan berturut-turut oleh:
| Urutan | Penentu | Keterangan |
|---|---|---|
| 1 | Hari sempurna | Jumlah hari yang semua kewajibannya penuh: CW (H, Datang ≤ 06.15, lengkap, durasi ≥ Baik, tanpa ⚠️/foto bermasalah) dan Ceklok (masuk ≤ jam masuk, pulang ≥ jam pulang atau tugas mendadak sah) |
| 2 | Beruntun | Hari sempurna berturut-turut terpanjang; hari izin / libur / tidak terjadwal dilewati, tidak memutus |
| 3 | Lebih awal | Rata-rata menit sebelum batas (Lapor Datang 06.15, Ceklok Masuk jam masuk), maks 30 mnt per kejadian |
| 4 | Lembur | Total menit lembur Satpas (beralasan) |
Semua sama = peringkat sama. ★ TELADAN = skor 100, tanpa ⚠️ PALSU, minimal 5 hari dinilai dan semuanya sempurna
(praktisnya mingguan / bulanan). Di sheet PENILAIAN INTEGRITAS / PENILAIAN CW tercatat di kolom CATATAN
(★ TELADAN…, urutan: …); di aplikasi tampil sebagai lencana ★ Teladan dan bagian Konsistensi (Nilai Saya, Rekap
Integritas). Nilai Saya juga menampilkan berapa orang yang sama-sama bernilai 100.
Setelah Lapor Datang (sampai Lapor Selesai / Tinggalkan Lokasi) dan setelah Ceklok Masuk (sampai Ceklok Pulang / Tinggalkan Kantor), aplikasi memantau GPS selama terbuka. Tanda merah "di luar radius" yang tampil terus-menerus lebih dari 5 menit = 1 kejadian: dikirim ke server (disimpan di HP dulu bila sinyal putus) dan dicatat di sheet LUAR RADIUS (spreadsheet CW Pagi: waktu, NRP, nama, CW/CEKLOK, mulai, durasi, jarak maks, akurasi, peta).
LUAR_RADIUS_MENIT = 5, POTONG_LUAR_RADIUS = 10 (LuarRadius.gs); POST action=luarRadius.Satu NRP = satu HP. Aplikasi membuat ID acak per HP (cw_hp di penyimpanan browser) dan mengirimnya di setiap
permintaan. Login pertama mendaftarkan HP itu di sheet PERANGKAT (spreadsheet CW Pagi); HP lain dengan NRP yang sama
ditolak dan tercatat di kolom HP BARU MENUNGGU (juga muncul di 🩺 Cek & Perbaiki). Ganti HP / data browser terhapus:
operator mengetik YA di kolom IZINKAN HP BARU (atau mengosongkan ID HP) → login berikutnya dari HP baru terdaftar.
Pengawas dan admin yang masuk dengan kode admin tidak diikat. Aplikasi versi lama (tanpa ID HP) diminta diperbarui.
Izin dan tugas mendadak perlu verifikasi sistem. Setiap "Tidak bisa hadir / Tidak masuk" dan "Tinggalkan Lokasi / Kantor" dari aplikasi tercatat di sheet PERSETUJUAN; atasan memilih KEPUTUSAN = SETUJU / TOLAK (dropdown). Selama belum SETUJU: tidak hadir CW dihitung tidak hadir, tidak masuk Satpas dihitung tidak ceklok (0), tugas mendadak CW dihitung tanpa Lapor Selesai, tugas mendadak Satpas dihitung pulang cepat (bertingkat menurut menit sebelum jam pulang), dan hari itu bukan hari sempurna. Status yang diisi admin langsung di ABSENSI tidak perlu persetujuan. Jumlah yang menunggu tampil di 🩺 Cek & Perbaiki; di aplikasi kartu hasilnya bertanda "⏳ menunggu verifikasi sistem".
Foto wajah di Lapor Selesai. Lapor Selesai kini juga meminta wajah pelapor dengan arus lalu lintas sebagai latar (sebelumnya hanya foto arus), agar HP tidak bisa ditinggal / dititipkan di titik.
File Rekapitulasi.gs (salinan di apps-script/):
File RekapCetak.gs (salinan di apps-script/) menambah menu 🖨️ REKAP CETAK di spreadsheet CW Pagi.
Pasang sekali: tempel sebagai file baru di Apps Script → jalankan fungsi pasangMenuRekap → buka ulang spreadsheet.
| Menu | Hasil |
|---|---|
| CW Pagi – Mingguan / Bulanan | sheet CETAK REKAP CW: per personil per tanggal (H/S/I/D/P/LD/N/BL), jumlah, % hadir, keterangan (alasan, catatan, nama pelapor pos jaga) |
| Ceklok Satpas – Mingguan / Bulanan | sheet CETAK REKAP CEKLOK (spreadsheet Satpas): Polri & PHL, H/T/PC/TP/TG/TK/S/I/C/D/P, jumlah, % hadir, keterangan |
| Rapikan tabel spreadsheet Satpas | format ulang Data, LIBUR SATPAS, LOG CEKLOK, PENILAIAN INTEGRITAS |
| Integritas – Cetak Mingguan / Bulanan (PDF) | sheet CETAK INTEGRITAS (spreadsheet Satpas): nilai per anggota (6 unsur, skor, predikat, peringkat, keterangan) urut peringkat, baris rata-rata satuan, sebaran predikat, keterangan bobot; PDF Legal mendatar |
TGL_MULAI_INTEGRITAS.Uji coba semua orang berakhir 25/10/2026. Mulai TGL_RESMI (26/10/2026) hanya NRP / kode di NRP_RESMI
(NRP Polri dan nomor urut / kode akses di Data Absensi Satpas'26) memakai aturan resmi: jam lapor, GPS & radius, dan foto
wajib; tanpa ulang putaran; datanya tidak direset dan dinilai mulai 26/10. Anggota lain tetap uji coba (direset ±19.00,
nilai dimulai sesudah reset). Data NRP resmi sebelum 26/10 dihapus oleh reset seperti biasa.
ujiCoba_(nrp) menggantikan UJI_COBA di lapor, ceklok, dan bebasWaktu untuk aplikasi; tglMulaiNilai_(nrp) per orang.NRP_RESMI di ModeResmi.gs, simpan, deploy versi baru.bonusKonsisten_ di Urutan.gs; Code.gs dan PenilaianCw.gs): penilaian mingguan / bulanan dengan minimal
KONSISTEN_MIN_HARI (5) hari dinilai dan ≥ KONSISTEN_PERSEN (90)% hari sempurna (tepat waktu, lengkap, tanpa ⚠️ / foto bermasalah)
mendapat +BONUS_KONSISTEN (2) skor akhir, maks 100, tidak berlaku bila ada ⚠️ PALSU. Bisa bertumpuk dengan bonus lembur
(maks +3). Tampil di CATATAN ("konsisten: x dari y hari sempurna"). Harian tidak pernah memenuhi syarat.cekPengingat): banner di atas menu bila Lapor Datang / Lapor Selesai / Ceklok Masuk / Ceklok Pulang
waktunya dan belum dilakukan; bila anggota mengizinkan notifikasi, juga muncul sebagai notifikasi HP (sekali per kejadian per hari).
Berjalan selama aplikasi terbuka atau di latar belakang; aplikasi yang ditutup sepenuhnya tidak bisa memberi notifikasi
(butuh server push, tidak ada di Apps Script). Tidak aktif di mode uji coba dan hari libur CW.TGL_CW_SENIN_JUMAT dan cwLibur_(tgl) di ModeResmi.gs. Mulai 26 Oktober 2026 Sabtu dan Minggu tidak ada Lapor CW
(server menolak; tab Lapor CW menampilkan "Hari ini libur CW Pagi") dan tidak dinilai: hari itu dilewati di kehadiran
PENILAIAN INTEGRITAS / PENILAIAN CW, tampil "Libur CW" di INTEGRITAS HARIAN, dan kosong (abu-abu) di rekap cetak CW.
Berlaku untuk semua anggota, resmi maupun uji coba. Ceklok Satpas tetap Senin–Sabtu dan tetap dinilai. LAPORAN HARIAN /
REKAP BULANAN (rumus di sheet) tidak diubah, jadi Sabtu bisa tampak "belum lapor" di sana dan diabaikan.
Pemicu resetUjiCoba memasang ulang dirinya sendiri bila jamnya belum sesuai RESET_UJI_COBA_JAM (Script Property
RESET_UJI_COBA_PEMICU_JAM), jadi mengubah jam reset cukup mengganti konstanta itu.
File ResetUjiCoba.gs (salinan di apps-script/). Selama UJI_COBA = true, setiap hari antara 19.00 dan 19.30 WIB
semua input dari aplikasi (login NRP) mulai TGL_MULAI_INTEGRITAS (19 Oktober 2026) s.d. hari ini dihapus, jadi
spreadsheet kosong lagi untuk uji coba berikutnya:
| Spreadsheet | Yang dihapus |
|---|---|
| CW Pagi | baris LOG LAPOR; kode di ABSENSI dari laporan itu, serta H / N lain di tanggal tersebut; isian CATATAN nomor plotting yang lapor hari itu |
| Data Satpas | baris LOG CEKLOK |
RESET_UJI_COBA_TERAKHIR), dan
penilaian baru menghitung mulai hari sesudahnya (tglMulaiNilai_ di Code.gs). Jadi sesudah reset sheet penilaian bertuliskan
"belum ada hari yang dinilai", bukan "tidak lapor / tidak ceklok". Hitungan sore ±15.15 masih memuat hasil uji coba hari itu.
Reset manual sebelum 19.00 hanya menandai kemarin, sehingga input sesudah reset hari itu tetap dinilai.
Aturan ini mati sendiri saat UJI_COBA = false.-) dan bukan dari laporan aplikasi, plotting,
ANGGOTA, KOORDINAT, JADWAL, sheet Data / LIBUR SATPAS. Foto di Drive ikut terhapus oleh hapusFotoLama setelah 30 hari.pasangPemicuResetUjiCoba. Untuk menu, tempel juga
RekapCetak.gs versi terbaru.UJI_COBA = false. Pemicunya boleh dihapus sesudah itu (Apps Script → Pemicu).File Notifikasi.gs (salinan di apps-script/) mengirim email ke operator bila ada yang bermasalah.
Email dikirim ke pemilik spreadsheet CW Pagi (sekarang [email protected]). Alamat lain bisa diisi di
EMAIL_OPERATOR (beberapa alamat dipisah koma).
laporGagal_).cekKesehatan; everyHours(4) di pasangPemicuKesehatan, Apps Script hanya menerima 1, 2, 4, 6, 8, 12):
/exec menjawab (aplikasi bisa login / lapor);hitungDurasiPoin (±07.30) dan hitungIntegritasSore (±15.15) masih terpasang dan berhasil dalam 26 jam terakhir.NOTIF_JEDA_MENIT), jadi kotak masuk tidak kebanjiran.kabarPeringatan_): setiap ada ⚠️ baru langsung satu email untuk dikroscek, yaitu Lapor CW / Ceklok
dengan lokasi diragukan (nama, jam, titik, alasan, jarak, akurasi, tautan peta & foto, tautan sheet untuk mengisi VERIFIKASI)
dan di luar radius > 5 menit (tautan sheet LUAR RADIUS). Maks PERINGATAN_MAKS_HARI = 40 email per hari (kuota Gmail);
matikan dengan EMAIL_PERINGATAN = false. Uji: jalankan ujiEmailPeringatan.pasangPemicuKesehatan dari editor. Uji: jalankan ujiNotifikasi.🩺 Cek & Perbaiki (menu 🚀 CW PAGI APP; file CekPerbaiki.gs) memeriksa: bulan di PENGATURAN (mengingatkan 3 hari sebelum akhir bulan), struktur ABSENSI (baris 7–86 utuh), titik plotting tanpa koordinat, jadwal Piket BM, jadwal Patwal & Piket Laka hari ini, personel ANGGOTA yang tidak cocok dengan plotting/jadwal, sisa ruang Google Drive (waspada ≥ 80%, hampir penuh ≥ 95% juga dikirim lewat email cek kesehatan), ukuran LOG LAPOR, pemicu otomatis, dan mode uji coba. Masalah yang aman diperbaiki otomatis punya tombol (selalu dengan konfirmasi):
| Masalah | Tombol |
|---|---|
| Pemicu otomatis hilang | Pasang pemicu (pasang ulang yang hilang saja) |
| Bulan PENGATURAN sudah lewat | Ganti bulan (lihat di bawah) |
| LOG LAPOR ≥ 3000 baris | Arsipkan (baris bulan-bulan sebelumnya → spreadsheet "Arsip LOG LAPOR CW Pagi") |
| Jadwal Piket BM hari ini tidak ada | Buat periode (lihat Jadwal Piket BM otomatis) |
Yang tidak bisa diperbaiki otomatis hanya diberi saran: jadwal Patwal/Laka belum dibuat, struktur ABSENSI berubah, nama ANGGOTA, mode uji coba (perlu ubah kode + deploy), dan error di kode (dikirim lewat email, Notifikasi.gs).
📅 Ganti Bulan (1 klik) – file GantiBulan.gs. Jalankan tanggal 1, sebelum lapor dibuka 06.00 (pemicu ±00.30 mengirim email pengingat bila belum). Hanya bisa bila bulan PENGATURAN sudah lewat. Urutannya:
📆 Jadwal Piket BM otomatis – file JadwalPiket.gs, spreadsheet "Piket BM". Satu periode = 4 minggu; tanggal semua blok mengikuti D3 (Tanggal Mulai). Pemicu ±00.30 sesudah periode selesai (hari > D4): D3 = hari berikutnya dan nama personel diisi menurut pola rotasi jadwal ini: minggu ke-n = minggu ke-(n−3) dengan kolom Karangente ↔ Ketapang ditukar (tiap orang bergantian pos tiap minggu, regu berputar 1 → 2 → 3, siklus penuh 6 minggu). Kode S/M/LD per regu tetap. Bila pola di jadwal lama tidak cocok (diubah manual dengan pola lain), jadwal tidak ditulis dan operator dikabari lewat email. Menu 📆 menampilkan periode berjalan dan susunan minggu pertama periode berikutnya. Sheet Patwal tetap diperbarui manual bila ada mutasi.
Pilihan A – satu spreadsheet dipakai terus (paling mudah, dipakai 📅 Ganti Bulan) Kosongkan kolom tanggal di ABSENSI, ubah bulan/tahun/tanggal akhir di PENGATURAN (C4, C5, C7), sesuaikan plotting. URL tidak berubah; tidak perlu deploy atau push. Sheet LOG LAPOR boleh dibiarkan (data dipisah per bulan otomatis) atau dipindah ke arsip.
Pilihan B – salinan spreadsheet per bulan
API_URL di web/config.js menjadi URL baru → commit & push (bagian 7).Selama spreadsheet bukan untuk bulan berjalan (C7 di PENGATURAN), menu Lapor CW menampilkan "Lapor belum dibuka".
| Gejala | Penyebab & solusi |
|---|---|
| HP masih tampilan lama | Tutup aplikasi sepenuhnya lalu buka lagi / tarik layar untuk refresh. |
| "NRP tidak terdaftar" | NRP belum ada / salah ketik di sheet ANGGOTA. |
| "Kode admin belum diatur" | Atur dulu lewat menu spreadsheet 🚀 CW PAGI APP → 🔐 Atur Kode Admin Aplikasi. |
| "Kode admin salah 5 kali" | Tunggu 15 menit, lalu coba lagi (atau atur kode baru lewat menu). |
| "NRP terdaftar, tetapi nama … tidak ada di plotting" | Kolom A ANGGOTA tidak sama persis dengan kolom B ABSENSI. |
| Selalu "Di luar radius" padahal di titik | Koordinat titik di KOORDINAT kurang akurat → perbaiki, atau perbesar radius di JADWAL. |
| "Izin lokasi ditolak" | Di HP: izinkan akses lokasi untuk situs/aplikasi, lalu Ambil ulang lokasi. |
| Simpan Rekap gagal / API error | Cek deployment Apps Script masih aktif (Terapkan → Kelola deployment). |
| Push tidak tampil di situs | Tab Actions di GitHub: pastikan workflow hijau; file harus di folder web/. |
cd web
python -m http.server 8000
Buka http://localhost:8000 (memakai API asli sesuai config.js; GPS di browser laptop
tidak akurat, jadi uji lapor sebaiknya di HP).
GPS_POLA_AMBANG| Kode alasan (S, I, LD, …) | Sheet PENGATURAN E5:F11 (seperti sebelumnya). |
UJI_COBA = falseASLI / PALSU) untuk baris bertanda ⚠️.CEKLOK dan JAM_SATPAS (Kode.gs). Selama UJI_COBA = true, jam,
hari libur, radius, dan foto belum diwajibkan.VERIFIKASI_HARILEMAH_TANPA_VERIFIKASI'PALSU'Tinggalkan Lokasi lebih dari 3× sebulan ditulis di CATATAN untuk dicek atasan (tidak mengurangi skor).
Bukti foto (wajah, seragam, foto asli):
SESUAI (tidak dipotong) · TIDAK SESUAI −30 · WAJAH TIDAK JELAS −10 · SERAGAM TIDAK SESUAI −10 · FOTO LAYAR / FOTO LAMA −25
(CEK_FOTO di Kode.gs). Kosong = tidak dipotong. Tidak perlu memeriksa semua foto; cukup acak / yang mencurigakan.WARNA_VERIFIKASI / WARNA_CEK_FOTO di TataSheet.gs; arti warna juga
tertulis di catatan sel judul kolom): VERIFIKASI 🟩 ASLI · 🟥 PALSU. CEK FOTO 🟩 SESUAI · 🟧 TIDAK SESUAI · 🟨 WAJAH TIDAK JELAS ·
🟪 SERAGAM TIDAK SESUAI · 🟥 FOTO LAYAR / FOTO LAMA. Kosong = tanpa warna. Menu yang sama juga merapikan LOG CEKLOK di
spreadsheet Absensi Satpas (judul, filter, warna VERIFIKASI / CEK FOTO) dan mengurutkan + mewarnai tab di sana.FOTO_SIMPAN_HARI,
hapusFotoLama ±08.00; dulu 3 hari) agar komplain / evaluasi nilai mingguan (rilis Senin) dan bulanan masih ada fotonya.
Aplikasi menyimpan foto sebagai WebP mutu 0,6 (jepret, app.js; HP yang belum bisa membuat WebP tetap JPEG).
Daftar Cek foto di tab Pantauan memuat foto 7 hari terakhir (PANTAU_FOTO_HARI). Foto laporan / ceklok bertanda ⚠️ dan yang dinilai selain
SESUAI tetap disimpan sebagai bukti; kolom FOTO di LOG ditandai "foto dihapus ".siapkanBuktiFoto (membuat sheet JADWAL SERAGAM dan kolom CEK FOTO).Periode: PENILAIAN INTEGRITAS = akumulasi bulan berjalan (dari tanggal 1 / TGL_MULAI_INTEGRITAS s.d. hari terakhir
yang sudah ditutup), dihitung ulang tiap pagi.
Penilaian mingguan (file IntegritasMingguan.gs, rumus sama, periode Senin–Minggu):
UJI_COBA = false.Integritas harian (file IntegritasHarian.gs, sheet INTEGRITAS HARIAN): satu hari, ringkas & berwarna. Baris ringkasan (hadir CW, ceklok masuk, terlambat, tidak ceklok, lokasi/foto, rata-rata skor, predikat), lalu per anggota: jam CW Datang–Selesai, Ceklok Masuk/Pulang (telat / pulang cepat), lokasi & foto, skor hari itu, predikat. Hijau = sesuai · kuning = perlu perhatian · merah = pelanggaran · abu-abu = tidak wajib / libur / izin.
Predikat: ≥ 90 Sangat Baik · ≥ 80 Baik · ≥ 70 Cukup · < 70 Kurang, lengkap dengan peringkat dan catatan.
Pengunci predikat (gatekeeper): anggota dengan TERBUKTI ⚠️ PALSU ≥ 1 dalam periode itu paling tinggi mendapat
predikat Cukup (PREDIKAT_MAKS_PALSU), walaupun skornya ≥ 80. Skor angka tetap apa adanya, CATATAN menulis
"predikat dikunci …", dan peringkatnya diletakkan di bawah semua anggota yang bersih. Berlaku juga di penilaian mingguan.
Hari ini baru dinilai setelah lapor ditutup (CW 07.15, ceklok 15.00): hitungan sore ±15.15 sudah memuat hari ini (kecuali yang belum Ceklok Pulang karena mungkin lembur s.d. 21.00: dinilai hitungan pagi berikutnya). Unsur yang belum ada datanya tidak dihitung, dan bobot unsur lain disesuaikan.
Masa uji coba: TGL_MULAI_INTEGRITAS = '2026-10-19' (penilaian uji coba mulai 19 Oktober 2026). Ganti ke
'2026-11-01' sebelum penilaian resmi agar data uji coba tidak ikut dinilai. Selama uji coba, data dihapus tiap
±19.00 WIB (lihat Reset data uji coba), jadi penilaian hanya memuat input sesudah reset terakhir.
Akun pemilik Apps Script harus punya akses edit ke spreadsheet Data Satpas. Saat pertama dijalankan, Google meminta izin.