Initial commit

This commit is contained in:
d.klimov
2026-01-20 16:11:38 +03:00
commit d42b28060e
50 changed files with 15886 additions and 0 deletions

View File

@@ -0,0 +1,11 @@
1. Интеграция на создание клиента
1. Какой endpoint будет использоваться на стороне СУП (ссылка)
2. Какой протокол будет использоваться при интеграции (REST или SOAP)
3. По поводу авторизации ранее договаривались кастомный header в запросе (дополнительно обсудить его название и значение)
4. Ответ по созданию клиента будет синхронным или асинхронным
5. Если в п. 4 ответ асинхронный, то нужно будет договориться по поводу интеграции СУП -> СРМ (endpoint, протокол, авторизация)
2. Интеграция на создание некоммерческого проекта
1. Какой endpoint будет использоваться на стороне СУП (ссылка)
2. Какой протокол будет использоваться при интеграции (REST или SOAP)
3. По поводу авторизации ранее договаривались кастомный header в запросе (дополнительно обсудить его название и значение)
4. Ответ по созданию некоммерческого проекта будет скорее всего асинхронным (иногда потребуется дополнительное согласование для проекта), поэтому нужно будет договориться по поводу интеграции СУП -> СРМ (endpoint, протокол, авторизация)

View File

@@ -0,0 +1,26 @@
## Взаимодействие систем
### Rabbit
### Temporal
## Примеры запросов
### Создание клиента
### Создание presale-проекта
### Ответы
У меня новые вводные, схема взаимодействия должна быть следующая:
1. Я инициирую запрос в Temporal
2. Создается активность CreatePresaleProject (Отправляется POST запрос в систему ERP)
3. Эта активность должна будет периодически (раз в 10 минут, настраиваемый диапазон запрашивать данные у другой системы)
4. Если я получаю ответ, то активность CreatePresaleProject завершается и запускается UpdateOrderInCRM
5. Если получаю какую-то ошибку, то уже завершаю активность с ошибкой
Это делаем для StartOrderOnly Worker.
Учти, что POST и GET запросы должны посылаться из Temporal
Скажи, что нужно сделать, какой план?

View File

@@ -0,0 +1,74 @@
## Создание клиента
Используется endpoint с методом POST
Предлагаемый вариант
`api/1.0/openRequest/createClient`
### Запрос
```json
{
"companyId": "", // Компания
"typeId": "", // Тип заявки
"kindId": "", // Вид заявки
"name": "Альфа-Пласт",
"shortName": "Альфа-Пласт",
"managerId": "123456", // Значение ИНС (залили данные в AD и храним их в CRM. Значение без нулей в начале)
"accountId": "57ef229c-d8e4-4da5-b87a-7205e7eb7c42"
}
```
### Ответ
Успешный
```json
{
"success": true,
"errorMessage": ""
}
```
Неуспешный
```json
{
"success": false,
"errorMessage": "Текст ошибки"
}
```
## Проверка готовности создания клиента
Используется endpoint с методом GET
Предлагаемый вариант
`api/1.0/openRequest/view?accountId={accountId}`
Главная суть метода, что мы по значению `accountId` из пункта `Создание клиента` получаем готовность создания клиента.
Клиент считается созданным, если у него заполнено поле `ClientId` (уточнить как называется в базе данных поле `Код клиента из R3`)
### Ответ
Клиент еще создается
```json
{
"status": "Waiting",
"clientId": "",
"errorMessage": ""
}
```
Создание клиента завершено
```json
{
"status": "Done",
"clientId": "123-123-123",
"errorMessage": ""
}
```
Ошибка при создании клиента
```json
{
"status": "Error",
"clientId": "",
"errorMessage": "Описание ошибки"
}
```

View File

@@ -0,0 +1,85 @@
## Авторизация
Используется кастомный header `X-Erp-Integration`
Значение хранится в конфигах у системы СУП.
Для дев и прод разные значения.
Данные передаются в формате base64, при получении значения необходимо его раскодировать и сравнить со значением хранящимся в конфиге.
Если значения не соответствуют, то вернуть ошибку и код HTTP 403 - Unauthorized.
## Создание некоммерческого проекта
Используется endpoint с методом POST
Предлагаемый вариант
`api/1.0/openRequest/createPresaleProject` **Обсудить данный момент после реализации и предоставить команде CRM**
### Запрос
```json
{
"orderName": "Альфа-Пласт ADC",
"orderDate": "2025-12-31",
"clientId": "123-123-123", // Значение `Код клиента из R3`
"managerProjectId": "00123456", // Значение ИНС
"headProjectId": "00123457", // Значение ИНС
"directorProjectId": "00123458", // Значение ИНС
"orderAmount": 12345.67,
"productAttribute": 1, // (1 - ПО/ПО+ТП/ТП. 2 - Консалтинг. 3 - ПО+ТП+Консалтинг/ТП+Консалтинг/ПО+Консалтинг)
"applicationId": "57ef229c-d8e4-4da5-b87a-7205e7eb7c43",
"projectId": "" // AP ID (Пустое - создание проекта. Заполненное - редактирование проекта)
}
```
### Ответ
Успешный
```json
{
"success": true,
"errorMessage": ""
}
```
Неуспешный
```json
{
"success": false,
"errorMessage": "Текст ошибки"
}
```
## Проверка готовности создания проекта
Используется endpoint с методом GET
Предлагаемый вариант
`api/1.0/openRequest/view?applicationId={applicationId}` **Обсудить данный момент после реализации и предоставить команде CRM**
Главная суть метода, что мы по значению `applicationId` из пункта `Создание некоммерческого проекта` получаем готовность создания проекта.
Проект считается созданным, если у него заполнено поле `ProjectId` (уточнить как называется в базе данных поле `AP ID`)
### Ответ
Проект еще создается
```json
{
"status": "Waiting",
"projectId": "",
"errorMessage": ""
}
```
Создание проекта завершено
```json
{
"status": "Success",
"projectId": "123-123-124",
"errorMessage": ""
}
```
Ошибка при создании проекта
```json
{
"status": "Error",
"projectId": "",
"errorMessage": "Описание ошибки"
}
```

