formulab 0.5.0 → 0.9.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 (258) hide show
  1. package/CHANGELOG.md +84 -0
  2. package/README.md +162 -31
  3. package/dist/automotive/chargingLoss.d.ts +15 -0
  4. package/dist/automotive/chargingLoss.d.ts.map +1 -0
  5. package/dist/automotive/chargingLoss.js +62 -0
  6. package/dist/automotive/chargingLoss.js.map +1 -0
  7. package/dist/automotive/index.d.ts +2 -1
  8. package/dist/automotive/index.d.ts.map +1 -1
  9. package/dist/automotive/index.js +1 -0
  10. package/dist/automotive/index.js.map +1 -1
  11. package/dist/automotive/types.d.ts +23 -0
  12. package/dist/automotive/types.d.ts.map +1 -1
  13. package/dist/battery/guards.d.ts +7 -0
  14. package/dist/battery/guards.d.ts.map +1 -0
  15. package/dist/battery/guards.js +17 -0
  16. package/dist/battery/guards.js.map +1 -0
  17. package/dist/battery/index.d.ts +1 -0
  18. package/dist/battery/index.d.ts.map +1 -1
  19. package/dist/battery/index.js +2 -0
  20. package/dist/battery/index.js.map +1 -1
  21. package/dist/chemical/flowControl.d.ts +14 -0
  22. package/dist/chemical/flowControl.d.ts.map +1 -0
  23. package/dist/chemical/flowControl.js +69 -0
  24. package/dist/chemical/flowControl.js.map +1 -0
  25. package/dist/chemical/guards.d.ts +17 -0
  26. package/dist/chemical/guards.d.ts.map +1 -0
  27. package/dist/chemical/guards.js +54 -0
  28. package/dist/chemical/guards.js.map +1 -0
  29. package/dist/chemical/index.d.ts +5 -1
  30. package/dist/chemical/index.d.ts.map +1 -1
  31. package/dist/chemical/index.js +5 -0
  32. package/dist/chemical/index.js.map +1 -1
  33. package/dist/chemical/pid.d.ts +14 -0
  34. package/dist/chemical/pid.d.ts.map +1 -0
  35. package/dist/chemical/pid.js +103 -0
  36. package/dist/chemical/pid.js.map +1 -0
  37. package/dist/chemical/reliefValve.d.ts +14 -0
  38. package/dist/chemical/reliefValve.d.ts.map +1 -0
  39. package/dist/chemical/reliefValve.js +98 -0
  40. package/dist/chemical/reliefValve.js.map +1 -0
  41. package/dist/chemical/types.d.ts +63 -0
  42. package/dist/chemical/types.d.ts.map +1 -1
  43. package/dist/construction/guards.d.ts +7 -0
  44. package/dist/construction/guards.d.ts.map +1 -0
  45. package/dist/construction/guards.js +31 -0
  46. package/dist/construction/guards.js.map +1 -0
  47. package/dist/construction/index.d.ts +1 -0
  48. package/dist/construction/index.d.ts.map +1 -1
  49. package/dist/construction/index.js +2 -0
  50. package/dist/construction/index.js.map +1 -1
  51. package/dist/electronics/guards.d.ts +7 -0
  52. package/dist/electronics/guards.d.ts.map +1 -0
  53. package/dist/electronics/guards.js +17 -0
  54. package/dist/electronics/guards.js.map +1 -0
  55. package/dist/electronics/index.d.ts +1 -0
  56. package/dist/electronics/index.d.ts.map +1 -1
  57. package/dist/electronics/index.js +2 -0
  58. package/dist/electronics/index.js.map +1 -1
  59. package/dist/energy/boilerEfficiency.d.ts +13 -0
  60. package/dist/energy/boilerEfficiency.d.ts.map +1 -0
  61. package/dist/energy/boilerEfficiency.js +46 -0
  62. package/dist/energy/boilerEfficiency.js.map +1 -0
  63. package/dist/energy/cusum.d.ts +15 -0
  64. package/dist/energy/cusum.d.ts.map +1 -0
  65. package/dist/energy/cusum.js +71 -0
  66. package/dist/energy/cusum.js.map +1 -0
  67. package/dist/energy/degreeDay.d.ts +13 -0
  68. package/dist/energy/degreeDay.d.ts.map +1 -0
  69. package/dist/energy/degreeDay.js +46 -0
  70. package/dist/energy/degreeDay.js.map +1 -0
  71. package/dist/energy/heatPump.d.ts +13 -0
  72. package/dist/energy/heatPump.d.ts.map +1 -0
  73. package/dist/energy/heatPump.js +48 -0
  74. package/dist/energy/heatPump.js.map +1 -0
  75. package/dist/energy/index.d.ts +9 -1
  76. package/dist/energy/index.d.ts.map +1 -1
  77. package/dist/energy/index.js +8 -0
  78. package/dist/energy/index.js.map +1 -1
  79. package/dist/energy/insulationRoi.d.ts +14 -0
  80. package/dist/energy/insulationRoi.d.ts.map +1 -0
  81. package/dist/energy/insulationRoi.js +52 -0
  82. package/dist/energy/insulationRoi.js.map +1 -0
  83. package/dist/energy/ledRoi.d.ts +14 -0
  84. package/dist/energy/ledRoi.d.ts.map +1 -0
  85. package/dist/energy/ledRoi.js +49 -0
  86. package/dist/energy/ledRoi.js.map +1 -0
  87. package/dist/energy/transformerLoss.d.ts +13 -0
  88. package/dist/energy/transformerLoss.d.ts.map +1 -0
  89. package/dist/energy/transformerLoss.js +63 -0
  90. package/dist/energy/transformerLoss.js.map +1 -0
  91. package/dist/energy/types.d.ts +168 -0
  92. package/dist/energy/types.d.ts.map +1 -1
  93. package/dist/energy/windOutput.d.ts +14 -0
  94. package/dist/energy/windOutput.d.ts.map +1 -0
  95. package/dist/energy/windOutput.js +77 -0
  96. package/dist/energy/windOutput.js.map +1 -0
  97. package/dist/food/index.d.ts +3 -1
  98. package/dist/food/index.d.ts.map +1 -1
  99. package/dist/food/index.js +2 -0
  100. package/dist/food/index.js.map +1 -1
  101. package/dist/food/stabilityStudy.d.ts +15 -0
  102. package/dist/food/stabilityStudy.d.ts.map +1 -0
  103. package/dist/food/stabilityStudy.js +92 -0
  104. package/dist/food/stabilityStudy.js.map +1 -0
  105. package/dist/food/types.d.ts +43 -0
  106. package/dist/food/types.d.ts.map +1 -1
  107. package/dist/food/waterActivity.d.ts +17 -0
  108. package/dist/food/waterActivity.d.ts.map +1 -0
  109. package/dist/food/waterActivity.js +63 -0
  110. package/dist/food/waterActivity.js.map +1 -0
  111. package/dist/logistics/abcAnalysis.d.ts +15 -0
  112. package/dist/logistics/abcAnalysis.d.ts.map +1 -0
  113. package/dist/logistics/abcAnalysis.js +101 -0
  114. package/dist/logistics/abcAnalysis.js.map +1 -0
  115. package/dist/logistics/index.d.ts +4 -1
  116. package/dist/logistics/index.d.ts.map +1 -1
  117. package/dist/logistics/index.js +3 -0
  118. package/dist/logistics/index.js.map +1 -1
  119. package/dist/logistics/inventoryTurnover.d.ts +13 -0
  120. package/dist/logistics/inventoryTurnover.d.ts.map +1 -0
  121. package/dist/logistics/inventoryTurnover.js +36 -0
  122. package/dist/logistics/inventoryTurnover.js.map +1 -0
  123. package/dist/logistics/loadCapacity.d.ts +13 -0
  124. package/dist/logistics/loadCapacity.d.ts.map +1 -0
  125. package/dist/logistics/loadCapacity.js +46 -0
  126. package/dist/logistics/loadCapacity.js.map +1 -0
  127. package/dist/logistics/types.d.ts +78 -0
  128. package/dist/logistics/types.d.ts.map +1 -1
  129. package/dist/metal/guards.d.ts +12 -0
  130. package/dist/metal/guards.d.ts.map +1 -0
  131. package/dist/metal/guards.js +36 -0
  132. package/dist/metal/guards.js.map +1 -0
  133. package/dist/metal/index.d.ts +1 -0
  134. package/dist/metal/index.d.ts.map +1 -1
  135. package/dist/metal/index.js +2 -0
  136. package/dist/metal/index.js.map +1 -1
  137. package/dist/quality/cmk.d.ts +17 -0
  138. package/dist/quality/cmk.d.ts.map +1 -0
  139. package/dist/quality/cmk.js +43 -0
  140. package/dist/quality/cmk.js.map +1 -0
  141. package/dist/quality/gageRR.d.ts +18 -0
  142. package/dist/quality/gageRR.d.ts.map +1 -0
  143. package/dist/quality/gageRR.js +110 -0
  144. package/dist/quality/gageRR.js.map +1 -0
  145. package/dist/quality/index.d.ts +5 -1
  146. package/dist/quality/index.d.ts.map +1 -1
  147. package/dist/quality/index.js +4 -0
  148. package/dist/quality/index.js.map +1 -1
  149. package/dist/quality/paretoAnalysis.d.ts +15 -0
  150. package/dist/quality/paretoAnalysis.d.ts.map +1 -0
  151. package/dist/quality/paretoAnalysis.js +92 -0
  152. package/dist/quality/paretoAnalysis.js.map +1 -0
  153. package/dist/quality/types.d.ts +91 -0
  154. package/dist/quality/types.d.ts.map +1 -1
  155. package/dist/quality/weibull.d.ts +17 -0
  156. package/dist/quality/weibull.d.ts.map +1 -0
  157. package/dist/quality/weibull.js +106 -0
  158. package/dist/quality/weibull.js.map +1 -0
  159. package/dist/safety/arcFlash.d.ts +14 -0
  160. package/dist/safety/arcFlash.d.ts.map +1 -0
  161. package/dist/safety/arcFlash.js +90 -0
  162. package/dist/safety/arcFlash.js.map +1 -0
  163. package/dist/safety/confinedSpace.d.ts +15 -0
  164. package/dist/safety/confinedSpace.d.ts.map +1 -0
  165. package/dist/safety/confinedSpace.js +116 -0
  166. package/dist/safety/confinedSpace.js.map +1 -0
  167. package/dist/safety/ergonomicRisk.d.ts +9 -0
  168. package/dist/safety/ergonomicRisk.d.ts.map +1 -0
  169. package/dist/safety/ergonomicRisk.js +208 -0
  170. package/dist/safety/ergonomicRisk.js.map +1 -0
  171. package/dist/safety/illuminance.d.ts +13 -0
  172. package/dist/safety/illuminance.d.ts.map +1 -0
  173. package/dist/safety/illuminance.js +91 -0
  174. package/dist/safety/illuminance.js.map +1 -0
  175. package/dist/safety/index.d.ts +8 -1
  176. package/dist/safety/index.d.ts.map +1 -1
  177. package/dist/safety/index.js +7 -0
  178. package/dist/safety/index.js.map +1 -1
  179. package/dist/safety/ladderAngle.d.ts +16 -0
  180. package/dist/safety/ladderAngle.d.ts.map +1 -0
  181. package/dist/safety/ladderAngle.js +87 -0
  182. package/dist/safety/ladderAngle.js.map +1 -0
  183. package/dist/safety/lel.d.ts +14 -0
  184. package/dist/safety/lel.d.ts.map +1 -0
  185. package/dist/safety/lel.js +66 -0
  186. package/dist/safety/lel.js.map +1 -0
  187. package/dist/safety/thermalComfort.d.ts +14 -0
  188. package/dist/safety/thermalComfort.d.ts.map +1 -0
  189. package/dist/safety/thermalComfort.js +96 -0
  190. package/dist/safety/thermalComfort.js.map +1 -0
  191. package/dist/safety/types.d.ts +164 -0
  192. package/dist/safety/types.d.ts.map +1 -1
  193. package/dist/utility/bilinearInterpolation.d.ts +3 -0
  194. package/dist/utility/bilinearInterpolation.d.ts.map +1 -0
  195. package/dist/utility/bilinearInterpolation.js +47 -0
  196. package/dist/utility/bilinearInterpolation.js.map +1 -0
  197. package/dist/utility/correlation.d.ts +3 -0
  198. package/dist/utility/correlation.d.ts.map +1 -0
  199. package/dist/utility/correlation.js +29 -0
  200. package/dist/utility/correlation.js.map +1 -0
  201. package/dist/utility/depreciation.d.ts +3 -0
  202. package/dist/utility/depreciation.d.ts.map +1 -0
  203. package/dist/utility/depreciation.js +57 -0
  204. package/dist/utility/depreciation.js.map +1 -0
  205. package/dist/utility/histogram.d.ts +3 -0
  206. package/dist/utility/histogram.d.ts.map +1 -0
  207. package/dist/utility/histogram.js +42 -0
  208. package/dist/utility/histogram.js.map +1 -0
  209. package/dist/utility/index.d.ts +15 -1
  210. package/dist/utility/index.d.ts.map +1 -1
  211. package/dist/utility/index.js +14 -0
  212. package/dist/utility/index.js.map +1 -1
  213. package/dist/utility/lcc.d.ts +3 -0
  214. package/dist/utility/lcc.d.ts.map +1 -0
  215. package/dist/utility/lcc.js +26 -0
  216. package/dist/utility/lcc.js.map +1 -0
  217. package/dist/utility/linearInterpolation.d.ts +3 -0
  218. package/dist/utility/linearInterpolation.d.ts.map +1 -0
  219. package/dist/utility/linearInterpolation.js +42 -0
  220. package/dist/utility/linearInterpolation.js.map +1 -0
  221. package/dist/utility/movingAverage.d.ts +3 -0
  222. package/dist/utility/movingAverage.d.ts.map +1 -0
  223. package/dist/utility/movingAverage.js +41 -0
  224. package/dist/utility/movingAverage.js.map +1 -0
  225. package/dist/utility/normalize.d.ts +3 -0
  226. package/dist/utility/normalize.d.ts.map +1 -0
  227. package/dist/utility/normalize.js +35 -0
  228. package/dist/utility/normalize.js.map +1 -0
  229. package/dist/utility/npv.d.ts +3 -0
  230. package/dist/utility/npv.d.ts.map +1 -0
  231. package/dist/utility/npv.js +45 -0
  232. package/dist/utility/npv.js.map +1 -0
  233. package/dist/utility/percentile.d.ts +3 -0
  234. package/dist/utility/percentile.d.ts.map +1 -0
  235. package/dist/utility/percentile.js +24 -0
  236. package/dist/utility/percentile.js.map +1 -0
  237. package/dist/utility/regression.d.ts +3 -0
  238. package/dist/utility/regression.d.ts.map +1 -0
  239. package/dist/utility/regression.js +40 -0
  240. package/dist/utility/regression.js.map +1 -0
  241. package/dist/utility/roi.d.ts +3 -0
  242. package/dist/utility/roi.d.ts.map +1 -0
  243. package/dist/utility/roi.js +19 -0
  244. package/dist/utility/roi.js.map +1 -0
  245. package/dist/utility/statistics.d.ts +3 -0
  246. package/dist/utility/statistics.d.ts.map +1 -0
  247. package/dist/utility/statistics.js +34 -0
  248. package/dist/utility/statistics.js.map +1 -0
  249. package/dist/utility/types.d.ts +213 -1
  250. package/dist/utility/types.d.ts.map +1 -1
  251. package/dist/utility/unit.d.ts.map +1 -1
  252. package/dist/utility/unit.js +51 -0
  253. package/dist/utility/unit.js.map +1 -1
  254. package/dist/utility/weightedScore.d.ts +3 -0
  255. package/dist/utility/weightedScore.d.ts.map +1 -0
  256. package/dist/utility/weightedScore.js +35 -0
  257. package/dist/utility/weightedScore.js.map +1 -0
  258. package/package.json +3 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformerLoss.d.ts","sourceRoot":"","sources":["../../src/energy/transformerLoss.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAE9E;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,qBAAqB,CAmElF"}
