Skip to main content

Chart of Accounts

The chart of accounts defines the account structure used to classify every financial transaction in the General Ledger. Rather than a flat list of account numbers, Raytio uses a multi-segment model where each segment draws its allowed values from a value set, and the segments are assembled into a structure that defines the full account string.

Value sets​

A Value Set is a named collection of allowed values for a single segment of the chart of accounts. Value sets are independent of any particular structure — the same value set can be reused across multiple structures if the same set of codes applies.

AttributePurpose
Value set codeUnique identifier within the tenant (e.g. VS_DEPT, VS_ACCT)
NameHuman-readable name with i18n support
DescriptionOptional longer description
Validation typeHow values are validated (e.g. TABLE for table-based validation)
Value data typeData type of values (e.g. VARCHAR, NUMBER)
Maximum lengthMaximum character length for values
StatusActive/inactive lifecycle state

Value set values​

Each value set contains one or more values — the individual codes that can be used in that segment position:

AttributePurpose
ValueThe code itself (e.g. 1100, 200, 01)
NameHuman-readable description with i18n support
DescriptionOptional longer explanation
Enabled flagWhether the value is available for new transactions
Start/end datesOptional validity period
Summary flagWhether this is a summary (parent) value for roll-up reporting
Budgeting allowedWhether the value can be used in budget entries
Posting allowedWhether the value can be used in actual postings

Values can be disabled without deletion, allowing existing transactions to retain their references while preventing new usage.

Chart-of-accounts structures​

A COA Structure defines the blueprint for account strings within a ledger. It specifies which segments make up the account, their order, and the character used to separate them in the display string.

AttributePurpose
Structure codeUnique identifier within the tenant (e.g. ACME_COA)
NameHuman-readable name with i18n support
Segment separatorCharacter used between segments (typically - or .)
DescriptionOptional longer description
Cross-validation flagWhether cross-segment validation rules are enforced
Dynamic insertion flagWhether new code combinations are created automatically (see below)
Freeze flagWhether the structure is frozen (no further segment changes)
StatusActive/inactive lifecycle state

Segments​

Each structure contains one or more Segments, ordered by display sequence. A segment links to a value set and defines the rules for that position in the account string:

AttributePurpose
Segment codeIdentifier within the structure (e.g. COMPANY, ACCOUNT, DEPT)
NameHuman-readable label with i18n support
Value setThe value set this segment draws from
Display sequencePosition in the account string (1, 2, 3, …)
Display sizeRendering width for the segment in the UI
Required flagWhether a value must be provided for this segment
Natural account flagIdentifies the segment that holds the natural account number
Balancing segment flagIdentifies the segment used for automatic balancing

A typical three-segment structure might look like:

SeqSegmentValue SetExample Values
1CompanyVS_COMPANY01, 02
2AccountVS_ACCT1100, 2000, 5010
3DepartmentVS_DEPT100, 200, 300

With a - separator, account strings appear as 01-1100-100.

Code combinations​

A Code Combination is a fully qualified, validated account string. Each combination records the individual segment values alongside the concatenated display string:

AttributePurpose
Concatenated segmentsThe full account string (e.g. 01-1100-100)
Segment 1–N valuesIndividual segment values stored in separate columns
Enabled flagWhether the combination is available for new transactions
Start/end datesOptional validity period
Summary flagWhether this is a summary combination for roll-up reporting
Budgeting allowedWhether the combination can be used in budget entries
DescriptionOptional description

Validation​

Before a code combination can be used, it must pass validation:

  1. Segment values — each segment value must exist and be enabled in its value set
  2. Required segments — all required segments must have a value
  3. Cross-validation — if the structure has cross-validation enabled, the combination must satisfy any cross-validation rules (future phase)
  4. Date validity — the combination and its segment values must be valid for the transaction date

The platform provides validation functions that check these rules and return a clear pass/fail result with error details.

Dynamic insertion​

When a structure has dynamic insertion enabled, new code combinations are created automatically the first time a valid but previously unrecorded combination is used in a journal entry. This avoids the need to pre-create every possible combination manually.

Dynamic insertion still validates all segment values against their value sets — it only skips the requirement that the combination already exists in the code-combinations table. If any segment value is invalid, the entry is rejected regardless of the dynamic insertion setting.

When dynamic insertion is disabled, only pre-created and enabled code combinations can be used.

How it fits together​

Further reading​