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,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calculate fall clearance requirements for personal fall protection systems.
|
|
3
|
+
*
|
|
4
|
+
* Total Fall Distance = Lanyard Length + Deceleration Distance + Harness Stretch + Worker Height + Safety Factor
|
|
5
|
+
* Minimum Height = Total Fall Distance - Anchor Height
|
|
6
|
+
*
|
|
7
|
+
* @param input - Fall clearance parameters
|
|
8
|
+
* @returns Fall clearance results including total fall distance and minimum height
|
|
9
|
+
*/
|
|
10
|
+
export function fallClearance(input) {
|
|
11
|
+
const { lanyardLength, decelerationDistance, harnessStretch, workerHeight, safetyFactor, anchorHeight, } = input;
|
|
12
|
+
// Calculate total fall distance (all components that contribute to the fall)
|
|
13
|
+
const totalFallDistance = lanyardLength +
|
|
14
|
+
decelerationDistance +
|
|
15
|
+
harnessStretch +
|
|
16
|
+
workerHeight +
|
|
17
|
+
safetyFactor;
|
|
18
|
+
// Minimum height is total fall distance minus anchor height above feet
|
|
19
|
+
const minimumHeight = totalFallDistance - anchorHeight;
|
|
20
|
+
// Determine if the system is adequate
|
|
21
|
+
// isAdequate is true if anchor is elevated enough to reduce risk
|
|
22
|
+
// isAdequate is false if anchor is at foot level or below (no reduction)
|
|
23
|
+
// isAdequate is null if cannot be determined (edge cases)
|
|
24
|
+
let isAdequate = null;
|
|
25
|
+
if (anchorHeight > 0) {
|
|
26
|
+
isAdequate = true;
|
|
27
|
+
}
|
|
28
|
+
else if (anchorHeight <= 0) {
|
|
29
|
+
isAdequate = false;
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
totalFallDistance,
|
|
33
|
+
minimumHeight,
|
|
34
|
+
isAdequate,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=fallClearance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fallClearance.js","sourceRoot":"","sources":["../../src/safety/fallClearance.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,MAAM,EACJ,aAAa,EACb,oBAAoB,EACpB,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,YAAY,GACb,GAAG,KAAK,CAAC;IAEV,6EAA6E;IAC7E,MAAM,iBAAiB,GACrB,aAAa;QACb,oBAAoB;QACpB,cAAc;QACd,YAAY;QACZ,YAAY,CAAC;IAEf,uEAAuE;IACvE,MAAM,aAAa,GAAG,iBAAiB,GAAG,YAAY,CAAC;IAEvD,sCAAsC;IACtC,iEAAiE;IACjE,yEAAyE;IACzE,0DAA0D;IAC1D,IAAI,UAAU,GAAmB,IAAI,CAAC;IACtC,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACrB,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC;SAAM,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;QAC7B,UAAU,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,OAAO;QACL,iBAAiB;QACjB,aAAa;QACb,UAAU;KACX,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { HavsInput, HavsResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Calculate Hand-Arm Vibration exposure based on ISO 5349 and EU Physical Agents Directive 2002/44/EC.
|
|
4
|
+
*
|
|
5
|
+
* A(8) = sqrt(sum(A_partial²))
|
|
6
|
+
* Where A_partial = a_hv × sqrt(T / T0)
|
|
7
|
+
*
|
|
8
|
+
* Exposure Limits:
|
|
9
|
+
* - EAV (Exposure Action Value) = 2.5 m/s²
|
|
10
|
+
* - ELV (Exposure Limit Value) = 5.0 m/s²
|
|
11
|
+
*
|
|
12
|
+
* @param input - HAVS input parameters with tool exposures
|
|
13
|
+
* @returns HAVS results including A(8), status, and exposure metrics
|
|
14
|
+
*/
|
|
15
|
+
export declare function havsCalculate(input: HavsInput): HavsResult;
|
|
16
|
+
//# sourceMappingURL=havsCalculate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"havsCalculate.d.ts","sourceRoot":"","sources":["../../src/safety/havsCalculate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAgB,MAAM,YAAY,CAAC;AAyEtE;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CAkC1D"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
// Exposure Action Value (EAV) = 2.5 m/s²
|
|
2
|
+
const EAV = 2.5;
|
|
3
|
+
// Exposure Limit Value (ELV) = 5.0 m/s²
|
|
4
|
+
const ELV = 5.0;
|
|
5
|
+
// Reference period T0 = 8 hours
|
|
6
|
+
const T0 = 8;
|
|
7
|
+
/**
|
|
8
|
+
* Calculate partial A(8) exposure for a single tool
|
|
9
|
+
* Formula: A_partial = a_hv × sqrt(T / T0)
|
|
10
|
+
* Where:
|
|
11
|
+
* - a_hv = vibration magnitude (m/s²)
|
|
12
|
+
* - T = exposure time (hours)
|
|
13
|
+
* - T0 = reference period (8 hours)
|
|
14
|
+
*/
|
|
15
|
+
function calculatePartialExposure(tool) {
|
|
16
|
+
const { vibrationMagnitude, exposureTime } = tool;
|
|
17
|
+
if (vibrationMagnitude <= 0 || exposureTime <= 0)
|
|
18
|
+
return 0;
|
|
19
|
+
return vibrationMagnitude * Math.sqrt(exposureTime / T0);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Calculate total daily A(8) exposure from multiple tools
|
|
23
|
+
* Formula: A(8) = sqrt(sum(A_partial²))
|
|
24
|
+
*/
|
|
25
|
+
function calculateTotalA8(partialExposures) {
|
|
26
|
+
const sumOfSquares = partialExposures.reduce((sum, a) => sum + a * a, 0);
|
|
27
|
+
return Math.sqrt(sumOfSquares);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Calculate exposure points (100 points = EAV)
|
|
31
|
+
* Formula: points = (A(8) / EAV)² × 100
|
|
32
|
+
*/
|
|
33
|
+
function calculateExposurePoints(a8) {
|
|
34
|
+
return Math.pow(a8 / EAV, 2) * 100;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Determine exposure status based on A(8) value
|
|
38
|
+
*/
|
|
39
|
+
function determineStatus(a8) {
|
|
40
|
+
if (a8 >= ELV)
|
|
41
|
+
return 'limit';
|
|
42
|
+
if (a8 >= EAV)
|
|
43
|
+
return 'action';
|
|
44
|
+
return 'safe';
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Calculate maximum safe daily exposure time at current weighted average vibration level
|
|
48
|
+
* Formula: T_max = T0 × (EAV / a_avg)²
|
|
49
|
+
* Where a_avg is the weighted average vibration magnitude
|
|
50
|
+
*/
|
|
51
|
+
function calculateMaxDailyExposure(tools) {
|
|
52
|
+
const totalTime = tools.reduce((sum, t) => sum + t.exposureTime, 0);
|
|
53
|
+
if (totalTime <= 0)
|
|
54
|
+
return T0;
|
|
55
|
+
// Calculate time-weighted average vibration magnitude squared
|
|
56
|
+
const sumVibSquaredTime = tools.reduce((sum, t) => sum + t.vibrationMagnitude * t.vibrationMagnitude * t.exposureTime, 0);
|
|
57
|
+
const avgVibSquared = sumVibSquaredTime / totalTime;
|
|
58
|
+
if (avgVibSquared <= 0)
|
|
59
|
+
return T0;
|
|
60
|
+
// T_max = T0 × (EAV² / a_avg²)
|
|
61
|
+
return T0 * (EAV * EAV) / avgVibSquared;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Calculate Hand-Arm Vibration exposure based on ISO 5349 and EU Physical Agents Directive 2002/44/EC.
|
|
65
|
+
*
|
|
66
|
+
* A(8) = sqrt(sum(A_partial²))
|
|
67
|
+
* Where A_partial = a_hv × sqrt(T / T0)
|
|
68
|
+
*
|
|
69
|
+
* Exposure Limits:
|
|
70
|
+
* - EAV (Exposure Action Value) = 2.5 m/s²
|
|
71
|
+
* - ELV (Exposure Limit Value) = 5.0 m/s²
|
|
72
|
+
*
|
|
73
|
+
* @param input - HAVS input parameters with tool exposures
|
|
74
|
+
* @returns HAVS results including A(8), status, and exposure metrics
|
|
75
|
+
*/
|
|
76
|
+
export function havsCalculate(input) {
|
|
77
|
+
const { tools } = input;
|
|
78
|
+
// Filter out empty entries
|
|
79
|
+
const validTools = tools.filter(t => t.vibrationMagnitude > 0 && t.exposureTime > 0);
|
|
80
|
+
// Calculate partial exposures for each tool
|
|
81
|
+
const partialExposures = validTools.map(calculatePartialExposure);
|
|
82
|
+
// Calculate total A(8)
|
|
83
|
+
const a8 = calculateTotalA8(partialExposures);
|
|
84
|
+
// Calculate percentages of limits
|
|
85
|
+
const percentEAV = (a8 / EAV) * 100;
|
|
86
|
+
const percentELV = (a8 / ELV) * 100;
|
|
87
|
+
// Calculate exposure points
|
|
88
|
+
const exposurePoints = calculateExposurePoints(a8);
|
|
89
|
+
// Determine status
|
|
90
|
+
const status = determineStatus(a8);
|
|
91
|
+
// Calculate max daily exposure
|
|
92
|
+
const maxDailyExposure = calculateMaxDailyExposure(validTools);
|
|
93
|
+
return {
|
|
94
|
+
a8,
|
|
95
|
+
partialExposures,
|
|
96
|
+
percentEAV,
|
|
97
|
+
percentELV,
|
|
98
|
+
exposurePoints,
|
|
99
|
+
status,
|
|
100
|
+
maxDailyExposure: Math.min(maxDailyExposure, T0),
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=havsCalculate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"havsCalculate.js","sourceRoot":"","sources":["../../src/safety/havsCalculate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { fallClearance } from './fallClearance.js';
|
|
2
|
+
export { nioshLifting } from './nioshLifting.js';
|
|
3
|
+
export { noiseExposure } from './noiseExposure.js';
|
|
4
|
+
export { wbgtCalculate } from './wbgtCalculate.js';
|
|
5
|
+
export { havsCalculate } from './havsCalculate.js';
|
|
6
|
+
export { respiratorCalculate } from './respiratorCalculate.js';
|
|
7
|
+
export type { FallClearanceInput, FallClearanceResult, CouplingQuality, WorkDuration, NioshInput, NioshResult, NoiseExposure, NoiseExposureInput, NoiseExposureResult, WorkloadIntensity, WbgtInput, WbgtResult, ToolExposure, HavsInput, HavsResult, RespiratorType, RespiratorInput, RespiratorResult, } from './types.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/safety/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAG/D,YAAY,EAEV,kBAAkB,EAClB,mBAAmB,EAEnB,eAAe,EACf,YAAY,EACZ,UAAU,EACV,WAAW,EAEX,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EAEnB,iBAAiB,EACjB,SAAS,EACT,UAAU,EAEV,YAAY,EACZ,SAAS,EACT,UAAU,EAEV,cAAc,EACd,eAAe,EACf,gBAAgB,GACjB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// Safety domain formulas
|
|
2
|
+
export { fallClearance } from './fallClearance.js';
|
|
3
|
+
export { nioshLifting } from './nioshLifting.js';
|
|
4
|
+
export { noiseExposure } from './noiseExposure.js';
|
|
5
|
+
export { wbgtCalculate } from './wbgtCalculate.js';
|
|
6
|
+
export { havsCalculate } from './havsCalculate.js';
|
|
7
|
+
export { respiratorCalculate } from './respiratorCalculate.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/safety/index.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { NioshInput, NioshResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Calculate NIOSH Recommended Weight Limit (RWL) and Lifting Index (LI)
|
|
4
|
+
*
|
|
5
|
+
* RWL = LC x HM x VM x DM x AM x FM x CM
|
|
6
|
+
* LI = Load Weight / RWL
|
|
7
|
+
*
|
|
8
|
+
* Where:
|
|
9
|
+
* - LC = Load Constant (23 kg)
|
|
10
|
+
* - HM = Horizontal Multiplier = 25/H
|
|
11
|
+
* - VM = Vertical Multiplier = 1 - 0.003|V - 75|
|
|
12
|
+
* - DM = Distance Multiplier = 0.82 + 4.5/D
|
|
13
|
+
* - AM = Asymmetric Multiplier = 1 - 0.0032A
|
|
14
|
+
* - FM = Frequency Multiplier (from table)
|
|
15
|
+
* - CM = Coupling Multiplier (from table)
|
|
16
|
+
*
|
|
17
|
+
* @param input - NIOSH lifting parameters
|
|
18
|
+
* @returns NIOSH results including RWL, LI, multipliers, and risk level
|
|
19
|
+
*/
|
|
20
|
+
export declare function nioshLifting(input: NioshInput): NioshResult;
|
|
21
|
+
//# sourceMappingURL=nioshLifting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nioshLifting.d.ts","sourceRoot":"","sources":["../../src/safety/nioshLifting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EAGZ,MAAM,YAAY,CAAC;AAoHpB;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,CA4D3D"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
// NIOSH Lifting Equation constants
|
|
2
|
+
const LC = 23; // Load Constant in kg
|
|
3
|
+
// Frequency Multiplier (FM) lookup table
|
|
4
|
+
// Based on NIOSH 1991 Revised Lifting Equation
|
|
5
|
+
const FM_TABLE = {
|
|
6
|
+
short: {
|
|
7
|
+
'0.2': 1.0,
|
|
8
|
+
'0.5': 0.97,
|
|
9
|
+
'1': 0.94,
|
|
10
|
+
'2': 0.91,
|
|
11
|
+
'3': 0.88,
|
|
12
|
+
'4': 0.84,
|
|
13
|
+
'5': 0.8,
|
|
14
|
+
'6': 0.75,
|
|
15
|
+
'7': 0.7,
|
|
16
|
+
'8': 0.6,
|
|
17
|
+
'9': 0.52,
|
|
18
|
+
'10': 0.45,
|
|
19
|
+
'11': 0.41,
|
|
20
|
+
'12': 0.37,
|
|
21
|
+
'13': 0.34,
|
|
22
|
+
'14': 0.31,
|
|
23
|
+
'15': 0.28,
|
|
24
|
+
},
|
|
25
|
+
medium: {
|
|
26
|
+
'0.2': 0.95,
|
|
27
|
+
'0.5': 0.92,
|
|
28
|
+
'1': 0.88,
|
|
29
|
+
'2': 0.84,
|
|
30
|
+
'3': 0.79,
|
|
31
|
+
'4': 0.72,
|
|
32
|
+
'5': 0.6,
|
|
33
|
+
'6': 0.5,
|
|
34
|
+
'7': 0.42,
|
|
35
|
+
'8': 0.35,
|
|
36
|
+
'9': 0.3,
|
|
37
|
+
'10': 0.26,
|
|
38
|
+
'11': 0.23,
|
|
39
|
+
'12': 0.21,
|
|
40
|
+
'13': 0.19,
|
|
41
|
+
'14': 0.17,
|
|
42
|
+
'15': 0.15,
|
|
43
|
+
},
|
|
44
|
+
long: {
|
|
45
|
+
'0.2': 0.85,
|
|
46
|
+
'0.5': 0.81,
|
|
47
|
+
'1': 0.75,
|
|
48
|
+
'2': 0.65,
|
|
49
|
+
'3': 0.55,
|
|
50
|
+
'4': 0.45,
|
|
51
|
+
'5': 0.35,
|
|
52
|
+
'6': 0.27,
|
|
53
|
+
'7': 0.22,
|
|
54
|
+
'8': 0.18,
|
|
55
|
+
'9': 0.15,
|
|
56
|
+
'10': 0.13,
|
|
57
|
+
'11': 0.11,
|
|
58
|
+
'12': 0.1,
|
|
59
|
+
'13': 0.0,
|
|
60
|
+
'14': 0.0,
|
|
61
|
+
'15': 0.0,
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
// Coupling Multiplier (CM) lookup table
|
|
65
|
+
// V < 75cm and V >= 75cm
|
|
66
|
+
const CM_TABLE = {
|
|
67
|
+
good: { low: 1.0, high: 1.0 },
|
|
68
|
+
fair: { low: 1.0, high: 0.95 },
|
|
69
|
+
poor: { low: 0.9, high: 0.9 },
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Get frequency multiplier (FM) based on frequency and duration
|
|
73
|
+
*/
|
|
74
|
+
function getFrequencyMultiplier(frequency, duration) {
|
|
75
|
+
const table = FM_TABLE[duration];
|
|
76
|
+
const keys = Object.keys(table)
|
|
77
|
+
.map(Number)
|
|
78
|
+
.sort((a, b) => a - b);
|
|
79
|
+
// Find the closest frequency key
|
|
80
|
+
let closestKey = keys[0];
|
|
81
|
+
for (const key of keys) {
|
|
82
|
+
if (key <= frequency) {
|
|
83
|
+
closestKey = key;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// If frequency exceeds max, use last value
|
|
90
|
+
if (frequency > keys[keys.length - 1]) {
|
|
91
|
+
closestKey = keys[keys.length - 1];
|
|
92
|
+
}
|
|
93
|
+
return table[String(closestKey)];
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get coupling multiplier (CM) based on coupling quality and vertical position
|
|
97
|
+
*/
|
|
98
|
+
function getCouplingMultiplier(coupling, verticalDistance) {
|
|
99
|
+
const cmValues = CM_TABLE[coupling];
|
|
100
|
+
return verticalDistance < 75 ? cmValues.low : cmValues.high;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Calculate NIOSH Recommended Weight Limit (RWL) and Lifting Index (LI)
|
|
104
|
+
*
|
|
105
|
+
* RWL = LC x HM x VM x DM x AM x FM x CM
|
|
106
|
+
* LI = Load Weight / RWL
|
|
107
|
+
*
|
|
108
|
+
* Where:
|
|
109
|
+
* - LC = Load Constant (23 kg)
|
|
110
|
+
* - HM = Horizontal Multiplier = 25/H
|
|
111
|
+
* - VM = Vertical Multiplier = 1 - 0.003|V - 75|
|
|
112
|
+
* - DM = Distance Multiplier = 0.82 + 4.5/D
|
|
113
|
+
* - AM = Asymmetric Multiplier = 1 - 0.0032A
|
|
114
|
+
* - FM = Frequency Multiplier (from table)
|
|
115
|
+
* - CM = Coupling Multiplier (from table)
|
|
116
|
+
*
|
|
117
|
+
* @param input - NIOSH lifting parameters
|
|
118
|
+
* @returns NIOSH results including RWL, LI, multipliers, and risk level
|
|
119
|
+
*/
|
|
120
|
+
export function nioshLifting(input) {
|
|
121
|
+
const { horizontalDistance, verticalDistance, verticalTravel, asymmetryAngle, frequency, duration, coupling, loadWeight, } = input;
|
|
122
|
+
// Calculate multipliers
|
|
123
|
+
// HM: Horizontal Multiplier (25/H), max 1.0, H must be >= 25cm
|
|
124
|
+
const h = Math.max(horizontalDistance, 25);
|
|
125
|
+
const hm = Math.min(25 / h, 1.0);
|
|
126
|
+
// VM: Vertical Multiplier (1 - 0.003|V - 75|), V in cm
|
|
127
|
+
const vm = Math.max(0, 1 - 0.003 * Math.abs(verticalDistance - 75));
|
|
128
|
+
// DM: Distance Multiplier (0.82 + 4.5/D), D must be >= 25cm
|
|
129
|
+
const d = Math.max(verticalTravel, 25);
|
|
130
|
+
const dm = Math.min(0.82 + 4.5 / d, 1.0);
|
|
131
|
+
// AM: Asymmetric Multiplier (1 - 0.0032A), A in degrees
|
|
132
|
+
const am = Math.max(0, 1 - 0.0032 * asymmetryAngle);
|
|
133
|
+
// FM: Frequency Multiplier (from lookup table)
|
|
134
|
+
const fm = getFrequencyMultiplier(frequency, duration);
|
|
135
|
+
// CM: Coupling Multiplier (from lookup table)
|
|
136
|
+
const cm = getCouplingMultiplier(coupling, verticalDistance);
|
|
137
|
+
// Calculate RWL
|
|
138
|
+
const rwl = LC * hm * vm * dm * am * fm * cm;
|
|
139
|
+
// Calculate Lifting Index
|
|
140
|
+
const liftingIndex = rwl > 0 ? loadWeight / rwl : Infinity;
|
|
141
|
+
// Determine risk level
|
|
142
|
+
let riskLevel;
|
|
143
|
+
if (liftingIndex <= 1) {
|
|
144
|
+
riskLevel = 'low';
|
|
145
|
+
}
|
|
146
|
+
else if (liftingIndex <= 2) {
|
|
147
|
+
riskLevel = 'moderate';
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
riskLevel = 'high';
|
|
151
|
+
}
|
|
152
|
+
return {
|
|
153
|
+
rwl,
|
|
154
|
+
liftingIndex,
|
|
155
|
+
hm,
|
|
156
|
+
vm,
|
|
157
|
+
dm,
|
|
158
|
+
am,
|
|
159
|
+
fm,
|
|
160
|
+
cm,
|
|
161
|
+
riskLevel,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=nioshLifting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nioshLifting.js","sourceRoot":"","sources":["../../src/safety/nioshLifting.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { NoiseExposureInput, NoiseExposureResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Calculate noise exposure dose and TWA based on OSHA standards
|
|
4
|
+
*
|
|
5
|
+
* Dose = Sum(Cn/Tn) x 100
|
|
6
|
+
* TWA = 16.61 x log10(D/100) + 90
|
|
7
|
+
*
|
|
8
|
+
* Where:
|
|
9
|
+
* - Cn = actual exposure duration at a given noise level
|
|
10
|
+
* - Tn = allowable exposure duration at that level
|
|
11
|
+
* - D = dose percentage
|
|
12
|
+
*
|
|
13
|
+
* Status thresholds:
|
|
14
|
+
* - compliant: dose <= 50% (action level)
|
|
15
|
+
* - actionRequired: 50% < dose <= 100% (PEL)
|
|
16
|
+
* - exceeds: dose > 100%
|
|
17
|
+
*
|
|
18
|
+
* @param input - Noise exposure input with array of exposures
|
|
19
|
+
* @returns Noise exposure result with dose, TWA, and status
|
|
20
|
+
*/
|
|
21
|
+
export declare function noiseExposure(input: NoiseExposureInput): NoiseExposureResult;
|
|
22
|
+
//# sourceMappingURL=noiseExposure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noiseExposure.d.ts","sourceRoot":"","sources":["../../src/safety/noiseExposure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAkB1E;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,mBAAmB,CA0C5E"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calculate allowable exposure time for a given sound level (OSHA formula)
|
|
3
|
+
* Tn = 8 / 2^((L-90)/5)
|
|
4
|
+
*
|
|
5
|
+
* @param soundLevel - Sound level in dB(A)
|
|
6
|
+
* @returns Allowable exposure time in hours
|
|
7
|
+
*/
|
|
8
|
+
function getAllowableTime(soundLevel) {
|
|
9
|
+
// OSHA uses 90 dB as the reference with 5 dB exchange rate
|
|
10
|
+
// For levels below 80 dB, exposure is essentially unlimited
|
|
11
|
+
if (soundLevel < 80) {
|
|
12
|
+
return Infinity;
|
|
13
|
+
}
|
|
14
|
+
return 8 / Math.pow(2, (soundLevel - 90) / 5);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Calculate noise exposure dose and TWA based on OSHA standards
|
|
18
|
+
*
|
|
19
|
+
* Dose = Sum(Cn/Tn) x 100
|
|
20
|
+
* TWA = 16.61 x log10(D/100) + 90
|
|
21
|
+
*
|
|
22
|
+
* Where:
|
|
23
|
+
* - Cn = actual exposure duration at a given noise level
|
|
24
|
+
* - Tn = allowable exposure duration at that level
|
|
25
|
+
* - D = dose percentage
|
|
26
|
+
*
|
|
27
|
+
* Status thresholds:
|
|
28
|
+
* - compliant: dose <= 50% (action level)
|
|
29
|
+
* - actionRequired: 50% < dose <= 100% (PEL)
|
|
30
|
+
* - exceeds: dose > 100%
|
|
31
|
+
*
|
|
32
|
+
* @param input - Noise exposure input with array of exposures
|
|
33
|
+
* @returns Noise exposure result with dose, TWA, and status
|
|
34
|
+
*/
|
|
35
|
+
export function noiseExposure(input) {
|
|
36
|
+
const { exposures } = input;
|
|
37
|
+
// Calculate dose as sum of (Cn/Tn)
|
|
38
|
+
let doseSum = 0;
|
|
39
|
+
for (const exposure of exposures) {
|
|
40
|
+
const { soundLevel, duration } = exposure;
|
|
41
|
+
const allowableTime = getAllowableTime(soundLevel);
|
|
42
|
+
if (allowableTime !== Infinity) {
|
|
43
|
+
doseSum += duration / allowableTime;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Dose as percentage
|
|
47
|
+
const dose = doseSum * 100;
|
|
48
|
+
// Calculate TWA (8-hour Time Weighted Average)
|
|
49
|
+
// TWA = 16.61 x log10(D/100) + 90
|
|
50
|
+
// If dose is 0, TWA is undefined (use a low value)
|
|
51
|
+
let twa;
|
|
52
|
+
if (dose > 0) {
|
|
53
|
+
twa = 16.61 * Math.log10(dose / 100) + 90;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
// No significant noise exposure
|
|
57
|
+
twa = 0;
|
|
58
|
+
}
|
|
59
|
+
// Determine status
|
|
60
|
+
let status;
|
|
61
|
+
if (dose <= 50) {
|
|
62
|
+
status = 'compliant';
|
|
63
|
+
}
|
|
64
|
+
else if (dose <= 100) {
|
|
65
|
+
status = 'actionRequired';
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
status = 'exceeds';
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
dose,
|
|
72
|
+
twa,
|
|
73
|
+
status,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=noiseExposure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noiseExposure.js","sourceRoot":"","sources":["../../src/safety/noiseExposure.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,SAAS,gBAAgB,CAAC,UAAkB;IAC1C,2DAA2D;IAC3D,4DAA4D;IAC5D,IAAI,UAAU,GAAG,EAAE,EAAE,CAAC;QACpB,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAChD,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAE5B,mCAAmC;IACnC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;QAC1C,MAAM,aAAa,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACnD,IAAI,aAAa,KAAK,QAAQ,EAAE,CAAC;YAC/B,OAAO,IAAI,QAAQ,GAAG,aAAa,CAAC;QACtC,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,MAAM,IAAI,GAAG,OAAO,GAAG,GAAG,CAAC;IAE3B,+CAA+C;IAC/C,kCAAkC;IAClC,mDAAmD;IACnD,IAAI,GAAW,CAAC;IAChB,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QACb,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,gCAAgC;QAChC,GAAG,GAAG,CAAC,CAAC;IACV,CAAC;IAED,mBAAmB;IACnB,IAAI,MAAkD,CAAC;IACvD,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;QACf,MAAM,GAAG,WAAW,CAAC;IACvB,CAAC;SAAM,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;QACvB,MAAM,GAAG,gBAAgB,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,SAAS,CAAC;IACrB,CAAC;IAED,OAAO;QACL,IAAI;QACJ,GAAG;QACH,MAAM;KACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { RespiratorInput, RespiratorResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Calculate respirator MUC (Maximum Use Concentration) and protection factor
|
|
4
|
+
* based on OSHA 29 CFR 1910.134 and NIOSH respirator selection guidelines.
|
|
5
|
+
*
|
|
6
|
+
* MUC = APF × OEL
|
|
7
|
+
* Hazard Ratio = Concentration / OEL
|
|
8
|
+
* Protection is adequate when Concentration <= MUC
|
|
9
|
+
*
|
|
10
|
+
* @param input - Respirator input parameters
|
|
11
|
+
* @returns Respirator results including MUC, APF, and protection assessment
|
|
12
|
+
*/
|
|
13
|
+
export declare function respiratorCalculate(input: RespiratorInput): RespiratorResult;
|
|
14
|
+
//# sourceMappingURL=respiratorCalculate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"respiratorCalculate.d.ts","sourceRoot":"","sources":["../../src/safety/respiratorCalculate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAkB,MAAM,YAAY,CAAC;AA2DpF;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,CA8B5E"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OSHA Assigned Protection Factors (APFs)
|
|
3
|
+
* From 29 CFR 1910.134 Table 1
|
|
4
|
+
*/
|
|
5
|
+
const APF_VALUES = {
|
|
6
|
+
'filtering-facepiece': 10,
|
|
7
|
+
'half-mask': 10,
|
|
8
|
+
'full-facepiece': 50,
|
|
9
|
+
'powered-half-mask': 50,
|
|
10
|
+
'powered-hood': 25,
|
|
11
|
+
'powered-full-facepiece': 1000,
|
|
12
|
+
'supplied-air-half': 10,
|
|
13
|
+
'supplied-air-full': 50,
|
|
14
|
+
'supplied-air-full-pd': 1000,
|
|
15
|
+
'scba-pd': 10000,
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Calculate Maximum Use Concentration (MUC)
|
|
19
|
+
* Formula: MUC = APF × OEL
|
|
20
|
+
*
|
|
21
|
+
* The MUC is the maximum concentration of a hazardous substance
|
|
22
|
+
* that a specific respirator can be used in.
|
|
23
|
+
*/
|
|
24
|
+
function calculateMUC(apf, oel) {
|
|
25
|
+
return apf * oel;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Calculate Hazard Ratio
|
|
29
|
+
* Formula: HR = Concentration / OEL
|
|
30
|
+
*
|
|
31
|
+
* The hazard ratio indicates how many times the workplace
|
|
32
|
+
* concentration exceeds the occupational exposure limit.
|
|
33
|
+
*/
|
|
34
|
+
function calculateHazardRatio(concentration, oel) {
|
|
35
|
+
if (oel <= 0)
|
|
36
|
+
return Infinity;
|
|
37
|
+
return concentration / oel;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Calculate the minimum APF required for adequate protection
|
|
41
|
+
* Required APF must be >= Hazard Ratio
|
|
42
|
+
*/
|
|
43
|
+
function calculateRequiredAPF(hazardRatio) {
|
|
44
|
+
return hazardRatio;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Calculate safety margin
|
|
48
|
+
* How much the selected APF exceeds the required APF
|
|
49
|
+
*/
|
|
50
|
+
function calculateSafetyMargin(apf, requiredAPF) {
|
|
51
|
+
if (requiredAPF <= 0)
|
|
52
|
+
return Infinity;
|
|
53
|
+
return apf / requiredAPF;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Calculate respirator MUC (Maximum Use Concentration) and protection factor
|
|
57
|
+
* based on OSHA 29 CFR 1910.134 and NIOSH respirator selection guidelines.
|
|
58
|
+
*
|
|
59
|
+
* MUC = APF × OEL
|
|
60
|
+
* Hazard Ratio = Concentration / OEL
|
|
61
|
+
* Protection is adequate when Concentration <= MUC
|
|
62
|
+
*
|
|
63
|
+
* @param input - Respirator input parameters
|
|
64
|
+
* @returns Respirator results including MUC, APF, and protection assessment
|
|
65
|
+
*/
|
|
66
|
+
export function respiratorCalculate(input) {
|
|
67
|
+
const { concentration, oel, respiratorType } = input;
|
|
68
|
+
// Get APF for selected respirator type
|
|
69
|
+
const apf = APF_VALUES[respiratorType];
|
|
70
|
+
// Calculate MUC
|
|
71
|
+
const muc = calculateMUC(apf, oel);
|
|
72
|
+
// Calculate hazard ratio
|
|
73
|
+
const hazardRatio = calculateHazardRatio(concentration, oel);
|
|
74
|
+
// Calculate required APF
|
|
75
|
+
const requiredAPF = calculateRequiredAPF(hazardRatio);
|
|
76
|
+
// Check if protection is adequate
|
|
77
|
+
// Protection is adequate if concentration <= MUC (i.e., APF >= hazardRatio)
|
|
78
|
+
const protectionAdequate = concentration <= muc;
|
|
79
|
+
// Calculate safety margin
|
|
80
|
+
const safetyMargin = calculateSafetyMargin(apf, requiredAPF);
|
|
81
|
+
return {
|
|
82
|
+
muc,
|
|
83
|
+
apf,
|
|
84
|
+
hazardRatio,
|
|
85
|
+
requiredAPF,
|
|
86
|
+
protectionAdequate,
|
|
87
|
+
safetyMargin,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=respiratorCalculate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"respiratorCalculate.js","sourceRoot":"","sources":["../../src/safety/respiratorCalculate.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,GAAmC;IACjD,qBAAqB,EAAE,EAAE;IACzB,WAAW,EAAE,EAAE;IACf,gBAAgB,EAAE,EAAE;IACpB,mBAAmB,EAAE,EAAE;IACvB,cAAc,EAAE,EAAE;IAClB,wBAAwB,EAAE,IAAI;IAC9B,mBAAmB,EAAE,EAAE;IACvB,mBAAmB,EAAE,EAAE;IACvB,sBAAsB,EAAE,IAAI;IAC5B,SAAS,EAAE,KAAK;CACjB,CAAC;AAEF;;;;;;GAMG;AACH,SAAS,YAAY,CAAC,GAAW,EAAE,GAAW;IAC5C,OAAO,GAAG,GAAG,GAAG,CAAC;AACnB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,oBAAoB,CAAC,aAAqB,EAAE,GAAW;IAC9D,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC9B,OAAO,aAAa,GAAG,GAAG,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,SAAS,oBAAoB,CAAC,WAAmB;IAC/C,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,SAAS,qBAAqB,CAAC,GAAW,EAAE,WAAmB;IAC7D,IAAI,WAAW,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IACtC,OAAO,GAAG,GAAG,WAAW,CAAC;AAC3B,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAsB;IACxD,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;IAErD,uCAAuC;IACvC,MAAM,GAAG,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAEvC,gBAAgB;IAChB,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAEnC,yBAAyB;IACzB,MAAM,WAAW,GAAG,oBAAoB,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IAE7D,yBAAyB;IACzB,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAEtD,kCAAkC;IAClC,4EAA4E;IAC5E,MAAM,kBAAkB,GAAG,aAAa,IAAI,GAAG,CAAC;IAEhD,0BAA0B;IAC1B,MAAM,YAAY,GAAG,qBAAqB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAE7D,OAAO;QACL,GAAG;QACH,GAAG;QACH,WAAW;QACX,WAAW;QACX,kBAAkB;QAClB,YAAY;KACb,CAAC;AACJ,CAAC"}
|