formulab 0.32.1 → 0.33.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,41 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.33.1] - 2026-09-03
9
+
10
+ ### Fixed
11
+
12
+ - **`safety/wbgtCalculate()` heat-stress threshold table partially verified.** `WBGT_THRESHOLDS`
13
+ has carried an unverified "Based on ACGIH TLV guidelines" attribution since it was written -
14
+ ACGIH's TLV table is copyrighted and not freely available, and ISO 7243's own reference-value
15
+ table is not in its free sample. A peer-reviewed source reproducing both tables with citation
16
+ (Parsons K, 2006, "Heat Stress Standard ISO 7243 and its Global Application", Industrial Health
17
+ 44, 368-379) is now available: its Table 1 (ISO 7243) confirms the existing `heavy` (26/23) and
18
+ `veryHeavy` (25/20) acclimatized/unacclimatized values exactly, against the table's "sensible air
19
+ movement" column - no value change, `@reference` added, golden tests pinned. `light` and
20
+ `moderate` do **not** match either that table's rows or ACGIH's TLV table (Table 6 in the same
21
+ source) and remain unverified pending a source that resolves the mismatch - values unchanged,
22
+ per the "don't swap one unverified figure for another" policy already documented on this
23
+ constant. See `WBGT_THRESHOLDS` JSDoc for the full breakdown.
24
+
25
+ ## [0.33.0] - 2026-09-02
26
+
27
+ ### Added
28
+
29
+ - **`automotive/tireCompare()` gains ISO 4000-1 / ETRTO Load Index support**, including HL (High
30
+ Load) ratings used by heavy EVs. `TireSpec.loadIndex` (optional, 60-130) resolves to
31
+ `TireData.maxLoadKg` via the new exported `tireLoadCapacityKg()` lookup; when both tires in a
32
+ comparison supply it, `TireResult` additionally carries `loadCapacityDiffKg` and
33
+ `loadCapacityReduced` — a replacement-tire safety check flagging when tire2 is rated to carry
34
+ less than tire1 (the case that matters for heavy EVs, which need HL-rated tires and can't
35
+ safely drop back to a lower-index replacement). SL/XL/HL are not separate tables: they are
36
+ construction/reference-pressure classes that determine which Load Index a given tire size can
37
+ be rated at — the Load Index-to-kg mapping itself is universal, so no separate "HL table" was
38
+ needed once the standard one was verified. Golden-tested against ISO 4000-1 figures (cell-level
39
+ extraction, cross-checked against the UK MOT Inspection Manual's independent table and
40
+ published XL/HL comparison figures — all points agreed exactly). `loadIndex` is fully optional;
41
+ omitting it on either tire preserves the exact prior `tireCompare()` output.
42
+
8
43
  ## [0.32.1] - 2026-09-02
9
44
 
10
45
  ### Fixed
package/README.md CHANGED
@@ -11,7 +11,7 @@ A comprehensive collection of engineering formulas and calculations for manufact
11
11
 
12
12
  ## Features
13
13
 
14
- - **203 industrial calculations + 8 type guards** — OEE, Cpk, SPC control charts, Gage R&R, Weibull, metal weight, CNC machining, GD&T, pipe flow, CBM, NIOSH lifting, PMV/PPD, arc flash, battery SOH, GHG emissions, PID tuning, and more
14
+ - **204 industrial calculations + 8 type guards** — OEE, Cpk, SPC control charts, Gage R&R, Weibull, metal weight, CNC machining, GD&T, pipe flow, CBM, NIOSH lifting, PMV/PPD, arc flash, battery SOH, GHG emissions, PID tuning, and more
15
15
  - **15 specialized domains** — Quality, Metal, Chemical, Electronics, Construction, Automotive, Logistics, Energy, Safety, Food, Utility, Battery, Environmental, Machining, Industrial Engineering
16
16
  - **Zero dependencies** — Lightweight and fast
17
17
  - **TypeScript first** — Full type definitions included
@@ -35,12 +35,12 @@ A comprehensive collection of engineering formulas and calculations for manufact
35
35
  | Chemical | 12 | pid, reliefValve | Darcy-Weisbach, Fourier, API 520, ISA |
36
36
  | Electronics | 11 | awgProperties, resistorDecode | IPC-2221, IEC 60062 |
37
37
  | Construction | 13 | momentOfInertia | AISC, Timoshenko, Roark's (momentOfInertia only — see note) |
