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

# Planning configuration and journey helpers

> Planning type, target, framework, journey, progress, and health helpers for configured planning records.

## When to use these helpers

Use these helpers only with the planning fields and relation shapes they expect. Test every combination of plan category, type, framework, and target class that your service supports.

## Calling style

Call a helper as `planningJourneyKey($.plan_category, $.plan_type, $.base_framework, $.target_entity_class, $.overlay_frameworks)`. Not every helper is available everywhere: validation, form, and document-template helpers have distinct context contracts. Editor suggestions are not proof that a helper is supported at runtime.

## Complete function reference

### `planningAllowedTargetRecordTypes`

Returns allowed target record types for one planning relation entity key.

**Signature:** `planningAllowedTargetRecordTypes(planType, targetEntityClass, relationEntityKey)`

**Example:**

```txt theme={null}
planningAllowedTargetRecordTypes($.plan_type, $.target_entity_class, "locations")
```

**Availability:** Configured planning records only; function and transform forms are registered, but function form makes the required inputs reviewable.

**Note:** It can also be written as a transform when the first value is the input: `value | planningAllowedTargetRecordTypes(...)`.

### `planningBaseFrameworkValidation`

Compatibility form of planningFrameworkValidation for a base framework.

**Signature:** `planningBaseFrameworkValidation(planType, framework, targetEntityClass)`

**Example:**

```txt theme={null}
planningBaseFrameworkValidation($.plan_type, $.base_framework, $.target_entity_class)
```

**Availability:** Configured planning records only; function and transform forms are registered, but function form makes the required inputs reviewable.

**Note:** It can also be written as a transform when the first value is the input: `value | planningBaseFrameworkValidation(...)`.

### `planningExecutionProgress`

Returns journey progress for the configured planning context.

**Signature:** `planningExecutionProgress(planCategory, planType, baseFramework, targetEntityClass, overlayFrameworks, inverseRelations)`

**Example:**

```txt theme={null}
planningExecutionProgress($.plan_category, $.plan_type, $.base_framework, $.target_entity_class, $.overlay_frameworks, $inverseRelations)
```

**Availability:** Configured planning records only; function and transform forms are registered, but function form makes the required inputs reviewable.

**Note:** It can also be written as a transform when the first value is the input: `value | planningExecutionProgress(...)`.

### `planningFrameworkValidation`

Validates a base framework against the selected plan type and target class.

**Signature:** `planningFrameworkValidation(planType, framework, targetEntityClass)`

**Example:**

```txt theme={null}
planningFrameworkValidation($.plan_type, $.base_framework, $.target_entity_class)
```

**Availability:** Configured planning records only; function and transform forms are registered, but function form makes the required inputs reviewable.

**Note:** It can also be written as a transform when the first value is the input: `value | planningFrameworkValidation(...)`.

### `planningHasOverlayFrameworkOptions`

Returns whether any overlay frameworks are available for the selected plan context.

**Signature:** `planningHasOverlayFrameworkOptions(planType, targetEntityClass)`

**Example:**

```txt theme={null}
planningHasOverlayFrameworkOptions($.plan_type, $.target_entity_class)
```

**Availability:** Configured planning records only; function and transform forms are registered, but function form makes the required inputs reviewable.

**Note:** It can also be written as a transform when the first value is the input: `value | planningHasOverlayFrameworkOptions(...)`.

### `planningIsPlanContext`

Returns whether a relation value or record resembles a plans context.

**Signature:** `planningIsPlanContext(value)`

**Example:**

```txt theme={null}
planningIsPlanContext($relations.context_id)
```

**Availability:** Configured planning records only; function and transform forms are registered, but function form makes the required inputs reviewable.

**Note:** It can also be written as a transform when the first value is the input: `value | planningIsPlanContext(...)`.

### `planningJourneyDefaultTab`

Returns the default tab key for the selected planning journey.

**Signature:** `planningJourneyDefaultTab(planCategory, planType, baseFramework, targetEntityClass, overlayFrameworks)`

**Example:**

```txt theme={null}
planningJourneyDefaultTab($.plan_category, $.plan_type, $.base_framework, $.target_entity_class, $.overlay_frameworks)
```

