> ## Documentation Index
> Fetch the complete documentation index at: https://docs.aquaops.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Form Templates

> Build custom form templates with fields, conditional logic, and formulas from Settings > Forms.

Form Templates is where administrators and managers design the custom forms your facility will use for inspections, incident reports, and other structured recordkeeping.

## Purpose

Use this module to author reusable form templates — the fields, order, and show/hide rules that make up a form. Templates are versioned: once published, further edits create a new version so existing references stay stable.

## Best for

* inspection and audit checklists
* incident and follow-up reports
* any repeatable data-collection workflow where the questions change based on earlier answers

<Note>
  Runtime submissions are still on the roadmap. Templates can be built, saved, and versioned today, but the completed-form submission renderer is not yet available. See [Roadmap](/user-guide/roadmap) for the current phase plan.
</Note>

## Getting there

Go to:

```text theme={null}
Settings > Forms
```

The list page shows every template with its title, jurisdiction, field count, status (`draft`, `published`, or `archived`), and last-updated time.

From the list you can:

* start a **New template** from scratch
* **Create from checklist** to seed a template from an existing checklist template

Open any template to launch the builder.

## Field types

Each field has a type that controls its input and the conditional operators available to fields that depend on it.

| Type           | Label in UI     |
| -------------- | --------------- |
| `short_text`   | Short text      |
| `long_text`    | Long text       |
| `number`       | Number          |
| `select`       | Dropdown        |
| `multi_select` | Multi-select    |
| `checkbox`     | Checkbox        |
| `radio`        | Multiple choice |
| `date`         | Date            |
| `signature`    | Signature       |

`select`, `multi_select`, and `radio` fields carry an `options` list. The conditional builder auto-populates value pickers from those options so you never have to retype them.

## Conditional logic

Every field can be shown or hidden based on the answers to earlier fields. Two modes are supported: **rule** (a single comparison against one source field) and **formula** (a custom expression across many fields).

### Rule mode

Rule mode is the default. You pick a source field, an operator, and — depending on the operator — zero, one, or two comparison values.

The operator picker only offers operators that make sense for the source field's type:

* **All fields:** `is exactly`, `is not`, `is empty`, `is not empty`
* **Text fields** (short text, long text, signature): also `contains`, `does not contain`, `starts with`, `ends with`
* **Number fields:** also `is greater than`, `is greater than or equal to`, `is less than`, `is less than or equal to`, `is between`, `is not between`
* **Date fields:** also `is before`, `is after`, `is between`, `is not between`
* **Option fields** (dropdown, multi-select, multiple choice) and checkbox: only the universal four

Value arity follows the operator:

* `is empty` and `is not empty` take **no** value
* `is between` and `is not between` take **two** values (the range bounds)
* everything else takes **one** value

### One-click explanation field

For any field, use **Add explanation field** to generate a linked follow-up short-text field. The follow-up is pre-configured to appear whenever the source field has **any** answer (`is not empty`), which works regardless of the source field's type or options — no need to pick a specific trigger value.

### Formula mode

For rules that can't be expressed as a single comparison — for example, "show this field when temperature is high **and** chlorine is low" — switch the conditional to formula mode and write a boolean expression.

Reference earlier fields by their label in square brackets, and combine comparisons with `AND` and `OR`:

```text theme={null}
[Pool Temp] > 85 AND [Chlorine] < 1
```

```text theme={null}
[Section] = "Deck" OR [Section] = "Perimeter"
```

Supported comparison operators inside a formula are `=`, `!=`, `<`, `<=`, `>`, `>=`. The builder validates syntax as you type; a hand-written parser reports the first invalid token so you can fix it in place.

## Versioning

Templates carry a status:

* **Draft** — freely mutable. Edits update the existing version in place, since no submissions can reference a draft yet.
* **Published** — the working template used by the facility. The next edit rolls forward to a new version so historical references stay stable.
* **Archived** — retired and hidden from active pickers.

The builder page header shows the current version number and the total version count for the template.

## Permissions

The Forms module respects role-based permissions:

* `forms:view` — see the list and open templates read-only
* `forms:edit` — modify existing templates
* `forms:create` — start a new template or seed one from a checklist

Assign these on the [Users and Roles](/user-guide/users-and-roles) page.

## Related

* [Forms and Exports Status](/user-guide/forms-and-exports-status) — current maturity of forms vs. exports
* [Roadmap](/user-guide/roadmap) — when submissions, approvals, and public links land
