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,17 @@
1
+ import type { PickTimeInput, PickTimeResult } from './types.js';
2
+ /**
3
+ * Calculate warehouse pick time per order
4
+ *
5
+ * Pick time is a key metric for warehouse productivity. It includes:
6
+ * - Travel time: walking between pick locations
7
+ * - Search time: locating items at the pick face
8
+ * - Pick time: physically retrieving items
9
+ * - Documentation time: scanning, confirming, paperwork
10
+ *
11
+ * Batch picking can reduce travel time by combining multiple orders.
12
+ *
13
+ * @param input - Pick time parameters
14
+ * @returns Pick time breakdown and productivity metrics
15
+ */
16
+ export declare function pickTime(input: PickTimeInput): PickTimeResult;
17
+ //# sourceMappingURL=pickTime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pickTime.d.ts","sourceRoot":"","sources":["../../src/logistics/pickTime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEhE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,CAqE7D"}
@@ -0,0 +1,70 @@
1
+ import { roundTo } from '../utils.js';
2
+ /**
3
+ * Calculate warehouse pick time per order
4
+ *
5
+ * Pick time is a key metric for warehouse productivity. It includes:
6
+ * - Travel time: walking between pick locations
7
+ * - Search time: locating items at the pick face
8
+ * - Pick time: physically retrieving items
9
+ * - Documentation time: scanning, confirming, paperwork
10
+ *
11
+ * Batch picking can reduce travel time by combining multiple orders.
12
+ *
13
+ * @param input - Pick time parameters
14
+ * @returns Pick time breakdown and productivity metrics
15
+ */
16
+ export function pickTime(input) {
17
+ const { mode, distance, speed, itemsPerOrder, searchTimePerItem, pickTimePerItem, documentationTime, batchSize = 1, } = input;
18
+ // Handle zero/invalid inputs
19
+ if (speed <= 0 || itemsPerOrder <= 0) {
20
+ return {
21
+ travelTime: 0,
22
+ searchTime: 0,
23
+ pickTime: 0,
24
+ documentationTime: 0,
25
+ totalTime: 0,
26
+ totalTimeMinutes: 0,
27
+ ordersPerHour: 0,
28
+ };
29
+ }
30
+ // Calculate base times
31
+ // Travel time = distance / speed, convert to seconds (speed is per minute)
32
+ const baseTravelTime = (distance / speed) * 60;
33
+ // Search and pick times scale with items
34
+ const baseSearchTime = itemsPerOrder * searchTimePerItem;
35
+ const basePickTime = itemsPerOrder * pickTimePerItem;
36
+ let travelTime;
37
+ let searchTime;
38
+ let pick;
39
+ let docTime;
40
+ if (mode === 'batch' && batchSize > 1) {
41
+ // Batch picking: share travel time across orders in batch
42
+ // Assume travel time is shared but search/pick is per order
43
+ // Documentation is per order
44
+ travelTime = baseTravelTime / batchSize;
45
+ searchTime = baseSearchTime; // Per order
46
+ pick = basePickTime; // Per order
47
+ docTime = documentationTime; // Per order
48
+ }
49
+ else {
50
+ // Single order picking
51
+ travelTime = baseTravelTime;
52
+ searchTime = baseSearchTime;
53
+ pick = basePickTime;
54
+ docTime = documentationTime;
55
+ }
56
+ const totalTime = travelTime + searchTime + pick + docTime;
57
+ const totalTimeMinutes = totalTime / 60;
58
+ // Orders per hour calculation
59
+ const ordersPerHour = totalTime > 0 ? 3600 / totalTime : 0;
60
+ return {
61
+ travelTime: roundTo(travelTime, 1),
62
+ searchTime: roundTo(searchTime, 1),
63
+ pickTime: roundTo(pick, 1),
64
+ documentationTime: roundTo(docTime, 1),
65
+ totalTime: roundTo(totalTime, 1),
66
+ totalTimeMinutes: roundTo(totalTimeMinutes, 2),
67
+ ordersPerHour: roundTo(ordersPerHour, 1),
68
+ };
69
+ }
70
+ //# sourceMappingURL=pickTime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pickTime.js","sourceRoot":"","sources":["../../src/logistics/pickTime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAoB;IAC3C,MAAM,EACJ,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,SAAS,GAAG,CAAC,GACd,GAAG,KAAK,CAAC;IAEV,6BAA6B;IAC7B,IAAI,KAAK,IAAI,CAAC,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;QACrC,OAAO;YACL,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,CAAC;YACb,QAAQ,EAAE,CAAC;YACX,iBAAiB,EAAE,CAAC;YACpB,SAAS,EAAE,CAAC;YACZ,gBAAgB,EAAE,CAAC;YACnB,aAAa,EAAE,CAAC;SACjB,CAAC;IACJ,CAAC;IAED,uBAAuB;IACvB,2EAA2E;IAC3E,MAAM,cAAc,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;IAE/C,yCAAyC;IACzC,MAAM,cAAc,GAAG,aAAa,GAAG,iBAAiB,CAAC;IACzD,MAAM,YAAY,GAAG,aAAa,GAAG,eAAe,CAAC;IAErD,IAAI,UAAkB,CAAC;IACvB,IAAI,UAAkB,CAAC;IACvB,IAAI,IAAY,CAAC;IACjB,IAAI,OAAe,CAAC;IAEpB,IAAI,IAAI,KAAK,OAAO,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QACtC,0DAA0D;QAC1D,4DAA4D;QAC5D,6BAA6B;QAC7B,UAAU,GAAG,cAAc,GAAG,SAAS,CAAC;QACxC,UAAU,GAAG,cAAc,CAAC,CAAC,YAAY;QACzC,IAAI,GAAG,YAAY,CAAC,CAAC,YAAY;QACjC,OAAO,GAAG,iBAAiB,CAAC,CAAC,YAAY;IAC3C,CAAC;SAAM,CAAC;QACN,uBAAuB;QACvB,UAAU,GAAG,cAAc,CAAC;QAC5B,UAAU,GAAG,cAAc,CAAC;QAC5B,IAAI,GAAG,YAAY,CAAC;QACpB,OAAO,GAAG,iBAAiB,CAAC;IAC9B,CAAC;IAED,MAAM,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,IAAI,GAAG,OAAO,CAAC;IAC3D,MAAM,gBAAgB,GAAG,SAAS,GAAG,EAAE,CAAC;IAExC,8BAA8B;IAC9B,MAAM,aAAa,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3D,OAAO;QACL,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAClC,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAClC,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1B,iBAAiB,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACtC,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QAChC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC9C,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;KACzC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { SafetyStockInput, SafetyStockResult } from './types.js';
2
+ /**
3
+ * Calculate Safety Stock and Reorder Point
4
+ *
5
+ * Safety Stock provides a buffer against variability in demand and lead time.
6
+ *
7
+ * Formula:
8
+ * σ_DDLT = sqrt(L × σ_d² + d² × σ_L²)
9
+ * Safety Stock = z × σ_DDLT
10
+ * ROP = (d × L) + Safety Stock
11
+ *
12
+ * Where:
13
+ * d = average daily demand
14
+ * σ_d = standard deviation of daily demand
15
+ * L = average lead time (days)
16
+ * σ_L = standard deviation of lead time
17
+ * z = z-score for desired service level
18
+ * σ_DDLT = standard deviation of demand during lead time
19
+ *
20
+ * @param input - Demand and lead time parameters with service level
21
+ * @returns Safety stock, reorder point, and related metrics
22
+ */
23
+ export declare function safetyStock(input: SafetyStockInput): SafetyStockResult;
24
+ //# sourceMappingURL=safetyStock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safetyStock.d.ts","sourceRoot":"","sources":["../../src/logistics/safetyStock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AA6DtE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,CA2BtE"}
@@ -0,0 +1,99 @@
1
+ import { roundTo } from '../utils.js';
2
+ /**
3
+ * Approximate inverse of the standard normal CDF (quantile function)
4
+ * Using Abramowitz & Stegun 26.2.23 rational approximation
5
+ *
6
+ * @param p - Probability (0 < p < 1)
7
+ * @returns z-score (standard normal quantile)
8
+ */
9
+ function normSInv(p) {
10
+ // Coefficients for the rational approximation
11
+ const a1 = -3.969683028665376e+01;
12
+ const a2 = 2.209460984245205e+02;
13
+ const a3 = -2.759285104469687e+02;
14
+ const a4 = 1.383577518672690e+02;
15
+ const a5 = -3.066479806614716e+01;
16
+ const a6 = 2.506628277459239e+00;
17
+ const b1 = -5.447609879822406e+01;
18
+ const b2 = 1.615858368580409e+02;
19
+ const b3 = -1.556989798598866e+02;
20
+ const b4 = 6.680131188771972e+01;
21
+ const b5 = -1.328068155288572e+01;
22
+ const c1 = -7.784894002430293e-03;
23
+ const c2 = -3.223964580411365e-01;
24
+ const c3 = -2.400758277161838e+00;
25
+ const c4 = -2.549732539343734e+00;
26
+ const c5 = 4.374664141464968e+00;
27
+ const c6 = 2.938163982698783e+00;
28
+ const d1 = 7.784695709041462e-03;
29
+ const d2 = 3.224671290700398e-01;
30
+ const d3 = 2.445134137142996e+00;
31
+ const d4 = 3.754408661907416e+00;
32
+ // Define break-points
33
+ const pLow = 0.02425;
34
+ const pHigh = 1 - pLow;
35
+ let q, r;
36
+ if (p < pLow) {
37
+ // Rational approximation for lower region
38
+ q = Math.sqrt(-2 * Math.log(p));
39
+ return (((((c1 * q + c2) * q + c3) * q + c4) * q + c5) * q + c6) /
40
+ ((((d1 * q + d2) * q + d3) * q + d4) * q + 1);
41
+ }
42
+ else if (p <= pHigh) {
43
+ // Rational approximation for central region
44
+ q = p - 0.5;
45
+ r = q * q;
46
+ return (((((a1 * r + a2) * r + a3) * r + a4) * r + a5) * r + a6) * q /
47
+ (((((b1 * r + b2) * r + b3) * r + b4) * r + b5) * r + 1);
48
+ }
49
+ else {
50
+ // Rational approximation for upper region
51
+ q = Math.sqrt(-2 * Math.log(1 - p));
52
+ return -(((((c1 * q + c2) * q + c3) * q + c4) * q + c5) * q + c6) /
53
+ ((((d1 * q + d2) * q + d3) * q + d4) * q + 1);
54
+ }
55
+ }
56
+ /**
57
+ * Calculate Safety Stock and Reorder Point
58
+ *
59
+ * Safety Stock provides a buffer against variability in demand and lead time.
60
+ *
61
+ * Formula:
62
+ * σ_DDLT = sqrt(L × σ_d² + d² × σ_L²)
63
+ * Safety Stock = z × σ_DDLT
64
+ * ROP = (d × L) + Safety Stock
65
+ *
66
+ * Where:
67
+ * d = average daily demand
68
+ * σ_d = standard deviation of daily demand
69
+ * L = average lead time (days)
70
+ * σ_L = standard deviation of lead time
71
+ * z = z-score for desired service level
72
+ * σ_DDLT = standard deviation of demand during lead time
73
+ *
74
+ * @param input - Demand and lead time parameters with service level
75
+ * @returns Safety stock, reorder point, and related metrics
76
+ */
77
+ export function safetyStock(input) {
78
+ const { avgDemand, demandStdDev, avgLeadTime, leadTimeStdDev, serviceLevel } = input;
79
+ // Calculate z-score for the desired service level
80
+ const zScore = normSInv(serviceLevel);
81
+ // Average demand during lead time
82
+ const demandDuringLeadTime = avgDemand * avgLeadTime;
83
+ // Standard deviation of demand during lead time (DDLT)
84
+ // σ_DDLT = sqrt(L × σ_d² + d² × σ_L²)
85
+ const varianceDemand = avgLeadTime * (demandStdDev ** 2);
86
+ const varianceLeadTime = (avgDemand ** 2) * (leadTimeStdDev ** 2);
87
+ const stdDevDDLT = Math.sqrt(varianceDemand + varianceLeadTime);
88
+ // Safety Stock = z × σ_DDLT
89
+ const safetyStockValue = zScore * stdDevDDLT;
90
+ // Reorder Point = Average DDLT + Safety Stock
91
+ const reorderPoint = demandDuringLeadTime + safetyStockValue;
92
+ return {
93
+ zScore: roundTo(zScore, 6),
94
+ safetyStock: roundTo(safetyStockValue, 0),
95
+ reorderPoint: roundTo(reorderPoint, 0),
96
+ demandDuringLeadTime: roundTo(demandDuringLeadTime, 0),
97
+ };
98
+ }
99
+ //# sourceMappingURL=safetyStock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safetyStock.js","sourceRoot":"","sources":["../../src/logistics/safetyStock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;;;;GAMG;AACH,SAAS,QAAQ,CAAC,CAAS;IACzB,8CAA8C;IAC9C,MAAM,EAAE,GAAG,CAAC,qBAAqB,CAAC;IAClC,MAAM,EAAE,GAAI,qBAAqB,CAAC;IAClC,MAAM,EAAE,GAAG,CAAC,qBAAqB,CAAC;IAClC,MAAM,EAAE,GAAI,qBAAqB,CAAC;IAClC,MAAM,EAAE,GAAG,CAAC,qBAAqB,CAAC;IAClC,MAAM,EAAE,GAAI,qBAAqB,CAAC;IAElC,MAAM,EAAE,GAAG,CAAC,qBAAqB,CAAC;IAClC,MAAM,EAAE,GAAI,qBAAqB,CAAC;IAClC,MAAM,EAAE,GAAG,CAAC,qBAAqB,CAAC;IAClC,MAAM,EAAE,GAAI,qBAAqB,CAAC;IAClC,MAAM,EAAE,GAAG,CAAC,qBAAqB,CAAC;IAElC,MAAM,EAAE,GAAG,CAAC,qBAAqB,CAAC;IAClC,MAAM,EAAE,GAAG,CAAC,qBAAqB,CAAC;IAClC,MAAM,EAAE,GAAG,CAAC,qBAAqB,CAAC;IAClC,MAAM,EAAE,GAAG,CAAC,qBAAqB,CAAC;IAClC,MAAM,EAAE,GAAI,qBAAqB,CAAC;IAClC,MAAM,EAAE,GAAI,qBAAqB,CAAC;IAElC,MAAM,EAAE,GAAI,qBAAqB,CAAC;IAClC,MAAM,EAAE,GAAI,qBAAqB,CAAC;IAClC,MAAM,EAAE,GAAI,qBAAqB,CAAC;IAClC,MAAM,EAAE,GAAI,qBAAqB,CAAC;IAElC,sBAAsB;IACtB,MAAM,IAAI,GAAG,OAAO,CAAC;IACrB,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC;IAEvB,IAAI,CAAS,EAAE,CAAS,CAAC;IAEzB,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;QACb,0CAA0C;QAC1C,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YACzD,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACvD,CAAC;SAAM,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,4CAA4C;QAC5C,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QACZ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC;YAC7D,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAClE,CAAC;SAAM,CAAC;QACN,0CAA0C;QAC1C,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YACzD,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,WAAW,CAAC,KAAuB;IACjD,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;IAErF,kDAAkD;IAClD,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;IAEtC,kCAAkC;IAClC,MAAM,oBAAoB,GAAG,SAAS,GAAG,WAAW,CAAC;IAErD,uDAAuD;IACvD,sCAAsC;IACtC,MAAM,cAAc,GAAG,WAAW,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;IACzD,MAAM,gBAAgB,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC;IAClE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,gBAAgB,CAAC,CAAC;IAEhE,4BAA4B;IAC5B,MAAM,gBAAgB,GAAG,MAAM,GAAG,UAAU,CAAC;IAE7C,8CAA8C;IAC9C,MAAM,YAAY,GAAG,oBAAoB,GAAG,gBAAgB,CAAC;IAE7D,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1B,WAAW,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;QACzC,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QACtC,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;KACvD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { ShippingInput, ShippingResult } from './types.js';
2
+ /**
3
+ * Calculate shipping cost estimate for different modes
4
+ *
5
+ * Supports multiple shipping modes:
6
+ * - Ocean FCL (Full Container Load): Fixed container rate
7
+ * - Ocean LCL (Less than Container Load): Per CBM or weight
8
+ * - Air Freight: Volumetric weight factor
9
+ * - Express Courier: Premium volumetric rates
10
+ * - Truck: Distance + weight based
11
+ *
12
+ * @param input - Shipment details
13
+ * @returns Cost estimate or null if invalid input
14
+ */
15
+ export declare function shipping(input: ShippingInput): ShippingResult | null;
16
+ //# sourceMappingURL=shipping.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shipping.d.ts","sourceRoot":"","sources":["../../src/logistics/shipping.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEhE;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,GAAG,IAAI,CAsGpE"}
@@ -0,0 +1,115 @@
1
+ import { roundTo } from '../utils.js';
2
+ /**
3
+ * Calculate shipping cost estimate for different modes
4
+ *
5
+ * Supports multiple shipping modes:
6
+ * - Ocean FCL (Full Container Load): Fixed container rate
7
+ * - Ocean LCL (Less than Container Load): Per CBM or weight
8
+ * - Air Freight: Volumetric weight factor
9
+ * - Express Courier: Premium volumetric rates
10
+ * - Truck: Distance + weight based
11
+ *
12
+ * @param input - Shipment details
13
+ * @returns Cost estimate or null if invalid input
14
+ */
15
+ export function shipping(input) {
16
+ const { mode, weight, volume, distance } = input;
17
+ if (weight <= 0 || volume <= 0)
18
+ return null;
19
+ let volumetricWeight;
20
+ let estimatedCost;
21
+ let transitDays;
22
+ let notes;
23
+ switch (mode) {
24
+ case 'ocean_fcl': {
25
+ volumetricWeight = roundTo((volume * 1000) / 6, 2);
26
+ const base = 1500;
27
+ const extra = weight > 10000 ? (weight - 10000) * 0.5 : 0;
28
+ estimatedCost = roundTo(base + extra, 2);
29
+ transitDays = '20-40 days';
30
+ notes = 'Based on 20ft container. For 40ft, approximately double the base rate.';
31
+ break;
32
+ }
33
+ case 'ocean_lcl': {
34
+ volumetricWeight = roundTo((volume * 1000) / 6, 2);
35
+ const byCbm = volume * 50;
36
+ const byWeight = weight * 0.15;
37
+ estimatedCost = roundTo(Math.max(byCbm, byWeight, 100), 2);
38
+ transitDays = '25-45 days';
39
+ notes = 'Charged per CBM or per kg, whichever is higher. Minimum charge $100.';
40
+ break;
41
+ }
42
+ case 'air': {
43
+ volumetricWeight = roundTo(volume * 167, 2);
44
+ const chargeableWt = Math.max(weight, volumetricWeight);
45
+ estimatedCost = roundTo(chargeableWt * 3.5, 2);
46
+ transitDays = '3-7 days';
47
+ notes = 'Volumetric factor: 1 CBM = 167 kg. Rate: $3.50/kg chargeable weight.';
48
+ const result = {
49
+ mode: 'Air Freight',
50
+ chargeableWeight: roundTo(chargeableWt, 2),
51
+ volumetricWeight,
52
+ estimatedCost,
53
+ costPerKg: roundTo(estimatedCost / chargeableWt, 2),
54
+ transitDays,
55
+ notes,
56
+ };
57
+ return result;
58
+ }
59
+ case 'express': {
60
+ volumetricWeight = roundTo(volume * 200, 2);
61
+ const chargeableWt = Math.max(weight, volumetricWeight);
62
+ estimatedCost = roundTo(Math.max(chargeableWt * 8, 50), 2);
63
+ transitDays = '2-5 days';
64
+ notes = 'Volumetric factor: 1 CBM = 200 kg. Rate: $8/kg. Minimum charge $50.';
65
+ const result = {
66
+ mode: 'Express Courier',
67
+ chargeableWeight: roundTo(chargeableWt, 2),
68
+ volumetricWeight,
69
+ estimatedCost,
70
+ costPerKg: roundTo(estimatedCost / chargeableWt, 2),
71
+ transitDays,
72
+ notes,
73
+ };
74
+ return result;
75
+ }
76
+ case 'truck': {
77
+ if (distance == null || distance <= 0)
78
+ return null;
79
+ volumetricWeight = roundTo(volume * 333, 2);
80
+ const chargeableWt = Math.max(weight, volumetricWeight);
81
+ estimatedCost = roundTo(distance * 1.5 + weight * 0.02, 2);
82
+ const transitDaysNum = Math.max(1, Math.ceil(distance / 500));
83
+ transitDays = transitDaysNum === 1 ? '1 day' : `${transitDaysNum}-${transitDaysNum + 1} days`;
84
+ notes = `Rate: $1.50/km + $0.02/kg. Estimated ~${roundTo(distance / 500, 1)} driving days at 500 km/day.`;
85
+ const result = {
86
+ mode: 'Truck',
87
+ chargeableWeight: roundTo(chargeableWt, 2),
88
+ volumetricWeight,
89
+ estimatedCost,
90
+ costPerKg: roundTo(estimatedCost / chargeableWt, 2),
91
+ transitDays,
92
+ notes,
93
+ };
94
+ return result;
95
+ }
96
+ default:
97
+ return null;
98
+ }
99
+ // For ocean modes
100
+ const chargeableWeight = roundTo(Math.max(weight, volumetricWeight), 2);
101
+ const modeLabels = {
102
+ ocean_fcl: 'Ocean FCL (20ft)',
103
+ ocean_lcl: 'Ocean LCL',
104
+ };
105
+ return {
106
+ mode: modeLabels[mode] ?? mode,
107
+ chargeableWeight,
108
+ volumetricWeight,
109
+ estimatedCost,
110
+ costPerKg: roundTo(estimatedCost / chargeableWeight, 2),
111
+ transitDays,
112
+ notes,
113
+ };
114
+ }
115
+ //# sourceMappingURL=shipping.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shipping.js","sourceRoot":"","sources":["../../src/logistics/shipping.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { TspInput, TspResult } from './types.js';
2
+ /**
3
+ * Solve the Traveling Salesman Problem
4
+ *
5
+ * Uses nearest neighbor heuristic with 2-opt improvement.
6
+ * For small instances (<=10 nodes), also provides optimal solution via brute force.
7
+ *
8
+ * @param input - Array of nodes with x, y coordinates
9
+ * @returns Tour information and distances
10
+ */
11
+ export declare function tsp(input: TspInput): TspResult | null;
12
+ //# sourceMappingURL=tsp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tsp.d.ts","sourceRoot":"","sources":["../../src/logistics/tsp.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAW,MAAM,YAAY,CAAC;AAyG/D;;;;;;;;GAQG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,GAAG,IAAI,CAoDrD"}
@@ -0,0 +1,166 @@
1
+ import { roundTo } from '../utils.js';
2
+ /**
3
+ * Calculate Euclidean distance between two nodes
4
+ */
5
+ function dist(a, b) {
6
+ return Math.sqrt((a.x - b.x) ** 2 + (a.y - b.y) ** 2);
7
+ }
8
+ /**
9
+ * Calculate total tour distance
10
+ */
11
+ function tourDistance(nodes, tour) {
12
+ let d = 0;
13
+ for (let i = 0; i < tour.length; i++) {
14
+ d += dist(nodes[tour[i]], nodes[tour[(i + 1) % tour.length]]);
15
+ }
16
+ return d;
17
+ }
18
+ /**
19
+ * Nearest neighbor heuristic for TSP
20
+ */
21
+ function nearestNeighbor(nodes, start) {
22
+ const n = nodes.length;
23
+ const visited = new Uint8Array(n);
24
+ const tour = [start];
25
+ visited[start] = 1;
26
+ for (let step = 1; step < n; step++) {
27
+ const current = tour[tour.length - 1];
28
+ let bestDist = Infinity;
29
+ let bestIdx = -1;
30
+ for (let j = 0; j < n; j++) {
31
+ if (!visited[j]) {
32
+ const d = dist(nodes[current], nodes[j]);
33
+ if (d < bestDist) {
34
+ bestDist = d;
35
+ bestIdx = j;
36
+ }
37
+ }
38
+ }
39
+ tour.push(bestIdx);
40
+ visited[bestIdx] = 1;
41
+ }
42
+ return tour;
43
+ }
44
+ /**
45
+ * 2-opt local improvement for TSP
46
+ */
47
+ function twoOpt(nodes, tour) {
48
+ const n = tour.length;
49
+ const result = [...tour];
50
+ let improved = true;
51
+ while (improved) {
52
+ improved = false;
53
+ for (let i = 0; i < n - 1; i++) {
54
+ for (let j = i + 2; j < n; j++) {
55
+ if (i === 0 && j === n - 1)
56
+ continue; // skip full reversal
57
+ const a = result[i], b = result[i + 1];
58
+ const c = result[j], d = result[(j + 1) % n];
59
+ const oldDist = dist(nodes[a], nodes[b]) + dist(nodes[c], nodes[d]);
60
+ const newDist = dist(nodes[a], nodes[c]) + dist(nodes[b], nodes[d]);
61
+ if (newDist < oldDist - 1e-10) {
62
+ // reverse segment [i+1 .. j]
63
+ let left = i + 1, right = j;
64
+ while (left < right) {
65
+ [result[left], result[right]] = [result[right], result[left]];
66
+ left++;
67
+ right--;
68
+ }
69
+ improved = true;
70
+ }
71
+ }
72
+ }
73
+ }
74
+ return result;
75
+ }
76
+ /**
77
+ * Brute force exact solution for small instances
78
+ */
79
+ function bruteForce(nodes) {
80
+ if (nodes.length > 10)
81
+ return null;
82
+ const n = nodes.length;
83
+ const indices = Array.from({ length: n - 1 }, (_, i) => i + 1);
84
+ let bestDist = Infinity;
85
+ let bestTour = [];
86
+ // Generate all permutations of indices (nodes 1..n-1, starting from 0)
87
+ function permute(arr, l) {
88
+ if (l === arr.length) {
89
+ const tour = [0, ...arr];
90
+ const d = tourDistance(nodes, tour);
91
+ if (d < bestDist) {
92
+ bestDist = d;
93
+ bestTour = [...tour];
94
+ }
95
+ return;
96
+ }
97
+ for (let i = l; i < arr.length; i++) {
98
+ [arr[l], arr[i]] = [arr[i], arr[l]];
99
+ permute(arr, l + 1);
100
+ [arr[l], arr[i]] = [arr[i], arr[l]];
101
+ }
102
+ }
103
+ permute(indices, 0);
104
+ return { tour: bestTour, distance: bestDist };
105
+ }
106
+ /**
107
+ * Solve the Traveling Salesman Problem
108
+ *
109
+ * Uses nearest neighbor heuristic with 2-opt improvement.
110
+ * For small instances (<=10 nodes), also provides optimal solution via brute force.
111
+ *
112
+ * @param input - Array of nodes with x, y coordinates
113
+ * @returns Tour information and distances
114
+ */
115
+ export function tsp(input) {
116
+ const { nodes } = input;
117
+ if (nodes.length < 2) {
118
+ if (nodes.length === 1)
119
+ return {
120
+ nnTour: [0], nnDistance: 0, optimizedTour: [0], optimizedDistance: 0,
121
+ improvementPercent: 0,
122
+ };
123
+ return null;
124
+ }
125
+ if (nodes.length === 2) {
126
+ return {
127
+ nnTour: [0, 1], nnDistance: roundTo(2 * dist(nodes[0], nodes[1]), 2),
128
+ optimizedTour: [0, 1], optimizedDistance: roundTo(2 * dist(nodes[0], nodes[1]), 2),
129
+ improvementPercent: 0,
130
+ };
131
+ }
132
+ // Try all starting points for NN, keep best
133
+ let bestNNTour = [];
134
+ let bestNNDist = Infinity;
135
+ for (let s = 0; s < nodes.length; s++) {
136
+ const tour = nearestNeighbor(nodes, s);
137
+ const d = tourDistance(nodes, tour);
138
+ if (d < bestNNDist) {
139
+ bestNNDist = d;
140
+ bestNNTour = tour;
141
+ }
142
+ }
143
+ // 2-opt improvement
144
+ const optimizedTour = twoOpt(nodes, bestNNTour);
145
+ const optimizedDistance = tourDistance(nodes, optimizedTour);
146
+ const improvementPercent = bestNNDist > 0
147
+ ? roundTo(((bestNNDist - optimizedDistance) / bestNNDist) * 100, 2)
148
+ : 0;
149
+ const result = {
150
+ nnTour: bestNNTour,
151
+ nnDistance: roundTo(bestNNDist, 2),
152
+ optimizedTour,
153
+ optimizedDistance: roundTo(optimizedDistance, 2),
154
+ improvementPercent,
155
+ };
156
+ // Brute force for small instances
157
+ const bf = bruteForce(nodes);
158
+ if (bf) {
159
+ result.optimalDistance = roundTo(bf.distance, 2);
160
+ result.optimalityGap = result.optimizedDistance > 0
161
+ ? roundTo(((optimizedDistance - bf.distance) / bf.distance) * 100, 2)
162
+ : 0;
163
+ }
164
+ return result;
165
+ }
166
+ //# sourceMappingURL=tsp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tsp.js","sourceRoot":"","sources":["../../src/logistics/tsp.ts"],"names":[],"mappings":"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"}