Перейти к основному содержимому

Интеграция с внешними системами

!!!ВНИМАНИЕ!!! Интеграция находится в разработке. Ниже представлена модель TO BE, из которой реализовано еще не все.

Сокращения

  1. КП - контейнерная площадка
  2. КГ - контейнерная группа
  3. ПЗ - план задание
  4. ТС - транспортное средство
  5. КГО - крупногабаритные отходы
  6. ТКО - твердые коммунальные отходы
  7. РСО - раздельный сбор отходов
  8. ЧЛ - чистая логистика

Способ интеграции

Схема

img_3.png

На данной схеме показано, что ЧЛ может одновременно и принимать и отдавать объекты. Но на практике, в конкретной интеграции будет выбрано только одно направление: либо экспорт, либо импорт; в зависимости от того, кто является источником данных.

Та же логика касается и внешней системы: либо она источник отчетов о вывозе, либо потребитель. В каждом конкретном случае будет работать что-то одно: или экспорт, или импорт

На схеме лишь приведен общий случай

  1. Сценарии кто является источником ПЗ, источником справочников могут быть разные
  2. ЧЛ подключается к кафке и слушает сообщения от внешних систем
  3. ЧЛ отправляет сообщения о справочниках, ПЗ, факте вывоза (отправляет то, что необходимо внешней системе)
  4. Внешняя система подключается к кафке и слушает необходимые сообщения
  5. Внешняя система отправляет о справочниках, ПЗ, факте вывоза (отправляет то, что необходимо в рамках данной конкретной интеграции)

Apache Kafka

Для интеграции ЧЛ с внешними системами используется брокер сообщений Kafka

Сайт

CLI

Пример запроса в CLI
sh kafka-console-producer.sh --bootstrap-server ip:port --topic CL_INTEGRATION_TEST
>test-cli-message

Техническая реализация

  • Импорт сообщений в ЧЛ осуществляется через топик EXTERNAL_SYNC_DSP_IMPORT_\_{server_name}
  • Экспорт сообщений из ЧЛ - через топик EXTERNAL_SYNC_DSP_EXPORT_\_{server_name}
  • Импорт фото в ЧЛ - через REST запрос (uploadPhoto)
  • Экспорт фото в ЧЛ - через REST запрос (по url)

Где server_name - суффикс сервера.

Загрузка фото

Экспорт фото в ЧЛ

Будет происходить по REST

Пример запроса на загрузку фото
POST {{cl_url}}/graphql
Authorization: Bearer {{token}}
Content-Type: application/json

