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

# Project-management helpers

> Project-specific health, setup, progress, governance, and closure helpers for configured project relation data.

## When to use these helpers

These helpers expect the project relation structure used by the relevant KayanOS project configuration. They are not meaningful for an unrelated entity or an ordinary form.

## Calling style

Call a helper as `pmProjectProgressPercent($inverseRelations)`. 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

### `pmProjectCharterStatus`

Returns the latest project-charter status, or missing when no charter can be found.

**Signature:** `pmProjectCharterStatus(inverseRelations)`

**Example:**

```txt theme={null}
pmProjectCharterStatus($inverseRelations)
```

**Availability:** Project configuration with the expected inverse relation data; function and transform forms are registered, but function form is clearer.

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

### `pmProjectClosureValidation`

Returns true unless closing the project violates outstanding deliverable, risk, issue, budget, resource, or lessons-learned requirements.

**Signature:** `pmProjectClosureValidation(status, inverseRelations)`

**Example:**

```txt theme={null}
pmProjectClosureValidation($.status, $inverseRelations)
```

**Availability:** Project configuration with the expected inverse relation data; function and transform forms are registered, but function form is clearer.

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

### `pmProjectCostHealth`

Returns cost health using direct values and configured budget/expenditure relations.

**Signature:** `pmProjectCostHealth(plannedBudget, actualCost, inverseRelations)`

**Example:**

```txt theme={null}
pmProjectCostHealth($.planned_budget, $.actual_cost, $inverseRelations)
```

**Availability:** Project configuration with the expected inverse relation data; function and transform forms are registered, but function form is clearer.

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

### `pmProjectDimensionHealth`

Combines a manual dimension override with indicator health for that dimension.

**Signature:** `pmProjectDimensionHealth(manualOverride, inverseRelations, dimension)`

**Example:**

```txt theme={null}
pmProjectDimensionHealth($.cost_override, $inverseRelations, "cost")
```

**Availability:** Project configuration with the expected inverse relation data; function and transform forms are registered, but function form is clearer.

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

### `pmProjectGovernanceRequired`

Returns whether the selected project classification requires governance.

**Signature:** `pmProjectGovernanceRequired(framework, approach, projectType, clientType)`

**Example:**

```txt theme={null}
pmProjectGovernanceRequired($.project_framework, $.delivery_approach, $.project_type, $.client_type)
```

**Availability:** Project configuration with the expected inverse relation data; function and transform forms are registered, but function form is clearer.

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

### `pmProjectHealthWithIndicators`

Combines a base health value with the worst matching indicator health.

**Signature:** `pmProjectHealthWithIndicators(baseHealth, inverseRelations, dimension)`

**Example:**

```txt theme={null}
pmProjectHealthWithIndicators($.schedule_health, $inverseRelations, "schedule")
```

**Availability:** Project configuration with the expected inverse relation data; function and transform forms are registered, but function form is clearer.

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

### `pmProjectIndicatorDimensionHealth`

Returns the worst indicator health for one project performance dimension.

**Signature:** `pmProjectIndicatorDimensionHealth(inverseRelations, dimension)`

**Example:**

```txt theme={null}
pmProjectIndicatorDimensionHealth($inverseRelations, "service_quality")
```

**Availability:** Project configuration with the expected inverse relation data; function and transform forms are registered, but function form is clearer.

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

### `pmProjectOverallHealth`

Returns overall project health from its dimension health values and status.

**Signature:** `pmProjectOverallHealth(scope, schedule, cost, quality, risk, status)`

**Example:**

```txt theme={null}
pmProjectOverallHealth($.scope_health, $.schedule_health, $.cost_health, $.quality_health, $.risk_health, $.status)
```

**Availability:** Project configuration with the expected inverse relation data; function and transform forms are registered, but function form is clearer.

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

### `pmProjectProgressPercent`

Returns a 0–100 project progress percentage from configured work-breakdown and deliverable relations.

**Signature:** `pmProjectProgressPercent(inverseRelations)`

**Example:**

```txt theme={null}
pmProjectProgressPercent($inverseRelations)
```

**Availability:** Project configuration with the expected inverse relation data; function and transform forms are registered, but function form is clearer.

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

### `pmProjectRiskHealth`

Returns risk health from open high/critical risks, issues, and overdue risk reviews.

**Signature:** `pmProjectRiskHealth(inverseRelations)`

**Example:**

```txt theme={null}
pmProjectRiskHealth($inverseRelations)
```

**Availability:** Project configuration with the expected inverse relation data; function and transform forms are registered, but function form is clearer.

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

### `pmProjectScheduleHealth`

Returns schedule health from overdue work, blocked dependencies, and the project end date.

**Signature:** `pmProjectScheduleHealth(inverseRelations, projectEndDate)`

**Example:**

```txt theme={null}
pmProjectScheduleHealth($inverseRelations, $.end_date)
```

**Availability:** Project configuration with the expected inverse relation data; function and transform forms are registered, but function form is clearer.

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

### `pmProjectSetupComplete`

Returns true when the required approved charter, accountable people, and dates are present.

**Signature:** `pmProjectSetupComplete(charterStatus, projectManager, sponsor, startDate, endDate)`

**Example:**

```txt theme={null}
pmProjectSetupComplete($.charter_status, $.project_manager_id, $.sponsor_id, $.start_date, $.end_date)
```

**Availability:** Project configuration with the expected inverse relation data; function and transform forms are registered, but function form is clearer.

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

### `pmProjectSetupProfileKey`

Builds a stable setup-profile key from project classification values.

**Signature:** `pmProjectSetupProfileKey(framework, approach, projectType, clientType)`

**Example:**

```txt theme={null}
pmProjectSetupProfileKey($.project_framework, $.delivery_approach, $.project_type, $.client_type)
```

**Availability:** Project configuration with the expected inverse relation data; function and transform forms are registered, but function form is clearer.

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

### `pmProjectSetupStage`

Returns the project setup, planning, execution, control, closing, or closed stage.

**Signature:** `pmProjectSetupStage(status, charterStatus)`

**Example:**

```txt theme={null}
pmProjectSetupStage($.status, pmProjectCharterStatus($inverseRelations))
```

**Availability:** Project configuration with the expected inverse relation data; function and transform forms are registered, but function form is clearer.

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

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

![Project-management helpers in KayanOS](https://kayanos.app/docs-images/en/reference/expressions-helpers-project.png)
