Checklist Module — Build Brief for Zane-SF Corp

Replicate the working Checklist module from ai-sf-corp (dev) into Zane-SF Corp. Functional spec + step-by-step sprint. Tick each task as you complete it — your progress is saved in this browser.
Progress:
0 / 0
Who this is for: The junior developer building the Checklist module in 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.
NEVER do these:
Contents
  1. Functional spec — what the module does
  2. Data model — forms & fields
  3. Workflow logic
  4. Step-by-step build sprint
  5. Acceptance test
  6. Open questions to flag

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

FormUsed byWhen
Checklist_Item_MasterAdmin (one-time setup)Defining/editing inspection items in the catalogue
Checklist_ConfigurationAdmin (per-fleet setup)Deciding which items go into which checklist
Checklist_Config_ItemsAdmin (auto, behind the scenes)Links items → configs (child join form)
Add_Checklist_2Drivers / yard inspectorsEvery shift — daily / weekly / monthly
Add_Asset (existing)AdminProvides 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

  1. 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.
  2. Started Date-Time auto-fills.
  3. 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.
  4. 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).
  5. 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.
  6. Declaration section — Safe to Operate (Y/N), auto Sign Datetime, Driver Signature.
  7. 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".
  8. Notifications fire per the active config's Send Failed Checks Report setting — 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:

OptionWhat it triggersScope of negatives included
When Vehicle Is Not Safe To OperateImmediate 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 SubmitEmail at every submit that contains any failed answer.Both mandatory and non-mandatory negatives.
Daily / Weekly / MonthlyScheduled 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

Reference build: in ai-sf-corp these forms are fully built. Open 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)

FieldTypeNotes
Item Display NameSingle LineMandatory. The label drivers see.
Field IDSingle LineUnique key — matches the field's link name on Add_Checklist_2 (e.g. Helmet_Status).
SectionDrop-downOperational / PPE / Interior / Exterior / Electrical / Drivetrain / Fluids
Compatible Vehicle TypesMulti-selectMC, LP, MCV, HCV
Compatible FrequenciesMulti-selectDaily, Weekly, Monthly, Ad Hoc
Is StandardDecision BoxTrue for items shipped in seed data.
Negative ValueSingle LineThe exact answer that flags this item as failed (e.g. "Not Working / Failed").
Default MandatoryDecision BoxWhether this item is mandatory by default.
Default Include DailyDecision BoxPre-tick for new Daily configs.
Default Include WeeklyDecision BoxPre-tick for new Weekly configs.
Default Include MonthlyDecision BoxPre-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

FieldTypeNotes
Config NameSingle LineMandatory, unique. e.g. "Default — MC Daily".
Config ModeDrop-down"FREQUENCY + VEHICLE TYPE" / "FREQUENCY ONLY"
FrequencyDrop-downDaily / 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 TypeDrop-downMC / LP / MCV / HCV / N/A. Required only when Config Mode = Frequency + Vehicle Type.
Is ActiveDecision BoxOnly active configs are matched at runtime.
Is DefaultDecision BoxTiebreaker if multiple configs match.

Section 2 — Reporting & Notifications

FieldTypeNotes
Who Should Receive The ReportsLookup → Add_User (multi)Already exists.
Send Failed Checks ReportMulti-selectOn Submit / Daily / Weekly / Monthly / When Vehicle Is Not Safe To Operate. Already exists.
Report Negative AnswersYes/No picklistAlready exists.
Report Checklist Not CompletedYes/No picklistAlready exists.
Send SMSYes/No picklistAlready exists.
Frequency Of SMSDrop-downDaily / Weekly / Monthly. Already exists.

Form C — Checklist_Config_Items (1 section, 4 fields)

FieldTypeNotes
Config IDLookup → Checklist_ConfigurationMandatory.
Item IDLookup → Checklist_Item_MasterMandatory.
Is IncludedDecision BoxWhether this item appears for this config.
Is MandatoryDecision BoxWhether 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:

  1. Checklist Details
  2. Asset Association
  3. Notification & Admin
  4. Operational (configurable, 12 fields)
  5. PPE (configurable, 5 fields)
  6. Interior (configurable, 7 fields)
  7. Exterior (configurable, 28 fields incl. images)
  8. Electrical (configurable, 6 fields)
  9. Drivetrain (configurable, 11 fields)
  10. Fluids (configurable, 3 fields)
  11. Declaration
