Active ingredient vs. Excipient Modeling

We intend to refactor DrOn in the future in terms of how it represents ingredients of drug products.  This refactoring will also allow us to distinguish correctly active ingredients from excipients.  In the case of calcium carbonate, for example, it is on a list of commonly used tablet excipients whereas in antacids and calcium supplements it is the active ingredient.

At present, we have representations of only active ingredients.  We represent them as follows, per the current acetaminophen tablet class.

tablet and (has_proper_part some acetaminophen)

We intend to change the representation to:

tablet and (has_proper_part some ('scattered molecular aggregate' and (has_grain some acetaminophen) and (bearer_of some 'active ingredient role')))

At present, there is no class for the active ingredient role in DrOn.  One candidate would be the drug role class in OBI, which is distinguished from the clinical drug role in DrOn.  It might have the limitation however of being the role of a molecule and not a scattered molecular aggregate, however.

For excipients, we will add an excipient role class to DrOn.  One candidate would be the excipient class in ChEBI.  However, it too, like the OBI drug role class, seems to be applicable to individual molecules and not an aggregate of them.

Adding the povidone, sodium starch glycolate, stearic acid, and pregelatinized starch excipients in this particular acetaminophen tablet product, we would have:

tablet and (has_proper_part some ('scattered molecular aggregate' and (has_grain some povidone) and (bearer_of some 'excipient role'))) 

          and (has_proper_part some ('scattered molecular aggregate' and (has_grain some 'sodium starch glycolate') and (bearer_of some 'excipient role'))) 

          and (has_proper_part some ('scattered molecular aggregate' and (has_grain some 'stearic acid') and (bearer_of some 'excipient role')))

          and (has_proper_part some ('portion of pregelatinized starch' and (bearer_of some 'excipient role'))) 

          and (has_proper_part some ('scattered molecular aggregate' and (has_grain some acetaminophen) and (bearer_of some 'active ingredient role')))

Or, taking into account the existing acetaminophen tablet class:

'acetaminophen tablet' and (has_proper_part some ('scattered molecular aggregate' and (has_grain some povidone) and (bearer_of some 'excipient role'))) 

                                    and (has_proper_part some ('scattered molecular aggregate' and (has_grain some 'sodium starch glycolate') and (bearer_of some 'excipient role'))) 

                                    and (has_proper_part some ('scattered molecular aggregate' and (has_grain some 'stearic acid') and (bearer_of some 'excipient role')))

                                    and (has_proper_part some ('portion of pregelatinized starch' and (bearer_of some 'excipient role')))