Cohorts don’t have attributes now, but this would be a welcome addition.
Since platform 2.1, CohortMembership support this.
Programs don’t support this now. You could make a case for it.
If in real life a group is a sub-program (e.g. there are few) you would probably want to pursue this route. If a group is more like a treatment group (and there are many) then cohorts make more sense.
The cohort module adds support for group-level encounters. I believe this is actively used in OpenSRP, so is production-tested. @maimoonak can comment on this.
That said, it may not be in your best interest to approach “group encounters” in a generic way if this is your only use case for it. An alternative would be to add something like a group_drug_dispensing_encounter table where you capture the group-level data about this, but you’d actually store the patient-level data in an obs group, which includes a complex obs that uses its complex value to store a reference to the group_drug_dispensing_encounter.