import { Address } from './Address'; import { PaymentMethod, CriticalCode, ServiceOptIn, Region, Fuel, TariffId, ServiceType, Mode, Campaign, ReferredFrom, Utility, EligibilityStatus, AppointmentAvailability, BoltonName, BundleName } from './Enums'; import { LocalDate } from 'js-joda'; export interface AcquisitionRequest { account: Account; customer: Customer; sale: Sale; meters: Meter[]; smartMeterBookingInfo?: SmartMeterBookingInfo } export interface AcquisitionResponse { salesReference: string; customerId?: string; accountId?: string; } interface Account { electricityRegion: Region; fuel: Fuel; tariff: TariffId; tariffName: string; tariffRates: TariffRate[]; renewableFuelPercentage: number; contractLength: number; serviceType?: ServiceType; smart?: boolean; foundation: boolean; paymentMethod: PaymentMethod; payInArrears: boolean; bankAccount?: BankAccount; supplyAddress: Address; billingAddress?: Address; boltons: AcquisitionBolton[]; bundle?: AcquisitionBundle; } interface Customer { title?: string; firstName: string; lastName: string; dateOfBirth: LocalDate; phone: string; emailAddress?: string; password?: string; marketingOptIn: boolean; serviceOptIn: ServiceOptIn; criticalCode?: CriticalCode; } export interface AcquisitionBolton { name: BoltonName; cost: number; discountPercentage: number; } export interface AcquisitionBundle { name: BundleName; boltons: AcquisitionBolton[]; } export interface BankAccount { accountName: string; accountNumber: string; sortCode: string; directDebitAmount: number; } export interface TariffRate { fuel: Utility; unitRate: number; unitRateNight?: number; standingCharge: number; } interface Sale { saleType: Mode; brokerId: string; quoteDate: LocalDate; moveInDate?: LocalDate; annualQuotedAmount: number; quotedSaving: number; agentId?: string; campaign?: Campaign; referredFrom?: ReferredFrom; } export interface Meter { utility: Utility; meterPointNumber: string; meterType?: string; economy7?: boolean; previousSupplierId?: string; estimatedAnnualUsage?: number; registers: MeterRegister[]; } interface MeterRegister { registerNumber: string; read: string; readDate: LocalDate; } interface SmartMeterBookingInfo { eligibilityInfo?: SmartMeterEligibilityInfo; availability?: AppointmentAvailability; isIGT: boolean; isSmartMeterRequired: boolean; } interface SmartMeterEligibilityInfo { outcome?: EligibilityStatus; storageHeaters?: boolean; gasBrownBox?: boolean; metersDiffFloor?: boolean; inFlat?: boolean; }