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.
Files changed (508) hide show
  1. package/CHANGELOG.md +144 -0
  2. package/LICENSE +21 -0
  3. package/README.md +403 -0
  4. package/dist/automotive/batteryRuntime.d.ts +14 -0
  5. package/dist/automotive/batteryRuntime.d.ts.map +1 -0
  6. package/dist/automotive/batteryRuntime.js +38 -0
  7. package/dist/automotive/batteryRuntime.js.map +1 -0
  8. package/dist/automotive/evCharging.d.ts +14 -0
  9. package/dist/automotive/evCharging.d.ts.map +1 -0
  10. package/dist/automotive/evCharging.js +48 -0
  11. package/dist/automotive/evCharging.js.map +1 -0
  12. package/dist/automotive/fuelEconomy.d.ts +15 -0
  13. package/dist/automotive/fuelEconomy.d.ts.map +1 -0
  14. package/dist/automotive/fuelEconomy.js +61 -0
  15. package/dist/automotive/fuelEconomy.js.map +1 -0
  16. package/dist/automotive/gearRatio.d.ts +15 -0
  17. package/dist/automotive/gearRatio.d.ts.map +1 -0
  18. package/dist/automotive/gearRatio.js +39 -0
  19. package/dist/automotive/gearRatio.js.map +1 -0
  20. package/dist/automotive/index.d.ts +9 -0
  21. package/dist/automotive/index.d.ts.map +1 -0
  22. package/dist/automotive/index.js +9 -0
  23. package/dist/automotive/index.js.map +1 -0
  24. package/dist/automotive/power.d.ts +14 -0
  25. package/dist/automotive/power.d.ts.map +1 -0
  26. package/dist/automotive/power.js +52 -0
  27. package/dist/automotive/power.js.map +1 -0
  28. package/dist/automotive/tireCompare.d.ts +9 -0
  29. package/dist/automotive/tireCompare.d.ts.map +1 -0
  30. package/dist/automotive/tireCompare.js +54 -0
  31. package/dist/automotive/tireCompare.js.map +1 -0
  32. package/dist/automotive/torque.d.ts +14 -0
  33. package/dist/automotive/torque.d.ts.map +1 -0
  34. package/dist/automotive/torque.js +52 -0
  35. package/dist/automotive/torque.js.map +1 -0
  36. package/dist/automotive/types.d.ts +114 -0
  37. package/dist/automotive/types.d.ts.map +1 -0
  38. package/dist/automotive/types.js +2 -0
  39. package/dist/automotive/types.js.map +1 -0
  40. package/dist/chemical/batch.d.ts +12 -0
  41. package/dist/chemical/batch.d.ts.map +1 -0
  42. package/dist/chemical/batch.js +36 -0
  43. package/dist/chemical/batch.js.map +1 -0
  44. package/dist/chemical/concentration.d.ts +15 -0
  45. package/dist/chemical/concentration.d.ts.map +1 -0
  46. package/dist/chemical/concentration.js +45 -0
  47. package/dist/chemical/concentration.js.map +1 -0
  48. package/dist/chemical/dilution.d.ts +12 -0
  49. package/dist/chemical/dilution.d.ts.map +1 -0
  50. package/dist/chemical/dilution.js +68 -0
  51. package/dist/chemical/dilution.js.map +1 -0
  52. package/dist/chemical/index.d.ts +9 -0
  53. package/dist/chemical/index.d.ts.map +1 -0
  54. package/dist/chemical/index.js +9 -0
  55. package/dist/chemical/index.js.map +1 -0
  56. package/dist/chemical/injectionCycle.d.ts +19 -0
  57. package/dist/chemical/injectionCycle.d.ts.map +1 -0
  58. package/dist/chemical/injectionCycle.js +170 -0
  59. package/dist/chemical/injectionCycle.js.map +1 -0
  60. package/dist/chemical/ph.d.ts +13 -0
  61. package/dist/chemical/ph.d.ts.map +1 -0
  62. package/dist/chemical/ph.js +83 -0
  63. package/dist/chemical/ph.js.map +1 -0
  64. package/dist/chemical/reactor.d.ts +19 -0
  65. package/dist/chemical/reactor.d.ts.map +1 -0
  66. package/dist/chemical/reactor.js +57 -0
  67. package/dist/chemical/reactor.js.map +1 -0
  68. package/dist/chemical/shelfLife.d.ts +15 -0
  69. package/dist/chemical/shelfLife.d.ts.map +1 -0
  70. package/dist/chemical/shelfLife.js +36 -0
  71. package/dist/chemical/shelfLife.js.map +1 -0
  72. package/dist/chemical/types.d.ts +144 -0
  73. package/dist/chemical/types.d.ts.map +1 -0
  74. package/dist/chemical/types.js +2 -0
  75. package/dist/chemical/types.js.map +1 -0
  76. package/dist/construction/aggregate.d.ts +33 -0
  77. package/dist/construction/aggregate.d.ts.map +1 -0
  78. package/dist/construction/aggregate.js +92 -0
  79. package/dist/construction/aggregate.js.map +1 -0
  80. package/dist/construction/beamLoad.d.ts +12 -0
  81. package/dist/construction/beamLoad.d.ts.map +1 -0
  82. package/dist/construction/beamLoad.js +156 -0
  83. package/dist/construction/beamLoad.js.map +1 -0
  84. package/dist/construction/brick.d.ts +17 -0
  85. package/dist/construction/brick.d.ts.map +1 -0
  86. package/dist/construction/brick.js +53 -0
  87. package/dist/construction/brick.js.map +1 -0
  88. package/dist/construction/concreteMix.d.ts +9 -0
  89. package/dist/construction/concreteMix.d.ts.map +1 -0
  90. package/dist/construction/concreteMix.js +31 -0
  91. package/dist/construction/concreteMix.js.map +1 -0
  92. package/dist/construction/earthwork.d.ts +13 -0
  93. package/dist/construction/earthwork.d.ts.map +1 -0
  94. package/dist/construction/earthwork.js +25 -0
  95. package/dist/construction/earthwork.js.map +1 -0
  96. package/dist/construction/formwork.d.ts +9 -0
  97. package/dist/construction/formwork.d.ts.map +1 -0
  98. package/dist/construction/formwork.js +61 -0
  99. package/dist/construction/formwork.js.map +1 -0
  100. package/dist/construction/index.d.ts +13 -0
  101. package/dist/construction/index.d.ts.map +1 -0
  102. package/dist/construction/index.js +13 -0
  103. package/dist/construction/index.js.map +1 -0
  104. package/dist/construction/pert.d.ts +15 -0
  105. package/dist/construction/pert.d.ts.map +1 -0
  106. package/dist/construction/pert.js +207 -0
  107. package/dist/construction/pert.js.map +1 -0
  108. package/dist/construction/rebar.d.ts +16 -0
  109. package/dist/construction/rebar.d.ts.map +1 -0
  110. package/dist/construction/rebar.js +43 -0
  111. package/dist/construction/rebar.js.map +1 -0
  112. package/dist/construction/roof.d.ts +16 -0
  113. package/dist/construction/roof.d.ts.map +1 -0
  114. package/dist/construction/roof.js +65 -0
  115. package/dist/construction/roof.js.map +1 -0
  116. package/dist/construction/slope.d.ts +14 -0
  117. package/dist/construction/slope.d.ts.map +1 -0
  118. package/dist/construction/slope.js +54 -0
  119. package/dist/construction/slope.js.map +1 -0
  120. package/dist/construction/stair.d.ts +17 -0
  121. package/dist/construction/stair.d.ts.map +1 -0
  122. package/dist/construction/stair.js +69 -0
  123. package/dist/construction/stair.js.map +1 -0
  124. package/dist/construction/types.d.ts +219 -0
  125. package/dist/construction/types.d.ts.map +1 -0
  126. package/dist/construction/types.js +2 -0
  127. package/dist/construction/types.js.map +1 -0
  128. package/dist/electronics/awg.d.ts +9 -0
  129. package/dist/electronics/awg.d.ts.map +1 -0
  130. package/dist/electronics/awg.js +66 -0
  131. package/dist/electronics/awg.js.map +1 -0
  132. package/dist/electronics/capacitor.d.ts +9 -0
  133. package/dist/electronics/capacitor.d.ts.map +1 -0
  134. package/dist/electronics/capacitor.js +51 -0
  135. package/dist/electronics/capacitor.js.map +1 -0
  136. package/dist/electronics/index.d.ts +12 -0
  137. package/dist/electronics/index.d.ts.map +1 -0
  138. package/dist/electronics/index.js +12 -0
  139. package/dist/electronics/index.js.map +1 -0
  140. package/dist/electronics/led.d.ts +9 -0
  141. package/dist/electronics/led.d.ts.map +1 -0
  142. package/dist/electronics/led.js +72 -0
  143. package/dist/electronics/led.js.map +1 -0
  144. package/dist/electronics/reflow.d.ts +12 -0
  145. package/dist/electronics/reflow.d.ts.map +1 -0
  146. package/dist/electronics/reflow.js +77 -0
  147. package/dist/electronics/reflow.js.map +1 -0
  148. package/dist/electronics/resistor.d.ts +8 -0
  149. package/dist/electronics/resistor.d.ts.map +1 -0
  150. package/dist/electronics/resistor.js +137 -0
  151. package/dist/electronics/resistor.js.map +1 -0
  152. package/dist/electronics/smt-takt.d.ts +8 -0
  153. package/dist/electronics/smt-takt.d.ts.map +1 -0
  154. package/dist/electronics/smt-takt.js +59 -0
  155. package/dist/electronics/smt-takt.js.map +1 -0
  156. package/dist/electronics/solder.d.ts +8 -0
  157. package/dist/electronics/solder.d.ts.map +1 -0
  158. package/dist/electronics/solder.js +46 -0
  159. package/dist/electronics/solder.js.map +1 -0
  160. package/dist/electronics/stencil.d.ts +9 -0
  161. package/dist/electronics/stencil.d.ts.map +1 -0
  162. package/dist/electronics/stencil.js +78 -0
  163. package/dist/electronics/stencil.js.map +1 -0
  164. package/dist/electronics/trace.d.ts +8 -0
  165. package/dist/electronics/trace.d.ts.map +1 -0
  166. package/dist/electronics/trace.js +75 -0
  167. package/dist/electronics/trace.js.map +1 -0
  168. package/dist/electronics/types.d.ts +145 -0
  169. package/dist/electronics/types.d.ts.map +1 -0
  170. package/dist/electronics/types.js +2 -0
  171. package/dist/electronics/types.js.map +1 -0
  172. package/dist/electronics/via.d.ts +12 -0
  173. package/dist/electronics/via.d.ts.map +1 -0
  174. package/dist/electronics/via.js +63 -0
  175. package/dist/electronics/via.js.map +1 -0
  176. package/dist/energy/carbonFootprint.d.ts +13 -0
  177. package/dist/energy/carbonFootprint.d.ts.map +1 -0
  178. package/dist/energy/carbonFootprint.js +41 -0
  179. package/dist/energy/carbonFootprint.js.map +1 -0
  180. package/dist/energy/compressedAirCost.d.ts +14 -0
  181. package/dist/energy/compressedAirCost.d.ts.map +1 -0
  182. package/dist/energy/compressedAirCost.js +39 -0
  183. package/dist/energy/compressedAirCost.js.map +1 -0
  184. package/dist/energy/index.d.ts +8 -0
  185. package/dist/energy/index.d.ts.map +1 -0
  186. package/dist/energy/index.js +8 -0
  187. package/dist/energy/index.js.map +1 -0
  188. package/dist/energy/motorEfficiency.d.ts +14 -0
  189. package/dist/energy/motorEfficiency.d.ts.map +1 -0
  190. package/dist/energy/motorEfficiency.js +47 -0
  191. package/dist/energy/motorEfficiency.js.map +1 -0
  192. package/dist/energy/pfCorrection.d.ts +15 -0
  193. package/dist/energy/pfCorrection.d.ts.map +1 -0
  194. package/dist/energy/pfCorrection.js +56 -0
  195. package/dist/energy/pfCorrection.js.map +1 -0
  196. package/dist/energy/powerCost.d.ts +15 -0
  197. package/dist/energy/powerCost.d.ts.map +1 -0
  198. package/dist/energy/powerCost.js +37 -0
  199. package/dist/energy/powerCost.js.map +1 -0
  200. package/dist/energy/types.d.ts +119 -0
  201. package/dist/energy/types.d.ts.map +1 -0
  202. package/dist/energy/types.js +2 -0
  203. package/dist/energy/types.js.map +1 -0
  204. package/dist/energy/vfdSavings.d.ts +16 -0
  205. package/dist/energy/vfdSavings.d.ts.map +1 -0
  206. package/dist/energy/vfdSavings.js +57 -0
  207. package/dist/energy/vfdSavings.js.map +1 -0
  208. package/dist/food/calorie.d.ts +13 -0
  209. package/dist/food/calorie.d.ts.map +1 -0
  210. package/dist/food/calorie.js +42 -0
  211. package/dist/food/calorie.js.map +1 -0
  212. package/dist/food/expiry.d.ts +13 -0
  213. package/dist/food/expiry.d.ts.map +1 -0
  214. package/dist/food/expiry.js +58 -0
  215. package/dist/food/expiry.js.map +1 -0
  216. package/dist/food/haccp.d.ts +18 -0
  217. package/dist/food/haccp.d.ts.map +1 -0
  218. package/dist/food/haccp.js +70 -0
  219. package/dist/food/haccp.js.map +1 -0
  220. package/dist/food/index.d.ts +6 -0
  221. package/dist/food/index.d.ts.map +1 -0
  222. package/dist/food/index.js +6 -0
  223. package/dist/food/index.js.map +1 -0
  224. package/dist/food/nutrition.d.ts +12 -0
  225. package/dist/food/nutrition.d.ts.map +1 -0
  226. package/dist/food/nutrition.js +75 -0
  227. package/dist/food/nutrition.js.map +1 -0
  228. package/dist/food/types.d.ts +104 -0
  229. package/dist/food/types.d.ts.map +1 -0
  230. package/dist/food/types.js +2 -0
  231. package/dist/food/types.js.map +1 -0
  232. package/dist/index.d.ts +7 -0
  233. package/dist/index.d.ts.map +1 -0
  234. package/dist/index.js +9 -0
  235. package/dist/index.js.map +1 -0
  236. package/dist/logistics/cbm.d.ts +12 -0
  237. package/dist/logistics/cbm.d.ts.map +1 -0
  238. package/dist/logistics/cbm.js +37 -0
  239. package/dist/logistics/cbm.js.map +1 -0
  240. package/dist/logistics/containerFit.d.ts +12 -0
  241. package/dist/logistics/containerFit.d.ts.map +1 -0
  242. package/dist/logistics/containerFit.js +73 -0
  243. package/dist/logistics/containerFit.js.map +1 -0
  244. package/dist/logistics/dimWeight.d.ts +13 -0
  245. package/dist/logistics/dimWeight.d.ts.map +1 -0
  246. package/dist/logistics/dimWeight.js +50 -0
  247. package/dist/logistics/dimWeight.js.map +1 -0
  248. package/dist/logistics/eoq.d.ts +18 -0
  249. package/dist/logistics/eoq.d.ts.map +1 -0
  250. package/dist/logistics/eoq.js +42 -0
  251. package/dist/logistics/eoq.js.map +1 -0
  252. package/dist/logistics/fillRate.d.ts +22 -0
  253. package/dist/logistics/fillRate.d.ts.map +1 -0
  254. package/dist/logistics/fillRate.js +84 -0
  255. package/dist/logistics/fillRate.js.map +1 -0
  256. package/dist/logistics/freightClass.d.ts +12 -0
  257. package/dist/logistics/freightClass.d.ts.map +1 -0
  258. package/dist/logistics/freightClass.js +68 -0
  259. package/dist/logistics/freightClass.js.map +1 -0
  260. package/dist/logistics/index.d.ts +15 -0
  261. package/dist/logistics/index.d.ts.map +1 -0
  262. package/dist/logistics/index.js +15 -0
  263. package/dist/logistics/index.js.map +1 -0
  264. package/dist/logistics/kanban.d.ts +19 -0
  265. package/dist/logistics/kanban.d.ts.map +1 -0
  266. package/dist/logistics/kanban.js +48 -0
  267. package/dist/logistics/kanban.js.map +1 -0
  268. package/dist/logistics/pallet3d.d.ts +16 -0
  269. package/dist/logistics/pallet3d.d.ts.map +1 -0
  270. package/dist/logistics/pallet3d.js +380 -0
  271. package/dist/logistics/pallet3d.js.map +1 -0
  272. package/dist/logistics/palletStack.d.ts +12 -0
  273. package/dist/logistics/palletStack.d.ts.map +1 -0
  274. package/dist/logistics/palletStack.js +65 -0
  275. package/dist/logistics/palletStack.js.map +1 -0
  276. package/dist/logistics/pickTime.d.ts +17 -0
  277. package/dist/logistics/pickTime.d.ts.map +1 -0
  278. package/dist/logistics/pickTime.js +70 -0
  279. package/dist/logistics/pickTime.js.map +1 -0
  280. package/dist/logistics/safetyStock.d.ts +24 -0
  281. package/dist/logistics/safetyStock.d.ts.map +1 -0
  282. package/dist/logistics/safetyStock.js +99 -0
  283. package/dist/logistics/safetyStock.js.map +1 -0
  284. package/dist/logistics/shipping.d.ts +16 -0
  285. package/dist/logistics/shipping.d.ts.map +1 -0
  286. package/dist/logistics/shipping.js +115 -0
  287. package/dist/logistics/shipping.js.map +1 -0
  288. package/dist/logistics/tsp.d.ts +12 -0
  289. package/dist/logistics/tsp.d.ts.map +1 -0
  290. package/dist/logistics/tsp.js +166 -0
  291. package/dist/logistics/tsp.js.map +1 -0
  292. package/dist/logistics/types.d.ts +315 -0
  293. package/dist/logistics/types.d.ts.map +1 -0
  294. package/dist/logistics/types.js +5 -0
  295. package/dist/logistics/types.js.map +1 -0
  296. package/dist/metal/bearing.d.ts +11 -0
  297. package/dist/metal/bearing.d.ts.map +1 -0
  298. package/dist/metal/bearing.js +32 -0
  299. package/dist/metal/bearing.js.map +1 -0
  300. package/dist/metal/bendAllowance.d.ts +13 -0
  301. package/dist/metal/bendAllowance.d.ts.map +1 -0
  302. package/dist/metal/bendAllowance.js +75 -0
  303. package/dist/metal/bendAllowance.js.map +1 -0
  304. package/dist/metal/bolt.d.ts +32 -0
  305. package/dist/metal/bolt.d.ts.map +1 -0
  306. package/dist/metal/bolt.js +149 -0
  307. package/dist/metal/bolt.js.map +1 -0
  308. package/dist/metal/cutting.d.ts +10 -0
  309. package/dist/metal/cutting.d.ts.map +1 -0
  310. package/dist/metal/cutting.js +55 -0
  311. package/dist/metal/cutting.js.map +1 -0
  312. package/dist/metal/cuttingStock.d.ts +8 -0
  313. package/dist/metal/cuttingStock.d.ts.map +1 -0
  314. package/dist/metal/cuttingStock.js +89 -0
  315. package/dist/metal/cuttingStock.js.map +1 -0
  316. package/dist/metal/flatPattern.d.ts +12 -0
  317. package/dist/metal/flatPattern.d.ts.map +1 -0
  318. package/dist/metal/flatPattern.js +50 -0
  319. package/dist/metal/flatPattern.js.map +1 -0
  320. package/dist/metal/gear.d.ts +13 -0
  321. package/dist/metal/gear.d.ts.map +1 -0
  322. package/dist/metal/gear.js +79 -0
  323. package/dist/metal/gear.js.map +1 -0
  324. package/dist/metal/hardness.d.ts +15 -0
  325. package/dist/metal/hardness.d.ts.map +1 -0
  326. package/dist/metal/hardness.js +77 -0
  327. package/dist/metal/hardness.js.map +1 -0
  328. package/dist/metal/index.d.ts +24 -0
  329. package/dist/metal/index.d.ts.map +1 -0
  330. package/dist/metal/index.js +24 -0
  331. package/dist/metal/index.js.map +1 -0
  332. package/dist/metal/kFactorReverse.d.ts +19 -0
  333. package/dist/metal/kFactorReverse.d.ts.map +1 -0
  334. package/dist/metal/kFactorReverse.js +39 -0
  335. package/dist/metal/kFactorReverse.js.map +1 -0
  336. package/dist/metal/material.d.ts +5 -0
  337. package/dist/metal/material.d.ts.map +1 -0
  338. package/dist/metal/material.js +56 -0
  339. package/dist/metal/material.js.map +1 -0
  340. package/dist/metal/metalWeight.d.ts +10 -0
  341. package/dist/metal/metalWeight.d.ts.map +1 -0
  342. package/dist/metal/metalWeight.js +82 -0
  343. package/dist/metal/metalWeight.js.map +1 -0
  344. package/dist/metal/pressFit.d.ts +15 -0
  345. package/dist/metal/pressFit.d.ts.map +1 -0
  346. package/dist/metal/pressFit.js +96 -0
  347. package/dist/metal/pressFit.js.map +1 -0
  348. package/dist/metal/pressTonnage.d.ts +13 -0
  349. package/dist/metal/pressTonnage.d.ts.map +1 -0
  350. package/dist/metal/pressTonnage.js +86 -0
  351. package/dist/metal/pressTonnage.js.map +1 -0
  352. package/dist/metal/roughness.d.ts +6 -0
  353. package/dist/metal/roughness.d.ts.map +1 -0
  354. package/dist/metal/roughness.js +62 -0
  355. package/dist/metal/roughness.js.map +1 -0
  356. package/dist/metal/screw.d.ts +7 -0
  357. package/dist/metal/screw.d.ts.map +1 -0
  358. package/dist/metal/screw.js +44 -0
  359. package/dist/metal/screw.js.map +1 -0
  360. package/dist/metal/spring.d.ts +11 -0
  361. package/dist/metal/spring.d.ts.map +1 -0
  362. package/dist/metal/spring.js +59 -0
  363. package/dist/metal/spring.js.map +1 -0
  364. package/dist/metal/tap.d.ts +16 -0
  365. package/dist/metal/tap.d.ts.map +1 -0
  366. package/dist/metal/tap.js +62 -0
  367. package/dist/metal/tap.js.map +1 -0
  368. package/dist/metal/thread.d.ts +8 -0
  369. package/dist/metal/thread.d.ts.map +1 -0
  370. package/dist/metal/thread.js +75 -0
  371. package/dist/metal/thread.js.map +1 -0
  372. package/dist/metal/tolerance.d.ts +6 -0
  373. package/dist/metal/tolerance.d.ts.map +1 -0
  374. package/dist/metal/tolerance.js +113 -0
  375. package/dist/metal/tolerance.js.map +1 -0
  376. package/dist/metal/types.d.ts +494 -0
  377. package/dist/metal/types.d.ts.map +1 -0
  378. package/dist/metal/types.js +2 -0
  379. package/dist/metal/types.js.map +1 -0
  380. package/dist/metal/vibration.d.ts +6 -0
  381. package/dist/metal/vibration.d.ts.map +1 -0
  382. package/dist/metal/vibration.js +153 -0
  383. package/dist/metal/vibration.js.map +1 -0
  384. package/dist/metal/weldHeat.d.ts +6 -0
  385. package/dist/metal/weldHeat.d.ts.map +1 -0
  386. package/dist/metal/weldHeat.js +138 -0
  387. package/dist/metal/weldHeat.js.map +1 -0
  388. package/dist/metal/welding.d.ts +6 -0
  389. package/dist/metal/welding.d.ts.map +1 -0
  390. package/dist/metal/welding.js +80 -0
  391. package/dist/metal/welding.js.map +1 -0
  392. package/dist/quality/aql.d.ts +10 -0
  393. package/dist/quality/aql.d.ts.map +1 -0
  394. package/dist/quality/aql.js +104 -0
  395. package/dist/quality/aql.js.map +1 -0
  396. package/dist/quality/cpk.d.ts +14 -0
  397. package/dist/quality/cpk.d.ts.map +1 -0
  398. package/dist/quality/cpk.js +44 -0
  399. package/dist/quality/cpk.js.map +1 -0
  400. package/dist/quality/cycle.d.ts +11 -0
  401. package/dist/quality/cycle.d.ts.map +1 -0
  402. package/dist/quality/cycle.js +55 -0
  403. package/dist/quality/cycle.js.map +1 -0
  404. package/dist/quality/downtime.d.ts +9 -0
  405. package/dist/quality/downtime.d.ts.map +1 -0
  406. package/dist/quality/downtime.js +28 -0
  407. package/dist/quality/downtime.js.map +1 -0
  408. package/dist/quality/dpmo.d.ts +10 -0
  409. package/dist/quality/dpmo.d.ts.map +1 -0
  410. package/dist/quality/dpmo.js +114 -0
  411. package/dist/quality/dpmo.js.map +1 -0
  412. package/dist/quality/index.d.ts +15 -0
  413. package/dist/quality/index.d.ts.map +1 -0
  414. package/dist/quality/index.js +15 -0
  415. package/dist/quality/index.js.map +1 -0
  416. package/dist/quality/lineBalancing.d.ts +9 -0
  417. package/dist/quality/lineBalancing.d.ts.map +1 -0
  418. package/dist/quality/lineBalancing.js +185 -0
  419. package/dist/quality/lineBalancing.js.map +1 -0
  420. package/dist/quality/mtbf.d.ts +13 -0
  421. package/dist/quality/mtbf.d.ts.map +1 -0
  422. package/dist/quality/mtbf.js +48 -0
  423. package/dist/quality/mtbf.js.map +1 -0
  424. package/dist/quality/oee.d.ts +11 -0
  425. package/dist/quality/oee.d.ts.map +1 -0
  426. package/dist/quality/oee.js +43 -0
  427. package/dist/quality/oee.js.map +1 -0
  428. package/dist/quality/ppk.d.ts +15 -0
  429. package/dist/quality/ppk.d.ts.map +1 -0
  430. package/dist/quality/ppk.js +61 -0
  431. package/dist/quality/ppk.js.map +1 -0
  432. package/dist/quality/ppm.d.ts +9 -0
  433. package/dist/quality/ppm.d.ts.map +1 -0
  434. package/dist/quality/ppm.js +134 -0
  435. package/dist/quality/ppm.js.map +1 -0
  436. package/dist/quality/rpn.d.ts +11 -0
  437. package/dist/quality/rpn.d.ts.map +1 -0
  438. package/dist/quality/rpn.js +48 -0
  439. package/dist/quality/rpn.js.map +1 -0
  440. package/dist/quality/takt.d.ts +13 -0
  441. package/dist/quality/takt.d.ts.map +1 -0
  442. package/dist/quality/takt.js +44 -0
  443. package/dist/quality/takt.js.map +1 -0
  444. package/dist/quality/types.d.ts +261 -0
  445. package/dist/quality/types.d.ts.map +1 -0
  446. package/dist/quality/types.js +2 -0
  447. package/dist/quality/types.js.map +1 -0
  448. package/dist/quality/yield.d.ts +12 -0
  449. package/dist/quality/yield.d.ts.map +1 -0
  450. package/dist/quality/yield.js +56 -0
  451. package/dist/quality/yield.js.map +1 -0
  452. package/dist/safety/fallClearance.d.ts +12 -0
  453. package/dist/safety/fallClearance.d.ts.map +1 -0
  454. package/dist/safety/fallClearance.js +37 -0
  455. package/dist/safety/fallClearance.js.map +1 -0
  456. package/dist/safety/havsCalculate.d.ts +16 -0
  457. package/dist/safety/havsCalculate.d.ts.map +1 -0
  458. package/dist/safety/havsCalculate.js +103 -0
  459. package/dist/safety/havsCalculate.js.map +1 -0
  460. package/dist/safety/index.d.ts +8 -0
  461. package/dist/safety/index.d.ts.map +1 -0
  462. package/dist/safety/index.js +8 -0
  463. package/dist/safety/index.js.map +1 -0
  464. package/dist/safety/nioshLifting.d.ts +21 -0
  465. package/dist/safety/nioshLifting.d.ts.map +1 -0
  466. package/dist/safety/nioshLifting.js +164 -0
  467. package/dist/safety/nioshLifting.js.map +1 -0
  468. package/dist/safety/noiseExposure.d.ts +22 -0
  469. package/dist/safety/noiseExposure.d.ts.map +1 -0
  470. package/dist/safety/noiseExposure.js +76 -0
  471. package/dist/safety/noiseExposure.js.map +1 -0
  472. package/dist/safety/respiratorCalculate.d.ts +14 -0
  473. package/dist/safety/respiratorCalculate.d.ts.map +1 -0
  474. package/dist/safety/respiratorCalculate.js +90 -0
  475. package/dist/safety/respiratorCalculate.js.map +1 -0
  476. package/dist/safety/types.d.ts +93 -0
  477. package/dist/safety/types.d.ts.map +1 -0
  478. package/dist/safety/types.js +2 -0
  479. package/dist/safety/types.js.map +1 -0
  480. package/dist/safety/wbgtCalculate.d.ts +25 -0
  481. package/dist/safety/wbgtCalculate.d.ts.map +1 -0
  482. package/dist/safety/wbgtCalculate.js +65 -0
  483. package/dist/safety/wbgtCalculate.js.map +1 -0
  484. package/dist/utility/assignment.d.ts +11 -0
  485. package/dist/utility/assignment.d.ts.map +1 -0
  486. package/dist/utility/assignment.js +113 -0
  487. package/dist/utility/assignment.js.map +1 -0
  488. package/dist/utility/index.d.ts +4 -0
  489. package/dist/utility/index.d.ts.map +1 -0
  490. package/dist/utility/index.js +4 -0
  491. package/dist/utility/index.js.map +1 -0
  492. package/dist/utility/qrcode.d.ts +30 -0
  493. package/dist/utility/qrcode.d.ts.map +1 -0
  494. package/dist/utility/qrcode.js +30 -0
  495. package/dist/utility/qrcode.js.map +1 -0
  496. package/dist/utility/types.d.ts +64 -0
  497. package/dist/utility/types.d.ts.map +1 -0
  498. package/dist/utility/types.js +2 -0
  499. package/dist/utility/types.js.map +1 -0
  500. package/dist/utility/unit.d.ts +25 -0
  501. package/dist/utility/unit.d.ts.map +1 -0
  502. package/dist/utility/unit.js +136 -0
  503. package/dist/utility/unit.js.map +1 -0
  504. package/dist/utils.d.ts +9 -0
  505. package/dist/utils.d.ts.map +1 -0
  506. package/dist/utils.js +12 -0
  507. package/dist/utils.js.map +1 -0
  508. package/package.json +117 -0
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Calorie Calculator Types
3
+ */
4
+ export type Gender = 'male' | 'female';
5
+ export type ActivityLevel = 'sedentary' | 'light' | 'moderate' | 'active' | 'veryActive';
6
+ export interface CalorieInput {
7
+ gender: Gender;
8
+ age: number;
9
+ weightKg: number;
10
+ heightCm: number;
11
+ activityLevel: ActivityLevel;
12
+ }
13
+ export interface CalorieResult {
14
+ bmr: number;
15
+ tdee: number;
16
+ weightLoss: number;
17
+ weightMaintain: number;
18
+ weightGain: number;
19
+ }
20
+ /**
21
+ * Expiry Date Calculator Types
22
+ */
23
+ export type ExpiryMode = 'calculateExpiry' | 'calculateRemaining';
24
+ export interface ExpiryInput {
25
+ mode: ExpiryMode;
26
+ productionDate: string;
27
+ shelfLifeDays: number;
28
+ expiryDate: string;
29
+ today: string;
30
+ }
31
+ export interface ExpiryResult {
32
+ expiryDate: string;
33
+ remainingDays: number;
34
+ shelfLifeDays: number;
35
+ isExpired: boolean;
36
+ percentUsed: number;
37
+ }
38
+ /**
39
+ * Nutrition Facts Calculator Types
40
+ */
41
+ export interface NutrientIngredient {
42
+ name: string;
43
+ amountG: number;
44
+ calories: number;
45
+ totalFat: number;
46
+ saturatedFat: number;
47
+ transFat: number;
48
+ cholesterol: number;
49
+ sodium: number;
50
+ totalCarbs: number;
51
+ dietaryFiber: number;
52
+ sugars: number;
53
+ protein: number;
54
+ }
55
+ export interface NutritionInput {
56
+ servingSize: number;
57
+ servingsPerContainer: number;
58
+ ingredients: NutrientIngredient[];
59
+ }
60
+ export interface NutritionFacts {
61
+ calories: number;
62
+ totalFat: number;
63
+ saturatedFat: number;
64
+ transFat: number;
65
+ cholesterol: number;
66
+ sodium: number;
67
+ totalCarbs: number;
68
+ dietaryFiber: number;
69
+ sugars: number;
70
+ protein: number;
71
+ }
72
+ export interface DailyValuePercents {
73
+ totalFat: number;
74
+ saturatedFat: number;
75
+ cholesterol: number;
76
+ sodium: number;
77
+ totalCarbs: number;
78
+ dietaryFiber: number;
79
+ protein: number;
80
+ }
81
+ export interface NutritionResult {
82
+ totalRecipeWeightG: number;
83
+ perServing: NutritionFacts;
84
+ dailyValues: DailyValuePercents;
85
+ }
86
+ /**
87
+ * HACCP Checklist Types
88
+ */
89
+ export type HaccpCategory = 'receiving' | 'storage' | 'preparation' | 'cooking' | 'cooling' | 'serving';
90
+ export interface HaccpInput {
91
+ category: HaccpCategory;
92
+ }
93
+ export interface HaccpCheckItem {
94
+ id: string;
95
+ checkpoint: string;
96
+ standard: string;
97
+ corrective: string;
98
+ critical: boolean;
99
+ }
100
+ export interface HaccpResult {
101
+ category: HaccpCategory;
102
+ items: HaccpCheckItem[];
103
+ }
104
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/food/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/food/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ export * from './quality/index.js';
2
+ export * from './logistics/index.js';
3
+ export * from './automotive/index.js';
4
+ export * from './safety/index.js';
5
+ export * from './utility/index.js';
6
+ export * from './food/index.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,9 @@
1
+ // Formulab - Manufacturing & Engineering calculation formulas library
2
+ // Re-export all domain modules
3
+ export * from './quality/index.js';
4
+ export * from './logistics/index.js';
5
+ export * from './automotive/index.js';
6
+ export * from './safety/index.js';
7
+ export * from './utility/index.js';
8
+ export * from './food/index.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,+BAA+B;AAE/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { CbmInput, CbmResult } from './types.js';
2
+ /**
3
+ * Calculate Cubic Meter (CBM) for shipping cargo
4
+ *
5
+ * CBM is the standard unit for measuring shipping volume.
6
+ * Formula: CBM = Length × Width × Height (in meters)
7
+ *
8
+ * @param input - Cargo dimensions and quantity
9
+ * @returns CBM per unit and total CBM
10
+ */
11
+ export declare function cbm(input: CbmInput): CbmResult;
12
+ //# sourceMappingURL=cbm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cbm.d.ts","sourceRoot":"","sources":["../../src/logistics/cbm.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AActD;;;;;;;;GAQG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,CAkB9C"}
@@ -0,0 +1,37 @@
1
+ import { roundTo } from '../utils.js';
2
+ /**
3
+ * Convert length to meters based on unit
4
+ */
5
+ function toMeters(value, unit) {
6
+ switch (unit) {
7
+ case 'mm': return value / 1000;
8
+ case 'cm': return value / 100;
9
+ case 'm': return value;
10
+ default: return value;
11
+ }
12
+ }
13
+ /**
14
+ * Calculate Cubic Meter (CBM) for shipping cargo
15
+ *
16
+ * CBM is the standard unit for measuring shipping volume.
17
+ * Formula: CBM = Length × Width × Height (in meters)
18
+ *
19
+ * @param input - Cargo dimensions and quantity
20
+ * @returns CBM per unit and total CBM
21
+ */
22
+ export function cbm(input) {
23
+ const { length, width, height, quantity, unit } = input;
24
+ // Convert dimensions to meters
25
+ const lengthM = toMeters(length, unit);
26
+ const widthM = toMeters(width, unit);
27
+ const heightM = toMeters(height, unit);
28
+ // Calculate CBM per unit
29
+ const cbmPerUnit = lengthM * widthM * heightM;
30
+ // Calculate total CBM
31
+ const totalCbm = cbmPerUnit * quantity;
32
+ return {
33
+ cbmPerUnit: roundTo(cbmPerUnit, 6),
34
+ totalCbm: roundTo(totalCbm, 6),
35
+ };
36
+ }
37
+ //# sourceMappingURL=cbm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cbm.js","sourceRoot":"","sources":["../../src/logistics/cbm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;GAEG;AACH,SAAS,QAAQ,CAAC,KAAa,EAAE,IAAuB;IACtD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,IAAI,CAAC,CAAC,OAAO,KAAK,GAAG,IAAI,CAAC;QAC/B,KAAK,IAAI,CAAC,CAAC,OAAO,KAAK,GAAG,GAAG,CAAC;QAC9B,KAAK,GAAG,CAAC,CAAC,OAAO,KAAK,CAAC;QACvB,OAAO,CAAC,CAAC,OAAO,KAAK,CAAC;IACxB,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,GAAG,CAAC,KAAe;IACjC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAExD,+BAA+B;IAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAEvC,yBAAyB;IACzB,MAAM,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IAE9C,sBAAsB;IACtB,MAAM,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;IAEvC,OAAO;QACL,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAClC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;KAC/B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { ContainerFitInput, ContainerFitResult } from './types.js';
2
+ /**
3
+ * Calculate how many boxes fit in a container
4
+ *
5
+ * This function calculates the optimal number of boxes that can fit
6
+ * in a container, considering different orientations if rotation is allowed.
7
+ *
8
+ * @param input - Container and cargo dimensions
9
+ * @returns Number of units that fit
10
+ */
11
+ export declare function containerFit(input: ContainerFitInput): ContainerFitResult;
12
+ //# sourceMappingURL=containerFit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"containerFit.d.ts","sourceRoot":"","sources":["../../src/logistics/containerFit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAkB,MAAM,YAAY,CAAC;AAiCxF;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,kBAAkB,CAwCzE"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Generate all possible orientations for a box
3
+ * If allowRotation is false, only return the original orientation
4
+ */
5
+ function getOrientations(l, w, h, allowRotation) {
6
+ if (!allowRotation) {
7
+ return [{ length: l, width: w, height: h }];
8
+ }
9
+ // Generate all 6 orientations (permutations of l, w, h)
10
+ const dims = [l, w, h];
11
+ const orientations = [];
12
+ // All permutations of [l, w, h]
13
+ for (let i = 0; i < 3; i++) {
14
+ for (let j = 0; j < 3; j++) {
15
+ if (i === j)
16
+ continue;
17
+ for (let k = 0; k < 3; k++) {
18
+ if (k === i || k === j)
19
+ continue;
20
+ orientations.push({
21
+ length: dims[i],
22
+ width: dims[j],
23
+ height: dims[k],
24
+ });
25
+ }
26
+ }
27
+ }
28
+ return orientations;
29
+ }
30
+ /**
31
+ * Calculate how many boxes fit in a container
32
+ *
33
+ * This function calculates the optimal number of boxes that can fit
34
+ * in a container, considering different orientations if rotation is allowed.
35
+ *
36
+ * @param input - Container and cargo dimensions
37
+ * @returns Number of units that fit
38
+ */
39
+ export function containerFit(input) {
40
+ const { container, cargo, allowRotation } = input;
41
+ // Get all possible orientations
42
+ const orientations = getOrientations(cargo.length, cargo.width, cargo.height, allowRotation);
43
+ let bestResult = {
44
+ unitsPerLayer: 0,
45
+ layers: 0,
46
+ totalUnits: 0,
47
+ bestOrientation: { length: cargo.length, width: cargo.width, height: cargo.height },
48
+ };
49
+ // Try each orientation and find the best fit
50
+ for (const orient of orientations) {
51
+ // Check if box fits at all
52
+ if (orient.length > container.length || orient.width > container.width || orient.height > container.height) {
53
+ continue;
54
+ }
55
+ // Calculate how many boxes fit in each dimension
56
+ const cols = Math.floor(container.length / orient.length);
57
+ const rows = Math.floor(container.width / orient.width);
58
+ const layers = Math.floor(container.height / orient.height);
59
+ const unitsPerLayer = cols * rows;
60
+ const totalUnits = unitsPerLayer * layers;
61
+ // Keep the orientation that fits the most boxes
62
+ if (totalUnits > bestResult.totalUnits) {
63
+ bestResult = {
64
+ unitsPerLayer,
65
+ layers,
66
+ totalUnits,
67
+ bestOrientation: orient,
68
+ };
69
+ }
70
+ }
71
+ return bestResult;
72
+ }
73
+ //# sourceMappingURL=containerFit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"containerFit.js","sourceRoot":"","sources":["../../src/logistics/containerFit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { DimWeightInput, DimWeightResult } from './types.js';
2
+ /**
3
+ * Calculate Dimensional Weight for shipping
4
+ *
5
+ * Dimensional weight (volumetric weight) is used by carriers to charge
6
+ * for lightweight but bulky packages. The billable weight is the greater
7
+ * of actual weight or dimensional weight.
8
+ *
9
+ * @param input - Package dimensions and weight
10
+ * @returns Dimensional weight calculation results
11
+ */
12
+ export declare function dimWeight(input: DimWeightInput): DimWeightResult;
13
+ //# sourceMappingURL=dimWeight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dimWeight.d.ts","sourceRoot":"","sources":["../../src/logistics/dimWeight.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAe,MAAM,YAAY,CAAC;AAa/E;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,eAAe,CAgChE"}
@@ -0,0 +1,50 @@
1
+ import { roundTo } from '../utils.js';
2
+ // DIM factors (cubic inches per pound, converted to cubic cm per kg)
3
+ // Standard industry factors:
4
+ // - Domestic Air: 139 in³/lb = 139 * 16.387 / 0.4536 ≈ 5000 cm³/kg
5
+ // - International Air: 166 in³/lb = 166 * 16.387 / 0.4536 ≈ 6000 cm³/kg
6
+ // - Ground: 139 in³/lb = 5000 cm³/kg (same as domestic air)
7
+ const DIM_FACTORS = {
8
+ domestic_air: 5000,
9
+ international_air: 6000,
10
+ ground: 5000,
11
+ };
12
+ /**
13
+ * Calculate Dimensional Weight for shipping
14
+ *
15
+ * Dimensional weight (volumetric weight) is used by carriers to charge
16
+ * for lightweight but bulky packages. The billable weight is the greater
17
+ * of actual weight or dimensional weight.
18
+ *
19
+ * @param input - Package dimensions and weight
20
+ * @returns Dimensional weight calculation results
21
+ */
22
+ export function dimWeight(input) {
23
+ const { length, width, height, actualWeight, carrier } = input;
24
+ // Handle zero/invalid inputs
25
+ if (length <= 0 || width <= 0 || height <= 0 || actualWeight < 0) {
26
+ return {
27
+ dimensionalWeight: 0,
28
+ actualWeight: 0,
29
+ billableWeight: 0,
30
+ dimFactor: DIM_FACTORS[carrier],
31
+ isDimWeightHigher: false,
32
+ };
33
+ }
34
+ const dimFactor = DIM_FACTORS[carrier];
35
+ // Dimensional weight = (L × W × H) / DIM factor
36
+ // Input is in cm, output in kg
37
+ const volumeCm3 = length * width * height;
38
+ const dimensionalWeight = roundTo(volumeCm3 / dimFactor, 2);
39
+ const actualWeightRounded = roundTo(actualWeight, 2);
40
+ // Billable weight = max(actual weight, dimensional weight)
41
+ const billableWeight = Math.max(actualWeightRounded, dimensionalWeight);
42
+ return {
43
+ dimensionalWeight,
44
+ actualWeight: actualWeightRounded,
45
+ billableWeight: roundTo(billableWeight, 2),
46
+ dimFactor,
47
+ isDimWeightHigher: dimensionalWeight > actualWeightRounded,
48
+ };
49
+ }
50
+ //# sourceMappingURL=dimWeight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dimWeight.js","sourceRoot":"","sources":["../../src/logistics/dimWeight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC,qEAAqE;AACrE,6BAA6B;AAC7B,mEAAmE;AACnE,wEAAwE;AACxE,4DAA4D;AAC5D,MAAM,WAAW,GAAgC;IAC/C,YAAY,EAAE,IAAI;IAClB,iBAAiB,EAAE,IAAI;IACvB,MAAM,EAAE,IAAI;CACb,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,UAAU,SAAS,CAAC,KAAqB;IAC7C,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAE/D,6BAA6B;IAC7B,IAAI,MAAM,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACjE,OAAO;YACL,iBAAiB,EAAE,CAAC;YACpB,YAAY,EAAE,CAAC;YACf,cAAc,EAAE,CAAC;YACjB,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC;YAC/B,iBAAiB,EAAE,KAAK;SACzB,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAEvC,gDAAgD;IAChD,+BAA+B;IAC/B,MAAM,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;IAC1C,MAAM,iBAAiB,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC;IAC5D,MAAM,mBAAmB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IAErD,2DAA2D;IAC3D,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;IAExE,OAAO;QACL,iBAAiB;QACjB,YAAY,EAAE,mBAAmB;QACjC,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;QAC1C,SAAS;QACT,iBAAiB,EAAE,iBAAiB,GAAG,mBAAmB;KAC3D,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { EoqInput, EoqResult } from './types.js';
2
+ /**
3
+ * Calculate Economic Order Quantity (EOQ)
4
+ *
5
+ * EOQ is the optimal order quantity that minimizes total inventory costs,
6
+ * balancing ordering costs and holding costs.
7
+ *
8
+ * Formula: EOQ = sqrt(2 × D × S / H)
9
+ * Where:
10
+ * D = Annual demand (units/year)
11
+ * S = Order cost per order ($)
12
+ * H = Holding cost per unit per year ($/unit/year)
13
+ *
14
+ * @param input - Annual demand, order cost, and holding cost
15
+ * @returns EOQ and related metrics
16
+ */
17
+ export declare function eoq(input: EoqInput): EoqResult;
18
+ //# sourceMappingURL=eoq.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eoq.d.ts","sourceRoot":"","sources":["../../src/logistics/eoq.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEtD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,CA+B9C"}
@@ -0,0 +1,42 @@
1
+ import { roundTo } from '../utils.js';
2
+ /**
3
+ * Calculate Economic Order Quantity (EOQ)
4
+ *
5
+ * EOQ is the optimal order quantity that minimizes total inventory costs,
6
+ * balancing ordering costs and holding costs.
7
+ *
8
+ * Formula: EOQ = sqrt(2 × D × S / H)
9
+ * Where:
10
+ * D = Annual demand (units/year)
11
+ * S = Order cost per order ($)
12
+ * H = Holding cost per unit per year ($/unit/year)
13
+ *
14
+ * @param input - Annual demand, order cost, and holding cost
15
+ * @returns EOQ and related metrics
16
+ */
17
+ export function eoq(input) {
18
+ const { annualDemand, orderCost, holdingCost } = input;
19
+ // Calculate EOQ using the classic formula
20
+ // EOQ = sqrt(2DS/H)
21
+ const eoqValue = Math.sqrt((2 * annualDemand * orderCost) / holdingCost);
22
+ // Orders per year = D / EOQ
23
+ const ordersPerYear = annualDemand / eoqValue;
24
+ // Order cycle time in days = 365 / orders per year
25
+ const orderCycleDays = 365 / ordersPerYear;
26
+ // Annual ordering cost = (D / EOQ) × S
27
+ const annualOrderingCost = ordersPerYear * orderCost;
28
+ // Annual holding cost = (EOQ / 2) × H
29
+ // Average inventory = EOQ / 2 (assuming constant demand and instant replenishment)
30
+ const annualHoldingCost = (eoqValue / 2) * holdingCost;
31
+ // Total annual cost = Annual ordering cost + Annual holding cost
32
+ const totalAnnualCost = annualOrderingCost + annualHoldingCost;
33
+ return {
34
+ eoq: roundTo(eoqValue, 4),
35
+ ordersPerYear: roundTo(ordersPerYear, 4),
36
+ orderCycleDays: roundTo(orderCycleDays, 4),
37
+ annualOrderingCost: roundTo(annualOrderingCost, 4),
38
+ annualHoldingCost: roundTo(annualHoldingCost, 4),
39
+ totalAnnualCost: roundTo(totalAnnualCost, 4),
40
+ };
41
+ }
42
+ //# sourceMappingURL=eoq.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eoq.js","sourceRoot":"","sources":["../../src/logistics/eoq.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,GAAG,CAAC,KAAe;IACjC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IAEvD,0CAA0C;IAC1C,oBAAoB;IACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,YAAY,GAAG,SAAS,CAAC,GAAG,WAAW,CAAC,CAAC;IAEzE,4BAA4B;IAC5B,MAAM,aAAa,GAAG,YAAY,GAAG,QAAQ,CAAC;IAE9C,mDAAmD;IACnD,MAAM,cAAc,GAAG,GAAG,GAAG,aAAa,CAAC;IAE3C,uCAAuC;IACvC,MAAM,kBAAkB,GAAG,aAAa,GAAG,SAAS,CAAC;IAErD,sCAAsC;IACtC,mFAAmF;IACnF,MAAM,iBAAiB,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC;IAEvD,iEAAiE;IACjE,MAAM,eAAe,GAAG,kBAAkB,GAAG,iBAAiB,CAAC;IAE/D,OAAO;QACL,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzB,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;QACxC,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;QAC1C,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAClD,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAChD,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;KAC7C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { FillRateInput, FillRateResult, ServiceLevelInput, ServiceLevelResult } from './types.js';
2
+ /**
3
+ * Calculate Fill Rate
4
+ *
5
+ * Fill rate measures the percentage of orders or order lines that are
6
+ * fulfilled completely from available stock.
7
+ *
8
+ * @param input - Fill rate calculation inputs
9
+ * @returns Fill rate results
10
+ */
11
+ export declare function fillRate(input: FillRateInput): FillRateResult;
12
+ /**
13
+ * Calculate Service Level from Safety Stock
14
+ *
15
+ * Determines the service level achieved given current safety stock and
16
+ * demand variability.
17
+ *
18
+ * @param input - Service level calculation inputs
19
+ * @returns Service level results
20
+ */
21
+ export declare function serviceLevel(input: ServiceLevelInput): ServiceLevelResult;
22
+ //# sourceMappingURL=fillRate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fillRate.d.ts","sourceRoot":"","sources":["../../src/logistics/fillRate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAsBpB;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,CA2B7D;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,kBAAkB,CA0BzE"}
@@ -0,0 +1,84 @@
1
+ import { roundTo } from '../utils.js';
2
+ /**
3
+ * Cumulative Distribution Function for standard normal distribution
4
+ * Uses the Horner form of the rational approximation
5
+ */
6
+ function normalCDF(z) {
7
+ const a1 = 0.254829592;
8
+ const a2 = -0.284496736;
9
+ const a3 = 1.421413741;
10
+ const a4 = -1.453152027;
11
+ const a5 = 1.061405429;
12
+ const p = 0.3275911;
13
+ const sign = z < 0 ? -1 : 1;
14
+ const x = Math.abs(z) / Math.SQRT2;
15
+ const t = 1 / (1 + p * x);
16
+ const erf = 1 - ((((a5 * t + a4) * t + a3) * t + a2) * t + a1) * t * Math.exp(-x * x);
17
+ return 0.5 * (1 + sign * erf);
18
+ }
19
+ /**
20
+ * Calculate Fill Rate
21
+ *
22
+ * Fill rate measures the percentage of orders or order lines that are
23
+ * fulfilled completely from available stock.
24
+ *
25
+ * @param input - Fill rate calculation inputs
26
+ * @returns Fill rate results
27
+ */
28
+ export function fillRate(input) {
29
+ const { totalOrders, filledComplete } = input;
30
+ // Handle zero/invalid inputs
31
+ if (totalOrders <= 0) {
32
+ return {
33
+ fillRate: 0,
34
+ shortfallRate: 100,
35
+ filledComplete: 0,
36
+ shortfall: 0,
37
+ };
38
+ }
39
+ // Clamp filledComplete to valid range
40
+ const actualFilled = Math.min(Math.max(0, filledComplete), totalOrders);
41
+ const shortfall = totalOrders - actualFilled;
42
+ // Calculate fill rate
43
+ const rate = (actualFilled / totalOrders) * 100;
44
+ const shortfallRate = 100 - rate;
45
+ return {
46
+ fillRate: roundTo(rate, 2),
47
+ shortfallRate: roundTo(shortfallRate, 2),
48
+ filledComplete: actualFilled,
49
+ shortfall,
50
+ };
51
+ }
52
+ /**
53
+ * Calculate Service Level from Safety Stock
54
+ *
55
+ * Determines the service level achieved given current safety stock and
56
+ * demand variability.
57
+ *
58
+ * @param input - Service level calculation inputs
59
+ * @returns Service level results
60
+ */
61
+ export function serviceLevel(input) {
62
+ const { demandStdDev, safetyStock } = input;
63
+ // Handle zero/invalid inputs
64
+ if (demandStdDev <= 0) {
65
+ return {
66
+ zScore: 0,
67
+ serviceLevel: safetyStock > 0 ? 100 : 50,
68
+ stockoutProbability: safetyStock > 0 ? 0 : 50,
69
+ };
70
+ }
71
+ // Calculate z-score: z = safety stock / std dev
72
+ const zScore = safetyStock / demandStdDev;
73
+ // Service level is the CDF of the normal distribution at z
74
+ // This gives the probability of demand being less than or equal to
75
+ // (average demand + safety stock)
76
+ const level = normalCDF(zScore) * 100;
77
+ const stockoutProbability = 100 - level;
78
+ return {
79
+ zScore: roundTo(zScore, 3),
80
+ serviceLevel: roundTo(level, 2),
81
+ stockoutProbability: roundTo(stockoutProbability, 2),
82
+ };
83
+ }
84
+ //# sourceMappingURL=fillRate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fillRate.js","sourceRoot":"","sources":["../../src/logistics/fillRate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { FreightClassInput, FreightClassResult } from './types.js';
2
+ /**
3
+ * Calculate NMFC Freight Class based on density
4
+ *
5
+ * Freight class is determined by the density of the shipment (weight per cubic foot).
6
+ * Lower density items have higher freight classes and generally cost more to ship.
7
+ *
8
+ * @param input - Package weight and dimensions in imperial units
9
+ * @returns Freight class determination results
10
+ */
11
+ export declare function freightClass(input: FreightClassInput): FreightClassResult;
12
+ //# sourceMappingURL=freightClass.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"freightClass.d.ts","sourceRoot":"","sources":["../../src/logistics/freightClass.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA2BxE;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,kBAAkB,CAsCzE"}
@@ -0,0 +1,68 @@
1
+ import { roundTo } from '../utils.js';
2
+ /**
3
+ * NMFC Freight Class lookup based on density (simplified)
4
+ * Lower density = higher class = higher shipping cost
5
+ */
6
+ const FREIGHT_CLASS_TABLE = [
7
+ { minDensity: 50, maxDensity: Infinity, freightClass: 50, className: 'Clean Freight' },
8
+ { minDensity: 35, maxDensity: 50, freightClass: 55, className: 'Bricks, Cement' },
9
+ { minDensity: 30, maxDensity: 35, freightClass: 60, className: 'Car Accessories' },
10
+ { minDensity: 22.5, maxDensity: 30, freightClass: 65, className: 'Car Parts' },
11
+ { minDensity: 15, maxDensity: 22.5, freightClass: 70, className: 'Food Items' },
12
+ { minDensity: 13.5, maxDensity: 15, freightClass: 77.5, className: 'Tires, Bathroom Fixtures' },
13
+ { minDensity: 12, maxDensity: 13.5, freightClass: 85, className: 'Crated Machinery' },
14
+ { minDensity: 10.5, maxDensity: 12, freightClass: 92.5, className: 'Computers, Monitors' },
15
+ { minDensity: 9, maxDensity: 10.5, freightClass: 100, className: 'Boat Covers, Car Covers' },
16
+ { minDensity: 8, maxDensity: 9, freightClass: 110, className: 'Cabinets, Framed Art' },
17
+ { minDensity: 7, maxDensity: 8, freightClass: 125, className: 'Small Appliances' },
18
+ { minDensity: 6, maxDensity: 7, freightClass: 150, className: 'Auto Sheet Metal' },
19
+ { minDensity: 5, maxDensity: 6, freightClass: 175, className: 'Clothing, Couches' },
20
+ { minDensity: 4, maxDensity: 5, freightClass: 200, className: 'Auto Sheet Metal Parts' },
21
+ { minDensity: 3, maxDensity: 4, freightClass: 250, className: 'Bamboo Furniture' },
22
+ { minDensity: 2, maxDensity: 3, freightClass: 300, className: 'Wood Cabinets' },
23
+ { minDensity: 1, maxDensity: 2, freightClass: 400, className: 'Deer Antlers' },
24
+ { minDensity: 0, maxDensity: 1, freightClass: 500, className: 'Ping Pong Balls, Styrofoam' },
25
+ ];
26
+ /**
27
+ * Calculate NMFC Freight Class based on density
28
+ *
29
+ * Freight class is determined by the density of the shipment (weight per cubic foot).
30
+ * Lower density items have higher freight classes and generally cost more to ship.
31
+ *
32
+ * @param input - Package weight and dimensions in imperial units
33
+ * @returns Freight class determination results
34
+ */
35
+ export function freightClass(input) {
36
+ const { weight, length, width, height } = input;
37
+ // Handle zero/invalid inputs
38
+ if (weight <= 0 || length <= 0 || width <= 0 || height <= 0) {
39
+ return {
40
+ density: 0,
41
+ freightClass: 0,
42
+ className: 'Invalid Input',
43
+ volumeCuFt: 0,
44
+ };
45
+ }
46
+ // Calculate volume in cubic feet (input is in inches)
47
+ const volumeCuIn = length * width * height;
48
+ const volumeCuFt = volumeCuIn / 1728; // 12^3 = 1728 cubic inches per cubic foot
49
+ // Calculate density (lbs per cubic foot)
50
+ const density = weight / volumeCuFt;
51
+ // Find freight class based on density
52
+ let fc = 500;
53
+ let className = 'Ping Pong Balls, Styrofoam';
54
+ for (const entry of FREIGHT_CLASS_TABLE) {
55
+ if (density >= entry.minDensity && density < entry.maxDensity) {
56
+ fc = entry.freightClass;
57
+ className = entry.className;
58
+ break;
59
+ }
60
+ }
61
+ return {
62
+ density: roundTo(density, 2),
63
+ freightClass: fc,
64
+ className,
65
+ volumeCuFt: roundTo(volumeCuFt, 3),
66
+ };
67
+ }
68
+ //# sourceMappingURL=freightClass.js.map