Section 1 — Checklist Details (8 fields)
FieldType
Asset (Scan QR Code)Single Line (treated as scan input)
Asset TypeSingle Line — auto-populated, locked
Asset Associated Checklist TypeLookup → Checklist_Configuration
Started Date-TimeDate-Time — default = current
Checklist TypeDrop-down: Daily / Weekly / Monthly / Ad Hoc
Override Checklist ReasonDecision Box
Request QR CodeDecision Box
Active Config IDSingle Line — hidden bookkeeping
Section 2 — Asset Association (7 fields)
Association 1Lookup → Add_Association_1
Association 2Lookup → Add_Association_2 (a.k.a. Add_Association_11)
Association 3Lookup → Add_Association_3
Association 4Lookup → Add_Association_4 (a.k.a. Add_Association_12)
Add DriverLookup → Add_Driver
Previous OdoNumber — auto-populated, locked
Current OdoNumber — 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 OperateRadio (Yes / No)
Sign DatetimeDate-Time — auto-filled at submit
Driver SignatureSignature

3. Workflow logic

Seven Deluge workflows drive the dynamic behaviour. Build them as form workflows on Add_Checklist_2 unless noted.

#TriggerWhat it does
WF1On Load — Add_Checklist_2Sets 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.
WF2On 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.
WF3On User Input — Checklist Type, or after WF2Find 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.
WF4On User Input — Override Checklist ReasonIf ticked → unlock Checklist Type dropdown. If unticked → re-lock and re-run the auto-select logic from WF1.
WF5On Validate — submitFor 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.
WF6On Successful SubmitUpdate the linked Asset's Checklist_Type_Completed_Last = this Checklist Type, and Checklist_Last_Completed = today. Stamp Sign_Datetime = now.
WF7On Successful SubmitDriven 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.)
Deluge gotchas to avoid:

4. Step-by-step build sprint

Tick each task as you finish it. Browser remembers your progress — close the tab and come back later, the boxes stay ticked. Hit Reset (top right) only if you want to start over.

Working environment: always work in the App Builder URL: 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)