@@ -0,0 +1,63 @@
1
+ import { roundTo } from '../utils.js';
2
+ /**
3
+ * Calculate transformer losses and efficiency.
4
+ *
5
+ * totalLoss = coreLoss + copperLoss × loadFraction²
6
+ * efficiency = (outputPower / (outputPower + totalLoss)) × 100
7
+ * optimalLoad = √(coreLoss / copperLoss)
8
+ *
9
+ * @param input - Transformer parameters
10
+ * @returns Transformer loss result with efficiency and optimal loading
11
+ */
12
+ export function transformerLoss(input) {
13
+ const { ratedCapacity, coreLoss, copperLoss, loadFraction, powerFactor = 0.85, operatingHours, energyCost, } = input;
14
+ if (ratedCapacity <= 0 || coreLoss < 0 || copperLoss < 0) {
15
+ return {
16
+ outputPower: 0,
17
+ totalLoss: 0,
18
+ coreLossAtLoad: 0,
19
+ copperLossAtLoad: 0,
20
+ efficiency: 0,
21
+ optimalLoadFraction: 0,
22
+ annualLossEnergy: null,
23
+ annualLossCost: null,
24
+ };
25
+ }
26
+ // Output power in W = kVA × loadFraction × powerFactor × 1000
27
+ const outputPower = ratedCapacity * loadFraction * powerFactor * 1000;
28
+ // Core loss is constant regardless of load
29
+ const coreLossAtLoad = coreLoss;
30
+ // Copper loss scales with square of load fraction
31
+ const copperLossAtLoad = copperLoss * loadFraction * loadFraction;
32
+ const totalLoss = coreLossAtLoad + copperLossAtLoad;
33
+ // Efficiency = output / (output + losses) × 100
34
+ let efficiency = 0;
35
+ if (outputPower + totalLoss > 0) {
36
+ efficiency = (outputPower / (outputPower + totalLoss)) * 100;
37
+ }
38
+ // Optimal load fraction where core loss = copper loss at load
39
+ // coreLoss = copperLoss × k² → k = √(coreLoss / copperLoss)
40
+ let optimalLoadFraction = 0;
41
+ if (copperLoss > 0) {
42
+ optimalLoadFraction = Math.sqrt(coreLoss / copperLoss);
43
+ }
44
+ let annualLossEnergy = null;
45
+ let annualLossCost = null;
46
+ if (operatingHours !== undefined) {
47
+ annualLossEnergy = (totalLoss * operatingHours) / 1000; // W·h → kWh
48
+ if (energyCost !== undefined) {
49
+ annualLossCost = annualLossEnergy * energyCost;
50
+ }
51
+ }
52
+ return {
53
+ outputPower: roundTo(outputPower, 4),
54
+ totalLoss: roundTo(totalLoss, 4),
55
+ coreLossAtLoad: roundTo(coreLossAtLoad, 4),
56
+ copperLossAtLoad: roundTo(copperLossAtLoad, 4),
57
+ efficiency: roundTo(efficiency, 4),
58
+ optimalLoadFraction: roundTo(optimalLoadFraction, 4),
59
+ annualLossEnergy: annualLossEnergy !== null ? roundTo(annualLossEnergy, 4) : null,
60
+ annualLossCost: annualLossCost !== null ? roundTo(annualLossCost, 2) : null,
61
+ };
62
+ }
63
+ //# sourceMappingURL=transformerLoss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformerLoss.js","sourceRoot":"","sources":["../../src/energy/transformerLoss.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,KAA2B;IACzD,MAAM,EACJ,aAAa,EACb,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,WAAW,GAAG,IAAI,EAClB,cAAc,EACd,UAAU,GACX,GAAG,KAAK,CAAC;IAEV,IAAI,aAAa,IAAI,CAAC,IAAI,QAAQ,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACzD,OAAO;YACL,WAAW,EAAE,CAAC;YACd,SAAS,EAAE,CAAC;YACZ,cAAc,EAAE,CAAC;YACjB,gBAAgB,EAAE,CAAC;YACnB,UAAU,EAAE,CAAC;YACb,mBAAmB,EAAE,CAAC;YACtB,gBAAgB,EAAE,IAAI;YACtB,cAAc,EAAE,IAAI;SACrB,CAAC;IACJ,CAAC;IAED,8DAA8D;IAC9D,MAAM,WAAW,GAAG,aAAa,GAAG,YAAY,GAAG,WAAW,GAAG,IAAI,CAAC;IAEtE,2CAA2C;IAC3C,MAAM,cAAc,GAAG,QAAQ,CAAC;IAEhC,kDAAkD;IAClD,MAAM,gBAAgB,GAAG,UAAU,GAAG,YAAY,GAAG,YAAY,CAAC;IAElE,MAAM,SAAS,GAAG,cAAc,GAAG,gBAAgB,CAAC;IAEpD,gDAAgD;IAChD,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,WAAW,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC;QAChC,UAAU,GAAG,CAAC,WAAW,GAAG,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC;IAC/D,CAAC;IAED,8DAA8D;IAC9D,4DAA4D;IAC5D,IAAI,mBAAmB,GAAG,CAAC,CAAC;IAC5B,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACnB,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,gBAAgB,GAAkB,IAAI,CAAC;IAC3C,IAAI,cAAc,GAAkB,IAAI,CAAC;IACzC,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,gBAAgB,GAAG,CAAC,SAAS,GAAG,cAAc,CAAC,GAAG,IAAI,CAAC,CAAC,YAAY;QACpE,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,cAAc,GAAG,gBAAgB,GAAG,UAAU,CAAC;QACjD,CAAC;IACH,CAAC;IAED,OAAO;QACL,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QACpC,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QAChC,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;QAC1C,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC9C,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAClC,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;QACpD,gBAAgB,EAAE,gBAAgB,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;QACjF,cAAc,EAAE,cAAc,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;KAC5E,CAAC;AACJ,CAAC"}
@@ -136,4 +136,172 @@ export interface VfdSavingsResult {
136
136
  paybackYears: number;
137
137
  co2ReductionKg: number;
138
138
  }
