feat(mera): слой ДТП (dtp-stat/ГИБДД) в PostGIS + радиусные агрегаты #3428

Merged
lekss361 merged 2 commits from feat/mera-dtp-layer into main 2026-09-08 22:10:57 +00:00

2 commits

Author SHA1 Message Date
bot-backend
aa02b68219 merge main в feat/mera-dtp-layer
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI / changes (pull_request) Successful in 11s
CI / backend-tests (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 5m7s
# Conflicts:
#	tradein-mvp/backend/pyproject.toml
2026-09-09 01:04:52 +03:00
bot-backend
3a73c9582c feat(mera): слой ДТП (dtp-stat/ГИБДД) в PostGIS + радиусные агрегаты
All checks were successful
CI Trade-In / changes (pull_request) Successful in 7s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / changes (pull_request) Successful in 10s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 5m17s
Первая локационная фича вне OSM. Открытая выгрузка по Свердловской области —
GeoJSON, 5 МБ zip / ~71 МБ распакованных, 31 253 ДТП за 2015-01..2026-01,
из них ~15 тыс. с адресом в Екатеринбурге. Потоковый парс через ijson,
файл целиком в память не читается.

Атрибуты: тяжесть, категория, погибшие/раненые, освещение, погода, объекты
УДС рядом. Агрегаты в радиусе — bbox-префильтр + ST_DWithin(geom::geography),
с функциональным GIST по (geom::geography): обычный GIST по geometry
планировщик под такой предикат не берёт (замеры мигр. 270 и 134).

ПДн НЕ СОХРАНЯЕМ: в vehicles[].participants[] лежат пол, роль и нарушения
физлиц. Ни колонкой, ни в raw-jsonb — зафиксировано в миграции, докстринге
и покрыто тестом.

Битые координаты источника режутся на парсе: из 31 253 записей 86 лежат вне
региона, в том числе 10 ровно в (0,0) и такие значения, как (1.0, 1.0) и
(41.0, 47.0). Слой кормит агрегаты локации, пускать туда мусор нельзя.
Санити-рамка намеренно шире официальных границ области (55.0-63.5 N,
56.0-67.5 E), чтобы не срезать легитимный север (~63°).

dtp_index пока не подключён к API — потребитель отдельным PR.

Дамп источника заморожен на Last-Modified 2026-02-26: зафиксировано в
докстринге, чтобы пустая дельта не читалась как баг загрузчика.

Миграции 294 (таблица + индексы) и 295 (сид расписания, enabled=false,
interval_days 30). Новая зависимость: ijson.
2026-09-09 00:39:53 +03:00