OK, but you still need to be careful. That trick will only work if you
insert rows one at a time into the table. If you have a single insert that inserts multiple rows (as in my example), it would fail because the currval() call would return the same value for each row in the insert created by the rule.
My advice would be to convert to triggers.
After going over your example a bit better, I think I will follow your advice.