Forms Reference: Validation, Errors, Limits & System Behavior
A Lookup Reference for Validation Rules, Error Messages, System Limits, and Data Lifecycle Behavior
This article is a quick-lookup reference for the rules, limits, and behaviors that govern Forms. It’s organized for scanning rather than reading end-to-end — use the section headings to jump to what you need. For conceptual orientation, read The Complete Guide to Task Management Forms first.
1. Validation Rules by Input Type
Common Rules (apply across input types where supported)
- Mandatory fields must be filled before the employee can navigate to the next page or submit the form. Field-level error messages appear when the field loses focus while empty.
- Character limits apply to text-based fields (see Section 3 for specific maximums). Input is blocked once the limit is reached.
- Value limits apply to numeric fields configured with min/max value rules. Inputs outside the range trigger inline validation.
- Format validation applies to specialized inputs (email format, phone number with country prefix, date format).
- Unique answer validation is configurable in the Client Portal but is currently deferred / not enforced — the toggle may be hidden or disabled depending on release state.
Input-Type-Specific Rules
| Input Type | Validation |
|---|---|
| Text | Min char, max char (when configured) |
| Number / Number Stepper | Min value, max value (when configured); numeric only |
| Must be a valid email format | |
| Phone Number (Prefix) | Numeric value with country prefix (default +62) |
| Date | Valid date in YYYY-MM-DD |
| Dropdown Single / Radio | Exactly one selection required if mandatory |
| Dropdown Multiple / Checkbox | At least one selection required if mandatory; max 10 options for Checkbox/Radio (excluding “Lainnya”) |
| Currency / Length / Stock / Shelf Length | Numeric value with prefix or suffix; non-negative |
| Photo / Open Camera / File | At least one file required if mandatory |
| Photo Before-After | Both Before and After image sets required if the question is mandatory |
| Stock OPEN-ENDING | Both OPEN and ENDING values required (sub-fields are non-breakable) |
| Shelf Share | Numeric, supports up to 2 decimal places, no negatives, suffix in cm or m; mandatory is locked to Yes |
2. Common Error Messages
Client Portal (Admin)
| Trigger | Message |
|---|---|
| Non-whitelisted user accesses Form module | No Access — redirected to the first allowed module |
| Logic jump target page deleted | “target page is no longer exists” — appears under the affected Jump To field; blocks step progression |
| Adding a second logic jump question to the same page | “Multiple questions with logic jumps are not allowed” |
| Reordering causes two logic-jump questions on the same page | “Failed to reorder data. Only one question with a logic jump is allowed per page” |
| Adding a second compound to a compound | “Failed to add Question: there can only be 1 Compound Input Type here.” |
| Saving a form when a selected channel is no longer in the system | “The selected channel(s) no longer exist in the system. The configuration has been refreshed, and invalid selections were removed.” |
| Saving a form when a selected working group / level / node is deleted | “Working Group(s) no longer exist and automatically removed from the list. It is safe to proceed.” |
| Compound system data missing during validation | “Some selected filter items no longer exist in the system. The configuration has been refreshed and invalid selections were removed.” |
| Bulk CSV upload exceeds row limit | “The uploaded data exceeds the maximum of 1000 rows.” |
| Bulk upload exceeds option max per question | “Maximum number of options per question exceeded” |
| Export rate limit exceeded | “Failed to begin export: Maximum attempts exceeded. Please try again in N minutes.” |
Mobile (Field Employee)
| Trigger | Message |
|---|---|
| Mandatory or invalid field on Selanjutnya/Simpan | A drawer summarizes the errors; field-level messages stay visible until corrected |
| Visit checked out from another device | “Kunjungan ini telah diselesaikan melalui perangkat lain. Silakan kembali ke daftar kunjungan untuk melanjutkan.” (CTA: back to channel list) |
| Per Visit target not yet met when tapping Kirim | Drawer lists incomplete forms with current X/Q and remaining Q-X |
| Daily target reached | “Target harian sudah tercapai” |
| Form target reached | “Target sudah tercapai” |
| Copy from Previous when no submission exists | “No previous data available” — proceed to fill manually |
| Copy from Previous when version mismatch | “Form has been updated” — copy is hard-blocked |
3. Configuration Limits
Form Template
| Limit | Value |
|---|---|
| Form Template Name (max characters) | 250 |
| Form Template Description (max characters) | 250 |
| Training Title (max characters) | 140 |
| Training Material — number of files | Up to 5 |
| Training Material — file types | JPEG, PNG, HEIC, PDF |
| Training Material — file size each | 5 MB |
| Active Period (Temporary Form) — max range | Start = today minimum; end = up to 360 days after start |
Pages and Questions
| Limit | Value |
|---|---|
| Page format options | List only (single-format limitation in current release) |
| Logic jump questions per page | Maximum 1 |
| Question Title (max characters) | 48 (in Compound) |
Option-Based Inputs
| Input Type | Max Options | Notes |
|---|---|---|
| Checkbox | 10 (excluding Lainnya) | Add Option button disables at limit |
| Radio | 10 (excluding Lainnya) | Add Option button disables at limit |
| Dropdown Single | No max | Mobile shows first 100 alphabetically + search |
| Dropdown Multiple | No max | Mobile shows first 100 alphabetically + search |
Bulk CSV Upload
| Limit | Value |
|---|---|
| Max rows per upload | 1,000 |
| Behavior on exceeding | All rows fail with toast The uploaded data exceeds the maximum of xxx rows. |
| Validation layers | Layer 1 (file format/structure), Layer 2 (row data) |
| Partial success behavior | Valid rows imported; invalid rows surfaced in the result file |
Compound Input Type
| Limit | Value |
|---|---|
| Compound Input Type Name (max characters) | 25 |
| Button Label (max characters) | 25 |
| Description (max characters) | 250 |
| Question Title (max characters) | 48 |
| Questions per Compound | Maximum 10 |
| Nested Compounds per parent | Maximum 1 |
| Nesting depth | 1 level only (no nested-inside-nested) |
| Self-reference | Not allowed |
| Circular nesting | Not allowed |
4. Export Limits and Retention
| Limit | Value |
|---|---|
| Export attempts per 15-minute window | 50 |
| Rows per file | 50,000 (split into multiple files when exceeded, named 1 of N, 2 of N, etc.) |
| File retention | 90 days from generation date |
| Status after retention | “Expired” — Download button disabled |
| File format | Password-protected .zip |
| Password format | [Client ID][Client Name] (concatenated, no spaces) |
| Files included per zip | Export Log + Task Report Raw Data + (per Compound) Compound Sheet + (per Nested Compound) Nested Compound Sheet |
| Date range filter | 1–31 days; start date max 365 days back; no future dates |
Export Job Audit
Each export job is automatically logged with:
- User ID who initiated
- Timestamp
- All applied filter parameters
These logs are accessible via the Export Result page → View Detail.
5. Visit and Draft Lifecycle Rules
| Rule | Behavior |
|---|---|
| Form visibility gating | Forms only appear in Daftar Tugas after a successful check-in |
| Snapshot at check-in | Form structure, target, availability, assignment, and compound configuration are all locked to the visit |
| 24:00 visitation cutoff | If a visit is not completed by midnight, the visit and any unsaved drafts are removed; not recorded in any report |
| Draft persistence | Drafts persist across navigation, app minimization, and temporary network interruption while the visit is “Dalam Proses” |
| Multiple drafts per form | Allowed (up to the target limit); each has a unique Submission ID |
| Draft data when leaving without saving | Discarded; confirmation dialog warns the employee |
| Final submission | Atomic — either all drafts in the visit submit successfully, or none change state (no partial submission) |
| Check-out failure after successful submission | Drafts remain Submitted; visit stays “Dalam Proses”; employee can retry check-out without resubmitting |
6. Snapshot Binding (What’s Locked vs What Updates)
Locked to the visit’s snapshot (CP-side changes do NOT affect the current visit)
- Form structure (pages, questions, input types, options)
- Logic jump configuration
- Target value and mode
- Availability period (Temporary date window)
- Training material
- Assignment scope
- Compound input type configuration (including nested compounds)
Updates apply only to NEW visits
- Any modification made in the Client Portal during an ongoing visit will only take effect the next time an employee checks in.
Always reflects the latest system state (dynamic)
- Employee Name in exports — follows the current employee record (Employee ID stays the same).
- Form Template Name in lists and history — updates if renamed.
- Channel Name display — updates if renamed.
Always reflects the snapshot at submission time (historical)
- Form structure and version when viewing or exporting a submitted report.
- Selected option values in answers (even if the original option was renamed or deleted in the source database).
- Selected compound items in answers (even if the items were later removed).
7. Historical Integrity Rules
Submitted reports remain accessible and exportable in all of these scenarios:
| Scenario | Effect on submitted report |
|---|---|
| Form template renamed | Report still visible; latest name shown in lists; original structure preserved |
| Form template unassigned from channel | Report remains in Riwayat and exports |
| Form template deleted | Report still visible and exportable; structure preserved via snapshot |
| Channel becomes inactive or deleted | Report remains; exports include data from inactive/deleted channels |
| Employee becomes inactive or removed | Report remains; exports include data from inactive/removed employees |
| Working Group / Level / Node deleted | Report remains; assignment hierarchy in the snapshot is preserved |
| Form template upgraded to a new version | Original submission still rendered using its original snapshot version |
When opening a historical submission, the system always loads the structure based on the version used at submission time, never the current version.
8. Form Versioning Rules
| Rule | Detail |
|---|---|
| Form ID | Generated once at creation, format ClientID-MMYYYY-10character, never changes |
| Version increment trigger | Save action that commits Step 2 (Form Builder) or Step 3 (Logic Jump) changes |
| No version increment for | Step 1, Step 4, or Step 5 changes (basic info, preview interactions, assignment) |
| Reverting before save | If a structural change is reverted to its original value before saving, no new version is created |
| One save = one version | Multiple structural changes committed in a single save count as one version increment |
| Question ID — preserved | When modifying an existing question’s title, options, mandatory flag, or input type |
| Question ID — newly generated | When adding a question manually, via duplicate question, or via duplicate page |
| Compound version | Compounds version independently; editing a compound automatically propagates a new form version to all forms that use it |
9. Save Scope Rules When Editing
| Save location | What gets committed | What gets discarded |
|---|---|---|
| Step 1 | Step 1 changes only | Steps 2, 3, 4, 5 changes |
| Step 4 (Preview) | Steps 1, 2, 3 changes | Step 5 changes |
| Step 5 | All Steps 1–5 changes | None |
| Leave page without saving | Nothing committed | Everything across all steps |
Notes:
- Steps 2 and 3 do not have a Save button. Always advance via Next; commit happens in Step 4 or Step 5.
- Confirmation modal appears when leaving the edit page with unsaved changes (in-app prompt for breadcrumb navigation; native browser dialog for refresh/close tab).
10. Compound Input Type Special Rules
| Rule | Detail |
|---|---|
| Page format on form | Always List (single format in current release) |
| Mandatory and unique on form questions | Inherited from compound; locked at form level |
| Logic jump | Only page-level allowed on a Compound Page; question-level disabled |
| Reordering questions inside a compound | Not supported in current release; questions display in insertion order |
| Item source change | Triggers warning; clears existing filter and Info Detail config |
| Question Input Type change | Triggers warning; affects all forms using the compound |
| Nested compound | Maximum 1 per parent, no self-reference, no multi-level, no circular |
| Shelf Share exclusivity | A Shelf Share compound cannot contain any other input type |
| Shelf Share mandatory | Locked to Yes; cannot be changed |
| Shelf Share decimal precision | 2 decimal places maximum on shelf length input |
| Item identity in mobile | Tap the item name to view read-only Info Detail (configured asset/channel attributes) |
11. Working Group Dependency Cascade
When working group hierarchy data is modified or deleted, dependencies cascade automatically:
| Action on hierarchy | Effect on assignment configuration |
|---|---|
| Working Group deleted | The WG is removed; all Levels and Nodes under it are also cleared |
| Level deleted | The Level is removed; all Nodes under it are cleared; the parent WG remains |
| Node deleted | Only that specific Node is removed; the WG and Level remain |
| All deleted entries on save | Auto-removed with confirmation message: “Working Group(s) no longer exist and automatically removed from the list. It is safe to proceed.” |
| Required fields become empty after reset | Save is blocked until valid selections are made |
This cascade applies during edit save and during step navigation revalidation. On the read-only edit page (without modification trigger), deleted hierarchy items remain visible until the user explicitly modifies the assignment.
12. Copy from Previous Submission Rules (Mobile)
The Salin Jawaban Sebelumnya feature on mobile lets employees prefill a form using their previous submission. It follows strict rules to prevent incorrect data:
| Rule | Detail |
|---|---|
| Eligibility | Only the latest submitted report for the same form in the same channel is eligible |
| Multiple previous submissions | The system automatically picks the latest; no manual selection |
| Version match required | If the form version has changed since the previous submission, the copy is hard-blocked with “form has been updated” |
| No previous submission | “No previous data available” message; employee proceeds manually |
| Copied data is editable | All prefilled fields can be modified before saving |
| Deleted items in copied data | Remain visible in the form state; fail validation on Selanjutnya/Simpan |
| Validation behavior on invalid copied data | System scrolls to the first invalid field, expands the section, and highlights the error |
| Data not pre-filled on partial copy | If the copy fails technically, no data is prefilled; form remains empty for manual fill |
Where to Next?
If you came here looking for something specific and didn’t find it, the closest companion articles are:
- For the workflow itself → start with How to Create a Form Template or How to Edit a Form Template
- For mobile-specific behavior → How to Access and Fill Out a Form on Mobile and the related mobile articles
- For export details → Understanding the Task Report Export File
- For a refresher on concepts → The Complete Guide to Task Management Forms