The root of the issue here appears to be a subtle difference between how Enketo and Collect are evaluating choice_filter expressions, specifically when dealing will empty/null fields. Let me explain…
In your form you have, say when selecting ‘Prostetics’ (above):
type |
name |
calculation |
calculate |
CC |
if(selected(${Q1}, 'prosthetic'), 'condition3', '') |
Note that when the user has selected ‘prosthetic’ in Q1 then CC=‘condition3’. However, the important thing to note is that when they have not selected ‘prosthetic’ then CC=‘’, or blank/empty.
Now, looking at your original choices:
That is, filter3 - which is being used in your form to check the calculation ${CC} - will find a match (ie the choice_filter = TRUE) for any work_done
options where filter3=${CC} [since the choice_filter is OR’ing everything together, it only takes a single element of this long expression to evaluate to true to make that option be included!].
If the user selects ‘prosthetic’ then ${CC} will equal ‘condition3
’, so all the first 4 work_done
options that have filter3
=‘condition3’ will match. Exactly as you intended.
However, if the user does not select ‘prosthetic’ then ${CC} will equal blank, so all the remaining work_done
options that have filter3=blank will also match (!). Exactly not as you intended. 
Hopefully you see the problem. Collect is strictly speaking behaving correctly, and returning all options where the choice_filter evaluates to true; and in the case of a blank entry in your choices, coupled with a blank calculation result, a blank=blank is (also) true, so basically everything is getting returned by the filter!
There are a few ways to fix this, a simple one I’ve done here is mark everything else instead with an ‘x’; that way the choice_filter wont evaluate to true and the option will get correctly filtered out. eg
b155a5fae61b1e04712cae363797e65dac1461be_FIXED.xlsx (28.6 KB)
I’ve tested this under both Collect and Enketo and I believe it works as (you) intended.
Please note I have not made the same changes to parts_used, which will suffer the same fate. But hopefully its clear now what’s happening and why, and you can make the necessary modifications to your form.
[All that said, I’m now a little curious why Enketo is (mis?)behaving in this way…]