Skip to content

Template Fields

Fields define what information users enter when creating a matter. Each field has a type that determines how it’s displayed and validated.

Every field has these properties:

"field_name": {
"type": "text",
"label": "Display Label",
"required": true,
"help": "Optional help text shown below the field"
}
PropertyRequiredDescription
typeYesThe field type (see below)
labelYesLabel shown to users
requiredNoWhether the field must be filled (default: false)
helpNoExplanatory text shown below the field

A single-line text input. Use for names, references, and short text.

"given_names": {
"type": "text",
"label": "Given Names",
"required": true
}

In documents: {{ client.given_names }}

A multi-line text area. Use for addresses, notes, or longer text.

"notes": {
"type": "textarea",
"label": "File Notes",
"required": false
}

In documents: {{ matter.notes }}

A date picker. Stores dates in ISO format (YYYY-MM-DD).

"date_of_birth": {
"type": "date",
"label": "Date of Birth",
"required": false
}

In documents:

  • Raw: {{ client.date_of_birth }} → “2026-01-15”
  • Formatted: {{ client.date_of_birth | date("%-d %B %Y") }} → “15 January 2026”

A number input formatted as currency.

"purchase_price": {
"type": "currency",
"label": "Purchase Price",
"required": true
}

In documents: {{ matter.purchase_price }} → “$150,000.00”

A numeric input (no currency formatting).

"number_of_beneficiaries": {
"type": "number",
"label": "Number of Beneficiaries",
"required": false
}

In documents: {{ estate.number_of_beneficiaries }}

A phone number input.

"phone": {
"type": "phone",
"label": "Phone Number",
"required": false
}

In documents: {{ client.phone }}

An email address input with validation.

"email": {
"type": "email",
"label": "Email Address",
"required": false
}

In documents: {{ client.email }}

A dropdown menu with predefined options.

"state": {
"type": "select",
"label": "State",
"options": ["NSW", "VIC", "QLD", "SA", "WA", "TAS", "NT", "ACT"],
"required": true
}

In documents: {{ client.state }}

A yes/no checkbox.

"has_will": {
"type": "boolean",
"label": "Deceased had a Will",
"required": false
}

In documents: {{ estate.has_will }} → “true” or “false”

Controls field width for multi-column layouts. When multiple fields share the same row, narrower widths let them sit side by side.

ValueWidthUse for
"full"100% (default)Addresses, notes, long text
"half"50%Names, dates, phone numbers
"third"33%State, postcode, short codes
{
"key": "client.given_names",
"type": "text",
"label": "Given Names",
"width": "half"
},
{
"key": "client.surname",
"type": "text",
"label": "Surname",
"width": "half"
}

Mark a field with "quick_entry": true to include it in the Quick Entry panel. Quick Entry mode presents only the most essential fields so users can capture key information fast and fill in remaining details later.

{
"key": "client.surname",
"type": "text",
"label": "Surname",
"required": true,
"quick_entry": true
}

Explanatory text shown below the field:

"re_line": {
"type": "text",
"label": "Re: Line",
"help": "Brief description used in folder naming and correspondence"
}

Placeholder text shown in empty fields:

"email": {
"type": "email",
"label": "Email",
"placeholder": "[email protected]"
}

Default value pre-filled in the field:

"state": {
"type": "select",
"label": "State",
"options": ["NSW", "VIC", "QLD", "SA", "WA", "TAS", "NT", "ACT"],
"default": "NSW"
}

Fields are organised into blocks:

{{ block_name.field_name }}

Common block names:

  • client — Client information
  • matter — Matter details
  • estate — Estate-specific (for Estates template)
  • property — Property details (for Conveyancing)

Boolean fields follow a standard naming pattern that enables automatic inverse field generation:

PrefixMeaningExample
is_*State or characteristicproperty.is_strata, sale.is_auction
has_*Presence of somethingproperty.has_pool, client.has_poa

For each is_* field, Certum Draft automatically creates a not_* inverse. For each has_* field, it creates a no_* inverse. You can also define additional inverses explicitly using the hidden_fields array in matter.json:

"hidden_fields": [
{ "key": "property.is_not_strata", "inverse_of": "property.is_strata" }
]

Hidden fields do not appear in forms but are available in document templates.

DoDon’t
client.full_nameclientFullName
matter.settlement_datesettlementDate
estate.deceased_namedeceased
property.is_stratastrata_yn
client.has_poapoa_exists

