> ## 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.

# RTM Model

> The Requirements Traceability Matrix (RTM) model is the standard Nextedy POWERSHEET data model for managing multi-level requirements hierarchies.

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>;
};

<Frame>
  <img src="https://mintcdn.com/none-17b4493f/-WiVljKlDztH36bB/powersheet/diagrams/reference/example-models/rtm-model/diagram-1.svg?fit=max&auto=format&n=-WiVljKlDztH36bB&q=85&s=f22dac5eed47200979aeba3f0f2f44b1" alt="diagram" style={{ width: "560px", maxWidth: "100%" }} width="560" height="200" data-path="powersheet/diagrams/reference/example-models/rtm-model/diagram-1.svg" />
</Frame>

## Entity Types

The RTM model defines entity types under the `domainModelTypes` root key. Each entity type maps to a Polarion work item type via `polarionType`.

| Property                               | Type   | Default | Description                                                                                  |
| -------------------------------------- | ------ | ------- | -------------------------------------------------------------------------------------------- |
| `domainModelTypes`                     | object | None    | Root container defining all entity types in the data model. Each key is an entity type name. |
| `domainModelTypes[].name`              | string | None    | Unique identifier for the entity type. Used in relationships and queries.                    |
| `domainModelTypes[].polarionType`      | string | None    | Maps this entity to a Polarion work item type. If omitted, uses a generic work item type.    |
| `domainModelTypes[].properties`        | array  | None    | List of properties available on this entity type. Each maps to a Polarion work item field.   |
| `domainModelTypes[].properties[].name` | string | None    | Name of the property. Must correspond to a Polarion work item field (built-in or custom).    |

### Standard RTM Entity Types

```yaml theme={null}
domainModelTypes:
  Document:
  Chapter:
  UserNeed:
    polarionType: userNeed
    properties:
      description:
      severity:
      component:
      type:
  SystemRequirement:
    polarionType: systemRequirement
    properties:
      description:
      severity:
      component:
      type:
  DesignRequirement:
    polarionType: designOutput
    properties:
      description:
      severity:
      component:
      type:
```

<Note title="Built-in Entity Types">
  `Document` is a built-in entity type representing Polarion LiveDoc modules and does not require a `polarionType` mapping. `Chapter` represents document headings and **must** be explicitly declared with `polarionType: heading`.
</Note>

## Relationships

Relationships define navigable links between entity types using Polarion link roles.

| Property                      | Type   | Default | Description                                                                |
| ----------------------------- | ------ | ------- | -------------------------------------------------------------------------- |
| `relationships`               | array  | `[]`    | Defines all navigable relationships between entity types.                  |
| `relationships[].from`        | string | None    | Source entity type. Must match a `domainModelTypes` key.                   |
| `relationships[].to`          | string | None    | Target entity type. Must match a `domainModelTypes` key.                   |
| `relationships[].cardinality` | string | None    | Relationship multiplicity: `one-to-many`, `many-to-one`, `many-to-many`.   |
| `relationships[].storage`     | string | None    | Persistence mechanism. Use `linkedWorkItems` for Polarion work item links. |
| `relationships[].linkRole`    | string | None    | Polarion link role ID. Must exist in project configuration.                |
| `relationships[].direct`      | string | None    | Navigation property name on source entity to traverse to target.           |
| `relationships[].back`        | string | None    | Navigation property name on target entity to traverse back to source.      |

### Standard RTM Relationships

```yaml theme={null}
relationships:
  - from: UserNeed
    to: SystemRequirement
    cardinality: one-to-many
    storage: linkedWorkItems
    linkRole: relates_to
    direct: systemRequirements
    back: userNeeds

  - from: SystemRequirement
    to: DesignRequirement
    cardinality: one-to-many
    storage: linkedWorkItems
    linkRole: relates_to
    direct: designRequirements
    back: systemRequirements
```

## Constraints

Entity types support three constraint types for scoping data loading and entity creation.

| Constraint | Description                                                                   |
| ---------- | ----------------------------------------------------------------------------- |
| `load`     | Query filter defining which entities to load. Filters by document properties. |
| `create`   | Default values applied when creating new entities of this type.               |
| `pick`     | Picker filter controlling which entities appear in selection dropdowns.       |

```yaml theme={null}
UserNeed:
  polarionType: userNeed
  properties:
    description:
    severity:
  constraints:
    pick:
      document:
        moduleFolder: Requirements
        type: requirementsDocument
    create:
      document:
        moduleFolder: Requirements
        moduleName: User Needs
```

