@axmit/investment-analytics-types
Version:
Types for investment-analytics services
303 lines (302 loc) • 10.2 kB
TypeScript
import { Omit, Required } from './typeHelpers';
import { ILongTerm } from './staticStatisticsTypes/longTerm';
export interface IBasicStatisticsInputLocation {
postcode: string;
}
export interface IBasicStatisticsLocation extends IBasicStatisticsInputLocation {
districts: string;
ceremonialCounty: string;
regions: string;
}
export interface IBasicStatisticsInputPurchase {
askingPrice: number;
stampDutyType?: string;
stampDuty?: number;
stampDutyIsOverridden?: boolean;
solicitorsFeePercent?: number;
sourcingFeePercent?: number;
otherFeesPercent?: number;
otherPurchaseCosts?: number;
}
export interface IBasicStatisticsPurchase extends Required<IBasicStatisticsInputPurchase> {
solicitorsFee: number;
sourcingFee: number;
otherFees: number;
totalPurchaseCosts: number;
}
export interface IBasicStatisticsInputTimeline {
projectDuration: number;
}
export interface IBasicStatisticsTimeline extends IBasicStatisticsInputTimeline {
}
export interface IBasicStatisticsInputUnit {
type: string;
quantity: number;
averageMarketRent?: number;
averageMarketPrice?: number;
estimatedSize?: number;
estimatedBuildCostPerSqFt?: number;
}
export interface IBasicStatisticsReportUnit extends Required<IBasicStatisticsInputUnit> {
buildCost: number;
}
export interface IBasicStatisticsGrossDevelopmentValue {
resiUnitsBMValuation: number;
resiUnitsCommercialValuation: number;
commUnitsCommercialValuation: number;
totalBasedOnBMValuation: number;
totalBasedOnCommercialValuation: number;
}
export interface IBasicStatisticsInputConstruction {
typeOfProject: string;
estimatedTypeOfConstructionCosts: string;
otherDevelopmentFeesPercent?: number;
totalDevelopmentCosts?: number;
professionalFeesPercent?: number;
otherDevelopmentCosts?: number;
totalDevelopmentCostsIsOverridden?: boolean;
planningCosts?: number;
finalSize?: number;
finalSizeIsOverridden?: boolean;
}
export interface IBasicStatisticsConstruction extends Required<IBasicStatisticsInputConstruction> {
typeOfConstructionWorks: string;
finalNumberOfUnits: number;
buildingCostsForAllUnits: number;
averageCostsPerUnit: number;
averageCostsPerFt: number;
professionalFees: number;
otherDevelopmentFees: number;
}
export interface IBasicStatisticsInputFinancing {
typeOfFinancing: string;
timeForLending: number;
ltvAmountForPurchasePercent?: number;
loanCost?: number;
lendingInterestRate?: number;
entryFeePercent?: number;
exitFeePercent?: number;
brokerFeePercent?: number;
otherFinancingCosts?: number;
ltvAmountForConstructionPercent?: number;
incomeFromProperty?: number;
}
export interface IBasicStatisticsFinancing extends Required<IBasicStatisticsInputFinancing> {
loanAmountForPurchase: number;
loanAmountForConstruction: number;
incomeFromPropertyDuringProjectTime: number;
loanAmountForPurchaseInclOtherPropertyIncome: number;
totalFees: number;
entryFee: number;
exitFee: number;
brokerFee: number;
purchaseEquity: number;
developmentEquity: number;
totalMoneyNeeded: number;
totalLoanToBeReceived: number;
totalOwnCapitalNeeded: number;
}
export interface IBasicStatisticsInputCashFlowStrategy {
rentalVoidsPercent?: number;
rentalManagementCostsPercent?: number;
rentalMOEPercent?: number;
repaymentYearsBMValuation?: number;
repaymentYearsCommValuation?: number;
}
export interface IBasicStatisticsInputLongTerm {
appreciationRate?: number;
incomeInflationRate?: number;
expenseInflationRate?: number;
otherSalesCosts?: number;
vacancyRate?: number;
propertySaleYear?: number;
loanPaymentFrequency?: string;
loanType?: string;
}
declare type ExcludedFields = 'repaymentYearsBMValuation' | 'repaymentYearsCommValuation';
export interface ICashFlowStrategy extends Required<Omit<IBasicStatisticsInputCashFlowStrategy, ExcludedFields>> {
GDVResiUnits: number;
GDVCommUnits: number;
totalGDV: number;
totalRentsWeeklyResiUnits: number;
totalRentsMonthlyResiUnits: number;
totalRentsPerYearResiUnits: number;
totalRentsWeeklyCommUnits: number;
totalRentsMonthlyCommUnits: number;
totalRentsPerYearCommUnits: number;
totalRentsMonthlyResiAndCommUnits: number;
totalRentsPerYearResiAndCommUnits: number;
averageRentPerUnitMonthlyResiUnits: number;
averageRentPerSqFtResiUnits: number;
voidsPerMonth: number;
voidsPerYear: number;
grossCashFlowPerYear: number;
grossCashFlowPerMonth: number;
managementCostsPerYear: number;
managementCostsPerMonth: number;
MOEPerYear: number;
MOEPerMonth: number;
cashFlowPerYearBeforeMortgage: number;
cashFlowPerMonthBeforeMortgage: number;
mortgagePaymentBMValuation: number;
netCashFlowPerMonthBMValuation: number;
netCashFLowPerYearBMValuation: number;
mortgagePaymentCommValuation: number;
netCashFlowPerMonthCommValuation: number;
netCashFLowPerYearCommValuation: number;
}
interface IBasicStatisticsInputRefinancing {
LTV?: number;
interestRate?: number;
}
interface IRefinancing extends Required<IBasicStatisticsInputRefinancing> {
repaymentYears: number;
loanValue: number;
moneyLeftInTheDeal: number;
}
export interface IRefinancingCommercial extends IRefinancing {
initialMoneySpent: number;
}
export interface IRefinancingBM extends IRefinancing {
initialMoneyInvested: number;
multipleUsed: number;
}
export interface IBasicStatisticsInputDivestmentStrategy {
legalFeesPercent?: number;
otherSalesCostsPercent?: number;
marketingCostsPercent?: number;
showHomeStagingPercent?: number;
}
export interface IDivestmentStrategy extends Required<IBasicStatisticsInputDivestmentStrategy> {
GDVResiUnits: number;
GDVCommUnits: number;
totalGDV: number;
expectedPricePerUnit: number;
totalSalesCosts: number;
legalFees: number;
marketingCosts: number;
showHomeStaging: number;
otherSalesCosts: number;
netSalesFinalPrice: number;
valueAdded: number;
netProfit: number;
}
export interface IReturnMultiples {
cashROIAfterRefinancingBMValuation: number;
grossYieldBMValuation: number;
capRateBMValuation: number;
ROICBMValuation: number;
annualisedROIC: number;
ROIOnInitialInvestedEquity: number;
annualisedROI: number;
debtCoverageBMValuation: number;
commercialToBMValuationMultiple: number;
grossYieldCommValuation: number;
capRateCommValuation: number;
cashROIAfterRefinancingCommercial: number;
debtCoverageCommValuation: number;
}
export interface IBasicStatisticsReport {
specialistComment?: string;
location: IBasicStatisticsLocation;
purchase: IBasicStatisticsPurchase;
timeline: IBasicStatisticsTimeline;
units: IBasicStatisticsReportUnit[];
grossDevelopmentValue: IBasicStatisticsGrossDevelopmentValue;
construction: IBasicStatisticsConstruction;
financing: IBasicStatisticsFinancing;
cashFlowStrategy: ICashFlowStrategy;
refinancing: {
commercialValuation: IRefinancingCommercial;
BMValuation: IRefinancingBM;
};
divestmentStrategy: IDivestmentStrategy;
returnMultiples: IReturnMultiples;
commercial?: IBasicStatisticsInputCommercial;
}
export interface IBasicStatisticsInputCommercial {
commercialUnitsAmount?: number;
totalRentsPerAnnumCommercial?: number;
totalValueOfCommercialUnits?: number;
}
export interface IInputRefinancingBM extends IBasicStatisticsInputRefinancing {
repaymentYears?: number;
multipleUsed?: number;
}
export interface IInputRefinancingCommercial extends IBasicStatisticsInputRefinancing {
repaymentYears?: number;
}
export interface IBasicStatisticsInputData {
dealName?: string;
description?: string;
sourceLink?: string;
location: IBasicStatisticsInputLocation;
purchase: IBasicStatisticsInputPurchase;
timeline: IBasicStatisticsInputTimeline;
units: IBasicStatisticsInputUnit[];
commercial?: IBasicStatisticsInputCommercial;
construction: IBasicStatisticsInputConstruction;
financing: IBasicStatisticsInputFinancing;
refinancing?: {
BMValuation?: IInputRefinancingBM;
commercialValuation?: IInputRefinancingCommercial;
};
longTermOptions?: IBasicStatisticsInputLongTerm;
cashFlowStrategy?: IBasicStatisticsInputCashFlowStrategy;
divestmentStrategy?: IBasicStatisticsInputDivestmentStrategy;
}
export declare enum ECalculationTypes {
Default = "default",
User = "user",
Specialist = "specialist",
LongTerm = "longTerm",
SalesHistory = "salesHistory",
ConfirmedHints = "confirmedHints"
}
export declare enum EBasicStatisticsReportStatuses {
New = "new",
Pending = "pending",
Success = "success"
}
export interface IBasicStatisticsReportDocumentCalculation {
type: ECalculationTypes;
data: IBasicStatisticsReport | ILongTerm | ISalesHistory[] | {
url: string;
};
}
export interface IBasicStatisticsReportDocument {
_id: string;
status: EBasicStatisticsReportStatuses;
calculations: IBasicStatisticsReportDocumentCalculation[];
configuration: IBasicStatisticsInputData;
calculationsTypes: ECalculationTypes[];
customData: any;
createdAt: Date;
calculatedAt: Date;
issuerId: string;
}
export interface ISalesHistory {
pricePaid: number;
deedDate: Date;
postcode: string;
typeOfProperty: string;
newBuild: boolean;
estateType: string;
saon: string;
paon: string | number;
street: string;
locality: string;
town: string;
district: string;
county: string;
transactionCategory: string;
linkedDataUri: string;
}
export declare type IEnumTpProp<IValueType> = {
[key in ECalculationTypes]?: IValueType;
};
export interface IBasicStatisticsSpecialistReportCalculations extends IBasicStatisticsReport {
}
export interface IBasicStatisticsSpecialistDocumentCalculation extends IEnumTpProp<IBasicStatisticsSpecialistReportCalculations> {
}
export {};