Referensi Form: Validasi, Error, Limit, dan Perilaku Sistem
Referensi Cepat untuk Aturan Validasi, Pesan Error, Batasan Sistem, dan Perilaku Lifecycle Data
Artikel ini adalah referensi cepat untuk aturan, batasan, dan perilaku yang mengatur Form. Disusun untuk di-scan, bukan dibaca dari awal sampai akhir — gunakan judul bagian untuk langsung ke topik yang Anda butuhkan. Untuk orientasi konseptual, baca terlebih dahulu Panduan Lengkap Form di Task Management.
1. Aturan Validasi per Input Type
Aturan Umum (berlaku di seluruh input type yang relevan)
- Field mandatory harus diisi sebelum karyawan dapat berpindah ke halaman berikutnya atau melakukan submit. Pesan error muncul di field saat field tersebut kehilangan fokus dalam kondisi kosong.
- Batas karakter berlaku untuk field berbasis teks (lihat Bagian 3 untuk maksimum spesifik). Input akan diblokir setelah batas tercapai.
- Batas nilai berlaku untuk field numerik yang dikonfigurasi dengan aturan min/max value. Input di luar rentang akan memicu validasi inline.
- Validasi format berlaku untuk input khusus (format email, phone number dengan prefix negara, format date).
- Unique answer dapat dikonfigurasi di Client Portal tetapi saat ini ditangguhkan / belum diberlakukan — toggle bisa tersembunyi atau nonaktif tergantung status rilis.
Aturan Spesifik per Input Type
| Input Type | Validasi |
|---|---|
| Text | Min char, max char (jika dikonfigurasi) |
| Number / Number Stepper | Min value, max value (jika dikonfigurasi); hanya numerik |
| Harus dalam format email yang valid | |
| Phone Number (Prefix) | Nilai numerik dengan prefix negara (default +62) |
| Date | Tanggal valid dalam format YYYY-MM-DD |
| Dropdown Single / Radio | Wajib memilih satu jika mandatory |
| Dropdown Multiple / Checkbox | Wajib memilih minimal satu jika mandatory; maks 10 opsi untuk Checkbox/Radio (tidak termasuk "Lainnya") |
| Currency / Length / Stock / Shelf Length | Nilai numerik dengan prefix atau suffix; non-negatif |
| Photo / Open Camera / File | Minimal satu file diperlukan jika mandatory |
| Photo Before-After | Kedua set gambar Before dan After diperlukan jika pertanyaan mandatory |
| Stock OPEN-ENDING | Nilai OPEN dan ENDING keduanya wajib (sub-field tidak dapat dipisah) |
| Shelf Share | Numerik, mendukung hingga 2 angka desimal, tidak boleh negatif, suffix cm atau m; mandatory terkunci ke Yes |
2. Pesan Error yang Umum
Client Portal (Admin)
| Pemicu | Pesan |
|---|---|
| User non-whitelisted mengakses modul Form | No Access — diarahkan kembali ke modul pertama yang diperbolehkan |
| Halaman target logic jump telah dihapus | "target page is no longer exists" — muncul di bawah field Jump To yang terdampak; memblokir progress step |
| Menambahkan pertanyaan logic jump kedua di halaman yang sama | "Multiple questions with logic jumps are not allowed" |
| Reordering menyebabkan dua pertanyaan logic jump di halaman yang sama | "Failed to reorder data. Only one question with a logic jump is allowed per page" |
| Menambahkan compound kedua di dalam compound | "Failed to add Question: there can only be 1 Compound Input Type here." |
| Menyimpan form ketika channel yang dipilih sudah tidak ada di sistem | "The selected channel(s) no longer exist in the system. The configuration has been refreshed, and invalid selections were removed." |
| Menyimpan form ketika working group / level / node yang dipilih telah dihapus | "Working Group(s) no longer exist and automatically removed from the list. It is safe to proceed." |
| Data sistem yang digunakan compound hilang saat validasi | "Some selected filter items no longer exist in the system. The configuration has been refreshed and invalid selections were removed." |
| Upload CSV bulk melebihi batas baris | "The uploaded data exceeds the maximum of 1000 rows." |
| Upload bulk melebihi maksimum opsi per pertanyaan | "Maximum number of options per question exceeded" |
| Rate limit ekspor terlampaui | "Failed to begin export: Maximum attempts exceeded. Please try again in N minutes." |
Mobile (Karyawan Lapangan)
| Pemicu | Pesan |
|---|---|
| Field mandatory atau invalid saat Selanjutnya/Simpan | Drawer merangkum error; pesan field-level tetap terlihat sampai diperbaiki |
| Kunjungan sudah di-checkout dari perangkat lain | "Kunjungan ini telah diselesaikan melalui perangkat lain. Silakan kembali ke daftar kunjungan untuk melanjutkan." (CTA: kembali ke daftar channel) |
| Target Per Visit belum tercapai saat menekan Kirim | Drawer menampilkan daftar form yang belum lengkap dengan pencapaian X/Q dan sisa Q-X |
| Target harian tercapai | "Target harian sudah tercapai" |
| Target form tercapai | "Target sudah tercapai" |
| Copy from Previous ketika tidak ada submission sebelumnya | "No previous data available" — karyawan lanjut mengisi manual |
| Copy from Previous ketika versi form tidak cocok | "Form has been updated" — copy diblokir secara keras |
3. Batasan Konfigurasi
Form Template
| Batas | Nilai |
|---|---|
| Form Template Name (maks karakter) | 250 |
| Form Template Description (maks karakter) | 250 |
| Training Title (maks karakter) | 140 |
| Training Material — jumlah file | Maksimum 5 |
| Training Material — tipe file | JPEG, PNG, HEIC, PDF |
| Training Material — ukuran file masing-masing | 5 MB |
| Active Period (Form Temporer) — rentang maks | Start = minimum hari ini; end = maksimum 360 hari setelah start |
Halaman dan Pertanyaan
| Batas | Nilai |
|---|---|
| Format halaman yang tersedia | Hanya List (keterbatasan format tunggal di rilis saat ini) |
| Pertanyaan logic jump per halaman | Maksimum 1 |
| Question Title (maks karakter) | 48 (di Compound) |
Input Berbasis Opsi
| Input Type | Maks Opsi | Catatan |
|---|---|---|
| Checkbox | 10 (tidak termasuk Lainnya) | Tombol Add Option nonaktif saat batas tercapai |
| Radio | 10 (tidak termasuk Lainnya) | Tombol Add Option nonaktif saat batas tercapai |
| Dropdown Single | Tanpa batas | Mobile menampilkan 100 pertama secara alfabetis + search |
| Dropdown Multiple | Tanpa batas | Mobile menampilkan 100 pertama secara alfabetis + search |
Upload CSV Bulk
| Batas | Nilai |
|---|---|
| Maks baris per upload | 1.000 |
| Perilaku saat melampaui | Semua baris gagal dengan toast The uploaded data exceeds the maximum of xxx rows. |
| Lapisan validasi | Layer 1 (format/struktur file), Layer 2 (data per baris) |
| Perilaku partial success | Baris yang valid diimpor; baris invalid ditampilkan di file hasil |
Compound Input Type
| Batas | Nilai |
|---|---|
| Compound Input Type Name (maks karakter) | 25 |
| Button Label (maks karakter) | 25 |
| Description (maks karakter) | 250 |
| Question Title (maks karakter) | 48 |
| Pertanyaan per Compound | Maksimum 10 |
| Nested Compound per parent | Maksimum 1 |
| Kedalaman nesting | Hanya 1 level (tidak ada nested di dalam nested) |
| Self-reference | Tidak diperbolehkan |
| Circular nesting | Tidak diperbolehkan |
4. Batasan Ekspor dan Masa Simpan
| Batas | Nilai |
|---|---|
| Jumlah ekspor per jendela 15 menit | 50 |
| Baris per file | 50.000 (dipisah menjadi beberapa file saat melampaui, diberi nama 1 of N, 2 of N, dst.) |
| Masa simpan file | 90 hari sejak tanggal pembuatan |
| Status setelah masa simpan habis | "Expired" — tombol Download dinonaktifkan |
| Format file | .zip dengan proteksi password |
| Format password | [Client ID][Client Name] (digabung tanpa spasi) |
| File yang disertakan dalam zip | Export Log + Task Report Raw Data + (per Compound) Compound Sheet + (per Nested Compound) Nested Compound Sheet |
| Filter rentang tanggal | 1–31 hari; start date maks 365 hari ke belakang; tidak boleh tanggal di masa depan |
Audit Aktivitas Ekspor
Setiap aktivitas ekspor otomatis dicatat dengan:
- User ID yang melakukan inisiasi
- Timestamp
- Semua parameter filter yang diterapkan
Log ini dapat diakses melalui halaman Export Result → View Detail.
5. Aturan Lifecycle Kunjungan dan Draft
| Aturan | Perilaku |
|---|---|
| Gating visibilitas form | Form hanya muncul di Daftar Tugas setelah check-in berhasil |
| Snapshot saat check-in | Struktur form, target, availability, assignment, dan konfigurasi compound semuanya terkunci ke kunjungan |
| Batas waktu 24:00 kunjungan | Jika kunjungan tidak diselesaikan sampai tengah malam, kunjungan dan draft yang belum di-submit akan dihapus; tidak tercatat di laporan apa pun |
| Persistensi draft | Draft bertahan saat navigasi, aplikasi diminimize, atau gangguan jaringan sementara, selama kunjungan masih "Dalam Proses" |
| Beberapa draft per form | Diperbolehkan (sampai batas target); masing-masing memiliki Submission ID unik |
| Data draft saat meninggalkan tanpa menyimpan | Dibuang; dialog konfirmasi memperingatkan karyawan |
| Submission final | Atomic — semua draft dalam kunjungan berhasil di-submit, atau tidak ada yang berubah status (tidak ada partial submission) |
| Check-out gagal setelah submission berhasil | Draft tetap di status Submitted; kunjungan tetap "Dalam Proses"; karyawan dapat retry check-out tanpa perlu mengirim ulang draft |
6. Snapshot Binding (Apa yang Terkunci vs Apa yang Diperbarui)
Terkunci ke snapshot kunjungan (perubahan CP-side TIDAK memengaruhi kunjungan saat ini)
- Struktur form (halaman, pertanyaan, input type, opsi)
- Konfigurasi logic jump
- Nilai dan mode target
- Periode availability (jendela tanggal Temporary)
- Training material
- Cakupan assignment
- Konfigurasi compound input type (termasuk nested compound)
Pembaruan hanya berlaku untuk kunjungan BARU
- Setiap modifikasi yang dilakukan di Client Portal selama kunjungan berlangsung hanya akan berlaku saat karyawan check-in berikutnya.
Selalu mencerminkan state sistem terbaru (dinamis)
- Nama karyawan di ekspor — mengikuti record karyawan saat ini (Employee ID tetap sama).
- Nama Form Template di list dan history — diperbarui jika diganti.
- Tampilan nama channel — diperbarui jika diganti.
Selalu mencerminkan snapshot pada saat submission (historis)
- Struktur dan version form saat melihat atau mengekspor laporan yang sudah di-submit.
- Nilai opsi yang dipilih dalam jawaban (meskipun opsi asli telah diganti namanya atau dihapus di database sumber).
- Item compound yang dipilih dalam jawaban (meskipun item kemudian dihapus).
7. Aturan Integritas Data Historis
Laporan yang sudah di-submit tetap dapat diakses dan diekspor dalam semua skenario berikut:
| Skenario | Efek pada laporan yang sudah di-submit |
|---|---|
| Form template diganti namanya | Laporan tetap terlihat; nama terbaru ditampilkan di list; struktur asli dipertahankan |
| Form template di-unassign dari channel | Laporan tetap ada di Riwayat dan ekspor |
| Form template dihapus | Laporan tetap terlihat dan dapat diekspor; struktur dipertahankan melalui snapshot |
| Channel menjadi inactive atau dihapus | Laporan tetap ada; ekspor menyertakan data dari channel inactive/deleted |
| Karyawan menjadi inactive atau dihapus | Laporan tetap ada; ekspor menyertakan data dari karyawan inactive/removed |
| Working Group / Level / Node dihapus | Laporan tetap ada; hierarki assignment di snapshot dipertahankan |
| Form template di-upgrade ke version baru | Submission asli tetap di-render menggunakan snapshot version aslinya |
Ketika membuka submission historis, sistem selalu memuat struktur berdasarkan versi yang digunakan pada saat submission, bukan versi saat ini.
8. Aturan Versioning Form
| Aturan | Detail |
|---|---|
| Form ID | Dibuat sekali saat pembuatan, format ClientID-MMYYYY-10character, tidak pernah berubah |
| Pemicu kenaikan version | Aksi save yang meng-commit perubahan Step 2 (Form Builder) atau Step 3 (Logic Jump) |
| Tidak ada kenaikan version untuk | Perubahan Step 1, Step 4, atau Step 5 (basic info, interaksi preview, assignment) |
| Reverting sebelum save | Jika perubahan struktural dibatalkan ke nilai aslinya sebelum disimpan, tidak ada version baru yang dibuat |
| Satu save = satu version | Beberapa perubahan struktural yang di-commit dalam satu save dihitung sebagai satu kenaikan version |
| Question ID — dipertahankan | Saat memodifikasi title, opsi, mandatory flag, atau input type dari pertanyaan yang sudah ada |
| Question ID — dibuat baru | Saat menambahkan pertanyaan secara manual, via duplicate question, atau via duplicate page |
| Version compound | Compound di-version secara independen; mengedit compound otomatis menyebarkan version form baru ke semua form yang menggunakannya |
9. Aturan Cakupan Save saat Mengedit
| Lokasi Save | Yang di-commit | Yang dibuang |
|---|---|---|
| Step 1 | Hanya perubahan Step 1 | Perubahan Step 2, 3, 4, 5 |
| Step 4 (Preview) | Perubahan Step 1, 2, 3 | Perubahan Step 5 |
| Step 5 | Semua perubahan Step 1–5 | Tidak ada |
| Meninggalkan halaman tanpa save | Tidak ada yang di-commit | Semua perubahan di seluruh step |
Catatan:
- Step 2 dan Step 3 tidak memiliki tombol Save. Selalu lanjut via Next; commit terjadi di Step 4 atau Step 5.
- Modal konfirmasi muncul saat meninggalkan halaman edit dengan perubahan yang belum disimpan (prompt in-app untuk navigasi breadcrumb; dialog native browser untuk refresh/tutup tab).
10. Aturan Khusus Compound Input Type
| Aturan | Detail |
|---|---|
| Format halaman di form | Selalu List (format tunggal di rilis saat ini) |
| Mandatory dan unique pada pertanyaan form | Diwariskan dari compound; terkunci di tingkat form |
| Logic jump | Hanya page-level yang diperbolehkan di Compound Page; question-level dinonaktifkan |
| Reorder pertanyaan di dalam compound | Tidak didukung di rilis saat ini; pertanyaan ditampilkan dalam urutan penambahan |
| Perubahan sumber item | Memicu warning; menghapus konfigurasi filter dan Info Detail yang ada |
| Perubahan Input Type pertanyaan | Memicu warning; berdampak pada semua form yang menggunakan compound |
| Nested compound | Maksimum 1 per parent, tidak ada self-reference, tidak ada multi-level, tidak ada circular |
| Eksklusivitas Shelf Share | Compound Shelf Share tidak dapat berisi input type lain |
| Mandatory Shelf Share | Terkunci ke Yes; tidak dapat diubah |
| Presisi desimal Shelf Share | Maksimum 2 angka desimal pada input shelf length |
| Identitas item di mobile | Tap nama item untuk melihat Info Detail read-only (attribute asset/channel yang dikonfigurasi) |
11. Cascade Dependency Working Group
Saat data hierarki working group dimodifikasi atau dihapus, dependensi otomatis ter-cascade:
| Aksi pada hierarki | Efek pada konfigurasi assignment |
|---|---|
| Working Group dihapus | WG dihapus dari list; semua Level dan Node di bawahnya juga ikut terhapus dari konfigurasi |
| Level dihapus | Level dihapus; semua Node di bawahnya ikut terhapus; parent WG tetap dipertahankan |
| Node dihapus | Hanya Node tersebut yang dihapus; WG dan Level tetap dipertahankan |
| Semua entri yang terhapus saat save | Otomatis dihapus dengan pesan konfirmasi: "Working Group(s) no longer exist and automatically removed from the list. It is safe to proceed." |
| Field wajib menjadi kosong setelah reset | Save diblokir sampai pilihan valid dibuat |
Cascade ini berlaku saat save edit dan saat re-validasi pada navigasi step. Di halaman edit read-only (tanpa memicu modifikasi), item hierarki yang sudah dihapus tetap terlihat sampai user secara eksplisit memodifikasi assignment.
12. Aturan Salin Jawaban Sebelumnya (Mobile)
Fitur Salin Jawaban Sebelumnya di mobile memungkinkan karyawan mengisi otomatis form menggunakan submission sebelumnya. Fitur ini mengikuti aturan ketat untuk mencegah data yang salah:
| Aturan | Detail |
|---|---|
| Kelayakan | Hanya laporan terakhir yang sudah di-submit untuk form yang sama di channel yang sama yang memenuhi syarat |
| Beberapa submission sebelumnya | Sistem otomatis memilih yang terbaru; tidak ada pemilihan manual |
| Versi harus cocok | Jika version form telah berubah sejak submission sebelumnya, copy diblokir secara keras dengan pesan "form has been updated" |
| Tidak ada submission sebelumnya | Pesan "No previous data available"; karyawan lanjut mengisi manual |
| Data hasil copy dapat diedit | Semua field yang ter-prefill dapat dimodifikasi sebelum disimpan |
| Item yang dihapus dalam data hasil copy | Tetap terlihat di state form; gagal validasi saat Selanjutnya/Simpan |
| Perilaku validasi pada data copy yang invalid | Sistem otomatis scroll ke field invalid pertama, expand section-nya, dan highlight error-nya |
| Data tidak ter-prefill saat copy partial | Jika copy gagal secara teknis, tidak ada data yang ter-prefill; form tetap kosong untuk diisi manual |
Selanjutnya Baca Apa?
Jika Anda datang ke sini mencari sesuatu yang spesifik tetapi belum menemukannya, artikel pendamping terdekat adalah:
- Untuk workflow itu sendiri → mulai dengan Cara Membuat Form Template atau Cara Mengedit Form Template
- Untuk perilaku spesifik mobile → Cara Mengakses dan Mengisi Form di Mobile serta artikel mobile terkait
- Untuk detail ekspor → Memahami File Task Report Export
- Untuk penyegaran konsep → Panduan Lengkap Form di Task Management