<Tip title="Dynamic Constraints">
  Use `$context.source.document.component` in pick constraints to dynamically filter by the source entity's component value. This ensures related entities are scoped to the same component.
</Tip>

## Expansion Paths

In the sheet configuration, the RTM model supports multi-level expansion through navigation properties:

```yaml theme={null}
sources:
  - id: rtm
    title: RTM
    model: rtm
    query:
      from: UserNeed
    expand:
      - name: systemRequirements
        expand:
          - name: designRequirements
```

This loads `UserNeed` entities and expands two levels deep through `SystemRequirement` to `DesignRequirement`, enabling a full RTM hierarchy view in the sheet.

## Complete YAML Example

```yaml theme={null}
domainModelTypes:
  Document:
  Chapter:
  UserNeed:
    polarionType: userNeed
    properties:
      description:
      severity:
      component:
      type:
    constraints:
      pick:
        document:
          moduleFolder: Requirements
          type: requirementsDocument
  SystemRequirement:
    polarionType: systemRequirement
    properties:
      description:
      severity:
      component:
      type:
    constraints:
      pick:
        document:
          type: requirementsDocument
  DesignRequirement:
    polarionType: designOutput
    properties:
      description:
      severity:
      component:
      type:
    constraints:
      pick:
        document:
          type: designDocument

relationships:
  - from: UserNeed
    to: SystemRequirement
    cardinality: one-to-many
    storage: linkedWorkItems
    linkRole: relates_to
    direct: systemRequirements
    back: userNeeds
  - from: SystemRequirement
    to: DesignRequirement
    cardinality: one-to-many
    storage: linkedWorkItems
    linkRole: relates_to
    direct: designRequirements
    back: systemRequirements
```

## Automotive Safety RTM (Extended Example)

Production automotive projects typically extend the basic RTM with subsystem decomposition, verification at multiple levels, and characteristics traceability. The following example demonstrates a 4-level requirements hierarchy used for ISO 26262 compliance.

