Skip to content

Field Reference (Codex)

This codex defines standard field names used across all template types. Using these consistent names ensures your templates work reliably and can be shared between matter types.


These fields exist in every matter type. Templates using only these fields can be shared across all practice areas.

Your main client’s details. The client.* fields always refer to the first (or only) client.

FieldExampleDescription
client.full_nameDwight Kurt SchruteComplete legal name
client.surnameSchruteFamily name
client.given_namesDwight KurtAll first/middle names
client.given_nameDwight KurtAlias for given_names
client.titleMrTitle (Mr, Mrs, Ms, Dr, etc.)
client.addresseeMr D SchruteFor envelope/letter address
client.salutationMr SchruteAfter “Dear” in letters
client.street_addressSchrute Farms, Rural Route 6Street line
client.suburbScrantonSuburb/city
client.stateNSWState abbreviation
client.postcode2000Postal code
client.address_single_lineSchrute Farms, Rural Route 6, Scranton NSW 2000Full address on one line
client.email[email protected]Email address
client.phone0400 123 456Phone number
client.mobile0400 123 456Mobile (alias for phone)
client.occupationAssistant Regional ManagerProfession
client.dob1970-01-20Date of birth

Matters can have multiple clients (e.g., couples doing joint Wills, joint property purchases). When a matter has multiple clients, indexed fields are automatically generated alongside the primary client.* fields.

Each additional client gets their own numbered set of fields:

FieldExampleDescription
client1.full_nameDwight Kurt SchruteFirst client (same as client.*)
client1.surnameSchruteFirst client surname
client1.given_namesDwight KurtFirst client given names
client1.email[email protected]First client email
client2.full_nameAngela Noelle MartinSecond client
client2.surnameMartinSecond client surname
client2.given_namesAngela NoelleSecond client given names
client2.email[email protected]Second client email
client3.full_nameThird client (and so on)

All standard client.* fields are available on each indexed client (client1.phone, client2.street_address, etc.).

These are auto-generated when the matter has clients:

FieldExampleDescription
clients.count2Number of clients on the matter
clients.is_coupletrueTrue if exactly 2 clients
clients.is_multitrueTrue if more than 1 client
clients.namesDwight Schrute & Angela MartinAll names joined with ” & “
clients.surnamesSCHRUTE & MARTINAll surnames in CAPS

Conditional sections for couples:

{%p if clients.is_couple == 'true' %}
We act for {{ client1.full_name }} and {{ client2.full_name }} jointly.
{%p else %}
We act for {{ client.full_name }}.
{%p endif %}

Listing all client names:

{%p if clients.is_multi == 'true' %}
Our clients: {{ clients.names }}
{%p else %}
Our client: {{ client.full_name }}
{%p endif %}
ClientsFolder Name
1013549 - SCHRUTE Dwight - Will
2013549 - SCHRUTE Dwight & MARTIN Angela - Will
3+013549 - SCHRUTE Dwight & Others - Will

Information about the file itself.

FieldExampleDescription
matter.number2025-00042Unique reference number
matter.nameSCHRUTE - Sale of Beet FarmShort description
matter.typeSale of LandMatter category
matter.re_lineSale of Schrute FarmsReference line for letters
matter.person_actingJim HalpertSolicitor with carriage
matter.person_assistingPam BeeslySupport staff
matter.propertySchrute Farms, Rural Route 6, ScrantonProperty description (from CRM)
matter.sc_packet_noSC-2025-0042Safe custody packet number
matter.date_created2025-01-15When file was opened
matter.year_created2025Year opened

When matter.type is a dropdown (select) field in the form, Certum Draft automatically copies its value to matter.name when changed. This enables smart folder naming without extra data entry.

Template Packmatter.typematter.nameFolder Result
Sale of LandHidden, default “Sale”User enters description013547 - SCHRUTE Dwight - Sale of Schrute Farms
EstatesHidden, default “Probate”User enters description013548 - PENDRAGON Arthur - Estate of Arthur Pendragon
Wills/POA/EGDropdown with optionsAuto-filled from dropdown013549 - SCHRUTE Dwight - Will, POA & EG

Users can still manually edit matter.name after auto-fill if they want something different.

Your firm’s details for letterheads and signature blocks.

