// Generated from Fairmint/OpenCapTable/Types/Vesting.daml
/* eslint-disable @typescript-eslint/camelcase */
/* eslint-disable @typescript-eslint/no-namespace */
/* eslint-disable @typescript-eslint/no-use-before-define */
import * as jtv from '@mojotech/json-type-validation';
import * as damlTypes from '@daml/types';

import * as Fairmint_OpenCapTable_Types_Monetary from '../../../../Fairmint/OpenCapTable/Types/Monetary/module';

export declare type OcfEquityCompensationIssuanceData = {
  compensation_type: OcfCompensationType;
  quantity: damlTypes.Numeric;
  comments: string[];
  termination_exercise_windows: OcfTerminationWindow[];
  vestings: OcfVesting[];
  base_price: damlTypes.Optional<Fairmint_OpenCapTable_Types_Monetary.OcfMonetary>;
  early_exercisable: damlTypes.Optional<boolean>;
  exercise_price: damlTypes.Optional<Fairmint_OpenCapTable_Types_Monetary.OcfMonetary>;
  expiration_date: damlTypes.Optional<damlTypes.Time>;
};

export declare const OcfEquityCompensationIssuanceData:
  damlTypes.Serializable<OcfEquityCompensationIssuanceData> & {
  }
;


export declare type OcfCompensationType =
  | 'OcfCompensationTypeOptionNSO'
  | 'OcfCompensationTypeOptionISO'
  | 'OcfCompensationTypeOption'
  | 'OcfCompensationTypeRSU'
  | 'OcfCompensationTypeCSAR'
  | 'OcfCompensationTypeSSAR'
;

export declare const OcfCompensationType:
  damlTypes.Serializable<OcfCompensationType> & {
  }
& { readonly keys: OcfCompensationType[] } & { readonly [e in OcfCompensationType]: e }
;


export declare type OcfVesting = {
  amount: damlTypes.Numeric;
  date: damlTypes.Time;
};

export declare const OcfVesting:
  damlTypes.Serializable<OcfVesting> & {
  }
;


export declare type OcfTerminationWindow = {
  period: damlTypes.Int;
  period_type: OcfPeriodType;
  reason: OcfTerminationWindowType;
};

export declare const OcfTerminationWindow:
  damlTypes.Serializable<OcfTerminationWindow> & {
  }
;


export declare type OcfTerminationWindowType =
  | 'OcfTermVoluntaryOther'
  | 'OcfTermVoluntaryGoodCause'
  | 'OcfTermVoluntaryRetirement'
  | 'OcfTermInvoluntaryOther'
  | 'OcfTermInvoluntaryDeath'
  | 'OcfTermInvoluntaryDisability'
  | 'OcfTermInvoluntaryWithCause'
;

export declare const OcfTerminationWindowType:
  damlTypes.Serializable<OcfTerminationWindowType> & {
  }
& { readonly keys: OcfTerminationWindowType[] } & { readonly [e in OcfTerminationWindowType]: e }
;


export declare type OcfPeriodType =
  | 'OcfPeriodDays'
  | 'OcfPeriodMonths'
  | 'OcfPeriodYears'
;

export declare const OcfPeriodType:
  damlTypes.Serializable<OcfPeriodType> & {
  }
& { readonly keys: OcfPeriodType[] } & { readonly [e in OcfPeriodType]: e }
;

