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
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.
Opens soon
This objective is verified and ready. It opens soon, once sign-in and payments are live.
Deliverable interface
The exact vocabulary the automated check enforces: keys, tokens, entry points, and worked examples. Generated from the verification source.
{
"constants": {},
"entryName": "electionPayout",
"expectNote": "expect is the comparison-space value (your return value goes through normalize first when one is published)",
"hiddenCaseCount": 15,
"hiddenCaseNames": [
"gen0",
"gen1",
"gen2",
"gen3",
"gen4",
"gen5",
"gen6",
"gen7",
"gen8",
"gen9",
"gen10",
"gen11",
"gen12",
"gen13",
"gen14"
],
"inputKeys": [
"exitValue",
"investedAmount",
"liquidationMultiple",
"participationCapMultiple",
"preferredOwnershipFraction",
"type"
],
"normalizeSource": "def _normalize_liq_pref_vs_convert_election(r):\n if not isinstance(r, dict): return r\n return {\"election\": r.get(\"election\"),\n \"preferredProceeds\": (None if r.get(\"preferredProceeds\") is None else round(float(r[\"preferredProceeds\"]), 2)),\n \"commonProceeds\": (None if r.get(\"commonProceeds\") is None else round(float(r[\"commonProceeds\"]), 2))}\n",
"returnShapes": [
[
"commonProceeds",
"election",
"preferredProceeds"
]
],
"signature": "def electionPayout(inp):",
"submission": "python exposing the entry function; inp is one input object; graded on held-out cases",
"tier": "calculator",
"visibleCases": [
{
"expect": {
"commonProceeds": 8000000,
"election": "convert",
"preferredProceeds": 2000000
},
"input": {
"exitValue": 10000000,
"investedAmount": 1000000,
"liquidationMultiple": 1,
"participationCapMultiple": 3,
"preferredOwnershipFraction": 0.2,
"type": "non_participating"
},
"name": "nonpart_convert"
},
{
"expect": {
"commonProceeds": 3000000,
"election": "take_preference",
"preferredProceeds": 2000000
},
"input": {
"exitValue": 5000000,
"investedAmount": 1000000,
"liquidationMultiple": 2,
"participationCapMultiple": 3,
"preferredOwnershipFraction": 0.2,
"type": "non_participating"
},
"name": "nonpart_take"
},
{
"expect": {
"commonProceeds": 3200000,
"election": "take_preference",
"preferredProceeds": 1800000
},
"input": {
"exitValue": 5000000,
"investedAmount": 1000000,
"liquidationMultiple": 1,
"participationCapMultiple": 3,
"preferredOwnershipFraction": 0.2,
"type": "full_participating"
},
"name": "full_participating"
},
{
"expect": {
"commonProceeds": 15000000,
"election": "convert",
"preferredProceeds": 5000000
},
"input": {
"exitValue": 20000000,
"investedAmount": 1000000,
"liquidationMultiple": 1,
"participationCapMultiple": 3,
"preferredOwnershipFraction": 0.25,
"type": "capped_participating"
},
"name": "capped_convert"
}
],
"vocabulary": [
"capped_participating",
"commonProceeds",
"convert",
"election",
"exitValue",
"full_participating",
"investedAmount",
"liquidationMultiple",
"non_participating",
"participationCapMultiple",
"preferredOwnershipFraction",
"preferredProceeds",
"take_preference",
"type",
"unknown preference type: "
]
}Get early access to STUD the day it goes live.