export interface IReservation {
    posSource: IReservationPosSource;
    id: number;
    resGlobalInfo: IResGlobalInfo;
    roomStays?: IReservationRoomStay[];
    hotelCode?: number;
    languageCode?: string;
    uniqueId?: string;
    resGuests?: IReservationGuest[];
    services?: IReservationService[];
    reservationStatus?: string;
    policies?: IReservationPolicies;
    itineraryId?: string;
    isMerchandisedBooking?: boolean;
    merchandisedCurrencyExchgRate?: number;
    isPeStrikeThroughEnabled?: number;
    merchandisedPromoData?: IReservationMerchandisedPromoData;
    sessionId?: any;
    deviceSessionId?: any;
    isUpgradable?: boolean;
    hotelInfo?: IReservationHotelInfo;
    isModifiable?: boolean;
    extendedBookHoldDuration?: number;
    ebhResStatus?: string;
    advertisementId?: string;
    promotionId?: string;
    isLimitedUsePromotionCodeApplied?: boolean;
}
export interface IReservationHotelInfo {
    hotelSettings: IReservationHotelInfoSettings;
}
export interface IReservationHotelInfoSettings {
    enableFlexibleTaxes: boolean;
}
export interface IReservationPolicies {
    cancellationPolicies: IReservationCancellationPolicy[];
    guaranteePolicies: IReservationGuaranteePolicy[];
}
export interface IReservationGuaranteePolicy {
    acceptTender: string;
    acceptTenderCode: string;
    endDate: string;
    policyCode: string;
    policyDescription: string;
    policyType: string;
    startDate: string;
    paymntCardTypeList: string[];
}
export interface IReservationCancellationPolicy {
    cancellationPenalty: IReservationCancellationPenalty[];
    acceptTender: string;
    endDate: string;
    nonRefundable: boolean;
    policyCode: string;
    policyDescription: string;
    policyType: string;
    startDate: string;
}
export interface IReservationCancellationPenalty {
    checkInDate: string;
    deadLineDate: string;
    deadLineDurationHours: string;
    deadLineHour: string;
}
export interface IReservationGuest {
    uniqueId?: IReservationGuestUniqueId;
    profile: IReservationGuestProfile;
}
export interface IReservationGuestUniqueId {
    id: string;
    idContext: string;
}
export interface IReservationGuestProfile {
    shareAllMarketInd: string;
    customer: IReservationGuestProfileCustomer;
    consents: IReservationGuestConsent[];
}
export interface IReservationGuestConsent {
    id: number;
    consentInd: string;
    consentText: string;
}
export interface IReservationGuestProfileCustomer {
    namePrefix: string;
    givenName: string;
    surName: string;
    telephone: IReservationGuestProfileCustomerTelephone[];
    email: string;
    address: IReservationGuestProfileCustomerAddress[];
}
export interface IReservationGuestProfileCustomerAddress {
    addressLine1?: string;
    addressLine2?: string;
    cityName?: string;
    countryCode?: string;
    countryName?: string;
    postalCode?: string;
    stateCode?: string;
    stateName?: string;
    useType?: string;
}
export interface IReservationGuestProfileCustomerTelephone {
    phoneNumber: string;
    phoneUseType: string;
}
export interface IReservationPosSource {
    bookingChannel?: IReservationBookingChannel;
    companyName?: IReservationCompanyName;
    requestorIds?: IRequestorId[];
}
export interface IRequestorId {
    codeType: string;
    id: string;
}
export interface IReservationCompanyName {
    companyShortName: string;
    code: string;
}
export interface IReservationBookingChannel {
    code: string;
    companyShortName: string;
    type: string;
    division: string;
}
export interface IResGlobalInfo {
    arrivalTime?: string;
    guestCounts: IReservationGuestCount[];
    timeSpan: IReservationTimeSpan;
    comments?: IReservationComment[];
    guaranteesAccepted?: IReservationGuaranteeAccepted[];
}
export interface IReservationGuaranteeAccepted {
    variantId?: number;
    primaryBookingRequest: boolean;
    paymentCard: IReservationPaymentCard;
    alternatePayment?: any;
    loyaltyRedemption?: ILoyaltyRedemption[];
    voucherRedemption?: IVoucherRedemption;
    paymentMethodId?: number;
}
export interface IVoucherRedemption {
    redemptionMode?: number;
    redemptionQuantity?: number;
    identifier?: string;
    rewardPartnerId?: number;
}
export interface ILoyaltyRedemption {
    redemptionQuantity: number;
    pointsValue: number;
    memberNumber?: string;
    programName: string;
    rewardTypeId: number;
    tierName: string;
}
export interface IReservationPaymentCard {
    cardHolderInfoRequired: boolean;
    cardCode?: string;
    cardHolderName?: string;
    cardNumber?: string;
    cardType?: string;
    expireDate?: string;
    seriesCode?: string;
}
export interface IReservationComment {
    comment: string;
}
export interface IReservationGuestCount {
    ageQualifyingCode: string;
    count: string;
}
export interface IReservationTimeSpan {
    start: string;
    end: string;
    duration?: string;
}
export interface IReservationRoomStay {
    ratePlans?: IReservationRatePlan[];
    roomRates?: IReservationRoomRate[];
    depositPayments?: IReservationRoomStayDepositPayments;
    total?: IReservationRoomStayTotal;
    taxes?: IReservationRoomStayTaxes;
    prodTaxes?: IReservationRoomStayProdTaxes;
    discountCode?: string;
}
export interface IReservationRoomStayProdTaxes {
    taxBreakoutEnabled: boolean;
    outTotalExclusiveTaxes?: IReservationInclusiveExclusiveTaxes;
    outTotalInclusiveTaxes?: IReservationInclusiveExclusiveTaxes;
    inTotalExclusiveTaxes?: IReservationInclusiveExclusiveTaxes;
}
export interface IReservationInclusiveExclusiveTaxes {
    resortFee: number;
    serviceCharges: number;
    totalTax: number;
    taxes: IReservationInclusiveExclusiveTaxesList[];
}
export interface IReservationInclusiveExclusiveTaxesList {
    beDescription: string;
    currency: string;
    sortOrder: number;
    taxAmt: number;
    taxChrgFreq: number;
    taxDate: string;
    taxDetType: string;
    taxName: string;
    taxRate: number;
    taxSrc: string;
}
export interface IReservationRoomStayTaxes {
    resortFee: number;
    serviceCharge: number;
}
export interface IReservationRoomStayTotal {
    amountAfterTax: number;
    amountAfterTaxRoom: number;
    amountBeforeTax: number;
    amountBeforeTaxRoom: number;
    amountBeforeTaxServ: number;
    discount: number;
    discountIndicator: boolean;
    discountIndicatorRoom: boolean;
    discountIndicatorServ: boolean;
    discountRoom: number;
    discountServ: number;
    grossAmountBeforeTax: number;
    grossAmountBeforeTaxRoom: number;
    grossAmountBeforeTaxServ: number;
    pkgIncTaxAmountTotal: number;
    taxAmountTotal: number;
    taxAmountTotalServ: number;
}
export interface IReservationRoomStayDepositPayments {
    depositAmt?: string;
}
export interface IReservationGuaranteePolicy {
    isInstallmentEnabled?: boolean;
}
export interface IReservationRatePlan {
    ratePlanCode?: string;
    ratePlanType?: string;
    ratePlanName?: string;
    maxStay?: number;
    pmsRateExternalCode?: string;
    guaranteePolicy?: IReservationGuaranteePolicy;
}
export interface IReservationRoomRate {
    numberOfUnits: number;
    roomTypeCode?: string;
    roomTypeName?: string;
    pmsRoomExternalCode?: string;
    rates?: IReservationDailyRate[];
}
export interface IReservationDailyRate {
    amountBeforeTax: number;
    discount: number;
    discountIndicator: boolean;
    effectiveDate: string;
    grossAmountBeforeTax: number;
}
export interface IReservationItineraryTotals {
    itineraryInTotalExclusiveResortFeeTotal: number;
    itineraryInTotalExclusiveServiceChargeTotal: number;
    itineraryInTotalExclusiveTaxTotal: number;
    itineraryOutTotalExclusiveResortFeeTotal: number;
    itineraryOutTotalExclusiveServiceChargeTotal: number;
    itineraryOutTotalExclusiveTaxTotal: number;
    itineraryOutTotalInclusiveResortFeeTotal: number;
    itineraryOutTotalInclusiveServiceChargeTotal: number;
    itineraryOutTotalInclusiveTaxTotal: number;
    itineraryPkgIncTaxAmountTotal: number;
    itineraryResortFeeTotal: number;
    itineraryRoomGrandTotal: number;
    itineraryRoomSubTotal: number;
    itineraryRoomTotalTaxes: number;
    itineraryServiceChargeTotal: number;
    itineraryTaxAmountTotalServ: number;
}
export interface IReservationItineraryPaymentInfo {
    itineraryDepositAmt: number;
}
export interface IReservationService {
    description: string;
    serviceCategory: string;
    serviceName: string;
    serviceOptions: IServiceOption[];
    servicePricingType: string;
    serviceTypeId: string;
    sortOrder: number;
    totalPrice: IServiceTotalPrice;
    isAutoCheckout: boolean;
    isOverBookingAllowed: boolean;
    maxLimit: number;
    serviceCategoryId: number;
}
export interface IServiceTotalPrice {
    baseAmountBeforeTax: number;
    amountBeforeTax: number;
    amountAfterTax: number;
    taxAmount: number;
    amountBeforeDiscount: number;
    discountAmount: number;
    unitPrice: number;
    unitDiscount: number;
}
export interface IServiceOption {
    dailyRates: IServiceOptionDailyRate[];
    serviceOptionDesc: string;
    serviceOptionId: string;
    serviceOptionName: string;
}
export interface IServiceOptionDailyRate {
    price: IServiceOptionDailyRatePrice[];
    quantity?: number;
    serviceDate: string;
    serviceOptionRefId: string;
    adultQuantity?: number;
    childQuantity?: number;
    childUnitDiscount: number;
    adultUnitDiscount: number;
}
export interface IServiceOptionDailyRatePrice {
    baseAmountBeforeTax: number;
    amountBeforeTax: number;
    amountAfterTax: number;
    taxAmount: number;
    priceType: string;
    amountBeforeDiscount: number;
    discountAmount: number;
    unitPrice: number;
    unitDiscount: number;
}
export interface IReservationPaymentInformation {
    billingAddress: IReservationGuestProfileCustomerAddress;
    guaranteesAccepted: IReservationGuaranteeAccepted[];
    isRateAccessCodeRequired: boolean;
    isIataCodeRequired: boolean;
}
export interface IReservationMerchandisedPromoData {
    labelText: string;
    merchandisingTerms: string;
    promotionId: string;
    promotionName: string;
    saleText: string;
    valueAddedText: string;
}
