Нормативний розрахунок витрати ПММ для транспортних засобів за подорожнім листом — лінійна норма, сезонні надбавки, причепи, ГБО, спецтехніка.
Нормативний розрахунок витрати пально-мастильних матеріалів (ПММ)
Fuel Consumption API — універсальний сервіс розрахунку нормативної витрати ПММ для транспортних засобів за подорожнім листом. Розрахунок виконується згідно з методикою, що враховує лінійну норму, сезонні надбавки, умови експлуатації, вагу причепів, спецроботи та інші фактори.
https://geodataua.runasp.net/api/fuel
Вантажівки, спецтехніка без спідометра, автомобілі з ГБО, причепи-самоскиди
Розбивка по компонентам: пробіг, простій, мотогодини, транспортна робота, опалювач
Сезонна, температурна, умови роботи, індивідуальна надбавка ТЗ
Норми передаються у запиті — API не зберігає довідники. Сумісно з 1С, SAP, власною БД
Усі запити вимагають API-ключа
API-ключ передається у заголовку кожного запиту:
X-API-Key: <YOUR_API_KEY>
API-ключ видається при реєстрації клієнта в особистому кабінеті.
Два ендпоінти для одиночного та пакетного розрахунку
| Метод | URL | Опис |
|---|---|---|
| POST | /api/fuel/consumption/calculate |
Розрахунок для одного ТЗ / одного подорожнього листа |
application/json
| Код | Опис |
|---|---|
| 200 | Успішний розрахунок |
| 400 | Невалідні вхідні дані |
| 401 | Невалідний або відсутній API-ключ |
| 422 | Лінійна норма не задана або дорівнює 0 |
Опис усіх вхідних об'єктів
| Поле | Тип | Обов'язк. | Опис |
|---|---|---|---|
vehicle | Vehicle | ✅ | Транспортний засіб |
fuel | Fuel | ✅ | Вид пального для розрахунку |
tripSheet | TripSheet | ✅ | Дані подорожнього листа |
consumptionNorms | ConsumptionNorms | ✅ | Норми витрат пального для моделі ТЗ |
trailers | Trailer[] | ❌ | Причепи / спецобладнання |
options | Options | ❌ | Додаткові параметри |
| Поле | Тип | Обов'язк. | Опис |
|---|---|---|---|
id | string | ✅ | Ідентифікатор ТЗ |
modelName | string | ❌ | Назва моделі (для документації) |
hasSpeedometer | bool | ✅ | Наявність спідометра. true → розрахунок за пробігом; false → за мотогодинами |
ownWeight | decimal | ❌ | Власна вага ТЗ (кг), якщо відрізняється від моделі |
vehicleSurcharge | decimal | ❌ | Індивідуальна надбавка ТЗ (%, знос, техстан). За замовч. 0 |
dualFuel | bool | ❌ | Двопаливний режим. За замовч. false |
lpgModel | LpgModel | ❌ | Параметри ГБО (якщо є) |
| Поле | Тип | Обов'язк. | Опис |
|---|---|---|---|
primaryFuelId | string | ✅ | ID основного пального ГБО |
primaryFuelRemaining | decimal | ✅ | Залишок ГБО (при виїзді + видано), л |
mainFuelRemaining | decimal | ✅ | Залишок основного пального ТЗ, л |
secondaryFuelRemaining | decimal | ✅ | Залишок додаткового пального ТЗ, л |
| Поле | Тип | Обов'язк. | Опис |
|---|---|---|---|
id | string | ✅ | Ідентифікатор пального |
name | string | ❌ | Назва (ДП, АІ-95, LPG тощо) |
| Поле | Тип | Обов'язк. | Опис |
|---|---|---|---|
date | string (date) | ✅ | Дата подорожнього листа |
temperature | decimal | ❌ | Температура повітря (°C). За замовч. 0 |
heaterWorkTimeSeconds | int | ❌ | Час роботи автономного опалювача (сек) |
defaultWorkConditionSurcharge | decimal | ❌ | Надбавка на умови роботи зі шапки ПЛ (%) |
tripType | string | ❌ |
standard (за замовч.) або special.При special для ТЗ без спідометра до НормаНаОборудование та НормаНаОперації додатково застосовується множник (1 + (seasonal + temperature) / 100)
|
fuelMileage | decimal | ❌ | Пробіг на поточному паливі (для dualFuel = true). Замінює S у формулі пробігу. SS3 коригується пропорційно: SS3 × fuelMileage / S |
performance | Performance[] | ✅ | Виробіток ТЗ та причепів |
tasks | Task[] | ❌ | Завдання маршруту для середньозваженої надбавки |
idlePeriods | IdlePeriod[] | ❌ | Простої з увімкненим двигуном |
| Поле | Тип | Обов'язк. | Опис |
|---|---|---|---|
vehicleId | string | ✅ | ID ТЗ або причепа/навісного |
parameter | string (enum) | ✅ | Тип показника (таблиця нижче) |
value | decimal | ✅ | Значення показника |
| Значення parameter | Одиниця | Опис |
|---|---|---|
totalMileage | км | Загальний пробіг ТЗ або причепа |
workTimeSeconds | сек | Час у роботі — для ТЗ без спідометра або навісного без бака |
tripCount | шт | Кількість їздок |
operationCount | шт | Кількість операцій (підйом кузова тощо) |
specialMileage | км | Пробіг спецроботи (тип 1) |
specialMileage2 | км | Пробіг спецроботи (тип 2) |
specialMileage3 | км | Пробіг спецроботи (тип 3) |
tonKm | т·км | Транспортна робота |
| Поле | Тип | Обов'язк. | Опис |
|---|---|---|---|
completed | bool | ✅ | Чи виконано (невиконані ігноруються) |
loadedKm | decimal | ✅ | Пробіг з вантажем (км) |
emptyKm | decimal | ✅ | Пробіг порожнім (км) |
workConditionSurcharge | decimal | ❌ | Надбавка умов роботи для цього завдання (%) |
| Поле | Тип | Обов'язк. | Опис |
|---|---|---|---|
durationSeconds | int | ✅ | Тривалість простою (сек) |
engineRunning | bool | ✅ | Двигун увімкнено (тільки такі впливають на норму) |
| Поле | Тип | Обов'язк. | Опис |
|---|---|---|---|
id | string | ✅ | Ідентифікатор |
isVehicle | bool | ✅ | true — причіп (має колеса); false — навісне обладнання. Впливає на розрахунок S_Gpr: навісне використовує пробіг основного ТЗ |
ownWeight | decimal | ✅ | Власна вага (кг) |
hasFuelTank | bool | ✅ | Має власний паливний бак. Якщо false — витрата за specialNormPerHour з norms нараховується на основний ТЗ (НормаНаОборудование). Час роботи береться з Performance.workTimeSeconds для цього причепа |
type | string | ❌ | standard (за замовч.) або dumpTrailer (причіп-самоскид) |
capacity | decimal | ❌ | Вантажопідйомність (кг) — для dumpTrailer. Враховується в S_Gpr: (ownWeight + capacity × normalizedLoad / 100) / 1000 × mileage |
normalizedLoad | decimal | ❌ | Нормований % завантаження самоскида (0–100) |
norms | ConsumptionNorms | ❌ | Норми витрат обладнання. Обов'язкове якщо hasFuelTank = false і є specialNormPerHour > 0 |
tonKm від причепа-самоскида не додається до транспортної роботи W. Для звичайного причепа — додається.
Передаються клієнтом у запиті — API не зберігає довідники норм.
| Поле | Одиниця | Опис |
|---|---|---|
linearNorm | л/100 км | Обов'язкова. Базова лінійна норма |
seasonalSurcharge | % | Сезонна надбавка |
specialNormPerHour | л/год | Норма на мотогодину (ТЗ без спідометра / обладнання без бака) |
idleNormAsSpeed | км/год | Еквівалентна швидкість простою з увімкненим двигуном |
weightChangeNorm | л/т·км | Норма на зміну власної ваги (причепи) |
transportWorkNorm | л/т·км | Норма на транспортну роботу |
specialNormPerKm | л/км | Норма на км спецроботи (тип 1) |
specialNormPerKm2 | л/км | Норма на км спецроботи (тип 2) |
specialNormPerKm3 | л/км | Норма на км спецроботи (тип 3) |
operationNorm | л/операцію | Норма на одну операцію |
tripNorm | л/їздку | Норма на одну їздку |
heaterNorm | л/год | Норма на роботу автономного опалювача |
startupNorm | л | Норма на запуск двигуна (ГБО). Використовується якщо startupTemperaturePercent не задано |
startupTemperaturePercent | % | Відсоток від лінійної норми на запуск при даній температурі. Якщо передано і temperature ≠ 0 — використовується замість startupNorm. За замовч. null |
| Поле | За замовч. | Опис |
|---|---|---|
precision | 3 | Кількість знаків після коми у результаті |
isLpg | false | Розрахунок для ГБО (газового палива) |
temperatureCoefficient | null | Температурний коефіцієнт (%). Якщо null — визначається автоматично за таблицею |
Алгоритм нарахування нормативних витрат
seasonalSurchargevehicleSurchargeworkCondition не застосовується до мотогодин та обладнання без бака.
До норми на простій та операції застосовується лише (1 + (seasonal + temperature) / 100).
Нерозподілений пробіг (поза завданнями) отримує надбавку з поля defaultWorkConditionSurcharge шапки ПЛ.
hasSpeedometer = true)hasSpeedometer = false)(1 + (seasonal + temperature) / 100).
| Змінна | Опис |
|---|---|
S | Загальний пробіг ТЗ (км) з totalMileage в Performance |
Seff | Ефективний пробіг: при dualFuel = true = fuelMileage; інакше = S |
SS, SS2, SS3 | Пробіг спецробіт 1/2/3 (км) |
SS3eff | При dualFuel = true: SS3 × fuelMileage / S; інакше: SS3 |
TT_hours | Час роботи ТЗ (год) = workTimeSeconds / 3600 |
TT_hours_equip | Час роботи причепа/навісного без бака (год) — з Performance workTimeSeconds цього причепа / 3600 |
S_Gpr |
Сума по всіх причепах (т·км): — standard причіп: ownWeight / 1000 × mileage_trailer— standard навісне: ownWeight / 1000 × S— dumpTrailer: (ownWeight + capacity × normalizedLoad / 100) / 1000 × mileage_trailer
|
W | Транспортна робота (т·км); tonKm від причепа-самоскида не враховується |
OP | Кількість операцій |
Z | Кількість їздок |
Якщо options.temperatureCoefficient не задано — визначається за таблицею (перший рядок де поріг > temperature):
| Діапазон °C | Коефіцієнт (%) |
|---|---|
| нижче −15 | +10 |
| −15 … −5 | +6 |
| −5 … +5 | +3 |
| +5 … +15 | +1 |
| вище +15 | 0 |
Результат округлюється до кількості знаків, заданих у options.precision (за замовч. 3).
HTTP 200 — успішний розрахунок
| Поле | Тип | Опис |
|---|---|---|
totalConsumption | decimal | Загальна нормативна витрата пального (літри) |
breakdown | NormItem[] | Розшифровка по складовим. Містить лише елементи з value > 0 |
appliedSurcharges | Surcharges | Застосовані надбавки та загальний множник |
| Поле | Тип | Опис |
|---|---|---|
name | string | Назва складової (для відображення) |
code | string | Машинний код (для інтеграції) |
value | decimal | Розрахована витрата (літри) |
| code | Назва | Коли виникає |
|---|---|---|
mileage | На пробіг | ТЗ зі спідометром, S > 0 |
engineHours | На мотогодини | Основний ТЗ без спідометра |
equipment | На роботу спецобладнання | Навісне / причіп без паливного бака |
idle | На простій з вкл. двигуном | Є idlePeriods з engineRunning = true |
weightChange | На зміну власної ваги | Є причепи, weightChangeNorm > 0 |
transportWork | На транспортну роботу | W > 0, transportWorkNorm > 0 |
specialMileage | На пробіг спецроботи (тип 1) | SS > 0, specialNormPerKm > 0 |
specialMileage2 | На пробіг спецроботи (тип 2) | SS2 > 0, specialNormPerKm2 > 0 |
specialMileage3 | На пробіг спецроботи (тип 3) | SS3 > 0, specialNormPerKm3 > 0 |
operations | На операції | OP > 0, operationNorm > 0 |
trips | На їздки | Z > 0, tripNorm > 0 |
heater | На опалювач | heaterWorkTimeSeconds > 0, heaterNorm > 0 |
startup | На запуск двигуна (ГБО) | isLpg = true, lpgModel заповнено |
| Поле | Тип | Опис |
|---|---|---|
seasonal | decimal | Сезонна надбавка (%) |
temperature | decimal | Температурний коефіцієнт (%) |
workCondition | decimal | Середньозважена надбавка умов роботи (%) |
vehicleSpecific | decimal | Індивідуальна надбавка ТЗ (%) |
totalMultiplier | decimal | Загальний множник: 1 + (seasonal + temperature + workCondition + vehicleSpecific) / 100 |
Три типових сценарії використання API
МАЗ-5340, стандартний причіп 5500 кг, температура −12°C, 250 км пробігу, 1800 т·км транспортної роботи.
{
"vehicle": {
"id": "truck-001",
"modelName": "МАЗ-5340",
"hasSpeedometer": true,
"vehicleSurcharge": 5
},
"fuel": { "id": "diesel", "name": "ДП" },
"tripSheet": {
"date": "2026-01-15",
"temperature": -12,
"heaterWorkTimeSeconds": 3600,
"defaultWorkConditionSurcharge": 0,
"performance": [
{ "vehicleId": "truck-001", "parameter": "totalMileage", "value": 250 },
{ "vehicleId": "truck-001", "parameter": "tonKm", "value": 1800 },
{ "vehicleId": "truck-001", "parameter": "tripCount", "value": 3 },
{ "vehicleId": "trailer-01","parameter": "totalMileage", "value": 250 }
],
"tasks": [
{ "completed": true, "loadedKm": 120, "emptyKm": 80, "workConditionSurcharge": 10 },
{ "completed": true, "loadedKm": 30, "emptyKm": 20, "workConditionSurcharge": 0 }
],
"idlePeriods": [
{ "durationSeconds": 1800, "engineRunning": true }
]
},
"consumptionNorms": {
"linearNorm": 22.0,
"seasonalSurcharge": 10,
"idleNormAsSpeed": 5,
"weightChangeNorm": 1.3,
"transportWorkNorm": 1.3,
"heaterNorm": 2.5
},
"trailers": [
{ "id": "trailer-01", "isVehicle": true, "ownWeight": 5500, "hasFuelTank": false, "type": "standard" }
],
"options": { "precision": 3, "isLpg": false }
}
{
"totalConsumption": 127.905,
"breakdown": [
{ "name": "На пробіг", "code": "mileage", "value": 70.950 },
{ "name": "На простій з вкл. двигуном", "code": "idle", "value": 1.210 },
{ "name": "На зміну власної ваги", "code": "weightChange", "value": 23.059 },
{ "name": "На транспортну роботу", "code": "transportWork", "value": 30.186 },
{ "name": "На опалювач", "code": "heater", "value": 2.500 }
],
"appliedSurcharges": {
"seasonal": 10.0, "temperature": 6.0, "workCondition": 8.0,
"vehicleSpecific": 5.0, "totalMultiplier": 1.29
}
}
КС-3577, 8 годин роботи (28800 сек), 45 операцій, tripType=special, літо.
{
"vehicle": {
"id": "crane-005",
"modelName": "КС-3577",
"hasSpeedometer": false,
"vehicleSurcharge": 0
},
"fuel": { "id": "diesel", "name": "ДП" },
"tripSheet": {
"date": "2026-07-10",
"temperature": 28,
"tripType": "special",
"performance": [
{ "vehicleId": "crane-005", "parameter": "workTimeSeconds", "value": 28800 },
{ "vehicleId": "crane-005", "parameter": "operationCount", "value": 45 }
]
},
"consumptionNorms": {
"linearNorm": 14.0,
"seasonalSurcharge": 0,
"specialNormPerHour": 8.5,
"operationNorm": 0.2
},
"options": { "precision": 3 }
}
{
"totalConsumption": 77.000,
"breakdown": [
{ "name": "На роботу спецобладнання", "code": "engineHours", "value": 68.000 },
{ "name": "На операції", "code": "operations", "value": 9.000 }
],
"appliedSurcharges": {
"seasonal": 0, "temperature": 0, "workCondition": 0,
"vehicleSpecific": 0, "totalMultiplier": 1.0
}
}
ГАЗ-3302, двопаливний режим. Розрахунок витрати бензину (АІ-92) — лише норма на запуск двигуна, якщо залишку основного (газу) не вистачає.
{
"vehicle": {
"id": "car-010",
"modelName": "ГАЗ-3302",
"hasSpeedometer": true,
"vehicleSurcharge": 0,
"dualFuel": true,
"lpgModel": {
"primaryFuelId": "lpg",
"primaryFuelRemaining": 30,
"mainFuelRemaining": 5,
"secondaryFuelRemaining": 12
}
},
"fuel": { "id": "ai92", "name": "АІ-92" },
"tripSheet": {
"date": "2026-02-03",
"temperature": -5,
"performance": [
{ "vehicleId": "car-010", "parameter": "totalMileage", "value": 180 }
]
},
"consumptionNorms": {
"linearNorm": 16.5,
"seasonalSurcharge": 8,
"startupNorm": 1.5
},
"options": { "precision": 3, "isLpg": true }
}
{
"totalConsumption": 5.000,
"breakdown": [
{ "name": "На запуск двигуна", "code": "startup", "value": 5.000 }
],
"appliedSurcharges": {
"seasonal": 8.0, "temperature": 3.0, "workCondition": 0,
"vehicleSpecific": 0, "totalMultiplier": 1.11
}
}
Формат та перелік помилок API
{
"error": {
"code": "NORMS_NOT_FOUND",
"message": "Лінійна норма витрат не задана для ТЗ truck-001, пальне ДП"
}
}
| HTTP | Код | Опис |
|---|---|---|
| 400 | MISSING_NORMS |
Не вказані норми витрат пального (consumptionNorms відсутній) |
| 400 | INVALID_VEHICLE |
Некоректні дані ТЗ (відсутній id, невалідний vehicleSurcharge тощо) |
| 400 | NO_PERFORMANCE_DATA |
Масив performance порожній або не містить запис для основного ТЗ |
| 400 | INVALID_TEMPERATURE |
Температура поза допустимим діапазоном |
| 401 | UNAUTHORIZED |
Невалідний або відсутній API-ключ у заголовку X-API-Key |
| 422 | NORMS_NOT_FOUND |
Лінійна норма (linearNorm) = 0 або не задана |
Двопаливний режим — логіка нарахування норми на запуск
Застосовується при isLpg = true та наявності vehicle.lpgModel. Основний пробіг завжди списується на газ (ГБО). На поточне паливо нараховується лише норма на запуск двигуна.
null, використовується startupNorm.lpgModel.primaryFuelId).
mainFuelRemaining)secondaryFuelRemaining)
options.temperatureCoefficient.breakdown не повертаються — масив містить тільки ненульові компоненти.