Примеры JSON для обмена данными между системами

Пример OrderTicket

Данный JSON должен формироваться посредством вызова API из нескольких разных источников.

#Full json order example for copy and paste

{
"order_synced": 1, #[POST] - заявка из синхронизируемой части

"ticket": 123,
"status": 111,

"priority": 1, 
"title": "123",
"note": "123",
"due_date": 2023-05-15T17:16:22.955601Z,

"id_metaservice": 1,
"is_global": false,
"is_visible": false,
"service": 1,
"service_type": 1,

"status_changed_date": "2023-05-15T17:16:22.955601Z",
"time_placed": "2023-05-15T16:40:32.179777Z",
"time_start": "2023-05-15T16:40:32.179777Z",
"time_start_predicted": "2023-05-15T16:40:32.179777Z",
"time_finish_predicted": "2023-05-15T16:40:32.179777Z",
"time_start_real": "2023-05-15T16:40:32.179777Z",
"time_finish_real": "2023-05-15T16:40:32.179777Z",

"order_place_type": "address",
"order_place_start": "р-н Беговой",
"order_place_start_gps": "55.751941, 37.607513",
"order_place_start_sector": 4,
"order_place_start_real": "р-н Беговой",
"order_place_start_real_gps": "55.751941, 37.607513",
"order_place_finish_predicted": "р-н Мещанский",
"order_place_finish_predicted_gps": "55.751941, 37.607513",
"order_place_finish_sector": 4,
"order_place_finish_real": "р-н Мещанский",
"order_place_finish_real_gps": "55.751941, 37.607513",

"predicted_price": 1000,
"real_price": 1001,
"payment_transaction_id": 1,
"rating_id": 1,

"provider": 1,
"provider_screen_name": "Vasya Ispolnitelev",
"receiver": 1,
"receiver_screen_name": "Marfa Clientovna",
"client_id": 1,
"client_screen_name": "Fedor Client",
"resource_id": 1,
"attempts": null,
"asap": true
}

Вариант с комментариями источников для получения данных

[POST]/openlocal/api/orderslocal/ - данные которые будут заданы при пост запросе
[PUT]/openlocal/api/orderslocal/id/ - данные которые буду изменены при пут запросе
{
"order_synced": 1, #[POST] - заявка из синхронизируемой части
"ticket": 123, #id из tickets
"status": 111, #[PUT] status из tickets

"priority": 1, #[PUT] это берем из tickets, по идее можно будет повышать приоритет для привлечения внимания техподдержки
"title": "123", #[PUT] это берем из tickets
"note": "123", #[PUT] это берем из tickets
"due_date": 2023-05-15T17:16:22.955601Z, #[PUT] это берем из tickets или из api сервиса - должно совпадать это значение - по сути это крайний срок жизни заказа

"id_metaservice": 1, #[PUT] это из api сервиса, где хранится заказ
"is_global": false, #[PUT] это из api сервиса, где хранится заказ
"is_visible": false,#[PUT] это из api сервиса, где хранится заказ
"service": 1, #[PUT] это из api сервиса, где хранится заказ
"service_type": 1, #[PUT] это из api сервиса, где хранится заказ

"status_changed_date": "2023-05-15T17:16:22.955601Z", #[PUT] это из tickets, для нового заказа оно эквивалентно time_placed
"time_placed": "2023-05-15T16:40:32.179777Z", #[PUT] это из api сервиса, где хранится заказ, должно совпадать (хотя бы частично, если в tickets меньше информации хранится) с "created_date" в tickets
"time_start": "2023-05-15T16:40:32.179777Z", #[PUT] это и все ниже - из api сервиса, где хранится заказ, если не написано иное
"time_start_predicted": "2023-05-15T16:40:32.179777Z", #[PUT]
"time_finish_predicted": "2023-05-15T16:40:32.179777Z", #[PUT]
"time_start_real": "2023-05-15T16:40:32.179777Z", #[PUT]
"time_finish_real": "2023-05-15T16:40:32.179777Z", #[PUT]

"order_place_type": "address", #[POST][PUT] может быть address, coords или both
"order_place_start": "р-н Беговой", #[POST][PUT] вычисляется на языке местности 1 раз на основе координат, если адрес не задавался
"order_place_start_gps": "55.751941, 37.607513", #[POST][PUT] вычисляются на основе адреса, если координаты не задавались
"order_place_start_sector": 4, #[POST][PUT] вычисляется 1 раз на основе координат
"order_place_start_real": "р-н Беговой", #[POST][PUT] вычисляется на основе координат 1 раз по факту заполнения
"order_place_start_real_gps": "55.751941, 37.607513", #[POST][PUT] фиксируется приложением в момент начала заказа
"order_place_finish_predicted": "р-н Мещанский", #[POST][PUT] вычисляется 1 раз на основе координат или сектора, зависит от логики сервиса
"order_place_finish_predicted_gps": "55.751941, 37.607513", #[POST][PUT]
"order_place_finish_sector": 4, #[POST][PUT]
"order_place_finish_real": "р-н Мещанский", #[POST][PUT] вычисляется 1 раз на основе координат
"order_place_finish_real_gps": "55.751941, 37.607513", #[POST][PUT] фиксируется приложением в момент завершения заказа

"predicted_price": 1000, #[PUT] рассчитывается на этапе регистрации заказа и хранимое
"real_price": 1001, #[PUT] обновляется приложением, отправляется на сервис при необходимости в логике обработчиков
"payment_transaction_id": 1, #[POST][PUT]
"rating_id": 1, #[POST][PUT]

"provider": 1, #[PUT] это из api сервиса, должно быть эквивалентно "assigned_to" в тикетах (если функционал позволяет назначить тикет на того, кто не в листе, если не позволяет - то assigned_to должно быть отдельно и может быть null либо назначенный сотрудник для обработки)
"provider_screen_name": "Vasya Worker",
"receiver": 1, #[PUT]
"receiver_screen_name": "Marfa Wife",
"client_id": 1, #[PUT] это из api сервиса, где хранится заказ - но должно совпадать с "created_by" в tickets
"client_screen_name": "Fedor Client",
"resource_id": 1, #[POST][PUT] это из api сервиса, где хранится заказ
"attempts": 1, #[POST][PUT] это ниоткуда, должно добавляться пустым, обработчики с этим могут работать по необходимости
"asap": true #информация о том, срочный ли заказ
}