139
+ /**
140
+ * Boiler Efficiency Calculator Types
141
+ */
142
+ export interface BoilerEfficiencyInput {
143
+ fuelRate: number;
144
+ fuelHeatValue: number;
145
+ steamOutput: number;
146
+ steamEnthalpy: number;
147
+ feedwaterEnthalpy: number;
148
+ operatingHours?: number;
149
+ fuelCost?: number;
150
+ }
151
+ export interface BoilerEfficiencyResult {
152
+ heatInput: number;
153
+ heatOutput: number;
154
+ heatLoss: number;
155
+ efficiency: number;
156
+ annualFuelCost: number | null;
157
+ annualHeatLoss: number | null;
158
+ }
159
+ /**
160
+ * Transformer Loss Calculator Types
161
+ */
162
+ export interface TransformerLossInput {
163
+ ratedCapacity: number;
164
+ coreLoss: number;
165
+ copperLoss: number;
166
+ loadFraction: number;
167
+ powerFactor?: number;
168
+ operatingHours?: number;
169
+ energyCost?: number;
170
+ }
171
+ export interface TransformerLossResult {
172
+ outputPower: number;
173
+ totalLoss: number;
174
+ coreLossAtLoad: number;
175
+ copperLossAtLoad: number;
176
+ efficiency: number;
177
+ optimalLoadFraction: number;
178
+ annualLossEnergy: number | null;
179
+ annualLossCost: number | null;
180
+ }
181
+ /**
182
+ * Insulation ROI Calculator Types
183
+ */
184
+ export interface InsulationRoiInput {
185
+ surfaceArea: number;
186
+ tempDifference: number;
187
+ insulationK: number;
188
+ insulationThickness: number;
189
+ surfaceCoefficient?: number;
190
+ operatingHours: number;
191
+ energyCost: number;
192
+ boilerEfficiency?: number;
193
+ installationCost?: number;
194
+ }
195
+ export interface InsulationRoiResult {
196
+ bareHeatLoss: number;
197
+ insulatedHeatLoss: number;
198
+ heatSaved: number;
199
+ heatLossReduction: number;
200
+ annualEnergySaved: number;
201
+ annualCostSaved: number;
202
+ paybackPeriod: number | null;
203
+ }
204
+ /**
205
+ * LED ROI Calculator Types
206
+ */
207
+ export interface LedRoiInput {
208
+ fixtureCount: number;
209
+ oldWatts: number;
210
+ newWatts: number;
211
+ operatingHours: number;
212
+ electricityRate: number;
213
+ fixtureCost?: number;
214
+ installationCost?: number;
215
+ co2Factor?: number;
216
+ }
217
+ export interface LedRoiResult {
218
+ oldAnnualEnergy: number;
219
+ newAnnualEnergy: number;
220
+ annualEnergySaved: number;
221
+ energyReduction: number;
222
+ annualCostSaved: number;
223
+ totalInvestment: number;
224
+ paybackPeriod: number | null;
225
+ co2Saved: number;
226
+ }
227
+ /**
228
+ * Heat Pump COP Calculator Types
229
+ */
230
+ export interface HeatPumpInput {
231
+ sourceTemp: number;
232
+ sinkTemp: number;
233
+ heatingCapacity: number;
234
+ compressorPower: number;
235
+ auxiliaryPower?: number;
236
+ operatingHours?: number;
237
+ electricityRate?: number;
238
+ boilerEfficiency?: number;
239
+ fuelCost?: number;
240
+ }
241
+ export interface HeatPumpResult {
242
+ cop: number;
243
+ copCarnot: number;
244
+ efficiency: number;
245
+ annualElectricity: number | null;
246
+ annualElecCost: number | null;
247
+ annualFuelCost: number | null;
248
+ annualSavings: number | null;
249
+ }
250
+ /**
251
+ * Degree Day (HDD/CDD) Calculator Types
252
+ */
253
+ export interface DegreeDayInput {
254
+ dailyTemps: number[];
255
+ baseHeating?: number;
256
+ baseCooling?: number;
257
+ }
258
+ export interface DegreeDayResult {
259
+ hdd: number;
260
+ cdd: number;
261
+ totalDays: number;
262
+ heatingDays: number;
263
+ coolingDays: number;
264
+ neutralDays: number;
265
+ avgTemp: number;
266
+ }
267
+ /**
268
+ * Wind Output Calculator Types
269
+ */
270
+ export interface WindOutputInput {
271
+ ratedPower: number;
272
+ hubHeight: number;
273
+ averageWindSpeed: number;
274
+ referenceHeight?: number;
275
+ cutInSpeed?: number;
276
+ cutOutSpeed?: number;
277
+ ratedSpeed?: number;
278
+ rotorDiameter?: number;
279
+ terrainRoughness?: number;
280
+ }
281
+ export interface WindOutputResult {
282
+ adjustedWindSpeed: number;
283
+ capacityFactor: number;
284
+ annualOutput: number;
285
+ monthlyOutput: number;
286
+ dailyOutput: number;
287
+ sweptArea: number | null;
288
+ betzLimit: number | null;
289
+ }
290
+ /**
291
+ * CUSUM (Cumulative Sum) Energy Anomaly Detection Types
292
+ */
293
+ export interface CusumInput {
294
+ values: number[];
295
+ target: number;
296
+ allowance?: number;
297
+ decisionInterval?: number;
298
+ stdDev?: number;
299
+ }
300
+ export interface CusumResult {
301
+ cusumPositive: number[];
302
+ cusumNegative: number[];
303
+ signals: number[];
304
+ isOutOfControl: boolean;
305
+ shiftDetected: 'none' | 'positive' | 'negative' | 'both';
306
+ }
139
307
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/energy/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,uBAAuB;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/energy/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { WindOutputInput, WindOutputResult } from './types.js';
2
+ /**
3
+ * Wind Power Output Calculator
4
+ *
5
+ * @formula
6
+ * - V_hub = V_ref × (H_hub / H_ref)^α (Hellmann power law)
7
+ * - Capacity Factor from simplified Rayleigh-based estimate
8
+ * - Annual Output = ratedPower × CF × 8760
9
+ *
10
+ * @reference IEC 61400 — Wind energy generation systems
11
+ * @reference Manwell, J.F. "Wind Energy Explained", 2nd Ed. Wiley.
12
+ */
13
+ export declare function windOutput(input: WindOutputInput): WindOutputResult;
14
+ //# sourceMappingURL=windOutput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windOutput.d.ts","sourceRoot":"","sources":["../../src/energy/windOutput.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEpE;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,CA8DnE"}
@@ -0,0 +1,77 @@
1
+ import { roundTo } from '../utils.js';
2
+ /**
3
+ * Wind Power Output Calculator
4
+ *
5
+ * @formula
6
+ * - V_hub = V_ref × (H_hub / H_ref)^α (Hellmann power law)
7
+ * - Capacity Factor from simplified Rayleigh-based estimate
8
+ * - Annual Output = ratedPower × CF × 8760
9
+ *
10
+ * @reference IEC 61400 — Wind energy generation systems
11
+ * @reference Manwell, J.F. "Wind Energy Explained", 2nd Ed. Wiley.
12
+ */
13
+ export function windOutput(input) {
14
+ const { ratedPower, hubHeight, averageWindSpeed, referenceHeight = 10, cutInSpeed = 3, cutOutSpeed = 25, ratedSpeed = 12, rotorDiameter, terrainRoughness = 0.143, } = input;
15
+ // Wind speed at hub height (Hellmann power law)
16
+ const adjustedWindSpeed = averageWindSpeed * Math.pow(hubHeight / referenceHeight, terrainRoughness);
17
+ // Simplified capacity factor estimate using Rayleigh distribution approximation
18
+ // CF ≈ exp(-(cutIn/c)^k) - exp(-(ratedSpeed/c)^k) × Pr_avg/Prated
19
+ // + exp(-(ratedSpeed/c)^k) - exp(-(cutOut/c)^k)
20
+ // Simplified: using cubic ratio with Rayleigh distribution
21
+ const k = 2; // Weibull shape parameter for Rayleigh
22
+ const c = adjustedWindSpeed * 2 / Math.sqrt(Math.PI); // scale parameter
23
+ let cf;
24
+ if (adjustedWindSpeed <= 0 || c <= 0) {
25
+ cf = 0;
26
+ }
27
+ else {
28
+ // Probability of wind in each region
29
+ const pRated = Math.exp(-Math.pow(ratedSpeed / c, k));
30
+ const pCutOut = Math.exp(-Math.pow(cutOutSpeed / c, k));
31
+ // Cubic region: approximate average power as fraction of rated
32
+ // Using integral of (v/vr)^3 × Rayleigh
33
+ const cubicContrib = integrateCubicRayleigh(cutInSpeed, ratedSpeed, c, ratedSpeed);
34
+ // Rated region: full power between rated and cutout
35
+ const ratedContrib = pRated - pCutOut;
36
+ cf = Math.max(0, Math.min(1, cubicContrib + ratedContrib));
37
+ }
38
+ const annualOutput = ratedPower * cf * 8760;
39
+ const monthlyOutput = annualOutput / 12;
40
+ const dailyOutput = annualOutput / 365;
41
+ // Swept area
42
+ let sweptArea = null;
43
+ let betzLimit = null;
44
+ if (rotorDiameter != null) {
45
+ sweptArea = roundTo(Math.PI * (rotorDiameter / 2) ** 2, 2);
46
+ // Betz limit: P_max = 16/27 × 0.5 × ρ × A × v³
47
+ const airDensity = 1.225; // kg/m³
48
+ betzLimit = roundTo((16 / 27) * 0.5 * airDensity * sweptArea * Math.pow(adjustedWindSpeed, 3) / 1000, 2);
49
+ }
50
+ return {
51
+ adjustedWindSpeed: roundTo(adjustedWindSpeed, 2),
52
+ capacityFactor: roundTo(cf, 4),
53
+ annualOutput: roundTo(annualOutput, 0),
54
+ monthlyOutput: roundTo(monthlyOutput, 0),
55
+ dailyOutput: roundTo(dailyOutput, 0),
56
+ sweptArea,
57
+ betzLimit,
58
+ };
59
+ }
60
+ /**
61
+ * Approximate integral of (v/vr)^3 × Rayleigh PDF from v1 to v2
62
+ * Using numerical trapezoidal integration
63
+ */
64
+ function integrateCubicRayleigh(v1, v2, c, vRated) {
65
+ const steps = 50;
66
+ const dv = (v2 - v1) / steps;
67
+ let sum = 0;
68
+ for (let i = 0; i <= steps; i++) {
69
+ const v = v1 + i * dv;
70
+ const rayleighPDF = (2 * v / (c * c)) * Math.exp(-Math.pow(v / c, 2));
71
+ const cubicPower = Math.pow(v / vRated, 3);
72
+ const weight = (i === 0 || i === steps) ? 0.5 : 1;
73
+ sum += weight * cubicPower * rayleighPDF;
74
+ }
75
+ return sum * dv;
76
+ }
77
+ //# sourceMappingURL=windOutput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windOutput.js","sourceRoot":"","sources":["../../src/energy/windOutput.ts"],"names":[],"mappings":"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"}
@@ -2,5 +2,7 @@ export { calorie } from './calorie.js';
2
2
  export { expiry } from './expiry.js';