Use lowercase with underscores. Be descriptive but concise.

Reference fields display a read-only mirror of a field defined in another block. They’re perfect for creating “checklist” blocks that show all the data needed for a specific letter in one place.

{
"key": "ref.is_strata",
"label": "Property is Strata",
"type": "reference",
"reference_key": "property.is_strata"
}
PropertyRequiredDescription
typeYesMust be "reference"
labelYesLabel shown to users
reference_keyYesThe dot-notation key of the source field (e.g., "property.is_strata")

Reference fields:

  • Show the current value of the source field in real time
  • Display a Ref badge to distinguish them from editable fields
  • Render boolean values as disabled checkboxes for quick visual confirmation
  • Include a navigation arrow that jumps to the source block for editing
  • Should never be marked as required — they don’t represent data entry
  • Don’t affect completion tracking
{
"name": "Sending Contract Checklist",
"description": "Quick reference for the Letter to Client Sending Contract",
"workflow_stage": "contract",
"collapsed": true,
"fields": [
{ "key": "ref.is_strata", "label": "Property is Strata", "type": "reference", "reference_key": "property.is_strata" },
{ "key": "ref.swimming_pool", "label": "Has Swimming Pool", "type": "reference", "reference_key": "property.swimming_pool" },
{ "key": "ref.is_auction", "label": "Sale by Auction", "type": "reference", "reference_key": "sale.is_auction" },
{ "key": "ref.agency_name", "label": "Agent", "type": "reference", "reference_key": "agent.agency_name" }
]
}

Some fields are calculated from other fields using the computed_from property:

{
"key": "client.full_name",
"type": "text",
"label": "Full Name",
"computed_from": "{client.title} {client.given_names} {client.surname}"
}

The value is recalculated automatically whenever any of its source fields change.

In addition to simple interpolation ({field1} {field2}), you can use these functions:

FunctionDescriptionExample
uppercase()Converts to uppercaseuppercase({client.surname})
join_non_empty()Joins non-empty values with a separatorjoin_non_empty(", ", {client.suburb}, {client.state}, {client.postcode})
choose()Returns first matching value (2, 3, or 4 args)choose({property.is_strata}, "Strata", "Torrens")
scale()Multiplies a currency/number by a factorscale({purchase.price}, 0.1)
multiply()Multiplies two valuesmultiply({loan.rate}, {loan.principal})
date_add()Adds days to a datedate_add({matter.exchange_date}, 42)
{
"key": "purchase.deposit_amount",
"type": "currency",
"label": "Deposit (10%)",
"computed_from": "scale({purchase.price}, 0.1)"
}
{
"key": "matter.settlement_date",
"type": "date",
"label": "Settlement Date",
"computed_from": "date_add({matter.exchange_date}, 42)"
}

Certum Draft automatically provides these date variables in every template context — you do not need to define them as fields:

VariableFormatExample
today.date_longFull date”6 April 2026”
today.date_shortShort date”06/04/2026”
today.yearYear only”2026”

Use them in document templates:

This letter is dated {{ today.date_long }}.

Common computed fields:

  • full_name — Combines title, given names, and surname
  • address — Combines street, suburb, state, postcode

Mark fields as required: true when:

  • The field is essential for most documents
  • Missing data would cause obvious problems

Mark fields as required: false when:

  • The field is only needed sometimes
  • Not all matters have this information
"client": {
"label": "Client Details",
"fields": {
"title": {
"type": "select",
"label": "Title",
"options": ["Mr", "Mrs", "Ms", "Dr", "Prof"],
"required": false
},
"given_names": {
"type": "text",
"label": "Given Names",
"required": true
},
"surname": {
"type": "text",
"label": "Surname",
"required": true
},
"full_name": {
"type": "computed",
"label": "Full Name"
},
"date_of_birth": {
"type": "date",
"label": "Date of Birth",
"required": false
},
"street_address": {
"type": "text",
"label": "Street Address",
"required": true
},
"suburb": {
"type": "text",
"label": "Suburb",
"required": true
},
"state": {
"type": "select",
"label": "State",
"options": ["NSW", "VIC", "QLD", "SA", "WA", "TAS", "NT", "ACT"],
"required": true,
"default": "NSW"
},
"postcode": {
"type": "text",
"label": "Postcode",
"required": true
},
"phone": {
"type": "phone",
"label": "Phone",
"required": false
},
"email": {
"type": "email",
"label": "Email",
"required": false
}
}
}