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

# Configuration Interactions

> This page documents how Nextedy RISKSHEET configuration properties interact with each other -- which properties depend on, override, or modify the behavior of other properties.

export const LastReviewed = ({date}) => {
  if (!date) return null;
  const formatted = new Date(`${date}T00:00:00Z`).toLocaleDateString("en-US", {
    year: "numeric",
    month: "long",
    day: "numeric",
    timeZone: "UTC"
  });
  return <p className="mt-10 text-sm text-gray-400 dark:text-zinc-500 not-prose">
      Last reviewed on {formatted}
    </p>;
};

<Info title="Verify in application">
  Property interactions may vary between Risksheet versions. Test combinations in a development environment before deploying to production.
</Info>

## Interaction Categories

Configuration interactions fall into three categories:

| Category          | Description                                                                      |
| ----------------- | -------------------------------------------------------------------------------- |
| **Override**      | One property forces the value of another property regardless of explicit setting |
| **Dependency**    | One property requires another property to be set for correct behavior            |
| **Co-occurrence** | Properties that commonly appear together and affect the same feature area        |

## Column Property Interactions

### formula and readOnly

| Properties                                 | Interaction Type | Behavior                                                                                                                          |
| ------------------------------------------ | ---------------- | --------------------------------------------------------------------------------------------------------------------------------- |
| `columns[].formula` + `columns[].readOnly` | Override         | When `formula` is set, `readOnly` is automatically forced to `true`. Setting `readOnly: false` on a formula column has no effect. |

```yaml theme={null}
columns:
  - id: rpn
    formula: commonRpn
    readOnly: false
```

Result: Column is **read-only** despite `readOnly: false` because `formula` is set.

### serverRender, type, and readOnly

| Properties                                                         | Interaction Type | Behavior                                                                                                                                          |
| ------------------------------------------------------------------ | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| `columns[].serverRender` + `columns[].type` + `columns[].readOnly` | Override         | When `serverRender` is set, `type` is forced to `text` and `readOnly` is forced to `true`. Explicit values for `type` and `readOnly` are ignored. |

```yaml theme={null}
columns:
  - id: traceability
    serverRender: traceabilityRenderer.vm
    type: itemLink
    readOnly: false
```

Result: Column is **text type** and **read-only** despite explicit settings, because `serverRender` is set.

### bindings and id

| Properties                            | Interaction Type | Behavior                                                                                                                                                                           |
| ------------------------------------- | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `columns[].bindings` + `columns[].id` | Dependency       | If `id` is not specified, it is auto-generated from `header` or `bindings`. The `bindings` property determines which Polarion work item field the column reads from and writes to. |

<Tip title="Always specify `id` explicitly">
  Relying on auto-generated IDs can cause issues when other properties reference columns by ID (e.g., `cellDecorators`, `views`, `sortBy`). Always set `id` explicitly for columns that are referenced elsewhere.
</Tip>

### type and bindings (auto-detection)

| Properties                              | Interaction Type  | Behavior                                                                                                                                                                                |
| --------------------------------------- | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `columns[].type` + `columns[].bindings` | Default inference | When `type` is not specified, Risksheet infers the type from the Polarion field type associated with the `bindings` field ID. If inference fails, the column defaults to `string` type. |

### canCreate and column type

| Properties                               | Interaction Type | Behavior                                                                                                                                          |
| ---------------------------------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| `columns[].canCreate` + `columns[].type` | Conditional      | `canCreate` is only meaningful for `itemLink` and `multiItemLink` column types. For other column types, the property is ignored. Default: `true`. |

### headerGroup and collapseTo

| Properties                                       | Interaction Type | Behavior                                                                                                                                                                                                                                                    |
| ------------------------------------------------ | ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `columns[].headerGroup` + `columns[].collapseTo` | Dependency       | `collapseTo` is a boolean property (default `false`). When `true`, the column remains visible even when its `headerGroup` is collapsed; the other columns in the group are hidden. This makes the column the "summary" column shown in the collapsed state. |

```yaml theme={null}
columns:
  - id: severity
    header: Severity
    headerGroup: Initial Risk
    collapseTo: true
  - id: occurrence
    header: Occurrence
    headerGroup: Initial Risk
  - id: detection
    header: Detection
    headerGroup: Initial Risk
```

Result: When the **Initial Risk** header group is collapsed, only the `severity` column remains visible.

### cellRenderer and cellDecorators

| Properties                                  | Interaction Type | Behavior                                                                                                                                                                                                    |
| ------------------------------------------- | ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `columns[].cellRenderer` + `cellDecorators` | Dependency       | The column `cellRenderer` property is a reference to a function defined in the `cellDecorators` section. The referenced decorator function must exist; otherwise the column renders without custom styling. |

