Terminal value, liquidation (tv.liquidation)¶
Returns the net liquidation value at the horizon N: the realisable values of the assets, less
the liabilities settled, the costs of the liquidation and the tax on the gains realised. Use
it for ventures without continuity after N or with separable assets. Every line appears in
explain with its label, so the value can be audited line by line. The basis is a required
input: equity when the liabilities listed include financial debt (the value is an equity
value), enterprise when they exclude it (an enterprise value); there is no default.
Formula¶
The result is negative when the liabilities and costs exceed the realisable values; it is returned as is, with no floor at zero, and the convention says so.
Example¶
from decimal import Decimal
import fairmark as fm
r = fm.tv.liquidation(
assets={"Land": 800, "Plant": 300, "Receivables": 200},
liabilities={"Bank loan": 600, "Suppliers": 250},
liquidation_costs={"Legal fees": 40, "Closure": 60},
tax_on_gains=30,
basis="equity", # the bank loan is listed: an equity value
)
assert r.terminal_value == Decimal("320")
assert r.total_liabilities == Decimal("850")
for step in r.steps[:3]:
print(step.label, step.value) # Assets: Land 800, Assets: Plant 300, Assets: Receivables 200
# Lists of (label, amount) pairs are accepted too
pairs = fm.tv.liquidation(
[("Lot", 500), ("Lot", 300)], [("Suppliers", 100)], [], 0, basis="enterprise"
)
assert pairs.terminal_value == Decimal("700")
Inputs¶
| Field | Meaning | Default |
|---|---|---|
assets |
List of {label, value}: realisable value at N of each asset, zero or positive |
required |
liabilities |
List of {label, value}: amount settled at N, zero or positive |
required |
liquidation_costs |
List of {label, value}: legal fees, closure, severance, zero or positive |
required |
tax_on_gains |
Tax on the gains realised, as an amount, zero or positive | required |
basis |
enterprise (financial debt not listed) or equity (financial debt listed) |
required, no default |
assets needs at least one line; the other lists may be empty. Labels must not be empty.
Outputs¶
| Field | Meaning |
|---|---|
terminal_value |
Net liquidation value at N, not discounted |
total_assets |
Sum of the realisable values |
total_liabilities |
Sum of the liabilities |
total_liquidation_costs |
Sum of the liquidation costs |
tax_on_gains |
Tax on gains, as given |
basis |
enterprise or equity, as declared |
Conventions (explicit, reported in explain.conventions)¶
| Convention | Options | Default |
|---|---|---|
| Timing | assets realised and liabilities settled at N | fixed |
| Tax on gains | given as an amount | fixed: not computed from a rate |
| Negative net value | returned as is | fixed: no floor at zero |
| Basis | enterprise or equity, declared; the liabilities listed must match it | none: must be given |
Errors¶
| Code | When |
|---|---|
FM-E001 |
assets is empty, a label is empty, basis is missing or not enterprise or equity, or a field is missing or unknown |
FM-E018 |
An asset value, a liability, a liquidation cost or the tax on gains is negative |
FM-E008 |
Arithmetic overflow (inputs far outside a realistic range) |
Accuracy¶
Additions and subtractions of the given amounts: exact.
Verified against¶
- Golden cases in
tests/golden/tv.liquidation/, with the sum written out in each file and recomputed by an independent script (scripts/reference_tv.py).