The current state of pricing is mostly coded into InvenTree's code base. This makes part pricing more complicated than necessary for hobby users and lacks the nuance needed for business users.
Vision
Plugins should be the primary way to handle prices. The default system should provide a simple pricing setup that only considers BoM part costs.
Breakdown
General goals:
Pricing calculations should be passed through plugins
a. Plugins should be able to add or subtract values and add metadata that can be added to reports, the UI etc.
b. Plugins should be aware of currencies and time
Move pricing calculations for parts into a plugin that can be disabled
a. Move settings for internal pricing to plugin
b. Move variant pricing overrides to the plugin
c. Move supplier pricing to the plugin (#7765, #3928, #7603)
Add pricing calculations via plugins to orders
a. Pass through metadata and part parameters
b. Enable pricing customisable types via states (for example shipping, packaging, handling fees, taxes, discounts, allowance)
Add cost to builds (#7949, #7279, #8530 (comment))
a. BoM cost
b. General Handling cost
c. Per build order cost
d. Per part cost
e. Possibly depending on worker steps (could be very usable to asses currently sunken cost per build)
Costs on tests?
Add permissions to ensure that detailed breakdowns etc can be restricted (#4022)
Possibly add the option for plugins to require manual checks of prices
Plugin design ideas:
Make pricing composable
Make pricing runs repeatable (and time-fixed)
Fix plugin order
Store pricing runs and configurations in database
Open questions:
Data flow design
Python primitives
Plugin API
UI flow and integration
Warning
This is a draft and would be a major amount of work. This will probably require a major release and intense testing and UI/UX design. Do not expect this to be done fast.