```yaml theme={null}
columns:
  - id: rpn
    cellRenderer: rpn
cellDecorators:
  rpn: "function(info){ $(info.cell).toggleClass('rpn3', info.value > 250); }"
```

### format and type

| Properties                            | Interaction Type | Behavior                                                                                                                                                                                                                         |
| ------------------------------------- | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `columns[].format` + `columns[].type` | Dependency       | The `format` property controls display formatting and is relevant for temporal types (`date`, `datetime`, `time`) and numeric types (`int`, `float`, `currency`). The format string interpretation depends on the column `type`. |

## typeProperties Interactions (itemLink and multiItemLink Columns)

`typeProperties` is a nested object on `itemLink` / `multiItemLink` columns that configures how the column resolves linked items. It has six sub-properties:

| Sub-property    | Type    | Description                                                                                                                   |
| --------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------- |
| `linkRole`      | string  | Link role ID connecting the row work item to the target item (e.g., `mitigates`, `relates_to`).                               |
| `linkTypes`     | string  | Comma-separated list of allowed Polarion work item type IDs for the link target (e.g., `requirement,functionalRequirement`).  |
| `linkDirection` | string  | Direction of link traversal. Set to `back` to traverse links in reverse (incoming links instead of outgoing).                 |
| `backLink`      | boolean | Render the column as a back-link (display items that link TO this row).                                                       |
| `itemTemplate`  | string  | Velocity template string for custom item display in the autocomplete and cell.                                                |
| `queryFactory`  | string  | Reference to a named function in the `queryFactories` section that returns a Lucene query to filter autocomplete suggestions. |

### typeProperties and column type

| Properties                                    | Interaction Type | Behavior                                                                                                                                        |
| --------------------------------------------- | ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| `columns[].typeProperties` + `columns[].type` | Dependency       | `typeProperties` is only meaningful when `type` is `itemLink`, `multiItemLink`, or `taskLink`. For other column types, the property is ignored. |

```yaml theme={null}
columns:
  - id: upstreamRequirements
    type: multiItemLink
    header: Requirements
    typeProperties:
      linkRole: implements
      linkTypes: requirement,functionalRequirement
      linkDirection: back
```

### typeProperties.queryFactory and queryFactories

| Properties                                       | Interaction Type | Behavior                                                                                                                                                                                                                |
| ------------------------------------------------ | ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `typeProperties.queryFactory` + `queryFactories` | Dependency       | The `queryFactory` value must reference a function defined in the top-level `queryFactories` section. The function receives an `info` object and returns a Lucene query string used to filter autocomplete suggestions. |

```yaml theme={null}
queryFactories:
  hazardQuery: "function(info){ return 'type:hazard AND document.id:' + info.documentId; }"
columns:
  - id: hazard
    type: itemLink
    typeProperties:
      linkRole: mitigates
      linkTypes: hazard
      queryFactory: hazardQuery
```

## DataTypes Property Interactions

### dataTypes and levels

| Properties             | Interaction Type | Behavior                                                                                                                                                                                                                    |
| ---------------------- | ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `dataTypes` + `levels` | Co-occurrence    | The `dataTypes` configuration defines the two entity types that populate the grid (risk and task), while `levels` defines the visual hierarchy via cell merging. Task-level columns should not have a `level` property set. |

The data model has exactly two entities (risk and task), but the `levels` array can define any number of **visual** levels by merging cells with shared values in a designated `controlColumn`. Each level entry has three required properties:

```yaml theme={null}
levels:
  - name: Item
    controlColumn: item
    zoomColumn: item
  - name: Failure mode
    controlColumn: failureMode
    zoomColumn: failureMode
  - name: Cause
    controlColumn: systemItemId
    zoomColumn: causes
```

| Level property  | Type   | Purpose                                                                                                                           |
| --------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------- |
| `name`          | string | Display name shown in the level navigation/zoom menu (e.g., "Item", "Failure mode").                                              |
| `controlColumn` | string | Column ID used as the grouping key for cell merging. Consecutive rows with the same value in this column have their cells merged. |
| `zoomColumn`    | string | Column ID used as the target for zoom/drill-down navigation.                                                                      |

### dataTypes.risk.removeStrategy and rejectedAction/rejectedStatus/rejectedResolution

