# Concepts

## Technical concept

Computed fields are defined in the schema at the UserPoint level.

The plugin behind it performs computations on a regular basis of a function's result, based on the user activities and profile updates.

## Definitions

### Computed Field

A computed field is an instance of a Datamart function applied within a specific context. To use it, it must be declared in your schema.

### Computed Field Function

A Computed Field Function is a [plugin](https://developer.mediarithmics.io/advanced-usages/plugins) of type `COMPUTED_FIELD_FUNCTION`, which can be created via the API following the standard [process](https://developer.mediarithmics.io/advanced-usages/plugins/creation) or through the computing console interface.

## Notions

A computed field is defined by these elements:

1. **State**: The **data stored** to build the result. It is the history. Each new activity updates the **State**.

   → the state is closely related to the *Lookback Window* - i.e. the historical depth of events to be analyzed.
2. **Logic**: The logic can be very simple (*like a formula, a sum, a count…*) or more complex (*like a logical operation*).
3. **Result**: The **data calculated and stored**. It contains the score(s) to be used.

   The result can be either a single variable or an object, depending on the complexity of the computation. It is computed from the **State**

Other interesting concepts to take into consideration:

* **Input Data**: Either new userActivities, either userProfile update, either both.
* **Period Update**: The regularity of updates (every x days - by default x=1).

## Lifecycle

1. **INITIAL** – The instance is created with this status.
2. **INITIAL\_LOADING** – Once declared in the schema and successfully validated, an initial loading job is triggered.
3. **ACTIVE** – The computed field becomes active if the job is completed successfully.

<img src="https://4196284719-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MMuoqM-5hJ5JY0WnAKL%2Fuploads%2FqU4BBQgtaRXJihrX6WKc%2Ffile.excalidraw.svg?alt=media&#x26;token=1b2aa9f2-3429-450d-b749-66d3e40af1fc" alt="Computed field lifecycle" class="gitbook-drawing">

## Technical flow

To better understand how a computed field works, here are the technical steps and the relation with the methods:

1. **Initialization**: The computed field is declared in the schema.
2. **State Updates**: Triggered by new user activities or profile updates.
3. **Result Calculation**: The result is computed based on the current state.
4. **Storage**: The result is stored for querying.
