Keep bom_no/is_phantom_item pair coherent in get_bom_items_as_dict
When a BOM lists the same item via both phantom and non-phantom sub-BOMs, independent Max() aggregations could pair one line's phantom flag with another line's bom_no, exploding the wrong sub-BOM.