38
- | Automotive | 9 | chargingLoss | AASHTO, SAE J1772 |
38
+ | Automotive | 10 | chargingLoss, tireLoadCapacityKg | AASHTO, SAE J1772, ISO 4000-1 |
39
39
  | Energy | 15 | degreeDay, windOutput | NREL PVWatts, ISO 50001 |
40
40
  | Food | 6 | waterActivity, stabilityStudy | HACCP, ICH Q1A |
41
41
  | Utility | 16 | — | — |
42
42
  | Battery | 10 | stateOfHealth, thermalRunaway | IEEE 1188, IEC 62620, Battery University |
43
- | Environmental | 10 | gwpCalculator | GHG Protocol, IPCC AR6, IEA 2023 |
43
+ | Environmental | 10 | gwpCalculator | GHG Protocol, IPCC AR6, Our World in Data/Ember |
44
44
  | Machining | 12 | all 12 functions — truePosition, gaugeBlockStack, boltCircle, sineBarHeight, effectiveDiameter, radialChipThinning, cuspHeight, boringBarDeflection, toolDeflection, cycleTimeEstimator, threadOverWires, triangleSolver | Machinery's Handbook, ASME Y14.5/B1.2, Sandvik Coromant |
45
45
  | IE | 5 | — | MTM/MOST, Wright's learning curve |
46
46
 
@@ -3,7 +3,7 @@ export { batteryRuntime } from './batteryRuntime.js';
3
3
  export { evCharging } from './evCharging.js';
4
4
  export { fuelEconomy } from './fuelEconomy.js';
5
5
  export { gearRatio } from './gearRatio.js';
6
- export { tireCompare } from './tireCompare.js';
6
+ export { tireCompare, tireLoadCapacityKg } from './tireCompare.js';
7
7
  export { torque } from './torque.js';
8
8
  export { power } from './power.js';
9
9
  export { chargingLoss } from './chargingLoss.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/automotive/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,YAAY,EAEV,oBAAoB,EACpB,qBAAqB,EAErB,YAAY,EACZ,aAAa,EAEb,aAAa,EACb,cAAc,EAEd,QAAQ,EACR,SAAS,EACT,UAAU,EAEV,cAAc,EACd,eAAe,EAEf,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,UAAU,EAEV,UAAU,EACV,WAAW,EACX,YAAY,EAEZ,SAAS,EACT,UAAU,EACV,WAAW,EAEX,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/automotive/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,YAAY,EAEV,oBAAoB,EACpB,qBAAqB,EAErB,YAAY,EACZ,aAAa,EAEb,aAAa,EACb,cAAc,EAEd,QAAQ,EACR,SAAS,EACT,UAAU,EAEV,cAAc,EACd,eAAe,EAEf,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,UAAU,EAEV,UAAU,EACV,WAAW,EACX,YAAY,EAEZ,SAAS,EACT,UAAU,EACV,WAAW,EAEX,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
@@ -4,7 +4,7 @@ export { batteryRuntime } from './batteryRuntime.js';
4
4
  export { evCharging } from './evCharging.js';
5
5
  export { fuelEconomy } from './fuelEconomy.js';
6
6
  export { gearRatio } from './gearRatio.js';
7
- export { tireCompare } from './tireCompare.js';
7
+ export { tireCompare, tireLoadCapacityKg } from './tireCompare.js';
8
8
  export { torque } from './torque.js';
9
9
  export { power } from './power.js';
10
10
  export { chargingLoss } from './chargingLoss.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/automotive/index.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/automotive/index.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
@@ -1,4 +1,10 @@
1
1
  import type { TireInput, TireResult } from './types.js';
