Группа /calculator/
— калькуляторы стоимости услуг
Метод /calculator/calculateprice/
— расчет стоимости и сроков перевозки
Доступ
- Зарегистрированные пользователи
Комментарии
- Выбор адреса отправления и адреса получения осуществляется по следующей логике: если заказана услуга забора/доставки, то расчет стоимости ведется по координатам напрямую переданным в запрос (параметр
"coordinates"
блоков pickup
/ delivery
), или координатам, полученным по переданной строке адреса (параметр "address"
блоков pickup
/ delivery
). Все прочие параметры определяющие адреса будут проигнорированы.
- Если услуга забора/доставки не заказана, то необходимо передавать ID склада отправления/назначения (параметр
senderWarehouseId
/ receiverWarehouseId
).
- ID склада населенного пункта (с отбором по разрешенным габаритам можно получить методом
/branches/nearestdepartments
, возвращающим ближайшие отделения к переданному в запрос адресу. Или самостоятельно выбирать удобное отделение/склад из ответа метода /branches/all
(поле branches[].divisions[].warehouses[].id
), при этом необходимо учитывать доступность складов по габаритам и разрешенных для них операций.
-
Быстро получить ID склада основного отделения любого филиала можно используя метод
/branches/findzonebyaddress
. в ответе метода реквизит mainWarehouseId
. Основное отделение является центральным складом конкретного филиала, из которого можно дозаказать доставку до адреса или ПВЗ, который относится к зоне обслуживаемого филиала.
Например, по адресу «Самарская область, город Отрадный», основным является отделение филиала «Самара» по адресу: ул. Земеца, д. 32 литера 354, так как город Отрадный обслуживает филиал «Самара».
-
Объекты со стоимостью услуг для разных видов перевозки возвращаются отдельно в массиве
transfers
.
Тип перевозки указывается в поле объекта transfers[].type
; 3 соответствует автоперевозке, 1 — авиа.
-
Сроки авиаперевозки могут указываться несколькими значениями, для разных вариантов времени сдачи груза на склад отправителем.
В ответе метод возвращает массив данных по времени приемки груза —
transportingTimes
.
Количество элементов в массивах сроков перевозки commonTerms[].transporting
и
перевозки с доставкой commonTerms[].transportingWithDelivery
равно количеству элементов в данном массиве transportingTimes
.
Чтобы определить ориентировочный срок доставки, нужно сначала выбрать элемент массива данных по времени приемки груза transportingTimes
со временем, ранее которого груз был сдан на склад.
После этого ориентировочный срок доставки можно смотреть в соответствующих элементах массивов commonTerms[].transporting
и commonTerms[].transportingWithDelivery
.
-
Архив с примерами минимальных запросов CalculatePrice (.zip, 2Кб).
Формат запроса
{
"currencyCode": "643", // Код валюты [String]. Необязательно. По умолчанию 643 - российский рубль.
// Допустимые валюты см.в ответе метода /currency/all/
"types": [ 1 ], // Массив идентификаторов продуктов/тарифов ПЭК для расчета [Array][Number]. Обязательно.
// Полный список доступных в API продуктов/тарифов можно получить методом /typesOfDelivery/all/
// ВНИМАНИЕ! В настоящее время метод не позволяет рассчитывать стоимость по продукту/тарифу 5 - ПЭК:Express Авто
"senderWarehouseId": "dc6c746d-812d-11e4-bbfc-001999d8b3c5", // Идентификатор склада отправителя [String]
"receiverWarehouseId": "b436c978-086d-11e6-b6ca-00155d668909", // Идентификатор склада получателя [String]
"isOpenCarSender": false, // Растентовка отправителя [Boolean]
"isOpenCarReceiver": false, // Растентовка получателя [Boolean]
"isHyperMarket": false, // признак гипермаркета [Boolean]
"plannedDateTime": "2023-02-28T14:00:00", // Дата и время планируемой передачи груза в ПЭК (по часовому поясу филиала отправления) [DateTime]:
// при заказанном заборе - дата и время начала интервала забора груза
// (не позднее 4-х часов до окончания работы филиала),
// при самопривозе - дата и время плановой сдачи груза на склад ПЭК
"isInsurance": true, // Страхование [Boolean]
"isInsurancePrice": 234.15, // Стоимость груза (сумма, на которую будет застрахован груз), руб [Number]
"isPickUp": false, // Нужен забор [Boolean]
"isDelivery": false, // Нужна доставка [Boolean]
"needReturnDocuments": false, // Возврат документов [Boolean] (см. )
"needArrangeTransportationDocuments": false, // Организация перевозки сопроводительных документов [Boolean] (см. )
"senderDistanceType": 0, // В актуальной версии протокола не используется [Number]
"receiverDistanceType": 0, // В актуальной версии протокола не используется [Number]
"pickupServices": { // Погрузочно-разгрузочные работы при заборе
"isLoading": true, // Расчитывать ПРР [Boolean]
"floor": 0, // Поднять/спустить на этаж [Number]
"carryingDistance": 0, // Перенести груз (в метрах) [Number]
"isElevator": false // Подъем на лифте [Boolean]
},
"deliveryServices": { // Погрузочно-разгрузочные работы при доставке
"isLoading": true, // Расчитывать ПРР [Boolean]
"floor": 3, // Поднять/спустить на этаж [Number]
"carryingDistance": 50, // Перенести груз (в метрах) [Number]
"isElevator": true // Подъем на лифте [Boolean]
},
"pickup": {
"address" : "Россия, Москва, улица Большая Лубянка, 2", // Обязательный параметр для расчёта забора груза. Для успешного определения
// координат адреса забора, передавайте все составляющие адреса в такой
// последовательности: страна, регион, район, населенный пункт, улица, дом,
// квартира и разделяйте их запятыми. Запрещено в данной строке указывать
// данные, не являющиеся частью адреса
"coordinates" : { // Необязательный параметр координат адреса (используется для точности вычислений)
"latitude" : "55.761011",
"longitude" : "37.627553"
}
},
"delivery" : {
"address" : "Россия, Москва, улица Большая Лубянка, 2", // Обязательный параметр для расчёта доставки груза. Для успешного определения
// координат адреса доставки, передавайте все составляющие адреса в такой
// последовательности: страна, регион, район, населенный пункт, улица, дом,
// квартира и разделяйте их запятыми. Запрещено в данной строке указывать
// данные, не являющиеся частью адреса
"coordinates" : { // Необязательный параметр координат адреса (используется для точности вычислений)
"latitude" : "55.761011",
"longitude" : "37.627553"
}
},
"counterpart": { // Данные контрагента для расчета с учетом спецусловий
"inn": "1234567890", // ИНН контрагента
"kpp": "123456789", // КПП контрагента, поле необязательно
"whoMakesCalculation": [1,2,3] // Роль заказчика перевозки (кто производит расчет: 1 - отправитель, 2 - получатель, 3 - плательщик)
},
"cargos": [{ // Данные о грузе/грузоместах груза (см. ) [Array]
// Для корректного расчёта передавайте не более двух знаков после запятой,
// На нашей стороне округление выполняется до сотых в большую сторону.
// Например, 0.00041 будет 0.01; 1.871001 будет 1.88
"length": 3.2, // Длина груза, м [Number]. Необязательно, если передан maxSize
"width": 0.9, // Ширина груза, м [Number]. Необязательно, если передан maxSize
"height": 1.5, // Высота груза, м [Number]. Необязательно, если передан maxSize
"volume": 4.32, // Объем груза, м3 [Number]. Необязательно, если переданы длина, ширина, высота.
"maxSize": 3.2, // Максимальный габарит, м [Number]. Необязательно, если переданы длина, ширина, высота (которые имеют приоритет).
"isHP": false, // Защитная транспортировочная упаковка [Boolean]. Необязательно
"sealingPositionsCount": 0, // Количество мест для пломбировки - пломб (применяются для небольших мест или сложных грузов)[Number]. Необязательно.
"weight": 622.5 // Вес, кг [Number]. Обязательно.
"maxPlaceWeight": 50.2 [Number] // максимальный вес грузоместа. Необязательно.
// Рекомендуем передавать только в массиве с одним элементом
// для общих параметров всего груза.
}]
}
Формат ответа
{
"hasError": false, // Признак ошибок при расчетах [Boolean]
"errorMessage": null, // Текст ошибки [String]
"currencyCode": "643", // Код валюты, в которой выполнен расчет стоимости [String]
"branchSenderUID": "b473ce9f-dd68-44ea-a4b2-4cb63b6e970d",// Идентификатор филиала отправления [String]
"branchSender": "Москва Восток", // Наименование филиала отправления [String].
// Отвечает за оказание услуги "первая миля". При сдаче в отделении
// выводится филиал по организационной структуре
"branchReceiverUID": "64adbe2c-a185-11dc-a911-000a5e19ccb4",// Идентификатор филиала получения [String]
"branchReceiver": "Санкт-Петербург", // Наименование филиала получения [String].
// Отвечает за оказание услуги "последняя миля". При выдаче в отделении
// выводится филиал по организационной структуре
"transfers": [{ // Результаты расчетов по каждому из запрошенных продуктов/тарифов [Array]
"type": 3, // Продукт/тариф, для которого выведена стоимость [Number]
"hasError": false, // Признак ошибок при расчетах [Boolean]
"errorMessage": null, // Текст ошибки [String]
"costTotal": 5319, // Общая стоимость услуг по продукту/тарифу, руб. [Number]
"estDeliveryTime": 3, // Срок перевозки (календарные дни) [Number]. На основании заказанных услуг забора/доставки
"services": [// Данные по услугам, входящим в продукт/тариф [Array]
// Перечень услуг, которые будут выставлены в УПД, после перевозки груза с указанными параметрами
// Каждый элемент массива и подмассива - отдельная услуга, со своей стоимостью
{
"serviceType": "Перевозка", // Наименование группы услуги [String]
"senderCity": "Москва", // Город отправитель [String]
"cost": 5269, // Сумма за услугу, руб. [String]
"info": "Перевозка:" // Наименование конкретной услуги [String]
"services": null // Вложенные услуги [Array] элементов service
}, {
"serviceType": "Перевозка",
"senderCity": "Москва",
"cost": 50,
"info": "Страхование:",
"services": null
}, {
"serviceType": "Перевозка",
"senderCity": "Москва",
"cost": 446.6, // Стоимость основной услуги (не включает стоимости подуслуг из вложенного массива services)
"info": "Доставка груза",
"services": [// Массив отдельно выделяемых услуг со стоимостью [Array].
//Стоимость услуг из массива НЕ ВХОДИТ в стоимость (реквизит Cost) родительского элемента
{
"serviceType": "Перевозка",
"senderCity": "Москва",
"cost": 200.0,
"info": "Перенос груза по улице и внутри зданий более 30 метров",
"services": null
}, {
"serviceType": "Перевозка",
"senderCity": "Москва",
"cost": 250.0,
"info": "Погрузо-разгрузочные работы",
"services": null
}
]
}
],
"transportingTypes": 1 // В актуальной версии протокола API не используется
}, {
"type": 1,
"hasError": true,
"errorMessage": "Длина груза превышает допустимую для АВИА. Допустимая длина 2 м.
Груз может быть не принят к данному виду перевозки; Ширина груза превышает допустимую для АВИА. Допустимая ширина 1 м.
Груз может быть не принят к данному виду перевозки; Высота груза превышает допустимую для АВИА. Допустимая высота 0,8 м.
Груз может быть не принят к данному виду перевозки",
"costTotal": 0,
"services": [],
"transportingTypes": 2 // В актуальной версии протокола API не используется
}, {
"type": 12,
"hasError": false,
"errorMessage": null,
"costTotal": 430.0,
"services": [{
"serviceType": "Перевозка",
"senderCity": "Москва",
"cost": 430.0,
"info": "Автоперевозка",
"services": null
}
]
}
],
"transportingTimes": [// Массив данных по времени приемки груза [Array]. Используется для точного определения сроков перевозки.
"0001-01-01T12:00:00", // Значения времени, до которого ожидается, что груз будет сдан на склад.
// Из соответствующего элемента массива transporting или
// transportingWithDelivery нужно взять значение сроков перевозки
"0001-01-01T15:00:00",
"0001-01-01T17:00:00"
],
"commonTerms": [{ // Общие данные по срокам перевозок [Array]
// Значения по срокам перевозки представлены в виде строки "КоличествоДнейПеревозки"
// или "МинимальноеКоличествоДнейПеревозки – МаксимальноеКоличествоДнейПеревозки"
"type": 3, // Продукт/тариф, для которого выведены сроки перевозки [Number]
"branchSender": "Москва Восток", // Филиал-отправитель [String]
"branchReceiver": "Санкт-Петербург", // Филиал-получатель [String]
"discountedDeliveryWeekDays": [// Дни льготной доставки [Array]
2, 4 // Значения соответствуют дню недели льготной доставки (понедельник - 1, воскресенье - 7)
],
"transporting": [// Ориентировочные сроки перевозки, суток [Array]
// из массива надо выбрать элемент в соответствии со временем сдачи груза на склад и
// Массивом данных по времени приемки груза transportingTimes
"1",
"1 - 2",
"2 - 3"
],
"transportingWithDelivery": [// Ориентировочные сроки перевозки с доставкой, суток [Array]
"2 - 3",
"2 - 4",
"3 - 5"
],
"transportingWithPickup": "3 - 4", // Срок перевозки с забором, суток [String]
"transportingWithDeliveryWithPickup": "4 - 6", // Срок перевозки с забором и доставкой, суток [String]
"senderShippingDays": [// Указываются дни недели отправки груза из филиала отправления в филиал получения. 1 - ПН, 2 - ВТ и т.д
1,
2,
3,
4,
5,
6
],
"transportingTypes": 1 // В актуальной версии протокола API не используется
}, {
"type": 12,
...
}, {
"type": 1,
...
}
]
}
Метод /calculator/checkdeliverydate/
— возвращает ближайшие даты и интервалы времени по дате забора/доставки от даты запроса "requestDateTime"
Доступ
- Зарегистрированные пользователи
Формат запроса
{
"requestDateTime": "2023-01-17", // дата запроса, необязательный параметр,
// если не заполнен считается от текущей даты [Date]
"calculateDays": 1, // количество дней для расчета забора/доставки от даты запроса, расчет не более 7 дней,
// если не заполнен значение по умолчанию равно 1 [Number], необязательный параметр
"address": "Россия, Москва, улица Большая Лубянка, 2", // адрес забора/доставки груза [String],необязательный параметр, если переданы координаты
"coordinates": { // координаты адреса забора/доставки (используется для точности вычислений),
// если переданы координаты, то значение в поле address игнорируется. Необязательный параметр
"latitude": 55.761016, // [Number]
"longitude": 37.627562 // [Number]
}
}
Формат ответа
[
{
"date": "2022-12-31T00:00:00", // ближайший день забора/доставки от переданной даты в запросе [DateTime]
"isPreferential": false, // в этот день действует льготный тариф на забор/доставку по запрошенному адресу [Boolean]
"periods": [ // минимальные временные интервалы на забор/доставку груза
{
"periodTimeFrom": "14:00:00", // время начала интервала [TimeSpan]
"periodTimeTo": "18:00:00", // время окончания интервала [TimeSpan]
"isDayLight": true // временной интервал без наценки на забор/доставку в ночное время [Boolean],
// значение false означает, что будет наценка за ночное время (возможность оказания услуги необходимо уточнять у менеджера)
},
{
"periodTimeFrom": "15:00:00",
"periodTimeTo": "19:00:00",
"isDayLight": true
},
{
"periodTimeFrom": "16:00:00",
"periodTimeTo": "20:00:00",
"isDayLight": true
},
{
"periodTimeFrom": "17:00:00",
"periodTimeTo": "21:00:00",
"isDayLight": true
},
{
"periodTimeFrom": "18:00:00",
"periodTimeTo": "22:00:00",
"isDayLight": true
},
{
"periodTimeFrom": "19:00:00",
"periodTimeTo": "23:00:00",
"isDayLight": true
},
{
"periodTimeFrom": "20:00:00",
"periodTimeTo": "00:00:00",
"isDayLight": true
},
{
"periodTimeFrom": "21:00:00",
"periodTimeTo": "01:00:00",
"isDayLight": true
},
{
"periodTimeFrom": "22:00:00",
"periodTimeTo": "02:00:00",
"isDayLight": true
},
{
"periodTimeFrom": "23:00:00",
"periodTimeTo": "03:00:00",
"isDayLight": true
}
]
}
]