feat(mera): загрузчик реестра МКД АИС ФРТ → обогащение houses #3426
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
ИРД
вторичка
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#3426
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "feat/mera-frt-mkd-loader"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Что и зачем
Открытые данные АИС ППК «ФРТ» (бывш. Реформа ЖКХ),
opendata/export/110= реестр МКД региона 66. Анонимный GET, без ЕСИА, ZIP→CSV (UTF-8 BOM,;).41 790 строк по СО / 8 117 по ЕКБ,
houseguid(ФИАС GUID) заполнен на 100% → join кhouses.gar_house_guidбез канонизации адреса.Заполняет только NULL-поля
houses(COALESCE-семантика):year_built,material_walls,material_floors,total_floors,entrances,is_emergency,flat_count,heat_supply_type,gas_supply_type,hot_water+ новыеarea_land,foundation_type,elevators_total.Замер по ЕКБ
wall_materialbuilt_yearfloor_count_maxarea_landis_emergencyОсознанно НЕ сделано
project_type→series_name— свободный текст и фактически дубль материала стен: пусто у 10 635 строк, «кирпичный» 1754, «нет данных» 1496, «Блочный»/«блочный» двумя разными строками. Как серию использовать нельзя.energy_efficiency— решение миграции 284 + реальный класс лишь у ~10% домов (у 25 595 из 41 790 значение «Не присвоен»).elevators_count→passenger_elevators— в источнике это ОБЩЕЕ число лифтов, вhousesраздельно пассажирские и грузовые → отдельная колонкаelevators_total.playground/sportsground— в источнике id справочника (498/499/500), не булев флаг.estimator.pyне тронут — аналоги подбираютсяFROM listingsбез JOIN кhouses, встраивание признаков в подбор когорты это отдельная задача.Найденное на реальных данных
Дубликаты
houseguidреальны и взаимодополняющи: 912 guid'ов, 968 лишних строк, причём у одной строки пары заполненarea_total, а у парной нет. Изначальное «последняя побеждает» теряло эти значения. Строки слитые по полям (первое непустое побеждает) — прогон на реальном CSV показал возврат данных:built_year+282 дома,wall_material+226,area_land+226.Баг
is_alarm: голое'нет'числится мусорным значением текстовых полей, ноis_alarm='Нет'— содержательный ответ. Через общий нормализатор все 37 936 неаварийных домов писались бы как NULL, иis_emergencyникогда не получал быfalse.Проверка
houseguid100%,built_year1853–2022,is_alarm37 936/2 886.ruff check— чисто; полный сьютpytest— 5 648 passed, 37 skipped.frt_mkd+ колонкиhouses) и 291 (сид расписания,enabled=false,interval_days30).robots.txtисточника запрещает/opendata/export/и требуетCrawl-delay 10— зафиксировано в докстринге, прогон делает один GET.