Commit graph

  • 1c1ecad8b8 fix(pzz-sync): disable SSL verify for Rosreestr PKK6 (self-signed cert chain) lekss361 2026-05-11 22:44:53 +03:00
  • 2e83d62237 feat(site-finder): center distance bonus display + success_recommendation block lekss361 2026-05-11 22:40:46 +03:00
  • ab0647e4d5 feat(site-finder): distance to EKB center + success quartirography recommendation lekss361 2026-05-11 22:35:21 +03:00
  • c31da62e8d feat(analytics): recommend_mix v3.1-v3.4 - noise + 2D competitors + 24m cap + success-driven lekss361 2026-05-11 22:19:41 +03:00
  • 369b5a4706 feat(db): v_bucket_success_score view (success-driven mix #25) lekss361 2026-05-11 22:04:22 +03:00
  • 8be539ddc6 feat(site-finder): ПЗЗ territorial zones from Rosreestr PKK6 + zoning in analyze lekss361 2026-05-11 21:51:51 +03:00
  • 5b03d6d799 feat(site-finder): isochrones UI + networks VKH + OSM substations lekss361 2026-05-11 21:48:21 +03:00
  • 923f250926 feat(site-finder): /parcels/{cad}/isochrones via OpenRouteService lekss361 2026-05-11 21:44:22 +03:00
  • 6ce634a9b9 feat(site-finder): utilities (power/pipeline) + fix Внешние факторы layout lekss361 2026-05-11 21:38:20 +03:00
  • 2855a01ca7 feat(site-finder): v3.5 - seasonal weather + hydrology + geotech risk lekss361 2026-05-11 21:32:07 +03:00
  • 7bb51aa838 feat(site-finder): v3.4 - weather enrichment (temp/precip/UV) + geology stub lekss361 2026-05-11 21:17:57 +03:00
  • 7900dc5238 fix(site-finder): WKT LINESTRING needs commas + rosreestr_deals real column names lekss361 2026-05-11 20:58:49 +03:00
  • 232c81eae9 feat(site-finder): v3.3 - score label + market_trend + multi-thematic bulk lekss361 2026-05-11 20:51:59 +03:00
  • 1e9d32ee3c feat(site-finder): v3.2 — noise + air quality + wind analytics lekss361 2026-05-11 20:42:37 +03:00
  • a2e8a49e6d feat(db): osm_noise_sources_ekb for site-finder noise scoring lekss361 2026-05-11 20:35:27 +03:00
  • d08d06d8a8 fix(geo): parcels (thematic_id=1) come from rosreestr2coord in WGS84 — drop ST_Transform lekss361 2026-05-11 20:09:58 +03:00
  • 81cd7499f6 feat(site-finder): cad_parcels_geom migration + POI markers on map + bulk-job UX lekss361 2026-05-11 19:54:56 +03:00
  • f419900968 feat(site-finder): v3.1 — cad_parcels_geom, analyze fallback, POI lat/lon, OSM expand lekss361 2026-05-11 19:52:19 +03:00
  • ea3d58fa7d feat(routing): /sf -> /site-finder permanent redirect (short URL alias) lekss361 2026-05-11 19:49:26 +03:00
  • e6c062cc5b feat(home): site-finder no longer WIP + admin/scrape/all + buildings in object card desc lekss361 2026-05-11 19:36:43 +03:00
  • a7d7dc9667 fix(site-finder): dedupe competitors — same domrf_kn_objects 3x snapshots bug lekss361 2026-05-11 19:04:29 +03:00
  • 3aeda297ee fix(poi-sync): split Overpass query per category (504 Gateway Timeout) lekss361 2026-05-11 18:54:28 +03:00
  • 93f13795bb fix(poi-sync): add User-Agent header — Overpass returns 406 for python-httpx default UA lekss361 2026-05-11 18:46:47 +03:00
  • 9742219ef6 debug(poi-sync): DB breadcrumbs to nspd_geo_log for silent-fail diagnosis lekss361 2026-05-11 18:37:43 +03:00
  • f81bd710c0 feat(api): POST /admin/scrape/poi-sync — manual OSM POI sync trigger lekss361 2026-05-11 18:12:37 +03:00
  • a4e8fff5ac feat(site-finder): POST /parcels/{cad}/analyze endpoint + UI lekss361 2026-05-11 18:11:58 +03:00
  • 6dea34186b feat(site-finder): OSM POI loader + Celery weekly sync lekss361 2026-05-11 18:08:34 +03:00
  • 688e094844 feat(db): osm_poi_ekb table for site-finder POI analysis lekss361 2026-05-11 18:06:28 +03:00
  • ceaf553eb7 fix(analytics): recommend page UI — caveat badge wrap + headline baseline label lekss361 2026-05-11 17:53:35 +03:00
  • 0de32cd2ce fix(analytics): dedupe comparables — domrf_kn_objects has 3x snapshots per obj_id lekss361 2026-05-11 17:52:37 +03:00
  • 9658baa6b2 fix(deploy): keep last 2 SHA-tagged images per repo, drop older lekss361 2026-05-11 17:45:20 +03:00
  • 03e572330b feat(analytics): recommend page shows cad_quarter, buildings count, district stats lekss361 2026-05-11 17:37:57 +03:00
  • 2847262953 feat(analytics): extend recommend comparables with cad_quarter, lat/lon, buildings_n lekss361 2026-05-11 17:30:09 +03:00
  • b18f44e1ad feat(analytics): add cad_quarter_count to districts endpoint lekss361 2026-05-11 17:29:40 +03:00
  • ae86d62e9b fix(worker): worker_ready geo-resume blocked by early return in kn-resume lekss361 2026-05-11 17:12:31 +03:00
  • caa467fb7e fix(worker): periodic zombie cleanup via beat instead of worker_ready lekss361 2026-05-11 17:02:29 +03:00
  • 17feaa408e debug(worker): persistent breadcrumb in nspd_geo_log on worker_ready lekss361 2026-05-11 16:51:50 +03:00
  • f539e0e414 fix(admin): bump UI stale threshold 60/90s -> 300s lekss361 2026-05-11 16:49:37 +03:00
  • fdd5b4e0e2 fix(worker): dispose SQLA engine in worker_process_init + log resume scan lekss361 2026-05-11 16:40:21 +03:00
  • 5c92c2a0e9 fix(worker): auto-resume after redeploy + bump concurrency 5->8 lekss361 2026-05-11 16:23:16 +03:00
  • 43672a0068 fix(api): bulk geo includes all doc_types by default (only_ddu opt-in) lekss361 2026-05-11 16:12:58 +03:00
  • 1b65f55802 feat(analytics): buildings block + dynamic developer comparison lekss361 2026-05-11 16:03:16 +03:00
  • 8724a4731b feat(admin): unify job settings + bulk geo trigger under /admin/scrape/all lekss361 2026-05-11 16:02:52 +03:00
  • fe2a881cec feat(api,analytics): bulk geo backfill + complex_buildings query lekss361 2026-05-11 15:56:17 +03:00
  • b18170d3c0 perf(worker): bump concurrency 2->5 for parallel nspd_geo jobs lekss361 2026-05-11 15:56:06 +03:00
  • 7e1540f84b feat(admin): /admin/jobs/settings page — inline-edit Celery job config lekss361 2026-05-11 15:47:39 +03:00
  • 2fee7739e8 feat(jobs): centralized job_settings API + DB-driven beat schedule lekss361 2026-05-11 15:38:13 +03:00
  • cbe1253461 feat(db): backfill complexes nulls + add job_settings (migrations 80, 81) lekss361 2026-05-11 15:30:44 +03:00
  • de21fac0a8 perf(ci): skip unchanged docker builds via paths-filter lekss361 2026-05-11 15:10:23 +03:00
  • a7d4223dfa perf(ci): parallelize docker builds + add npm cache mount lekss361 2026-05-11 15:01:10 +03:00
  • 1a0bf10017 fix(nspd-geo): json.dumps for quarter raw_props (Python True → JSON true) lekss361 2026-05-11 14:59:46 +03:00
  • ce5e29f92e fix(nspd-geo): rosreestr2coord v5 compat — delay arg, tmp cache, dumps default lekss361 2026-05-11 14:43:44 +03:00
  • 5b741578e6 feat(claude): add 4 workers + tech-analyst subagents lekss361 2026-05-11 14:36:34 +03:00
  • b19ca1ed41 fix(nspd-geo): rosreestr2coord cache permission in non-root worker lekss361 2026-05-11 14:22:11 +03:00
  • 3e6cddde33 docs(claude): obsidian as the only knowledge store lekss361 2026-05-11 14:19:48 +03:00
  • 3919a40c49 refactor(nspd-geo): unify on rosreestr2coord v5, drop legacy column lekss361 2026-05-11 14:13:33 +03:00
  • ccd60aea7d upd readme lekss361 2026-05-11 13:43:15 +03:00
  • ead0de99ed fix(worker): rosreestr2coord in lockfile + admin logs panel for NSPD/objective lekss361 2026-05-11 12:47:19 +03:00
  • 769b16df47 fix(worker): port objective_etl from psycopg2 → psycopg v3 lekss361 2026-05-11 12:07:57 +03:00
  • b14700e583 fix deploy lekss361 2026-05-11 10:01:36 +03:00
  • d50626b32a fix lekss361 2026-05-11 09:57:40 +03:00
  • b0f5c38894 feat(deploy): split obsidian stack from main + path-filtered GHA lekss361 2026-05-11 09:51:31 +03:00
  • 79e2e94e09 refactor(nspd): remove Playwright-based scraper, rosreestr2coord = default lekss361 2026-05-11 09:21:12 +03:00
  • 54dbc77348 feat(geo): NSPD bulk-fetcher без Playwright + resume-friendly UI lekss361 2026-05-11 08:53:28 +03:00
  • 304a9a623b Merge branch 'main' of https://github.com/lekss361/-gendesign lekss361 2026-05-10 21:11:31 +03:00
  • 52bcf9d30c feat(db): canonical complexes + unified views + naming consistency lekss361 2026-05-10 21:11:20 +03:00
  • d8d76be86d Memory: +rel Project_GenDesign→SiteFinder_v0_2_May08 (deploys), SiteFinder_v0_2_May08→MVP_Scope_AreaSelect_Apr25 (contradicts... (2026-05-10 22:44:45 +05) Light1YT 2026-05-10 22:44:45 +05:00
  • 32a9666f68 Memory: +ent SiteFinder_v0_2_May08 (2026-05-10 22:43:45 +05) Light1YT 2026-05-10 22:43:45 +05:00
  • 97b19a0b85 Import Site Finder app from analysis/ vibe-coding session Light1YT 2026-05-10 22:42:25 +05:00
  • 20625f78f3 fix ui lekss361 2026-05-10 20:16:26 +03:00
  • 7c05d0a0d8 feat(objective): full sync pipeline + dynamic admin config lekss361 2026-05-10 19:54:15 +03:00
  • 12732949b9 ignore lekss361 2026-05-07 21:04:38 +03:00
  • aaa5d44e77 feat(objective): integrate api.objctv.ru — auth, schema, weekly sync backend/app/services/scrapers/objective.py: ObjectiveClient — GetToken (Bearer cached в Redis 25 min TTL) + GetReport v2 с UseDdu/UseDkp. 4 высокоуровневых метода: report_corpuses_summary, report_lots_summary, report_corpuses_per_flat, report_lots_per_flat. Retry 401/429/5xx, rate-limit 500ms, brotli. backend/app/workers/tasks/scrape_objective.py: Celery task sync_objective_group — еженедельно тянет 4 канон. отчёта по группе, raw payload в objective_raw_reports. celery_app.py: +include + beat «0 5 * * mon». data/sql/68_schema_objective.sql: 6 таблиц — runs, raw_reports (jsonb), oks (готовые ТЭП + escrow/debt), lots, lots_history (per-flat per-day), complex_mapping (Objective ↔ domrf_kn_objects, is_reviewed workflow). data/sql/69_objective_smoke.py: stand-alone GetToken + 4 отчёта → data/raw/objective_smoke/<ts>/. Используется один раз чтобы понять реальную схему payload перед написанием parser-слоя. config: OBJECTIVE_API_KEY, OBJECTIVE_DEFAULT_GROUP=Екатеринбург, OBJECTIVE_SYNC_CRON='0 5 * * mon'. lekss361 2026-05-07 21:04:00 +03:00
  • b44c7f157e fix(analytics): bucket by area/deal_count — rosreestr aggregates packed deals Critical bug в quartirography() и _BUCKET_SQL: rosreestr с 2025Q1 публикует пакетные ДДУ одной строкой (area=SUM, deal_count=N). Bucket по сырой area загонял 5×40м² в bucket «80+ м²», давая 70% портфеля 80+ вместо реальных 4%. Изменения: - area → (area / deal_count) при bucket'инге - COUNT(*) → SUM(deal_count) для подсчёта реальных квартир - удалён area<=200 фильтр (отрезал 95% свежих агрегированных строк, realestate_type_code='002001003000' уже фильтрует не-квартиры) Эффект: - Dashboard chart «парадокс портфеля»: 80+ был 70% → стал 3.1% - recommend_mix shares: 1-к 58%, 2-к 29%, 3-к 5%, Студии 4%, 80+ 4% - total_deals для Свердл за 24 мес: 7553 → 40084 (агрегация теперь учтена) lekss361 2026-05-03 18:31:38 +03:00
  • f80a2c1d05 fix(scrape): SQLAlchemy text() парсил ':00:' regex как named-param lekss361 2026-04-30 23:16:11 +03:00
  • bb28f77f66 fix+chore: NSPD migration applied to prod, README trim, analytics backlog +5 lekss361 2026-04-30 23:04:19 +03:00
  • e22f86bc06 audit-fix: 27mo окно, MODE bucket, индексы recommend_mix lekss361 2026-04-30 22:41:43 +03:00
  • 78b8d7aa00 add NSPD lekss361 2026-04-30 22:23:18 +03:00
  • db6711446a fix lekss361 2026-04-30 22:16:44 +03:00
  • 25b73035a1 sprint1: nspd scraper industrialization, per-bucket elasticity, cadastre cross-check, sentry releases lekss361 2026-04-30 21:51:19 +03:00
  • b39bac57bf upd recommend sys lekss361 2026-04-29 08:39:09 +03:00
  • 132d57a3f3 fix recommend page lekss361 2026-04-29 08:16:22 +03:00
  • 17ad0e18f5 feat(geo): ЖК → district mapping через PostGIS-полигоны OSM (Limit_District_Geometry closed) lekss361 2026-04-29 08:03:38 +03:00
  • 195d942ca7 feat: Tier α velocity overhaul + scraper FK fixes lekss361 2026-04-29 00:25:41 +03:00
  • b74c7db438 fix(scraper): closing FK violations + transactional poisoning in upsert_objects lekss361 2026-04-28 23:56:27 +03:00
  • d1f2380f32 fix(sqlalchemy): убрать :name::type — psycopg3 их не парсит, ломает Phase A INSERT в kn_scrape_runs (run_region_sweep крашится сразу с ProgrammingError, task_received записан, но run_id никогда не создаётся). 4 места: domrf_kn.py (resume INSERT, new run INSERT, snapshot UPDATE) + admin_leads.py (date_to filter). Заменено на CAST(:name AS type). lekss361 2026-04-28 23:37:03 +03:00
  • c3bc96535d fix(scraper): диагностируем «кнопка не работает» — Redis lock + task_received log lekss361 2026-04-28 23:17:42 +03:00
  • 7a23aa9edc fix: heartbeat-based zombie autoclean (10min) + Phase A heartbeats; ship recommend velocity calculator lekss361 2026-04-28 22:54:03 +03:00
  • 1507575698 fix alch lekss361 2026-04-27 22:03:48 +03:00
  • 8dda3903e5 add log scrapper lekss361 2026-04-27 21:50:44 +03:00
  • 62659887e9 add rec ui lekss361 2026-04-27 21:38:37 +03:00
  • ecc0dbafd5 add predict lekss361 2026-04-27 21:28:02 +03:00
  • 12b1eb8169 add logs lekss361 2026-04-27 20:51:44 +03:00
  • a56216aeb9 fix ui lekss361 2026-04-27 20:42:18 +03:00
  • b3c15bb8ea fix ui lag lekss361 2026-04-27 20:26:55 +03:00
  • c079ac2a77 fix photo lekss361 2026-04-27 20:06:18 +03:00
  • 5056438fcf add anal4 lekss361 2026-04-27 19:45:47 +03:00
  • 522ecca5c4 ship #13-16: multi-target Dockerfile, per-object drill-in, CRM pipeline, 442-sweep instructions #16 Dockerfile: runner (lean, 1.6 GB) + runner-with-chromium (2.9 GB). Compose + deploy.yml pushes 2 GHCR images. Backend saves 1.3 GB. #15 5 backend object endpoints + /analytics/objects/[id] page (gallery, POI table, sale chart) + sparkline-driven PrinzipObjectsTable. #14 prinzip_leads/deals + 2 MVs. Import script with PII-hashing & --inspect-only mode. 3 funnel endpoints + Sankey/Monthly charts. #13 README section with UI/CLI/SQL for 442-object sweep. lekss361 2026-04-27 19:32:37 +03:00
  • 7c4197000f add monitor scrappers lekss361 2026-04-27 19:04:01 +03:00
  • bfee5ea916 fix lekss361 2026-04-27 18:59:56 +03:00