**Availability:** Configured planning records only; function and transform forms are registered, but function form makes the required inputs reviewable.

**Note:** It can also be written as a transform when the first value is the input: `value | planningJourneyDefaultTab(...)`.

### `planningJourneyKey`

Returns the configured planning journey key.

**Signature:** `planningJourneyKey(planCategory, planType, baseFramework, targetEntityClass, overlayFrameworks)`

**Example:**

```txt theme={null}
planningJourneyKey($.plan_category, $.plan_type, $.base_framework, $.target_entity_class, $.overlay_frameworks)
```

**Availability:** Configured planning records only; function and transform forms are registered, but function form makes the required inputs reviewable.

**Note:** It can also be written as a transform when the first value is the input: `value | planningJourneyKey(...)`.

### `planningJourneyProgress`

Returns the selected journey’s 0–100 progress score.

**Signature:** `planningJourneyProgress(planCategory, planType, baseFramework, targetEntityClass, overlayFrameworks, inverseRelations)`

**Example:**

```txt theme={null}
planningJourneyProgress($.plan_category, $.plan_type, $.base_framework, $.target_entity_class, $.overlay_frameworks, $inverseRelations)
```

**Availability:** Configured planning records only; function and transform forms are registered, but function form makes the required inputs reviewable.

**Note:** It can also be written as a transform when the first value is the input: `value | planningJourneyProgress(...)`.

### `planningJourneyTabVisible`

Returns whether one journey tab is applicable to the selected planning context.

**Signature:** `planningJourneyTabVisible(planCategory, planType, baseFramework, targetEntityClass, overlayFrameworks, tabKey)`

**Example:**

```txt theme={null}
planningJourneyTabVisible($.plan_category, $.plan_type, $.base_framework, $.target_entity_class, $.overlay_frameworks, "risks")
```

**Availability:** Configured planning records only; function and transform forms are registered, but function form makes the required inputs reviewable.

**Note:** It can also be written as a transform when the first value is the input: `value | planningJourneyTabVisible(...)`.

### `planningKeyResultIndicatorValidation`

Requires an indicator in indicator tracking mode and rejects it in manual mode.

**Signature:** `planningKeyResultIndicatorValidation(trackingMode, indicator)`

**Example:**

```txt theme={null}
planningKeyResultIndicatorValidation($.tracking_mode, $.indicator_id)
```

**Availability:** Configured planning records only; function and transform forms are registered, but function form makes the required inputs reviewable.

**Note:** It can also be written as a transform when the first value is the input: `value | planningKeyResultIndicatorValidation(...)`.

### `planningOverlayFrameworksValidation`

Validates that every selected overlay framework is allowed.

**Signature:** `planningOverlayFrameworksValidation(planType, overlayFrameworks, targetEntityClass)`

**Example:**

```txt theme={null}
planningOverlayFrameworksValidation($.plan_type, $.overlay_frameworks, $.target_entity_class)
```

**Availability:** Configured planning records only; function and transform forms are registered, but function form makes the required inputs reviewable.

**Note:** It can also be written as a transform when the first value is the input: `value | planningOverlayFrameworksValidation(...)`.

### `planningPlanHealthStatus`

Returns the calculated planning health state or null when there is no meaningful journey signal.

**Signature:** `planningPlanHealthStatus(planCategory, planType, baseFramework, targetEntityClass, overlayFrameworks, inverseRelations)`

**Example:**

```txt theme={null}
planningPlanHealthStatus($.plan_category, $.plan_type, $.base_framework, $.target_entity_class, $.overlay_frameworks, $inverseRelations)
```

**Availability:** Configured planning records only; function and transform forms are registered, but function form makes the required inputs reviewable.

**Note:** It can also be written as a transform when the first value is the input: `value | planningPlanHealthStatus(...)`.

### `planningPlanTypeValidation`

Returns true when the plan type is allowed for the selected category, otherwise a validation message.

**Signature:** `planningPlanTypeValidation(planCategory, planType)`

**Example:**

```txt theme={null}
planningPlanTypeValidation($.plan_category, $.plan_type)
```

