
# Champs avancés

Neuf types de champs spécialisés couvrent les valeurs calculées, les identifiants générés, les contrôles interactifs et les données structurées. Cette page documente également `barcode` (un champ de la catégorie média). Tous partagent les [propriétés de base des champs](/fr/docs/tables-overview#proprietes-de-base-des-champs).

| Type          | Stocke / fait                                                    |
| ------------- | ---------------------------------------------------------------- |
| `formula`     | Une valeur calculée à partir d'une expression de formule.        |
| `count`       | Un comptage d'enregistrements liés.                              |
| `autonumber`  | Un nombre auto-incrémenté avec préfixe et remplissage par zéros. |
| `button`      | Un bouton interactif déclenchant une URL ou une automatisation.  |
| `json`        | Données JSON structurées.                                        |
| `array`       | Un tableau de valeurs typées.                                    |
| `color`       | Une valeur de couleur hexadécimale.                              |
| `code`        | Code source avec coloration syntaxique.                          |
| `geolocation` | Coordonnées latitude/longitude.                                  |
| `barcode`     | Une valeur de code-barres (catégorie média — voir ci-dessous).   |

## `formula`

Calcule une valeur à partir d'une expression de formule référençant d'autres champs.

| Propriété    | Description                                                                                                   |
| ------------ | ------------------------------------------------------------------------------------------------------------- |
| `formula`    | **Requis.** Expression à calculer. Prend en charge les références de champs, les opérateurs et les fonctions. |
| `resultType` | Type de données attendu du résultat (par ex. `string`, `number`, `boolean`, `date`).                          |
| `format`     | Format d'affichage du résultat (par ex. `currency`, `percentage`, `decimal`, `date`).                         |

```yaml
- { id: 1, name: total_price, type: formula, formula: 'price * quantity', resultType: number }
```

## `count`

Compte le nombre d'enregistrements liés via un champ de relation dans la même table. Un `rollup` simplifié.

| Propriété           | Description                                                                               |
| ------------------- | ----------------------------------------------------------------------------------------- |
| `relationshipField` | **Requis.** Nom du champ de relation dont les enregistrements liés doivent être comptés.  |
| `filters`           | Expression de filtre optionnelle — ne compte que les enregistrements liés correspondants. |

```yaml
- {
    id: 2,
    name: completed_task_count,
    type: count,
    relationshipField: tasks,
    filters: { field: status, operator: equals, value: completed },
  }
```

## `autonumber`

Un nombre auto-incrémenté avec un préfixe optionnel et un remplissage par zéros.

| Propriété   | Description                                                                  |
| ----------- | ---------------------------------------------------------------------------- |
| `prefix`    | Texte optionnel ajouté avant le nombre (par ex. `INV-`, `ORD-`).             |
| `startFrom` | Nombre de départ (entier ≥ 1).                                               |
| `digits`    | Nombre minimal de chiffres avec remplissage par zéros. Entier de **1 à 10**. |

```yaml
- { id: 3, name: invoice_number, type: autonumber, prefix: 'INV-', startFrom: 1000, digits: 5 }
```

## `button`

Un bouton interactif rendu sur les enregistrements qui déclenche une action.

| Propriété    | Description                                                              |
| ------------ | ------------------------------------------------------------------------ |
| `label`      | **Requis.** Texte du bouton.                                             |
| `action`     | **Requis.** Type d'action à déclencher (par ex. `url`, `automation`).    |
| `url`        | URL à ouvrir (lorsque `action` vaut `url`).                              |
| `automation` | Nom de l'automatisation à exécuter (lorsque `action` vaut `automation`). |

```yaml
- {
    id: 4,
    name: approve,
    type: button,
    label: Approve,
    action: automation,
    automation: approve_request,
  }
```

:::callout
**Corrigé par rapport aux docs antérieures.** Le champ button utilise `label`, `action`, `url` et `automation` — et **non** `buttonLabel` / `buttonAction` / `buttonUrl`.
:::

## `json`

Stocke des données JSON structurées avec une validation de schéma optionnelle.

| Propriété | Description                                          |
| --------- | ---------------------------------------------------- |
| `schema`  | Objet JSON Schema optionnel pour valider le contenu. |

```yaml
- { id: 5, name: metadata, type: json, required: false }
```

## `array`

Stocke un tableau de valeurs avec des contraintes de type et de longueur optionnelles.

| Propriété  | Description                                                 |
| ---------- | ----------------------------------------------------------- |
| `itemType` | Type de données des éléments du tableau (par ex. `string`). |
| `maxItems` | Nombre maximal d'éléments (entier ≥ 1).                     |

```yaml
- { id: 6, name: tags, type: array, itemType: string, maxItems: 10 }
```

## `color`

Stocke une valeur de couleur au format hexadécimal. Rendu avec un sélecteur de couleur.

| Propriété | Description                                                           |
| --------- | --------------------------------------------------------------------- |
| `default` | Couleur par défaut en hexadécimal sur 6 chiffres (par ex. `#3B82F6`). |

```yaml
- { id: 7, name: brand_color, type: color, required: true, default: '#3B82F6' }
```

## `code`

Stocke du code source en texte brut avec coloration syntaxique (CodeMirror 6).

| Propriété     | Description                                                                                                                              |
| ------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| `language`    | **Requis.** Langage pour la coloration (par ex. `javascript`, `typescript`, `yaml`, `json`, `python`, `sql`, `html`, `css`, `markdown`). |
| `lineNumbers` | Booléen. Afficher les numéros de ligne.                                                                                                  |
| `readOnly`    | Booléen. Rendre l'éditeur en lecture seule.                                                                                              |
| `minLines`    | Nombre minimal de lignes visibles (entier ≥ 1).                                                                                          |
| `maxLines`    | Nombre maximal de lignes visibles avant défilement (entier ≥ 1).                                                                         |
| `tabSize`     | Taille de tabulation en espaces. Entier de **1 à 8** (par défaut 2).                                                                     |

```yaml
- { id: 8, name: snippet, type: code, language: typescript, lineNumbers: true, tabSize: 2 }
```

## `geolocation`

Stocke des coordonnées géographiques (latitude et longitude) pour les fonctionnalités basées sur la localisation. Ne prend aucune propriété spécifique au type au-delà des propriétés de base des champs.

```yaml
- { id: 9, name: office_location, type: geolocation, required: true }
```

## `barcode`

Stocke une valeur de code-barres pour l'identification de produit et l'inventaire. (Classé dans la catégorie média, documenté ici avec les autres champs de valeur spécialisés.)

| Propriété | Description                                          |
| --------- | ---------------------------------------------------- |
| `format`  | Format de code-barres (par ex. `EAN-13`, `CODE128`). |

```yaml
- { id: 10, name: product_barcode, type: barcode, required: true, format: EAN-13 }
```

:::callout
**Les champs calculés se mettent à jour automatiquement.** `formula`, `count` et `rollup` (voir [Champs relationnels](/fr/docs/relational-fields)) sont dérivés — ils se recalculent lorsque leurs entrées changent et ne sont pas directement éditables.
:::
