Zane-SF Corp. The reference build is in ai-sf-corp (dev environment) — open both side-by-side. You can copy ideas, layouts, and field configurations from the reference, but every form/field must be created fresh in Zane-SF Corp.
- Don't touch the live (production) URL — work only in App Builder (dev):
creator.zoho.com/appbuilder/<owner>/zane-sf-corp/edit. - Don't use the form-builder's "reorder" feature on existing forms with data. It can permanently corrupt sections (we lost
Add_Assetin March doing this). - Don't rename a field after creating it once data has been entered against it — the link name is what every workflow refers to. If you must, delete + recreate.
- Don't reuse the same display name across two fields on the same form. Zoho will silently append
1to the link name and break later workflow references.
1. Functional spec — what the module does
One-paragraph summary
A driver opens a checklist → the form looks at the asset's vehicle type and today's date → it pulls the matching active configuration → it shows only the items that config wants → the driver answers them → mandatory items are validated → submit triggers safety alerts and report digests per the config's settings.
The cast of forms
| Form | Used by | When |
|---|---|---|
Checklist_Item_Master | Admin (one-time setup) | Defining/editing inspection items in the catalogue |
Checklist_Configuration | Admin (per-fleet setup) | Deciding which items go into which checklist |
Checklist_Config_Items | Admin (auto, behind the scenes) | Links items → configs (child join form) |
Add_Checklist_2 | Drivers / yard inspectors | Every shift — daily / weekly / monthly |
Add_Asset (existing) | Admin | Provides Vehicle Type — MC / LP / MCV / HCV |
MC = Motorcycle · LP = Light Passenger/Commercial · MCV = Medium Commercial · HCV = Heavy Commercial.
Phase 1 — Admin sets up the catalogue (one-time)
a. Item Master. Each inspection check (e.g. "Helmet Status", "Engine Oil Level") is one record. For each, admin sets the Section it belongs to (Operational / PPE / Interior / Exterior / Electrical / Drivetrain / Fluids), the compatible Vehicle Types, the compatible Frequencies, default-include flags per frequency, default-mandatory flag, and the optional Negative Value answer that triggers a safety alert.
b. Configurations. A configuration is a recipe like "Default — MC Daily" or "Saturday Spot Check". Two modes: Frequency + Vehicle Type (the common case — 12 of these covering 4 vehicle types × 3 frequencies) and Frequency Only (Ad Hoc and cross-vehicle setups). Per config: Is Active, Is Default, who receives reports, when (on submit / daily / weekly / monthly / on unsafe), SMS settings.
c. Config items. Per config, admin toggles which Item Master items are Included and which are Mandatory. Defaults from the Item Master pre-seed it; admin overrides as needed.
Phase 2 — Driver fills in a checklist
- Driver opens
Add_Checklist_2, scans the vehicle's QR code (or types the registration). Asset Type, the four Associations, Previous Odo, and the linked Driver auto-populate and lock. - Started Date-Time auto-fills.
- Checklist Type auto-selects: 1st of month → Monthly · Mondays → Weekly · otherwise → Daily. Ad Hoc is never auto-selected, but is directly selectable from the dropdown once Override is ticked, same as the other types.
- Override Checklist Reason — when ticked, unlocks the Checklist Type dropdown so the driver can pick any of Daily / Weekly / Monthly / Ad Hoc (e.g. missed yesterday's Daily, or running an unscheduled spot check).
- Sections 4–10 (Operational, PPE, Interior, Exterior, Electrical, Drivetrain, Fluids) are dynamic: the form looks up the active config for this Vehicle Type + Checklist Type, shows only those items, hides the rest, and hides whole sections that have no included items. Vehicle-specific config wins over Frequency-Only fallback. If no active config matches, the form raises a loud error ("No active checklist configuration for <Vehicle Type> <Checklist Type> — contact admin") and prevents the driver from continuing past Section 3.
- Declaration section — Safe to Operate (Y/N), auto Sign Datetime, Driver Signature.
- On submit, validate every Mandatory item is answered. Block submit if missing — show which items are missing. On success, stamp the Asset with "Checklist Type Completed Last".
- Notifications fire per the active config's
Send Failed Checks Reportsetting — see the table below.
Phase 3 — Reporting & alerting
The active config's Send Failed Checks Report field is multi-select. Each selected option behaves as follows:
| Option | What it triggers | Scope of negatives included |
|---|---|---|
| When Vehicle Is Not Safe To Operate | Immediate email at submit time, but only when at least one mandatory item is answered with its Negative Value, OR Safe to Operate = No. | Mandatory negatives + Safe-to-Operate=No only. |
| On Submit | Email at every submit that contains any failed answer. | Both mandatory and non-mandatory negatives. |
| Daily / Weekly / Monthly | Scheduled digest covering submissions in that window. | Both mandatory and non-mandatory negatives. |
Other config fields: Who Should Receive The Reports (recipient list, applies to all triggers above), Report Negative Answers (Y/N — toggles whether the digests include negative answers at all), Report Checklist Not Completed (Y/N — toggles whether digests include "checklist missed" entries), Send SMS + Frequency Of SMS (separate SMS channel).
2. Data model — forms & fields
creator.zoho.com/appbuilder/simplyfleet/ai-sf-corp/edit alongside Zane-SF Corp's builder and copy field-by-field. The lists below are the source of truth — if anything in the reference disagrees with this doc, ask before building.Form A — Checklist_Item_Master (1 section, 11 fields)
| Field | Type | Notes |
|---|---|---|
| Item Display Name | Single Line | Mandatory. The label drivers see. |
| Field ID | Single Line | Unique key — matches the field's link name on Add_Checklist_2 (e.g. Helmet_Status). |
| Section | Drop-down | Operational / PPE / Interior / Exterior / Electrical / Drivetrain / Fluids |
| Compatible Vehicle Types | Multi-select | MC, LP, MCV, HCV |
| Compatible Frequencies | Multi-select | Daily, Weekly, Monthly, Ad Hoc |
| Is Standard | Decision Box | True for items shipped in seed data. |
| Negative Value | Single Line | The exact answer that flags this item as failed (e.g. "Not Working / Failed"). |
| Default Mandatory | Decision Box | Whether this item is mandatory by default. |
| Default Include Daily | Decision Box | Pre-tick for new Daily configs. |
| Default Include Weekly | Decision Box | Pre-tick for new Weekly configs. |
| Default Include Monthly | Decision Box | Pre-tick for new Monthly configs. |
Form B — Checklist_Configuration (2 sections)
Note: Zane-SF Corp already has a stub Checklist_Configuration form (Frequency to Complete, Send SMS, Frequency of SMS, Who Should Receive Reports, Send Failed Checks Report, Report Negative Answers, Report Checklist Not Completed, Include Checklist, plus a Subform section). Don't delete it. You'll extend it with the missing fields below.
Section 1 — Configuration Setup
| Field | Type | Notes |
|---|---|---|
| Config Name | Single Line | Mandatory, unique. e.g. "Default — MC Daily". |
| Config Mode | Drop-down | "FREQUENCY + VEHICLE TYPE" / "FREQUENCY ONLY" |
| Frequency | Drop-down | Daily / Weekly / Monthly / Ad Hoc (reuse the existing Frequency_to_Complete field if it has the right values; otherwise add a new one called Frequency) |
| Vehicle Type | Drop-down | MC / LP / MCV / HCV / N/A. Required only when Config Mode = Frequency + Vehicle Type. |
| Is Active | Decision Box | Only active configs are matched at runtime. |
| Is Default | Decision Box | Tiebreaker if multiple configs match. |
Section 2 — Reporting & Notifications
| Field | Type | Notes |
|---|---|---|
| Who Should Receive The Reports | Lookup → Add_User (multi) | Already exists. |
| Send Failed Checks Report | Multi-select | On Submit / Daily / Weekly / Monthly / When Vehicle Is Not Safe To Operate. Already exists. |
| Report Negative Answers | Yes/No picklist | Already exists. |
| Report Checklist Not Completed | Yes/No picklist | Already exists. |
| Send SMS | Yes/No picklist | Already exists. |
| Frequency Of SMS | Drop-down | Daily / Weekly / Monthly. Already exists. |
Form C — Checklist_Config_Items (1 section, 4 fields)
| Field | Type | Notes |
|---|---|---|
| Config ID | Lookup → Checklist_Configuration | Mandatory. |
| Item ID | Lookup → Checklist_Item_Master | Mandatory. |
| Is Included | Decision Box | Whether this item appears for this config. |
| Is Mandatory | Decision Box | Whether this item is required for submission. |
Form D — Add_Checklist_2 (11 sections, 92 fields)
This is the driver-facing form. The reference in ai-sf-corp has the full schema — open it in App Builder and replicate field-by-field. Section order top-to-bottom must be:
- Checklist Details
- Asset Association
- Notification & Admin
- Operational (configurable, 12 fields)
- PPE (configurable, 5 fields)
- Interior (configurable, 7 fields)
- Exterior (configurable, 28 fields incl. images)
- Electrical (configurable, 6 fields)
- Drivetrain (configurable, 11 fields)
- Fluids (configurable, 3 fields)
- Declaration
Section 1 — Checklist Details (8 fields)
| Field | Type |
|---|---|
| Asset (Scan QR Code) | Single Line (treated as scan input) |
| Asset Type | Single Line — auto-populated, locked |
| Asset Associated Checklist Type | Lookup → Checklist_Configuration |
| Started Date-Time | Date-Time — default = current |
| Checklist Type | Drop-down: Daily / Weekly / Monthly / Ad Hoc |
| Override Checklist Reason | Decision Box |
| Request QR Code | Decision Box |
| Active Config ID | Single Line — hidden bookkeeping |
Section 2 — Asset Association (7 fields)
| Association 1 | Lookup → Add_Association_1 |
| Association 2 | Lookup → Add_Association_2 (a.k.a. Add_Association_11) |
| Association 3 | Lookup → Add_Association_3 |
| Association 4 | Lookup → Add_Association_4 (a.k.a. Add_Association_12) |
| Add Driver | Lookup → Add_Driver |
| Previous Odo | Number — auto-populated, locked |
| Current Odo | Number — driver enters |
Section 3 — Notification & Admin (1 field)
Request Change to be Made to Association — Decision Box.
Sections 4–10 — the configurable sections (open for full field list)
Operational (12): License Valid · Insurance Valid (MC) · Any Leaks Observed? · Reg Plate Status · Veh License Valid · Trl License Valid · Insurance Valid (LP) · No Visible Leaks · Odometer Reading · Service Book Updated · Service Interval Due · License Expiry Date
PPE (5): Helmet Status · Reflective Vest · Gloves Status · Safety Shoes · Reflector Jacket
Interior (7): Ignition Operation · Speedo Working · Warning Lights · Horn Status · Dash Warning Lights · Seatbelts Status · Fuel Level
Exterior MC (10): Front Tyre Status · Rear Tyre Status · Mirrors Status · Chain Condition · Body Damage · Spoke Condition · Frame Cracks · Side Stand Condition · Image Rear (MC) · Image Front (MC)
Exterior LP/MCV/HCV (8): Front Tyres Status · Rear Tyres Status · Trailer Tyres Status · Coupling Status · Lights Operation · Windscreen Status · Spare Tyre Status · Wheel Nut Status
Exterior LP/HCV images (3): Image Front · Image Rear · Image Damage (if any)
Monthly full-body images (7): Full Body Image — Left/Right/Front/Rear (MC variants) and Full Body Image — Left/Right/Front (LP/HCV variants)
Electrical (6): Headlight Status · Brake Light Status · Indicators Status · Battery Status · Wiring Damage · Full Light Test
Drivetrain (11): Front Brake Status · Rear Brake Status · Steering Status · Clutch Response · Gear Shift Smooth · Engine Noise · Chain Alignment · Sprocket Wear · Brakes Status · Suspension Status · Handbrake Status
Fluids (3): Engine Oil Level · Brake Fluid Level · Coolant Level
Most condition fields are radio buttons with options like "Good / Requires Attention / Failed" or "Working / Not Working / Failed". Image fields are Image Upload type. Date fields use Date type. The reference form has the exact options — copy them.
Section 11 — Declaration (3 fields)
| Safe To Operate | Radio (Yes / No) |
| Sign Datetime | Date-Time — auto-filled at submit |
| Driver Signature | Signature |
3. Workflow logic
Seven Deluge workflows drive the dynamic behaviour. Build them as form workflows on Add_Checklist_2 unless noted.
| # | Trigger | What it does |
|---|---|---|
| WF1 | On Load — Add_Checklist_2 | Sets Started Date-Time = now. Auto-selects Checklist Type by date (1st of month → Monthly · Monday → Weekly · else → Daily). Locks Checklist Type unless Override is ticked. |
| WF2 | On User Input — Asset (Scan QR Code) | Parses the scanned value (either %-delimited string with registration as 7th part, or numeric Asset ID). Looks up the Asset and populates Asset Type, Association 1–4, Previous Odo (= Asset's last odometer), Add Driver (first linked driver). Then locks those fields. |
| WF3 | On User Input — Checklist Type, or after WF2 | Find the active Checklist_Configuration matching this Vehicle Type + Checklist Type. Fall back to Frequency-Only config if no vehicle-specific match. If multiple match, Is Default wins. Write the matched config's ID to Active_Config_ID. Then read its Checklist_Config_Items and show/hide each item field accordingly. Hide whole sections whose items are all hidden. If no active config matches, raise a blocking alert ("No active checklist configuration for <Vehicle Type> <Checklist Type> — contact admin") and clear/disable Sections 4–11 so the driver can't proceed. |
| WF4 | On User Input — Override Checklist Reason | If ticked → unlock Checklist Type dropdown. If unticked → re-lock and re-run the auto-select logic from WF1. |
| WF5 | On Validate — submit | For each item in the Active Config's items where Is Mandatory = true: read the corresponding form field. If empty, add to a missing-items alert. If any missing → block submit with an alert listing them. |
| WF6 | On Successful Submit | Update the linked Asset's Checklist_Type_Completed_Last = this Checklist Type, and Checklist_Last_Completed = today. Stamp Sign_Datetime = now. |
| WF7 | On Successful Submit | Driven by the Active Config's Send_Failed_Checks_Report selections.If "When Vehicle Is Not Safe To Operate" is selected: send immediate safety-alert email when any mandatory item answered with its Negative Value, OR Safe to Operate = No. If "On Submit" is selected: send an email listing every negative answer on this submission — including non-mandatory ones. Recipients = Active Config's Who_Should_Receive_The_Reports. (The Daily / Weekly / Monthly digest options are handled by separate scheduled workflows — out of scope for this sprint unless explicitly requested.) |
- Lookup field values are numbers (record IDs). Compare with
!= 0or!isNull(field), never!= "". input.FieldNameonly works in inline form workflows. If you extract into a named function, pass fields explicitly as parameters.- For "show/hide" behaviour use
show/hideon the field (or section). For "lock/unlock" use the field's disable / enable Deluge action.
4. Step-by-step build sprint
creator.zoho.com/appbuilder/<owner>/zane-sf-corp/edit. Never on the live creatorapp.zoho.com URL — changes there don't work. Open ai-sf-corp App Builder in a second browser tab as your reference.
Step 0 — Setup (15 min)
creator.zoho.com/appbuilder/<owner>/zane-sf-corp/edit and confirm you can see the existing forms (Add_Asset, Add_Driver, Add_Checklist, Checklist_Configuration, etc.).creator.zoho.com/appbuilder/simplyfleet/ai-sf-corp/edit — your source of truth for field options and workflow code.Checklist_Item_Master, Checklist_Configuration, Checklist_Config_Items, Add_Checklist_2.Checklist_Configuration form contents UIStep 1 — Build Checklist_Item_Master (45 min)
Checklist_Item_Master UIChecklist_Item_Master.Helmet_Status, Section = PPE, Vehicle Types = MC, Frequencies = Daily/Weekly/Monthly). Confirm it saves cleanly.Step 2 — Extend Checklist_Configuration (30 min)
Checklist_Configuration UIFrequency_to_Complete field can serve as Frequency — confirm its values include "AD HOC" (currently only DAILY/WEEKLY/MONTHLY); if not, add AD HOC.Step 3 — Build Checklist_Config_Items (15 min)
Checklist_Config_Items UIStep 4 — Build Add_Checklist_2 (3–4 hrs, longest task)
Add_Checklist_2 UIAdd_Checklist_2. Confirm spelling — a wrong link name will silently break workflows.Add_Checklist_2 Section 1.Image_Front and Image_Front_MC respectively, but if you reuse "Image Front" twice Zoho will silently make the second one Image_Front1.1 is a duplicate-display-name footgun — fix the display name and recreate.Step 5 — Build the 7 workflows (3–4 hrs)
Add_Checklist_2 → Workflow → Add new → pick the trigger → write the Deluge. Copy the Deluge code from the ai-sf-corp equivalent — same logic, same field names (you used the same display names so link names match). Don't write from scratch unless you need to.Started_Date_Time = zoho.currenttime; · day-of-month=1 → "MONTHLY" · day-of-week=2 (Mon) → "WEEKLY" · else → "DAILY". Then disable the Checklist_Type field.alert "No active checklist configuration for " + Asset_Type + " " + Checklist_Type + " — contact admin"; hide Sections 4–11 entirely; clear Active_Config_ID. The driver cannot continue.alert "Please complete: " + missingList; cancel submit;.Active_Config.Send_Failed_Checks_Report (multi-select).(a) Immediate safety alert — if "When Vehicle Is Not Safe To Operate" is selected: build a fail-list of every mandatory item where its answer == its Negative Value (from Item Master), plus an entry for Safe_To_Operate = "No". If non-empty →
sendmail to recipients now.(b) On-Submit digest — if "On Submit" is selected: build a fail-list of every negative answer (mandatory and non-mandatory) on this submission. If non-empty →
sendmail to recipients now.Recipients = the User records listed in the active config's Who_Should_Receive_The_Reports.
The Daily / Weekly / Monthly options are scheduled-workflow concerns and are out of scope for this sprint — leave them for a follow-up unless told otherwise.
Step 6 — Seed data (1 hr)
5. Acceptance test
Done means: a fresh test asset can complete a checklist end-to-end with no errors. Run this top-to-bottom — if anything misbehaves, screenshot and ask before "fixing" it (some "bugs" turn out to be intentional behaviour from the spec).
6. Open questions to flag
Don't try to "fix" these — they're known design questions Zane is still resolving. If your build hits any, ask before deciding:
- Tiebreaker order: vehicle-specific config wins, Frequency-Only is fallback. Confirm.
- Submitted checklist = read-only. No edit/reopen flow yet.
- Override-untick re-snaps to today's auto-select rather than re-locking what was selected. Confirm.
- QR code parsing: real-world stickers —
%-delimited or numeric Asset ID? - Driver lookup picks "first linked driver" — fine for single-driver vehicles, ambiguous for rotation. Should the driver self-select?
- Photos and config gating: are images always required, or should monthly full-body shots only show on Monthly checks?
Resolved decisions (do not re-ask)
- Ad Hoc — directly selectable from the Checklist Type dropdown (once Override is ticked, alongside Daily/Weekly/Monthly). Resolved 2026-04-29.
- No active config — form raises a loud blocking error and prevents the driver from continuing. Resolved 2026-04-29.
- Negative-answer alert thresholds — "When Vehicle Is Not Safe To Operate" = immediate, mandatory negatives + Safe-to-Operate=No only. "On Submit / Daily / Weekly / Monthly" = include both mandatory and non-mandatory negatives. Resolved 2026-04-29.