🗂️ Реструктуризация vault: логичная организация папок
Изменения: - Интеграция СУП/ → Работа/Интеграция СУП/ (рабочие заметки вместе) - Релизы/ → Работа/Релизы/ (рабочие заметки вместе) - Другое/Собеседование .Net → Работа/ (рабочая тема) - Другое/Своя игра → Личное/ (хобби) - Smart home/ → Квартира/ (всё про квартиру в одном месте) - Flutter/, Go/ → Dev/Flutter/, Dev/Go/ (учебные роадмапы) - Dev/Pulse/competitors-analysis → Projects/Pulse/ (проект Pulse в одной папке) - Twilio.md → Dev/ (техническая заметка) - Tokens.md → Личное/Tokens (API keys).md - Игры.md → Личное/Игры.md - Удалены пустые папки: Другое/, Smart home/, Интеграция СУП/, Релизы/ Структура: Авто/ — автомобили Dev/ — разработка, изучение (Go, Flutter, репозитории) Квартира/ — квартира + умный дом Личное/ — личное, токены, игры, команды Мама/ — проекты для мамы Projects/ — Pulse App Работа/ — BPMSoft, интеграции, релизы Япония/ — путешествие saved-articles/ — сохранённые статьи voice-notes/ — голосовые заметки
This commit is contained in:
156
Работа/Интеграция СУП/Изменение данных в проекте (перевыпуск).md
Normal file
156
Работа/Интеграция СУП/Изменение данных в проекте (перевыпуск).md
Normal file
@@ -0,0 +1,156 @@
|
||||
## Статусы объектов
|
||||
|
||||
Заявка
|
||||
- Черновик - 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": "Описание ошибки"
|
||||
}
|
||||
```
|
||||
34
Работа/Интеграция СУП/Интеграция CRM и ERP.md
Normal file
34
Работа/Интеграция СУП/Интеграция CRM и ERP.md
Normal file
@@ -0,0 +1,34 @@
|
||||
## Создание пресейл-проекта
|
||||
|
||||
### Создание заявки на проект в CRM
|
||||
|
||||
При соблюдении условий для создания заявки в CRM создается запись в объекте "Заявка" и проставляются значения из сделки.
|
||||
После создания заявки выполняется запрос на async сервис со входными данными
|
||||
|
||||
```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", // Id заявки в CRM, проставляется в СУП для поиска дублей и обновления данных
|
||||
"projectId": "" // AP ID (Пустое - создание проекта. Заполненное - редактирование проекта)
|
||||
}
|
||||
```
|
||||
|
||||
### Создание заявки на проект в ERP
|
||||
|
||||
При получении данных по endpoint `api/1.0/openRequest/createPresaleProject`
|
||||
Система возвращает успешный или неуспешный ответ при создании.
|
||||
После этого в workflow запускается активность ожидания
|
||||
### Получение статуса готовности проекта в ERP
|
||||
|
||||
Async опрашивает ERP сис
|
||||
|
||||
### Обновление заявки в CRM
|
||||
|
||||
### Уведомление CRM об ошибке в ERP
|
||||
20
Работа/Интеграция СУП/Интеграция с ERP.md
Normal file
20
Работа/Интеграция СУП/Интеграция с ERP.md
Normal file
@@ -0,0 +1,20 @@
|
||||
1. Проставить значение настройки "NrbErpHeadProject"
|
||||
2. Проставить значение настройки "NrbAsyncServiceUri" `https://async.prod.plt.adsw.io/`
|
||||
3. Проставить значение настройки "NrbPresaleProjectServiceKey"
|
||||
4. Проставить значение настройки "NrbIsERPIntegrationEnabled"
|
||||
5. Проставить значение настройки "NrbOpenProjectUrl"
|
||||
6. Проставить значение настройки "NrbErpServiceSecret"
|
||||
7. Проверить настройку "GatewayURLKey"
|
||||
|
||||
Секреты CRM
|
||||
1. Dev CRM `20b6702d-a3f7-4dfa-baad-640da98b727c`
|
||||
2. Preprod CRM `347bf64d-8920-4de6-a0f1-654c2ab15fda`
|
||||
3. Prod CRM `24b9aef3-dffb-4f9e-9c5d-fa8a9802276f`
|
||||
|
||||
Cекреты ERP
|
||||
1. Dev `067d72e8-2728-493b-b7b0-4fa4c482d921`
|
||||
2. Prod `ff915955-844e-4a93-a933-c43cfc84adf4`
|
||||
|
||||
|
||||
Dev Private Gateway - `https://private-api-gateway-feature-itdev-1381.dev.plt.adsw.io/query`
|
||||
Dev Async - `https://async-feature-itdev-1381.dev.plt.adsw.io/`
|
||||
85
Работа/Интеграция СУП/Некоммерческий проект.md
Normal file
85
Работа/Интеграция СУП/Некоммерческий проект.md
Normal 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": "Описание ошибки"
|
||||
}
|
||||
```
|
||||
90
Работа/Интеграция СУП/Создание клиента.md
Normal file
90
Работа/Интеграция СУП/Создание клиента.md
Normal file
@@ -0,0 +1,90 @@
|
||||
## Авторизация
|
||||
|
||||
Используется кастомный header `X-Erp-Integration`
|
||||
Значение хранится в конфигах у системы СУП.
|
||||
Для дев и прод разные значения.
|
||||
При получении значения необходимо его сравнить со значением хранящимся в конфиге.
|
||||
Если значения не соответствуют, то вернуть ошибку.
|
||||
## Создание клиента
|
||||
|
||||
Используется endpoint с методом POST
|
||||
|
||||
Предлагаемый вариант
|
||||
`api/1.0/openRequest/createClient`
|
||||
### Запрос
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "Альфа-Пласт",
|
||||
"shortName": "Альфа-Пласт",
|
||||
"managerId": "00123456", // Значение ИНС сотрудника
|
||||
"countryCode": "RU", // Двухбуквенный код страны
|
||||
"industryCode": "0015", // Код отрасли ERP
|
||||
"authorId": "00123456", // Значение ИНС сотрудника
|
||||
"accountId": "57ef229c-d8e4-4da5-b87a-7205e7eb7c42"
|
||||
}
|
||||
```
|
||||
|
||||
```
|
||||
"name" - Наименование клиента
|
||||
"shortName" - Краткое название
|
||||
"managerId" - Менеджер по продажам
|
||||
"countryCode" - Страна
|
||||
"industryCode" - Отрасль
|
||||
"authorId" - Автор клиента в CRM
|
||||
"accountId" - Id контрагента в CRM
|
||||
```
|
||||
### Ответ
|
||||
|
||||
Успешный
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"errorMessage": ""
|
||||
}
|
||||
```
|
||||
|
||||
Неуспешный
|
||||
```json
|
||||
{
|
||||
"success": false,
|
||||
"errorMessage": "Текст ошибки"
|
||||
}
|
||||
```
|
||||
## Проверка готовности создания клиента
|
||||
|
||||
Используется endpoint с методом GET
|
||||
|
||||
Предлагаемый вариант
|
||||
`api/1.0/openRequest/viewAccount?accountId={accountId}`
|
||||
|
||||
Главная суть метода, что мы по значению `accountId` из пункта `Создание клиента` получаем готовность создания клиента.
|
||||
Клиент считается созданным, если у него заполнено поле `ClientId` (уточнить как называется в базе данных поле `Код клиента из R3`)
|
||||
### Ответ
|
||||
|
||||
Клиент еще создается
|
||||
```json
|
||||
{
|
||||
"status": "Waiting",
|
||||
"clientId": "",
|
||||
"errorMessage": ""
|
||||
}
|
||||
```
|
||||
|
||||
Создание клиента завершено
|
||||
```json
|
||||
{
|
||||
"status": "Success",
|
||||
"clientId": "0000101202",
|
||||
"errorMessage": ""
|
||||
}
|
||||
```
|
||||
|
||||
Ошибка при создании клиента
|
||||
```json
|
||||
{
|
||||
"status": "Error",
|
||||
"clientId": "",
|
||||
"errorMessage": "Описание ошибки"
|
||||
}
|
||||
```
|
||||
31
Работа/Интеграция СУП/Тестирование интеграции CRM - СУП.md
Normal file
31
Работа/Интеграция СУП/Тестирование интеграции CRM - СУП.md
Normal file
@@ -0,0 +1,31 @@
|
||||
## Описание ошибок
|
||||
|
||||
### Получение готовности проекта /viewApplication
|
||||
|
||||
| **Причина** | **Код статуса** | **Сообщение** |
|
||||
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------- | -------------------------------------------------------------------------------------------- |
|
||||
| Значение заголовка X-Erp-Integration не совпадает со значением, прописанным в конфигурации приложения | 403 | - |
|
||||
| Не найден проект по указанному applicationId | 404 | Project not found or an error occurred while creating. |
|
||||
| Не найден сотрудник по указанному значению ИНС в свойстве headProjectId (руководитель проекта) | 500 | projectManagerEmployee not found or an invalid ID was provided. |
|
||||
| Не найден сотрудник по указанному значению ИНС в свойстве directorProjectId (директор проекта) | 500 | projectDirectorEmployee not found or an invalid ID was provided. |
|
||||
| Не найден клиент по указанному коду R3 | 500 | customer not found or an invalid ID was provided. |
|
||||
| У указанного клиента нет привязанного к нему менеджера по продажам, и при этом не указан явный идентификатор менеджера по продажам в свойстве managerProjectId тела | 500 | Customer does not have a sale manager, and sale manager ID was not specified in the request. |
|
||||
| Не найден сотрудник по указанному значению ИНС в свойстве managerProjectId (менеджер по продажам проекта) | 500 | saleManager not found or an invalid ID was provided. |
|
||||
| Произошла ошибка при регистрации проекта в SAP | 500 | SAP returned error code. Project not registered. |
|
||||
| **При перевыпуске**: заявка, привязанная к ID сделки, не найдена, либо проект ещё не зарегистрирован | 500 | Project not found or not yet created. |
|
||||
| **При перевыпуске**: Статус заявки не равен значению «Зарегистрирована» | 500 | Invalid request status. |
|
||||
| **При перевыпуске**: не найден проект, соответствующий заявке | 500 | Error getting corresponding project. |
|
||||
| **При перевыпуске**: Статус проекта не соответствует значениям «Открыт» либо «Закрыт для списания TS» | 500 | Invalid project status. |
|
||||
| **При перевыпуске**: есть активная заявка на закрытие проекта | 500 | An active close request already exists for this project, meaning it cannot be reissued. |
|
||||
### Создание проекта /createPresaleProject
|
||||
|
||||
| **Причина** | **Код статуса** | **Сообщение** |
|
||||
| ----------------------------------------------------------------------------------------------------- | --------------- | -------------------------------------------------------------------------- |
|
||||
| Значение заголовка X-Erp-Integration не совпадает со значением, прописанным в конфигурации приложения | 403 | - |
|
||||
| Нет тела запроса | 400 | No body has been provided. |
|
||||
| Проект с указанным applicationId уже существует, при этом projectId не указан (повторное создание) | 400 | Cannot create project. Project with the same applicationId already exists. |
|
||||
### Получение статусов заявок и проектов /getPresaleProjectsStatus
|
||||
|
||||
| **Причина** | **Код статуса** | **Сообщение** |
|
||||
| ----------------------------------------------------------------------------------------------------- | --------------- | ------------- |
|
||||
| Значение заголовка X-Erp-Integration не совпадает со значением, прописанным в конфигурации приложения | 403 | - |
|
||||
12
Работа/Интеграция СУП/Тестирование.md
Normal file
12
Работа/Интеграция СУП/Тестирование.md
Normal file
@@ -0,0 +1,12 @@
|
||||
## Ошибка при создании проекта
|
||||
|
||||
- В CRM создается заявка
|
||||
- Отправляем запрос в СУП `/createPresaleProject`
|
||||
- Создается заявка в СУП и связывается с заявкой CRM `applicationId проставлен`
|
||||
- СУП получает ошибку от SAP о создании проекта
|
||||
- СУП возвращает ошибку в CRM `SAP returned error code. Project not registered`
|
||||
- CRM пытается повторно отправить запрос на создание проекта с такими же входными данными, но получает ошибку `Project with the same applicationId already exists`
|
||||
|
||||
Предлагаемые действия:
|
||||
- Если в СУП приходит запрос с `applicationId`, который уже привязан к какой-то заявке, то проверять эту заявку.
|
||||
- Если у заявки не проставлен
|
||||
Reference in New Issue
Block a user