using Hcs.Service.Async.HouseManagement;
using System;

namespace Hcs.ClientNet.Api.Payload.HouseManagement
{
    // http://open-gkh.ru/HouseManagement/SupplyResourceContractType.html
    public class ImportSupplyResourceContractProjectPayload
    {
        /// <summary>
        /// Если договор не является публичным и/или присутствует заключенный на бумажном носителе
        /// (электронной форме) и/или не заключен в отношении нежилых помещений в многоквартирных домах,
        /// то равно true, иначе - false
        /// </summary>
        public bool isContract;

        /// <summary>
        /// Номер договора
        /// </summary>
        public string contractNumber;

        /// <summary>
        /// Дата заключения
        /// </summary>
        public DateTime signingDate;

        /// <summary>
        /// Дата вступления в силу
        /// </summary>
        public DateTime effectiveDate;

        /// <summary>
        /// Необязательное. Договор заключен на неопределенный срок или нет.
        /// </summary>
        public bool indefiniteTerm;

        /// <summary>
        /// Необязательное. Автоматически пролонгировать договор на один год при наступлении
        /// даты окончания действия или нет.
        /// </summary>
        public bool automaticRollOverOneYear;

        /// <summary>
        /// Условное. Дата окончания действия. Обязательно для заполнения, если
        /// <see cref="automaticRollOverOneYear"/> = true.
        /// </summary>
        public DateTime? comptetionDate;

        /// <summary>
        /// Условное. Период передачи текущих показаний по индивидуальным приборам учета. Обязателен для
        /// заполнения, если поле <see cref="volumeDepends"/> = true ИЛИ если поле
        /// <see cref="meteringDeviceInformation"/> = true.
        /// </summary>
        public SupplyResourceContractProjectTypePeriod period;

        /// <summary>
        /// Необязательное. Показывает, разрешена ли гражданам передача текущих показаний по
        /// индивидуальным приборам учета в любой день месяца. Заполнение возможно только если: в настройках
        /// организации установлена настройка "Разрешить передачу гражданам показаний индивидуальных или общих
        /// (квартирных) приборов учета в любой день месяца" ИЛИ в настройках организации установлена настройка
        /// "Разрешить передачу гражданам показаний индивидуальных или общих (квартирных) приборов учета только
        /// в сроки, установленные в договоре, или в любой день месяца, если в договоре установлен признак
        /// "Разрешить передачу показаний приборов учета в любой день месяца" И заполнен <see cref="period"/>.
        /// </summary>
        public bool indicationsAnyDay;

        /// <summary>
        /// Необязательное. Ссылка на НСИ "Основание заключения договора" (реестровый номер 58). Значения
        /// брать из <see cref="Registry.Registry58"/>.
        /// </summary>
        public nsiRef[] contractBase;

        /// <summary>
        /// Вторая сторона договора. Подходящие типы:
        /// <see cref="SupplyResourceContractProjectTypeApartmentBuildingOwner"/>,
        /// <see cref="SupplyResourceContractProjectTypeApartmentBuildingRepresentativeOwner"/>,
        /// <see cref="SupplyResourceContractProjectTypeApartmentBuildingSoleOwner"/>,
        /// <see cref="SupplyResourceContractProjectTypeLivingHouseOwner"/>,
        /// <see cref="SupplyResourceContractProjectTypeOrganization"/> либо true, если это договор оферты.
        /// </summary>
        public object counterparty;

        /// <summary>
        /// Если в договоре в наличии плановый объем и режим подачи поставки ресурсов то true, иначе - false
        /// </summary>
        public bool isPlannedVolume;

        /// <summary>
        /// Необязательное. Тип ведения планового объема и режима подачи: D - в разрезе договора,
        /// O - в разрезе объектов жилищного фонда. Заполняется при наличии в договоре планового объема и
        /// режима поставки ресурсов.
        /// </summary>
        public SupplyResourceContractProjectTypePlannedVolumeType? plannedVolumeType;

        /// <summary>
        /// Предмет договора. Максимум 100 записей.
        /// </summary>
        public SupplyResourceContractProjectTypeContractSubject[] contractSubject;

        /// <summary>
        /// Условное. Размещение информации о начислениях за коммунальные услуги осуществляет: R(SO)- РСО,
        /// P(roprietor) - исполнитель коммунальных услуг. Заполняется, если порядок размещения информации
        /// о начислениях за коммунальные услуги ведется в разрезе договора.
        /// </summary>
        public SupplyResourceContractProjectTypeCountingResource? countingResource;

        /// <summary>
        /// Показатели качества коммунальных ресурсов и температурный график ведутся: D - в разрезе договора,
        /// O - в разрезе объектов жилищного фонда
        /// </summary>
        public SupplyResourceContractProjectTypeSpecifyingQualityIndicators specifyingQualityIndicators;

        /// <summary>
        /// Необязательное. Признак "Отсутствие присоединения сетей объектов жилищного фонда к централизованной
        /// системе водоснабжения". Может быть указан, только если показатели качества коммунальных ресурсов
        /// ведутся в разрезе договора и предмет договора включает коммунальную услугу  "Холодное водоснабжение"
        /// И/ИЛИ "Горячее водоснабжение".
        /// </summary>
        public bool noConnectionToWaterSupply;