2
+ /**
3
+ * Look up the maximum load per tire (kg) for a given ISO 4000-1 / ETRTO Load Index.
4
+ *
5
+ * @throws {RangeError} loadIndex is outside the supported 60-130 range
6
+ */
7
+ export declare function tireLoadCapacityKg(loadIndex: number): number;
2
8
  /**
3
9
  * Compare two tire sizes and calculate differences
4
10
  *
@@ -1 +1 @@
1
- {"version":3,"file":"tireCompare.d.ts","sourceRoot":"","sources":["../../src/automotive/tireCompare.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAsB,MAAM,YAAY,CAAC;AAiC5E;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CAqBxD"}
1
+ {"version":3,"file":"tireCompare.d.ts","sourceRoot":"","sources":["../../src/automotive/tireCompare.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAsB,MAAM,YAAY,CAAC;AAsC5E;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAM5D;AA+BD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CA2BxD"}
@@ -1,6 +1,50 @@
1
1
  import { roundTo } from '../utils.js';
2
2
  // Conversion constants
3
3
  const INCHES_TO_MM = 25.4;
4
+ /**
5
+ * ISO 4000-1 / ETRTO Load Index → maximum load per tire (kg), reference passenger-tire
6
+ * inflation pressure. Covers LI 60-130 — motorcycle/compact-car through the heaviest
7
+ * passenger-adjacent EV pickups (e.g. Rivian R1T, GMC Hummer EV run ~121-126 XL); the full
8
+ * standard table continues to LI 279 for aircraft/mining-truck tires, out of scope for this
9
+ * domain.
10
+ *
11
+ * SL (Standard Load), XL (Extra Load), and HL (High Load, ETRTO 2021 / US 2023) are NOT
12
+ * separate tables — they are construction/reference-pressure classes that determine which LI a
13
+ * given physical tire size can be rated at; the LI-to-kg mapping itself is universal across all
14
+ * three. A "245/45R19 101Y XL" and a "245/45R19 101Y HL" of the same size both carry 825 kg per
15
+ * this table — HL construction is what lets a manufacturer rate that size at LI 101 instead of a
16
+ * lower XL-only rating, not a different number for the same LI.
17
+ *
18
+ * @reference ISO 4000-1 (Passenger car tyres — Part 1: Dimensions), reproduced via
19
+ * en.wikipedia.org/wiki/Tire_code "Load index and load range" table (cell-verified against
20
+ * this project's own extraction, 2026-09-02) and cross-checked at LI 70/91/98/100/101 against
21
+ * the UK Government MOT Inspection Manual Appendix B (gov.uk, single-wheel column, ÷2 —
22
+ * that table is a different reference-pressure class, but its ratios confirm this one) and
23
+ * published HL/XL comparison figures (Tire Review, "Continental Makes its First Tire with New
24
+ * HL Load Index": XL 98 = 750 kg, HL 101 = 825 kg — both match exactly).
25
+ */
26
+ const TIRE_LOAD_INDEX_KG = {
27
+ 60: 250, 61: 257, 62: 265, 63: 272, 64: 280, 65: 290, 66: 300, 67: 307, 68: 315, 69: 325,
28
+ 70: 335, 71: 345, 72: 355, 73: 365, 74: 375, 75: 387, 76: 400, 77: 412, 78: 425, 79: 437,
29
+ 80: 450, 81: 462, 82: 475, 83: 487, 84: 500, 85: 515, 86: 530, 87: 545, 88: 560, 89: 580,
30
+ 90: 600, 91: 615, 92: 630, 93: 650, 94: 670, 95: 690, 96: 710, 97: 730, 98: 750, 99: 775,
31
+ 100: 800, 101: 825, 102: 850, 103: 875, 104: 900, 105: 925, 106: 950, 107: 975, 108: 1000,
32
+ 109: 1030, 110: 1060, 111: 1090, 112: 1120, 113: 1150, 114: 1180, 115: 1215, 116: 1250,
33
+ 117: 1285, 118: 1320, 119: 1360, 120: 1400, 121: 1450, 122: 1500, 123: 1550, 124: 1600,
34
+ 125: 1650, 126: 1700, 127: 1750, 128: 1800, 129: 1850, 130: 1900,
35
+ };
36
+ /**
37
+ * Look up the maximum load per tire (kg) for a given ISO 4000-1 / ETRTO Load Index.
38
+ *
39
+ * @throws {RangeError} loadIndex is outside the supported 60-130 range
40
+ */
41
+ export function tireLoadCapacityKg(loadIndex) {
42
+ const capacity = TIRE_LOAD_INDEX_KG[loadIndex];
43
+ if (capacity == null) {
44
+ throw new RangeError(`loadIndex must be an integer between 60 and 130 (got ${loadIndex})`);
45
+ }
46
+ return capacity;
47
+ }
4
48
  /**
5
49
  * Calculate tire dimensions from tire specification
6
50
  *
@@ -14,7 +58,7 @@ const INCHES_TO_MM = 25.4;
14
58
  * - Revs per km = 1,000,000 / Circumference
15
59
  */
