Перейти к содержимому

Vesting Schedule Calculator

Вычислите график наделения акциями с опциональными периодами, ежемесячным, ежеквартальным или ежегодным наделением.

Об этом инструменте

Калькулятор графика наделения акциями помогает сотрудникам и владельцам опционов понять, как их компенсация в виде акций становится доступной со временем. Наделение акциями является обычным компонентом пакетов компенсации, особенно в стартапах и технологических компаниях, но механика может быть сложной с клифом, периодами наделения и различными графиками ускорения. Этот инструмент позволяет вам моделировать ваш конкретный сценарий наделения—будь то клиф, за которым следует ежемесячное наделение, квартальные вехи или ежегодные выделения—так чтобы вы могли точно увидеть, когда ваши акции или опционы становятся вашими для сохранения или продажи.

Чтобы использовать калькулятор, введите общее количество акций, период клифа наделения (часто один год, прежде чем какие-либо акции будут выданы) и предпочитаемый интервал наделения—ежемесячно, ежеквартально или ежегодно. Инструмент отобразит временную шкалу, показывающую, сколько акций выделяется в каждый интервал, совокупный прогресс наделения и оставшуюся невыданную сумму. Это особенно полезно при оценке предложений о работе, планировании финансовой стратегии или проверке вашего права на исполнение опционов перед важным событием компании.

Часто задаваемые вопросы

Реализация кода

from datetime import date, timedelta
from dateutil.relativedelta import relativedelta

def generate_vesting_schedule(
    total_shares, grant_date, vesting_years=4,
    cliff_months=12, frequency="monthly"
):
    freq_map = {"monthly": 1, "quarterly": 3, "annually": 12}
    period_months = freq_map[frequency]
    total_months = vesting_years * 12
    schedule = []
    cumulative = 0

    month = period_months
    while month <= total_months:
        vest_date = grant_date + relativedelta(months=month)
        is_cliff = cliff_months > 0 and month == max(
            (cliff_months // period_months) * period_months, period_months
        ) and month >= cliff_months

        if cliff_months > 0 and month < cliff_months:
            month += period_months
            continue

        if is_cliff:
            cliff_shares = round(cliff_months / total_months * total_shares)
            period_shares = cliff_shares
        elif month + period_months > total_months:
            period_shares = total_shares - cumulative
        else:
            period_shares = round(period_months / total_months * total_shares)

        cumulative += period_shares
        schedule.append({
            "date": vest_date, "period_shares": period_shares,
            "cumulative": cumulative, "pct": cumulative / total_shares * 100,
            "is_cliff": is_cliff
        })
        month += period_months

    return schedule

# 10,000 shares, 4 years, 1-year cliff, monthly vesting
schedule = generate_vesting_schedule(10000, date.today())
for row in schedule[:6]:
    cliff = " (CLIFF)" if row["is_cliff"] else ""
    print(f"{row['date']}: +{row['period_shares']} shares | {row['cumulative']:,} total | {row['pct']:.1f}%{cliff}")

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.