{
"query": "mutation uploadPhoto($photo: PhotoFileDescriptorInput!) {uploadPhoto(photo: $photo){ id url }}",
"variables": {
"photo": {
"extension": "jpg",
"name": "gray.png",
"size": 126,
"createDate": "2024-09-02T02:56:36.070Z",
"bytesBase64": "iVBORw0KGgoAAAANSUhEUgAAAAgAAAAECAYAAACzzX7wAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAATSURBVBhXY7Cxd/yPD9NcgeN/ACNmN2H+qp84AAAAAElFTkSuQmCC"
}
}

Импорт фото из ЧЛ

Фото можно получить по HTTP запросу, используя photo.url

Пример: https://disp.t1.groupstp.ru/media/2024/01/09/84f9642c-d980-48f9-85dd-4dac17dd7d84.jpeg

Форматы данных

Статус объекта
ACTIVE          // Активный
ARCHIVED // Архивный
DELETED // Удаленный
Тип организации
REG_OPERATOR            //Региональный оператор
CARRIER //Перевозчик
CONTRACTOR //Контрагент
OTHER //Другое
Организация
{
"entityType": "COMPANY", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"entityStatus": "ACTIVE", //Статус сущности | По умолчанию активный
"id": "00000000-0000-0000-0000-000000000000", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID организации
"name": "СпецАвтоТранс", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ имя организации
"inn": "0477744444", //ИНН организации
"type": "CARRIER" //Тип организации
}
Участок
{
"entityType": "REGION", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"entityStatus": "ACTIVE", //Статус сущности | По умолчанию активный
"id": "00000000-0000-0000-0000-000000000000", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID участка
"name": "Таганский", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ имя участка
"parent": { //Родительский участок
"entityType": "REGION", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности родительского участка
"id": "00000000-0000-0000-0000-000000000001" //ID родительского участка | должен быть синхронизирован заранее
},
"polygon": [ //ОБЯЗАТЕЛЬНОЕ ПОЛЕ полигон участка, для отрисовки на карте, минимум 3 точки
{
"lat": 150.0, //ОБЯЗАТЕЛЬНОЕ ПОЛЕ широта точки полигона
"lon": 50.0 //ОБЯЗАТЕЛЬНОЕ ПОЛЕ долгота точки полигона
},
{
"lat": 151.0,
"lon": 50.0
},
{
"lat": 151.0,
"lon": 51.0
},
{
"lat": 151.0,
"lon": 52.0
},
{
"lat": 152.0,
"lon": 52.0
}
]
}
Гараж
{
"entityType": "GARAGE", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"entityStatus": "ACTIVE", //Статус сущности | По умолчанию активный
"id": "00000000-0000-0000-0000-000000000000", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID гаража
"name": "Гараж САТ", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ имя гаража
"address": "Котельническая, 12", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ адрес гаража
"owner": { //ОБЯЗАТЕЛЬНОЕ ПОЛЕ владелец гаража
"entityType": "COMPANY", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "00000000-0000-0000-0000-000000000001" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID владелца гаража | владелец ТС должен быть синхронизирован заранее
},
"polygon": [ //ОБЯЗАТЕЛЬНОЕ ПОЛЕ полигон гаража, для отрисовки на карте, минимум 3 точки
{
"lat": 150.0, //ОБЯЗАТЕЛЬНОЕ ПОЛЕ широта точки гаража
"lon": 50.0 //ОБЯЗАТЕЛЬНОЕ ПОЛЕ долгота точки гаража
},
{
"lat": 151.0,
"lon": 50.0
},
{
"lat": 151.0,
"lon": 51.0
},
{
"lat": 151.0,
"lon": 52.0
},
{
"lat": 152.0,
"lon": 52.0
}
]
}
Тип места загрузки/разгрузки ТС (мусорный полигон, МПС, МСС, КПО)
WASTE_DUMP,                           //Мусорный полигон
TRANSFER_STATION, //Мусоро-перегрузочная станция
WASTE_SORTING_STATION, //Мусоро-сортировочная станция
TRANSFER_AND_SORTING_STATION, //Перегрузочно-сортировочная станция
WASTE_PROCESSING_PLANT, //Комплекс по переработке отходов
Место загрузки/разгрузки (Мусорный полигон, МПС, МСС, КПО)
{
"entityType": "WASTE_POINT", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"entityStatus": "ACTIVE", //Статус сущности | По умолчанию активный
"id": "00000000-0000-2222-0000-000000000000", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID места
"name": "Мусорный полигон Румянцево", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ имя места
"address": "Центральная, 75", //Адрес места
"owner": { //Владелец места
"entityType": "COMPANY", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "00000000-0000-0000-0000-000000000001" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID владелца места | владелец ТС должен быть синхронизирован заранее
},
"haveWeightControl": true, //Присутствует ли весовой контроль
"type": "WASTE_DUMP", //Тип места
"entryPoint": { //Точка заезда на место разгрузки | по умолчанию будет взята случайная точка из polygon
"lat": 150.0, //ОБЯЗАТЕЛЬНОЕ ПОЛЕ широта точки
"lon": 50.0 //ОБЯЗАТЕЛЬНОЕ ПОЛЕ долгота точки
},
"polygon": [ //ОБЯЗАТЕЛЬНОЕ ПОЛЕ полигон места, для отрисовки на карте, минимум 3 точки
{
"lat": 150.0, //ОБЯЗАТЕЛЬНОЕ ПОЛЕ широта точки
"lon": 50.0 //ОБЯЗАТЕЛЬНОЕ ПОЛЕ долгота точки
},
{
"lat": 151.0,
"lon": 50.0
},
{
"lat": 151.0,
"lon": 51.0
},
{
"lat": 151.0,
"lon": 52.0
},
{
"lat": 152.0,
"lon": 52.0
}
]
}
Тип погрузки контейнера на ТС
BODY_SIDE_LOADING           //Боковая загрузка
BACK_SIDE_LOADING //Задняя загрузка
BUNKER_CONTAINER_LOADER //Бункеровоз
HOOK //Крюковой погрузчик
TOP //Сверху
FRONT //Фронтальная
DEEPENING //Заглубленная
Тип топлива ТС
PETROL                      //Бензин
DIESEL //Дизель
GAS //Пропан
ELECTRICITY //Электричество
ТС
{
"entityType": "VEHICLE", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"entityStatus": "ACTIVE", //Статус сущности | По умолчанию активный
"id": "00000000-0000-0000-0000-000000000000", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID ТС

"owner": { //ОБЯЗАТЕЛЬНОЕ ПОЛЕ владелец ТС
"entityType": "COMPANY", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "00000000-0000-0000-0000-000000000001" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID владелца ТС | владелец ТС должен быть синхронизирован заранее
},
"region": { //ОБЯЗАТЕЛЬНОЕ ПОЛЕ участок ТС
"entityType": "REGION", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "00000000-0000-0000-0000-000000000002" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID участок ТС | участок ТС должен быть синхронизирован заранее
},
"garage": { //Гараж, локация ТС
"entityType": "GARAGE", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "00000000-0000-0000-0000-000000000003" //ID гаража ТС | гараж ТС должен быть синхронизирован заранее
},

"loadType": "BUNKER_CONTAINER_LOADER", //Тип погрузки контейнера | из списка "Тип погрузки контейнера на ТС"
"fuelType": "DIESEL", //Тип топлива | из списка "Тип топлива ТС"
"number": "А100ВЕ138", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ гос.номер ТС
"volume": "100.00", //Объем бака ТС
"compressionCoefficient": "1.00", //Коэффициент уплотнения(сжатия) бака ТС
"capacity": "150.00", //Грузоподъемность
"modelName": "SCANIA", //Имя модели ТС
"yearOfManufacture": "1985", //Год выпуска тс
}
Роли сотрудника
MASTER                                                  //Мастер
DISPATCHER //Диспетчер
DRIVER //Водитель
GUEST //Гость
OFFICE_MANAGER //Офисс менеджер
REG_OPERATOR_ADMIN //РО админ
GOVERNMENT //Госслужащий
CONTAINER_AREAS_EDITOR //Редактор КП
REPORT_CORRECTOR //Корректировщик данных о вывозе
INSPECTOR //Испектор
Сотрудник
{
"entityType": "EMPLOYEE", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"entityStatus": "ACTIVE", //Статус сущности | По умолчанию активный
"id": "00000000-0000-0000-0000-000000000000", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ | ID СОТРУДНИКА
"personFullName": "Лысенко Владимир Петрович", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ | ФИО СОТРУДНИКА
"company": {
"entityType": "COMPANY", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "00000000-0000-0000-0000-000000000001", //ID компании где устроен сотрудник | компания должна быть синхронизирована заранее
},
"phone": "89999999999", //Номер телефона
"email": "example@example.com", //Электронная почта
"personnelNumber": "000001", //Табельный номер
"requireUser": "true", //Должен ли быть создан пользователь для сотрудника (предполагается ли работа внутри ЧЛ?)
"workInRegionalOperator": "false", //Работает ли сотрудник в регоператоре
"login": "i.ivanov", //Логин (для привязанного к сотруднику пользователя, если он должен быть)
"password": "BiABDihcaq#%\"qa67%IHC", //Пароль (для привязанного к сотруднику пользователя, если он должен быть)
"roles": [ //Роли сотрудника
"MASTER",
"DISPATCHER",
"REG_OPERATOR",
],
"regions": [ //Регионы, к которым у сотрудника есть доступ
{
"entityType": "REGION", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "00000000-0000-0000-0000-000000000004" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID участка
},
{
"entityType": "REGION", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "00000000-0000-0000-0000-000000000005" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID участка
}
],
"carriers": [ //Перевозчики, к которым у сотрудника есть доступ
{
"entityType": "COMPANY", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "00000000-0000-0000-0000-000000000006" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID перевозчика
}
]
}
Тип контейнера
{
"entityType": "CONTAINER_TYPE", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"entityStatus": "ACTIVE", //Статус сущности | По умолчанию активный
"id": "00000000-0000-0000-0000-000000000000", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID типа контейнера
"name": "Стандартный 0,75 м3", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ имя типа контейнера
"volume": 0.75, //ОБЯЗАТЕЛЬНОЕ ПОЛЕ объем типа контейнера
"loadTypes": [ //Типы погрузки контейнера на ТС
"BODY_SIDE_LOADING",
"BACK_SIDE_LOADING",
"TOP"
]
}
Тариф КП
NORMATIVE                                               //Рассчет по нормативам
FACT //Рассчет по факту
Тип КП
CLOSED                                                      //Закрытая КП
OPENED //Открытая КП
GARBAGE_ROOM, //Мусорокамера
DEEPENING, //Подземная КП
BAG, //Помешочный сбор
PRESS, //Пресс компактор
PUBLIC_TRANSPORT_STOP, //Остановка общественного транспорта
Виды отходов
TKO,                                                        //TKO
PAPER, //Бумага
PLASTIC, //Пластик
GLASS, //Стекло
METAL //Металл

Категории КП
LEGAL_ENTITY,                                               //Юридическое лицо
APARTMENT_BUILDING, //Многоквартирный дом
PRIVATE_SECTOR, //Частный сектор
GARAGE, //Гаражно-строительный кооператив
GOVERNMENT, //Бюджетное учреждение
MEDICAL, //Медицинское учреждение
EDUCATIONAL, //Образовательное учреждение
MILITARY, //Военная часть
GARDEN, //СНТ
RAILWAY, //РЖД
OTHER, //Прочие отходы
INDIVIDUAL, //Индивидуальные контейнеры
BAG //Помешочный сбор

График
{
"entityType": "SCHEDULE", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"entityStatus": "ACTIVE", //Статус сущности | По умолчанию активный
"notation": "4-ПН,2-ВТ" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ представление в нотации графика
}
Виды нотаций графика
По дате
Пример представления: "1,2,3,15,27"
Описание: 1, 2, 3, 15, 27 дни каждого месяца
Разделитель: ,
Ограничения: числа из 1-31

Дни недели
Пример представления: "ПН,СР,ПТ"
Описание: понедельник, среда, пятница
Разделитель: ,
Ограничения: значения из ПН/ВТ/СР/ЧТ/ПТ/СБ/ВС, регистр не важен

Ежедневно
Пример представления: "ПН,ВТ,СР,ЧТ,ПТ,СБ,ВС"
Описание: Ежедневно
Разделитель: ,
Ограничения: значения из ПН/ВТ/СР/ЧТ/ПТ/СБ/ВС, регистр не важен

Повторный
Пример представления: "4-ПН,2-ВТ"
Описание: Каждый 4 понедельник месяца, каждый 2 вторник месяца ,
Разделитель: ,
Ограничения: значения из ПН/ВТ/СР/ЧТ/ПТ/СБ/ВС, регистр не важен, число от 1 до 5

Интервальный
Пример представления: "3/5 с 01.01.2022"
Описание: Вывоз 3 дня подряд, через 5 дней, начиная с 1 января 2022
Разделитель: Не допускается
Ограничения: кол-во дней не больше 365, год 1900-2099, строгое соответствие записи

По заявке
Пример представления: "По заявке"
Описание: График отсутствует
Разделитель: Не допускается
Ограничения: Пустая ячейка
КП
{
"entityType": "CONTAINER_AREA", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"entityStatus": "ACTIVE", //Статус сущности | По умолчанию активный
"id": "00000000-0000-0000-0000-000000000000", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID КП
"tariff": "NORMATIVE", //Тариф КП | по умолчанию норматив
"hasKGOZone": true, //Имеет площадку под КГО
"code": "99000001", //Код КП в инфраструктуре ЧЛ-ЛК-Взыскание
"externalCode": "Обл-гор-пос 33/51с", //Код КП во внешней инфраструктуре
"address": "Таганская, 53", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ адрес КП
"owner": { //Организация-собственник КП
"entityType": "COMPANY", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "00000000-0000-0000-0000-000000000001" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ссылка на собственника КП
},
"note": "Звонить за 10 минут до приезда", //Заметка о КП
"type": "GARBAGE_ROOM", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ Тип КП
"location": { //ОБЯЗАТЕЛЬНОЕ ПОЛЕ координаты КП
"lat": 54.3698, //ОБЯЗАТЕЛЬНОЕ ПОЛЕ координаты КП широта
"lon": 32.9624 //ОБЯЗАТЕЛЬНОЕ ПОЛЕ координаты КП долгота
},
"phone": "88005553535", //Телефон контактного лица
"isAvailableOnHolidays": false, //Доступность в выходные и праздники | по умолчанию true
"isArchived": true, //Архивная | по умолчанию false
"category": "RAILWAY", //Категория КП
"hasPhotoProhibited": true, //На КП запрещено фотографирование | по умолчанию false
"isSecured": true, //КП находится на режимном объекте | по умолчанию false
"schedule": { //График работы КП
"entityType": "SCHEDULE", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"notation": "4-ПН,2-ВТ" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ представление в нотации графика
},
"emails": [ //Почтовые адреса для уведомлений
"aaa@mail.com",
"bbb@mail.com",
"ccc@mail.com"
],
"gatePhone": "88005552020", //Номер телефона шлагбаума
"telegramChat": "-388414554456456", //ID чата ТГ для уведомлений
"groups": [
{
"entityType": "CONTAINER_GROUP", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "00000000-0000-0000-0000-000000000009", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID КГ
"amount": 5, //ОБЯЗАТЕЛЬНОЕ ПОЛЕ количество контейнеров в группе
"type": { //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип контейнера (объем)
"entityType": "CONTAINER_TYPE", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "00000000-0000-0000-0000-000000000008" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID типа контейнера в группе
},
"schedule": { //График вывоза КГ
"entityType": "SCHEDULE", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"notation": "4-ПН,2-ВТ" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ представление в нотации графика
},
"carrier": { //Перевозчик КГ
"entityType": "COMPANY", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "00000000-0000-0000-0000-000000000006" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID организации-перевозчика
}
"wasteType": "TKO" //Вид отхода, ожидаемый в контейнерах КГ
},
{
"entityType": "CONTAINER_GROUP", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "00000000-0000-0000-0000-000000000002", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID КГ
"amount": 5, //ОБЯЗАТЕЛЬНОЕ ПОЛЕ количество контейнеров в группе
"type": { //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип контейнера (объем)
"entityType": "CONTAINER_TYPE", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "00000000-0000-0000-0000-000000000003" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID типа контейнера в группе
},
"schedule": { //График вывоза КГ
"entityType": "SCHEDULE", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"notation": "ВТ" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ представление в нотации графика
},
"carrier": { //Перевозчик КГ
"entityType": "COMPANY", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "00000000-0000-0000-0000-000000000005" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID организации-перевозчика
},
"wasteType": "PAPER" //Вид отхода, ожидаемый в контейнерах КГ
}
]
}
Причины невывоза КП
CONTAINER_IN_FIRE               //Пожар в контейнере
LIQUID_WASTE //ЖКО в контейнере
CONTAINER_NOT_FOUND //Отказ потребителя
BLOCKED_BY_WEATHER //Нет подъезда (снег/грязь/гололед)
CONTAINER_NOT_WHELL_OUT //Не выкатили контейнер
SWC_VIOLATION //Смешанные отходы в РСО
CONTAINER_BROKEN //Контейнер неисправен
VEHICLE_BROKEN //Поломка автомобиля
BIOLOGICAL_WASTE //Биологические отходы
BUILDING_WASTE //Строительный мусор в контейнере
CLOSED //КП закрыта
BLOCKED_BY_ROAD_WORKS //Нет подъезда (дорожные работы)
NOT_INCLUDED_IN_TRIP //Не вошло в рейс
BLOCKED_BY_VEHICLES //Нет подъезда (заставлено авто)
AREA_NOT_FOUND //КП не найдена
FIRE_IN_CONTAINER //Контейнер горит
AREA_HAS_NOT_FENCE //Нет ограждения
BLOCKED_BY_DIMENSIONS //Нет подъезда (по габаритам)
//КГО в контейнере
BLOCKED_BY_WASTE_BLOCKAGE //Нет подъезда (завал ТКО)
//Завал КГО на КП
//Завал не ТКО на КП
//Строительный мусор на КП
CONTAINER_OWERLOADING //Контейнеры переполнены
BLOCKED_BY_SNOW //КП завалена снегом
ПЗ
{
"entityType": "DRIVER_PLAN", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"entityStatus": "ACTIVE", //Статус сущности | По умолчанию активный
"id": "00000000-0000-0000-0000-000000000000", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID план задания
"date": "2025-01-05", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ дата ПЗ
"carrier": { //Организация-перевозчик ПЗ | по умолчанию будет взято из ТС
"entityType": "COMPANY", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "00000000-0000-0000-0000-000000000001" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID перевозчика ПЗ
},
"region": { //Участок ПЗ | по умолчанию будет взято из ТС
"entityType": "REGION", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "00000000-0000-0000-0000-000000000003" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ссылка на участок
},
"vehicle": { //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ТС исполнитель ПЗ
"entityType": "VEHICLE", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "00000000-0000-0000-0000-000000000002" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ссылка на ТС
},
"driver": { //Водитель
"entityType": "EMPLOYEE", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "00000000-0000-3355-0000-000000000001" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID водителя
},
"vehicleShiftNumber": 2, //Номер смены ТС
"mileage": 28741.58, //Пробег по ПЗ
"fuelSpending": 63.78, //Затраты топлива на ПЗ
"completeDate": "2025-01-05T12:12:31.000±03:00", //Дата выполнения
"items": [ //Элементы плана
{
"entityType": "DRIVER_PLAN_ITEM", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "a0000000-0000-0000-0000-000000000000", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID КП
"order": 1, //ОБЯЗАТЕЛЬНОЕ ПОЛЕ Порядковый номер элемента в ПЗ
"area": { //ОБЯЗАТЕЛЬНОЕ ПОЛЕ КП
"entityType": "CONTAINER_AREA", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "a0000000-0000-0000-0000-000000000004" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID КП
},
"requireRemoveKgo": true, //Требуется ли вывозить КГО | по умолчанию false
"planDetailing": [ //Детализация плана вывоза
{
"entityType": "DRIVER_PLAN_DETAILING ", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "a0000000-0000-0000-0000-000000000000", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID детализации плана
"group": { //ОБЯЗАТЕЛЬНОЕ ПОЛЕ КГ
"entityType": "CONTAINER_GROUP", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "a0000000-0000-0000-0000-000000000009" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID КГ, запланированной к вывозу
},
"amount": 5 //ОБЯЗАТЕЛЬНОЕ ПОЛЕ количество контейнеров из указанной группы, запланированных к вывозу
},
{
"entityType": "DRIVER_PLAN_DETAILING", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "b0000000-0000-0000-0000-000000000000", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID детализации плана
"group": { //ОБЯЗАТЕЛЬНОЕ ПОЛЕ КГ
"entityType": "CONTAINER_GROUP", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "b0000000-0000-0000-0000-000000000008" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID КГ, запланированной к вывозу
},
"amount": 7 //ОБЯЗАТЕЛЬНОЕ ПОЛЕ количество контейнеров из указанной группы, запланированных к вывозу
}
],
"report": {
"entityType": "DRIVER_PLAN_ITEM_REPORT", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "a0500000-0000-0000-0000-000000000000", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID отчета о вывозе
"driverPlanItem": { //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ссылка на элемент ПЗ
"entityType": "DRIVER_PLAN_ITEM", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "a505e7b9-2ce5-4443-94ae-e88ba4ea9749" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID элемента ПЗ
},
"driver": { //Водитель
"entityType": "EMPLOYEE", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "00000000-0000-3355-0000-000000000001" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID водителя
},
"detailings": [
{
"entityType": "DRIVER_REPORT_DETAILING", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "a505e7b9-2ce5-4c40-94ae-e88ba4ea9749", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID детализации
"group": { //ОБЯЗАТЕЛЬНОЕ ПОЛЕ КГ
"entityType": "CONTAINER_GROUP", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "a0000000-0000-0000-0000-000000000009" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID вывезенной КГ
},
"fact": 4,
"notRemoved": 1,
"empty": 1
},
{
"entityType": "DRIVER_REPORT_DETAILING", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "a505e7b9-2ce5-4c40-1111-e88ba4ea9749", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID детализации
"group": { //ОБЯЗАТЕЛЬНОЕ ПОЛЕ КГ
"entityType": "CONTAINER_GROUP", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "b0000000-0000-0000-0000-000000000008" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID вывезенной КГ
},
"fact": 5,
"notRemoved": 1,
"empty": 1
}
],
"photos": [
{
"entityType": "PHOTO", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "b4000000-0000-0000-0000-000000000000" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID фото
},
{
"entityType": "PHOTO", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "b3000000-0000-0000-0000-000000000000" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID фото
}
],
"removalFailReason": "CONTAINER_IN_FIRE", //Причина невывоза
"pickedUpVolume": 1.7, //Объем подбора ТКО в кубометрах
"removalDate": "2025-01-05T12:09:44.000±03:00" //Локальное время вывоза
},
"acceptDate": "2025-01-05T13:19:54.000±03:00" //Дата принятия/согласования элемента ПЗ мастером
}
],
"weightItems": [ //Запланированные загрузки/разгрузки
{
"entityType": "DRIVER_PLAN_WEIGHT_ITEM", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "b3e00000-0000-0000-0000-000000000000", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID запланированной загрузки/разгрузки
"order": 1, //ОБЯЗАТЕЛЬНОЕ ПОЛЕ порядковый номер запланированной загрузки/разгрузки
"point": { //ОБЯЗАТЕЛЬНОЕ ПОЛЕ место загрузки/разгрузки
"entityType": "WASTE_POINT", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "fff00000-0000-0000-0000-000000000000" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID места
},
"type": "LOADING", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип запланированной загрузки/разгрузки
"report": {
"entityType": "DRIVER_PLAN_WEIGHT_ITEM_REPORT", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "a0500000-0000-0000-0000-000000000044", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID отчета о вывозе
"unplanned": false, //Внеплановая ли разгрузка/загрузка | по умолчанию true - внеплановая
"number": 1, //Если рагрузка внеплановая, нужно указать ее порядковый номер внутри ПЗ
"driverPlanWeightItem": { //Ссылка на элемент ПЗ в котором (если была) запланирована разгрузка/загрузка
"entityType": "DRIVER_PLAN_WEIGHT_ITEM", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "a505e7b9-2ce5-4443-94ae-e88ba4ea9000" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID элемента ПЗ
},
"driverPlan": { //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ссылка на ПЗ
"entityType": "DRIVER_PLAN", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "00000000-0000-0000-0000-000000000000" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID план задания
},
"driver": { //Водитель
"entityType": "EMPLOYEE", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "00000000-0000-3355-0000-000000000001" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID водителя
},
"type": "UNLOADING", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип весового отчета загрузка или разгрузка
"photosBefore": [ //Фото до разгрузки/загрузки
{
"entityType": "PHOTO", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "b4000000-0000-0000-0000-000000000000", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID фото
"url": "https://disp.t1.groupstp.ru/media/2024/01/09/84f9642c-d980-48f9-85dd-4dac17dd7d84.jpeg" //url фото
},
{
"entityType": "PHOTO", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "b4000000-0000-0000-0000-000000000000", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID фото
"url": "https://disp.t1.groupstp.ru/media/2024/01/09/84f9642c-d980-48f9-85dd-4dac17dd7d84.jpeg" //url фото
}
],
"photosAfter": [ //Фото после разгрузки/загрузки
{
"entityType": "PHOTO", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "ee000000-0000-0000-0000-000000000000", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID фото
"url": "https://disp.t1.groupstp.ru/media/2024/01/09/84f9642c-d980-48f9-85dd-4dac17dd7d84.jpeg" //url фото
},
{
"entityType": "PHOTO", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "ee000000-0000-0000-0000-000000000000", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID фото
"url": "https://disp.t1.groupstp.ru/media/2024/01/09/84f9642c-d980-48f9-85dd-4dac17dd7d84.jpeg" //url фото
}
],
"weightBefore": 15954.47, //ОБЯЗАТЕЛЬНОЕ ПОЛЕ масса до разгрузки/загрузки
"weightAfter": 8934.21, //ОБЯЗАТЕЛЬНОЕ ПОЛЕ масса после разгрузки/загрузки
"date": "2025-01-05T12:09:44.000±03:00", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ дата время разгрузки/загрузки
"geoPoint": { //Координаты где происходила разгрузка/загрузка
"lat": 56.023407, //Долгота
"lon": 37.489282 //Широта
},
"wastePoint": { //ОБЯЗАТЕЛЬНОЕ ПОЛЕ место загрузки/разгрузки
"entityType": "WASTE_POINT", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "fff00000-0000-0000-0000-000000000000" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID места
}
}
},
{
"entityType": "DRIVER_PLAN_WEIGHT_ITEM", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "b3f00000-0000-0000-0000-000000000000", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID запланированной загрузки/разгрузки
"order": 2, //ОБЯЗАТЕЛЬНОЕ ПОЛЕ порядковый номер запланированной загрузки/разгрузки
"point": { //ОБЯЗАТЕЛЬНОЕ ПОЛЕ место загрузки/разгрузки
"entityType": "WASTE_POINT", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "fff00000-0000-0000-0000-000000000000" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID места
},
"driverPlan": { //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ссылка на ПЗ
"entityType": "DRIVER_PLAN", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "00000000-0000-0000-0000-000000000000" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID план задания
},
"type": "UNLOADING", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип запланированной загрузки/разгрузки
"report": {
"entityType": "DRIVER_PLAN_WEIGHT_ITEM_REPORT", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "a0500000-0000-0000-0000-000000000044", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID отчета о вывозе
"unplanned": false, //Внеплановая ли разгрузка/загрузка | по умолчанию true - внеплановая
"number": 1, //Если рагрузка внеплановая, нужно указать ее порядковый номер внутри ПЗ
"driverPlanWeightItem": { //Ссылка на элемент ПЗ в котором (если была) запланирована разгрузка/загрузка
"entityType": "DRIVER_PLAN_WEIGHT_ITEM", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "a505e7b9-2ce5-4443-94ae-e88ba4ea9000" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID элемента ПЗ
},
"driver": { //Водитель
"entityType": "EMPLOYEE", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "00000000-0000-3355-0000-000000000001" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID водителя
},
"type": "UNLOADING", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип весового отчета загрузка или разгрузка
"photosBefore": [ //Фото до разгрузки/загрузки
{
"entityType": "PHOTO", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "b4000000-0000-0000-0000-000000000000", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID фото
"url": "https://disp.t1.groupstp.ru/media/2024/01/09/84f9642c-d980-48f9-85dd-4dac17dd7d84.jpeg" //url фото
},
{
"entityType": "PHOTO", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "b4000000-0000-0000-0000-000000000000", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID фото
"url": "https://disp.t1.groupstp.ru/media/2024/01/09/84f9642c-d980-48f9-85dd-4dac17dd7d84.jpeg" //url фото
}
],
"photosAfter": [ //Фото после разгрузки/загрузки
{
"entityType": "PHOTO", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "ee000000-0000-0000-0000-000000000000", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID фото
"url": "https://disp.t1.groupstp.ru/media/2024/01/09/84f9642c-d980-48f9-85dd-4dac17dd7d84.jpeg" //url фото
},
{
"entityType": "PHOTO", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "ee000000-0000-0000-0000-000000000000", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID фото
"url": "https://disp.t1.groupstp.ru/media/2024/01/09/84f9642c-d980-48f9-85dd-4dac17dd7d84.jpeg" //url фото
}
],
"weightBefore": 15954.47, //ОБЯЗАТЕЛЬНОЕ ПОЛЕ масса до разгрузки/загрузки
"weightAfter": 8934.21, //ОБЯЗАТЕЛЬНОЕ ПОЛЕ масса после разгрузки/загрузки
"date": "2025-01-05T12:09:44.000±03:00", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ дата время разгрузки/загрузки
"geoPoint": { //Координаты где происходила разгрузка/загрузка
"lat": 56.023407, //Долгота
"lon": 37.489282 //Широта
},
"wastePoint": { //ОБЯЗАТЕЛЬНОЕ ПОЛЕ место загрузки/разгрузки
"entityType": "WASTE_POINT", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "fff00000-0000-0000-0000-000000000000" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID места
}
}
}
]
}
Отчет водителя по вывозу КП
{
"entityType": "DRIVER_PLAN_ITEM_REPORT", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"entityStatus": "ACTIVE", //Статус сущности | По умолчанию активный
"id": "a0500000-0000-0000-0000-000000000000", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID отчета о вывозе
"driverPlanItem": { //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ссылка на элемент ПЗ
"entityType": "DRIVER_PLAN_ITEM", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "a505e7b9-2ce5-4443-94ae-e88ba4ea9749" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID элемента ПЗ
},
"driver": { //Водитель
"entityType": "EMPLOYEE", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "00000000-0000-3355-0000-000000000001" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID водителя
},
"detailings": [
{
"entityType": "DRIVER_REPORT_DETAILING", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "a505e7b9-2ce5-4c40-94ae-e88ba4ea9749", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID детализации
"group": { //ОБЯЗАТЕЛЬНОЕ ПОЛЕ КГ
"entityType": "CONTAINER_GROUP", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "a0000000-0000-0000-0000-000000000009" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID вывезенной КГ
},
"fact": 4,
"notRemoved": 1,
"empty": 1
},
{
"entityType": "DRIVER_REPORT_DETAILING", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "cdd53730-6c97-430e-806d-8ed62b336007", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID детализации
"group": { //ОБЯЗАТЕЛЬНОЕ ПОЛЕ КГ
"entityType": "CONTAINER_GROUP", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "b0000000-0000-0000-0000-000000000008" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID вывезенной КГ
},
"fact": 5,
"notRemoved": 1,
"empty": 1
}
],
"photos": [
{
"entityType": "PHOTO", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "b4000000-0000-0000-0000-000000000000", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID фото
"url": "https://disp.t1.groupstp.ru/media/2024/01/09/84f9642c-d980-48f9-85dd-4dac17dd7d84.jpeg" //url фото
},
{
"entityType": "PHOTO", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "b4000000-0000-0000-0000-000000000000", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID фото
"url": "https://disp.t1.groupstp.ru/media/2024/01/09/84f9642c-d980-48f9-85dd-4dac17dd7d84.jpeg" //url фото
}
],
"removalFailReason": "CONTAINER_IN_FIRE", //Причина невывоза
"pickedUpVolume": 1.7, //Объем подбора ТКО в кубометрах
"removalDate": "2025-01-05T12:09:44.000±03:00" //Локальное время вывоза
}
Тип весового отчета (загрузка или разгрузка)
LOADING,                                            //Загрузка
UNLOADING //Разгрузка
Весовой отчет (отчет о разгрузке/загрузке)
{
"entityType": "DRIVER_PLAN_WEIGHT_ITEM_REPORT", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"entityStatus": "ACTIVE", //Статус сущности | По умолчанию активный
"id": "a0500000-0000-0000-0000-000000000044", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID отчета о вывозе
"unplanned": false, //Внеплановая ли разгрузка/загрузка | по умолчанию true - внеплановая
"number": 1, //Если рагрузка внеплановая, нужно указать ее порядковый номер внутри ПЗ
"driverPlanWeightItem": { //Ссылка на элемент ПЗ в котором (если была) запланирована разгрузка/загрузка
"entityType": "DRIVER_PLAN_WEIGHT_ITEM", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "a505e7b9-2ce5-4443-94ae-e88ba4ea9000" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID элемента ПЗ
},
"driverPlan": { //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ссылка на ПЗ
"entityType": "DRIVER_PLAN", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "00000000-0000-0000-0000-000000000000" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID план задания
},
"driver": { //Водитель
"entityType": "EMPLOYEE", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "00000000-0000-3355-0000-000000000001" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID водителя
},
"type": "UNLOADING", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип весового отчета загрузка или разгрузка
"photosBefore": [ //Фото до разгрузки/загрузки
{
"entityType": "PHOTO", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "b4000000-0000-0000-0000-000000000000", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID фото
"url": "https://disp.t1.groupstp.ru/media/2024/01/09/84f9642c-d980-48f9-85dd-4dac17dd7d84.jpeg" //url фото
},
{
"entityType": "PHOTO", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "b4000000-0000-0000-0000-000000000000", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID фото
"url": "https://disp.t1.groupstp.ru/media/2024/01/09/84f9642c-d980-48f9-85dd-4dac17dd7d84.jpeg" //url фото
}
],
"photosAfter": [ //Фото после разгрузки/загрузки
{
"entityType": "PHOTO", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "ee000000-0000-0000-0000-000000000000", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID фото
"url": "https://disp.t1.groupstp.ru/media/2024/01/09/84f9642c-d980-48f9-85dd-4dac17dd7d84.jpeg" //url фото
},
{
"entityType": "PHOTO", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "ee000000-0000-0000-0000-000000000000", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID фото
"url": "https://disp.t1.groupstp.ru/media/2024/01/09/84f9642c-d980-48f9-85dd-4dac17dd7d84.jpeg" //url фото
}
],
"weightBefore": 15954.47, //ОБЯЗАТЕЛЬНОЕ ПОЛЕ масса до разгрузки/загрузки
"weightAfter": 8934.21, //ОБЯЗАТЕЛЬНОЕ ПОЛЕ масса после разгрузки/загрузки
"date": "2025-01-05T12:09:44.000±03:00", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ дата время разгрузки/загрузки
"geoPoint": { //Координаты где происходила разгрузка/загрузка
"lat": 56.023407, //Долгота
"lon": 37.489282 //Широта
},
"wastePoint": { //ОБЯЗАТЕЛЬНОЕ ПОЛЕ место загрузки/разгрузки
"entityType": "WASTE_POINT", //ОБЯЗАТЕЛЬНОЕ ПОЛЕ тип сущности
"id": "fff00000-0000-0000-0000-000000000000" //ОБЯЗАТЕЛЬНОЕ ПОЛЕ ID места
}
}

Подключение 1С к kafka

  1. Скачать и распаковать архив https://github.com/NuclearAPK/Kafka1CExtension
  2. Документация в readme.md https://github.com/NuclearAPK/Simple-Kafka_Adapter
  3. Подключение https://github.com/NuclearAPK/Simple-Kafka_Adapter/blob/main/connection.md
  4. Отправка сообщений https://github.com/NuclearAPK/Simple-Kafka_Adapter/blob/main/producer.md
  5. Чтение сообщений https://github.com/NuclearAPK/Simple-Kafka_Adapter/blob/main/consumer.md
  6. Создать расширение, загрузить структуру, методом "загрузить из файлов" из распакованного архива
  7. Адаптировать расширение и модули под клиентскую версию платформы
  8. Использовать встроенные в расширение методы для подключения к кафке
Пример кода
//Пробуем подключить компоненту
ПодключитьВнешнююКомпоненту("ОбщийМакет.KFK_Компонента", "Integration", ТипВнешнейКомпоненты.Native);

Попытка
Компонента = Новый("AddIn.Integration.simpleKafka1C");
Исключение
ВызватьИсключение "Компонента <Simple Kafka 1C> не подключена!";
КонецПопытки;

Компонента.УстановитьПараметр("queue.buffering.max.ms", "1");
Компонента.УстановитьПараметр("socket.blocking.max.ms", "1");
Компонента.УстановитьПараметр("message.timeout.ms", "5000");

РезультатИнициализации = Компонента.ИнициализироватьПродюсера(Справочники.KFK_Брокеры.НайтиПоНаименованию("Основной").АдресБрокера);

Если Не РезультатИнициализации Тогда
ВызватьИсключение "Ошибка инициализации компоненты или продюсера";
КонецЕсли;

//Организации
Пока Организации.Следующий() Цикл

ДанныеОрганизации = Новый Структура;
ДанныеОрганизации.Вставить("entityType", "COMPANY");
ДанныеОрганизации.Вставить("id", Строка(Организации.Ссылка.УникальныйИдентификатор()));
ДанныеОрганизации.Вставить("name", Организации.Наименование);
ДанныеОрганизации.Вставить("inn", Организации.ИНН);
ДанныеОрганизации.Вставить("type", Строка(Организации.ТипОрганизации.Метаданные().Имя));

ДанныеJSON = KFK_ОбщегоНазначения.ЗначениеВJSON(ДанныеОрганизации);
РезультатОтправки = Компонента.ОтправитьСообщениеСОжиданиемРезультата(ДанныеJSON, Топик,,"COMPANY " + Организации.Наименование);

Если Не РезультатОтправки Тогда
Сообщить(Компонента.ПолучитьСообщениеОбОшибке());
КонецЕсли;

КонецЦикла;

FAQ

Q1. Почему в качестве инструмента интеграции выбрана kafka?
* A1.1. Во-первых, почему брокер сообщений, а не что-то другое.
Какие вообще есть альтернативы?
REST, интеграция через БД, файловый обмен, ручная интеграция.
Последние 2 вида даже не будем рассматривать.
Проблема интеграции через БД, как минимум в согласовании служб безопасности для доступа в чужую БД,
не говоря уже о различиях в СУБД, блокировках запросов, производительности итд.
REST тоже имеет кучу проблем: необходимость непрерывного аптайма обоих систем,
необходимость писать механизмы гарантии доставки, обработки ошибок, переотправки данных.
Самый разумный выбор брокер сообщений: все проблемы REST в нем более менее решены,
инструмент универсальный, не требует жесткой связности систем, как следствие меньше затрат на разработку

* A1.2. Во-вторых, почему именно кафка, а не другой брокер.
Apache-лицензия, активное сообщество, куча документации, самый ходовой брокер.
Бо́льший процент разработчиков знаком именно с кафкой, чем с другими брокерами
Q2. Почему фото загружаются по REST? Противоречие с A1.1.
* A2. Все содержимое фото придется гнать через кафку, размер одного фото ~4Мб, 
количество фото порядка 1к-10к / день
Получается очень большой объем данных, который нужно еще и хранить какое-то время внутри топиков
Отказались из-за неразумности данного подхода, слишком большой нагрузки на кафку
Q3. Что такое детализация плана/факта/подбора/итд и для чего она нужна?
* A3. Разберем на примере детализации плана.
Пусть у нас есть реестр КП, готовые маршруты, мы составляем ПЗ для водителя на завтра
Натыкаемся на КП, где стоят три вида контейнеров:
0.75 - который нужно вывезти, 1.1 - тоже нужно вывезти, и 8 бункер - который завтра вывозить не нужно
Итого: в ПЗ нужно добавить контейнера объемом 1.1 и 0.75, но при этом не добавлять бункер
Если мы бы просто в ПЗ поставили ссылку на КП, водитель бы не понял какие контейнера нужно забирать,
а какие нет.
Решением этой проблемы и является детализация плана: мы просто перечисляем из какой КГ сколько контейнеров
мы хотим вывезти

Аналогично детализация факта: описывает сколько контейнеров из какой группы было вывезено
Детализация невывоза - сколько контейнеров из какой группы было невывезено
Детализация пустоты - сколько контейнеров из какой группы оказалось пустыми
Q4. Почему даты всех событий нужно передавать с часовым поясом?
* A4. Унификация. Вполне возможно что именно вас не интересует часовой пояс, в котором приняли смену ПЗ.
Но другой системе это может быть интересно. При таком сценарии можно будет обойтись всего лишь одной правкой
в ЧЛ, не нужно будет собирать все внешние системы и рассказывать им об изменениях в формате.
Формат делаем максимально полным и статичным