Confirm access to Zane-SF Corp App Builder UI
Open 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.).
Open the ai-sf-corp reference in a second tab UI
creator.zoho.com/appbuilder/simplyfleet/ai-sf-corp/edit — your source of truth for field options and workflow code.
Locate the four reference forms in ai-sf-corp UI
Checklist_Item_Master, Checklist_Configuration, Checklist_Config_Items, Add_Checklist_2.
Verify the existing Zane-SF Corp Checklist_Configuration form contents UI
Note which fields already exist (you'll extend, not replace). Existing fields per the IDE export: Frequency_to_Complete, Send_SMS, Frequency_Of_SMS, Who_Should_Receive_The_Reports, Send_Failed_Checks_Report, Report_Negative_Answers, Report_Checklist_Not_Completed, Include_Checklist, plus a Subform section.

Step 1 — Build Checklist_Item_Master (45 min)

Create new form Checklist_Item_Master UI
App Builder → New → Form → name = "Checklist Item Master". Confirm the auto-generated link name = Checklist_Item_Master.
Add the 11 fields per the spec table UI
Drag from the field palette. Use the exact display names listed under Form A above so link names line up with the reference build.
Set required flags & picklist values to match ai-sf-corp UI
For Section, Compatible Vehicle Types, Compatible Frequencies — copy the option list verbatim from the ai-sf-corp reference.
Arrange into a 2-column layout LAYOUT
Col 1: Item Display Name · Section · Compatible Frequencies · Negative Value · Default Include Daily · Default Include Monthly. Col 2: Field ID · Compatible Vehicle Types · Is Standard · Default Mandatory · Default Include Weekly.
Save & preview the form TEST
Add one test record by hand (e.g. "Helmet Status", Field ID Helmet_Status, Section = PPE, Vehicle Types = MC, Frequencies = Daily/Weekly/Monthly). Confirm it saves cleanly.

Step 2 — Extend Checklist_Configuration (30 min)

Open existing form Checklist_Configuration UI
Don't delete it — it has data structure already wired up.
Rename Section 1 to "Configuration Setup" UI
If the existing first section is called "Checklist Selection - Subfrom", rename its display to "Configuration Setup". Don't change link names.
Add 6 missing fields to Section 1 UI
Config Name (Single Line, mandatory, unique), Config Mode (Drop-down: "FREQUENCY + VEHICLE TYPE", "FREQUENCY ONLY"), Vehicle Type (Drop-down: MC/LP/MCV/HCV/N/A), Is Active (Decision Box), Is Default (Decision Box). The existing Frequency_to_Complete field can serve as Frequency — confirm its values include "AD HOC" (currently only DAILY/WEEKLY/MONTHLY); if not, add AD HOC.
Add a "Reporting & Notifications" section header above the report fields UI
If those fields already sit in their own section, just rename it. Otherwise add a new Section field, place it above them, and drag them under it.
Apply 2-column layout LAYOUT
Section 1 — Col1: Config Name · Frequency · Is Active. Col2: Config Mode · Vehicle Type · Is Default. Section 2 — Col1: Report Checklist Not Completed · Send Failed Checks Report · Send SMS. Col2: Who Should Receive The Reports · Report Negative Answers · Frequency Of SMS.
Save & sanity check TEST
Add one test record: "Default — MC Daily", Mode = FREQUENCY + VEHICLE TYPE, Frequency = DAILY, Vehicle Type = MC, Is Active = Yes, Is Default = Yes.

Step 3 — Build Checklist_Config_Items (15 min)

Create form Checklist_Config_Items UI
Add 4 fields UI
Config ID (Lookup → Checklist_Configuration, mandatory). Item ID (Lookup → Checklist_Item_Master, mandatory). Is Included (Decision Box). Is Mandatory (Decision Box).
Apply 2-column layout LAYOUT
Col1: Config ID · Is Included. Col2: Item ID · Is Mandatory.
Add one test child record TEST
Link the test config from Step 2 to the test item from Step 1, Is Included = true, Is Mandatory = true.

Step 4 — Build Add_Checklist_2 (3–4 hrs, longest task)

Build sections in order top-to-bottom. Zoho's "section" is just a header — fields below it are members of that section until the next section header. Adding a field always lands it at the bottom of the current/most-recent section. So: add Section 1 → add its 8 fields → add Section 2 → its 7 fields → … all the way to Section 11. Don't skip ahead.
Create new form Add_Checklist_2 UI
Display name "Add Checklist 2" → link name auto-derives to Add_Checklist_2. Confirm spelling — a wrong link name will silently break workflows.
Section 1 — Checklist Details + 8 fields UI
Match field types & options to ai-sf-corp's Add_Checklist_2 Section 1.
Section 2 — Asset Association + 7 fields UI
Lookups go to existing forms: Add_Association_1, Add_Association_11 (= Association 2), Add_Association_3, Add_Association_12 (= Association 4), Add_Driver.
Section 3 — Notification & Admin + 1 field UI
Section 4 — Operational + 12 fields UI
Section 5 — PPE + 5 fields UI
Section 6 — Interior + 7 fields UI
Section 7 — Exterior + 28 fields (10 MC + 8 LP/MCV/HCV + 3 LP images + 7 monthly full-body) UI
Take care with image-field display names — naming collisions like "Image Front" + "Image Front MC" will produce link names like Image_Front and Image_Front_MC respectively, but if you reuse "Image Front" twice Zoho will silently make the second one Image_Front1.
Section 8 — Electrical + 6 fields UI
Section 9 — Drivetrain + 11 fields UI
Section 10 — Fluids + 3 fields UI
Section 11 — Declaration + 3 fields UI
Apply 2-column layout per section LAYOUT
Use the layout patterns documented in the spec above. Notification & Admin and Declaration are full-width. Exterior groups into MC / LP-MCV-HCV / images sub-blocks.
Audit field link names TEST
Open the form in App Builder → click each field → confirm the link name reads as expected. Anything ending in 1 is a duplicate-display-name footgun — fix the display name and recreate.

Step 5 — Build the 7 workflows (3–4 hrs)

For each workflow: open 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.
WF1 — On Load: set Started Date-Time + auto-pick Checklist Type DELUGE
Trigger: On Load · On Add. Logic: Started_Date_Time = zoho.currenttime; · day-of-month=1 → "MONTHLY" · day-of-week=2 (Mon) → "WEEKLY" · else → "DAILY". Then disable the Checklist_Type field.
WF2 — On user input of Asset (Scan QR Code): populate Asset fields DELUGE
Parse: if input contains "%" → split, take part 7 = registration. Else if numeric → treat as Asset ID. Lookup Asset → write Asset_Type, Association_1–4, Previous_Odo, Add_Driver (= first linked driver). Then disable those fields.
WF3 — On user input of Checklist Type: resolve Active Config + show/hide items DELUGE
Find Checklist_Configuration where Is_Active=true AND ((Mode = "FREQUENCY + VEHICLE TYPE" AND Vehicle_Type = thisAsset.Vehicle_Type AND Frequency = input.Checklist_Type) OR (Mode = "FREQUENCY ONLY" AND Frequency = input.Checklist_Type)). Vehicle-specific wins; if multiple, Is_Default wins. Write its ID to Active_Config_ID. Then iterate Checklist_Config_Items where Config_ID = matched config: for each, look up the Item Master's Field_ID and either show or hide that field on the form. Hide whole sections if no items in them are shown. If zero matches: 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.
WF4 — On user input of Override Checklist Reason: lock/unlock Checklist Type DELUGE
Ticked → enable(Checklist_Type). Unticked → disable(Checklist_Type) AND re-run WF1's auto-select.
WF5 — On Validate (submit): mandatory-item validator DELUGE
Iterate Checklist_Config_Items where Config_ID = Active_Config_ID AND Is_Mandatory=true. For each, look up the Item Master's Field_ID; read that field's value off the form. If empty, add the Item Display Name to a missing-list. If list non-empty → alert "Please complete: " + missingList; cancel submit;.
WF6 — On Successful Submit: stamp asset + signature time DELUGE
Update the linked Asset record: Checklist_Type_Completed_Last = Checklist_Type, Checklist_Last_Completed = today. Set Sign_Datetime = zoho.currenttime.
WF7 — On Successful Submit: trigger emails per the active config's report selections DELUGE
Read 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)

