"Infoplus orders have an attribute called the hold code that is used
for two purposes:"
-- Yup. That's what a hold system should do. Great. Obviously, this
design is terrible (hold should be a status/process/action like every
other status/process/action in Infoplus -- why is holding treated
-- A grouping mechanism that holds orders out of normal processes
This is really bad normalization. Grouping and holding are
completely orthogonal. There should be one universal grouping
mechanism (most systems call this "tags" -- IP has tags) and a mechanism for ship complete (IP already has this -- the binary ShipComplete field). If
you want to have a process that combines them (create a group of held
orders), IP already has a convention for this called "quick" (quick
receipt, quick adjustment, etc), so add a "quick hold" process.
-- Controls whether an order is 'ship complete'
Except this is redundant. You have a normalized ship complete
(ShipComplete field) and this mushed-up ship complete
(ShipComplete:True in combination with HoldCode: Y).
It's all just a pointless tangle of complications, when IP already has a beautifully simple and powerful data model: tables, records, fields -- modified by -- actions, triggering processes, changing statuses.
Infoplus needs to be more like Infoplus ;-)