| Properties                                                                    | Interaction Type | Behavior                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| ----------------------------------------------------------------------------- | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `removeStrategy` + `rejectedAction` + `rejectedStatus` + `rejectedResolution` | Dependency       | Only the `rejected` removeStrategy consumes the `rejectedAction`, `rejectedStatus`, and `rejectedResolution` properties — they define the workflow transition executed when an item is removed, and all three must be valid for the work item type's workflow. The other non-`delete` strategies do **not** use them: `hide` simply filters the item out of the grid (the work item is left untouched), and `recycle_bin` moves the work item to Polarion's recycle bin. Neither performs a workflow transition. |

```yaml theme={null}
dataTypes:
  risk:
    type: failureMode
    removeStrategy: rejected
    rejectedAction: reject
    rejectedStatus: rejected
    rejectedResolution: invalid
```

<Warning title="Workflow compatibility">
  The `rejectedAction` must correspond to a valid workflow action available from the work item's current state. If the action is not available (common with imported work items), the delete/reject operation fails with the error: `no rejected action found`.
</Warning>

### dataTypes type and role

| Properties                                        | Interaction Type | Behavior                                                                                                                                                                                                                                                          |
| ------------------------------------------------- | ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `dataTypes.<name>.type` + `dataTypes.<name>.role` | Co-occurrence    | The `type` property specifies the Polarion work item type, and `role` specifies the link role used to connect risk rows to task rows. Both are evaluated through the expression evaluator, supporting dynamic resolution from Risksheet Configuration Properties. |

### dataTypes.task canCreate and column canCreate

| Properties                                         | Interaction Type | Behavior                                                                                                                                                                                                                                    |
| -------------------------------------------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `dataTypes.task.canCreate` + `columns[].canCreate` | Complementary    | `dataTypes.task.canCreate: false` globally disables task creation from all UI entry points. `canCreate: false` on individual link columns disables inline creation from those specific columns. Both can be used independently or together. |

* `dataTypes.task.canCreate: false` alone: All task creation paths disabled at the data type level.
* `columns[].canCreate: false` alone: Per-column inline creation disabled, but other creation paths remain available.
* Both `false`: No creation path available for that item type.

### dataTypes document and createInDocument

| Properties                                                        | Interaction Type | Behavior                                                                                                                                                                                                                                                                      |
| ----------------------------------------------------------------- | ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `dataTypes.<name>.document` + `dataTypes.<name>.createInDocument` | Independent      | `document` controls which document items are loaded from (read scope). `createInDocument` (v24.8.1+) controls where new items are stored (write target). These paths are completely independent -- you can load from the whole project while creating in a specific document. |

```yaml theme={null}
dataTypes:
  task:
    type: mitigationTask
    role: mitigates
    createInDocument: Risks/Tasks
```

<Tip title="createInDocument format">
  Use the `folder/documentId` path format for `createInDocument`. Without this property, new items go to the project tracker instead of a specific document.
</Tip>

### dataTypes.task.linkToRisksheet and dataTypes.task.document

| Properties                                                   | Interaction Type | Behavior                                                                                                                                                                                                                                                         |
| ------------------------------------------------------------ | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `dataTypes.task.linkToRisksheet` + `dataTypes.task.document` | Dependency       | When `linkToRisksheet: true`, the task ID column becomes a clickable hyperlink that opens the downstream risksheet document specified by `dataTypes.task.document`. Both properties together enable hierarchical subsheet navigation (master/detail risksheets). |

## Global Property Interactions

### readonly and revision

| Properties                       | Interaction Type | Behavior                                                                                                                                    |
| -------------------------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| `readonly` + document `revision` | Override         | When viewing a historical revision (non-empty `revision`), `readonly` is automatically forced to `true` regardless of the configured value. |

### downstreamReadonly and dataTypes

| Properties                         | Interaction Type  | Behavior                                                                                                                                                                                                                 |
| ---------------------------------- | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `downstreamReadonly` + `dataTypes` | Scope restriction | `downstreamReadonly: true` makes all downstream linked task items read-only. This affects the task data type configured in `dataTypes.task`. Individual column `readOnly` settings on downstream columns are overridden. |

### global.culture and column formats

| Properties                            | Interaction Type | Behavior                                                                                                                                                                                                                                                               |
| ------------------------------------- | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `global.culture` + `columns[].format` | Dependency       | The `culture` setting affects how date, number, and currency values are formatted. Column-level `format` strings are interpreted in the context of the active culture. For example, date columns format dates differently for `en` (MM/DD/YYYY) vs. `de` (DD.MM.YYYY). |

## Styling Interactions

### cellDecorators, styles, and columns