Минимально необходимая информация в JSON с примером данных

#minimal acceptable as order json example

{
"ticket": 123, 
"status": 111,  

"priority": 1, 
"title": "123",
"note": "123",
"due_date": 2023-05-15T17:16:22.955601Z,

"id_metaservice": 1, 
"is_global": false, 
"is_visible": false, 
"service": 1, 
"service_type": 1, 

"status_changed_date": "2023-05-15T17:16:22.955601Z",
"time_placed": "2023-05-15T16:40:32.179777Z",
"time_start": null,
"time_start_predicted": null,
"time_finish_predicted": null,
"time_start_real": null,
"time_finish_real": null,

"order_place_start": null,
"order_place_start_gps": null,
"order_place_start_sector": null,
"order_place_start_real": null,
"order_place_start_real_gps": null,
"order_place_finish_predicted": null,
"order_place_finish_predicted_gps": null,
"order_place_finish_sector": null,
"order_place_finish_real": null,
"order_place_finish_real_gps": null,

"predicted_price": null,
"real_price": null,
"payment_transaction_id": null,
"rating_id": null,

"provider": null,
"provider_screen_name": null,
"receiver": null,
"receiver_screen_name": null,
"client_id": null,
"client_screen_name": null,
"resource_id": null,


"attempts": null,
"asap": true
}

Пример JSON обычной заявки в тикетах

#ticket json example

{
        "id": 2,
        "status": 111,
        "created_date": "2023-05-15",
        "status_changed_date": "2023-05-15T17:16:22.955601Z",
        "priority": 0,
        "title": "Test",
        "note": "{\n    \n    \"ticket\": 1,\n    \"state\": 1,\n    \"id_metaservice\": 1,\n    \"is_global\": false,\n    \"is_visible\": false,\n    \"service\": 1,\n    \"service_type\": 1,\n\n    \"time_placed\": 1}"
        "due_date": "2023-05-15",
        "task_list": 10,
        "created_by": 1,
        "type": 1,
        "assigned_to": 1
}

Пример минимального необходимого набора данных Ticket

#ticket minimal example

{
        "id": 2,
        "status": 111,
        "created_date": "2023-05-15",
        "status_changed_date": "2023-05-15T17:16:22.955601Z",
        "priority": 0,
        "title": null,
        "note": null,
        "due_date": null,
        "task_list": 10,
        "created_by": 1,
        "type": 1,
        "assigned_to": null
}