// Generated from Fairmint/OpenCapTable/OCF/Stakeholder.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 pkg9e70a8b3510d617f8a136213f33d6a903a10ca0eeec76bb06ba55d1ed9680f69 from '../../../../DA/Internal/Template';

import * as Fairmint_OpenCapTable_Types_Contact from '../../../../Fairmint/OpenCapTable/Types/Contact/module';
import * as Fairmint_OpenCapTable_Types_Core from '../../../../Fairmint/OpenCapTable/Types/Core/module';
import * as Fairmint_OpenCapTable_Types_Monetary from '../../../../Fairmint/OpenCapTable/Types/Monetary/module';
import * as Fairmint_OpenCapTable_Types_Stakeholder from '../../../../Fairmint/OpenCapTable/Types/Stakeholder/module';

export declare type OcfStakeholderStatusType =
  | 'OcfStakeholderStatusActive'
  | 'OcfStakeholderStatusLeaveOfAbsence'
  | 'OcfStakeholderStatusTerminationVoluntaryOther'
  | 'OcfStakeholderStatusTerminationVoluntaryGoodCause'
  | 'OcfStakeholderStatusTerminationVoluntaryRetirement'
  | 'OcfStakeholderStatusTerminationInvoluntaryOther'
  | 'OcfStakeholderStatusTerminationInvoluntaryDeath'
  | 'OcfStakeholderStatusTerminationInvoluntaryDisability'
  | 'OcfStakeholderStatusTerminationInvoluntaryWithCause'
;

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


export declare type OcfStakeholderType =
  | 'OcfStakeholderTypeIndividual'
  | 'OcfStakeholderTypeInstitution'
;

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


export declare type OcfContactInfoWithoutName = {
  phone_numbers: Fairmint_OpenCapTable_Types_Contact.OcfPhone[];
  emails: Fairmint_OpenCapTable_Types_Contact.OcfEmail[];
};

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


export declare type OcfContactInfo = {
  name: OcfName;
  phone_numbers: Fairmint_OpenCapTable_Types_Contact.OcfPhone[];
  emails: Fairmint_OpenCapTable_Types_Contact.OcfEmail[];
};

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


export declare type OcfName = {
  legal_name: string;
  first_name: damlTypes.Optional<string>;
  last_name: damlTypes.Optional<string>;
};

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


export declare type StakeholderOcfData = {
  id: string;
  name: OcfName;
  stakeholder_type: OcfStakeholderType;
  addresses: Fairmint_OpenCapTable_Types_Monetary.OcfAddress[];
  comments: string[];
  current_relationships: Fairmint_OpenCapTable_Types_Stakeholder.OcfStakeholderRelationshipType[];
  tax_ids: Fairmint_OpenCapTable_Types_Monetary.OcfTaxID[];
  contact_info: damlTypes.Optional<OcfContactInfoWithoutName>;
  current_status: damlTypes.Optional<OcfStakeholderStatusType>;
  issuer_assigned_id: damlTypes.Optional<string>;
  primary_contact: damlTypes.Optional<OcfContactInfo>;
};

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


export declare type Stakeholder = {
  context: Fairmint_OpenCapTable_Types_Core.Context;
  stakeholder_data: StakeholderOcfData;
};

export declare interface StakeholderInterface {
  Archive: damlTypes.Choice<Stakeholder, pkg9e70a8b3510d617f8a136213f33d6a903a10ca0eeec76bb06ba55d1ed9680f69.DA.Internal.Template.Archive, {}, undefined> & damlTypes.ChoiceFrom<damlTypes.Template<Stakeholder, undefined>>;
}
export declare const Stakeholder:
  damlTypes.Template<Stakeholder, undefined, '#OpenCapTable-v34:Fairmint.OpenCapTable.OCF.Stakeholder:Stakeholder'> &
  damlTypes.ToInterface<Stakeholder, never> &
  StakeholderInterface;

export declare namespace Stakeholder {
}


