Особенности обработки статистики по показаниям одометра в API Одометр и топливо

В API получения показаний по одометру и уровню топлива на выдачу показаний по одометру накладывается специальная логика.

По каждому интервалу, выводимому в ответе, сервис выводит либо данные пробега по одометру, либо данные пробега по навигации.

Решает он это следующим образом:

  • Рассчитывается показания по одометру на начало интервала beginOdometrKm;
  • Рассчитываются показания по одометру на конец периода endOdometrKm;
  • Рассчитывается пробег по навигации NavigationKm;
  • Рассчитывается пробег по одометру OdometrKm (по текущей логике он может быть не равен арифметической разнице (endOdometrKm – beginOdometrKm) - см описание логики ниже.

1. Если при этом выполняется хотя бы одно из условий:

a. Разница (OdometrKm – NavigationKm) составляет больше (или равна) 10% от минимума значений (OdometrKm,NavigationKm):

Формула и особенности расчета:

i. Критерий = mod (OdometrKm – NavigationKm) / min (OdometrKm ; NavigationKm) *100%.

ii. Если какое-то из OdometrKm или NavigationKm < 0,01 км, то считаем что он равен 0.

iii. Значение 0 не должно обрабатываться функцией min ().

iv. Если за 0 мы приняли оба числа OdometrKm и NavigationKm - считаем Критерий = 100%.

b. Разница по модулю (endOdometrKm – beginOdometrKm) - OdometrKm >= 2 км.

c. Показаний одометра нет (в v2.0 в таком случае возвращалась ошибка OlapNoData).

   То по данному интервалу в ответе сервис выдаст следующее:

  • в поле totalMileageKm выводится пробег по навигации (NavigationKm). Если данные по навигации отсутствуют или приняты нами за 0 (<0.01 км) - выводим 0.
  • в поля value блоков beginMileage и endMileage выводится 0;
  • в поля noValueReason выводится сообщение «NavigationData»

2. Иначе — по данному интервалу сервис выдает: 

  • в поле totalMileageKm выводится пробег по одометру (OdometrKm);
  • в поля value блоков beginMileage и endMileage выводятся показания одометра на начало и на конец рассматриваемого интервала;
  • в поля noValueReason выводится пустая строка.

Если в запросе не требовался ответ с разбивкой по дням, то на сервере сервис все равно рассчитывает данные в разбивке по дням. В поле totalMileageKm ответа при этом идет сумма всех еotalMileageKm каждого дня.

В раздел totalMileageKm отдается рассчитанный пробег с учетом возможных перекалибровок одометра. Это не является арифметической разницей между показаниями одометра на начало и конец отчетного периода.  

Объяснить логику расчета можно на примере транспортного средства, которому днем 03.01 провели перекалибровку одометра (показывал тысячи километров, хотя на самом деле это были просто километры).

Данные для API, упрощенно, представляют собой:

Точка/время 01.01.2018

 

02.01.2018

 

03.01.2018

 

04.01.2018

 

05.01.2018
Показания одометра 337 000 км   415 000 км   475 км   515 км   618 км
TotalMileageKm   78 000 км   0 км   40 км   103 км  

Если запросить данные за период с 01.01.2018 по 05.01.2018 сразу после перекалибровки, то в ответе будет получено: 

  • beginMileageKm = 337 000 км;
  • endMileageKm = 618 км;
  • totalMileageKm = 78 000 + 0 + 40 + 103 = 78143 км.

Если после перекалибровки попросить специалистов СКАУТ выполнить пересчет показателей одометра на периоде с 01.01, то данные для API будут пересчитаны следующим образом 

Точка/время 01.01.2018

 

02.01.2018

 

03.01.2018

 

04.01.2018

 

05.01.2018
Показания одометра 337 км   415 км   475 км   515 км   618 км
TotalMileageKm   78 км   60 км   40 км   103 км  

Соответственно, ответ сервиса после пересчета за тот же интервал с 01.01,2018 по 05.01.2018 будет выглядеть так: 

  • beginMileageKm = 337 км;
  • endMileageKm = 618 км;
  • totalMileageKm = 78 + 60 + 40 + 103 = 281 км.