diff --git a/backend/app/api/v1/parcels.py b/backend/app/api/v1/parcels.py index cfb5d396..8b65121f 100644 --- a/backend/app/api/v1/parcels.py +++ b/backend/app/api/v1/parcels.py @@ -1808,11 +1808,15 @@ def analyze_parcel( pipeline_24mo = _aggregate_pipeline(pipeline_rows) # D2 (#34): velocity-score — темп продаж конкурентов вокруг участка. + # SAVEPOINT защищает outer transaction если velocity SQL падает — + # иначе следующие queries (_geotech_risk и пр.) крашатся + # с InFailedSqlTransaction. velocity_data: dict[str, Any] | None = None try: - v_result = compute_velocity(db, parcel_geom_wkt=geom_wkt, radius_km=3.0) - if v_result is not None: - velocity_data = v_result.as_dict() + with db.begin_nested(): + v_result = compute_velocity(db, parcel_geom_wkt=geom_wkt, radius_km=3.0) + if v_result is not None: + velocity_data = v_result.as_dict() except Exception as _ve: logger.warning("velocity compute failed for %s: %s", cad_num, _ve)