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

# Campi formula

> Crea campi formula usando i flussi di lavoro finché il supporto nativo non sarà disponibile.

Twenty non supporta ancora i campi formula nativi (in arrivo nel 2026), ma puoi ottenere lo stesso risultato utilizzando i flussi di lavoro. Questa soluzione alternativa consente di calcolare e compilare automaticamente i valori dei campi — dalle semplici concatenazioni alla logica aziendale più complessa.

## Casi d'Uso Comuni

| Caso d'uso               | Esempio di formula                 |
| ------------------------ | ---------------------------------- |
| **Nome completo**        | Nome + " " + Cognome               |
| **Importo previsto**     | Importo × Probabilità              |
| **Giorni alla scadenza** | Data di scadenza - Oggi            |
| **Giorni nella fase**    | Oggi - Data di ingresso nella fase |
| **Punteggio lead**       | Punti in base a criteri multipli   |

<Tip>
  Per un esempio completo del monitoraggio del tempo nelle fasi della pipeline, vedi [Traccia quanto tempo le opportunità restano in ogni fase](/l/it/user-guide/views-pipelines/how-tos/track-time-in-stage).
</Tip>

## Formula di base: concatenazione

### Esempio: compilazione automatica del nome completo

**Obiettivo**: combinare automaticamente nome e cognome in un campo nome completo.

### Impostazione

1. **Trigger**: il record viene aggiornato o creato (Persone)

2. **Filtro**: verifica che il nome o il cognome siano cambiati

3. **Azione di codice**:

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

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

  return { fullName };
};
```

4. **Aggiorna record**: imposta Nome completo su `{{code.fullName}}`

## Formula numerica: importo previsto

### Esempio: calcolare il ricavo previsto

**Obiettivo**: moltiplicare l'importo dell'opportunità per la probabilità per ottenere l'importo previsto.

Vedi [Come mostrare l'importo previsto nella pipeline](/l/it/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline) per il flusso di lavoro completo.

### Configurazione rapida

1. **Trigger**: il record viene aggiornato (Opportunità, campo Importo oppure Probabilità)

2. **Azione di codice**:

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

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

  return { expectedAmount };
};
```

3. **Aggiorna record**: imposta Importo previsto su `{{code.expectedAmount}}`

## Formula sulle date: calcolo dei giorni

### Esempio: giorni alla scadenza dell'attività

**Obiettivo**: calcolare quanti giorni mancano alla data di scadenza di un'attività.

### Impostazione

1. **Trigger**: il record viene aggiornato o creato (Attività, campo Data di scadenza)

2. **Azione di codice**:

```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. **Aggiorna record**: imposta Giorni alla scadenza su `{{code.daysUntilDue}}`

<Note>
  I valori negativi indicano attività scadute. Puoi usare questo campo per filtrare o ordinare le attività per urgenza.
</Note>

## Formula condizionale: punteggio lead

### Esempio: calcolare il punteggio lead in base a criteri

**Obiettivo**: assegnare un punteggio ai lead in base alla dimensione aziendale, al settore e al coinvolgimento.

### Impostazione

1. **Trigger**: il record viene aggiornato (Persone o Aziende)

2. **Azione di codice**:

```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. **Aggiorna record**: imposta Punteggio lead su `{{code.leadScore}}`

## Formula di testo: estrazione del dominio

### Esempio: estrarre il dominio dall'email

**Obiettivo**: estrarre e archiviare automaticamente il dominio dell'email.

### Impostazione

1. **Trigger**: il record viene aggiornato (Persone, campo Email)

2. **Azione di codice**:

```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. **Aggiorna record**: imposta il campo Dominio su `{{code.domain}}`

## Migliori Pratiche

### Prestazioni

* Attiva solo in caso di modifiche ai campi rilevanti
* Usa filtri per ignorare i record che non richiedono calcolo
* Evita calcoli complessi in flussi di lavoro ad alto volume

### Gestione degli errori

* Verifica i valori null/undefined prima dei calcoli
* Usa valori predefiniti quando i dati mancano
* Restituisci messaggi di errore chiari quando i calcoli falliscono

### Testing

* Esegui test con casi limite (campi vuoti, valori zero)
* Verifica manualmente i calcoli prima dell'attivazione
* Monitora le esecuzioni dei flussi di lavoro per risultati imprevisti

## Correlati

* [Come mostrare l'importo previsto nella pipeline](/l/it/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline)
* [Come tracciare il tempo in fase](/l/it/user-guide/views-pipelines/how-tos/track-time-in-stage)
* [Azioni dei flussi di lavoro](/l/it/user-guide/workflows/capabilities/workflow-actions)
