Vai al contenuto

Valore terminale con il multiplo di uscita (tv.exit_multiple)

Restituisce il valore terminale all'orizzonte N come multiplo di mercato di una grandezza dell'anno N, come se l'azienda fosse ceduta in N. La grandezza determina l'approccio: EV/EBITDA, EV/EBIT ed EV/Sales danno un enterprise value (approccio asset side); il P/E e il P/BV (prezzo sul valore contabile del capitale proprio) danno un equity value (approccio equity side). I due approcci non si mescolano mai. Con il tasso e il flusso successivo sullo stesso approccio, il metodo riporta anche la crescita perpetua implicita nel multiplo, che rende confrontabile un'ipotesi di mercato con un'ipotesi di crescita.

Formula

\[ TV_N = \text{multiplo} \times \text{grandezza}_N, \qquad g_{\text{implicita}} = r - \frac{CF_{N+1}}{TV_N} \]

La crescita implicita è quella con cui tv.gordon, su \(CF_{N+1}\) e \(r\), restituisce lo stesso valore terminale. Quando la crescita implicita non è inferiore al tasso (un flusso successivo pari a zero o negativo), il metodo restituisce comunque il valore e dichiara in explain.conventions che il multiplo è incoerente con un valore a crescita stabile.

Il multiplo si applica alla grandezza dell'anno N (multiplo trailing), come dichiarato in explain.conventions. La grandezza book_value è il valore contabile del capitale proprio, con il multiplo P/BV in approccio equity side (decisione del maintainer del 2026-11-08).

Esempio

from decimal import Decimal

import fairmark as fm

# 8 × EBITDA 125, WACC 10%, FCFF in N + 1 pari a 60: il multiplo implica una crescita perpetua del 4%
r = fm.tv.exit_multiple(8, "ebitda", 125, rate="0.10", next_flow=60, growth_cap="0.03")
assert r.terminal_value == Decimal("1000")
assert r.basis == "enterprise"
assert r.implied_growth == Decimal("0.04")
assert r.growth_cap["status"] == "exceeded"

# Riportata nel modello di Gordon, la crescita implicita restituisce lo stesso valore
g = fm.tv.gordon("0.10", r.implied_growth, next_flow=60)
assert g.terminal_value == r.terminal_value

# P/E: un equity value
pe = fm.tv.exit_multiple(12, "earnings", 50)
assert (pe.terminal_value, pe.basis) == (Decimal("600"), "equity")

# P/BV: 1,4 × valore contabile del capitale proprio 750, costo del capitale proprio 9%, FCFE 63 in N + 1
pbv = fm.tv.exit_multiple("1.4", "book_value", 750, rate="0.09", next_flow=63)
assert (pbv.terminal_value, pbv.implied_growth) == (Decimal("1050"), Decimal("0.03"))

Input

Campo Significato Default
multiple Il multiplo, maggiore di 0 obbligatorio
metric ebitda, ebit, revenue (asset side), earnings (P/E) oppure book_value (P/BV, valore contabile del capitale proprio), entrambi equity side obbligatorio
metric_value La grandezza in N, in unità monetarie, maggiore di 0 obbligatorio
rate Tasso di attualizzazione sull'approccio della grandezza (WACC o costo del capitale proprio), frazione decimale per periodo; insieme a next_flow nessuno
next_flow Flusso in N + 1 sull'approccio della grandezza (FCFF o FCFE), in unità monetarie; insieme a rate nessuno
growth_cap Limite alla crescita implicita, frazione decimale per periodo; richiede rate e next_flow nessuno, riportato come assente

Output

Campo Significato
terminal_value Valore terminale in N, non attualizzato
basis enterprise oppure equity
implied_growth \(r - CF_{N+1} / TV_N\); null senza rate e next_flow
growth_cap La crescita implicita confrontata con il limite; null senza limite

Convenzioni (esplicite, riportate in explain.conventions)

Convenzione Opzioni Default
Grandezza e approccio ebitda, ebit, revenue (asset side); earnings, book_value (equity side) nessuno: va scelto
Tempistica della grandezza grandezza in N (multiplo trailing) fissa
Crescita implicita non inferiore al tasso riportata in explain.conventions, non rifiutata fissa
Tasso e flusso successivo della crescita implicita sull'approccio della grandezza non calcolata se assenti
Limite alla crescita valore oppure nessuno nessuno, riportato come assente

Errori

Codice Quando
FM-E001 È fornito solo uno tra rate e next_flow, growth_cap è fornito senza di essi, la grandezza è sconosciuta, oppure un campo manca o è sconosciuto
FM-E018 Il multiplo o la grandezza è pari a zero o negativo
FM-E008 Overflow aritmetico (input molto lontani da un intervallo realistico)

Precisione

Una moltiplicazione per il valore, una divisione e una sottrazione per la crescita implicita: risultato esatto fino alle 28 cifre significative del tipo decimale. Riportata in tv.gordon, la crescita implicita restituisce lo stesso valore terminale entro \(10^{-18}\) (l'arrotondamento di una divisione).

Verificato con

  • Casi di riferimento in tests/golden/tv.exit_multiple/, da forme chiuse e da un calcolo indipendente a 50 cifre (scripts/reference_tv.py).
  • Test unitari e Python riportano la crescita implicita in tv.gordon su diversi input.