View File

@@ -0,0 +1,155 @@
## Статусы объектов
Заявка
- Черновик -
- На утверждении -
- На рассмотрении в ЦПРП -
- Зарегистрирована (финальный) -
- Отклонена -
Проект
- Открыт - E0001
- Закрыт (финальный) - E0002
- Приостановлен - E0003
- На закрытии в ЦПРП (финальный) - E0005
- На закрытии в ФС (финальный) - E0006
- Аннулирован (финальный) - E0009
- Закрыт для списания TS - E0027
## Процесс
1. После получения AP ID (Id проекта из САП) в CRM могут происходить изменения данных по сделке (заявке).
2. Все изменения фиксируются в системе CRM и отправляются в СУП в конце рабочего дня
3. По всем измененным заявкам вначале отправляем запрос на получение текущих статусов заявок и проектов
Пример запроса смотри в "Получение статусов заявок и проектов" (Пример запроса)
4. После получения статусов заявок и проектов система CRM отбирает только те заявки, которые могут быть изменены
1. Заявка "Зарегистрирована" и Проект "Проект открыт"
2. Заявка "Зарегистрирована" и Проект "Проект закрыт для списания TS"
5. По подходящим заявкам из п.4 система CRM формирует запросы для отправки в СУП с использованием Temporal
Пример запроса смотри в "Изменение данных по заявке - проекту" (Примеры запроса)
6. Периодически опрашиваем систему СУП о готовности изменения данных по заявке и после получения ответа изменяем статусы заявок в CRM
## Авторизация
Используется кастомный header `X-Erp-Integration`
Значение хранится в конфигах у системы СУП.
Для дев и прод разные значения.
Данные передаются в формате base64, при получении значения необходимо его раскодировать и сравнить со значением хранящимся в конфиге.
Если значения не соответствуют, то вернуть ошибку и код HTTP 403 - Unauthorized.
## Получение статусов заявок и проектов
Используется endpoint с методом POST - синхронный процесс
Предлагаемый вариант
`api/1.0/openRequest/getPresaleProjectsStatus` **Обсудить данный момент после реализации и предоставить команде CRM**
Пример запроса
```json
{
    "projects": [
        {
            "projectId": "AP001", // AP ID проекта
        },
        {
            "projectId": "AP002", // AP ID проекта
        }
    ]
}
```
Пример ответа
```json
{
    "projects": [
        {
            "projectId": "AP001", // AP ID проекта
            "applicationStatus": "...", // Id статуса заявки
            "projectStatus": "E0005" // Id статуса проекта
        },
        {
            "projectId": "AP002", // AP ID проекта
            "applicationStatus": "...", // Id статуса заявки
            "projectStatus": "E0001" // Id статуса проекта
        }
    ]
}
```
## Изменение данных по проекту
### Заявка на перевыпуск
Используется endpoint с методом POST - асинхронный процесс
Предлагаемый вариант
`api/1.0/openRequest/createPresaleProject` **Обсудить данный момент после реализации и предоставить команде CRM**
В данном процессе будет использоваться метод `createPresaleProject`, также как и для создания некоммерческого проекта, но с условием, что в параметр `projectId` будет заполнен, что даст сигнал о том, что это заявка на перевыпуск проекта.
Пример запроса
```json
{
    "orderName": "Сделка-1", // Название проекта
    "orderDate": "2025-12-31", // Дата сделки из CRM
    "clientId": "123-123", // Код клиента из R3
    "headProjectId": "00123123", // ИНС руководителя проекта
    "managerProjectId": "00123124", // ИНС менеджера по продажам
    "directorProjectId": "00123125", // ИНС директора проекта
    "orderAmount": 12345.67, // Сумма сделки
    "projectId": "AP001", // AP ID проекта
    "applicationId": "57ef229c-d8e4-4da5-b87a-7205e7eb7c43" // Id заявки в CRM
}
```
Успешный ответ
```json
{
"success": true,
"errorMessage": ""
}
```
Неуспешный ответ
```json
{
"success": false,
"errorMessage": "Текст ошибки"
}
```
### Проверка готовности проекта с измененными данными
После изменения статуса заявки на Черновик, ожидаем согласования заявки и система CRM (Temporal) будет периодически опрашивать СУП о готовности перевыпуска и согласовании изменений по проекту.
Ответ считается окончательным, если статус != Waiting, то есть Error или Success.
Предлагаемый вариант
`api/1.0/openRequest/view?applicationId={applicationId}` **Обсудить данный момент после реализации и предоставить команде CRM**
Примеры ответов
Идет согласование изменений
```json
{
"status": "Waiting",
"projectId": "",
"errorMessage": ""
}
```
Согласование изменений успешно
```json
{
"status": "Success",
"projectId": "123-123-124",
"errorMessage": ""
}
```
Ошибка или отказ по изменениям в проекте
```json
{
"status": "Error",
"projectId": "",
"errorMessage": "Описание ошибки"
}
```