Accepts both vectors and named lists of ingredient names.
For a vector input, e.g., c("acetaminophen", "codeine"), it generates a
cohort table with descendant concept codes for each ingredient, assigning
unique cohort_definition_id. For a named list input, e.g., list(
"test_1" = c("simvastatin", "acetaminophen"), "test_2" = "metformin"),
it produces a cohort table based on the structure of the input, where
each name leads to a combined set of descendant concept codes for the
specified ingredients, creating distinct cohort_definition_id for each
named group.