16
60
  function calculateTireData(spec) {
17
- const { width, aspect, rim } = spec;
61
+ const { width, aspect, rim, loadIndex } = spec;
18
62
  const sidewallHeight = width * (aspect / 100);
19
63
  const rimDiameterMm = rim * INCHES_TO_MM;
20
64
  const diameter = rimDiameterMm + (2 * sidewallHeight);
@@ -24,6 +68,7 @@ function calculateTireData(spec) {
24
68
  diameter: roundTo(diameter, 2),
25
69
  circumference: roundTo(circumference, 2),
26
70
  revsPerKm: roundTo(revsPerKm, 2),
71
+ ...(loadIndex != null ? { maxLoadKg: tireLoadCapacityKg(loadIndex) } : {}),
27
72
  };
28
73
  }
29
74
  /**
@@ -42,6 +87,10 @@ export function tireCompare(input) {
42
87
  // Speedometer correction: positive means speedo reads lower than actual
43
88
  // If tire2 is larger, actual speed is higher than displayed
44
89
  const speedoCorrection = -diameterDiffPercent;
90
+ const bothHaveLoadIndex = tire1Data.maxLoadKg != null && tire2Data.maxLoadKg != null;
91
+ const loadCapacityDiffKg = bothHaveLoadIndex
92
+ ? roundTo(tire2Data.maxLoadKg - tire1Data.maxLoadKg, 2) || 0
93
+ : undefined;
45
94
  // Use || 0 to convert -0 to 0 for cleaner output
46
95
  return {
47
96
  tire1: tire1Data,
@@ -49,6 +98,7 @@ export function tireCompare(input) {
49
98
  diameterDiff: roundTo(diameterDiff, 2) || 0,
50
99
  diameterDiffPercent: roundTo(diameterDiffPercent, 2) || 0,
51
100
  speedoCorrection: roundTo(speedoCorrection, 2) || 0,
101
+ ...(bothHaveLoadIndex ? { loadCapacityDiffKg, loadCapacityReduced: loadCapacityDiffKg < 0 } : {}),
52
102
  };
53
103
  }
54
104
  //# sourceMappingURL=tireCompare.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tireCompare.js","sourceRoot":"","sources":["../../src/automotive/tireCompare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC,uBAAuB;AACvB,MAAM,YAAY,GAAG,IAAI,CAAC;AAE1B;;;;;;;;;;;GAWG;AACH,SAAS,iBAAiB,CAAC,IAAc;IACvC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAEpC,MAAM,cAAc,GAAG,KAAK,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;IAC9C,MAAM,aAAa,GAAG,GAAG,GAAG,YAAY,CAAC;IACzC,MAAM,QAAQ,GAAG,aAAa,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC;IACtD,MAAM,aAAa,GAAG,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,SAAS,GAAG,aAAa,CAAC;IAE5C,OAAO;QACL,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC9B,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;QACxC,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;KACjC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,KAAgB;IAC1C,MAAM,SAAS,GAAG,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEjD,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;IAC7D,MAAM,mBAAmB,GAAG,SAAS,CAAC,QAAQ,GAAG,CAAC;QAChD,CAAC,CAAC,CAAC,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,GAAG;QAC3C,CAAC,CAAC,CAAC,CAAC;IAEN,wEAAwE;IACxE,4DAA4D;IAC5D,MAAM,gBAAgB,GAAG,CAAC,mBAAmB,CAAC;IAE9C,iDAAiD;IACjD,OAAO;QACL,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,SAAS;QAChB,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC;QAC3C,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC,IAAI,CAAC;QACzD,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC;KACpD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"tireCompare.js","sourceRoot":"","sources":["../../src/automotive/tireCompare.ts"],"names":[],"mappings":"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"}
@@ -68,6 +68,8 @@ export interface TireSpec {
68
68
  width: number;
69
69
  aspect: number;
70
70
  rim: number;
71
+ /** ISO 4000-1 / ETRTO load index (60-130). Optional — omit to skip load capacity comparison. */
72
+ loadIndex?: number;
71
73
  }