3
3
  export { nutrition } from './nutrition.js';
4
4
  export { haccp, getCategories as getHaccpCategories } from './haccp.js';
5
- export type { Gender, ActivityLevel, CalorieInput, CalorieResult, ExpiryMode, ExpiryInput, ExpiryResult, NutrientIngredient, NutritionInput, NutritionFacts, DailyValuePercents, NutritionResult, HaccpCategory, HaccpInput, HaccpCheckItem, HaccpResult, } from './types.js';
5
+ export { waterActivity } from './waterActivity.js';
6
+ export { stabilityStudy } from './stabilityStudy.js';
7
+ export type { Gender, ActivityLevel, CalorieInput, CalorieResult, ExpiryMode, ExpiryInput, ExpiryResult, NutrientIngredient, NutritionInput, NutritionFacts, DailyValuePercents, NutritionResult, HaccpCategory, HaccpInput, HaccpCheckItem, HaccpResult, WaterActivityInput, WaterActivityResult, StabilityDataPoint, StabilityStudyInput, StabilityStudyResult, } from './types.js';
6
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/food/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,aAAa,IAAI,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGxE,YAAY,EAEV,MAAM,EACN,aAAa,EACb,YAAY,EACZ,aAAa,EAEb,UAAU,EACV,WAAW,EACX,YAAY,EAEZ,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,eAAe,EAEf,aAAa,EACb,UAAU,EACV,cAAc,EACd,WAAW,GACZ,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/food/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,aAAa,IAAI,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,YAAY,EAEV,MAAM,EACN,aAAa,EACb,YAAY,EACZ,aAAa,EAEb,UAAU,EACV,WAAW,EACX,YAAY,EAEZ,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,eAAe,EAEf,aAAa,EACb,UAAU,EACV,cAAc,EACd,WAAW,EAEX,kBAAkB,EAClB,mBAAmB,EAEnB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,YAAY,CAAC"}
@@ -3,4 +3,6 @@ export { calorie } from './calorie.js';
3
3
  export { expiry } from './expiry.js';
