# Changelog

Все изменения проекта Field Mapper.

Формат: [Keep a Changelog](https://keepachangelog.com/ru/1.0.0/)

---

## [Unreleased]

### Добавлено
- **ISOXML экспорт карт предписаний:**
  - `src/services/isoxml_service.py` — генерация ISOXML TaskFile
  - API endpoint `/api/field/export/isoxml/<field_id>`
  - Автоматический расчёт норм внесения (150/250/350 кг/га по NDVI)
  - Совместимость с John Deere, Claas, Case IH, New Holland

- **Улучшенное зонирование полей:**
  - Морфологическая обработка растров (медианный фильтр, binary_closing)
  - Фильтрация мелких полигонов (< 0.5 га)
  - Увеличено упрощение геометрий (0.0001) для гладкости
  - Крупные агрегированные зоны вместо фрагментированных

- **Новый UI страницы поля:**
  - Кнопки экспорта ISOXML и KMZ в шапке
  - Таблица статистики зон с нормами внесения
  - Легенда зон под картой
  - Цветовая индикация зон

- **Тесты:**
  - `tests/test_isoxml_export.py` — тесты ISOXML экспорта
  - `tests/test_upload_integration.py` — интеграционные тесты TIFF
  - 22 теста проходят, 1 пропущен

- **Документация:**
  - `docs/user-guide/isoxml.md` — руководство по ISOXML экспорту
  - Обновлён README.md с новой функциональностью

### Изменено
- `src/services/raster_service.py` — улучшена генерация зон
- `src/handlers/upload_handlers.py` — добавлен ISOXMLExportHandler
- `static/js/modules/field-detail.js` — отображение статистики зон
- `static/css/style.css` — стили для зон и кнопок экспорта
- Обновлены метрики в README (22 теста, ~65% покрытие)

### Исправлено
- `db.py` — добавлено поле `avg_ndvi` в модель FieldZone
- `src/tasks.py` — выделена функция `_process_geotiff_impl()` для тестов
- `src/handlers/upload_handlers.py` — абсолютный путь UPLOAD_DIR
- `docker-compose.yml` — volume uploads для app и worker
- Обработка TIFF файлов в Docker (0.0.0.0, FIELD_MAPPER_DB)

---

## [2026.1] — 2026-03-24

### Добавлено
- **Рефакторинг backend:**
  - Декоратор `@db_connection` для управления БД
  - Валидация входных данных (`src/utils/validators.py`)
  - Type hints во всех Python модулях
  - Command pattern для обновлений полей
  - Кэширование KMZ (`lru_cache(maxsize=128)`)

- **Рефакторинг frontend:**
  - Разделение `main.js` на 9 ES6 модулей
  - Класс `FieldMapperApp` для инкапсуляции состояния
  - Обработка ошибок в API вызовах

- **Docker оптимизация:**
  - Многоэтапная сборка
  - Кэширование npm зависимостей
  - .dockerignore для уменьшения контекста

- **Документация:**
  - REFACTORING_PLAN.md
  - GEMINI_CONTEXT.md
  - Обновлённый README.md

### Изменено
- Кнопка меню перемещена в левый верхний угол (десктоп)
- Кнопка меню перемещена в левый нижний угол (мобильные)
- Увеличен размер кнопки до 50x50px (56x56px на мобильных)

### Исправлено
- Потеря стека вызовов (`raise e` → `raise`)
- Защита `initialize_db()` от production
- Перекрытие кнопки меню контента
- Появление кнопки после закрытия меню

### Удалено
- Дублирование кода подключения к БД (15+ мест)

---

## [2025.2] — 2025-12-15

### Добавлено
- PWA поддержка (Service Worker)
- Offline кэш для DataTables
- Темная тема оформления

### Изменено
- Обновлены зависимости (Python 3.12, Node.js 20)

---

## [2025.1] — 2025-06-20

### Добавлено
- NDVI анализ с зонированием
- Фоновая обработка через Huey + Redis
- Экспорт DJI KMZ (WPML 1.0.6)

---

## [2024.0] — 2024-01-10

### Добавлено
- Первый релиз
- Управление полями (CRUD)
- Импорт/экспорт Shapefile
- Интерактивная карта (Leaflet)

---

## Версии

| Версия | Дата | Описание |
|--------|------|----------|
| Unreleased | — | В разработке |
| 2026.1 | 2026-03-24 | Рефакторинг 2026 |
| 2025.2 | 2025-12-15 | PWA, темная тема |
| 2025.1 | 2025-06-20 | NDVI, Huey |
| 2024.0 | 2024-01-10 | Первый релиз |
