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,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": "Описание ошибки"
}
```