72
74
  export interface TireInput {
73
75
  tire1: TireSpec;
@@ -77,6 +79,8 @@ export interface TireData {
77
79
  diameter: number;
78
80
  circumference: number;
79
81
  revsPerKm: number;
82
+ /** Max load per tire (kg), present only when the spec supplied `loadIndex`. */
83
+ maxLoadKg?: number;
80
84
  }
81
85
  export interface TireResult {
82
86
  tire1: TireData;
@@ -84,6 +88,12 @@ export interface TireResult {
84
88
  diameterDiff: number;
85
89
  diameterDiffPercent: number;
86
90
  speedoCorrection: number;
91
+ /** tire2's max load minus tire1's (kg) — present only when both specs supplied `loadIndex`. */
92
+ loadCapacityDiffKg?: number;
93
+ /** true when tire2's load index rates it to carry less than tire1 — a replacement tire that
94
+ * cannot legally/safely substitute for the original (relevant for heavy EVs needing HL-rated
95
+ * tires). Present only when both specs supplied `loadIndex`. */
96
+ loadCapacityReduced?: boolean;
87
97
  }
88
98
  /**
89
99
  * Torque Converter Types
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/automotive/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/automotive/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,GAAG,OAAO,CAAC;AAElE,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,gGAAgG;IAChG,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,QAAQ,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,QAAQ,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,+FAA+F;IAC/F,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;qEAEiE;IACjE,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC;AAEjD,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,UAAU,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE3C,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;IAC3C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB"}
@@ -23,7 +23,7 @@ import type { WbgtInput, WbgtResult } from './types.js';
23
23
  * - danger: WBGT > threshold
24
24
  *
25
25
  * The 2 degree caution band is a margin chosen here, not part of the index, and the
26
- * threshold it is measured from is itself unverified - see WBGT_THRESHOLDS above.
26
+ * threshold it is measured from is only partly verified - see WBGT_THRESHOLDS above.
27
27
  *
28
28
  * @param input - WBGT input parameters
29
29
  * @returns WBGT result with index, threshold, and status
@@ -1 +1 @@
1
- {"version":3,"file":"wbgtCalculate.d.ts","sourceRoot":"","sources":["../../src/safety/wbgtCalculate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAqB,MAAM,YAAY,CAAC;AA0B3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CAyC1D"}
1
+ {"version":3,"file":"wbgtCalculate.d.ts","sourceRoot":"","sources":["../../src/safety/wbgtCalculate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAqB,MAAM,YAAY,CAAC;AAwC3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CAyC1D"}
@@ -1,12 +1,26 @@
1
1
  /**
2
2
  * WBGT limits in degrees Celsius by workload and acclimatization state.
3
3
  *
4
- * ⚠️ Unlike the index formula below, these figures carry no verified source. They have
5
- * long been described here as threshold limit values, but the published table they would
6
- * come from is not freely available, so the attribution could not be confirmed - neither
7
- * the numbers themselves nor which column belongs to acclimatized workers. Several
8
- * schemes publish limits on this shape with values a degree or two apart, and they are
9
- * stated on different bases (some as a limit, some as an action level).
4
+ * `heavy` and `veryHeavy` are verified against ISO 7243 Table 1 (metabolic rate classes
5
+ * 200 < M < 260 W/m2 and M > 260 W/m2 respectively), using the table's "sensible air
6
+ * movement" column - the bracketed alternate values the standard gives for those two
7
+ * classes. Source: Parsons K (2006), "Heat Stress Standard ISO 7243 and its Global
8
+ * Application", Industrial Health 44, 368-379, Table 1 (a peer-reviewed reproduction of
9
+ * the standard's table, cited, since the standard itself is not freely available).
10
+ *
11
+ * @reference ISO 7243, Table 1 (via Parsons 2006, Table 1) - heavy/veryHeavy only
12
+ *
13
+ * ⚠️ `light` and `moderate` remain unverified. They do not match ISO 7243 Table 1's
14
+ * Light (65 < M < 130 W/m2) or Moderate (130 < M < 200 W/m2) rows (30/29 and 28/26
15
+ * respectively), nor ACGIH's TLV table (Table 6 in the same source: continuous-work
16
+ * columns 30.0/26.7 for light/moderate) reproduced alongside it. The published table
17
+ * these two figures would come from is still not identified, so neither the numbers
18
+ * nor which column is acclimatized is confirmed for them.
19
+ *
20
+ * ISO 7243 also has a fifth, lower metabolic class ("Resting", M < 65 W/m2) that this
21
+ * 4-class enum has no slot for - the mismatch on light/moderate may in part be a
22
+ * consequence of that missing class rather than a wrong pair of numbers, but this has
23
+ * not been established.
10
24
  *
11
25
  * They are left unchanged, because substituting one unverified figure for another is not
12
26
  * an improvement. Treat a status returned from them as a screening indication and check
@@ -42,7 +56,7 @@ const WBGT_THRESHOLDS = {
42
56
  * - danger: WBGT > threshold
43
57
  *
44
58
  * The 2 degree caution band is a margin chosen here, not part of the index, and the
45
- * threshold it is measured from is itself unverified - see WBGT_THRESHOLDS above.
59
+ * threshold it is measured from is only partly verified - see WBGT_THRESHOLDS above.
46
60
  *
47
61
  * @param input - WBGT input parameters
48
62
  * @returns WBGT result with index, threshold, and status
@@ -1 +1 @@
1
- {"version":3,"file":"wbgtCalculate.js","sourceRoot":"","sources":["../../src/safety/wbgtCalculate.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AACH,MAAM,eAAe,GAGjB;IACF,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE;IAC/C,QAAQ,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE;IAClD,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE;IAC/C,SAAS,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE;CACpD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,aAAa,CAAC,KAAgB;IAC5C,MAAM,EACJ,WAAW,EACX,WAAW,EACX,SAAS,EACT,SAAS,EACT,QAAQ,EACR,cAAc,GACf,GAAG,KAAK,CAAC;IAEV,iBAAiB;IACjB,IAAI,IAAY,CAAC;IACjB,IAAI,SAAS,EAAE,CAAC;QACd,0BAA0B;QAC1B,IAAI,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,SAAS,GAAG,GAAG,GAAG,WAAW,CAAC;IACjE,CAAC;SAAM,CAAC;QACN,uCAAuC;QACvC,IAAI,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,SAAS,CAAC;IAC7C,CAAC;IAED,sDAAsD;IACtD,MAAM,UAAU,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,cAAc;QAC9B,CAAC,CAAC,UAAU,CAAC,YAAY;QACzB,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC;IAE9B,mBAAmB;IACnB,IAAI,MAAqC,CAAC;IAC1C,IAAI,IAAI,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,GAAG,MAAM,CAAC;IAClB,CAAC;SAAM,IAAI,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,MAAM,GAAG,SAAS,CAAC;IACrB,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,QAAQ,CAAC;IACpB,CAAC;IAED,OAAO;QACL,IAAI;QACJ,SAAS;QACT,MAAM;KACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"wbgtCalculate.js","sourceRoot":"","sources":["../../src/safety/wbgtCalculate.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,eAAe,GAGjB;IACF,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE;IAC/C,QAAQ,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE;IAClD,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE;IAC/C,SAAS,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE;CACpD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,aAAa,CAAC,KAAgB;IAC5C,MAAM,EACJ,WAAW,EACX,WAAW,EACX,SAAS,EACT,SAAS,EACT,QAAQ,EACR,cAAc,GACf,GAAG,KAAK,CAAC;IAEV,iBAAiB;IACjB,IAAI,IAAY,CAAC;IACjB,IAAI,SAAS,EAAE,CAAC;QACd,0BAA0B;QAC1B,IAAI,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,SAAS,GAAG,GAAG,GAAG,WAAW,CAAC;IACjE,CAAC;SAAM,CAAC;QACN,uCAAuC;QACvC,IAAI,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,SAAS,CAAC;IAC7C,CAAC;IAED,sDAAsD;IACtD,MAAM,UAAU,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,cAAc;QAC9B,CAAC,CAAC,UAAU,CAAC,YAAY;QACzB,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC;IAE9B,mBAAmB;IACnB,IAAI,MAAqC,CAAC;IAC1C,IAAI,IAAI,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,GAAG,MAAM,CAAC;IAClB,CAAC;SAAM,IAAI,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,MAAM,GAAG,SAAS,CAAC;IACrB,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,QAAQ,CAAC;IACpB,CAAC;IAED,OAAO;QACL,IAAI;QACJ,SAAS;QACT,MAAM;KACP,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "formulab",
3
- "version": "0.32.1",
3
+ "version": "0.33.1",
4
4
  "description": "Manufacturing & Engineering calculation formulas library - 203 industrial calculations across 15 domains for OEE, Cpk, SPC, FMEA, Nelson Rules, metal weight, CNC machining, GD&T, battery, environmental, pipe flow, logistics, IE time study, and more",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",