## Integration: Competera <> OMS <> CRM <> View
Варто врахувати, що зараз ціно утворення відбувається на стороні старої системи CRM.
Ціноутворення включає в себе
- первинний імпорт цін, при заведенні товарів;
- додовання промо ціни (акційна);
- параметри формуваеея ціни: ціна специфікації з пдв, ціна специфікації з пдв з урахуванням беків, РРЦ, МРЦ, ціна закупівлі, мінімальна маржа, цільова маржа;
- ціна для опта;
Зараз на рівні CRM є логіка котра розраховує ціну і передає на вітрину (сайт).
При переході на PMS (Competera) ми переносимо більшу частину ціноутворення з CRM туди. Окрім створення акційних цін, цін на бандли (продажа групи товарів) і оптової ціни.
#### Ідея реалізації
Ціноутворення для звичайних товарів котрі не продаються як оптові і як бандли ми переносимо на сторону Competera.
Competera на своїй стороні розраховує актуальну ціну і відправляє через Kafka топік (competera.product_price_updated) нам в OMS. Ми на стороні OMS як джерело правди по цінам сприймаємо Competera.
Отримані ціни записуємо в БД як актуальна ціна і передаємо в RMQ на CRM як оновлення по товару. Далі CRM записує собі цю інформацію і передає на вітрину.
Якщо на рівні CRM ціну буде установленно вручну то це перезапише ціну котру прислали ми і ця ціна полетить на вітрину. Нова ціна, котра була встановленна на рівні CRM буде врахована Competera і при наступній відправці ми її отримаємо в OMS і далі прокинемо в CRM.
Тобто всі ціни котрі приходять з Competera завжди перезаписують все інше.
На рівні CRM залишаємо формування ціни для бандлів і опта. В першій ітерації Competera не працює з цим.
#### Squence diagram зміни та передачі ціни на вітрину.
```sequence
Competera->OMS: Sent actual price
Note right of OMS: OMS save actual price for products
OMS->CRM: Send actual price
Note right of CRM: CRM save actual price
CRM->View: Send actual price
Note right of CRM: In CRM add new price to products
CRM->View: Sent actual price
Note left of Competera: The new iteration
Competera->OMS: Sent actual price
Note right of OMS: OMS save actual price for products
OMS->CRM: Send actual price
Note right of CRM: CRM save actual price
CRM->View: Send actual price
```
#### Flowchart зміни ціни
```flow
st=>start: OMS:Get actual price
e=>end: Send price to Store View
op=>operation: OMS:save price in
op2=>operation: OMS:send price to CRM
op3=>operation: CRM:save as actual price
cond=>condition: CRM:Is price manually change?
st->op->op2->op3->cond
cond(yes, right)->op3
cond(no)->e
```
Потік даних налаштований в одному напрямку, де джерелом правди по ціни завжди буде Competera.
З Competera ціна приходить в OMS і далі прокидується на вітрину як актуальна ціна через CRM.
Якщо ціна буде зміненна на рівні CRM то до наступного оновлення ця ціна з БД буде затягнута в Competera і врахована при наступній пероцінці.
### Додатково нам потрібно
У нас уже для компетара уже створенна view з назвою competera_products і нам до цієї view потрібно додати поле in_stok в котрому показувати залишки по товарам в кількості шт. на складі.