I just noticed a strange quirk of plpgsql. It gave me an error when trying to access a member of a complex field in NEW. Error reported was: "ERROR: NEW used in query that is not in a rule".
However, it seems that plsql rather has a problem with the double dot i.e. NEW.amount.direction and could not parse that (or did not have any knowledge of the complex type).
I found a workaround by first declaring a local variable to the complex type DECLARE amnt tlx_actamount; and then assigning the complex field to this variable. It seems plpgsql is quite happy to accept such a consstruct.
As an example :
plpgsql will not accept NEW.amount.direction ..and give the error listed above