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

# Champs de formule

> Créez des champs de formule à l'aide des workflows jusqu'à ce que la prise en charge native soit disponible.

Twenty ne prend pas encore en charge les champs de formule natifs (prévu en 2026), mais vous pouvez obtenir le même résultat à l'aide de workflows. Cette solution de contournement vous permet de calculer et de renseigner automatiquement les valeurs de champs — des concaténations simples à une logique métier complexe.

## Cas d'utilisation courants

| Cas d'utilisation          | Exemple de formule                       |
| -------------------------- | ---------------------------------------- |
| **Nom complet**            | Prénom + " " + Nom de famille            |
| **Montant attendu**        | Montant × Probabilité                    |
| **Jours avant l'échéance** | Date d'échéance - Aujourd'hui            |
| **Jours dans l'étape**     | Aujourd'hui - Date d'entrée dans l'étape |
| **Score de lead**          | Points basés sur plusieurs critères      |

<Tip>
  Pour un exemple complet de suivi du temps dans les étapes du pipeline, voir [Suivre la durée de présence des opportunités dans chaque étape](/l/fr/user-guide/views-pipelines/how-tos/track-time-in-stage).
</Tip>

## Formule de base : concaténation

### Exemple : remplissage automatique du nom complet

**Objectif** : Combiner automatiquement le prénom et le nom de famille dans un champ de nom complet.

### Installation

1. **Déclencheur** : Enregistrement mis à jour ou créé (Personnes)

2. **Filtre** : Vérifier que le prénom ou le nom de famille a changé

3. **Action de code** :

```javascript theme={null}
export const main = async (params) => {
  const { firstName, lastName } = params;

  const fullName = [firstName, lastName]
    .filter(Boolean)
    .join(' ');

  return { fullName };
};
```

4. **Mettre à jour l'enregistrement** : Définir le nom complet sur `{{code.fullName}}`

## Formule numérique : montant attendu

### Exemple : calculer le revenu attendu

**Objectif** : Multiplier le montant de l'opportunité par la probabilité pour obtenir le montant attendu.

Voir [Comment afficher le montant attendu dans le pipeline](/l/fr/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline) pour le workflow complet.

### Configuration rapide

1. **Déclencheur** : Enregistrement mis à jour (Opportunités, champ Montant OU Probabilité)

2. **Action de code** :

```javascript theme={null}
export const main = async (params) => {
  const { amount, probability } = params;

  const expectedAmount = (amount || 0) * (probability || 0) / 100;

  return { expectedAmount };
};
```

3. **Mettre à jour l'enregistrement** : Définir le montant attendu sur `{{code.expectedAmount}}`

## Formule de date : calcul des jours

### Exemple : jours avant l'échéance de la tâche

**Objectif** : Calculer le nombre de jours restants avant la date d'échéance d'une tâche.

### Installation

1. **Déclencheur** : Enregistrement mis à jour ou créé (Tâches, champ Date d'échéance)

2. **Action de code** :

```javascript theme={null}
export const main = async (params) => {
  const { dueDate } = params;

  if (!dueDate) {
    return { daysUntilDue: null };
  }

  const due = new Date(dueDate);
  const today = new Date();
  const diffTime = due - today;
  const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));

  return { daysUntilDue: diffDays };
};
```

3. **Mettre à jour l'enregistrement** : Définir les jours avant l'échéance sur `{{code.daysUntilDue}}`

<Note>
  Des valeurs négatives indiquent des tâches en retard. Vous pouvez utiliser ce champ pour filtrer ou trier les tâches par urgence.
</Note>

## Formule conditionnelle : score de lead

### Exemple : calculer le score de lead en fonction de critères

**Objectif** : Noter les leads selon la taille de l'entreprise, le secteur d'activité et l'engagement.

### Installation

1. **Déclencheur** : Enregistrement mis à jour (Personnes ou Entreprises)

2. **Action de code** :

```javascript theme={null}
export const main = async (params) => {
  const { companySize, industry, hasEmail, hasPhone, source } = params;

  let score = 0;

  // Company size scoring
  if (companySize === 'Enterprise') score += 30;
  else if (companySize === 'Mid-Market') score += 20;
  else if (companySize === 'SMB') score += 10;

  // Industry scoring
  const targetIndustries = ['Technology', 'Finance', 'Healthcare'];
  if (targetIndustries.includes(industry)) score += 25;

  // Contact info scoring
  if (hasEmail) score += 10;
  if (hasPhone) score += 15;

  // Source scoring
  if (source === 'Referral') score += 20;
  else if (source === 'Website') score += 10;

  return { leadScore: score };
};
```

3. **Mettre à jour l'enregistrement** : Définir le score de lead sur `{{code.leadScore}}`

## Formule texte : extraction de domaine

### Exemple : extraire le domaine à partir de l'email

**Objectif** : Extraire et stocker automatiquement le domaine de l'email.

### Installation

1. **Déclencheur** : Enregistrement mis à jour (Personnes, champ Email)

2. **Action de code** :

```javascript theme={null}
export const main = async (params) => {
  const { email } = params;

  if (!email) return { domain: null };

  const domain = email.split('@')[1]?.toLowerCase();

  return { domain };
};
```

3. **Mettre à jour l'enregistrement** : Définir le champ Domaine sur `{{code.domain}}`

## Meilleures pratiques

### Performances

* Ne déclenchez que lors des modifications de champs pertinentes
* Utilisez des filtres pour ignorer les enregistrements qui n'ont pas besoin de calcul
* Évitez les calculs complexes dans les workflows à fort volume

### Gestion des erreurs

* Vérifiez les valeurs null/undefined avant les calculs
* Utilisez des valeurs par défaut lorsque des données manquent
* Renvoyez des messages d'erreur clairs lorsque les calculs échouent

### Tests

* Testez avec des cas limites (champs vides, valeurs zéro)
* Vérifiez manuellement les calculs avant l'activation
* Surveillez les exécutions de workflows pour détecter des résultats inattendus

## Articles connexes

* [Comment afficher le montant attendu dans le pipeline](/l/fr/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline)
* [Comment suivre le temps par étape](/l/fr/user-guide/views-pipelines/how-tos/track-time-in-stage)
* [Actions de workflows](/l/fr/user-guide/workflows/capabilities/workflow-actions)
