I would expect I would run into trouble with this approach - when a function receives one of these records as an argument, how does it know if it is safe to acces the record fields in question?
I would prefer using Maybe types, different types altogether for summed contracts, or imaking a Contract a type with two cases (as suggested earlier).