PhoenixKit module: multi-warehouse stock scope, stocktakes, transfers with cancel reverse-posting, deficit control with min-stock settings, turnover report, internal orders, supplier orders, goods receipts, and goods issues.
All four sibling packages are hard dependencies in mix.exs — none is
declared optional:, so all four are always compiled in:
phoenix_kit_catalogue— warehouse only ever tracks catalogue items.phoenix_kit_locations— every document carries alocation_uuidresolved through it.phoenix_kit_billing— currency formatting for unit values, via a compile-timeimportofCurrencyDisplay.currency_compact/1.phoenix_kit_comments— six form LiveViewsuse PhoenixKitComments.Embed. Auseis macro expansion at compile time, so this one can be neither guarded nor made optional; that is whymix.exsfloors it at 0.2.8 rather than 0.2.
A hard package dependency is not the same thing as a required module.
required_modules/0 lists only "catalogue" and "locations" — the two
whose PhoenixKit modules a host must actually have enabled. Billing is
never enablement-checked at all (its component is imported, not called
conditionally), and comments is checked at runtime but not required:
PhoenixKitWarehouse.Comments.available?/0 gates every comments call on
PhoenixKitComments.enabled?/0, and all six form LiveViews assign
comments_available? from it, so a host that has the comments module
installed but switched off simply renders no threads.
Documents link to host-owned records (a sub-order, a top-level order, or
anything else a consuming app wants to link) through the generic
PhoenixKitWarehouse.SourceKinds registry rather than a direct dependency
on any specific "order" concept — see that module's docs.