4
4
  export { nutrition } from './nutrition.js';
5
5
  export { haccp, getCategories as getHaccpCategories } from './haccp.js';
6
+ export { waterActivity } from './waterActivity.js';
7
+ export { stabilityStudy } from './stabilityStudy.js';
6
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/food/index.ts"],"names":[],"mappings":"AAAA,uBAAuB;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,aAAa,IAAI,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/food/index.ts"],"names":[],"mappings":"AAAA,uBAAuB;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,aAAa,IAAI,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { StabilityStudyInput, StabilityStudyResult } from './types.js';
2
+ /**
3
+ * Accelerated Stability Study — Arrhenius Regression (ICH Q1A)
4
+ *
5
+ * @formula
6
+ * - k = A × exp(−Ea / (R×T))
7
+ * - ln(k) vs 1/T → linear regression → Ea = −slope × R
8
+ * - Predicted shelf life = criterion / k(T_storage)
9
+ * - Q10 = exp(Ea × 10 / (R × T₁ × T₂))
10
+ *
11
+ * @reference ICH Q1A(R2) — Stability Testing of New Drug Substances and Products
12
+ * @reference Labuza, T.P. "Shelf Life Dating of Foods" (1982)
13
+ */
14
+ export declare function stabilityStudy(input: StabilityStudyInput): StabilityStudyResult;
15
+ //# sourceMappingURL=stabilityStudy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stabilityStudy.d.ts","sourceRoot":"","sources":["../../src/food/stabilityStudy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAI5E;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,oBAAoB,CAyF/E"}
@@ -0,0 +1,92 @@
1
+ import { roundTo } from '../utils.js';
2
+ const R = 8.314e-3; // Gas constant in kJ/(mol·K)
3
+ /**
4
+ * Accelerated Stability Study — Arrhenius Regression (ICH Q1A)
5
+ *
6
+ * @formula
7
+ * - k = A × exp(−Ea / (R×T))
8
+ * - ln(k) vs 1/T → linear regression → Ea = −slope × R
9
+ * - Predicted shelf life = criterion / k(T_storage)
10
+ * - Q10 = exp(Ea × 10 / (R × T₁ × T₂))
11
+ *
12
+ * @reference ICH Q1A(R2) — Stability Testing of New Drug Substances and Products
13
+ * @reference Labuza, T.P. "Shelf Life Dating of Foods" (1982)
14
+ */
15
+ export function stabilityStudy(input) {
16
+ const { dataPoints, shelfLifeCriterion, storageTemp } = input;
17
+ // Group data by temperature and calculate rate constants
18
+ const tempGroups = new Map();
19
+ for (const dp of dataPoints) {
20
+ if (!tempGroups.has(dp.temperature)) {
21
+ tempGroups.set(dp.temperature, { times: [], degradations: [] });
22
+ }
23
+ const group = tempGroups.get(dp.temperature);
24
+ group.times.push(dp.time);
25
+ group.degradations.push(dp.degradation);
26
+ }
27
+ // Calculate rate constant for each temperature (simple linear: degradation = k × time)
28
+ const rateConstants = [];
29
+ const lnKValues = [];
30
+ const invTValues = [];
31
+ for (const [temp, data] of tempGroups) {
32
+ // Linear regression: degradation = k × time (through origin)
33
+ const sumTD = data.times.reduce((s, t, i) => s + t * data.degradations[i], 0);
34
+ const sumT2 = data.times.reduce((s, t) => s + t * t, 0);
35
+ const k = sumT2 > 0 ? sumTD / sumT2 : 0;
36
+ if (k > 0) {
37
+ rateConstants.push({ temperature: temp, rateConstant: roundTo(k, 6) });
38
+ lnKValues.push(Math.log(k));
39
+ invTValues.push(1 / (temp + 273.15));
40
+ }
41
+ }
42
+ if (lnKValues.length < 2) {
43
+ return {
44
+ activationEnergy: 0,
45
+ q10: 1,
46
+ predictedShelfLife: 0,
47
+ rateConstants,
48
+ r2: 0,
49
+ accelerationFactor: 1,
50
+ };
51
+ }
52
+ // Arrhenius regression: ln(k) = ln(A) - Ea/(R×T)
53
+ // Y = ln(k), X = 1/T
54
+ const n = lnKValues.length;
55
+ const sumX = invTValues.reduce((s, v) => s + v, 0);
56
+ const sumY = lnKValues.reduce((s, v) => s + v, 0);
57
+ const sumXY = invTValues.reduce((s, v, i) => s + v * lnKValues[i], 0);
58
+ const sumX2 = invTValues.reduce((s, v) => s + v * v, 0);
59
+ const sumY2 = lnKValues.reduce((s, v) => s + v * v, 0);
60
+ const slope = (n * sumXY - sumX * sumY) / (n * sumX2 - sumX * sumX);
61
+ const intercept = (sumY - slope * sumX) / n;
62
+ // Ea = -slope × R (kJ/mol)
63
+ const activationEnergy = -slope * R;
64
+ // R²
65
+ const yMean = sumY / n;
66
+ const ssTot = sumY2 - n * yMean * yMean;
67
+ const ssRes = lnKValues.reduce((s, y, i) => {
68
+ const yPred = intercept + slope * invTValues[i];
69
+ return s + (y - yPred) ** 2;
70
+ }, 0);
71
+ const r2 = ssTot > 0 ? 1 - ssRes / ssTot : 0;
72
+ // Rate constant at storage temperature
73
+ const kStorage = Math.exp(intercept + slope / (storageTemp + 273.15));
74
+ const predictedShelfLife = kStorage > 0 ? shelfLifeCriterion / kStorage : 0;
75
+ // Q10: ratio of rate constants at T and T+10
76
+ const T1 = storageTemp + 273.15;
77
+ const T2 = T1 + 10;
78
+ const q10 = Math.exp(activationEnergy * 10 / (R * T1 * T2));
79
+ // Acceleration factor: highest test temp vs storage temp
80
+ const maxTestTemp = Math.max(...Array.from(tempGroups.keys()));
81
+ const kMaxTemp = Math.exp(intercept + slope / (maxTestTemp + 273.15));
82
+ const accelerationFactor = kStorage > 0 ? kMaxTemp / kStorage : 1;
83
+ return {
84
+ activationEnergy: roundTo(activationEnergy, 2),
85
+ q10: roundTo(q10, 2),
86
+ predictedShelfLife: roundTo(predictedShelfLife, 1),
87
+ rateConstants,
88
+ r2: roundTo(r2, 4),
89
+ accelerationFactor: roundTo(accelerationFactor, 2),
90
+ };
91
+ }
92
+ //# sourceMappingURL=stabilityStudy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stabilityStudy.js","sourceRoot":"","sources":["../../src/food/stabilityStudy.ts"],"names":[],"mappings":"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"}
@@ -101,4 +101,47 @@ export interface HaccpResult {
101
101
  category: HaccpCategory;
102
102
  items: HaccpCheckItem[];
103
103
  }
