@@ -265,26 +265,37 @@ def _build_amendment_subquery(project_id, document_id, aliases):
265265 def _populate_subconditions (conditions_map , cond_id ):
266266 """Populates sub conditions"""
267267 subcondition_map = {}
268+ top_level_subconditions = []
269+
270+ # First pass: create all subcondition objects
268271 for sub_row in ConditionService ._fetch_subconditions (cond_id ):
269272 # Handle subconditions
270273 subcond_id = sub_row .subcondition_id
271274 if subcond_id :
272- subcondition = {
275+ subcondition_map [ subcond_id ] = {
273276 "subcondition_identifier" : sub_row .subcondition_identifier ,
274277 "subcondition_text" : sub_row .subcondition_text ,
275278 "sort_order" : sub_row .sort_order ,
276279 "subconditions" : []
277280 }
278- subcondition_map [subcond_id ] = subcondition
279281
280- # If the subcondition has a parent, append it to the parent's subcondition list
281- if sub_row .parent_subcondition_id :
282- parent = subcondition_map .get (sub_row .parent_subcondition_id )
282+ # Second pass: assign parent-child relationships
283+ for sub_row in ConditionService ._fetch_subconditions (cond_id ):
284+ subcond_id = sub_row .subcondition_id
285+ parent_id = sub_row .parent_subcondition_id
286+
287+ if subcond_id :
288+ subcondition = subcondition_map [subcond_id ]
289+ if parent_id :
290+ parent = subcondition_map .get (parent_id )
283291 if parent :
284292 parent ["subconditions" ].append (subcondition )
285293 else :
286- # Top-level subcondition for this condition
287- conditions_map [cond_id ]["subconditions" ].append (subcondition )
294+ # No parent means top-level subcondition
295+ top_level_subconditions .append (subcondition )
296+
297+ # Attach top-level subconditions to the condition
298+ conditions_map [cond_id ]["subconditions" ] = top_level_subconditions
288299
289300 @staticmethod
290301 def _fetch_subconditions (cond_id ):
@@ -296,7 +307,12 @@ def _fetch_subconditions(cond_id):
296307 subconditions .subcondition_text ,
297308 subconditions .sort_order ,
298309 subconditions .parent_subcondition_id
299- ).filter (subconditions .condition_id == cond_id ).all ()
310+ ).filter (
311+ subconditions .condition_id == cond_id
312+ ).order_by (
313+ subconditions .parent_subcondition_id .nullsfirst (), # ensure parents come first
314+ subconditions .sort_order
315+ ).all ()
300316 return results
301317
302318 @staticmethod
0 commit comments