import { Appraisal } from './appraisal';

/**
 * ## StockAppraisal
 * Модель мета-информации об оценке стокового автомобиля `StockCar`
 */
export interface StockAppraisal extends Appraisal {
  /**
   * ## ComplexEstimate
   * Скоринг. Скоринговая оценка ликвидности позволяет быстро оценить ликвидность
   * автомобиля по знакомой со школы пятибалльной шкале. Значение устанавливается
   * автоматически
   */
  readonly complexEstimate?:
    | '1-'
    | '1'
    | '1+'
    | '2-'
    | '2'
    | '2+'
    | '3-'
    | '3'
    | '3+'
    | '4-'
    | '4'
    | '4+'
    | '5-'
    | '5'
    | '5+';

  /**
   * ## ComplexMdsEstimate
   * Скоринг "Средняя скорость продажи". Оценка средней скорости продажи аналогичных
   * автомобилей. Значение устанавливается автоматически
   */
  readonly complexMdsEstimate?:
    | '1-'
    | '1'
    | '1+'
    | '2-'
    | '2'
    | '2+'
    | '3-'
    | '3'
    | '3+'
    | '4-'
    | '4'
    | '4+'
    | '5-'
    | '5'
    | '5+';

  /**
   * ## ComplexMdsDays
   * Средняя скорость продажи (ССП) — оценка среднего срока продажи аналогичных
   * автомобилей на вашем рынке. Для расчета показателя используется статистика
   * реальных продаж и динамика предложений на вашем рынке. Значение устанавливается
   * автоматически.
   */
  readonly complexMdsDays?: number;

  /**
   * ## ComplexSalesEstimate
   * Скоринг "Продажи". Скоринговая оценка продаж дает оценку объема продаж. Значение
   * устанавливается автоматически
   */
  readonly complexSalesEstimate?:
    | '1-'
    | '1'
    | '1+'
    | '2-'
    | '2'
    | '2+'
    | '3-'
    | '3'
    | '3+'
    | '4-'
    | '4'
    | '4+'
    | '5-'
    | '5'
    | '5+';

  /**
   * ## ComplexAvailabilityEstimate
   * Скоринг "Доступность". Оценка количества подобных предложений на рынке. Чем выше
   * оценка, тем проще найти такой автомобиль для перепродажи. Значение
   * устанавливается автоматически
   */
  readonly complexAvailabilityEstimate?:
    | '1-'
    | '1'
    | '1+'
    | '2-'
    | '2'
    | '2+'
    | '3-'
    | '3'
    | '3+'
    | '4-'
    | '4'
    | '4+'
    | '5-'
    | '5'
    | '5+';

  /**
   * ## ComplexPublishedEstimate
   * Скоринг "Срок публикации". Значение устанавливается автоматически
   */
  readonly complexPublishedEstimate?:
    | '1-'
    | '1'
    | '1+'
    | '2-'
    | '2'
    | '2+'
    | '3-'
    | '3'
    | '3+'
    | '4-'
    | '4'
    | '4+'
    | '5-'
    | '5'
    | '5+';

  /**
   * ## ComplexPublishedAmount
   * Cредний срок размещения предложений в днях. Значение устанавливается
   * автоматически.
   */
  readonly complexPublishedAmount?: number;

  /**
   * ## ComplexOffersAmount
   * Количество предложений в среднем на каждый год производства.
   */
  readonly complexOffersAmount?: number;

  /**
   * ## ComplexSalesAmount
   * Количество продаж в среднем на каждый год производства.
   */
  readonly complexSalesAmount?: number;

  /**
   * ## ComplexSalesAmount
   * Период, за который считались продажи `ComplexSalesAmount`
   */
  readonly complexSalesEstimatingPeriod?: number;

  /**
   * ## ComplexPercent
   * Скоринговая оценка ликвидности позволяет быстро оценить ликвидность автомобиля в
   * процентах. Значение устанавливается автоматически
   */
  readonly complexPercent?: number;

  /**
   * ## ComplexMdsPercent
   * Средняя скорость продажи (ССП) в процентах
   */
  readonly complexMdsPercent?: number;

