Not 100% sure, but the expression (c:Client) => c.client.clientLastName) may be wrong.
c is already a Client instance, so I guess it should be: (c:Client) => c.clientLastName)
If I understand your problem and the documentation correctly (haven’t done much with the validation before):
You can assign rules to classes and instances via .on(...) Because interfaces only are used in TypeScript and don’t exist in plain JS Aurelia can’t find the proper ValidationRules for your object. Therefore you have to pass the exact instance or use a class as these stay in JS after transpilation.
The project I am working on requires complex validation on complex model. I have built a custom validation tool for it. It should cover your use case, if you are willing to have a look.
Beware it is a generic tool, doesn’t provide glue code to Aurelia component. In Aurelia app, you need to at least do (1) when model changes, run validation again to produce an error object, (2) bind the error object to your view, I mean using "error.sub.prop".