FieldExampleDescription
firm.nameDunder Mifflin LawFirm’s full name
firm.street_address1725 Slough AvenueOffice street
firm.suburbSydneyOffice suburb
firm.stateNSWOffice state
firm.postcode2000Office postcode
firm.phone02 9999 0199Main phone
firm.fax02 9999 0198Fax number
firm.email[email protected]General email
firm.abn12 345 678 901ABN
firm.dx_addressDX 123 SydneyDX address

The individual solicitor handling the matter.

FieldExampleDescription
practitioner.full_nameJames Duncan HalpertSolicitor’s name
practitioner.titleSenior AssociatePosition
practitioner.email[email protected]Direct email
practitioner.phone02 9999 0101Direct line
practitioner.mobile0400 123 456Mobile

Current date fields, populated when the document is generated.

FieldExampleDescription
today.date2025-01-27Current date (ISO)
today.date_long27 January 2025Current date (long)
today.day27Day of month
today.monthJanuaryMonth name
today.year2025Year

Boolean fields control conditional text in your templates. Certum Draft uses a consistent naming pattern and automatically computes inverse values so you don’t have to.

Primary Field

What the user sees and sets in the form.

sale.is_auction = YES

Inverse Field

Auto-computed. Never shown to user.

sale.not_auction = NO

  1. User fills out the form — Sets sale.is_auction to YES
  2. App stores the valuesale.is_auction = “true”
  3. Document generation — Certum Draft automatically creates sale.not_auction = “false”
  4. Template renders — Both {%p if sale.is_auction %} and {%p if sale.not_auction %} work correctly
PatternPrimary (User Sets)Inverse (Auto-Computed)
Is/Notsale.is_auctionsale.not_auction
Is/Notsale.is_estatesale.not_estate
Is/Notproperty.is_strataproperty.not_strata
Has/Noproperty.has_poolproperty.no_pool
Has/Noproperty.has_illegal_worksproperty.no_illegal_works
Plaincooling_off.expiredcooling_off.not_expired
Plainexchange.by_agentexchange.not_by_agent

Instead of complex negative logic:

{%p if not sale.is_auction %} <- Harder to read, error-prone

Use clean positive conditions:

{%p if sale.not_auction %} <- Clear and simple

Additional fields for property transactions.

FieldExampleDescription
property.addressSchrute Farms, Rural Route 6, Scranton NSW 2000Full property address
property.re_lineSchrute Farms, Rural Route 6, ScrantonShort form for letters
property.street_addressRural Route 6Street line only
property.suburbScrantonProperty suburb
property.stateNSWProperty state
property.postcode2000Property postcode
property.lot_number15Lot number
property.dp_number123456DP/SP number
property.title_reference15/123456Title reference (Folio)
property.registered_planDP 123456Full plan reference
property.councilScranton Regional CouncilLocal council
Primary FieldInverse (Auto)What It Controls
property.is_strataproperty.not_strataStrata/unit title warnings
property.has_poolproperty.no_poolPool compliance requirements
property.has_illegal_worksproperty.no_illegal_worksUnapproved works disclosure
property.survey_availableSurvey report exists
FieldExampleDescription
transaction.sale_price750000Sale/purchase price
transaction.deposit_amount75000Deposit amount
transaction.contract_date2025-01-27Contract date
transaction.exchange_date2025-01-28Exchange date
transaction.settlement_date2025-03-15Settlement date
transaction.settlement_period42Days to settlement
Primary FieldInverse (Auto)What It Controls
transaction.simultaneous_purchaseCoordinating sale with purchase
transaction.deposit_releaseEarly deposit release
transaction.christmas_settlementHoliday period settlement
transaction.vendor_renting_backPost-settlement rental
transaction.vacant_possessionProperty empty at settlement
Primary FieldInverse (Auto)What It Controls
sale.is_auctionsale.not_auctionAuction vs private treaty
sale.is_estatesale.not_estateDeceased estate sale

These follow the same pattern as client.*:

CategoryExample FieldDescription
vendor.*vendor.full_nameThe seller (sale matters)
purchaser.*purchaser.full_nameThe buyer (purchase matters)
os.*os.business_nameOther side’s solicitor
agent.*agent.full_nameReal estate agent

For deceased estate matters.

