formulab 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +144 -0
- package/LICENSE +21 -0
- package/README.md +403 -0
- package/dist/automotive/batteryRuntime.d.ts +14 -0
- package/dist/automotive/batteryRuntime.d.ts.map +1 -0
- package/dist/automotive/batteryRuntime.js +38 -0
- package/dist/automotive/batteryRuntime.js.map +1 -0
- package/dist/automotive/evCharging.d.ts +14 -0
- package/dist/automotive/evCharging.d.ts.map +1 -0
- package/dist/automotive/evCharging.js +48 -0
- package/dist/automotive/evCharging.js.map +1 -0
- package/dist/automotive/fuelEconomy.d.ts +15 -0
- package/dist/automotive/fuelEconomy.d.ts.map +1 -0
- package/dist/automotive/fuelEconomy.js +61 -0
- package/dist/automotive/fuelEconomy.js.map +1 -0
- package/dist/automotive/gearRatio.d.ts +15 -0
- package/dist/automotive/gearRatio.d.ts.map +1 -0
- package/dist/automotive/gearRatio.js +39 -0
- package/dist/automotive/gearRatio.js.map +1 -0
- package/dist/automotive/index.d.ts +9 -0
- package/dist/automotive/index.d.ts.map +1 -0
- package/dist/automotive/index.js +9 -0
- package/dist/automotive/index.js.map +1 -0
- package/dist/automotive/power.d.ts +14 -0
- package/dist/automotive/power.d.ts.map +1 -0
- package/dist/automotive/power.js +52 -0
- package/dist/automotive/power.js.map +1 -0
- package/dist/automotive/tireCompare.d.ts +9 -0
- package/dist/automotive/tireCompare.d.ts.map +1 -0
- package/dist/automotive/tireCompare.js +54 -0
- package/dist/automotive/tireCompare.js.map +1 -0
- package/dist/automotive/torque.d.ts +14 -0
- package/dist/automotive/torque.d.ts.map +1 -0
- package/dist/automotive/torque.js +52 -0
- package/dist/automotive/torque.js.map +1 -0
- package/dist/automotive/types.d.ts +114 -0
- package/dist/automotive/types.d.ts.map +1 -0
- package/dist/automotive/types.js +2 -0
- package/dist/automotive/types.js.map +1 -0
- package/dist/chemical/batch.d.ts +12 -0
- package/dist/chemical/batch.d.ts.map +1 -0
- package/dist/chemical/batch.js +36 -0
- package/dist/chemical/batch.js.map +1 -0
- package/dist/chemical/concentration.d.ts +15 -0
- package/dist/chemical/concentration.d.ts.map +1 -0
- package/dist/chemical/concentration.js +45 -0
- package/dist/chemical/concentration.js.map +1 -0
- package/dist/chemical/dilution.d.ts +12 -0
- package/dist/chemical/dilution.d.ts.map +1 -0
- package/dist/chemical/dilution.js +68 -0
- package/dist/chemical/dilution.js.map +1 -0
- package/dist/chemical/index.d.ts +9 -0
- package/dist/chemical/index.d.ts.map +1 -0
- package/dist/chemical/index.js +9 -0
- package/dist/chemical/index.js.map +1 -0
- package/dist/chemical/injectionCycle.d.ts +19 -0
- package/dist/chemical/injectionCycle.d.ts.map +1 -0
- package/dist/chemical/injectionCycle.js +170 -0
- package/dist/chemical/injectionCycle.js.map +1 -0
- package/dist/chemical/ph.d.ts +13 -0
- package/dist/chemical/ph.d.ts.map +1 -0
- package/dist/chemical/ph.js +83 -0
- package/dist/chemical/ph.js.map +1 -0
- package/dist/chemical/reactor.d.ts +19 -0
- package/dist/chemical/reactor.d.ts.map +1 -0
- package/dist/chemical/reactor.js +57 -0
- package/dist/chemical/reactor.js.map +1 -0
- package/dist/chemical/shelfLife.d.ts +15 -0
- package/dist/chemical/shelfLife.d.ts.map +1 -0
- package/dist/chemical/shelfLife.js +36 -0
- package/dist/chemical/shelfLife.js.map +1 -0
- package/dist/chemical/types.d.ts +144 -0
- package/dist/chemical/types.d.ts.map +1 -0
- package/dist/chemical/types.js +2 -0
- package/dist/chemical/types.js.map +1 -0
- package/dist/construction/aggregate.d.ts +33 -0
- package/dist/construction/aggregate.d.ts.map +1 -0
- package/dist/construction/aggregate.js +92 -0
- package/dist/construction/aggregate.js.map +1 -0
- package/dist/construction/beamLoad.d.ts +12 -0
- package/dist/construction/beamLoad.d.ts.map +1 -0
- package/dist/construction/beamLoad.js +156 -0
- package/dist/construction/beamLoad.js.map +1 -0
- package/dist/construction/brick.d.ts +17 -0
- package/dist/construction/brick.d.ts.map +1 -0
- package/dist/construction/brick.js +53 -0
- package/dist/construction/brick.js.map +1 -0
- package/dist/construction/concreteMix.d.ts +9 -0
- package/dist/construction/concreteMix.d.ts.map +1 -0
- package/dist/construction/concreteMix.js +31 -0
- package/dist/construction/concreteMix.js.map +1 -0
- package/dist/construction/earthwork.d.ts +13 -0
- package/dist/construction/earthwork.d.ts.map +1 -0
- package/dist/construction/earthwork.js +25 -0
- package/dist/construction/earthwork.js.map +1 -0
- package/dist/construction/formwork.d.ts +9 -0
- package/dist/construction/formwork.d.ts.map +1 -0
- package/dist/construction/formwork.js +61 -0
- package/dist/construction/formwork.js.map +1 -0
- package/dist/construction/index.d.ts +13 -0
- package/dist/construction/index.d.ts.map +1 -0
- package/dist/construction/index.js +13 -0
- package/dist/construction/index.js.map +1 -0
- package/dist/construction/pert.d.ts +15 -0
- package/dist/construction/pert.d.ts.map +1 -0
- package/dist/construction/pert.js +207 -0
- package/dist/construction/pert.js.map +1 -0
- package/dist/construction/rebar.d.ts +16 -0
- package/dist/construction/rebar.d.ts.map +1 -0
- package/dist/construction/rebar.js +43 -0
- package/dist/construction/rebar.js.map +1 -0
- package/dist/construction/roof.d.ts +16 -0
- package/dist/construction/roof.d.ts.map +1 -0
- package/dist/construction/roof.js +65 -0
- package/dist/construction/roof.js.map +1 -0
- package/dist/construction/slope.d.ts +14 -0
- package/dist/construction/slope.d.ts.map +1 -0
- package/dist/construction/slope.js +54 -0
- package/dist/construction/slope.js.map +1 -0
- package/dist/construction/stair.d.ts +17 -0
- package/dist/construction/stair.d.ts.map +1 -0
- package/dist/construction/stair.js +69 -0
- package/dist/construction/stair.js.map +1 -0
- package/dist/construction/types.d.ts +219 -0
- package/dist/construction/types.d.ts.map +1 -0
- package/dist/construction/types.js +2 -0
- package/dist/construction/types.js.map +1 -0
- package/dist/electronics/awg.d.ts +9 -0
- package/dist/electronics/awg.d.ts.map +1 -0
- package/dist/electronics/awg.js +66 -0
- package/dist/electronics/awg.js.map +1 -0
- package/dist/electronics/capacitor.d.ts +9 -0
- package/dist/electronics/capacitor.d.ts.map +1 -0
- package/dist/electronics/capacitor.js +51 -0
- package/dist/electronics/capacitor.js.map +1 -0
- package/dist/electronics/index.d.ts +12 -0
- package/dist/electronics/index.d.ts.map +1 -0
- package/dist/electronics/index.js +12 -0
- package/dist/electronics/index.js.map +1 -0
- package/dist/electronics/led.d.ts +9 -0
- package/dist/electronics/led.d.ts.map +1 -0
- package/dist/electronics/led.js +72 -0
- package/dist/electronics/led.js.map +1 -0
- package/dist/electronics/reflow.d.ts +12 -0
- package/dist/electronics/reflow.d.ts.map +1 -0
- package/dist/electronics/reflow.js +77 -0
- package/dist/electronics/reflow.js.map +1 -0
- package/dist/electronics/resistor.d.ts +8 -0
- package/dist/electronics/resistor.d.ts.map +1 -0
- package/dist/electronics/resistor.js +137 -0
- package/dist/electronics/resistor.js.map +1 -0
- package/dist/electronics/smt-takt.d.ts +8 -0
- package/dist/electronics/smt-takt.d.ts.map +1 -0
- package/dist/electronics/smt-takt.js +59 -0
- package/dist/electronics/smt-takt.js.map +1 -0
- package/dist/electronics/solder.d.ts +8 -0
- package/dist/electronics/solder.d.ts.map +1 -0
- package/dist/electronics/solder.js +46 -0
- package/dist/electronics/solder.js.map +1 -0
- package/dist/electronics/stencil.d.ts +9 -0
- package/dist/electronics/stencil.d.ts.map +1 -0
- package/dist/electronics/stencil.js +78 -0
- package/dist/electronics/stencil.js.map +1 -0
- package/dist/electronics/trace.d.ts +8 -0
- package/dist/electronics/trace.d.ts.map +1 -0
- package/dist/electronics/trace.js +75 -0
- package/dist/electronics/trace.js.map +1 -0
- package/dist/electronics/types.d.ts +145 -0
- package/dist/electronics/types.d.ts.map +1 -0
- package/dist/electronics/types.js +2 -0
- package/dist/electronics/types.js.map +1 -0
- package/dist/electronics/via.d.ts +12 -0
- package/dist/electronics/via.d.ts.map +1 -0
- package/dist/electronics/via.js +63 -0
- package/dist/electronics/via.js.map +1 -0
- package/dist/energy/carbonFootprint.d.ts +13 -0
- package/dist/energy/carbonFootprint.d.ts.map +1 -0
- package/dist/energy/carbonFootprint.js +41 -0
- package/dist/energy/carbonFootprint.js.map +1 -0
- package/dist/energy/compressedAirCost.d.ts +14 -0
- package/dist/energy/compressedAirCost.d.ts.map +1 -0
- package/dist/energy/compressedAirCost.js +39 -0
- package/dist/energy/compressedAirCost.js.map +1 -0
- package/dist/energy/index.d.ts +8 -0
- package/dist/energy/index.d.ts.map +1 -0
- package/dist/energy/index.js +8 -0
- package/dist/energy/index.js.map +1 -0
- package/dist/energy/motorEfficiency.d.ts +14 -0
- package/dist/energy/motorEfficiency.d.ts.map +1 -0
- package/dist/energy/motorEfficiency.js +47 -0
- package/dist/energy/motorEfficiency.js.map +1 -0
- package/dist/energy/pfCorrection.d.ts +15 -0
- package/dist/energy/pfCorrection.d.ts.map +1 -0
- package/dist/energy/pfCorrection.js +56 -0
- package/dist/energy/pfCorrection.js.map +1 -0
- package/dist/energy/powerCost.d.ts +15 -0
- package/dist/energy/powerCost.d.ts.map +1 -0
- package/dist/energy/powerCost.js +37 -0
- package/dist/energy/powerCost.js.map +1 -0
- package/dist/energy/types.d.ts +119 -0
- package/dist/energy/types.d.ts.map +1 -0
- package/dist/energy/types.js +2 -0
- package/dist/energy/types.js.map +1 -0
- package/dist/energy/vfdSavings.d.ts +16 -0
- package/dist/energy/vfdSavings.d.ts.map +1 -0
- package/dist/energy/vfdSavings.js +57 -0
- package/dist/energy/vfdSavings.js.map +1 -0
- package/dist/food/calorie.d.ts +13 -0
- package/dist/food/calorie.d.ts.map +1 -0
- package/dist/food/calorie.js +42 -0
- package/dist/food/calorie.js.map +1 -0
- package/dist/food/expiry.d.ts +13 -0
- package/dist/food/expiry.d.ts.map +1 -0
- package/dist/food/expiry.js +58 -0
- package/dist/food/expiry.js.map +1 -0
- package/dist/food/haccp.d.ts +18 -0
- package/dist/food/haccp.d.ts.map +1 -0
- package/dist/food/haccp.js +70 -0
- package/dist/food/haccp.js.map +1 -0
- package/dist/food/index.d.ts +6 -0
- package/dist/food/index.d.ts.map +1 -0
- package/dist/food/index.js +6 -0
- package/dist/food/index.js.map +1 -0
- package/dist/food/nutrition.d.ts +12 -0
- package/dist/food/nutrition.d.ts.map +1 -0
- package/dist/food/nutrition.js +75 -0
- package/dist/food/nutrition.js.map +1 -0
- package/dist/food/types.d.ts +104 -0
- package/dist/food/types.d.ts.map +1 -0
- package/dist/food/types.js +2 -0
- package/dist/food/types.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/logistics/cbm.d.ts +12 -0
- package/dist/logistics/cbm.d.ts.map +1 -0
- package/dist/logistics/cbm.js +37 -0
- package/dist/logistics/cbm.js.map +1 -0
- package/dist/logistics/containerFit.d.ts +12 -0
- package/dist/logistics/containerFit.d.ts.map +1 -0
- package/dist/logistics/containerFit.js +73 -0
- package/dist/logistics/containerFit.js.map +1 -0
- package/dist/logistics/dimWeight.d.ts +13 -0
- package/dist/logistics/dimWeight.d.ts.map +1 -0
- package/dist/logistics/dimWeight.js +50 -0
- package/dist/logistics/dimWeight.js.map +1 -0
- package/dist/logistics/eoq.d.ts +18 -0
- package/dist/logistics/eoq.d.ts.map +1 -0
- package/dist/logistics/eoq.js +42 -0
- package/dist/logistics/eoq.js.map +1 -0
- package/dist/logistics/fillRate.d.ts +22 -0
- package/dist/logistics/fillRate.d.ts.map +1 -0
- package/dist/logistics/fillRate.js +84 -0
- package/dist/logistics/fillRate.js.map +1 -0
- package/dist/logistics/freightClass.d.ts +12 -0
- package/dist/logistics/freightClass.d.ts.map +1 -0
- package/dist/logistics/freightClass.js +68 -0
- package/dist/logistics/freightClass.js.map +1 -0
- package/dist/logistics/index.d.ts +15 -0
- package/dist/logistics/index.d.ts.map +1 -0
- package/dist/logistics/index.js +15 -0
- package/dist/logistics/index.js.map +1 -0
- package/dist/logistics/kanban.d.ts +19 -0
- package/dist/logistics/kanban.d.ts.map +1 -0
- package/dist/logistics/kanban.js +48 -0
- package/dist/logistics/kanban.js.map +1 -0
- package/dist/logistics/pallet3d.d.ts +16 -0
- package/dist/logistics/pallet3d.d.ts.map +1 -0
- package/dist/logistics/pallet3d.js +380 -0
- package/dist/logistics/pallet3d.js.map +1 -0
- package/dist/logistics/palletStack.d.ts +12 -0
- package/dist/logistics/palletStack.d.ts.map +1 -0
- package/dist/logistics/palletStack.js +65 -0
- package/dist/logistics/palletStack.js.map +1 -0
- package/dist/logistics/pickTime.d.ts +17 -0
- package/dist/logistics/pickTime.d.ts.map +1 -0
- package/dist/logistics/pickTime.js +70 -0
- package/dist/logistics/pickTime.js.map +1 -0
- package/dist/logistics/safetyStock.d.ts +24 -0
- package/dist/logistics/safetyStock.d.ts.map +1 -0
- package/dist/logistics/safetyStock.js +99 -0
- package/dist/logistics/safetyStock.js.map +1 -0
- package/dist/logistics/shipping.d.ts +16 -0
- package/dist/logistics/shipping.d.ts.map +1 -0
- package/dist/logistics/shipping.js +115 -0
- package/dist/logistics/shipping.js.map +1 -0
- package/dist/logistics/tsp.d.ts +12 -0
- package/dist/logistics/tsp.d.ts.map +1 -0
- package/dist/logistics/tsp.js +166 -0
- package/dist/logistics/tsp.js.map +1 -0
- package/dist/logistics/types.d.ts +315 -0
- package/dist/logistics/types.d.ts.map +1 -0
- package/dist/logistics/types.js +5 -0
- package/dist/logistics/types.js.map +1 -0
- package/dist/metal/bearing.d.ts +11 -0
- package/dist/metal/bearing.d.ts.map +1 -0
- package/dist/metal/bearing.js +32 -0
- package/dist/metal/bearing.js.map +1 -0
- package/dist/metal/bendAllowance.d.ts +13 -0
- package/dist/metal/bendAllowance.d.ts.map +1 -0
- package/dist/metal/bendAllowance.js +75 -0
- package/dist/metal/bendAllowance.js.map +1 -0
- package/dist/metal/bolt.d.ts +32 -0
- package/dist/metal/bolt.d.ts.map +1 -0
- package/dist/metal/bolt.js +149 -0
- package/dist/metal/bolt.js.map +1 -0
- package/dist/metal/cutting.d.ts +10 -0
- package/dist/metal/cutting.d.ts.map +1 -0
- package/dist/metal/cutting.js +55 -0
- package/dist/metal/cutting.js.map +1 -0
- package/dist/metal/cuttingStock.d.ts +8 -0
- package/dist/metal/cuttingStock.d.ts.map +1 -0
- package/dist/metal/cuttingStock.js +89 -0
- package/dist/metal/cuttingStock.js.map +1 -0
- package/dist/metal/flatPattern.d.ts +12 -0
- package/dist/metal/flatPattern.d.ts.map +1 -0
- package/dist/metal/flatPattern.js +50 -0
- package/dist/metal/flatPattern.js.map +1 -0
- package/dist/metal/gear.d.ts +13 -0
- package/dist/metal/gear.d.ts.map +1 -0
- package/dist/metal/gear.js +79 -0
- package/dist/metal/gear.js.map +1 -0
- package/dist/metal/hardness.d.ts +15 -0
- package/dist/metal/hardness.d.ts.map +1 -0
- package/dist/metal/hardness.js +77 -0
- package/dist/metal/hardness.js.map +1 -0
- package/dist/metal/index.d.ts +24 -0
- package/dist/metal/index.d.ts.map +1 -0
- package/dist/metal/index.js +24 -0
- package/dist/metal/index.js.map +1 -0
- package/dist/metal/kFactorReverse.d.ts +19 -0
- package/dist/metal/kFactorReverse.d.ts.map +1 -0
- package/dist/metal/kFactorReverse.js +39 -0
- package/dist/metal/kFactorReverse.js.map +1 -0
- package/dist/metal/material.d.ts +5 -0
- package/dist/metal/material.d.ts.map +1 -0
- package/dist/metal/material.js +56 -0
- package/dist/metal/material.js.map +1 -0
- package/dist/metal/metalWeight.d.ts +10 -0
- package/dist/metal/metalWeight.d.ts.map +1 -0
- package/dist/metal/metalWeight.js +82 -0
- package/dist/metal/metalWeight.js.map +1 -0
- package/dist/metal/pressFit.d.ts +15 -0
- package/dist/metal/pressFit.d.ts.map +1 -0
- package/dist/metal/pressFit.js +96 -0
- package/dist/metal/pressFit.js.map +1 -0
- package/dist/metal/pressTonnage.d.ts +13 -0
- package/dist/metal/pressTonnage.d.ts.map +1 -0
- package/dist/metal/pressTonnage.js +86 -0
- package/dist/metal/pressTonnage.js.map +1 -0
- package/dist/metal/roughness.d.ts +6 -0
- package/dist/metal/roughness.d.ts.map +1 -0
- package/dist/metal/roughness.js +62 -0
- package/dist/metal/roughness.js.map +1 -0
- package/dist/metal/screw.d.ts +7 -0
- package/dist/metal/screw.d.ts.map +1 -0
- package/dist/metal/screw.js +44 -0
- package/dist/metal/screw.js.map +1 -0
- package/dist/metal/spring.d.ts +11 -0
- package/dist/metal/spring.d.ts.map +1 -0
- package/dist/metal/spring.js +59 -0
- package/dist/metal/spring.js.map +1 -0
- package/dist/metal/tap.d.ts +16 -0
- package/dist/metal/tap.d.ts.map +1 -0
- package/dist/metal/tap.js +62 -0
- package/dist/metal/tap.js.map +1 -0
- package/dist/metal/thread.d.ts +8 -0
- package/dist/metal/thread.d.ts.map +1 -0
- package/dist/metal/thread.js +75 -0
- package/dist/metal/thread.js.map +1 -0
- package/dist/metal/tolerance.d.ts +6 -0
- package/dist/metal/tolerance.d.ts.map +1 -0
- package/dist/metal/tolerance.js +113 -0
- package/dist/metal/tolerance.js.map +1 -0
- package/dist/metal/types.d.ts +494 -0
- package/dist/metal/types.d.ts.map +1 -0
- package/dist/metal/types.js +2 -0
- package/dist/metal/types.js.map +1 -0
- package/dist/metal/vibration.d.ts +6 -0
- package/dist/metal/vibration.d.ts.map +1 -0
- package/dist/metal/vibration.js +153 -0
- package/dist/metal/vibration.js.map +1 -0
- package/dist/metal/weldHeat.d.ts +6 -0
- package/dist/metal/weldHeat.d.ts.map +1 -0
- package/dist/metal/weldHeat.js +138 -0
- package/dist/metal/weldHeat.js.map +1 -0
- package/dist/metal/welding.d.ts +6 -0
- package/dist/metal/welding.d.ts.map +1 -0
- package/dist/metal/welding.js +80 -0
- package/dist/metal/welding.js.map +1 -0
- package/dist/quality/aql.d.ts +10 -0
- package/dist/quality/aql.d.ts.map +1 -0
- package/dist/quality/aql.js +104 -0
- package/dist/quality/aql.js.map +1 -0
- package/dist/quality/cpk.d.ts +14 -0
- package/dist/quality/cpk.d.ts.map +1 -0
- package/dist/quality/cpk.js +44 -0
- package/dist/quality/cpk.js.map +1 -0
- package/dist/quality/cycle.d.ts +11 -0
- package/dist/quality/cycle.d.ts.map +1 -0
- package/dist/quality/cycle.js +55 -0
- package/dist/quality/cycle.js.map +1 -0
- package/dist/quality/downtime.d.ts +9 -0
- package/dist/quality/downtime.d.ts.map +1 -0
- package/dist/quality/downtime.js +28 -0
- package/dist/quality/downtime.js.map +1 -0
- package/dist/quality/dpmo.d.ts +10 -0
- package/dist/quality/dpmo.d.ts.map +1 -0
- package/dist/quality/dpmo.js +114 -0
- package/dist/quality/dpmo.js.map +1 -0
- package/dist/quality/index.d.ts +15 -0
- package/dist/quality/index.d.ts.map +1 -0
- package/dist/quality/index.js +15 -0
- package/dist/quality/index.js.map +1 -0
- package/dist/quality/lineBalancing.d.ts +9 -0
- package/dist/quality/lineBalancing.d.ts.map +1 -0
- package/dist/quality/lineBalancing.js +185 -0
- package/dist/quality/lineBalancing.js.map +1 -0
- package/dist/quality/mtbf.d.ts +13 -0
- package/dist/quality/mtbf.d.ts.map +1 -0
- package/dist/quality/mtbf.js +48 -0
- package/dist/quality/mtbf.js.map +1 -0
- package/dist/quality/oee.d.ts +11 -0
- package/dist/quality/oee.d.ts.map +1 -0
- package/dist/quality/oee.js +43 -0
- package/dist/quality/oee.js.map +1 -0
- package/dist/quality/ppk.d.ts +15 -0
- package/dist/quality/ppk.d.ts.map +1 -0
- package/dist/quality/ppk.js +61 -0
- package/dist/quality/ppk.js.map +1 -0
- package/dist/quality/ppm.d.ts +9 -0
- package/dist/quality/ppm.d.ts.map +1 -0
- package/dist/quality/ppm.js +134 -0
- package/dist/quality/ppm.js.map +1 -0
- package/dist/quality/rpn.d.ts +11 -0
- package/dist/quality/rpn.d.ts.map +1 -0
- package/dist/quality/rpn.js +48 -0
- package/dist/quality/rpn.js.map +1 -0
- package/dist/quality/takt.d.ts +13 -0
- package/dist/quality/takt.d.ts.map +1 -0
- package/dist/quality/takt.js +44 -0
- package/dist/quality/takt.js.map +1 -0
- package/dist/quality/types.d.ts +261 -0
- package/dist/quality/types.d.ts.map +1 -0
- package/dist/quality/types.js +2 -0
- package/dist/quality/types.js.map +1 -0
- package/dist/quality/yield.d.ts +12 -0
- package/dist/quality/yield.d.ts.map +1 -0
- package/dist/quality/yield.js +56 -0
- package/dist/quality/yield.js.map +1 -0
- package/dist/safety/fallClearance.d.ts +12 -0
- package/dist/safety/fallClearance.d.ts.map +1 -0
- package/dist/safety/fallClearance.js +37 -0
- package/dist/safety/fallClearance.js.map +1 -0
- package/dist/safety/havsCalculate.d.ts +16 -0
- package/dist/safety/havsCalculate.d.ts.map +1 -0
- package/dist/safety/havsCalculate.js +103 -0
- package/dist/safety/havsCalculate.js.map +1 -0
- package/dist/safety/index.d.ts +8 -0
- package/dist/safety/index.d.ts.map +1 -0
- package/dist/safety/index.js +8 -0
- package/dist/safety/index.js.map +1 -0
- package/dist/safety/nioshLifting.d.ts +21 -0
- package/dist/safety/nioshLifting.d.ts.map +1 -0
- package/dist/safety/nioshLifting.js +164 -0
- package/dist/safety/nioshLifting.js.map +1 -0
- package/dist/safety/noiseExposure.d.ts +22 -0
- package/dist/safety/noiseExposure.d.ts.map +1 -0
- package/dist/safety/noiseExposure.js +76 -0
- package/dist/safety/noiseExposure.js.map +1 -0
- package/dist/safety/respiratorCalculate.d.ts +14 -0
- package/dist/safety/respiratorCalculate.d.ts.map +1 -0
- package/dist/safety/respiratorCalculate.js +90 -0
- package/dist/safety/respiratorCalculate.js.map +1 -0
- package/dist/safety/types.d.ts +93 -0
- package/dist/safety/types.d.ts.map +1 -0
- package/dist/safety/types.js +2 -0
- package/dist/safety/types.js.map +1 -0
- package/dist/safety/wbgtCalculate.d.ts +25 -0
- package/dist/safety/wbgtCalculate.d.ts.map +1 -0
- package/dist/safety/wbgtCalculate.js +65 -0
- package/dist/safety/wbgtCalculate.js.map +1 -0
- package/dist/utility/assignment.d.ts +11 -0
- package/dist/utility/assignment.d.ts.map +1 -0
- package/dist/utility/assignment.js +113 -0
- package/dist/utility/assignment.js.map +1 -0
- package/dist/utility/index.d.ts +4 -0
- package/dist/utility/index.d.ts.map +1 -0
- package/dist/utility/index.js +4 -0
- package/dist/utility/index.js.map +1 -0
- package/dist/utility/qrcode.d.ts +30 -0
- package/dist/utility/qrcode.d.ts.map +1 -0
- package/dist/utility/qrcode.js +30 -0
- package/dist/utility/qrcode.js.map +1 -0
- package/dist/utility/types.d.ts +64 -0
- package/dist/utility/types.d.ts.map +1 -0
- package/dist/utility/types.js +2 -0
- package/dist/utility/types.js.map +1 -0
- package/dist/utility/unit.d.ts +25 -0
- package/dist/utility/unit.d.ts.map +1 -0
- package/dist/utility/unit.js +136 -0
- package/dist/utility/unit.js.map +1 -0
- package/dist/utils.d.ts +9 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +12 -0
- package/dist/utils.js.map +1 -0
- package/package.json +117 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calorie Calculator Types
|
|
3
|
+
*/
|
|
4
|
+
export type Gender = 'male' | 'female';
|
|
5
|
+
export type ActivityLevel = 'sedentary' | 'light' | 'moderate' | 'active' | 'veryActive';
|
|
6
|
+
export interface CalorieInput {
|
|
7
|
+
gender: Gender;
|
|
8
|
+
age: number;
|
|
9
|
+
weightKg: number;
|
|
10
|
+
heightCm: number;
|
|
11
|
+
activityLevel: ActivityLevel;
|
|
12
|
+
}
|
|
13
|
+
export interface CalorieResult {
|
|
14
|
+
bmr: number;
|
|
15
|
+
tdee: number;
|
|
16
|
+
weightLoss: number;
|
|
17
|
+
weightMaintain: number;
|
|
18
|
+
weightGain: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Expiry Date Calculator Types
|
|
22
|
+
*/
|
|
23
|
+
export type ExpiryMode = 'calculateExpiry' | 'calculateRemaining';
|
|
24
|
+
export interface ExpiryInput {
|
|
25
|
+
mode: ExpiryMode;
|
|
26
|
+
productionDate: string;
|
|
27
|
+
shelfLifeDays: number;
|
|
28
|
+
expiryDate: string;
|
|
29
|
+
today: string;
|
|
30
|
+
}
|
|
31
|
+
export interface ExpiryResult {
|
|
32
|
+
expiryDate: string;
|
|
33
|
+
remainingDays: number;
|
|
34
|
+
shelfLifeDays: number;
|
|
35
|
+
isExpired: boolean;
|
|
36
|
+
percentUsed: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Nutrition Facts Calculator Types
|
|
40
|
+
*/
|
|
41
|
+
export interface NutrientIngredient {
|
|
42
|
+
name: string;
|
|
43
|
+
amountG: number;
|
|
44
|
+
calories: number;
|
|
45
|
+
totalFat: number;
|
|
46
|
+
saturatedFat: number;
|
|
47
|
+
transFat: number;
|
|
48
|
+
cholesterol: number;
|
|
49
|
+
sodium: number;
|
|
50
|
+
totalCarbs: number;
|
|
51
|
+
dietaryFiber: number;
|
|
52
|
+
sugars: number;
|
|
53
|
+
protein: number;
|
|
54
|
+
}
|
|
55
|
+
export interface NutritionInput {
|
|
56
|
+
servingSize: number;
|
|
57
|
+
servingsPerContainer: number;
|
|
58
|
+
ingredients: NutrientIngredient[];
|
|
59
|
+
}
|
|
60
|
+
export interface NutritionFacts {
|
|
61
|
+
calories: number;
|
|
62
|
+
totalFat: number;
|
|
63
|
+
saturatedFat: number;
|
|
64
|
+
transFat: number;
|
|
65
|
+
cholesterol: number;
|
|
66
|
+
sodium: number;
|
|
67
|
+
totalCarbs: number;
|
|
68
|
+
dietaryFiber: number;
|
|
69
|
+
sugars: number;
|
|
70
|
+
protein: number;
|
|
71
|
+
}
|
|
72
|
+
export interface DailyValuePercents {
|
|
73
|
+
totalFat: number;
|
|
74
|
+
saturatedFat: number;
|
|
75
|
+
cholesterol: number;
|
|
76
|
+
sodium: number;
|
|
77
|
+
totalCarbs: number;
|
|
78
|
+
dietaryFiber: number;
|
|
79
|
+
protein: number;
|
|
80
|
+
}
|
|
81
|
+
export interface NutritionResult {
|
|
82
|
+
totalRecipeWeightG: number;
|
|
83
|
+
perServing: NutritionFacts;
|
|
84
|
+
dailyValues: DailyValuePercents;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* HACCP Checklist Types
|
|
88
|
+
*/
|
|
89
|
+
export type HaccpCategory = 'receiving' | 'storage' | 'preparation' | 'cooking' | 'cooling' | 'serving';
|
|
90
|
+
export interface HaccpInput {
|
|
91
|
+
category: HaccpCategory;
|
|
92
|
+
}
|
|
93
|
+
export interface HaccpCheckItem {
|
|
94
|
+
id: string;
|
|
95
|
+
checkpoint: string;
|
|
96
|
+
standard: string;
|
|
97
|
+
corrective: string;
|
|
98
|
+
critical: boolean;
|
|
99
|
+
}
|
|
100
|
+
export interface HaccpResult {
|
|
101
|
+
category: HaccpCategory;
|
|
102
|
+
items: HaccpCheckItem[];
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/food/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/food/types.ts"],"names":[],"mappings":""}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Formulab - Manufacturing & Engineering calculation formulas library
|
|
2
|
+
// Re-export all domain modules
|
|
3
|
+
export * from './quality/index.js';
|
|
4
|
+
export * from './logistics/index.js';
|
|
5
|
+
export * from './automotive/index.js';
|
|
6
|
+
export * from './safety/index.js';
|
|
7
|
+
export * from './utility/index.js';
|
|
8
|
+
export * from './food/index.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,+BAA+B;AAE/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { CbmInput, CbmResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Calculate Cubic Meter (CBM) for shipping cargo
|
|
4
|
+
*
|
|
5
|
+
* CBM is the standard unit for measuring shipping volume.
|
|
6
|
+
* Formula: CBM = Length × Width × Height (in meters)
|
|
7
|
+
*
|
|
8
|
+
* @param input - Cargo dimensions and quantity
|
|
9
|
+
* @returns CBM per unit and total CBM
|
|
10
|
+
*/
|
|
11
|
+
export declare function cbm(input: CbmInput): CbmResult;
|
|
12
|
+
//# sourceMappingURL=cbm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cbm.d.ts","sourceRoot":"","sources":["../../src/logistics/cbm.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AActD;;;;;;;;GAQG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,CAkB9C"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { roundTo } from '../utils.js';
|
|
2
|
+
/**
|
|
3
|
+
* Convert length to meters based on unit
|
|
4
|
+
*/
|
|
5
|
+
function toMeters(value, unit) {
|
|
6
|
+
switch (unit) {
|
|
7
|
+
case 'mm': return value / 1000;
|
|
8
|
+
case 'cm': return value / 100;
|
|
9
|
+
case 'm': return value;
|
|
10
|
+
default: return value;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Calculate Cubic Meter (CBM) for shipping cargo
|
|
15
|
+
*
|
|
16
|
+
* CBM is the standard unit for measuring shipping volume.
|
|
17
|
+
* Formula: CBM = Length × Width × Height (in meters)
|
|
18
|
+
*
|
|
19
|
+
* @param input - Cargo dimensions and quantity
|
|
20
|
+
* @returns CBM per unit and total CBM
|
|
21
|
+
*/
|
|
22
|
+
export function cbm(input) {
|
|
23
|
+
const { length, width, height, quantity, unit } = input;
|
|
24
|
+
// Convert dimensions to meters
|
|
25
|
+
const lengthM = toMeters(length, unit);
|
|
26
|
+
const widthM = toMeters(width, unit);
|
|
27
|
+
const heightM = toMeters(height, unit);
|
|
28
|
+
// Calculate CBM per unit
|
|
29
|
+
const cbmPerUnit = lengthM * widthM * heightM;
|
|
30
|
+
// Calculate total CBM
|
|
31
|
+
const totalCbm = cbmPerUnit * quantity;
|
|
32
|
+
return {
|
|
33
|
+
cbmPerUnit: roundTo(cbmPerUnit, 6),
|
|
34
|
+
totalCbm: roundTo(totalCbm, 6),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=cbm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cbm.js","sourceRoot":"","sources":["../../src/logistics/cbm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;GAEG;AACH,SAAS,QAAQ,CAAC,KAAa,EAAE,IAAuB;IACtD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,IAAI,CAAC,CAAC,OAAO,KAAK,GAAG,IAAI,CAAC;QAC/B,KAAK,IAAI,CAAC,CAAC,OAAO,KAAK,GAAG,GAAG,CAAC;QAC9B,KAAK,GAAG,CAAC,CAAC,OAAO,KAAK,CAAC;QACvB,OAAO,CAAC,CAAC,OAAO,KAAK,CAAC;IACxB,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,GAAG,CAAC,KAAe;IACjC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAExD,+BAA+B;IAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAEvC,yBAAyB;IACzB,MAAM,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IAE9C,sBAAsB;IACtB,MAAM,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;IAEvC,OAAO;QACL,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAClC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;KAC/B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ContainerFitInput, ContainerFitResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Calculate how many boxes fit in a container
|
|
4
|
+
*
|
|
5
|
+
* This function calculates the optimal number of boxes that can fit
|
|
6
|
+
* in a container, considering different orientations if rotation is allowed.
|
|
7
|
+
*
|
|
8
|
+
* @param input - Container and cargo dimensions
|
|
9
|
+
* @returns Number of units that fit
|
|
10
|
+
*/
|
|
11
|
+
export declare function containerFit(input: ContainerFitInput): ContainerFitResult;
|
|
12
|
+
//# sourceMappingURL=containerFit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"containerFit.d.ts","sourceRoot":"","sources":["../../src/logistics/containerFit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAkB,MAAM,YAAY,CAAC;AAiCxF;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,kBAAkB,CAwCzE"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate all possible orientations for a box
|
|
3
|
+
* If allowRotation is false, only return the original orientation
|
|
4
|
+
*/
|
|
5
|
+
function getOrientations(l, w, h, allowRotation) {
|
|
6
|
+
if (!allowRotation) {
|
|
7
|
+
return [{ length: l, width: w, height: h }];
|
|
8
|
+
}
|
|
9
|
+
// Generate all 6 orientations (permutations of l, w, h)
|
|
10
|
+
const dims = [l, w, h];
|
|
11
|
+
const orientations = [];
|
|
12
|
+
// All permutations of [l, w, h]
|
|
13
|
+
for (let i = 0; i < 3; i++) {
|
|
14
|
+
for (let j = 0; j < 3; j++) {
|
|
15
|
+
if (i === j)
|
|
16
|
+
continue;
|
|
17
|
+
for (let k = 0; k < 3; k++) {
|
|
18
|
+
if (k === i || k === j)
|
|
19
|
+
continue;
|
|
20
|
+
orientations.push({
|
|
21
|
+
length: dims[i],
|
|
22
|
+
width: dims[j],
|
|
23
|
+
height: dims[k],
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return orientations;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Calculate how many boxes fit in a container
|
|
32
|
+
*
|
|
33
|
+
* This function calculates the optimal number of boxes that can fit
|
|
34
|
+
* in a container, considering different orientations if rotation is allowed.
|
|
35
|
+
*
|
|
36
|
+
* @param input - Container and cargo dimensions
|
|
37
|
+
* @returns Number of units that fit
|
|
38
|
+
*/
|
|
39
|
+
export function containerFit(input) {
|
|
40
|
+
const { container, cargo, allowRotation } = input;
|
|
41
|
+
// Get all possible orientations
|
|
42
|
+
const orientations = getOrientations(cargo.length, cargo.width, cargo.height, allowRotation);
|
|
43
|
+
let bestResult = {
|
|
44
|
+
unitsPerLayer: 0,
|
|
45
|
+
layers: 0,
|
|
46
|
+
totalUnits: 0,
|
|
47
|
+
bestOrientation: { length: cargo.length, width: cargo.width, height: cargo.height },
|
|
48
|
+
};
|
|
49
|
+
// Try each orientation and find the best fit
|
|
50
|
+
for (const orient of orientations) {
|
|
51
|
+
// Check if box fits at all
|
|
52
|
+
if (orient.length > container.length || orient.width > container.width || orient.height > container.height) {
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
// Calculate how many boxes fit in each dimension
|
|
56
|
+
const cols = Math.floor(container.length / orient.length);
|
|
57
|
+
const rows = Math.floor(container.width / orient.width);
|
|
58
|
+
const layers = Math.floor(container.height / orient.height);
|
|
59
|
+
const unitsPerLayer = cols * rows;
|
|
60
|
+
const totalUnits = unitsPerLayer * layers;
|
|
61
|
+
// Keep the orientation that fits the most boxes
|
|
62
|
+
if (totalUnits > bestResult.totalUnits) {
|
|
63
|
+
bestResult = {
|
|
64
|
+
unitsPerLayer,
|
|
65
|
+
layers,
|
|
66
|
+
totalUnits,
|
|
67
|
+
bestOrientation: orient,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return bestResult;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=containerFit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"containerFit.js","sourceRoot":"","sources":["../../src/logistics/containerFit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { DimWeightInput, DimWeightResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Calculate Dimensional Weight for shipping
|
|
4
|
+
*
|
|
5
|
+
* Dimensional weight (volumetric weight) is used by carriers to charge
|
|
6
|
+
* for lightweight but bulky packages. The billable weight is the greater
|
|
7
|
+
* of actual weight or dimensional weight.
|
|
8
|
+
*
|
|
9
|
+
* @param input - Package dimensions and weight
|
|
10
|
+
* @returns Dimensional weight calculation results
|
|
11
|
+
*/
|
|
12
|
+
export declare function dimWeight(input: DimWeightInput): DimWeightResult;
|
|
13
|
+
//# sourceMappingURL=dimWeight.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dimWeight.d.ts","sourceRoot":"","sources":["../../src/logistics/dimWeight.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAe,MAAM,YAAY,CAAC;AAa/E;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,eAAe,CAgChE"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { roundTo } from '../utils.js';
|
|
2
|
+
// DIM factors (cubic inches per pound, converted to cubic cm per kg)
|
|
3
|
+
// Standard industry factors:
|
|
4
|
+
// - Domestic Air: 139 in³/lb = 139 * 16.387 / 0.4536 ≈ 5000 cm³/kg
|
|
5
|
+
// - International Air: 166 in³/lb = 166 * 16.387 / 0.4536 ≈ 6000 cm³/kg
|
|
6
|
+
// - Ground: 139 in³/lb = 5000 cm³/kg (same as domestic air)
|
|
7
|
+
const DIM_FACTORS = {
|
|
8
|
+
domestic_air: 5000,
|
|
9
|
+
international_air: 6000,
|
|
10
|
+
ground: 5000,
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Calculate Dimensional Weight for shipping
|
|
14
|
+
*
|
|
15
|
+
* Dimensional weight (volumetric weight) is used by carriers to charge
|
|
16
|
+
* for lightweight but bulky packages. The billable weight is the greater
|
|
17
|
+
* of actual weight or dimensional weight.
|
|
18
|
+
*
|
|
19
|
+
* @param input - Package dimensions and weight
|
|
20
|
+
* @returns Dimensional weight calculation results
|
|
21
|
+
*/
|
|
22
|
+
export function dimWeight(input) {
|
|
23
|
+
const { length, width, height, actualWeight, carrier } = input;
|
|
24
|
+
// Handle zero/invalid inputs
|
|
25
|
+
if (length <= 0 || width <= 0 || height <= 0 || actualWeight < 0) {
|
|
26
|
+
return {
|
|
27
|
+
dimensionalWeight: 0,
|
|
28
|
+
actualWeight: 0,
|
|
29
|
+
billableWeight: 0,
|
|
30
|
+
dimFactor: DIM_FACTORS[carrier],
|
|
31
|
+
isDimWeightHigher: false,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
const dimFactor = DIM_FACTORS[carrier];
|
|
35
|
+
// Dimensional weight = (L × W × H) / DIM factor
|
|
36
|
+
// Input is in cm, output in kg
|
|
37
|
+
const volumeCm3 = length * width * height;
|
|
38
|
+
const dimensionalWeight = roundTo(volumeCm3 / dimFactor, 2);
|
|
39
|
+
const actualWeightRounded = roundTo(actualWeight, 2);
|
|
40
|
+
// Billable weight = max(actual weight, dimensional weight)
|
|
41
|
+
const billableWeight = Math.max(actualWeightRounded, dimensionalWeight);
|
|
42
|
+
return {
|
|
43
|
+
dimensionalWeight,
|
|
44
|
+
actualWeight: actualWeightRounded,
|
|
45
|
+
billableWeight: roundTo(billableWeight, 2),
|
|
46
|
+
dimFactor,
|
|
47
|
+
isDimWeightHigher: dimensionalWeight > actualWeightRounded,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=dimWeight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dimWeight.js","sourceRoot":"","sources":["../../src/logistics/dimWeight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC,qEAAqE;AACrE,6BAA6B;AAC7B,mEAAmE;AACnE,wEAAwE;AACxE,4DAA4D;AAC5D,MAAM,WAAW,GAAgC;IAC/C,YAAY,EAAE,IAAI;IAClB,iBAAiB,EAAE,IAAI;IACvB,MAAM,EAAE,IAAI;CACb,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,UAAU,SAAS,CAAC,KAAqB;IAC7C,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAE/D,6BAA6B;IAC7B,IAAI,MAAM,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACjE,OAAO;YACL,iBAAiB,EAAE,CAAC;YACpB,YAAY,EAAE,CAAC;YACf,cAAc,EAAE,CAAC;YACjB,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC;YAC/B,iBAAiB,EAAE,KAAK;SACzB,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAEvC,gDAAgD;IAChD,+BAA+B;IAC/B,MAAM,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;IAC1C,MAAM,iBAAiB,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC;IAC5D,MAAM,mBAAmB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IAErD,2DAA2D;IAC3D,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;IAExE,OAAO;QACL,iBAAiB;QACjB,YAAY,EAAE,mBAAmB;QACjC,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;QAC1C,SAAS;QACT,iBAAiB,EAAE,iBAAiB,GAAG,mBAAmB;KAC3D,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { EoqInput, EoqResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Calculate Economic Order Quantity (EOQ)
|
|
4
|
+
*
|
|
5
|
+
* EOQ is the optimal order quantity that minimizes total inventory costs,
|
|
6
|
+
* balancing ordering costs and holding costs.
|
|
7
|
+
*
|
|
8
|
+
* Formula: EOQ = sqrt(2 × D × S / H)
|
|
9
|
+
* Where:
|
|
10
|
+
* D = Annual demand (units/year)
|
|
11
|
+
* S = Order cost per order ($)
|
|
12
|
+
* H = Holding cost per unit per year ($/unit/year)
|
|
13
|
+
*
|
|
14
|
+
* @param input - Annual demand, order cost, and holding cost
|
|
15
|
+
* @returns EOQ and related metrics
|
|
16
|
+
*/
|
|
17
|
+
export declare function eoq(input: EoqInput): EoqResult;
|
|
18
|
+
//# sourceMappingURL=eoq.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eoq.d.ts","sourceRoot":"","sources":["../../src/logistics/eoq.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEtD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,CA+B9C"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { roundTo } from '../utils.js';
|
|
2
|
+
/**
|
|
3
|
+
* Calculate Economic Order Quantity (EOQ)
|
|
4
|
+
*
|
|
5
|
+
* EOQ is the optimal order quantity that minimizes total inventory costs,
|
|
6
|
+
* balancing ordering costs and holding costs.
|
|
7
|
+
*
|
|
8
|
+
* Formula: EOQ = sqrt(2 × D × S / H)
|
|
9
|
+
* Where:
|
|
10
|
+
* D = Annual demand (units/year)
|
|
11
|
+
* S = Order cost per order ($)
|
|
12
|
+
* H = Holding cost per unit per year ($/unit/year)
|
|
13
|
+
*
|
|
14
|
+
* @param input - Annual demand, order cost, and holding cost
|
|
15
|
+
* @returns EOQ and related metrics
|
|
16
|
+
*/
|
|
17
|
+
export function eoq(input) {
|
|
18
|
+
const { annualDemand, orderCost, holdingCost } = input;
|
|
19
|
+
// Calculate EOQ using the classic formula
|
|
20
|
+
// EOQ = sqrt(2DS/H)
|
|
21
|
+
const eoqValue = Math.sqrt((2 * annualDemand * orderCost) / holdingCost);
|
|
22
|
+
// Orders per year = D / EOQ
|
|
23
|
+
const ordersPerYear = annualDemand / eoqValue;
|
|
24
|
+
// Order cycle time in days = 365 / orders per year
|
|
25
|
+
const orderCycleDays = 365 / ordersPerYear;
|
|
26
|
+
// Annual ordering cost = (D / EOQ) × S
|
|
27
|
+
const annualOrderingCost = ordersPerYear * orderCost;
|
|
28
|
+
// Annual holding cost = (EOQ / 2) × H
|
|
29
|
+
// Average inventory = EOQ / 2 (assuming constant demand and instant replenishment)
|
|
30
|
+
const annualHoldingCost = (eoqValue / 2) * holdingCost;
|
|
31
|
+
// Total annual cost = Annual ordering cost + Annual holding cost
|
|
32
|
+
const totalAnnualCost = annualOrderingCost + annualHoldingCost;
|
|
33
|
+
return {
|
|
34
|
+
eoq: roundTo(eoqValue, 4),
|
|
35
|
+
ordersPerYear: roundTo(ordersPerYear, 4),
|
|
36
|
+
orderCycleDays: roundTo(orderCycleDays, 4),
|
|
37
|
+
annualOrderingCost: roundTo(annualOrderingCost, 4),
|
|
38
|
+
annualHoldingCost: roundTo(annualHoldingCost, 4),
|
|
39
|
+
totalAnnualCost: roundTo(totalAnnualCost, 4),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=eoq.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eoq.js","sourceRoot":"","sources":["../../src/logistics/eoq.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,GAAG,CAAC,KAAe;IACjC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IAEvD,0CAA0C;IAC1C,oBAAoB;IACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,YAAY,GAAG,SAAS,CAAC,GAAG,WAAW,CAAC,CAAC;IAEzE,4BAA4B;IAC5B,MAAM,aAAa,GAAG,YAAY,GAAG,QAAQ,CAAC;IAE9C,mDAAmD;IACnD,MAAM,cAAc,GAAG,GAAG,GAAG,aAAa,CAAC;IAE3C,uCAAuC;IACvC,MAAM,kBAAkB,GAAG,aAAa,GAAG,SAAS,CAAC;IAErD,sCAAsC;IACtC,mFAAmF;IACnF,MAAM,iBAAiB,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC;IAEvD,iEAAiE;IACjE,MAAM,eAAe,GAAG,kBAAkB,GAAG,iBAAiB,CAAC;IAE/D,OAAO;QACL,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzB,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;QACxC,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;QAC1C,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAClD,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAChD,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;KAC7C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { FillRateInput, FillRateResult, ServiceLevelInput, ServiceLevelResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Calculate Fill Rate
|
|
4
|
+
*
|
|
5
|
+
* Fill rate measures the percentage of orders or order lines that are
|
|
6
|
+
* fulfilled completely from available stock.
|
|
7
|
+
*
|
|
8
|
+
* @param input - Fill rate calculation inputs
|
|
9
|
+
* @returns Fill rate results
|
|
10
|
+
*/
|
|
11
|
+
export declare function fillRate(input: FillRateInput): FillRateResult;
|
|
12
|
+
/**
|
|
13
|
+
* Calculate Service Level from Safety Stock
|
|
14
|
+
*
|
|
15
|
+
* Determines the service level achieved given current safety stock and
|
|
16
|
+
* demand variability.
|
|
17
|
+
*
|
|
18
|
+
* @param input - Service level calculation inputs
|
|
19
|
+
* @returns Service level results
|
|
20
|
+
*/
|
|
21
|
+
export declare function serviceLevel(input: ServiceLevelInput): ServiceLevelResult;
|
|
22
|
+
//# sourceMappingURL=fillRate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fillRate.d.ts","sourceRoot":"","sources":["../../src/logistics/fillRate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAsBpB;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,CA2B7D;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,kBAAkB,CA0BzE"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { roundTo } from '../utils.js';
|
|
2
|
+
/**
|
|
3
|
+
* Cumulative Distribution Function for standard normal distribution
|
|
4
|
+
* Uses the Horner form of the rational approximation
|
|
5
|
+
*/
|
|
6
|
+
function normalCDF(z) {
|
|
7
|
+
const a1 = 0.254829592;
|
|
8
|
+
const a2 = -0.284496736;
|
|
9
|
+
const a3 = 1.421413741;
|
|
10
|
+
const a4 = -1.453152027;
|
|
11
|
+
const a5 = 1.061405429;
|
|
12
|
+
const p = 0.3275911;
|
|
13
|
+
const sign = z < 0 ? -1 : 1;
|
|
14
|
+
const x = Math.abs(z) / Math.SQRT2;
|
|
15
|
+
const t = 1 / (1 + p * x);
|
|
16
|
+
const erf = 1 - ((((a5 * t + a4) * t + a3) * t + a2) * t + a1) * t * Math.exp(-x * x);
|
|
17
|
+
return 0.5 * (1 + sign * erf);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Calculate Fill Rate
|
|
21
|
+
*
|
|
22
|
+
* Fill rate measures the percentage of orders or order lines that are
|
|
23
|
+
* fulfilled completely from available stock.
|
|
24
|
+
*
|
|
25
|
+
* @param input - Fill rate calculation inputs
|
|
26
|
+
* @returns Fill rate results
|
|
27
|
+
*/
|
|
28
|
+
export function fillRate(input) {
|
|
29
|
+
const { totalOrders, filledComplete } = input;
|
|
30
|
+
// Handle zero/invalid inputs
|
|
31
|
+
if (totalOrders <= 0) {
|
|
32
|
+
return {
|
|
33
|
+
fillRate: 0,
|
|
34
|
+
shortfallRate: 100,
|
|
35
|
+
filledComplete: 0,
|
|
36
|
+
shortfall: 0,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
// Clamp filledComplete to valid range
|
|
40
|
+
const actualFilled = Math.min(Math.max(0, filledComplete), totalOrders);
|
|
41
|
+
const shortfall = totalOrders - actualFilled;
|
|
42
|
+
// Calculate fill rate
|
|
43
|
+
const rate = (actualFilled / totalOrders) * 100;
|
|
44
|
+
const shortfallRate = 100 - rate;
|
|
45
|
+
return {
|
|
46
|
+
fillRate: roundTo(rate, 2),
|
|
47
|
+
shortfallRate: roundTo(shortfallRate, 2),
|
|
48
|
+
filledComplete: actualFilled,
|
|
49
|
+
shortfall,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Calculate Service Level from Safety Stock
|
|
54
|
+
*
|
|
55
|
+
* Determines the service level achieved given current safety stock and
|
|
56
|
+
* demand variability.
|
|
57
|
+
*
|
|
58
|
+
* @param input - Service level calculation inputs
|
|
59
|
+
* @returns Service level results
|
|
60
|
+
*/
|
|
61
|
+
export function serviceLevel(input) {
|
|
62
|
+
const { demandStdDev, safetyStock } = input;
|
|
63
|
+
// Handle zero/invalid inputs
|
|
64
|
+
if (demandStdDev <= 0) {
|
|
65
|
+
return {
|
|
66
|
+
zScore: 0,
|
|
67
|
+
serviceLevel: safetyStock > 0 ? 100 : 50,
|
|
68
|
+
stockoutProbability: safetyStock > 0 ? 0 : 50,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
// Calculate z-score: z = safety stock / std dev
|
|
72
|
+
const zScore = safetyStock / demandStdDev;
|
|
73
|
+
// Service level is the CDF of the normal distribution at z
|
|
74
|
+
// This gives the probability of demand being less than or equal to
|
|
75
|
+
// (average demand + safety stock)
|
|
76
|
+
const level = normalCDF(zScore) * 100;
|
|
77
|
+
const stockoutProbability = 100 - level;
|
|
78
|
+
return {
|
|
79
|
+
zScore: roundTo(zScore, 3),
|
|
80
|
+
serviceLevel: roundTo(level, 2),
|
|
81
|
+
stockoutProbability: roundTo(stockoutProbability, 2),
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=fillRate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fillRate.js","sourceRoot":"","sources":["../../src/logistics/fillRate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { FreightClassInput, FreightClassResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Calculate NMFC Freight Class based on density
|
|
4
|
+
*
|
|
5
|
+
* Freight class is determined by the density of the shipment (weight per cubic foot).
|
|
6
|
+
* Lower density items have higher freight classes and generally cost more to ship.
|
|
7
|
+
*
|
|
8
|
+
* @param input - Package weight and dimensions in imperial units
|
|
9
|
+
* @returns Freight class determination results
|
|
10
|
+
*/
|
|
11
|
+
export declare function freightClass(input: FreightClassInput): FreightClassResult;
|
|
12
|
+
//# sourceMappingURL=freightClass.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"freightClass.d.ts","sourceRoot":"","sources":["../../src/logistics/freightClass.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA2BxE;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,kBAAkB,CAsCzE"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { roundTo } from '../utils.js';
|
|
2
|
+
/**
|
|
3
|
+
* NMFC Freight Class lookup based on density (simplified)
|
|
4
|
+
* Lower density = higher class = higher shipping cost
|
|
5
|
+
*/
|
|
6
|
+
const FREIGHT_CLASS_TABLE = [
|
|
7
|
+
{ minDensity: 50, maxDensity: Infinity, freightClass: 50, className: 'Clean Freight' },
|
|
8
|
+
{ minDensity: 35, maxDensity: 50, freightClass: 55, className: 'Bricks, Cement' },
|
|
9
|
+
{ minDensity: 30, maxDensity: 35, freightClass: 60, className: 'Car Accessories' },
|
|
10
|
+
{ minDensity: 22.5, maxDensity: 30, freightClass: 65, className: 'Car Parts' },
|
|
11
|
+
{ minDensity: 15, maxDensity: 22.5, freightClass: 70, className: 'Food Items' },
|
|
12
|
+
{ minDensity: 13.5, maxDensity: 15, freightClass: 77.5, className: 'Tires, Bathroom Fixtures' },
|
|
13
|
+
{ minDensity: 12, maxDensity: 13.5, freightClass: 85, className: 'Crated Machinery' },
|
|
14
|
+
{ minDensity: 10.5, maxDensity: 12, freightClass: 92.5, className: 'Computers, Monitors' },
|
|
15
|
+
{ minDensity: 9, maxDensity: 10.5, freightClass: 100, className: 'Boat Covers, Car Covers' },
|
|
16
|
+
{ minDensity: 8, maxDensity: 9, freightClass: 110, className: 'Cabinets, Framed Art' },
|
|
17
|
+
{ minDensity: 7, maxDensity: 8, freightClass: 125, className: 'Small Appliances' },
|
|
18
|
+
{ minDensity: 6, maxDensity: 7, freightClass: 150, className: 'Auto Sheet Metal' },
|
|
19
|
+
{ minDensity: 5, maxDensity: 6, freightClass: 175, className: 'Clothing, Couches' },
|
|
20
|
+
{ minDensity: 4, maxDensity: 5, freightClass: 200, className: 'Auto Sheet Metal Parts' },
|
|
21
|
+
{ minDensity: 3, maxDensity: 4, freightClass: 250, className: 'Bamboo Furniture' },
|
|
22
|
+
{ minDensity: 2, maxDensity: 3, freightClass: 300, className: 'Wood Cabinets' },
|
|
23
|
+
{ minDensity: 1, maxDensity: 2, freightClass: 400, className: 'Deer Antlers' },
|
|
24
|
+
{ minDensity: 0, maxDensity: 1, freightClass: 500, className: 'Ping Pong Balls, Styrofoam' },
|
|
25
|
+
];
|
|
26
|
+
/**
|
|
27
|
+
* Calculate NMFC Freight Class based on density
|
|
28
|
+
*
|
|
29
|
+
* Freight class is determined by the density of the shipment (weight per cubic foot).
|
|
30
|
+
* Lower density items have higher freight classes and generally cost more to ship.
|
|
31
|
+
*
|
|
32
|
+
* @param input - Package weight and dimensions in imperial units
|
|
33
|
+
* @returns Freight class determination results
|
|
34
|
+
*/
|
|
35
|
+
export function freightClass(input) {
|
|
36
|
+
const { weight, length, width, height } = input;
|
|
37
|
+
// Handle zero/invalid inputs
|
|
38
|
+
if (weight <= 0 || length <= 0 || width <= 0 || height <= 0) {
|
|
39
|
+
return {
|
|
40
|
+
density: 0,
|
|
41
|
+
freightClass: 0,
|
|
42
|
+
className: 'Invalid Input',
|
|
43
|
+
volumeCuFt: 0,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
// Calculate volume in cubic feet (input is in inches)
|
|
47
|
+
const volumeCuIn = length * width * height;
|
|
48
|
+
const volumeCuFt = volumeCuIn / 1728; // 12^3 = 1728 cubic inches per cubic foot
|
|
49
|
+
// Calculate density (lbs per cubic foot)
|
|
50
|
+
const density = weight / volumeCuFt;
|
|
51
|
+
// Find freight class based on density
|
|
52
|
+
let fc = 500;
|
|
53
|
+
let className = 'Ping Pong Balls, Styrofoam';
|
|
54
|
+
for (const entry of FREIGHT_CLASS_TABLE) {
|
|
55
|
+
if (density >= entry.minDensity && density < entry.maxDensity) {
|
|
56
|
+
fc = entry.freightClass;
|
|
57
|
+
className = entry.className;
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
density: roundTo(density, 2),
|
|
63
|
+
freightClass: fc,
|
|
64
|
+
className,
|
|
65
|
+
volumeCuFt: roundTo(volumeCuFt, 3),
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=freightClass.js.map
|