104
+ /**
105
+ * Water Activity Types — HACCP Microbial Safety
106
+ */
107
+ export interface WaterActivityInput {
108
+ aw: number;
109
+ temperature?: number;
110
+ }
111
+ export interface WaterActivityResult {
112
+ aw: number;
113
+ isStable: boolean;
114
+ riskLevel: 'safe' | 'low' | 'moderate' | 'high';
115
+ growthRisk: {
116
+ bacteria: boolean;
117
+ yeast: boolean;
118
+ mold: boolean;
119
+ xerophilic: boolean;
120
+ };
121
+ warnings: string[];
122
+ }
123
+ /**
124
+ * Stability Study Types — Arrhenius Regression (ICH Q1A)
125
+ */
126
+ export interface StabilityDataPoint {
127
+ temperature: number;
128
+ time: number;
129
+ degradation: number;
130
+ }
131
+ export interface StabilityStudyInput {
132
+ dataPoints: StabilityDataPoint[];
133
+ shelfLifeCriterion: number;
134
+ storageTemp: number;
135
+ }
136
+ export interface StabilityStudyResult {
137
+ activationEnergy: number;
138
+ q10: number;
139
+ predictedShelfLife: number;
140
+ rateConstants: {
141
+ temperature: number;
142
+ rateConstant: number;
143
+ }[];
144
+ r2: number;
145
+ accelerationFactor: number;
146
+ }
104
147
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/food/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/food/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { WaterActivityInput, WaterActivityResult } from './types.js';
2
+ /**
3
+ * Water Activity Microbial Safety Assessment — HACCP
4
+ *
5
+ * @formula Threshold-based microbial growth risk:
6
+ * - Bacteria: aw > 0.91
7
+ * - Yeast: aw > 0.88
8
+ * - Mold: aw > 0.80
9
+ * - Xerophilic fungi: aw > 0.65
10
+ * - Stable (no growth): aw < 0.60
11
+ *
12
+ * @reference FDA Food Code
13
+ * @reference ICMSF "Microorganisms in Foods 6"
14
+ * @reference Scott, W.J. (1957). Water relations of food spoilage microorganisms.
15
+ */
16
+ export declare function waterActivity(input: WaterActivityInput): WaterActivityResult;
17
+ //# sourceMappingURL=waterActivity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"waterActivity.d.ts","sourceRoot":"","sources":["../../src/food/waterActivity.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE1E;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,mBAAmB,CA+C5E"}