## Статусы объектов 

Заявка
- Черновик - 1
- На утверждении - 2
- На рассмотрении в ЦПРП - 3
- Зарегистрирована (финальный) - 4
- Отклонена - 5
- Отозвана - 6
 
Проект
- Открыт - 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",
            "applicationStatus": "4",
            "projectStatus": "E0001"
        },
        {
            "projectId": "AP002",
            "applicationStatus": "4",
            "projectStatus": "E0005"
        }
    ]
}
```
## Изменение данных по проекту

### Заявка на перевыпуск

Используется 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": "AP001",
	"errorMessage": ""
}
```

Согласование изменений успешно
```json
{
	"status": "Success",
	"projectId": "AP001",
	"errorMessage": ""
}
```

Ошибка или отказ по изменениям в проекте
```json
{
	"status": "Error",
	"projectId": "AP001",
	"errorMessage": "Описание ошибки"
}
```