Особенности обработки статистики по показаниям одометра в 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 км.