STUD
← Plays

Compute · Assess & Decide · Analysis & Finance

Liquidation preference vs convert election calculator

The founder can predict, deterministically, what each preferred holder will choose at any exit value and the resulting proceeds split.

You receive: A pure function electionPayout(exitValue, investedAmount, liquidationMultiple, type, participationCapMultiple, preferredOwnershipFraction) -> { election (enum: take_preference|convert), preferredProceeds, commonProceeds } graded on hidden numeric cases. Assumes single preferred class, no debt, no option pool, residual to common is shared pro rata; preferred holds preferredOwnershipFraction of fully-converted shares.

Part of Pitch Investors

Example

A sample of what this play produces. Your result is generated for your inputs.

"""Liquidation preference vs convert election.

Authored as STUD.com's own term-sheet planning tool for the illustrative
$1,000,000 pre-seed target (labeled illustrative, not a committed raise).
Given an exit value, it returns the rational preferred-holder election
(take the liquidation preference, or convert to common) and the resulting
proceeds split, under the stated assumptions: a single preferred class,
no debt, no option pool, residual to common shared pro rata, and the
preferred holder owning preferredOwnershipFraction of fully-converted shares.

Worked illustrative STUD scenario: a 1x non-participating preferred that
invested $1,000,000 for 20% would convert at any exit above $5,000,000
(where 0.20 * exit exceeds the $1,000,000 preference); at a $10,000,000
exit it converts and takes $2,000,000, leaving $8,000,000 to common.
"""


def electionPayout(input):
    typ = str(input["type"]).strip().lower()
    exit_v = float(input["exitValue"])
    invested = float(input["investedAmount"])
    mult = float(input["liquidationMultiple"])
    own = float(input["preferredOwnershipFraction"])
    preference = mult * invested

    if typ == "non_participating":
        # The holder takes the higher of the straight preference (capped by
        # the exit value itself) or the as-converted pro rata share.
        convert_value = own * exit_v
        if convert_value > preference:
            election, preferred = "convert", convert_value
        else:
            election, preferred = "take_preference", min(preference, exit_v)
    elif typ == "full_participating":
        # Preference first, then pro rata participation in the residual.
        # Converting can never beat this, so the election is always
        # take_preference; below the preference the holder sweeps the exit.
        if exit_v >= preference:
            take = preference + own * (exit_v - preference)
        else:
            take = exit_v
        election, preferred = "take_preference", min(take, exit_v)
    elif typ == "capped_participating":
        # Participation is capped at capMultiple * invested; past the cap
        # the rational holder converts when pro rata exceeds the capped take.
        cap_value = float(input["participationCapMultiple"]) * invested
        participating = min(preference + own * max(0.0, exit_v - preference),
                            cap_value)
        convert_value = own * exit_v
        if convert_value > participating:
            election, preferred = "convert", convert_value
        else:
            election, preferred = "take_preference", participating
    else:
        raise ValueError("unknown preference type: " + typ)

    common = exit_v - preferred
    return {
        "election": election,
        "preferredProceeds": round(preferred, 2),
        "commonProceeds": round(common, 2),
    }

Opens later

This play is not open to run yet, so it has no price. Leave your email and STUD will tell you when it opens.

Scope of the check

What's verified: STUD verifies the function reproduces the reference election and payout on hidden numeric cases under the stated single-class, debt-free, no-option-pool assumptions. STUD does NOT model multi-class stacks, option-pool dilution, debt seniority, or real-world tax (e.g. SEIS/EIS) effects.