# Build 011 — Common Events Layer

**Build ID:** 011

**Компонент:** `common/events.py`

**Статус:** **Accepted**

---

# Цель Build

Реализовать единый слой представления событий подсистемы Market Intelligence.

Events Layer определяет стандартный формат аналитических событий, которые в дальнейшем смогут использоваться Runtime, журналом, системой диагностики и EventBus.

Данный Build не реализует публикацию событий и не зависит от конкретного механизма доставки.

---

# Реализованные компоненты

Создан файл:

```text
market_intelligence/common/events.py
```

Реализованы:

- `MarketIntelligenceEvent`
- `build_engine_result_event()`
- `build_engine_snapshot_event()`
- `build_result_snapshot_event()`
- `market_intelligence_event_to_payload()`

---

# Архитектурная задача

До появления данного Build существовали:

```text
EngineResult

↓

Payload

↓

Snapshot
```

Однако отсутствовало единое архитектурное представление аналитического события.

После реализации Events Layer любое завершение работы Engine может быть представлено в виде стандартного события Market Intelligence.

---

# Архитектурные решения

В ходе реализации приняты следующие решения.

## Event является архитектурной моделью

MarketIntelligenceEvent описывает событие анализа рынка.

Сам объект события не занимается публикацией.

Таким образом разделяются:

```text
Event Model

↓

Event Transport
```

Это позволяет использовать любые механизмы доставки без изменения модели события.

---

## Event строится из существующих моделей

События создаются исключительно через существующие архитектурные объекты.

Поддерживаются цепочки:

```text
EngineResult
        ↓
Event
```

и

```text
EngineResult
        ↓
Snapshot
        ↓
Event
```

Никаких дополнительных расчётов внутри Event Layer не выполняется.

---

## Payload не дублируется

Events Layer не сериализует данные самостоятельно.

Используются уже существующие компоненты:

- Payload Layer;
- Snapshot Layer.

Это сохраняет принцип единственного источника истины.

---

## Независимость от EventBus

Common Layer определяет только структуру события.

Он ничего не знает о:

- EventBus;
- Runtime;
- Journal;
- AutoTrade;
- Telegram;
- Exchange.

Таким образом Event Layer остаётся полностью независимым.

---

# Compile Check

Выполнена проверка:

```bash
python -m compileall \
src/trading/market_intelligence/common/events.py
```

Результат:

```text
Compile successful
```

---

# Architecture Review

Результат:

**PASSED**

Проверено:

- соблюдение Single Responsibility;
- отсутствие публикации событий;
- отсутствие торговой логики;
- использование существующих моделей;
- независимость от Runtime;
- отсутствие циклических зависимостей.

Архитектурных замечаний не выявлено.

---

# Domain Review

Результат:

**PASSED**

Проверено:

- событие отражает только факт завершения анализа;
- отсутствуют торговые действия;
- отсутствуют Runtime-решения;
- структура пригодна для журналирования;
- структура соответствует Runtime Contract.

Замечаний не выявлено.

---

# Итог Build

Build завершил создание общего Events Layer.

Market Intelligence получил единый формат аналитических событий, который может использоваться любыми внешними компонентами платформы.

---

# Build Status

**Accepted**