You can load database entities partially into different objects or aggregates based on context, and have different behaviors when writing them back. You can also consider relying on the compiler to enforce some invariants via type checking - for example, maybe you could have the
OpenShipment
type, and require all non-constructing operations on open shipments within a certain part of the app to accept or work with only that type. Then you'd have some function or a factory object that encapsulates the rules around opening or closing shipments, and produce one type of shipment from the other.