I do not like the fact that you are mixing *FIRST_IN / LAST_IN* and *THERE_IS_IN* for your expectation. The first two expressions are stronger since you know exactly which item of a collection they match. So for this very line a *FIRST_IN* is preferable. For the other occurrences of *THERE_IS_IN* I would propose either to:

1. stick with "N_ITER => 1" and try to use all possible combinations of data with only the two resulting collection items (which can then be accessed using only *FIRST_IN* and *LAST_IN*) -- if two items are not sufficient, create another test case and send out a separate message with two more items there.
2. or (perhaps not quite as easy): use a more complex expression for your *THERE_IS_IN*-condition. I.e. if you check for two properties of  a collection item, say, distance *and* axle load category, it is very unlikely this combination appears twice within your collection. So you can be sure you are not accidentally referring to a different item which you did not want to check.

Maybe I am really picky here. But you just have to make sure to match exactly what you had in your packet later in your expectation. Hence, a *THERE_IS_IN* which can possibly result in a satisfied expression by matching more than one item can lead to hard to detect errors. I hope you got my point :)