        /// <summary>
        /// Необязательное. Показатель качества (содержащийся в справочнике показателей качества). Обязательно
        /// для заполнения, если показатели качества указываются в разрезе договора. Для пары КУ и КР
        /// "Горячее водоснабжение" и "Питьевая вода" указываются актуальные показатели, определенные для КР
        /// "Горячая вода" в справочнике показателей качества коммунальных ресурсов. Для пары КУ и КР
        /// "Горячее водоснабжение" и "Тепловая энергия" информация о показателях качества не заполняется
        /// только в том случае, если для договора (если показатели ведутся в разрезе договора) или
        /// ОЖФ в договоре (если показатели ведутся в разрезе ОЖФ) также указана пара КУ и КР
        /// "Горячее водоснабжение" и "Питьевая вода".
        /// </summary>
        public SupplyResourceContractProjectTypeQuality[] quality;

        /// <summary>
        /// Необязательное. Иной показатель качества коммунального ресурса (не содержащийся в справочнике
        /// показателей качества).
        /// </summary>
        public SupplyResourceContractProjectTypeOtherQualityIndicator[] otherQualityIndicator;

        /// <summary>
        /// Необязательное. Информация о температурном графике. Доступно для заполнения только если в
        /// предмете договора хотя бы раз встречается ресурс "Тепловая энергия".
        /// </summary>
        public SupplyResourceContractProjectTypeTemperatureChart[] temperatureChart;

        /// <summary>
        /// Условное. Срок представления (выставления) платежных документов, не позднее. Является
        /// обязательным, если вторая сторона договора отличается от "Управляющая организация" ИЛИ если
        /// заполнено поле <see cref="meteringDeviceInformation"/>. Не заполняется, если
        /// <see cref="oneTimePayment"/> = true.
        /// </summary>
        public SupplyResourceContractProjectTypeBillingDate billingDate;

        /// <summary>
        /// Условное. Срок внесения платы, не позднее. Является обязательным, если вторая сторона договора
        /// отличается от "Управляющая организация" И договор не является публичным и/или присутствует
        /// заключенный на бумажном носителе или в электронной форме И в поле
        /// <see cref="oneTimePayment"/> = false. Не заполняется, если <see cref="oneTimePayment"/> = true.
        /// </summary>
        public SupplyResourceContractProjectTypePaymentDate paymentDate;

        /// <summary>
        /// Условное. Срок предоставления информации о поступивших платежах, не позднее. Является
        /// обязательным, если второй стороной договора является "Управляющая организация",
        /// "Размещение информации о начислениях за коммунальные услуги осуществляет" = "РСО" И
        /// договор не является публичным и/или присутствует заключенный на бумажном носителе или в
        /// электронной форме.
        /// </summary>
        public SupplyResourceContractProjectTypeProvidingInformationDate providingInformationDate;

        /// <summary>
        /// Условное. Указывает на то, что размещение информации об индивидуальных приборах учета и их
        /// показаниях осуществляет ресурсоснабжающая организация или нет. Обязательно для заполнения,
        /// если в <see cref="countingResource"/> указано "РСО". В остальных случаях не заполняется.
        /// </summary>
        public bool? meteringDeviceInformation;

        /// <summary>
        /// Необязательное. Указывает на то, что объем поставки ресурса(ов) определяется на основании прибора
        /// учета или нет. Поле не заполняется, если вторая сторона договора "Управляющая организация"
        /// ИЛИ поле <see cref="oneTimePayment"/> = true.
        /// </summary>
        public bool? volumeDepends;

        /// <summary>
        /// Необязательное. Указывает на то, что оплата предоставленных услуг осуществляется ли единоразово
        /// при отгрузке указанных ресурсов без заведения лицевых счетов для потребителей. Доступно
        /// для заполнения, только если вторая сторона договора отлична от "Управляющая организация".
        /// </summary>
        public bool? oneTimePayment;

        /// <summary>
        /// Необязательное. Порядок размещения информации о начислениях за коммунальные услуги ведется: D - в
        /// разрезе договора, O - в разрезе объектов жилищного фонда. Заполняется, если второй стороной договора
        /// является исполнитель коммунальных услуг.
        /// </summary>
        public SupplyResourceContractProjectTypeAccrualProcedure? accrualProcedure;

        /// <summary>
        /// Кода ФИАС региона РФ, в котором применяются тарифы и/или нормативы потребления КУ (у поставщика
        /// данных должна быть подтвержденная функция РСО в этом Субъекте РФ).
        /// </summary>
        public string regionCodeFias;

        /// <summary>
        /// Необязательное. Информация о применяемом тарифе. Заполнется при указании <see cref="regionCodeFias"/>.
        /// </summary>
        public SupplyResourceContractProjectTypeRegionalSettingsTariff[] tariff;

        /// <summary>
        /// Необязательное. Информация о нормативе потребления коммунальной услуги. Заполнется при
        /// указании <see cref="regionCodeFias"/>.
        /// </summary>
        public SupplyResourceContractProjectTypeRegionalSettingsNorm[] norm;
    }
}