<AccordionGroup>
  <Accordion title="Extended automotive data model">
    ```yaml theme={null}
    domainModelTypes:
      Document:
        properties:
          type:
          subsystem:

      Chapter:
        polarionType: heading

      CustomerRequirement:
        polarionType: customerRequirement
        properties:
          description:
          outlineNumber:
          classification:
        constraints:
          create:
            document:
              moduleFolder: Requirements
              moduleName: CUSTOMER-REQS

      SystemRequirement:
        polarionType: sysReq
        properties:
          description:
          classification:
        constraints:
          pick:
            document:
              type: systemRequirementsSpecification

      SubsystemRequirement:
        polarionType: sysReq
        properties:
          description:
          classification:
        constraints:
          pick:
            document:
              type: subsystemRequirementsSpecification

      DesignRequirement:
        polarionType: desReq
        properties:
          description:
          classification:
          subType:
        constraints:
          pick:
            document:
              type: designRequirementsSpecification

      TestCase:
        polarionType: testCase

      Characteristic:
        polarionType: characteristic
        properties:
          targetValue:
          tolerance:
          classification:

      FailureMode:
        polarionType: failureMode
        properties:
          description:
          fmSeverity:
          premitigationFMOccurrence:
          postmitigationFMOccurrence:
          postmitigationAP:

    relationships:
      - from: CustomerRequirement
        to: Chapter
        cardinality: many-to-one
        storage: linkedWorkItems
        linkRole: parent
        direct:
          name: chapter
        back:
          name: customerRequirements

      - from: SystemRequirement
        to: CustomerRequirement
        cardinality: many-to-many
        storage: linkedWorkItems
        linkRole: refines
        direct:
          name: customerRequirements
        back:
          name: systemRequirements

      - from: SubsystemRequirement
        to: SystemRequirement
        cardinality: many-to-many
        storage: linkedWorkItems
        linkRole: refines
        direct:
          name: systemRequirements
        back:
          name: subsystemRequirements

      - from: DesignRequirement
        to: SubsystemRequirement
        cardinality: many-to-many
        storage: linkedWorkItems
        linkRole: refines
        direct:
          name: subsystemRequirements
        back:
          name: designRequirements
          constraints:
            pick:
              document:
                subsystem: $context.source.document.subsystem

      - from: TestCase
        to: CustomerRequirement
        cardinality: many-to-many
        storage: linkedWorkItems
        linkRole: validates
        direct:
          name: customerRequirements
        back:
          name: testCases

      - from: TestCase
        to: SystemRequirement
        cardinality: many-to-many
        storage: linkedWorkItems
        linkRole: verifies
        direct:
          name: systemRequirements
        back:
          name: testCases
          constraints:
            create:
              document:
                moduleFolder: Testing
                moduleName: SystemReqsVerification

      - from: TestCase
        to: DesignRequirement
        cardinality: many-to-many
        storage: linkedWorkItems
        linkRole: verifies
        direct:
          name: designRequirements
        back:
          name: testCases

      - from: Characteristic
        to: DesignRequirement
        cardinality: many-to-many
        storage: linkedWorkItems
        linkRole: refines
        direct:
          name: designRequirements
        back:
          name: characteristics

      - from: FailureMode
        to: Characteristic
        cardinality: many-to-many
        storage: linkedWorkItems
        linkRole: assesses
        direct:
          name: characteristics
        back:
          name: failureModes
    ```
  </Accordion>

  <Accordion title="Sheet configuration for 4-level RTM view">
    This sheet configuration renders the full traceability chain with color-coded column groups and collapsible sections:

    ```yaml theme={null}
    columnGroups:
      customerRequirements:
        groupName: Customer Requirements
        groupStyle: darkgreen
        headerStyle: green
        collapseTo: title
      systemRequirements:
        groupName: System Requirements
        groupStyle: darkpurple
        headerStyle: purple
        collapseTo: systemRequirements.systemRequirement.description
      subsystemRequirements:
        groupName: Subsystem Requirements
        groupStyle: darkteal
        headerStyle: teal
        collapseTo: >-
          systemRequirements.systemRequirement
          .subsystemRequirements.subsystemRequirement.description
      designRequirements:
        groupName: Design Requirements
        groupStyle: darkblue
        headerStyle: blue
        collapseTo: >-
          systemRequirements.systemRequirement
          .subsystemRequirements.subsystemRequirement
          .designRequirements.designRequirement.description

    sortBy:
      - columnId: outlineNumber
        direction: asc

    columns:
      chapter:
        display: title
        title: Chapter
        width: 150
        groupBy: true
        formatter: readOnly

      outlineNumber:
        title: "#"
        width: 80
        formatter: readOnly
        columnGroup: customerRequirements

      title:
        title: Title
        sort: asc
        hasFocus: true
        width: 230
        formatter: boldTitle
        columnGroup: customerRequirements

      classification:
        title: Classification
        width: 150
        columnGroup: customerRequirements
        formatter: classification
        render: classificationRenderer

      description:
        title: Description
        hasFocus: true
        width: 230
        columnGroup: customerRequirements

      testCases.testCase:
        title: Validation Plan
        sort: asc
        minWidth: 230
        multiItem: true
        columnGroup: customerRequirements
        header: &orange
          style: orange

      systemRequirements.systemRequirement:
        title: ID
        width: 100
        columnGroup: systemRequirements

      systemRequirements.systemRequirement.description:
        title: Description
        formatter: boldTitle
        width: 200
        columnGroup: systemRequirements
        hasFocus: true

      systemRequirements.systemRequirement.testCases.testCase:
        title: Verification Plan
        sort: asc
        minWidth: 230
        multiItem: true
        columnGroup: systemRequirements
        header: *orange

    views:
      - title: Full RTM
      - title: Without V&V
        hiddenColumns:
          - testCases.testCase
          - systemRequirements.systemRequirement.testCases.testCase
      - title: Summary
        hiddenColumns:
          - description
          - document
    ```

    Key patterns in this configuration:

    * **YAML anchors** (`&orange` / `*orange`) avoid repeating the same header style across verification columns
    * **`collapseTo`** lets users collapse entire requirement levels to a single description column
    * **`multiItem: true`** on test case columns renders multiple linked test cases in a single cell
    * **`groupBy: true`** on the chapter column organizes rows by document chapter structure
    * **Named views** provide pre-configured column visibility for different audiences
  </Accordion>
</AccordionGroup>

## See Also

* [Data Model Types](/powersheet/reference/data-model/domainmodeltypes) -- full property reference for `domainModelTypes`
* [Relationships](/powersheet/reference/data-model/relationships) -- relationship configuration reference
* [Constraints](/powersheet/reference/data-model/constraints) -- constraint types and syntax
* [Risk Management Model](/powersheet/reference/example-models/risk-management-model) -- alternative model for risk analysis
* [Creating Your First Data Model](/powersheet/getting-started/first-data-model) -- tutorial for building a model from scratch

<LastReviewed date="2026-07-02" />
