23 requirement, 17 di antaranya Must
URS-IT-SPC-001 memuat 15 Functional, 2 Data Integrity, 2 Security, dan 4 Non-Functional. Seluruhnya dipetakan ke 10 modul dengan metode verifikasi sesuai kolom URS.
Jadwal URS perlu rebaseline
URS menargetkan launch Nov 2026. Per 27 Okt 2026 fase desain belum tercatat selesai. Usulan realistis: 13–15 minggu, atau pilot terbatas 6–7 minggu.
Arsitektur hybrid
Aplikasi & basis data di cloud, ditambah edge agent di pabrik untuk driver timbangan, buffer offline, dan registry perangkat.
Acuan anggaran
Capex 4,9 kEUR (±Rp 99 juta pada kurs ±Rp 20.200). Cukup untuk pengembangan software; hardware & server on-premise di luar angka ini.
1. Ringkasan Eksekutif
Klien membutuhkan pengganti sistem SPC lokal (legacy) yang sudah tidak didukung Windows 11, terkunci pada kiosk tetap, dan belum memiliki integrasi kamera. Solusi yang diusulkan adalah aplikasi web SPC terpusat dengan arsitektur hybrid: aplikasi dan basis data di cloud, ditambah edge agent di jaringan pabrik yang menangani pembacaan timbangan digital, antrean data saat internet terganggu, dan registrasi perangkat kiosk/tablet.
Pendekatan hybrid dipilih karena tiga alasan operasional:
- Timbangan digital umumnya hanya punya keluaran serial (RS-232/USB-serial), bukan API jaringan. Browser tidak bisa membacanya secara andal di mode kiosk, sehingga dibutuhkan komponen lokal yang berbicara ke perangkat keras.
- Konektivitas lantai produksi tidak selalu stabil. Tanpa buffer lokal, satu kali WiFi putus berarti operator kehilangan data entry — tidak dapat diterima untuk data kualitas.
- Fleksibilitas kepatuhan. Jika IT korporat klien mewajibkan seluruh data produksi tetap di dalam jaringan pabrik, komponen cloud dapat dipindahkan ke on-premise tanpa membangun ulang aplikasi.
Estimasi cakupan: 13–15 minggu untuk build penuh setelah discovery, dengan prototype fungsional 5–7 hari kerja yang dapat dipakai lebih dulu untuk mengunci pemahaman bersama sebelum kontrak pengembangan.
Dokumen menyebutkan requirements/design Jul–Agu 2026, build/test Agu–Okt 2026, dan launch/training Nov 2026. Per tanggal proposal ini (27 Okt 2026) fase build seharusnya sudah berakhir dan go-live tinggal empat minggu lagi. Fase desain belum tercatat selesai, sehingga jadwal pada URS perlu di-rebaseline. Usulan jadwal realistis ada di bagian 12.
2. Pemahaman Kebutuhan Berdasarkan URS
Seluruh acuan kebutuhan dalam proposal ini bersumber dari URS-IT-SPC-001 v0.1. Tidak ada requirement dari sumber lain yang diperlakukan sebagai bagian dari kesepakatan.
2.1 Cakupan yang didefinisikan URS
URS-IT-SPC-001 memuat 23 requirement — 17 berprioritas Must dan 6 Should — tersebar pada empat kategori:
| Kategori | Jumlah | ID |
|---|---|---|
| Functional | 15 | URS-FUN-001 s/d URS-FUN-015 |
| Data Integrity | 2 | URS-DAT-001, URS-DAT-002 |
| Security | 2 | URS-SEC-001, URS-SEC-002 |
| Non-Functional | 4 | URS-NFR-001 s/d URS-NFR-004 |
Struktur dokumen URS dan implikasinya terhadap desain:
| Bagian URS | Isi menurut URS | Konsekuensi desain |
|---|---|---|
| §1 Business need | Sistem SPC legacy lokal tidak didukung Windows 11, akses kiosk tetap, dan tidak memiliki integrated image capture | Aplikasi web terpusat, akses fleksibel kiosk/tablet, modul kamera (M3) |
| §1 In scope | SPC data entry; quality parameter monitoring; kiosk/tablet access; weighing-scale capture; dashboards; alerts; traceability; administration | Delapan area fungsional dipetakan menjadi modul M1–M10 (§3.1) |
| §1 Out of scope | Advanced predictive analytics; ERP/MES integration; electronic approval workflows | Tidak dibangun kecuali melalui change control (§2.2) |
| §2 Users | Operator, QA User, System Administrator, masing-masing dengan minimum access | RBAC tiga role ditegakkan di level database (M1) |
| §3 Requirements | 23 requirement dengan prioritas Must/Should dan metode verifikasi | Matriks pemenuhan per URS ID (§3.2) |
| §4 Assumptions & open items | Satu asumsi (kontrol IT standar ditambahkan agar URS implementable) dan tiga open item | Diteruskan sebagai daftar konfirmasi (§14.1) |
| Header dokumen | Status Draft for review, target launch Nov-26 | Jadwal perlu di-rebaseline (§12.1) |
| §5 Approval | Business Owner/QA dan IT System Owner — masih Pending | Baseline belum terkunci sampai kedua pihak menandatangani |
Basis kontraktual: setiap kriteria penerimaan mengacu pada kolom Verification URS. Requirement di luar dokumen tersebut tidak dianggap bagian dari lingkup sampai disetujui melalui change control.
2.2 Di luar lingkup
Sesuai URS: advanced predictive analytics, integrasi ERP/MES, dan electronic approval workflow — kecuali ditambahkan melalui change control. Proposal ini tidak mengklaim kemampuan prediktif atau AI pada modul SPC; seluruh perhitungan bersifat statistik deterministik yang dapat diaudit.
3. Ruang Lingkup dan Pemetaan URS
3.1 Modul solusi
| Kode | Modul | Isi |
|---|---|---|
| M1 | Identity & Access | Login, role (Operator / QA / Admin), PIN cepat untuk kiosk bersama, session timeout |
| M2 | Master Data | Line, produk, batch/lot, parameter, satuan, target & spec limit (versioned), device, shift |
| M3 | Data Entry (Kiosk & Tablet) | Form SPC, validasi wajib, ambil berat dari timbangan, capture kamera |
| M4 | SPC Engine | Klasifikasi hasil (OK / Warning / OOS), Cp/Cpk, control chart rules |
| M5 | Dashboard Live | Status terkini, filter multi-dimensi, tren per parameter |
| M6 | Deviation Management | Alert, status investigasi, catatan QA (append-only) |
| M7 | Reporting & Export | Laporan terfilter, ekspor CSV/XLSX, cetak PDF |
| M8 | Audit & Compliance | Audit log immutable, soft-delete master data, retensi |
| M9 | Edge Agent | Driver timbangan, buffer offline, registry device, health monitoring |
| M10 | Administration | User & role, konfigurasi sistem, monitoring sistem |
3.2 Matriks pemenuhan requirement
| URS ID | Prio | Modul | Cara pemenuhan | Verifikasi |
|---|---|---|---|---|
| FUN-001 | Must | M3, M5 | Aplikasi web (React), target Windows 11 + Chrome/Edge versi enterprise-supported; tanpa instalasi client | Test |
| FUN-002 | Must | M1 | Supabase Auth + RBAC 3 role; menu & API dibatasi per role | Test |
| FUN-003 | Must | M2 | CRUD + deaktivasi (soft-delete) untuk line, produk, batch, parameter, satuan, target/limit | Test |
| FUN-004 | Must | M3, M9 | Satu codebase responsif; kiosk (landscape, layar besar) & tablet (portrait) berbagi form yang sama | Test |
| FUN-005 | Must | M3 | Field wajib: user, timestamp server, line, produk, batch, parameter, nilai; validasi sebelum submit | Test |
| FUN-006 | Must | M9 | Edge agent baca serial → WebSocket lokal → auto-isi field berat; hanya nilai stabil yang diterima | Integration Test |
| FUN-007 | Must | M3 | getUserMedia → preview → retake → simpan | Test |
| FUN-008 | Must | M3, M2 | Gambar disimpan ke Storage dengan path terikat record_id/batch; dapat dibuka dari record | Test |
| FUN-009 | Must | M4 | Perbandingan otomatis terhadap spec aktif (LSL/USL/Warn) saat simpan | Test |
| FUN-010 | Must | M6 | Insert OOS memicu alert (in-app + email/WhatsApp opsional) memuat parameter, hasil, limit, line, produk, batch, waktu | Test |
| FUN-011 | Must | M5 | Dashboard live via Realtime; hasil baru tampil < 5 detik tanpa refresh manual | Test |
| FUN-012 | Should | M5 | Filter tanggal, line, produk, batch, parameter, status; reset tanpa menghapus data | Test |
| FUN-013 | Should | M5 | Tren kronologis per parameter dengan garis target, LSL, USL, dan control limits | Test |
| FUN-014 | Should | M6 | Catatan investigasi + status disimpan dengan author & timestamp; nilai asli tidak dapat diubah | Test |
| FUN-015 | Should | M7 | Ekspor mengikuti filter aktif, memuat ID record, hasil, limit, status, timestamp | Test |
| DAT-001 | Must | M3 | UUID v4 + recorded_at dari now() server; timestamp klien disimpan terpisah sebagai client_ts untuk diagnosis | Test |
| DAT-002 | Must | M8 | Trigger Postgres menulis before/after JSONB ke audit_log; hak UPDATE/DELETE dicabut dari role aplikasi | Test |
| SEC-001 | Must | M1 | Akun unik, least privilege, penolakan kredensial invalid, opsi SSO Entra ID | Test / Review |
| SEC-002 | Should | M1 | Auto-lock setelah idle (default 15 menit operator, 30 menit QA — dapat dikonfigurasi) | Test |
| NFR-001 | Must | M3, M5 | Layout responsif diuji pada 360px dan 1024px+; tombol utama ≥ 56px, input numerik besar | UAT |
| NFR-002 | Should | Semua | Target muat < 5 detik, freshness dashboard < 60 detik (desain aktual: < 5 detik via Realtime) | Performance Test |
| NFR-003 | Must | Infra | SLA 99,5% jam operasional + maintenance window disepakati; monitoring uptime & alert | Review |
| NFR-004 | Must | Infra | Backup harian + PITR, replikasi gambar, uji restore terdokumentasi per kuartal | Recovery Test |
4. Arsitektur Solusi
4.1 Gambaran komponen
4.2 Prinsip desain
- Edge agent bersifat opsional-gagal. Jika edge mati, kiosk tetap bisa dipakai dengan input manual berat. Tidak ada single point of failure pada entry data.
- Outbound-only. Edge agent hanya membuka koneksi keluar ke cloud. Tidak ada port masuk ke jaringan pabrik — memudahkan persetujuan tim keamanan jaringan.
- Satu codebase, dua persona. Kiosk dan tablet memakai aplikasi yang sama; perbedaan hanya pada layout adaptif dan mode kunci (kiosk mode).
- Immutable by construction. Tidak ada operasi UPDATE/DELETE untuk hasil pengukuran. Koreksi dilakukan dengan record pembetulan (supersede) yang tertaut, sehingga histori tetap utuh.
- Spec limit versioned. Perubahan LSL/USL oleh QA tidak mengubah klasifikasi record lama; setiap record menyimpan
spec_version_idyang berlaku saat itu.
4.3 Opsi deployment
| Opsi | Deskripsi | Kelebihan | Konsekuensi |
|---|---|---|---|
| A. Cloud penuh | Semua di Supabase cloud + CDN; edge hanya untuk timbangan | Tercepat, biaya infrastruktur rendah, update instan | Data produksi keluar dari jaringan korporat — kemungkinan besar ditolak IT klien |
| B. Hybrid (rekomendasi) | Aplikasi + DB cloud; edge agent di pabrik | Seimbang, andal, biaya wajar | Perlu persetujuan data residency |
| C. On-premise penuh | Supabase self-host (Docker) di server pabrik | Data tidak keluar | Perlu server + IT ops klien, biaya & waktu naik ~20–25% |
Rekomendasi: Opsi B, dengan aplikasi dibangun agar migrasi ke Opsi C hanya mengganti konfigurasi endpoint — bukan menulis ulang kode. Keputusan final menunggu jawaban atas pertanyaan data residency di bagian 14.
5. Tech Stack dan Justifikasi
| Lapisan | Teknologi | Alasan |
|---|---|---|
| Frontend | React 18 + Vite + TypeScript | Ekosistem matang, build cepat, tim mudah merekrut; SPA ringan untuk perangkat kiosk berspesifikasi rendah |
| UI | Tailwind CSS + komponen aksesibel | Kontrol penuh atas ukuran target sentuh untuk operator bersarung tangan |
| Charting | Recharts / uPlot | uPlot sangat cepat untuk deret waktu besar (ribuan titik per parameter); Recharts untuk chart interaktif dashboard |
| Tabel & ekspor | TanStack Table + SheetJS | Filter, sort, virtualisasi, ekspor XLSX/CSV sisi klien |
| Backend & DB | Supabase (Postgres 15+) | Auth, RLS, Storage, Realtime, Edge Functions dalam satu platform; dapat di-self-host untuk Opsi C |
| Keamanan data | Row Level Security per role + line | Least privilege ditegakkan di database, bukan hanya di UI |
| Edge agent | Node.js 20 + serialport + better-sqlite3 + ws | Driver serial paling matang di ekosistem JS; SQLite untuk buffer offline; berjalan sebagai Windows Service |
| Notifikasi | Resend/SMTP + WhatsApp Business API (opsional) | Email wajib; WhatsApp realistis untuk supervisor QA di lapangan |
| Deployment web | Cloudflare Pages / Vercel | CDN global, deploy atomik, biaya rendah |
| Observability | Supabase Logs + Uptime monitor + Sentry | Deteksi error frontend dan kegagalan edge agent |
Catatan: seluruh komponen bersifat open-source atau berbiaya operasional rendah. Tidak ada lisensi tersembunyi per-seat — penting untuk kiosk yang jumlahnya bisa bertambah.
6. Desain Data
6.1 Tabel inti
| Tabel | Kolom kunci | Catatan |
|---|---|---|
profiles | id, full_name, role (operator/qa/admin), employee_id, pin_hash, active | 1:1 dengan auth.users |
lines | id, code, name, area, active | Soft-delete |
products | id, sku, name, pack_size, unit, active | — |
parameters | id, code, name, unit_id, decimals, method, product_id | product_id null = parameter generik lintas produk |
specs | id, parameter_id, product_id, target, lsl, usl, warn_lsl, warn_usl, effective_from, effective_to, approved_by | Versioned — perubahan menutup versi lama, tidak menimpa |
batches | id, product_id, line_id, lot_no, prod_date, shift, active | Unik per (lot_no, product_id) |
records | id (uuid), recorded_at (server now()), recorded_by, line_id, product_id, batch_id, parameter_id, value, unit, spec_id, status, source (manual/scale), device_id, client_ts, superseded_by | Append-only |
record_media | id, record_id, storage_path, kind, captured_by, captured_at, checksum | Checksum untuk deteksi manipulasi file |
deviations | id, record_id, status (open/investigating/closed), assigned_to, closed_at | 1:1 dengan record OOS |
deviation_notes | id, deviation_id, author_id, note, created_at | Append-only, tanpa UPDATE/DELETE |
audit_log | id, table_name, row_id, action, actor_id, before (jsonb), after (jsonb), at | Ditulis trigger; role aplikasi tanpa hak ubah |
devices | id, name, type (kiosk/tablet), line_id, scale_config (jsonb), last_seen, app_version | Registry perangkat |
alert_rules | id, parameter_id, trigger, recipients, channel, active | Konfigurasi oleh admin |
system_config | key, value (jsonb) | Timeout sesi, retensi, dsb. |
6.2 Prinsip integritas
- Append-only untuk hasil ukur.
recordstidak memiliki policy UPDATE/DELETE. Salah input ditangani lewat record pembetulan bertaut (superseded_by) yang tetap menyisakan record asli. - Trigger audit universal. Satu fungsi trigger dipasang pada seluruh tabel yang dapat diubah, menulis
before/aftersebagai JSONB.audit_loghanya memiliki policy SELECT untuk admin dan INSERT untuk trigger — tidak ada UPDATE/DELETE untuk siapa pun, termasuk admin. - Soft-delete master data. Deaktivasi mengisi
active=false. Record historis tetap merujuk baris lama sehingga laporan tahun lalu tetap terbaca utuh. - Immutability gambar. File disimpan dengan nama berbasis
record_id+ checksum; verifikasi checksum dijalankan pada job harian. - Zona waktu. Semua timestamp disimpan
timestamptzUTC, ditampilkan dalam Asia/Jakarta.recorded_atselalu dari server, bukan jam perangkat — perangkat kiosk sering salah jam.
6.3 Indeks untuk performa
Indeks komposit pada records (line_id, recorded_at desc), records (parameter_id, recorded_at desc), records (batch_id), dan records (status) where status <> 'ok'. Untuk volume realistis (mis. 20 line × 200 record/hari ≈ 1,4 juta record/tahun), Postgres dengan indeks ini tetap responsif tanpa partisi; partisi bulanan disiapkan sebagai opsi bila volume melebihi 10 juta record.
7. Integrasi Timbangan Digital
7.1 Realita protokol
Timbangan industri hampir selalu berkomunikasi lewat RS-232 (DB9) atau USB-serial, dengan keluaran ASCII. Protokol yang paling umum:
- Mettler Toledo — MT-SICS, atau mode BDI (Bidirectional Data Interface) dengan perintah ASCII
- Sartorius — SBI
- Adam Equipment / Ohaus / AND / CAS — ASCII continuous atau on-demand (karakter perintah seperti
S/SI)
Tidak ada standar tunggal. Karena itu desain driver dibuat profile-based: setiap profil berisi konfigurasi port (baud, data bits, parity, stop bits), mode (continuous vs on-demand), perintah permintaan, dan regex parsing.
7.2 Alur pembacaan
- Timbangan mengirim data ASCII ke port serial.
- Edge agent mem-parsing sesuai profil perangkat yang aktif.
- Edge agent mendeteksi kestabilan: flag
STdari timbangan, atau N sampel identik dalam ≥ 500 ms. - Nilai divalidasi terhadap rentang dan satuan yang diharapkan.
- Nilai dikirim ke kiosk lewat WebSocket
localhost:8787dan tampil di field berat.
Kiosk berlangganan WebSocket lokal dan menampilkan berat live. Operator menekan "Ambil" untuk mengunci nilai — bukan otomatis tersimpan. Ini mencegah nilai transien (barang masih bergerak di atas timbangan) ikut tersimpan, dan memberi operator kendali yang jelas.
7.3 Penanganan kasus tepi
| Kasus | Penanganan |
|---|---|
| Timbangan mati / kabel lepas | Banner peringatan di kiosk; input manual tetap tersedia (tercatat source=manual) |
| Nilai tidak stabil | Tombol "Ambil" nonaktif sampai stabil terdeteksi |
| Satuan berbeda (g vs kg) | Normalisasi ke satuan parameter di edge agent, bukan di UI |
| Beberapa timbangan per line | Pemetaan device_id → COM port di scale_config; operator memilih timbangan bila lebih dari satu |
| Kalibrasi kadaluarsa | Opsional: calibration_due_at per device; kiosk menampilkan peringatan dan (dapat dikonfigurasi) memblokir entry |
7.4 Kriteria penerimaan FUN-006
Uji integrasi: tempatkan anak timbangan standar (mis. 100 g), pastikan nilai terbaca pada field yang benar tanpa pengetikan ulang, dan selisih terhadap display timbangan ≤ resolusi alat (mis. ±0,1 g untuk timbangan 0,1 g). Uji diulang untuk setiap merek/model timbangan yang terpasang.
8. Capture Kamera
- Akuisisi:
getUserMediapada browser kiosk/tablet — tanpa komponen tambahan, tanpa izin instalasi. - Alur UX: tombol kamera → preview live → jepret → pratinjau hasil → Ulangi atau Pakai. Operator tidak bisa menyimpan record tanpa menekan salah satu.
- Kompresi: canvas resize ke maksimal 1600px sisi terpanjang, JPEG kualitas 0,8. Rata-rata 150–300 KB per foto — cukup untuk verifikasi visual, hemat storage.
- Penyimpanan: bucket privat, path
{line_code}/{YYYY}/{MM}/{record_id}/{ts}.jpg. Akses hanya via signed URL berumur pendek. - Keterkaitan (FUN-008): path memuat
record_id, dan barisrecord_mediamenyimpanproduct_id+batch_idhasil join, sehingga gambar dapat ditelusuri dari record maupun dari batch. - Fallback: tablet tanpa kamera dapat mengunggah file dari galeri;
kinddibedakan (cameravsupload). - Offline: foto diantrekan di edge agent (SQLite + folder lokal) lalu diunggah ulang saat koneksi pulih, dengan deduplikasi berbasis checksum.
9. Mesin SPC
9.1 Klasifikasi hasil (FUN-009)
Setiap nilai dibandingkan dengan versi spec yang berlaku saat penyimpanan:
| Kondisi | Status |
|---|---|
LSL ≤ nilai ≤ USL dan di luar zona warning | ok |
Masuk zona warning (warn_lsl/warn_usl bila dikonfigurasi) | warn |
nilai < LSL atau nilai > USL | oos (out of specification) |
Klasifikasi dijalankan di Edge Function saat insert — bukan di klien — agar tidak dapat dimanipulasi dari browser, dan agar hasil konsisten bila ada entry dari sumber lain (API, impor).
9.2 Statistik kemampuan proses
- Cp / Cpk dihitung per parameter per jendela waktu (default 30 hari terakhir atau 25 subgroup terakhir):
Cpk = min((USL − x̄), (x̄ − LSL)) / 3σ. - Pp / Ppk untuk variasi keseluruhan (long-term).
- Control chart: I-MR untuk pengukuran tunggal per pengecekan (paling umum di lini es krim — satu sampel per interval), X̄-R bila data dikelompokkan per shift/batch.
- Aturan alert (opsional, dapat diaktifkan QA): 1 titik di luar 3σ; 7 titik berurutan pada satu sisi mean; 6 titik naik/turun berurutan. Ini aturan SPC klasik yang dapat dihitung deterministik — bukan analitik prediktif, jadi tetap dalam lingkup URS.
9.3 Alert deviasi (FUN-010)
Saat status oos:
- Baris
deviationsdibuat otomatis (status=open). - Edge Function mengirim notifikasi berisi: parameter, nilai, LSL/USL, line, produk, batch/lot, timestamp, dan tautan langsung ke record.
- Kanal: in-app (wajib) + email ke daftar penerima (wajib) + WhatsApp Business API (opsional, biaya terpisah).
- Eskalasi opsional: bila belum ditangani dalam X menit, naik ke supervisor QA.
Untuk mencegah banjir notifikasi saat satu batch bermasalah berulang, alert dikelompokkan per (batch, parameter) dengan jendela 15 menit — satu notifikasi dengan hitungan, bukan 20 notifikasi terpisah.
10. Dashboard dan Pelaporan
10.1 Dashboard live (FUN-011, FUN-012, FUN-013)
| Widget | Isi |
|---|---|
| KPI strip | Total record hari ini, % OK, jumlah OOS terbuka, Cpk terendah |
| Live feed | 10 record terakhir dengan status berwarna; update via Realtime |
| Status per line | Kartu per line: jumlah OOS, parameter paling bermasalah |
| Tren parameter | Line chart dengan garis target, LSL, USL, dan control limits; zoom rentang waktu |
| Pareto deviasi | Parameter/line yang paling sering OOS dalam periode terpilih |
| Peta panas | Line × jam, intensitas OOS — membantu melihat pola shift |
Filter global: rentang tanggal/jam, line, produk, batch/lot, parameter, status. Semua filter tersimpan di URL sehingga sebuah tampilan dashboard dapat dibagikan sebagai tautan.
10.2 Laporan (FUN-015)
| Laporan | Isi | Format |
|---|---|---|
| Rekap SPC harian | Semua record per line/shift dengan status | XLSX, PDF |
| Register deviasi | Daftar OOS, status investigasi, catatan QA, waktu tutup | XLSX, PDF |
| Capability report | Cp/Cpk/Pp/Ppk per parameter per periode | XLSX, PDF |
| Traceability batch | Seluruh record + foto untuk satu batch/lot | PDF (lampiran gambar) |
| Audit extract | Perubahan master data & record dalam rentang waktu | CSV |
Semua ekspor memuat ID record, nilai, limit, status, timestamp, dan identitas pencatat — memenuhi kriteria FUN-015. Ekspor dijalankan sebagai job untuk data besar, dengan tautan unduhan berumur terbatas.
10.3 UX untuk lingkungan produksi
Ini bagian yang sering diabaikan dan menjadi penyebab adopsi gagal:
- Tombol aksi minimal 56×56 px, angka input 24pt+, kontras tinggi.
- Alur entry maksimal 3 layar: pilih batch → ukur → simpan.
- Kerja dengan sarung tangan: tanpa gesture geser, tanpa menu tersembunyi.
- Tablet di area freezer memerlukan perangkat rated suhu rendah — spesifikasi perangkat dibahas di bagian 14.
- Umpan balik instan: warna hijau/kuning/merah setelah simpan, plus bunyi pendek untuk OOS.
11. Keamanan, Kepatuhan, dan Non-Functional
11.1 Autentikasi dan otorisasi
- Akun unik per operator (SEC-001), tanpa akun bersama.
- Kiosk bersama memakai login PIN 6 digit yang dipetakan ke akun individual — memenuhi "unique accounts" tanpa memaksa operator mengetik password panjang di lantai produksi. PIN disimpan sebagai hash, dicabut otomatis bila tidak dipakai 90 hari.
- Sesi auto-lock: 15 menit untuk operator, 30 menit untuk QA (dapat dikonfigurasi, SEC-002). Setelah lock, PIN diminta lagi.
- Opsi SSO Entra ID / Microsoft 365 bila IT klien mensyaratkannya — disiapkan sebagai modul, bukan dibangun di fase 1 kecuali diminta.
- RLS membatasi operator pada line yang ditugaskan; QA dan admin lintas line.
11.2 Backup dan pemulihan (NFR-004)
| Komponen | Metode | Frekuensi | Retensi |
|---|---|---|---|
| Postgres | Backup otomatis + PITR | Harian + PITR 7 hari | 30 hari |
| Storage (foto) | Replikasi bucket + snapshot | Harian | 12 bulan |
| Konfigurasi | Versioned via repositori Git | Setiap perubahan | Tak terbatas |
| Audit log | Termasuk backup DB, ekspor bulanan ke cold storage | Bulanan | Sesuai kebijakan retensi |
Uji restore dilakukan per kuartal dan didokumentasikan (siapa, kapan, berapa lama, hasil verifikasi) — inilah bukti yang diminta kriteria NFR-004, bukan sekadar konfigurasi backup.
11.3 Performa (NFR-002)
- Target muat halaman < 5 detik pada koneksi 10 Mbps: bundle awal < 300 KB gzip, code-splitting per modul, gambar lazy-load.
- Freshness dashboard: Realtime Supabase memberi update < 2 detik — jauh di bawah batas 60 detik.
- Uji performa dilakukan dengan profil beban yang disepakati (jumlah record/hari, jumlah pengguna bersamaan).
11.4 Ketersediaan (NFR-003)
- SLA usulan: 99,5% pada jam operasional yang disepakati, dengan maintenance window di luar jam produksi.
- Monitoring: uptime check per 60 detik dari dua lokasi, alert ke tim support.
- Ketahanan offline: edge agent menyimpan entry di SQLite ketika cloud tidak terjangkau dan menyinkronkan otomatis saat pulih. Operator melihat indikator "tersimpan lokal — menunggu sinkronisasi", sehingga data tidak hilang meski internet mati berjam-jam.
- Health check edge agent: bila heartbeat > 5 menit hilang, admin menerima notifikasi.
11.5 Retensi data
Belum ditetapkan di URS (open item). Usulan default: data hasil ukur dan audit disimpan minimal 5 tahun; foto 24 bulan (volume terbesar); setelah itu diarsipkan ke cold storage, bukan dihapus. Angka final menunggu kebijakan QA/Regulatory klien.
12. Rencana Kerja dan Timeline
12.1 Kondisi jadwal saat ini
URS menargetkan launch Nov 2026. Per 27 Oktober 2026, itu berarti tinggal ±4 minggu — tidak realistis untuk lingkup penuh (integrasi timbangan, kamera, audit trail, backup teruji, UAT dua tipe perangkat). Menawarkan tanggal tersebut akan berujung pada go-live yang tidak lolos kriteria penerimaan URS sendiri.
12.2 Baseline yang diusulkan
| Fase | Durasi | Output | Prasyarat dari klien |
|---|---|---|---|
| P0 — Prototype | 5–7 hari kerja | Demo fungsional: entry, DB, dashboard grafik, laporan | Contoh data & 1 set spec limit |
| P1 — Discovery & Design | 2 minggu | Dokumen desain disetujui, inventaris timbangan/kamera, protokol uji | Akses pabrik, daftar perangkat, persetujuan spec limit |
| P2 — Core Build | 6 minggu | M1, M2, M3, M8 (auth, master data, entry, audit) | Server/akun cloud disiapkan |
| P3 — Analytics & Report | 3 minggu (overlap P2) | M4, M5, M6, M7 | Definisi laporan final |
| P4 — Edge & Integrasi | 2 minggu | M9, driver timbangan terpasang di line pilot, kamera | Timbangan & kabel siap, konverter USB-serial |
| P5 — UAT, Training, Go-Live | 2 minggu | UAT sign-off, pelatihan operator & QA, SOP, go-live | Peserta pelatihan, jadwal produksi |
Total: 13–15 minggu kalender dengan asumsi feedback klien ≤ 3 hari kerja per siklus review.
Rollout yang disarankan bertahap: pilot 1–2 line (4 minggu), evaluasi, lalu perluasan ke seluruh line (2–3 minggu). Rollout bertahap menurunkan risiko dan memberi QA kesempatan menyesuaikan spec limit berdasarkan data nyata.
12.3 Jika klien tetap mengejar tanggal lebih awal
Satu-satunya jalur realistis adalah pilot terbatas: 1 line, parameter timbangan + volume saja, tanpa kamera, tanpa ekspor PDF lanjutan, tanpa WhatsApp alert. Ini bisa live dalam 6–7 minggu. Sisa modul menyusul. Perlu persetujuan tertulis bahwa kriteria penerimaan URS dipenuhi bertahap — bukan sekaligus.
13. Estimasi Biaya
13.1 Acuan anggaran klien
URS mencantumkan capex reference 4,9 kEUR. Dengan kurs EUR/IDR ±Rp 20.200 (per 27 Okt 2026), acuan tersebut setara ±Rp 99 juta.
13.2 Usulan alokasi
| Komponen | Bobot | Estimasi (Rp) |
|---|---|---|
| Discovery, desain, workshop | 12% | 11.900.000 |
| Core build (auth, master data, entry, audit) | 35% | 34.650.000 |
| SPC engine, dashboard, pelaporan | 22% | 21.780.000 |
| Edge agent, integrasi timbangan & kamera | 13% | 12.870.000 |
| UAT, pelatihan, deployment, dokumentasi | 10% | 9.900.000 |
| Project management, QA, pendampingan security review | 8% | 7.920.000 |
| Total | 100% | ≈ 99.000.000 |
Setara ±78 man-days dengan blended rate ±Rp 1,27 juta/man-day. Angka ini adalah estimasi perencanaan, bukan penawaran final; penawaran mengikat disusun setelah P1 Discovery ketika jumlah line, jumlah timbangan, dan kompleksitas laporan sudah pasti.
13.3 Belum termasuk
- Perangkat keras: mini-PC edge agent, tablet industri (rated suhu rendah untuk area freezer), kabel RS-232/USB-serial, mounting kiosk. Perlu quotation terpisah dari vendor hardware.
- Server on-premise bila klien memilih Opsi C.
- WhatsApp Business API (biaya per percakapan).
- Lisensi Windows 11 / kalibrasi timbangan.
- Migrasi data historis dari sistem legacy — belum disebut di URS, perlu dikonfirmasi. Bila ada, estimasi tambahan 1–2 minggu.
13.4 Biaya operasional (indikatif)
Kategori: hosting aplikasi, Supabase (paket berbayar untuk PITR & kapasitas), storage foto, domain, monitoring. Rentang indikatif Rp 700 ribu – 1,5 juta/bulan untuk skala satu pabrik. Harga paket penyedia perlu diverifikasi ulang saat PO — jangan dijadikan angka kontraktual tanpa konfirmasi.
14. Asumsi dan Open Items
14.1 Dari URS (belum terjawab)
| # | Open item | Dampak bila tidak dijawab | Usulan default |
|---|---|---|---|
| 1 | Versi browser yang didukung | Uji kompatibilitas tidak bisa ditutup | Chrome/Edge 2 versi terakhir |
| 2 | Model kiosk & tablet | Layout & UAT tidak terukur | Uji di 1024×768 dan 1280×800 |
| 3 | Tipe kamera | FUN-007 berisiko gagal | Kamera terintegrasi / USB webcam |
| 4 | Protokol timbangan | Driver tidak dapat dibangun | Sampel 1 unit per merek untuk uji |
| 5 | Jumlah pengguna bersamaan | Uji performa tidak valid | Asumsi 30 bersamaan |
| 6 | Spec limit final | Klasifikasi & alert tidak dapat diuji | Nilai sementara dari data pilot |
| 7 | Penerima & metode alert | FUN-010 tidak lengkap | Email ke supervisor QA |
| 8 | Target ketersediaan | SLA tidak dapat disepakati | 99,5% jam operasional |
| 9 | Inactivity timeout | SEC-002 tidak terukur | 15 menit operator, 30 menit QA |
| 10 | Periode retensi | Biaya storage tidak pasti | 5 tahun data, 24 bulan foto |
| 11 | Frekuensi backup & RPO/RTO | NFR-004 tidak dapat diverifikasi | Harian, RPO 24 jam, RTO 4 jam |
| 12 | E-approval / ERP / prediktif | Risiko scope creep | Ditunda ke change control |
14.2 Tambahan dari kami (belum ada di URS)
| # | Pertanyaan | Mengapa penting |
|---|---|---|
| A | Apakah data produksi boleh berada di cloud di luar jaringan korporat? | Menentukan Opsi A/B/C; jika tidak boleh, jadwal & biaya naik 20–25% |
| B | Apakah perlu melalui security assessment / vendor onboarding IT korporat? | Proses ini bisa 4–8 minggu dan berjalan paralel dengan build — mulai sekarang |
| C | Berapa jumlah line dan produk aktif saat go-live? | Menentukan effort master data & pelatihan |
| D | Struktur shift dan jam operasional produksi? | Menentukan SLA & jendela maintenance |
| E | Apakah operator memakai akun individu di kiosk bersama? | Menentukan desain login PIN (SEC-001 vs realitas lantai) |
| F | Apakah ada data historis legacy yang harus dimigrasikan? | Bisa menambah 1–2 minggu |
| G | Apakah batch/lot dipindai dari barcode atau diketik? | Barcode scanner menambah akurasi & mengurangi salah input |
| H | Bahasa antarmuka: Indonesia, Inggris, atau keduanya? | Menambah pekerjaan i18n |
| I | Apakah dibutuhkan tanda tangan elektronik pada laporan? | Di luar scope URS, tapi sering diminta QA |
| J | Siapa yang berwenang menyetujui perubahan spec limit? | Menentukan alur & audit trail master data |
15. Manajemen Risiko
| # | Risiko | Peluang | Dampak | Mitigasi |
|---|---|---|---|---|
| 1 | Jadwal URS sudah terlewat; ekspektasi tanggal tidak realistis | Tinggi | Tinggi | Rebaseline di kickoff; tawarkan pilot bertahap dengan kriteria penerimaan bertahap |
| 2 | Security/data-residency review IT korporat memakan waktu | Tinggi | Tinggi | Mulai proses di minggu 1; siapkan dokumen arsitektur & data flow untuk reviewer; bangun agar Opsi C mulus |
| 3 | Protokol timbangan tidak terdokumentasi / multi-merek | Sedang | Sedang | Profil driver konfigurabel; minta 1 sampel unit per merek saat discovery |
| 4 | WiFi lantai produksi tidak stabil | Tinggi | Sedang | Buffer offline di edge agent + indikator status sinkronisasi di UI |
| 5 | Spec limit belum disetujui QA saat build | Sedang | Sedang | Spec versioned + nilai sementara; uji klasifikasi dengan data dummy yang disetujui |
| 6 | Anggaran 4,9 kEUR lebih kecil dari lingkup penuh | Sedang | Tinggi | Transparansi alokasi (13.2); prioritaskan Must; Should ditawar bertahap |
| 7 | Adopsi rendah karena UI tidak cocok untuk lantai produksi | Sedang | Tinggi | UAT dengan operator asli di line pilot, bukan hanya QA; desain glove-friendly |
| 8 | Scope creep ke ERP/MES/e-approval | Sedang | Sedang | Change control tertulis; daftar out-of-scope di bagian 2.2 |
| 9 | Perangkat kiosk/tablet tidak rated untuk area freezer | Sedang | Sedang | Konfirmasi spesifikasi perangkat di discovery; alternatif enclosure |
| 10 | Data entry ganda (double submit) akibat operator menekan simpan dua kali | Sedang | Rendah | Idempotency key per sesi entry; tombol disable setelah submit |
16. Rencana Prototype (P0)
Prototype dibangun sebelum kontrak pengembangan penuh, untuk mengunci pemahaman bersama dan memberi klien sesuatu yang konkret untuk dinilai.
Lingkup prototype (5–7 hari kerja)
- Login dengan 3 role + RLS dasar
- Master data minimal: line, produk, batch, parameter, spec limit
- Form entry SPC yang responsif (desktop/kiosk + mobile/tablet): berat, volume, catatan
- Simulasi input timbangan (WebSocket) — menunjukkan alur FUN-006 tanpa hardware
- Klasifikasi otomatis OK/Warning/OOS terhadap LSL/USL
- Dashboard: live feed + tren per parameter dengan garis target & limit
- Laporan: tabel terfilter + ekspor CSV
Yang sengaja belum ada: audit trail lengkap, kamera, multi-line penuh, PDF, notifikasi email, backup — semuanya bagian dari build penuh. Prototype menggunakan data contoh yang jelas ditandai sebagai dummy, bukan data produksi klien.
17. Langkah Selanjutnya
- Review proposal ini bersama tim — tandai bagian yang perlu disesuaikan dengan realitas internal.
- Jawab open items di bagian 14, khususnya A (data residency), B (security review), C (jumlah line), F (migrasi data).
- Jadwalkan kunjungan pabrik — inventaris timbangan, kamera, kiosk, dan kondisi jaringan adalah variabel terbesar yang belum terukur.
- Setujui prototype sebagai langkah pertama; demo ke stakeholder QA & IT.
- Susun penawaran mengikat setelah P1 Discovery, dengan jumlah line dan perangkat yang sudah pasti.