Seed 58 Checklist_Item_Master records UI
Easiest path: in ai-sf-corp open the All Checklist Items report → export to CSV. Then in Zane-SF Corp open the All Checklist Items report → Import → upload the CSV. Map columns 1-to-1.
Seed 13 Checklist_Configuration records UI
Same export/import approach. The 13 are: 12 vehicle×frequency combos (4 vehicle types × 3 frequencies = MC Daily, MC Weekly, MC Monthly, LP Daily, LP Weekly, LP Monthly, MCV Daily, MCV Weekly, MCV Monthly, HCV Daily, HCV Weekly, HCV Monthly) + 1 Ad Hoc.
Seed Checklist_Config_Items UI
Export the child records from ai-sf-corp's report and import into Zane-SF Corp. Verify the Config ID + Item ID lookups resolve correctly after import (record IDs differ between apps so you may need to re-link by name).
Mark one config per vehicle type as Is Default UI

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).

Create a test Asset (Vehicle Type = MC) with a registration TEST
Open Add_Checklist_2 in preview mode TEST
Confirm Started Date-Time auto-fills, Checklist Type auto-selects (Daily on a normal day), and the Checklist Type dropdown is locked.
Type the test asset's registration into Asset (Scan QR Code) TEST
Confirm Asset Type, Associations, Previous Odo, Add Driver auto-populate and lock.
Confirm only MC-relevant inspection items show TEST
Sections 4–10 should hide LP/MCV/HCV-only fields. Whole sections with zero shown items should disappear.
Tick Override → confirm Checklist Type unlocks TEST
Try to submit with one Mandatory item blank TEST
Submit must be blocked with an alert listing the missing item.
Fill all Mandatory items, set Safe to Operate = No, submit TEST
Record saves, Sign Datetime stamps, asset's Checklist_Type_Completed_Last = "DAILY", asset's Checklist_Last_Completed = today, and (because the active config has "When Vehicle Is Not Safe To Operate" selected) the immediate safety-alert email arrives at the recipients.
Submit a clean Safe-to-Operate=Yes checklist TEST
No "Not Safe To Operate" email this time. Asset stamps update.
"On Submit" trigger — non-mandatory negative test TEST
On the active config, tick "On Submit" in Send Failed Checks Report. Submit a checklist where Safe to Operate = Yes and all Mandatory items pass, but at least one non-mandatory item is set to its Negative Value. An "On Submit" digest email must arrive listing that non-mandatory failure.
"No active config" loud-error test TEST
Untick Is Active on every config that would match this Vehicle Type + Checklist Type. Reload Add_Checklist_2, scan the asset, pick the same Checklist Type. The form must show the blocking alert "No active checklist configuration for <Vehicle Type> <Checklist Type> — contact admin" and Sections 4–11 must be hidden. Re-tick Is Active afterwards.
Ad Hoc directly selectable test TEST
Tick Override Checklist Reason → confirm the Checklist Type dropdown unlocks and lists "Ad Hoc" alongside Daily/Weekly/Monthly. Pick Ad Hoc → confirm the Frequency-Only Ad Hoc config is matched and its items render.

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:

  1. Tiebreaker order: vehicle-specific config wins, Frequency-Only is fallback. Confirm.
  2. Submitted checklist = read-only. No edit/reopen flow yet.
  3. Override-untick re-snaps to today's auto-select rather than re-locking what was selected. Confirm.
  4. QR code parsing: real-world stickers — %-delimited or numeric Asset ID?
  5. Driver lookup picks "first linked driver" — fine for single-driver vehicles, ambiguous for rotation. Should the driver self-select?
  6. 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)