> For the complete documentation index, see [llms.txt](https://documentation.efalia.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://documentation.efalia.com/documentations/efalia-process/vue-ensemble-api/reference-stalk.md).

# Référence STalk

**STalk** est le langage d'expression côté serveur d'Efalia Process. Il permet d'écrire des expressions calculées qui s'évaluent dynamiquement au moment de l'exécution du workflow.

{% hint style="info" %}
**Voir aussi**

Pour une introduction et des exemples pratiques dans le contexte de la modélisation, consultez [Langages Process — STalk](/documentations/efalia-process/administration/administration-fonctionnelle/langages-process.md). Cette page est la **référence exhaustive** de toutes les fonctions disponibles.
{% endhint %}

***

## Contextes d'Utilisation

STalk s'utilise dans le Designer dans les contextes suivants :

| Contexte                                           | Exemple                                             |
| -------------------------------------------------- | --------------------------------------------------- |
| **Valeur calculée** d'un champ                     | `concat(Nom, " ", Prenom)`                          |
| **Règle d'activation** d'une opération             | `state() == "En attente" and Montant > 5000`        |
| **Sujet** d'un document (affiché dans le Panorama) | `"Facture " + Fournisseur + " — " + Montant + " €"` |
| **Colonne calculée** d'une vue                     | `timeFormat(createTime(), "dd/MM/yyyy")`            |
| **Condition** de routage                           | `Validation == "Approuvé"`                          |

***

## Types de Données

| Type STalk  | Description          | Exemple                                 |
| ----------- | -------------------- | --------------------------------------- |
| `WKString`  | Chaîne de caractères | `"bonjour"`                             |
| `WKInteger` | Entier 32 bits       | `42`                                    |
| `WKLong`    | Entier 64 bits       | `1234567890L`                           |
| `WKFloat`   | Flottant 32 bits     | `3.14f`                                 |
| `WKDouble`  | Flottant 64 bits     | `3.14159265`                            |
| `WKDate`    | Date/heure           | (retourné par `now()`, `createTime()`…) |
| `WKBoolean` | Booléen              | `true` / `false`                        |

***

## Opérateurs

### Arithmétiques

| Opérateur | Description              | Exemple                   |
| --------- | ------------------------ | ------------------------- |
| `+`       | Addition / concaténation | `Montant + TVA`           |
| `-`       | Soustraction             | `Total - Remise`          |
| `*`       | Multiplication           | `Quantite * PrixUnitaire` |
| `/`       | Division                 | `Total / NombreElements`  |
| `%`       | Modulo                   | `ID % 10`                 |

### Relationnels

| Opérateur | Description           |
| --------- | --------------------- |
| `==`      | Égalité               |
| `!=`      | Différence            |
| `<`       | Strictement inférieur |
| `<=`      | Inférieur ou égal     |
| `>`       | Strictement supérieur |
| `>=`      | Supérieur ou égal     |

### Logiques

| Opérateur | Description | Exemple                          |
| --------- | ----------- | -------------------------------- |
| `and`     | ET logique  | `Valide == true and Montant > 0` |
| `or`      | OU logique  | `Etat == "A" or Etat == "B"`     |
| `!`       | Négation    | `!Annule`                        |

### Ensembles (champs multivalués)

| Opérateur | Description                                |
| --------- | ------------------------------------------ |
| `union`   | Union de deux ensembles                    |
| `inter`   | Intersection de deux ensembles             |
| `minus`   | Différence d'ensembles                     |
| `in`      | Test d'appartenance (`valeur in ensemble`) |

***

## Conditionnelle

```
if (condition) valeur_si_vrai else valeur_si_faux
```

**Exemple :**

```
if (Montant > 10000) "Direction" else "Manager"
```

**Imbriqué :**

```
if (Urgence == "Haute") "Directeur"
else if (Montant > 5000) "Manager"
else "Responsable"
```

***

## Référence Complète des Fonctions

### Fonctions Document et Workflow

| Fonction          | Description                                         | Retour                |
| ----------------- | --------------------------------------------------- | --------------------- |
| `authorId()`      | ID de l'auteur (créateur) du document               | WKString              |
| `childrenIds()`   | IDs des documents fils                              | WKString (multivalué) |
| `createTime()`    | Date de création du document                        | WKDate                |
| `documentState()` | État actuel du document                             | WKString              |
| `documentType()`  | Type du document                                    | WKString              |
| `fatherId()`      | ID du document père                                 | WKString              |
| `id()`            | ID unique du document                               | WKString              |
| `state()`         | État actuel (alias de `documentState()`)            | WKString              |
| `userId()`        | ID de l'utilisateur courant                         | WKString              |
| `activeWriters()` | Acteurs ayant accès en écriture au document courant | WKString (multivalué) |

### Fonctions Acteurs et Rôles

| Fonction                | Description                                 | Retour                |
| ----------------------- | ------------------------------------------- | --------------------- |
| `actorsHistory()`       | Historique des acteurs ayant eu le document | WKString (multivalué) |
| `actorsRoles()`         | Acteurs par rôle sur le document courant    | WKString (multivalué) |
| `element(liste, index)` | Élément à l'index donné dans une liste      | WKString              |

### Fonctions Texte

| Fonction            | Description                                  | Exemple                    |
| ------------------- | -------------------------------------------- | -------------------------- |
| `concat(a, b, ...)` | Concaténation de chaînes                     | `concat(Nom, " ", Prenom)` |
| `text(valeur)`      | Conversion en texte                          | `text(Montant)`            |
| `debugText(expr)`   | Affiche l'expression et sa valeur (débogage) | `debugText(Montant)`       |

### Fonctions Numériques et Agrégation

| Fonction         | Description                      | Retour    |
| ---------------- | -------------------------------- | --------- |
| `count(liste)`   | Nombre d'éléments dans une liste | WKInteger |
| `sum(liste)`     | Somme des valeurs d'une liste    | WKDouble  |
| `product(liste)` | Produit des valeurs d'une liste  | WKDouble  |
| `minima(liste)`  | Valeur minimale d'une liste      | WKDouble  |
| `maxima(liste)`  | Valeur maximale d'une liste      | WKDouble  |

### Fonctions Date et Heure

| Fonction                   | Description                | Exemple                                  |
| -------------------------- | -------------------------- | ---------------------------------------- |
| `now()`                    | Date et heure actuelles    | `now()`                                  |
| `addDay(date, n)`          | Ajouter n jours à une date | `addDay(createTime(), 30)`               |
| `addMonth(date, n)`        | Ajouter n mois             | `addMonth(now(), 3)`                     |
| `addYear(date, n)`         | Ajouter n années           | `addYear(createTime(), 1)`               |
| `addHour(date, n)`         | Ajouter n heures           | `addHour(now(), 2)`                      |
| `addMinute(date, n)`       | Ajouter n minutes          | `addMinute(now(), 30)`                   |
| `addBusinessDay(date, n)`  | Ajouter n jours ouvrés     | `addBusinessDay(now(), 5)`               |
| `timeFormat(date, format)` | Formater une date en texte | `timeFormat(createTime(), "dd/MM/yyyy")` |

**Formats de date courants :**

| Pattern              | Résultat           |
| -------------------- | ------------------ |
| `"dd/MM/yyyy"`       | `15/03/2024`       |
| `"dd/MM/yyyy HH:mm"` | `15/03/2024 14:30` |
| `"yyyy-MM-dd"`       | `2024-03-15`       |

***

## Exemples Pratiques

### Sujet de document dynamique

```
"Facture " + Numero_Facture + " — " + Fournisseur + " (" + timeFormat(createTime(), "dd/MM/yyyy") + ")"
```

### Règle d'activation conditionnelle

```
Montant > 10000 and state() == "En cours de validation"
```

### Délai calculé

```
addBusinessDay(createTime(), 5)
```

### Règle avec rôle dynamique

```
if (Montant <= 1000) "Responsable_Achat"
else if (Montant <= 10000) "Directeur_Achat"
else "Directeur_General"
```

### Comptage de documents fils

```
count(childrenIds()) > 0
```

***

Pour aller plus loin :

* [Langages Process (introduction)](/documentations/efalia-process/administration/administration-fonctionnelle/langages-process.md)
* [Référence WKYJS](/documentations/efalia-process/vue-ensemble-api/reference-wkyjs.md)
* [JavaScript dans Process](/documentations/efalia-process/vue-ensemble-api/javascript-process.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://documentation.efalia.com/documentations/efalia-process/vue-ensemble-api/reference-stalk.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
