fix(api): bulk geo includes all doc_types by default (only_ddu opt-in)

This commit is contained in:
lekss361 2026-05-11 16:12:58 +03:00
parent 1b65f55802
commit 43672a0068

View file

@ -698,6 +698,10 @@ class BulkGeoEnqueueRequest(BaseModel):
parallelism: int = Field(default=5, ge=1, le=10)
thematic_id: int = Field(default=2, ge=1, le=15, description="1=parcel, 2=quarter, 5=building")
only_ddu: bool = Field(
default=False,
description="True = только ДДУ (002001003000); False = все cad-кварталы",
)
@router.post("/geo/bulk")
@ -708,9 +712,9 @@ def bulk_enqueue_geo(
) -> dict[str, Any]:
"""Разбить pending cad-номера (region 66) на N чанков и запустить N geo-jobs параллельно.
Логика выборки pending те же правила что у source_kind='rosreestr_pending':
quarter_cad_number из rosreestr_deals (region 66, ДДУ, тип 002001003000)
которых нет в cad_quarters_geom.
Логика выборки pending: distinct quarter_cad_number из rosreestr_deals
(region 66, валидный cad-формат) которых нет в cad_quarters_geom.
Если only_ddu=True дополнительный фильтр по ДДУ (тип 002001003000).
"""
_check_token(x_admin_token)
from app.services.job_settings import get_setting_value
@ -718,14 +722,16 @@ def bulk_enqueue_geo(
from app.workers.tasks.nspd_geo import process_nspd_geo_job
# 1) Собрать все pending cad-номера для region 66
ddu_filter = (
"AND doc_type = 'ДДУ' AND realestate_type_code = '002001003000'" if payload.only_ddu else ""
)
rows = db.execute(
text(
"""
f"""
SELECT DISTINCT quarter_cad_number AS cad
FROM rosreestr_deals
WHERE region_code = ANY(:rc)
AND doc_type = 'ДДУ'
AND realestate_type_code = '002001003000'
{ddu_filter}
AND quarter_cad_number IS NOT NULL
AND quarter_cad_number NOT LIKE :bp
AND quarter_cad_number NOT LIKE :bs