JSFiddle - React, Tailwind, and code Playground

by henser

JavaScript

function calculateReturns(exitPrice, capTable) {
  const totalShares = capTable.reduce((sum, { shares }) => sum + shares, 0);
  const totalInvested = capTable.reduce((sum, { invested }) => sum + shares, 0);
  const foundersShares = totalShares * 0.3333;
  const seriesAShares = totalShares * 0.0667;
  const seriesBShares = totalShares * 0.1;
  const seriesCShares = totalShares * 0.5;

  const capTableWithReturns = capTable.map(({ class: shareClass, shares, invested }) => {
    let payout = 0;

    if (shareClass === 'Common') {
      payout = exitPrice * (foundersShares / totalShares);
    } else if (shareClass === 'Preferred A') {
      payout = calculateLiquidationPreference(invested, exitPrice, 1, 2, seriesAShares / totalShares);
    } else if (shareClass === 'Preferred B') {
      payout = calculateLiquidationPreference(invested, exitPrice, 1, 2, seriesBShares / totalShares);
    } else if (shareClass === 'Preferred C') {
      payout = calculateLiquidationPreference(invested, exitPrice, 1, null, seriesCShares / totalShares);
    }

    return {
      class: shareClass,
      shares,
      invested,
      payout,
    };
  });

  const totalPayout = capTableWithReturns.reduce((sum, { payout }) => sum + payout, 0);

  return capTableWithReturns.map(({ class: shareClass, payout }) => ({
    class: shareClass,
    payout: payout + (exitPrice - totalPayout) * (shareClass === 'Common' ? foundersShares / totalShares : 0),
  }));
}

function calculateLiquidationPreference(invested, exitPrice, multiple, cap, proRataShare) {
  if (exitPrice <= invested * multiple) {
    return invested * multiple;
  }

  if (cap !== null && exitPrice <= invested * cap) {
    return invested + ((exitPrice - invested * cap) * proRataShare);
  }

  return invested + ((exitPrice - invested) * proRataShare);
}


const exitPrice = 60000000;
const capTable = [
  { class: 'Common', shares: 1000000, invested: 0 },
  { class: 'Preferred A', shares: 200000, invested: 900000 },
  { class:...