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,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Carbon Footprint Calculator Types
|
|
3
|
+
*/
|
|
4
|
+
export interface CarbonFootprintInput {
|
|
5
|
+
electricityUsage: number;
|
|
6
|
+
emissionFactor: number;
|
|
7
|
+
}
|
|
8
|
+
export interface CarbonFootprintResult {
|
|
9
|
+
co2Kg: number;
|
|
10
|
+
co2Tonnes: number;
|
|
11
|
+
treesEquivalent: number;
|
|
12
|
+
carsEquivalent: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Compressed Air Cost Calculator Types
|
|
16
|
+
*/
|
|
17
|
+
export interface CompressedAirCostInput {
|
|
18
|
+
compressorPower: number;
|
|
19
|
+
runningHours: number;
|
|
20
|
+
electricityRate: number;
|
|
21
|
+
airOutput: number;
|
|
22
|
+
maintenanceCost: number;
|
|
23
|
+
}
|
|
24
|
+
export interface CompressedAirCostResult {
|
|
25
|
+
electricityCost: number;
|
|
26
|
+
totalCost: number;
|
|
27
|
+
costPerM3: number;
|
|
28
|
+
costPerCfm: number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Motor Efficiency Calculator Types
|
|
32
|
+
*/
|
|
33
|
+
export interface MotorEfficiencyInput {
|
|
34
|
+
motorPower: number;
|
|
35
|
+
runningHours: number;
|
|
36
|
+
currentEfficiency: number;
|
|
37
|
+
newEfficiency: number;
|
|
38
|
+
electricityRate: number;
|
|
39
|
+
loadFactor: number;
|
|
40
|
+
upgradeCost?: number;
|
|
41
|
+
}
|
|
42
|
+
export interface MotorEfficiencyResult {
|
|
43
|
+
currentAnnualCost: number;
|
|
44
|
+
newAnnualCost: number;
|
|
45
|
+
annualSavings: number;
|
|
46
|
+
energySavings: number;
|
|
47
|
+
paybackPeriod: number | null;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Power Cost Calculator Types
|
|
51
|
+
*/
|
|
52
|
+
export interface PowerCostInput {
|
|
53
|
+
energyConsumption: number;
|
|
54
|
+
energyRate: number;
|
|
55
|
+
demandPeak: number;
|
|
56
|
+
demandRate: number;
|
|
57
|
+
powerFactor: number;
|
|
58
|
+
pfPenaltyThreshold: number;
|
|
59
|
+
pfPenaltyRate: number;
|
|
60
|
+
fixedCharges: number;
|
|
61
|
+
}
|
|
62
|
+
export interface PowerCostResult {
|
|
63
|
+
energyCost: number;
|
|
64
|
+
demandCost: number;
|
|
65
|
+
pfPenalty: number;
|
|
66
|
+
fixedCharges: number;
|
|
67
|
+
totalCost: number;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Power Factor Correction Calculator Types
|
|
71
|
+
*/
|
|
72
|
+
export interface PfCorrectionInput {
|
|
73
|
+
kW: number;
|
|
74
|
+
currentPf: number;
|
|
75
|
+
targetPf: number;
|
|
76
|
+
electricityRate: number;
|
|
77
|
+
monthlyUsageHours: number;
|
|
78
|
+
pfPenaltyRate: number;
|
|
79
|
+
pfPenaltyThreshold: number;
|
|
80
|
+
capacitorCostPerKvar: number;
|
|
81
|
+
}
|
|
82
|
+
export interface PfCorrectionResult {
|
|
83
|
+
currentKva: number;
|
|
84
|
+
targetKva: number;
|
|
85
|
+
kvarRequired: number;
|
|
86
|
+
capacitorCost: number;
|
|
87
|
+
currentMonthlyPenalty: number;
|
|
88
|
+
newMonthlyPenalty: number;
|
|
89
|
+
monthlySavings: number;
|
|
90
|
+
annualSavings: number;
|
|
91
|
+
paybackMonths: number;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* VFD (Variable Frequency Drive) Savings Calculator Types
|
|
95
|
+
*/
|
|
96
|
+
export interface VfdSavingsInput {
|
|
97
|
+
motorKw: number;
|
|
98
|
+
fullSpeedRpm: number;
|
|
99
|
+
newSpeedRpm: number;
|
|
100
|
+
runningHoursPerYear: number;
|
|
101
|
+
electricityRate: number;
|
|
102
|
+
loadFactor: number;
|
|
103
|
+
vfdCost: number;
|
|
104
|
+
vfdEfficiency: number;
|
|
105
|
+
}
|
|
106
|
+
export interface VfdSavingsResult {
|
|
107
|
+
speedRatio: number;
|
|
108
|
+
powerRatio: number;
|
|
109
|
+
originalPowerKw: number;
|
|
110
|
+
newPowerKw: number;
|
|
111
|
+
powerReduction: number;
|
|
112
|
+
powerReductionPercent: number;
|
|
113
|
+
originalAnnualCost: number;
|
|
114
|
+
newAnnualCost: number;
|
|
115
|
+
annualSavings: number;
|
|
116
|
+
paybackYears: number;
|
|
117
|
+
co2ReductionKg: number;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/energy/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/energy/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { VfdSavingsInput, VfdSavingsResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Calculate VFD (Variable Frequency Drive) energy savings
|
|
4
|
+
*
|
|
5
|
+
* Affinity Laws for centrifugal loads (pumps, fans):
|
|
6
|
+
* - Flow is proportional to Speed
|
|
7
|
+
* - Pressure is proportional to Speed squared
|
|
8
|
+
* - Power is proportional to Speed cubed
|
|
9
|
+
*
|
|
10
|
+
* Formula: Savings = kW * hours * rate * (1 - (new_speed/full_speed)^3)
|
|
11
|
+
*
|
|
12
|
+
* @param input - VFD savings input parameters
|
|
13
|
+
* @returns VFD savings result with power reduction, costs, and CO2 savings
|
|
14
|
+
*/
|
|
15
|
+
export declare function vfdSavings(input: VfdSavingsInput): VfdSavingsResult;
|
|
16
|
+
//# sourceMappingURL=vfdSavings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vfdSavings.d.ts","sourceRoot":"","sources":["../../src/energy/vfdSavings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAKpE;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,CA4DnE"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// Average CO2 emission factor (kg CO2 per kWh)
|
|
2
|
+
const CO2_FACTOR = 0.5;
|
|
3
|
+
/**
|
|
4
|
+
* Calculate VFD (Variable Frequency Drive) energy savings
|
|
5
|
+
*
|
|
6
|
+
* Affinity Laws for centrifugal loads (pumps, fans):
|
|
7
|
+
* - Flow is proportional to Speed
|
|
8
|
+
* - Pressure is proportional to Speed squared
|
|
9
|
+
* - Power is proportional to Speed cubed
|
|
10
|
+
*
|
|
11
|
+
* Formula: Savings = kW * hours * rate * (1 - (new_speed/full_speed)^3)
|
|
12
|
+
*
|
|
13
|
+
* @param input - VFD savings input parameters
|
|
14
|
+
* @returns VFD savings result with power reduction, costs, and CO2 savings
|
|
15
|
+
*/
|
|
16
|
+
export function vfdSavings(input) {
|
|
17
|
+
const { motorKw, fullSpeedRpm, newSpeedRpm, runningHoursPerYear, electricityRate, loadFactor, vfdCost, vfdEfficiency, } = input;
|
|
18
|
+
// Calculate speed ratio
|
|
19
|
+
const speedRatio = newSpeedRpm / fullSpeedRpm;
|
|
20
|
+
// Apply affinity law: Power is proportional to Speed cubed
|
|
21
|
+
const powerRatio = Math.pow(speedRatio, 3);
|
|
22
|
+
// Calculate original power consumption (accounting for load factor)
|
|
23
|
+
const originalPowerKw = motorKw * loadFactor;
|
|
24
|
+
// Calculate new power consumption with VFD
|
|
25
|
+
// Account for VFD efficiency loss
|
|
26
|
+
const newPowerKw = originalPowerKw * powerRatio / vfdEfficiency;
|
|
27
|
+
// Power reduction
|
|
28
|
+
const powerReduction = originalPowerKw - newPowerKw;
|
|
29
|
+
const powerReductionPercent = (powerReduction / originalPowerKw) * 100;
|
|
30
|
+
// Calculate annual energy consumption (kWh)
|
|
31
|
+
const originalAnnualKwh = originalPowerKw * runningHoursPerYear;
|
|
32
|
+
const newAnnualKwh = newPowerKw * runningHoursPerYear;
|
|
33
|
+
// Calculate annual costs
|
|
34
|
+
const originalAnnualCost = originalAnnualKwh * electricityRate;
|
|
35
|
+
const newAnnualCost = newAnnualKwh * electricityRate;
|
|
36
|
+
// Annual savings
|
|
37
|
+
const annualSavings = originalAnnualCost - newAnnualCost;
|
|
38
|
+
// Simple payback period (return 0 if no savings)
|
|
39
|
+
const paybackYears = annualSavings > 0 ? vfdCost / annualSavings : 0;
|
|
40
|
+
// CO2 reduction
|
|
41
|
+
const annualKwhSavings = originalAnnualKwh - newAnnualKwh;
|
|
42
|
+
const co2ReductionKg = annualKwhSavings * CO2_FACTOR;
|
|
43
|
+
return {
|
|
44
|
+
speedRatio,
|
|
45
|
+
powerRatio,
|
|
46
|
+
originalPowerKw,
|
|
47
|
+
newPowerKw,
|
|
48
|
+
powerReduction,
|
|
49
|
+
powerReductionPercent,
|
|
50
|
+
originalAnnualCost,
|
|
51
|
+
newAnnualCost,
|
|
52
|
+
annualSavings,
|
|
53
|
+
paybackYears,
|
|
54
|
+
co2ReductionKg,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=vfdSavings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vfdSavings.js","sourceRoot":"","sources":["../../src/energy/vfdSavings.ts"],"names":[],"mappings":"AAEA,+CAA+C;AAC/C,MAAM,UAAU,GAAG,GAAG,CAAC;AAEvB;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,MAAM,EACJ,OAAO,EACP,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,eAAe,EACf,UAAU,EACV,OAAO,EACP,aAAa,GACd,GAAG,KAAK,CAAC;IAEV,wBAAwB;IACxB,MAAM,UAAU,GAAG,WAAW,GAAG,YAAY,CAAC;IAE9C,2DAA2D;IAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAE3C,oEAAoE;IACpE,MAAM,eAAe,GAAG,OAAO,GAAG,UAAU,CAAC;IAE7C,2CAA2C;IAC3C,kCAAkC;IAClC,MAAM,UAAU,GAAG,eAAe,GAAG,UAAU,GAAG,aAAa,CAAC;IAEhE,kBAAkB;IAClB,MAAM,cAAc,GAAG,eAAe,GAAG,UAAU,CAAC;IACpD,MAAM,qBAAqB,GAAG,CAAC,cAAc,GAAG,eAAe,CAAC,GAAG,GAAG,CAAC;IAEvE,4CAA4C;IAC5C,MAAM,iBAAiB,GAAG,eAAe,GAAG,mBAAmB,CAAC;IAChE,MAAM,YAAY,GAAG,UAAU,GAAG,mBAAmB,CAAC;IAEtD,yBAAyB;IACzB,MAAM,kBAAkB,GAAG,iBAAiB,GAAG,eAAe,CAAC;IAC/D,MAAM,aAAa,GAAG,YAAY,GAAG,eAAe,CAAC;IAErD,iBAAiB;IACjB,MAAM,aAAa,GAAG,kBAAkB,GAAG,aAAa,CAAC;IAEzD,iDAAiD;IACjD,MAAM,YAAY,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAErE,gBAAgB;IAChB,MAAM,gBAAgB,GAAG,iBAAiB,GAAG,YAAY,CAAC;IAC1D,MAAM,cAAc,GAAG,gBAAgB,GAAG,UAAU,CAAC;IAErD,OAAO;QACL,UAAU;QACV,UAAU;QACV,eAAe;QACf,UAAU;QACV,cAAc;QACd,qBAAqB;QACrB,kBAAkB;QAClB,aAAa;QACb,aAAa;QACb,YAAY;QACZ,cAAc;KACf,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { CalorieInput, CalorieResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Calculate daily calorie needs using Mifflin-St Jeor equation
|
|
4
|
+
*
|
|
5
|
+
* BMR (male) = 10 × weight(kg) + 6.25 × height(cm) - 5 × age + 5
|
|
6
|
+
* BMR (female) = 10 × weight(kg) + 6.25 × height(cm) - 5 × age - 161
|
|
7
|
+
* TDEE = BMR × activity multiplier
|
|
8
|
+
*
|
|
9
|
+
* @param input - Calorie input parameters
|
|
10
|
+
* @returns Calorie result with BMR, TDEE, and calorie goals
|
|
11
|
+
*/
|
|
12
|
+
export declare function calorie(input: CalorieInput): CalorieResult;
|
|
13
|
+
//# sourceMappingURL=calorie.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calorie.d.ts","sourceRoot":"","sources":["../../src/food/calorie.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAiB,MAAM,YAAY,CAAC;AAU7E;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,CAyB1D"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { roundTo } from '../utils.js';
|
|
2
|
+
const ACTIVITY_MULTIPLIERS = {
|
|
3
|
+
sedentary: 1.2,
|
|
4
|
+
light: 1.375,
|
|
5
|
+
moderate: 1.55,
|
|
6
|
+
active: 1.725,
|
|
7
|
+
veryActive: 1.9,
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Calculate daily calorie needs using Mifflin-St Jeor equation
|
|
11
|
+
*
|
|
12
|
+
* BMR (male) = 10 × weight(kg) + 6.25 × height(cm) - 5 × age + 5
|
|
13
|
+
* BMR (female) = 10 × weight(kg) + 6.25 × height(cm) - 5 × age - 161
|
|
14
|
+
* TDEE = BMR × activity multiplier
|
|
15
|
+
*
|
|
16
|
+
* @param input - Calorie input parameters
|
|
17
|
+
* @returns Calorie result with BMR, TDEE, and calorie goals
|
|
18
|
+
*/
|
|
19
|
+
export function calorie(input) {
|
|
20
|
+
const { gender, age, weightKg, heightCm, activityLevel } = input;
|
|
21
|
+
if (weightKg <= 0 || heightCm <= 0 || age <= 0) {
|
|
22
|
+
return { bmr: 0, tdee: 0, weightLoss: 0, weightMaintain: 0, weightGain: 0 };
|
|
23
|
+
}
|
|
24
|
+
// Mifflin-St Jeor equation
|
|
25
|
+
let bmr;
|
|
26
|
+
if (gender === 'male') {
|
|
27
|
+
bmr = 10 * weightKg + 6.25 * heightCm - 5 * age + 5;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
bmr = 10 * weightKg + 6.25 * heightCm - 5 * age - 161;
|
|
31
|
+
}
|
|
32
|
+
const multiplier = ACTIVITY_MULTIPLIERS[activityLevel];
|
|
33
|
+
const tdee = bmr * multiplier;
|
|
34
|
+
return {
|
|
35
|
+
bmr: roundTo(bmr, 0),
|
|
36
|
+
tdee: roundTo(tdee, 0),
|
|
37
|
+
weightLoss: roundTo(tdee - 500, 0),
|
|
38
|
+
weightMaintain: roundTo(tdee, 0),
|
|
39
|
+
weightGain: roundTo(tdee + 500, 0),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=calorie.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calorie.js","sourceRoot":"","sources":["../../src/food/calorie.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC,MAAM,oBAAoB,GAAkC;IAC1D,SAAS,EAAE,GAAG;IACd,KAAK,EAAE,KAAK;IACZ,QAAQ,EAAE,IAAI;IACd,MAAM,EAAE,KAAK;IACb,UAAU,EAAE,GAAG;CAChB,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,UAAU,OAAO,CAAC,KAAmB;IACzC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;IAEjE,IAAI,QAAQ,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;QAC/C,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;IAC9E,CAAC;IAED,2BAA2B;IAC3B,IAAI,GAAW,CAAC;IAChB,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,GAAG,GAAG,EAAE,GAAG,QAAQ,GAAG,IAAI,GAAG,QAAQ,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,GAAG,GAAG,EAAE,GAAG,QAAQ,GAAG,IAAI,GAAG,QAAQ,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;IACxD,CAAC;IAED,MAAM,UAAU,GAAG,oBAAoB,CAAC,aAAa,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,GAAG,GAAG,UAAU,CAAC;IAE9B,OAAO;QACL,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACpB,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACtB,UAAU,EAAE,OAAO,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC;QAClC,cAAc,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAChC,UAAU,EAAE,OAAO,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC;KACnC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ExpiryInput, ExpiryResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Calculate product expiry date and remaining shelf life
|
|
4
|
+
*
|
|
5
|
+
* Supports two modes:
|
|
6
|
+
* - calculateExpiry: Given production date + shelf life days, calculate expiry date
|
|
7
|
+
* - calculateRemaining: Given production date + expiry date, calculate remaining days
|
|
8
|
+
*
|
|
9
|
+
* @param input - Expiry input parameters
|
|
10
|
+
* @returns Expiry result with dates and remaining time
|
|
11
|
+
*/
|
|
12
|
+
export declare function expiry(input: ExpiryInput): ExpiryResult;
|
|
13
|
+
//# sourceMappingURL=expiry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expiry.d.ts","sourceRoot":"","sources":["../../src/food/expiry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAe5D;;;;;;;;;GASG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,YAAY,CAoCvD"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { roundTo } from '../utils.js';
|
|
2
|
+
function daysBetween(a, b) {
|
|
3
|
+
const msPerDay = 86400000;
|
|
4
|
+
const dateA = new Date(a + 'T00:00:00Z');
|
|
5
|
+
const dateB = new Date(b + 'T00:00:00Z');
|
|
6
|
+
return Math.round((dateB.getTime() - dateA.getTime()) / msPerDay);
|
|
7
|
+
}
|
|
8
|
+
function addDays(date, days) {
|
|
9
|
+
const d = new Date(date + 'T00:00:00Z');
|
|
10
|
+
d.setUTCDate(d.getUTCDate() + days);
|
|
11
|
+
return d.toISOString().split('T')[0];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Calculate product expiry date and remaining shelf life
|
|
15
|
+
*
|
|
16
|
+
* Supports two modes:
|
|
17
|
+
* - calculateExpiry: Given production date + shelf life days, calculate expiry date
|
|
18
|
+
* - calculateRemaining: Given production date + expiry date, calculate remaining days
|
|
19
|
+
*
|
|
20
|
+
* @param input - Expiry input parameters
|
|
21
|
+
* @returns Expiry result with dates and remaining time
|
|
22
|
+
*/
|
|
23
|
+
export function expiry(input) {
|
|
24
|
+
const { mode, productionDate, shelfLifeDays, expiryDate, today } = input;
|
|
25
|
+
if (mode === 'calculateExpiry') {
|
|
26
|
+
// Given production date + shelf life → calculate expiry
|
|
27
|
+
const calculatedExpiry = addDays(productionDate, shelfLifeDays);
|
|
28
|
+
const remaining = daysBetween(today, calculatedExpiry);
|
|
29
|
+
const isExpired = remaining < 0;
|
|
30
|
+
const percentUsed = shelfLifeDays > 0
|
|
31
|
+
? roundTo(((shelfLifeDays - remaining) / shelfLifeDays) * 100, 1)
|
|
32
|
+
: 100;
|
|
33
|
+
return {
|
|
34
|
+
expiryDate: calculatedExpiry,
|
|
35
|
+
remainingDays: remaining,
|
|
36
|
+
shelfLifeDays,
|
|
37
|
+
isExpired,
|
|
38
|
+
percentUsed: Math.min(100, Math.max(0, percentUsed)),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
// Given production date + expiry date → calculate remaining
|
|
43
|
+
const totalShelfLife = daysBetween(productionDate, expiryDate);
|
|
44
|
+
const remaining = daysBetween(today, expiryDate);
|
|
45
|
+
const isExpired = remaining < 0;
|
|
46
|
+
const percentUsed = totalShelfLife > 0
|
|
47
|
+
? roundTo(((totalShelfLife - remaining) / totalShelfLife) * 100, 1)
|
|
48
|
+
: 100;
|
|
49
|
+
return {
|
|
50
|
+
expiryDate,
|
|
51
|
+
remainingDays: remaining,
|
|
52
|
+
shelfLifeDays: totalShelfLife,
|
|
53
|
+
isExpired,
|
|
54
|
+
percentUsed: Math.min(100, Math.max(0, percentUsed)),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=expiry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expiry.js","sourceRoot":"","sources":["../../src/food/expiry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC,SAAS,WAAW,CAAC,CAAS,EAAE,CAAS;IACvC,MAAM,QAAQ,GAAG,QAAQ,CAAC;IAC1B,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC;IACzC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,OAAO,CAAC,IAAY,EAAE,IAAY;IACzC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,CAAC;IACxC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC;IACpC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,MAAM,CAAC,KAAkB;IACvC,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,aAAa,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAEzE,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;QAC/B,wDAAwD;QACxD,MAAM,gBAAgB,GAAG,OAAO,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;QACvD,MAAM,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC;QAChC,MAAM,WAAW,GAAG,aAAa,GAAG,CAAC;YACnC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,GAAG,SAAS,CAAC,GAAG,aAAa,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;YACjE,CAAC,CAAC,GAAG,CAAC;QAER,OAAO;YACL,UAAU,EAAE,gBAAgB;YAC5B,aAAa,EAAE,SAAS;YACxB,aAAa;YACb,SAAS;YACT,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;SACrD,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,4DAA4D;QAC5D,MAAM,cAAc,GAAG,WAAW,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;QAC/D,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC;QAChC,MAAM,WAAW,GAAG,cAAc,GAAG,CAAC;YACpC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,GAAG,SAAS,CAAC,GAAG,cAAc,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;YACnE,CAAC,CAAC,GAAG,CAAC;QAER,OAAO;YACL,UAAU;YACV,aAAa,EAAE,SAAS;YACxB,aAAa,EAAE,cAAc;YAC7B,SAAS;YACT,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;SACrD,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { HaccpCategory, HaccpInput, HaccpResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Get all HACCP categories in process order
|
|
4
|
+
*
|
|
5
|
+
* @returns Array of HACCP category identifiers
|
|
6
|
+
*/
|
|
7
|
+
export declare function getCategories(): HaccpCategory[];
|
|
8
|
+
/**
|
|
9
|
+
* Get HACCP checklist for a specific category
|
|
10
|
+
*
|
|
11
|
+
* Returns checklist items with checkpoints, standards, corrective actions,
|
|
12
|
+
* and critical control point indicators.
|
|
13
|
+
*
|
|
14
|
+
* @param input - HACCP input with category selection
|
|
15
|
+
* @returns HACCP result with checklist items, or null for invalid category
|
|
16
|
+
*/
|
|
17
|
+
export declare function haccp(input: HaccpInput): HaccpResult | null;
|
|
18
|
+
//# sourceMappingURL=haccp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"haccp.d.ts","sourceRoot":"","sources":["../../src/food/haccp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAkB,MAAM,YAAY,CAAC;AA+CzF;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,aAAa,EAAE,CAE/C;AAED;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,GAAG,IAAI,CAQ3D"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
const CHECKLIST_DATA = {
|
|
2
|
+
receiving: [
|
|
3
|
+
{ id: 'RCV-01', checkpoint: 'Cold food temperature', standard: 'Below 5°C upon delivery', corrective: 'Reject shipment if above 5°C', critical: true },
|
|
4
|
+
{ id: 'RCV-02', checkpoint: 'Frozen food temperature', standard: 'Below -18°C upon delivery', corrective: 'Reject if above -18°C or signs of thawing', critical: true },
|
|
5
|
+
{ id: 'RCV-03', checkpoint: 'Packaging integrity', standard: 'No tears, dents, swelling, or leaks', corrective: 'Reject damaged packages', critical: false },
|
|
6
|
+
{ id: 'RCV-04', checkpoint: 'Supplier certification', standard: 'Valid HACCP/GMP certificate on file', corrective: 'Request updated certificate; hold product', critical: false },
|
|
7
|
+
{ id: 'RCV-05', checkpoint: 'Expiry date check', standard: 'Sufficient remaining shelf life per policy', corrective: 'Reject short-dated or expired products', critical: true },
|
|
8
|
+
],
|
|
9
|
+
storage: [
|
|
10
|
+
{ id: 'STR-01', checkpoint: 'FIFO rotation', standard: 'First In, First Out; oldest stock used first', corrective: 'Re-organize stock; discard expired items', critical: false },
|
|
11
|
+
{ id: 'STR-02', checkpoint: 'Temperature monitoring', standard: 'Refrigerator 0–5°C, Freezer below -18°C', corrective: 'Adjust equipment; relocate food if unsafe', critical: true },
|
|
12
|
+
{ id: 'STR-03', checkpoint: 'Cross-contamination separation', standard: 'Raw and cooked stored separately; raw below cooked', corrective: 'Rearrange storage; discard contaminated items', critical: true },
|
|
13
|
+
{ id: 'STR-04', checkpoint: 'Pest control', standard: 'No signs of pest activity; traps inspected weekly', corrective: 'Contact pest control; deep clean area', critical: false },
|
|
14
|
+
{ id: 'STR-05', checkpoint: 'Cleaning schedule', standard: 'Storage areas cleaned per documented schedule', corrective: 'Perform immediate cleaning; update log', critical: false },
|
|
15
|
+
],
|
|
16
|
+
preparation: [
|
|
17
|
+
{ id: 'PRP-01', checkpoint: 'Hand washing', standard: 'Wash hands 20 sec with soap before handling food', corrective: 'Re-wash hands; retrain staff', critical: true },
|
|
18
|
+
{ id: 'PRP-02', checkpoint: 'Surface sanitization', standard: 'Sanitize surfaces with approved solution before use', corrective: 'Stop preparation; sanitize and re-clean', critical: true },
|
|
19
|
+
{ id: 'PRP-03', checkpoint: 'Thawing procedure', standard: 'Thaw in refrigerator (below 5°C), not at room temp', corrective: 'Discard improperly thawed food', critical: true },
|
|
20
|
+
{ id: 'PRP-04', checkpoint: 'Cross-contamination prevention', standard: 'Separate cutting boards/utensils for raw and cooked', corrective: 'Replace contaminated utensils; re-sanitize', critical: true },
|
|
21
|
+
],
|
|
22
|
+
cooking: [
|
|
23
|
+
{ id: 'CK-01', checkpoint: 'Poultry internal temperature', standard: 'Minimum 74°C internal temperature', corrective: 'Continue cooking until 74°C reached', critical: true },
|
|
24
|
+
{ id: 'CK-02', checkpoint: 'Ground meat internal temperature', standard: 'Minimum 71°C internal temperature', corrective: 'Continue cooking until 71°C reached', critical: true },
|
|
25
|
+
{ id: 'CK-03', checkpoint: 'Fish internal temperature', standard: 'Minimum 63°C internal temperature', corrective: 'Continue cooking until 63°C reached', critical: true },
|
|
26
|
+
{ id: 'CK-04', checkpoint: 'Reheating temperature', standard: 'Minimum 74°C within 2 hours', corrective: 'Discard if 74°C not reached within 2 hours', critical: true },
|
|
27
|
+
{ id: 'CK-05', checkpoint: 'Time monitoring', standard: 'Record cooking start/end times per batch', corrective: 'Verify temperature; extend cooking if needed', critical: false },
|
|
28
|
+
],
|
|
29
|
+
cooling: [
|
|
30
|
+
{ id: 'CL-01', checkpoint: '2-stage cooling: Stage 1', standard: '60°C to 21°C within 2 hours', corrective: 'Discard if not cooled to 21°C in 2 hours', critical: true },
|
|
31
|
+
{ id: 'CL-02', checkpoint: '2-stage cooling: Stage 2', standard: '21°C to 5°C within 4 hours', corrective: 'Discard if not cooled to 5°C in 4 hours', critical: true },
|
|
32
|
+
{ id: 'CL-03', checkpoint: 'Container size', standard: 'Use shallow containers (depth ≤7.5 cm) for rapid cooling', corrective: 'Transfer to smaller containers immediately', critical: false },
|
|
33
|
+
{ id: 'CL-04', checkpoint: 'Labeling', standard: 'Label with product name, date, and use-by date', corrective: 'Label immediately; discard unlabeled items after 24h', critical: false },
|
|
34
|
+
],
|
|
35
|
+
serving: [
|
|
36
|
+
{ id: 'SRV-01', checkpoint: 'Hot holding temperature', standard: 'Maintain above 60°C', corrective: 'Reheat to 74°C or discard', critical: true },
|
|
37
|
+
{ id: 'SRV-02', checkpoint: 'Cold holding temperature', standard: 'Maintain below 5°C', corrective: 'Discard if above 5°C for more than 30 minutes', critical: true },
|
|
38
|
+
{ id: 'SRV-03', checkpoint: '4-hour rule', standard: 'Discard food held in danger zone (5–60°C) over 4 hours', corrective: 'Discard food immediately', critical: true },
|
|
39
|
+
{ id: 'SRV-04', checkpoint: 'Utensil separation', standard: 'Separate serving utensils for each dish', corrective: 'Replace cross-used utensils; sanitize', critical: false },
|
|
40
|
+
{ id: 'SRV-05', checkpoint: 'Display temperature monitoring', standard: 'Check and log display temps every 30 minutes', corrective: 'Adjust display unit; remove food if unsafe', critical: true },
|
|
41
|
+
],
|
|
42
|
+
};
|
|
43
|
+
const ALL_CATEGORIES = ['receiving', 'storage', 'preparation', 'cooking', 'cooling', 'serving'];
|
|
44
|
+
/**
|
|
45
|
+
* Get all HACCP categories in process order
|
|
46
|
+
*
|
|
47
|
+
* @returns Array of HACCP category identifiers
|
|
48
|
+
*/
|
|
49
|
+
export function getCategories() {
|
|
50
|
+
return ALL_CATEGORIES;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get HACCP checklist for a specific category
|
|
54
|
+
*
|
|
55
|
+
* Returns checklist items with checkpoints, standards, corrective actions,
|
|
56
|
+
* and critical control point indicators.
|
|
57
|
+
*
|
|
58
|
+
* @param input - HACCP input with category selection
|
|
59
|
+
* @returns HACCP result with checklist items, or null for invalid category
|
|
60
|
+
*/
|
|
61
|
+
export function haccp(input) {
|
|
62
|
+
const items = CHECKLIST_DATA[input.category];
|
|
63
|
+
if (!items)
|
|
64
|
+
return null;
|
|
65
|
+
return {
|
|
66
|
+
category: input.category,
|
|
67
|
+
items,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=haccp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"haccp.js","sourceRoot":"","sources":["../../src/food/haccp.ts"],"names":[],"mappings":"AAEA,MAAM,cAAc,GAA4C;IAC9D,SAAS,EAAE;QACT,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,uBAAuB,EAAE,QAAQ,EAAE,yBAAyB,EAAE,UAAU,EAAE,8BAA8B,EAAE,QAAQ,EAAE,IAAI,EAAE;QACtJ,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,yBAAyB,EAAE,QAAQ,EAAE,2BAA2B,EAAE,UAAU,EAAE,2CAA2C,EAAE,QAAQ,EAAE,IAAI,EAAE;QACvK,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,qBAAqB,EAAE,QAAQ,EAAE,qCAAqC,EAAE,UAAU,EAAE,yBAAyB,EAAE,QAAQ,EAAE,KAAK,EAAE;QAC5J,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,wBAAwB,EAAE,QAAQ,EAAE,qCAAqC,EAAE,UAAU,EAAE,2CAA2C,EAAE,QAAQ,EAAE,KAAK,EAAE;QACjL,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,mBAAmB,EAAE,QAAQ,EAAE,4CAA4C,EAAE,UAAU,EAAE,wCAAwC,EAAE,QAAQ,EAAE,IAAI,EAAE;KAChL;IACD,OAAO,EAAE;QACP,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,8CAA8C,EAAE,UAAU,EAAE,0CAA0C,EAAE,QAAQ,EAAE,KAAK,EAAE;QAChL,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,wBAAwB,EAAE,QAAQ,EAAE,yCAAyC,EAAE,UAAU,EAAE,2CAA2C,EAAE,QAAQ,EAAE,IAAI,EAAE;QACpL,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,gCAAgC,EAAE,QAAQ,EAAE,oDAAoD,EAAE,UAAU,EAAE,+CAA+C,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC3M,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,mDAAmD,EAAE,UAAU,EAAE,uCAAuC,EAAE,QAAQ,EAAE,KAAK,EAAE;QACjL,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,mBAAmB,EAAE,QAAQ,EAAE,+CAA+C,EAAE,UAAU,EAAE,wCAAwC,EAAE,QAAQ,EAAE,KAAK,EAAE;KACpL;IACD,WAAW,EAAE;QACX,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,kDAAkD,EAAE,UAAU,EAAE,8BAA8B,EAAE,QAAQ,EAAE,IAAI,EAAE;QACtK,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,sBAAsB,EAAE,QAAQ,EAAE,qDAAqD,EAAE,UAAU,EAAE,yCAAyC,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC5L,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,mBAAmB,EAAE,QAAQ,EAAE,oDAAoD,EAAE,UAAU,EAAE,gCAAgC,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC/K,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,gCAAgC,EAAE,QAAQ,EAAE,qDAAqD,EAAE,UAAU,EAAE,4CAA4C,EAAE,QAAQ,EAAE,IAAI,EAAE;KAC1M;IACD,OAAO,EAAE;QACP,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,8BAA8B,EAAE,QAAQ,EAAE,mCAAmC,EAAE,UAAU,EAAE,qCAAqC,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC7K,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,kCAAkC,EAAE,QAAQ,EAAE,mCAAmC,EAAE,UAAU,EAAE,qCAAqC,EAAE,QAAQ,EAAE,IAAI,EAAE;QACjL,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,2BAA2B,EAAE,QAAQ,EAAE,mCAAmC,EAAE,UAAU,EAAE,qCAAqC,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC1K,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,QAAQ,EAAE,6BAA6B,EAAE,UAAU,EAAE,4CAA4C,EAAE,QAAQ,EAAE,IAAI,EAAE;QACvK,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,QAAQ,EAAE,0CAA0C,EAAE,UAAU,EAAE,8CAA8C,EAAE,QAAQ,EAAE,KAAK,EAAE;KAClL;IACD,OAAO,EAAE;QACP,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,0BAA0B,EAAE,QAAQ,EAAE,6BAA6B,EAAE,UAAU,EAAE,0CAA0C,EAAE,QAAQ,EAAE,IAAI,EAAE;QACxK,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,0BAA0B,EAAE,QAAQ,EAAE,4BAA4B,EAAE,UAAU,EAAE,yCAAyC,EAAE,QAAQ,EAAE,IAAI,EAAE;QACtK,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,0DAA0D,EAAE,UAAU,EAAE,4CAA4C,EAAE,QAAQ,EAAE,KAAK,EAAE;QAC9L,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,gDAAgD,EAAE,UAAU,EAAE,sDAAsD,EAAE,QAAQ,EAAE,KAAK,EAAE;KACzL;IACD,OAAO,EAAE;QACP,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,yBAAyB,EAAE,QAAQ,EAAE,qBAAqB,EAAE,UAAU,EAAE,2BAA2B,EAAE,QAAQ,EAAE,IAAI,EAAE;QACjJ,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,0BAA0B,EAAE,QAAQ,EAAE,oBAAoB,EAAE,UAAU,EAAE,+CAA+C,EAAE,QAAQ,EAAE,IAAI,EAAE;QACrK,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,wDAAwD,EAAE,UAAU,EAAE,0BAA0B,EAAE,QAAQ,EAAE,IAAI,EAAE;QACvK,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,oBAAoB,EAAE,QAAQ,EAAE,yCAAyC,EAAE,UAAU,EAAE,uCAAuC,EAAE,QAAQ,EAAE,KAAK,EAAE;QAC7K,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,gCAAgC,EAAE,QAAQ,EAAE,8CAA8C,EAAE,UAAU,EAAE,4CAA4C,EAAE,QAAQ,EAAE,IAAI,EAAE;KACnM;CACF,CAAC;AAEF,MAAM,cAAc,GAAoB,CAAC,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAEjH;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,KAAK,CAAC,KAAiB;IACrC,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,OAAO;QACL,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,KAAK;KACN,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { calorie } from './calorie.js';
|
|
2
|
+
export { expiry } from './expiry.js';
|
|
3
|
+
export { nutrition } from './nutrition.js';
|
|
4
|
+
export { haccp, getCategories as getHaccpCategories } from './haccp.js';
|
|
5
|
+
export type { Gender, ActivityLevel, CalorieInput, CalorieResult, ExpiryMode, ExpiryInput, ExpiryResult, NutrientIngredient, NutritionInput, NutritionFacts, DailyValuePercents, NutritionResult, HaccpCategory, HaccpInput, HaccpCheckItem, HaccpResult, } from './types.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/food/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,aAAa,IAAI,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGxE,YAAY,EAEV,MAAM,EACN,aAAa,EACb,YAAY,EACZ,aAAa,EAEb,UAAU,EACV,WAAW,EACX,YAAY,EAEZ,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,eAAe,EAEf,aAAa,EACb,UAAU,EACV,cAAc,EACd,WAAW,GACZ,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/food/index.ts"],"names":[],"mappings":"AAAA,uBAAuB;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,aAAa,IAAI,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { NutritionInput, NutritionResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Calculate nutrition facts per serving from ingredients
|
|
4
|
+
*
|
|
5
|
+
* Aggregates nutrition data from ingredients (per 100g values) and
|
|
6
|
+
* calculates per-serving amounts and daily value percentages.
|
|
7
|
+
*
|
|
8
|
+
* @param input - Nutrition input with serving size and ingredients
|
|
9
|
+
* @returns Nutrition result with per-serving facts and daily values
|
|
10
|
+
*/
|
|
11
|
+
export declare function nutrition(input: NutritionInput): NutritionResult;
|
|
12
|
+
//# sourceMappingURL=nutrition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nutrition.d.ts","sourceRoot":"","sources":["../../src/food/nutrition.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAsC,MAAM,YAAY,CAAC;AAatG;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,eAAe,CA6DhE"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { roundTo } from '../utils.js';
|
|
2
|
+
// FDA Daily Values (2020)
|
|
3
|
+
const DAILY_VALUES = {
|
|
4
|
+
totalFat: 78, // g
|
|
5
|
+
saturatedFat: 20, // g
|
|
6
|
+
cholesterol: 300, // mg
|
|
7
|
+
sodium: 2300, // mg
|
|
8
|
+
totalCarbs: 275, // g
|
|
9
|
+
dietaryFiber: 28, // g
|
|
10
|
+
protein: 50, // g
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Calculate nutrition facts per serving from ingredients
|
|
14
|
+
*
|
|
15
|
+
* Aggregates nutrition data from ingredients (per 100g values) and
|
|
16
|
+
* calculates per-serving amounts and daily value percentages.
|
|
17
|
+
*
|
|
18
|
+
* @param input - Nutrition input with serving size and ingredients
|
|
19
|
+
* @returns Nutrition result with per-serving facts and daily values
|
|
20
|
+
*/
|
|
21
|
+
export function nutrition(input) {
|
|
22
|
+
const { servingSize, ingredients } = input;
|
|
23
|
+
// Sum all ingredients (nutrients per 100g × amountG / 100)
|
|
24
|
+
const totals = {
|
|
25
|
+
calories: 0, totalFat: 0, saturatedFat: 0, transFat: 0,
|
|
26
|
+
cholesterol: 0, sodium: 0, totalCarbs: 0, dietaryFiber: 0,
|
|
27
|
+
sugars: 0, protein: 0,
|
|
28
|
+
};
|
|
29
|
+
let totalRecipeWeightG = 0;
|
|
30
|
+
for (const ing of ingredients) {
|
|
31
|
+
const factor = ing.amountG / 100;
|
|
32
|
+
totalRecipeWeightG += ing.amountG;
|
|
33
|
+
totals.calories += ing.calories * factor;
|
|
34
|
+
totals.totalFat += ing.totalFat * factor;
|
|
35
|
+
totals.saturatedFat += ing.saturatedFat * factor;
|
|
36
|
+
totals.transFat += ing.transFat * factor;
|
|
37
|
+
totals.cholesterol += ing.cholesterol * factor;
|
|
38
|
+
totals.sodium += ing.sodium * factor;
|
|
39
|
+
totals.totalCarbs += ing.totalCarbs * factor;
|
|
40
|
+
totals.dietaryFiber += ing.dietaryFiber * factor;
|
|
41
|
+
totals.sugars += ing.sugars * factor;
|
|
42
|
+
totals.protein += ing.protein * factor;
|
|
43
|
+
}
|
|
44
|
+
// Per serving = recipe total × (servingSize / totalWeight)
|
|
45
|
+
const servingFactor = totalRecipeWeightG > 0 ? servingSize / totalRecipeWeightG : 0;
|
|
46
|
+
const perServing = {
|
|
47
|
+
calories: roundTo(totals.calories * servingFactor, 0),
|
|
48
|
+
totalFat: roundTo(totals.totalFat * servingFactor, 1),
|
|
49
|
+
saturatedFat: roundTo(totals.saturatedFat * servingFactor, 1),
|
|
50
|
+
transFat: roundTo(totals.transFat * servingFactor, 1),
|
|
51
|
+
cholesterol: roundTo(totals.cholesterol * servingFactor, 0),
|
|
52
|
+
sodium: roundTo(totals.sodium * servingFactor, 0),
|
|
53
|
+
totalCarbs: roundTo(totals.totalCarbs * servingFactor, 1),
|
|
54
|
+
dietaryFiber: roundTo(totals.dietaryFiber * servingFactor, 1),
|
|
55
|
+
sugars: roundTo(totals.sugars * servingFactor, 1),
|
|
56
|
+
protein: roundTo(totals.protein * servingFactor, 1),
|
|
57
|
+
};
|
|
58
|
+
// Daily value percentages
|
|
59
|
+
const dvPercent = (value, dv) => dv > 0 ? roundTo((value / dv) * 100, 1) : 0;
|
|
60
|
+
const dailyValues = {
|
|
61
|
+
totalFat: dvPercent(perServing.totalFat, DAILY_VALUES.totalFat),
|
|
62
|
+
saturatedFat: dvPercent(perServing.saturatedFat, DAILY_VALUES.saturatedFat),
|
|
63
|
+
cholesterol: dvPercent(perServing.cholesterol, DAILY_VALUES.cholesterol),
|
|
64
|
+
sodium: dvPercent(perServing.sodium, DAILY_VALUES.sodium),
|
|
65
|
+
totalCarbs: dvPercent(perServing.totalCarbs, DAILY_VALUES.totalCarbs),
|
|
66
|
+
dietaryFiber: dvPercent(perServing.dietaryFiber, DAILY_VALUES.dietaryFiber),
|
|
67
|
+
protein: dvPercent(perServing.protein, DAILY_VALUES.protein),
|
|
68
|
+
};
|
|
69
|
+
return {
|
|
70
|
+
totalRecipeWeightG: roundTo(totalRecipeWeightG, 0),
|
|
71
|
+
perServing,
|
|
72
|
+
dailyValues,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=nutrition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nutrition.js","sourceRoot":"","sources":["../../src/food/nutrition.ts"],"names":[],"mappings":"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"}
|