**Availability:** Configured planning records only; function and transform forms are registered, but function form makes the required inputs reviewable.

**Note:** It can also be written as a transform when the first value is the input: `value | planningPlanTypeValidation(...)`.

### `planningPrimaryTargetEntityClass`

Single-target form of planningTargetEntityClass.

**Signature:** `planningPrimaryTargetEntityClass(relation, target, planType)`

**Example:**

```txt theme={null}
planningPrimaryTargetEntityClass($relations.primary_target_id, $.primary_target_id, $.plan_type)
```

**Availability:** Configured planning records only; function and transform forms are registered, but function form makes the required inputs reviewable.

**Note:** It can also be written as a transform when the first value is the input: `value | planningPrimaryTargetEntityClass(...)`.

### `planningPrimaryTargetValidation`

Single-target form of planningTargetValidation.

**Signature:** `planningPrimaryTargetValidation(planType, relation, target)`

**Example:**

```txt theme={null}
planningPrimaryTargetValidation($.plan_type, $relations.primary_target_id, $.primary_target_id)
```

**Availability:** Configured planning records only; function and transform forms are registered, but function form makes the required inputs reviewable.

**Note:** It can also be written as a transform when the first value is the input: `value | planningPrimaryTargetValidation(...)`.

### `planningRelationEntityKey`

Extracts a supported planning relation entity key from a qualified value.

**Signature:** `planningRelationEntityKey(value)`

**Example:**

```txt theme={null}
planningRelationEntityKey($.target_id)
```

**Availability:** Configured planning records only; function and transform forms are registered, but function form makes the required inputs reviewable.

**Note:** It can also be written as a transform when the first value is the input: `value | planningRelationEntityKey(...)`.

### `planningReviewCadenceValidation`

Requires review cadence for resource and risk-resilience plan categories.

**Signature:** `planningReviewCadenceValidation(planCategory, reviewCadence)`

**Example:**

```txt theme={null}
planningReviewCadenceValidation($.plan_category, $.review_cadence)
```

**Availability:** Configured planning records only; function and transform forms are registered, but function form makes the required inputs reviewable.

**Note:** It can also be written as a transform when the first value is the input: `value | planningReviewCadenceValidation(...)`.

### `planningTargetEntityClass`

Derives one target entity class from configured target relations and IDs.

**Signature:** `planningTargetEntityClass(relations, targetIds, planType)`

**Example:**

```txt theme={null}
planningTargetEntityClass($relations.target_ids, $.target_ids, $.plan_type)
```

**Availability:** Configured planning records only; function and transform forms are registered, but function form makes the required inputs reviewable.

**Note:** It can also be written as a transform when the first value is the input: `value | planningTargetEntityClass(...)`.

### `planningTargetValidation`

Validates that one compatible target is selected for the plan type.

**Signature:** `planningTargetValidation(planType, relations, targetIds)`

**Example:**

```txt theme={null}
planningTargetValidation($.plan_type, $relations.target_ids, $.target_ids)
```

**Availability:** Configured planning records only; function and transform forms are registered, but function form makes the required inputs reviewable.

**Note:** It can also be written as a transform when the first value is the input: `value | planningTargetValidation(...)`.

### `planningTimelineValidation`

Validates chronological and horizon-specific planning dates.

**Signature:** `planningTimelineValidation(startDate, endDate, planningHorizon)`

**Example:**

```txt theme={null}
planningTimelineValidation($.start_date, $.end_date, $.planning_horizon)
```

**Availability:** Configured planning records only; function and transform forms are registered, but function form makes the required inputs reviewable.

**Note:** It can also be written as a transform when the first value is the input: `value | planningTimelineValidation(...)`.

## Before you publish

* Start with a known value and confirm the expected result.
* Handle null, empty text, and empty lists deliberately.
* Do not place secrets, access tokens, or sensitive personal data in an expression.
* Read [expression contexts and availability](/reference/expressions/contexts) before copying an expression between features.

![Planning configuration and journey helpers in KayanOS](https://kayanos.app/docs-images/en/reference/expressions-helpers-planning.png)