  /**
   * ## ComplexSalesPercent
   * Оценка продаж в процентах
   */
  readonly complexSalesPercent?: number;

  /**
   * ## ComplexAvailabilityPercent
   * Оценка доступности в процентах
   */
  readonly complexAvailabilityPercent?: number;

  /**
   * ## SellingPrice
   * Цена продажи в рублях. В процессе продажи здесь указывается цена, публикуемая в
   * объявлениях. В момент выбытия здесь указывается фактическая цена продажи авто
   */
  sellingPrice?: number;

  /**
   * ## PendingPrice
   * Новая назначенная цена продажи автомобиля, которая еще не была применена в
   * качестве действующей (текущей) по причине необходимости её
   * согласования/утверждения
   */
  pendingPrice?: number;

  /**
   * ## PendingPriceSetAt
   * Дата и время установки новой цены продажи
   */
  readonly pendingPriceSetAt?: string;

  /**
   * ## RecommendedRetailPrice
   * Рекомендованная розничная цена. Цена по которой с большой вероятностью
   * автомобиль будет продан
   */
  recommendedRetailPrice?: number;

  /**
   * ## BuyoutPrice
   * Цена выкупа автомобиля у владельца в рублях. Для комиссионных авто этот атрибут
   * содержит сумму, которую получит собственник в случае успешной продажи авто. Если
   * автомобиль комиссионный, а также известна маржа (размер комиссии), затраты на
   * подготовку и цена продажи, то значение вычисляется автоматически по формуле:
   * `Цена выкупа = Цена продажи - Маржа - Затраты на ремонт и подготовку`
   */
  buyoutPrice?: number;

  /**
   * ## RepairCost
   * Размер затрат на предпродажную подготовку и ремонт авто в рублях. Эти затраты
   * включаются в общие прямые затраты по авто.
   */
  repairCost?: number;

  /**
   * ## Expenses
   * Суммарные прямые затраты на приобретение авто. Значение вычисляется
   * автоматически
   */
  readonly expenses?: number;

  /**
   * ## Markup
   * Маржа в рублях. Маржа — разница между ценой продажи авто и суммарными прямыми
   * затратами на приобретение и подготовку авто к продаже. Для комиссионных авто
   * здесь задается размер комиссии. Если автомобиль не комиссионный, а также
   * известны затраты на подготовку, цена выкупа и продажи, то значение вычисляется
   * автоматически по формуле:
   * `Маржа = Цена продажи - Цена выкупа - Затраты на ремонт и подготовку`
   */
  markup?: number;

  /**
   * ## MarkupPotential
   * = 100% - % затрат к рынку в рублях. Значение устанавливается автоматически.
   */
  readonly markupPotential?: number;

  /**
   * ## ProfitPotentialDay
   * = Потенциальная прибыль руб. в день
   */
  readonly profitPotentialDay?: number;

  /**
   * ## ProfitPotentialMonth
   * = Потенциальная прибыль руб. в месяц (30 дней)
   */
  readonly profitPotentialMonth?: number;

  /**
   * ## ProfitPotentialPercent
   * ROI, % годовых,
   * `(Маржа / Прогноз скорости продажи) / Суммарные затраты * 365 * 100%` Значение
   * устанавливается автоматически
   */
  readonly profitPotentialPercent?: number;

  /**
   * ## MarkupPercent
   * Маржа в процентах от стоимости продажи авто. Значение вычисляется автоматически
   */
  readonly markupPercent?: number;

  /**
   * ## ExpensesPercent
   * Отношение суммарных затрат на авто к средней цене похожих авто на рынке с учетом
   * пробега. Значение устанавливается автоматически
   */
  readonly expensesPercent?: number;

  /**
   * ## MarketPricesRating
   * Рейтинг авто по цене среди похожих. Значение устанавливается автоматически
   */
  readonly marketPricesRating?: number;

  /**
   * ## MarketPricesMileageRating
   * Рейтинг авто по пробегу среди похожих. Значение устанавливается автоматически
   */
  readonly marketPricesMileageRating?: number;

