Field meaning

TL;DR

Field meaning is data, not prose. It is authored in JSON per family and joined to the live column list at request time, so it cannot claim a column that does not exist.

Field definitions are authored as data and joined to the live schema. The generated Markdown reference makes those same definitions readable without database access. Neither code inspection nor an authored definition proves that a column has been migrated into a particular environment.

Where to look

ForGo to
A classification column/dictionary/classifications
Transaction, impact and customer fields/dictionary/fields, see the fields dictionary
A business term rather than a columnThe glossary
What an object isObjects
How the tables relateData model

Other table families are not yet part of the field-dictionary UI. Their source and object pages explain their purpose; the current schema is visible at /system/database/showcreate.

How it is stored

FamilyTables it coversAuthored in
Transaction headersThe seven <type>s tablesconfig/dictionary/fields/transactionheaders.json
Transaction linesExisting <type>lines tables; prepayments have no linesconfig/dictionary/fields/transactionlines.json
ImpactsPer-group cm_impact_*, realised order totals and cm_expectedimpact_salesordersconfig/dictionary/fields/impacts.json
CustomersThe customer* identity, fingerprint and sequence tablesconfig/dictionary/fields/customers.json

Classification columns are separate, in config/dictionary/transactionclassifications.json, keyed by classification-table column and read by /dictionary/classifications.

A family is a fixed list in app/models/dictionaryfields.php, not something a request can supply, because the family name lands in an identifier position in the query that reads the schema. The _old and _new tables a swap leaves behind are excluded, so a prefix family does not list the same columns three times.

A definition is keyed on the column name, not on the table. One entry covers that column wherever it appears in the family, which is what makes seven transaction types cost one definition rather than seven.

Adding a definition

Add the column and its description to the family's JSON file, and reload /dictionary/fields. There is no loader and no install step: config/dictionary/ is request-time lookup data and is never seeded into a table.

The page shows three states, and all three matter: documented, undocumented, and authored-but-absent. The last one means a definition exists for a column this environment does not have, which is either a typo or a column not yet migrated here.

Reading the definitions without the application

app/jobs/system/showfieldreference.php prints every authored definition as Markdown, and its output is committed as the generated field reference. That file exists so a reader outside the application, and a future retrieval, can see the same definitions the screen joins to the live schema.

It is generated, so it is never edited by hand: change the family's JSON and run the job again. It also carries only the authored side, never the live column list, which is why it is a companion to /dictionary/fields rather than a replacement for it.

What this page is not

It is not a field list, and adding one here would be the mistake this arrangement exists to prevent.

Evidence

Families, the fixed list and the _old/_new exclusion from app/models/dictionaryfields.php. File locations from config/dictionary/fields/. The classification mechanism from app/data/dictionary/classifications.php and config/dictionary/transactionclassifications.json. config/dictionary/ being request-time rather than seeded from AGENTS.md, Configuration and .env. Basis: code-checked against the current implementation.

About this document
  • Type
    reference
  • Status
    active
  • Updated
    2026-09-14
  • Created
    2026-09-13