First of all, many thanks for taking out the time to read this post.
We have a Gravity Form - a multi-step form actually- that we use to collect that information.
Now, some of these fields are very custom fields - you can’t use any of the default fields provided by GF to achive the functionality of those fields.
Lets call this field X
Then, there are certain fields (lets call them fields Y and Z) that depend on the field X, in that Y and Z are dynamically populated based on the values of field X
Field X is going to be a checkbox-type field. Y and Z are going to be either repeater or list, unless you could suggest us a better alternative.
We have the designs ready and would share more details with those who are ineterested.