  /**
   * ## PriceMileageCategory
   * Категория цены с учетом пробега. Значение устанавливается автоматически `1` –
   * Очень низкая `2` – Низкая `3` – Средняя `4` – Высокая `5` – Очень высокая `6` –
   * Не определена Также, возможно значение `NULL`.
   */
  readonly priceMileageCategory?: number;

  /**
   * ## SimilarCarsTotal
   * Количество авто в Рейтинге или П-Рейтинге. Значение устанавливается
   * автоматически
   */
  readonly similarCarsTotal?: number;

  /**
   * ## SimilarCarsAvgMillage
   * Средний пробег похожих авто на рынке в соответствии с установленными критериями
   * подбора. Значение устанавливается автоматически
   */
  readonly similarCarsAvgMillage?: number;

  /**
   * ## SimilarCarsMedianPrice
   * Средняя цена похожих авто на рынке без учета пробега в соответствии с
   * установленными критериями подбора. Значение устанавливается автоматически
   */
  readonly similarCarsMedianPrice?: number;

  /**
   * ## SellingPricePercent
   * Процент цены продажи от средней апроксимированной по пробегу цены
   */
  readonly sellingPricePercent?: number;

  /**
   * ## AttentionPercent
   * Отношение среднесуточного числа просмотров авто к среднему числу просмотров
   * среди похожих авто, в процентах. Значение устанавливается автоматически
   */
  readonly attentionPercent?: number;

  /**
   * ## SalePeriodPrediction
   * Прогноз срока продажи в днях. Значение устанавливается автоматически
   */
  readonly salePeriod?: number;

  /**
   * ## FullAttentionImpressionsPerDay
   * Показатель количества просмотров в день, при котором достигается 100% процентов
   * внимания на всех источниках. Считается на стороне FE-приложения
   */
  fullAttentionImpressionsPerDay?: number;

  /**
   * ## AvgImpressionsPerDay
   * Среднее количество просмотров в сутки всех объявлений на отслеживаемых
   * источниках (т.н. внимание). Автоматически рассчитывается по статистике
   * просмотров за последние 3-4 дня
   */
  readonly avgImpressionsPerDay?: number;

  /**
   * ## SimilarCarsAdjustedPrice
   * Средняя цена похожих авто на рынке с учетом пробега в соответствии с
   * установленными критериями подбора. Значение устанавливается автоматически
   */
  readonly similarCarsAdjustedPrice?: number;

  /**
   * ## AttentionRating
   * Рейтинг авто по среднесуточному числу просмотров среди похожих. Значение
   * устанавливается автоматически
   */
  readonly attentionRating?: number;

  /**
   * ## AttentionCategory
   * Категория внимания. Значение устанавливается автоматически: `1` – Очень низкое
   * `2` – Низкое `3` – Среднее `4` – Высокое `5` – Очень высокое `6` – Не определено
   */
  readonly attentionCategory?: number;

  /**
   * ## PriceCategory
   * Категория цены без учета пробега. Значение устанавливается автоматически: `1` –
   * Очень низкая `2` – Низкая `3` – Средняя `4` – Высокая `5` – Очень высокая `6` –
   * Не определена Также, возможно значение `NULL`.
   */
  readonly priceCategory?: number;

  /**
   * ## AttentionSimilarCarsTotal
   * Количество авто в рейтинге внимания. Значение устанавливается автоматически
   */
  readonly attentionSimilarCarsTotal?: number;

  /**
   * ## Geo
   * Список Geo-идентификаторов объектов, для поиска данных оценки
   */
  readonly geo?: Array<number>;

  /**
   * ## ObjectVersion
   * Версия объекта, обычно получается вместе с объектом из API, отправляется при
   * сохранении в неизменном виде. В случае, если за время между получением и
   * отправкой объекта на сохранения состояние объекта в API изменилось, то API
   * вернет 409 Conflict, в этом случае пользователю нужно сообщить, что объект уже
   * был изменен, поэтому требуется подтверждение сохранения (в этом случае нужно
   * испольщзовать параметр `forceSave`)
   */
  objectVersion?: number;
}
