To make your model more robust, don't constrain to things that will change when your model changes/is updated. If you constrain to something like a surface or an edge, you're pretty likely to get broken constraints as the internal ID of that edge (Line.1285 or whatever) has a decent likelihood of changing if you do anything other than change parameters in the part's tree. If you add more features (another hole, a chamfer, etc), IDs could change and break things. In general, constraining to things higher up the part tree is better if I remember correctly. Probably the most robust option is to:
[ol 1]
[li]Have 1 part in your assembly that is just a blank part (so it should have 3 planes as a default). This defines your assembly's origin. Apply a Fix constraint when you first insert it into the assembly.[/li]
[li]Model your parts so that their origin coincides with the assembly's origin. This will mean that your part will be offset from it's own origin just as it is from the assembly origin. You move the part in the assembly by changing this offset in the part file.[/li]
[li]When the part is inserted into the assembly, constrain the part origin to the assembly origin.[/li]
[/ol]
The above method does have some significant drawbacks and it requires that you manually maintain the positioning of parts, but the constraints will pretty much never break.
Caveat to above: I haven't used Catia in a while, so I could have some details wrong. There's also probably better/different ways to do it, this is just how I used to do it.