# Модель данных

## 1. Entity: `field`

Назначение: базовый объект агрономического учета (поле/участок) в контуре хозяйства.

Поля:

- `id` — идентификатор поля.
- `tenant_id` — идентификатор хозяйства.
- `site_id` — идентификатор площадки.
- `name` — наименование поля.
- `area_ha` — площадь поля (га).
- `crop_code` — код культуры.
- `status` — состояние (`active|archived`).
- `updated_at` — время последнего обновления.

## 2. Entity: `field_zone`

Назначение: изолированная зона поля с отдельной гидрологической/технологической моделью.

Поля:

- `id` — идентификатор зоны.
- `field_id` — ссылка на `field`.
- `name` — имя зоны.
- `area_ha` — площадь зоны (га).
- `soil_type` — тип почвы.
- `irrigation_profile_id` — привязка к профилю норм/режима полива.
- `updated_at` — время последнего обновления.

## 3. Entity: `water_source`

Назначение: нормализованное описание источника воды для расчета баланса.

Поля:

- `id` — идентификатор источника.
- `field_id` — ссылка на `field`.
- `field_zone_id` — ссылка на `field_zone` (опционально для уровня поля).
- `source_type` — тип источника (`machine|drip_subsurface|rain`).
- `source_ref` — внешний идентификатор устройства/канала.
- `origin` — происхождение (`controller|sensor|external_weather_api`).
- `confidence` — доверие к источнику (`0..1`).
- `is_primary` — признак primary-источника в пределах типа.
- `updated_at` — время последнего обновления.

## 4. Связь с агрегатом `field_water_balance`

- `field_water_balance.field_id` -> `field.id`.
- `field_water_balance.field_zone_id` -> `field_zone.id`.
- доли по источникам (`machine_mm`, `drip_mm`, `rain_mm`) должны ссылаться на нормализованные `water_source`.

## 5. Инварианты

- `field_zone.field_id` всегда указывает на существующее `field`.
- Для `source_type=rain` поддерживается primary/fallback политика D-008.
- Все derived-значения в `m3` вычисляются из primary-модели `mm` и площади (`field/field_zone`).