FieldExampleDescription
deceased.full_nameArthur PendragonFull name
deceased.surnamePendragonSurname
deceased.given_namesArthurGiven names
deceased.titleKingTitle
deceased.date_of_death2025-01-01Date of death
deceased.date_of_birth1960-06-15Date of birth
deceased.place_of_deathCamelot HospitalPlace of death
deceased.last_addressCastle Camelot, Camelot NSW 2001Last known address
deceased.occupationKingOccupation
deceased.marital_statusMarriedMarital status at death
FieldExampleDescription
estate.value_gross500000Gross estate value
estate.value_net450000Net estate value
estate.date_of_will2020-05-15Date of will
Primary FieldInverse (Auto)What It Controls
estate.has_willestate.no_willTestate vs intestate
estate.probate_grantedestate.not_probate_grantedProbate status
estate.has_real_propertyestate.no_real_propertyReal estate in estate
FieldExampleDescription
executor.full_nameSir LancelotExecutor’s name
executor.addressRound Table, Camelot NSW 2001Executor’s address
executor.relationshipKnight of the Round TableRelationship to deceased
administrator.full_nameSir GalahadAdministrator’s name

For will preparation matters.

FieldExampleDescription
testator.full_nameRobin of LocksleyFull legal name
testator.surnameLocksleySurname
testator.given_namesRobinGiven names
testator.titleMrTitle
testator.dob1965-03-15Date of birth
testator.occupationOutlawOccupation
testator.marital_statusMarriedMarital status
testator.addressSherwood Forest, Nottingham NSW 2100Address
Primary FieldInverse (Auto)What It Controls
testator.is_marriedtestator.not_marriedMarriage-related clauses
testator.has_childrentestator.no_childrenChildren provisions
testator.has_stepchildrentestator.no_stepchildrenStepchildren provisions
FieldExampleDescription
beneficiary_1.full_nameMaid MarianFirst beneficiary
beneficiary_1.relationshipSpouseRelationship to testator
beneficiary_1.share50%Share of estate
beneficiary_2.full_nameRobin JrSecond beneficiary
beneficiary_2.relationshipSonRelationship
beneficiary_2.share25%Share
beneficiary_3.full_nameFriar TuckThird beneficiary
beneficiary_3.relationshipFriendRelationship
beneficiary_3.share25%Share
executor_1.full_nameLittle JohnFirst executor
executor_1.relationshipFriendRelationship
executor_2.full_nameWill ScarletSubstitute executor

For commercial transactions.

FieldExampleDescription
company.nameSherwood Enterprises Pty LtdCompany name
company.acn123 456 789ACN
company.abn12 345 678 901ABN
company.registered_address1 Forest Road, Sherwood NSW 2100Registered office
company.director_1Robin HoodFirst director
company.director_2Little JohnSecond director
company.secretaryAlan-a-DaleCompany secretary
Primary FieldInverse (Auto)What It Controls
company.is_trusteecompany.not_trusteeActing as trustee
transaction.is_gst_applicabletransaction.not_gst_applicableGST provisions
transaction.has_financetransaction.no_financeFinance conditions

This matrix shows which universal fields exist across the main matter types:

FieldSale of LandEstatesWills/POA/EG
matter.numberYesYesYes
matter.nameYesYesYes (auto-filled)
matter.typehiddenhiddenYes (dropdown)
matter.re_lineYes
matter.person_actingYesYesYes
matter.person_assistingYesYesYes
client.full_nameYesYesYes
client.surnameYesYesYes
client.addresseeYesYesYes
client.salutationYesYesYes
client.street_addressYesYesYes
client.suburbYesYesYes
client.stateYesYesYes
client.postcodeYesYesYes
client.emailYesYesYes
client.phoneYesYesYes
firm.nameYes
practitioner.full_nameYesYes

Implementing Universal Fields in matter.json

Section titled “Implementing Universal Fields in matter.json”

Every matter.json should include these blocks as a minimum to ensure cross-template compatibility:

{
"blocks": [
{
"name": "Matter Details",
"fields": [
{"key": "matter.number", "label": "Matter Number", "type": "text"},
{"key": "matter.name", "label": "Matter Name", "type": "text"},
{"key": "matter.re_line", "label": "Re Line", "type": "text"},
{"key": "matter.person_acting", "label": "Person Acting", "type": "text"},
{"key": "matter.person_assisting", "label": "Person Assisting", "type": "text"}
]
},
{
"name": "Client",
"fields": [
{"key": "client.full_name", "label": "Full Name", "type": "text"},
{"key": "client.surname", "label": "Surname", "type": "text"},
{"key": "client.given_names", "label": "Given Names", "type": "text"},
{"key": "client.title", "label": "Title", "type": "select",
"options": ["Mr", "Mrs", "Ms", "Miss", "Dr", "Hon"]},
{"key": "client.addressee", "label": "Addressee", "type": "text"},
{"key": "client.salutation", "label": "Salutation", "type": "text"},
{"key": "client.street_address", "label": "Street Address", "type": "text"},
{"key": "client.suburb", "label": "Suburb", "type": "text"},
{"key": "client.state", "label": "State", "type": "select",
"options": ["NSW", "VIC", "QLD", "WA", "SA", "TAS", "ACT", "NT"]},
{"key": "client.postcode", "label": "Postcode", "type": "text"},
{"key": "client.email", "label": "Email", "type": "email"},
{"key": "client.phone", "label": "Phone", "type": "phone"}
]
}
]
}

For multi-client matters, add a second client block with collapsed: true:

{
"name": "Client 2 (Joint)",
"description": "Second client for joint matters",
"collapsed": true,
"fields": [
{"key": "client2.full_name", "label": "Full Name", "type": "text"},
{"key": "client2.surname", "label": "Surname", "type": "text"},
{"key": "client2.email", "label": "Email", "type": "email"},
{"key": "client2.phone", "label": "Phone", "type": "phone"}
]
}

RuleExample
Use lowercaseclient.surname
Use underscores for multi-word fieldsclient.street_address
Use dot notation for categoriesclient. matter. property.
Be descriptivetransaction.settlement_date
Use _single_line suffix for combined fieldsclient.address_single_line
Use is_ prefix for boolean “is this?” fieldsproperty.is_strata
Use has_ prefix for boolean “has this?” fieldsproperty.has_pool
AvoidWhyInstead Use
clientSurnamecamelCase is inconsistentclient.surname
Client_SurnameCapital letters varyclient.surname
SURNAMEAll caps is uglyclient.surname
snameToo abbreviatedclient.surname
nameAmbiguous (whose name?)client.full_name
strataUnclear what it meansproperty.is_strata

  1. Always check the codex first — Use standard names
  2. If a field doesn’t exist — Propose it using the standard format
  3. Be consistent — Same field, same name, everywhere
  4. Use inverses for negative conditionssale.not_auction not {% if not sale.is_auction %}
  1. Match the codex field names — Use client.surname not surname
  2. Include all universal fields — Ensures template compatibility
  3. Define primary booleans only — Inverses are computed automatically
  4. Add matter-specific fields — Using the same naming conventions

This letter works across any matter type because it only uses universal fields:

{{ firm.name }}
{{ firm.street_address }}
{{ firm.suburb }} {{ firm.state }} {{ firm.postcode }}
{{ today.date_long }}
{{ client.addressee }}
{{ client.street_address }}
{{ client.suburb }} {{ client.state }} {{ client.postcode }}
Dear {{ client.salutation }},
Re: {{ matter.re_line }}
Our Ref: {{ matter.number }}
Thank you for your instructions. We confirm we act on your behalf.
Yours faithfully,
{{ practitioner.full_name }}
{{ firm.name }}

Using multi-client fields for a joint Will instruction:

{{ today.date_long }}
{{ client1.full_name }}
{{ client2.full_name }}
{{ client1.street_address }}
{{ client1.suburb }} {{ client1.state }} {{ client1.postcode }}
Dear {{ client1.salutation }} and {{ client2.salutation }},
Re: {{ matter.re_line }}
Our Ref: {{ matter.number }}
We confirm we act for you both in relation to the above matter.
{%p if clients.is_couple == 'true' %}
As discussed, we will prepare mirror Wills for {{ client1.full_name }}
and {{ client2.full_name }}.
{%p endif %}
Yours faithfully,
{{ practitioner.full_name }}
{{ firm.name }}