| Properties                              | Interaction Type | Behavior                                                                                                                                                                                                                                                                                           |
| --------------------------------------- | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `cellDecorators` + `styles` + `columns` | Chain            | Cell decorators reference CSS classes defined in `styles`. Decorators are applied to columns by matching the decorator key to a column ID or by being referenced from the column's `cellRenderer` property. The chain is: column value -> decorator function -> CSS class toggle -> style applied. |

```yaml theme={null}
cellDecorators:
  rpn: "function(info){ $(info.cell).toggleClass('rpn3', info.value > 250); }"
styles:
  '.rpn3': '{background-color: #f8eae7 !important; color: #ab1c00 !important;}'
```

<Note title="toggleClass is required">
  Cell decorators MUST use `toggleClass()` rather than inline style assignment. The canonical form — used throughout the Risksheet reference templates — is jQuery `$(info.cell).toggleClass(...)`; `wijmo.toggleClass(...)` is an equivalent alternative. Grid cells are reused as the user scrolls, so inline styles persist on the wrong rows. `toggleClass` ensures classes are correctly added or removed based on each row's current value.
</Note>

### headers.rowHeader.renderer and cellDecorators

| Properties                                      | Interaction Type | Behavior                                                                                                                                          |
| ----------------------------------------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| `headers.rowHeader.renderer` + `cellDecorators` | Dependency       | The `headers.rowHeader.renderer` property references a named function from the `cellDecorators` section. The referenced function must be defined. |

## Views and Column Interactions

### views and columns

| Properties               | Interaction Type | Behavior                                                                                                                                                                                                                                                                                        |
| ------------------------ | ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `views` + `columns[].id` | Dependency       | Saved view definitions reference columns by their `id` in the `columnIds` array. View configurations toggle column visibility. Referenced column IDs must match `id` values in the `columns` array. The special token `@all` includes every column; prefixing a column ID with `-` excludes it. |

```yaml theme={null}
views:
  - name: Full Analysis
    defaultView: true
    columnIds:
      - '@all'
  - name: Classification Summary
    columnIds:
      - function
      - failureCondTitle
      - classification
```

### sortBy and columns

| Properties                | Interaction Type | Behavior                                                                                                                      |
| ------------------------- | ---------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| `sortBy` + `columns[].id` | Dependency       | The `sortBy` array references column IDs to define default sort order. Referenced IDs must match existing column `id` values. |

## Interaction Summary

| Source Property                  | Target Property                                            | Interaction                                              |
| -------------------------------- | ---------------------------------------------------------- | -------------------------------------------------------- |
| `formula`                        | `readOnly`                                                 | Forced `true`                                            |
| `serverRender`                   | `readOnly`                                                 | Forced `true`                                            |
| `serverRender`                   | `type`                                                     | Forced `text`                                            |
| `revision`                       | `readonly`                                                 | Forced `true`                                            |
| `bindings`                       | `type`                                                     | Auto-inferred if missing                                 |
| `bindings`                       | `id`                                                       | Auto-generated if missing                                |
| `dataTypes`                      | `levels`                                                   | Row structure                                            |
| `levels[].controlColumn`         | `columns[].id`                                             | Cell merging target                                      |
| `levels[].zoomColumn`            | `columns[].id`                                             | Zoom navigation target                                   |
| `typeProperties.queryFactory`    | `queryFactories`                                           | Function reference                                       |
| `removeStrategy: rejected`       | `rejectedAction` / `rejectedStatus` / `rejectedResolution` | Linked settings (only the `rejected` strategy uses them) |
| `cellDecorators`                 | `styles`                                                   | CSS class references                                     |
| `cellRenderer`                   | `cellDecorators`                                           | Function reference                                       |
| `rowHeader.renderer`             | `cellDecorators`                                           | Function reference                                       |
| `views[].columnIds`              | `columns[].id`                                             | Visibility toggle                                        |
| `sortBy`                         | `columns[].id`                                             | Sort target                                              |
| `global.culture`                 | Column format                                              | Interpretation                                           |
| `dataTypes.task.document`        | `dataTypes.task.createInDocument`                          | Independent paths                                        |
| `dataTypes.task.canCreate`       | `columns[].canCreate`                                      | Complementary controls                                   |
| `dataTypes.task.linkToRisksheet` | `dataTypes.task.document`                                  | Subsheet navigation                                      |

## See Also

* [Configuration Validation Rules](/risksheet/reference/configuration/config-validation-rules) -- Validation rules and defaults
* [Sheet Configuration Format](/risksheet/reference/configuration/risksheet-json-format) -- Complete format reference
* [Configuration Properties Index](/risksheet/reference/configuration/properties-index) -- All properties in one index
* [Default Configuration Values](/risksheet/reference/configuration/default-values) -- Default values reference

<LastReviewed date="2026-06-24" />
