feat(22f): domrf_obj_checks table — 6 "Проверено на наш.дом.рф" checks #303

Merged
lekss361 merged 1 commit from fix/22f-obj-checks into main 2026-05-17 15:07:24 +00:00
Owner

Summary

Issue #297 sub-task 22f (0.5d) — NEW table domrf_obj_checks для 6 чекбоксов «Проверено на наш.дом.рф».

Schema

CREATE TABLE domrf_obj_checks (
  obj_id      bigint NOT NULL,
  check_type  text NOT NULL,
  passed      bool NOT NULL,
  checked_at  timestamptz DEFAULT NOW(),
  scraped_at  timestamptz DEFAULT NOW(),
  PRIMARY KEY (obj_id, check_type)
);
CREATE INDEX domrf_obj_checks_obj_idx ON (obj_id);

6 check_type values

Value Meaning
no_problems У застройщика нет проблемных объектов
docs Опубликован полный комплект документов
timing Сроки строительства соблюдены
photos Актуальные фото хода строительства
bankruptcy Застройщик не банкрот
declaration Проектная декларация обновлена

Changes

  • data/sql/111_22f_domrf_obj_checks.sql (+49 lines, idempotent BEGIN…COMMIT)
  • Vault: fixes/Fix_BUG22f_ObjChecks_NewTable_May17.md
  • No FK on obj_id — intentional (allows checks before obj row exists)
  • No Python touched — scraper hook будет отдельным PR

Test plan

  • Migration applies cleanly
  • Re-apply idempotent (CREATE TABLE IF NOT EXISTS + CREATE INDEX IF NOT EXISTS)
  • \d domrf_obj_checks — PK + index present

Related: issue #297 sub-task 22f · Phase 3 schema

## Summary Issue #297 sub-task **22f** (0.5d) — NEW table `domrf_obj_checks` для 6 чекбоксов «Проверено на наш.дом.рф». ## Schema ```sql CREATE TABLE domrf_obj_checks ( obj_id bigint NOT NULL, check_type text NOT NULL, passed bool NOT NULL, checked_at timestamptz DEFAULT NOW(), scraped_at timestamptz DEFAULT NOW(), PRIMARY KEY (obj_id, check_type) ); CREATE INDEX domrf_obj_checks_obj_idx ON (obj_id); ``` ## 6 check_type values | Value | Meaning | |---|---| | `no_problems` | У застройщика нет проблемных объектов | | `docs` | Опубликован полный комплект документов | | `timing` | Сроки строительства соблюдены | | `photos` | Актуальные фото хода строительства | | `bankruptcy` | Застройщик не банкрот | | `declaration` | Проектная декларация обновлена | ## Changes - `data/sql/111_22f_domrf_obj_checks.sql` (+49 lines, idempotent BEGIN…COMMIT) - Vault: `fixes/Fix_BUG22f_ObjChecks_NewTable_May17.md` - No FK on `obj_id` — intentional (allows checks before obj row exists) - No Python touched — scraper hook будет отдельным PR ## Test plan - [ ] Migration applies cleanly - [ ] Re-apply idempotent (CREATE TABLE IF NOT EXISTS + CREATE INDEX IF NOT EXISTS) - [ ] `\d domrf_obj_checks` — PK + index present Related: issue #297 sub-task 22f · Phase 3 schema
lekss361 added 1 commit 2026-05-17 15:05:31 +00:00
New table domrf_obj_checks (PK: obj_id, check_type) stores per-object
pass/fail state for the 6 verification checks shown on наш.дом.рф flat
pages: no_problems, docs, timing, photos, bankruptcy, declaration.

Closes #297 (sub-task 22f).
lekss361 merged commit 16e3d5c86d into main 2026-05-17 15:07:24 +00:00
Author
Owner

Merged via deep-code-reviewer — verdict APPROVE.

Что проверено:

  • Migration 111_22f_domrf_obj_checks.sql — sequential после 110 (108/109/110 присутствуют, gap'ов нет).
  • BEGIN/COMMIT + CREATE TABLE IF NOT EXISTS + CREATE INDEX IF NOT EXISTS — идемпотентно.
  • Composite PK (obj_id, check_type) — корректно защищает от дубликатов.
  • No FK on obj_id — intentional (allows checks до obj row). Acceptable.
  • passed bool NOT NULL — OK, unknown state не требуется по сценарию.
  • COMMENT ON COLUMN — все 5 колонок задокументированы, включая разницу checked_at (из DOM.РФ payload) vs scraped_at (наш scrape time). Хорошо.
  • Vault entry fixes/Fix_BUG22f_ObjChecks_NewTable_May17.md присутствует.
  • Consumers нет (Python scraper hook отдельным PR) — safe deploy.

Smoke после deploy:

\d domrf_obj_checks   -- PK (obj_id, check_type) + domrf_obj_checks_obj_idx visible

MINOR follow-up (не блокер):

  • check_typetext без CHECK (check_type IN (...)). Если хочется DB-level guard от опечаток в scraper — добавить отдельным PR. Сейчас validation остаётся на Python-стороне (которая придёт в следующем PR).

Ожидается follow-up: Python scraper hook + опционально CHECK constraint.

Merged via deep-code-reviewer — verdict APPROVE. **Что проверено:** - Migration `111_22f_domrf_obj_checks.sql` — sequential после 110 (108/109/110 присутствуют, gap'ов нет). - `BEGIN/COMMIT` + `CREATE TABLE IF NOT EXISTS` + `CREATE INDEX IF NOT EXISTS` — идемпотентно. - Composite PK `(obj_id, check_type)` — корректно защищает от дубликатов. - No FK on `obj_id` — intentional (allows checks до obj row). Acceptable. - `passed bool NOT NULL` — OK, unknown state не требуется по сценарию. - `COMMENT ON COLUMN` — все 5 колонок задокументированы, включая разницу `checked_at` (из DOM.РФ payload) vs `scraped_at` (наш scrape time). Хорошо. - Vault entry `fixes/Fix_BUG22f_ObjChecks_NewTable_May17.md` присутствует. - Consumers нет (Python scraper hook отдельным PR) — safe deploy. **Smoke после deploy:** ``` \d domrf_obj_checks -- PK (obj_id, check_type) + domrf_obj_checks_obj_idx visible ``` **MINOR follow-up (не блокер):** - `check_type` — `text` без `CHECK (check_type IN (...))`. Если хочется DB-level guard от опечаток в scraper — добавить отдельным PR. Сейчас validation остаётся на Python-стороне (которая придёт в следующем PR). Ожидается follow-up: Python scraper hook + опционально CHECK constraint.
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#303
No description provided.