From 475b3d0e1305a801857bf13dde0915d80482894e Mon Sep 17 00:00:00 2001 From: Daniel Roth Date: Wed, 18 Feb 2026 17:19:38 +0000 Subject: [PATCH] input is list of scenarios to consider not list of plans --- .../db/functions/recommendations_functions.py | 7 +++++++ .../categorisation_trigger_request.py | 2 +- backend/categorisation/handler/handler.py | 2 +- .../local_handler/invoke_local_lambda.py | 2 +- backend/categorisation/processor.py | 19 +++++++++++-------- 5 files changed, 21 insertions(+), 11 deletions(-) diff --git a/backend/app/db/functions/recommendations_functions.py b/backend/app/db/functions/recommendations_functions.py index 3af9fd29..6f7dd41f 100644 --- a/backend/app/db/functions/recommendations_functions.py +++ b/backend/app/db/functions/recommendations_functions.py @@ -632,6 +632,13 @@ def get_plans_by_ids(ids: List[int]) -> List[PlanModel]: return session_any.exec(stmt).scalars().all() +def get_plans_by_scenario_ids(ids: List[int]) -> List[PlanModel]: + stmt = select(PlanModel).where(PlanModel.scenario_id.in_(ids)) + with db_read_session() as session: + session_any: Any = session # Typehint as Any to satisfy Pylance... + return session_any.exec(stmt).scalars().all() + + def get_scenarios_by_portfolio_id(portfolio_id: int) -> List[ScenarioModel]: stmt = select(ScenarioModel).where(ScenarioModel.portfolio_id == portfolio_id) with db_read_session() as session: diff --git a/backend/categorisation/categorisation_trigger_request.py b/backend/categorisation/categorisation_trigger_request.py index 9bd7d7c8..4b35f75c 100644 --- a/backend/categorisation/categorisation_trigger_request.py +++ b/backend/categorisation/categorisation_trigger_request.py @@ -5,7 +5,7 @@ from pydantic import BaseModel class CategorisationTriggerRequest(BaseModel): portfolio_id: int - plans_to_consider: Optional[List[int]] = None + scenarios_to_consider: Optional[List[int]] = None plan_priority_order: Optional[List[int]] = None diff --git a/backend/categorisation/handler/handler.py b/backend/categorisation/handler/handler.py index ee0e7a7d..dc10fa4e 100644 --- a/backend/categorisation/handler/handler.py +++ b/backend/categorisation/handler/handler.py @@ -27,7 +27,7 @@ def handler(event: Mapping[str, Any], context: Any) -> None: process_portfolio( payload.portfolio_id, - payload.plans_to_consider, + payload.scenarios_to_consider, payload.plan_priority_order, ) diff --git a/backend/categorisation/local_handler/invoke_local_lambda.py b/backend/categorisation/local_handler/invoke_local_lambda.py index 23e5fda2..ce599ca9 100644 --- a/backend/categorisation/local_handler/invoke_local_lambda.py +++ b/backend/categorisation/local_handler/invoke_local_lambda.py @@ -10,7 +10,7 @@ payload = { "body": json.dumps( { "portfolio_id": 556, - "plans_to_consider": [1589319, 1589320], + "scenarios_to_consider": [1040, 1041], "plan_priority_order": [], } ) diff --git a/backend/categorisation/processor.py b/backend/categorisation/processor.py index b07f1c3b..e017c069 100644 --- a/backend/categorisation/processor.py +++ b/backend/categorisation/processor.py @@ -6,6 +6,7 @@ from backend.app.db.functions.recommendations_functions import ( get_default_plan_ids_for_property, get_plans_by_ids, get_plans_by_portfolio_id, + get_plans_by_scenario_ids, get_scenarios_by_portfolio_id, set_plan_and_scenario_default, ) @@ -19,12 +20,12 @@ logger = setup_logger() def process_portfolio( portfolio_id: int, - plans_to_consider: Optional[List[int]] = None, + scenarios_to_consider: Optional[List[int]] = None, plan_priority_order: Optional[List[int]] = None, ) -> None: logger.info(f"Processing portfolio {portfolio_id}") - plans: List[Plan] = _load_plans_for_portfolio(portfolio_id, plans_to_consider) + plans: List[Plan] = _load_plans_for_portfolio(portfolio_id, scenarios_to_consider) plans_by_property: Dict[int, List[Plan]] = _group_plans_by_property(plans) @@ -88,15 +89,17 @@ def choose_cheapest_relevant_plan( def _load_plans_for_portfolio( - portfolio_id: int, plans_to_consider: Optional[List[int]] = None + portfolio_id: int, scenarios_to_consider: Optional[List[int]] = None ) -> List[Plan]: - if plans_to_consider: - if len(plans_to_consider) < 2: - raise ValueError("Cannot run auto categorisation for fewer than 2 plans") + if scenarios_to_consider: + if len(scenarios_to_consider) < 2: + raise ValueError( + "Cannot run auto categorisation for fewer than 2 scenarios" + ) - logger.info(f"Getting {len(plans_to_consider)} Plans") - plan_models: List[PlanModel] = get_plans_by_ids(plans_to_consider) + logger.info(f"Getting {len(scenarios_to_consider)} plans") + plan_models: List[PlanModel] = get_plans_by_scenario_ids(scenarios_to_consider) else: logger.info(