From Object Oriented Software Construction (2nd Edition) page 340: A precondition expresses the constraints under which a routine will function properly...A precondition applies to all calls of the routine, both from within the class and from clients. A correct system will never execute a call in a state that does not satisfy the precondition of the called routine.
So by violating a precondition, the code that is calling the Money constructor with a negative amount causes your whole program to be incorrect.