getGroupRemainingByGroupId(groupIds: number[],date?: string | null): Promise<RemainingMap>
Per-group remaining capacity. Groups with max_attendees <= 0 (no cap)
are omitted from the map. With date = null, daily-event attendees count
cumulatively — correct for booking-time enforcement after upstream date
validation, misleading for display.