formulab 0.10.1 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +659 -659
- package/dist/electronics/trace.d.ts.map +1 -1
- package/dist/electronics/trace.js +4 -7
- package/dist/electronics/trace.js.map +1 -1
- package/dist/ie/index.d.ts +7 -0
- package/dist/ie/index.d.ts.map +1 -0
- package/dist/ie/index.js +7 -0
- package/dist/ie/index.js.map +1 -0
- package/dist/ie/learningCurve.d.ts +19 -0
- package/dist/ie/learningCurve.d.ts.map +1 -0
- package/dist/ie/learningCurve.js +65 -0
- package/dist/ie/learningCurve.js.map +1 -0
- package/dist/ie/standardTime.d.ts +17 -0
- package/dist/ie/standardTime.d.ts.map +1 -0
- package/dist/ie/standardTime.js +36 -0
- package/dist/ie/standardTime.js.map +1 -0
- package/dist/ie/timeStudy.d.ts +20 -0
- package/dist/ie/timeStudy.d.ts.map +1 -0
- package/dist/ie/timeStudy.js +52 -0
- package/dist/ie/timeStudy.js.map +1 -0
- package/dist/ie/types.d.ts +84 -0
- package/dist/ie/types.d.ts.map +1 -0
- package/dist/ie/types.js +2 -0
- package/dist/ie/types.js.map +1 -0
- package/dist/ie/vaAnalysis.d.ts +15 -0
- package/dist/ie/vaAnalysis.d.ts.map +1 -0
- package/dist/ie/vaAnalysis.js +45 -0
- package/dist/ie/vaAnalysis.js.map +1 -0
- package/dist/ie/workSampling.d.ts +19 -0
- package/dist/ie/workSampling.d.ts.map +1 -0
- package/dist/ie/workSampling.js +45 -0
- package/dist/ie/workSampling.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/machining/gaugeBlockStack.d.ts.map +1 -1
- package/dist/machining/gaugeBlockStack.js +18 -15
- package/dist/machining/gaugeBlockStack.js.map +1 -1
- package/dist/quality/actionPriority.d.ts +18 -0
- package/dist/quality/actionPriority.d.ts.map +1 -0
- package/dist/quality/actionPriority.js +128 -0
- package/dist/quality/actionPriority.js.map +1 -0
- package/dist/quality/cpkToOccurrence.d.ts +13 -0
- package/dist/quality/cpkToOccurrence.d.ts.map +1 -0
- package/dist/quality/cpkToOccurrence.js +35 -0
- package/dist/quality/cpkToOccurrence.js.map +1 -0
- package/dist/quality/index.d.ts +4 -1
- package/dist/quality/index.d.ts.map +1 -1
- package/dist/quality/index.js +3 -0
- package/dist/quality/index.js.map +1 -1
- package/dist/quality/nelsonRules.d.ts +16 -0
- package/dist/quality/nelsonRules.d.ts.map +1 -0
- package/dist/quality/nelsonRules.js +213 -0
- package/dist/quality/nelsonRules.js.map +1 -0
- package/dist/quality/types.d.ts +45 -0
- package/dist/quality/types.d.ts.map +1 -1
- package/package.json +29 -19
|
@@ -4,37 +4,36 @@ import { roundTo } from '../utils.js';
|
|
|
4
4
|
* Standard: Grade 1 metric set per ISO 3650
|
|
5
5
|
*/
|
|
6
6
|
const METRIC_47_SET = [
|
|
7
|
-
// Series 1:
|
|
7
|
+
// Series 1: 0.001 step (9 blocks)
|
|
8
8
|
1.001, 1.002, 1.003, 1.004, 1.005, 1.006, 1.007, 1.008, 1.009,
|
|
9
|
-
// Series 2:
|
|
10
|
-
// Actually standard 47-set has:
|
|
11
|
-
// 9 × 0.001: 1.001-1.009
|
|
12
|
-
// 9 × 0.01: 1.01-1.09
|
|
13
|
-
// 9 × 0.10: 1.10-1.90 (but typically only up to 1.49 in some sets)
|
|
14
|
-
// Let's use the standard 47-piece metric set:
|
|
9
|
+
// Series 2: 0.01 step (9 blocks)
|
|
15
10
|
1.01, 1.02, 1.03, 1.04, 1.05, 1.06, 1.07, 1.08, 1.09,
|
|
16
|
-
// Series 3: 0.
|
|
11
|
+
// Series 3: 0.10 step (9 blocks)
|
|
17
12
|
1.10, 1.20, 1.30, 1.40, 1.50, 1.60, 1.70, 1.80, 1.90,
|
|
18
|
-
// Series 4:
|
|
13
|
+
// Series 4: 0.5 step — ISO 3650 half-mm blocks for sub-1mm remainders
|
|
14
|
+
0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5,
|
|
15
|
+
// Series 5: whole mm (9 blocks)
|
|
19
16
|
1, 2, 3, 4, 5, 6, 7, 8, 9,
|
|
20
|
-
// Series
|
|
17
|
+
// Series 6: tens (10 blocks)
|
|
21
18
|
10, 20, 30, 40, 50, 60, 70, 80, 90, 100,
|
|
22
19
|
];
|
|
23
20
|
/**
|
|
24
21
|
* Metric 88-piece gauge block set (mm) — extended precision
|
|
25
22
|
*/
|
|
26
23
|
const METRIC_88_SET = [
|
|
27
|
-
// 0.001 step: 1.001-1.009
|
|
24
|
+
// 0.001 step: 1.001-1.009 (9 blocks)
|
|
28
25
|
1.001, 1.002, 1.003, 1.004, 1.005, 1.006, 1.007, 1.008, 1.009,
|
|
29
|
-
// 0.01 step: 1.01-1.49
|
|
26
|
+
// 0.01 step: 1.01-1.49 (49 blocks)
|
|
30
27
|
1.01, 1.02, 1.03, 1.04, 1.05, 1.06, 1.07, 1.08, 1.09,
|
|
31
28
|
1.10, 1.11, 1.12, 1.13, 1.14, 1.15, 1.16, 1.17, 1.18, 1.19,
|
|
32
29
|
1.20, 1.21, 1.22, 1.23, 1.24, 1.25, 1.26, 1.27, 1.28, 1.29,
|
|
33
30
|
1.30, 1.31, 1.32, 1.33, 1.34, 1.35, 1.36, 1.37, 1.38, 1.39,
|
|
34
31
|
1.40, 1.41, 1.42, 1.43, 1.44, 1.45, 1.46, 1.47, 1.48, 1.49,
|
|
35
|
-
//
|
|
32
|
+
// 0.5 step — ISO 3650 half-mm blocks for sub-1mm remainders
|
|
33
|
+
0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5,
|
|
34
|
+
// whole mm: 1-9 (9 blocks)
|
|
36
35
|
1, 2, 3, 4, 5, 6, 7, 8, 9,
|
|
37
|
-
// tens: 10-100
|
|
36
|
+
// tens: 10-100 (10 blocks)
|
|
38
37
|
10, 20, 30, 40, 50, 60, 70, 80, 90, 100,
|
|
39
38
|
];
|
|
40
39
|
/**
|
|
@@ -78,7 +77,11 @@ export function gaugeBlockStack(input) {
|
|
|
78
77
|
const setBlocks = SETS[availableSet];
|
|
79
78
|
const used = new Set();
|
|
80
79
|
const blocks = [];
|
|
81
|
-
|
|
80
|
+
// Round target to block-set precision: metric blocks resolve to 0.001mm (3dp),
|
|
81
|
+
// inch blocks to 0.0001" (4dp). This ensures the trailing-zero scoring system
|
|
82
|
+
// can differentiate fine-digit-eliminating blocks from coarse ones.
|
|
83
|
+
const precision = availableSet.startsWith('inch') ? 4 : 3;
|
|
84
|
+
let remaining = roundTo(targetDimension, precision);
|
|
82
85
|
// Successive subtraction algorithm (Machinery's Handbook method):
|
|
83
86
|
// 1. Find a block that, when subtracted, eliminates the least significant non-zero digit
|
|
84
87
|
// 2. Prefer blocks that reduce the number of significant decimal places
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gaugeBlockStack.js","sourceRoot":"","sources":["../../src/machining/gaugeBlockStack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;GAGG;AACH,MAAM,aAAa,GAAa;IAC9B,
|
|
1
|
+
{"version":3,"file":"gaugeBlockStack.js","sourceRoot":"","sources":["../../src/machining/gaugeBlockStack.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ActionPriorityInput, ActionPriorityResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* AIAG-VDA 2019 Action Priority (AP) Matrix
|
|
4
|
+
*
|
|
5
|
+
* Replaces the traditional RPN-based prioritization with a structured
|
|
6
|
+
* S × O × D matrix lookup that better reflects risk relationships.
|
|
7
|
+
*
|
|
8
|
+
* @formula AP = lookup(severityGroup, occurrenceGroup, detectionGroup)
|
|
9
|
+
* - RPN = S × O × D (still computed for reference)
|
|
10
|
+
*
|
|
11
|
+
* @reference AIAG & VDA (2019). "FMEA Handbook", 1st Edition.
|
|
12
|
+
*
|
|
13
|
+
* @throws {RangeError} Severity must be between 1 and 10
|
|
14
|
+
* @throws {RangeError} Occurrence must be between 1 and 10
|
|
15
|
+
* @throws {RangeError} Detection must be between 1 and 10
|
|
16
|
+
*/
|
|
17
|
+
export declare function actionPriority(input: ActionPriorityInput): ActionPriorityResult;
|
|
18
|
+
//# sourceMappingURL=actionPriority.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actionPriority.d.ts","sourceRoot":"","sources":["../../src/quality/actionPriority.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAuB,MAAM,YAAY,CAAC;AAEjG;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,oBAAoB,CA+B/E"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AIAG-VDA 2019 Action Priority (AP) Matrix
|
|
3
|
+
*
|
|
4
|
+
* Replaces the traditional RPN-based prioritization with a structured
|
|
5
|
+
* S × O × D matrix lookup that better reflects risk relationships.
|
|
6
|
+
*
|
|
7
|
+
* @formula AP = lookup(severityGroup, occurrenceGroup, detectionGroup)
|
|
8
|
+
* - RPN = S × O × D (still computed for reference)
|
|
9
|
+
*
|
|
10
|
+
* @reference AIAG & VDA (2019). "FMEA Handbook", 1st Edition.
|
|
11
|
+
*
|
|
12
|
+
* @throws {RangeError} Severity must be between 1 and 10
|
|
13
|
+
* @throws {RangeError} Occurrence must be between 1 and 10
|
|
14
|
+
* @throws {RangeError} Detection must be between 1 and 10
|
|
15
|
+
*/
|
|
16
|
+
export function actionPriority(input) {
|
|
17
|
+
const { severity, occurrence, detection } = input;
|
|
18
|
+
if (!Number.isFinite(severity) || severity < 1 || severity > 10) {
|
|
19
|
+
throw new RangeError('Severity must be between 1 and 10');
|
|
20
|
+
}
|
|
21
|
+
if (!Number.isFinite(occurrence) || occurrence < 1 || occurrence > 10) {
|
|
22
|
+
throw new RangeError('Occurrence must be between 1 and 10');
|
|
23
|
+
}
|
|
24
|
+
if (!Number.isFinite(detection) || detection < 1 || detection > 10) {
|
|
25
|
+
throw new RangeError('Detection must be between 1 and 10');
|
|
26
|
+
}
|
|
27
|
+
const s = Math.round(severity);
|
|
28
|
+
const o = Math.round(occurrence);
|
|
29
|
+
const d = Math.round(detection);
|
|
30
|
+
const sGroup = getGroup(s, S_GROUPS);
|
|
31
|
+
const oGroup = getGroup(o, O_GROUPS);
|
|
32
|
+
const dGroup = getGroup(d, D_GROUPS);
|
|
33
|
+
const ap = AP_TABLE[sGroup][oGroup][dGroup];
|
|
34
|
+
const rpn = s * o * d;
|
|
35
|
+
return {
|
|
36
|
+
actionPriority: ap,
|
|
37
|
+
rpn,
|
|
38
|
+
severityGroup: sGroup,
|
|
39
|
+
occurrenceGroup: oGroup,
|
|
40
|
+
detectionGroup: dGroup,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
// Group mapping: value → group index (0-4)
|
|
44
|
+
const S_GROUPS = [[1, 0], [3, 1], [6, 2], [8, 3], [10, 4]];
|
|
45
|
+
const O_GROUPS = [[1, 0], [3, 1], [6, 2], [8, 3], [10, 4]];
|
|
46
|
+
const D_GROUPS = [[1, 0], [4, 1], [6, 2], [8, 3], [10, 4]];
|
|
47
|
+
function getGroup(value, groups) {
|
|
48
|
+
for (const [max, group] of groups) {
|
|
49
|
+
if (value <= max)
|
|
50
|
+
return group;
|
|
51
|
+
}
|
|
52
|
+
return groups[groups.length - 1][1];
|
|
53
|
+
}
|
|
54
|
+
const H = 'H';
|
|
55
|
+
const M = 'M';
|
|
56
|
+
const L = 'L';
|
|
57
|
+
/**
|
|
58
|
+
* AP lookup table: AP_TABLE[sGroup][oGroup][dGroup]
|
|
59
|
+
* S groups: {1}=0, {2-3}=1, {4-6}=2, {7-8}=3, {9-10}=4
|
|
60
|
+
* O groups: {1}=0, {2-3}=1, {4-6}=2, {7-8}=3, {9-10}=4
|
|
61
|
+
* D groups: {1}=0, {2-4}=1, {5-6}=2, {7-8}=3, {9-10}=4
|
|
62
|
+
*
|
|
63
|
+
* Table columns are D in order: {9-10}, {7-8}, {5-6}, {2-4}, {1}
|
|
64
|
+
* So dGroup 4→col0, 3→col1, 2→col2, 1→col3, 0→col4
|
|
65
|
+
*/
|
|
66
|
+
const AP_TABLE = buildApTable();
|
|
67
|
+
function buildApTable() {
|
|
68
|
+
// Raw table: [sGroup][oGroup] → [D={9-10}, D={7-8}, D={5-6}, D={2-4}, D={1}]
|
|
69
|
+
const raw = [
|
|
70
|
+
// S=1 (sGroup=0)
|
|
71
|
+
[
|
|
72
|
+
/* O=1 */ [L, L, L, L, L],
|
|
73
|
+
/* O=2-3 */ [L, L, L, L, L],
|
|
74
|
+
/* O=4-6 */ [M, L, L, L, L],
|
|
75
|
+
/* O=7-8 */ [M, M, L, L, L],
|
|
76
|
+
/* O=9-10 */ [H, M, M, L, L],
|
|
77
|
+
],
|
|
78
|
+
// S=2-3 (sGroup=1)
|
|
79
|
+
[
|
|
80
|
+
/* O=1 */ [L, L, L, L, L],
|
|
81
|
+
/* O=2-3 */ [M, L, L, L, L],
|
|
82
|
+
/* O=4-6 */ [M, M, L, L, L],
|
|
83
|
+
/* O=7-8 */ [H, M, M, L, L],
|
|
84
|
+
/* O=9-10 */ [H, H, M, M, L],
|
|
85
|
+
],
|
|
86
|
+
// S=4-6 (sGroup=2)
|
|
87
|
+
[
|
|
88
|
+
/* O=1 */ [M, L, L, L, L],
|
|
89
|
+
/* O=2-3 */ [M, M, L, L, L],
|
|
90
|
+
/* O=4-6 */ [H, M, M, L, L],
|
|
91
|
+
/* O=7-8 */ [H, H, M, M, L],
|
|
92
|
+
/* O=9-10 */ [H, H, H, M, M],
|
|
93
|
+
],
|
|
94
|
+
// S=7-8 (sGroup=3)
|
|
95
|
+
[
|
|
96
|
+
/* O=1 */ [M, M, L, L, L],
|
|
97
|
+
/* O=2-3 */ [H, M, M, L, L],
|
|
98
|
+
/* O=4-6 */ [H, H, M, M, L],
|
|
99
|
+
/* O=7-8 */ [H, H, H, M, M],
|
|
100
|
+
/* O=9-10 */ [H, H, H, H, H],
|
|
101
|
+
],
|
|
102
|
+
// S=9-10 (sGroup=4)
|
|
103
|
+
[
|
|
104
|
+
/* O=1 */ [H, M, M, L, L],
|
|
105
|
+
/* O=2-3 */ [H, H, M, M, L],
|
|
106
|
+
/* O=4-6 */ [H, H, H, M, M],
|
|
107
|
+
/* O=7-8 */ [H, H, H, H, H],
|
|
108
|
+
/* O=9-10 */ [H, H, H, H, H],
|
|
109
|
+
],
|
|
110
|
+
];
|
|
111
|
+
// Convert raw table: columns are D={9-10}(4), D={7-8}(3), D={5-6}(2), D={2-4}(1), D={1}(0)
|
|
112
|
+
// We need AP_TABLE[s][o][dGroup] where dGroup 0={1}, 1={2-4}, 2={5-6}, 3={7-8}, 4={9-10}
|
|
113
|
+
const table = [];
|
|
114
|
+
for (let s = 0; s < 5; s++) {
|
|
115
|
+
table[s] = [];
|
|
116
|
+
for (let o = 0; o < 5; o++) {
|
|
117
|
+
table[s][o] = [
|
|
118
|
+
raw[s][o][4], // dGroup 0 ({1}) ← col 4
|
|
119
|
+
raw[s][o][3], // dGroup 1 ({2-4}) ← col 3
|
|
120
|
+
raw[s][o][2], // dGroup 2 ({5-6}) ← col 2
|
|
121
|
+
raw[s][o][1], // dGroup 3 ({7-8}) ← col 1
|
|
122
|
+
raw[s][o][0], // dGroup 4 ({9-10}) ← col 0
|
|
123
|
+
];
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return table;
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=actionPriority.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actionPriority.js","sourceRoot":"","sources":["../../src/quality/actionPriority.ts"],"names":[],"mappings":"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,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC5B,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;SAC7B;QACD,mBAAmB;QACnB;YACE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC5B,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC5B,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC5B,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC5B,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;SAC7B;QACD,mBAAmB;QACnB;YACE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC5B,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC5B,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC5B,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC5B,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;SAC7B;QACD,mBAAmB;QACnB;YACE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC5B,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC5B,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC5B,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC5B,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;SAC7B;QACD,oBAAoB;QACpB;YACE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC5B,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC5B,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC5B,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC5B,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;SAC7B;KACF,CAAC;IAEF,2FAA2F;IAC3F,yFAAyF;IACzF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;gBACZ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,4BAA4B;gBAC1C,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,6BAA6B;gBAC3C,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,6BAA6B;gBAC3C,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,6BAA6B;gBAC3C,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,6BAA6B;aAC5C,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { CpkToOccurrenceInput, CpkToOccurrenceResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Map Cpk (Process Capability Index) to FMEA Occurrence rating
|
|
4
|
+
*
|
|
5
|
+
* Based on AIAG-VDA FMEA Handbook correlation between process capability
|
|
6
|
+
* and occurrence likelihood.
|
|
7
|
+
*
|
|
8
|
+
* @reference AIAG & VDA (2019). "FMEA Handbook", 1st Edition, Table O-1.
|
|
9
|
+
*
|
|
10
|
+
* @throws {RangeError} Cpk must be a non-negative number
|
|
11
|
+
*/
|
|
12
|
+
export declare function cpkToOccurrence(input: CpkToOccurrenceInput): CpkToOccurrenceResult;
|
|
13
|
+
//# sourceMappingURL=cpkToOccurrence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cpkToOccurrence.d.ts","sourceRoot":"","sources":["../../src/quality/cpkToOccurrence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAE9E;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,qBAAqB,CAclF"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Map Cpk (Process Capability Index) to FMEA Occurrence rating
|
|
3
|
+
*
|
|
4
|
+
* Based on AIAG-VDA FMEA Handbook correlation between process capability
|
|
5
|
+
* and occurrence likelihood.
|
|
6
|
+
*
|
|
7
|
+
* @reference AIAG & VDA (2019). "FMEA Handbook", 1st Edition, Table O-1.
|
|
8
|
+
*
|
|
9
|
+
* @throws {RangeError} Cpk must be a non-negative number
|
|
10
|
+
*/
|
|
11
|
+
export function cpkToOccurrence(input) {
|
|
12
|
+
const { cpk } = input;
|
|
13
|
+
if (!Number.isFinite(cpk) || cpk < 0) {
|
|
14
|
+
throw new RangeError('Cpk must be a non-negative number');
|
|
15
|
+
}
|
|
16
|
+
const entry = CPK_TABLE.find(row => cpk >= row.threshold);
|
|
17
|
+
return {
|
|
18
|
+
occurrence: entry.occurrence,
|
|
19
|
+
description: entry.description,
|
|
20
|
+
cpkRange: entry.cpkRange,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
const CPK_TABLE = [
|
|
24
|
+
{ threshold: 2.00, occurrence: 1, description: 'Remote: Failure unlikely', cpkRange: '>= 2.00' },
|
|
25
|
+
{ threshold: 1.67, occurrence: 2, description: 'Very low: Few failures', cpkRange: '1.67 - 1.99' },
|
|
26
|
+
{ threshold: 1.33, occurrence: 3, description: 'Low: Relatively few failures', cpkRange: '1.33 - 1.66' },
|
|
27
|
+
{ threshold: 1.00, occurrence: 4, description: 'Moderately low: Occasional failures', cpkRange: '1.00 - 1.32' },
|
|
28
|
+
{ threshold: 0.83, occurrence: 5, description: 'Moderate: Medium number of failures', cpkRange: '0.83 - 0.99' },
|
|
29
|
+
{ threshold: 0.67, occurrence: 6, description: 'Moderately high: Frequent failures', cpkRange: '0.67 - 0.82' },
|
|
30
|
+
{ threshold: 0.51, occurrence: 7, description: 'High: Many failures', cpkRange: '0.51 - 0.66' },
|
|
31
|
+
{ threshold: 0.33, occurrence: 8, description: 'Very high: Repeated failures', cpkRange: '0.33 - 0.50' },
|
|
32
|
+
{ threshold: 0.17, occurrence: 9, description: 'Extremely high: Persistent failures', cpkRange: '0.17 - 0.32' },
|
|
33
|
+
{ threshold: -Infinity, occurrence: 10, description: 'Almost certain: Failure is inevitable', cpkRange: '< 0.17' },
|
|
34
|
+
];
|
|
35
|
+
//# sourceMappingURL=cpkToOccurrence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cpkToOccurrence.js","sourceRoot":"","sources":["../../src/quality/cpkToOccurrence.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,KAA2B;IACzD,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;IAEtB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,UAAU,CAAC,mCAAmC,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAE,CAAC;IAE3D,OAAO;QACL,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB,CAAC;AACJ,CAAC;AAED,MAAM,SAAS,GAAuF;IACpG,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAG,WAAW,EAAE,0BAA0B,EAAqB,QAAQ,EAAE,SAAS,EAAE;IACpH,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAG,WAAW,EAAE,wBAAwB,EAAuB,QAAQ,EAAE,aAAa,EAAE;IACxH,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAG,WAAW,EAAE,8BAA8B,EAAiB,QAAQ,EAAE,aAAa,EAAE;IACxH,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAG,WAAW,EAAE,qCAAqC,EAAU,QAAQ,EAAE,aAAa,EAAE;IACxH,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAG,WAAW,EAAE,qCAAqC,EAAU,QAAQ,EAAE,aAAa,EAAE;IACxH,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAG,WAAW,EAAE,oCAAoC,EAAW,QAAQ,EAAE,aAAa,EAAE;IACxH,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAG,WAAW,EAAE,qBAAqB,EAA0B,QAAQ,EAAE,aAAa,EAAE;IACxH,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAG,WAAW,EAAE,8BAA8B,EAAiB,QAAQ,EAAE,aAAa,EAAE;IACxH,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAG,WAAW,EAAE,qCAAqC,EAAU,QAAQ,EAAE,aAAa,EAAE;IACxH,EAAE,SAAS,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,WAAW,EAAE,uCAAuC,EAAI,QAAQ,EAAE,QAAQ,EAAE;CACrH,CAAC"}
|
package/dist/quality/index.d.ts
CHANGED
|
@@ -16,5 +16,8 @@ export { gageRR } from './gageRR.js';
|
|
|
16
16
|
export { cmk } from './cmk.js';
|
|
17
17
|
export { weibull } from './weibull.js';
|
|
18
18
|
export { paretoAnalysis } from './paretoAnalysis.js';
|
|
19
|
-
export
|
|
19
|
+
export { actionPriority } from './actionPriority.js';
|
|
20
|
+
export { cpkToOccurrence } from './cpkToOccurrence.js';
|
|
21
|
+
export { nelsonRules } from './nelsonRules.js';
|
|
22
|
+
export type { OeeRawData, OeeInput, OeeResult, CpkInput, CpkResult, CycleTimeInput, CycleTimeResult, TimeUnit, TaktTimeInput, TaktTimeResult, InspectionLevel, AqlInput, AqlResult, DowntimeInput, DowntimeResult, DpmoInput, DpmoResult, BalancingTask, LineBalancingInput, WorkStation, PositionalWeight, LineBalancingResult, MtbfInput, MtbfResult, PpkInput, PpkResult, ConvertFrom, PpmInput, PpmResult, RpnInput, RiskLevel, RpnResult, YieldInput, YieldResult, ControlChartType, ControlChartInput, ControlLimit, SubgroupStat, ControlChartResult, GageRRInput, GageRRResult, CmkInput, CmkResult, WeibullInput, WeibullResult, ParetoItem, ParetoInput, ParetoClassification, ParetoResult, ActionPriorityLevel, ActionPriorityInput, ActionPriorityResult, CpkToOccurrenceInput, CpkToOccurrenceResult, NelsonRulesInput, NelsonViolation, NelsonRulesResult, } from './types.js';
|
|
20
23
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/quality/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/quality/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,YAAY,EAEV,UAAU,EACV,QAAQ,EACR,SAAS,EAET,QAAQ,EACR,SAAS,EAET,cAAc,EACd,eAAe,EAEf,QAAQ,EACR,aAAa,EACb,cAAc,EAEd,eAAe,EACf,QAAQ,EACR,SAAS,EAET,aAAa,EACb,cAAc,EAEd,SAAS,EACT,UAAU,EAEV,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EAChB,mBAAmB,EAEnB,SAAS,EACT,UAAU,EAEV,QAAQ,EACR,SAAS,EAET,WAAW,EACX,QAAQ,EACR,SAAS,EAET,QAAQ,EACR,SAAS,EACT,SAAS,EAET,UAAU,EACV,WAAW,EAEX,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAElB,WAAW,EACX,YAAY,EAEZ,QAAQ,EACR,SAAS,EAET,YAAY,EACZ,aAAa,EAEb,UAAU,EACV,WAAW,EACX,oBAAoB,EACpB,YAAY,EAEZ,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EAEpB,oBAAoB,EACpB,qBAAqB,EAErB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,GAClB,MAAM,YAAY,CAAC"}
|
package/dist/quality/index.js
CHANGED
|
@@ -17,4 +17,7 @@ export { gageRR } from './gageRR.js';
|
|
|
17
17
|
export { cmk } from './cmk.js';
|
|
18
18
|
export { weibull } from './weibull.js';
|
|
19
19
|
export { paretoAnalysis } from './paretoAnalysis.js';
|
|
20
|
+
export { actionPriority } from './actionPriority.js';
|
|
21
|
+
export { cpkToOccurrence } from './cpkToOccurrence.js';
|
|
22
|
+
export { nelsonRules } from './nelsonRules.js';
|
|
20
23
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/quality/index.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/quality/index.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { NelsonRulesInput, NelsonRulesResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Nelson Rules for SPC Control Chart Analysis
|
|
4
|
+
*
|
|
5
|
+
* Eight rules to detect non-random patterns in control chart data,
|
|
6
|
+
* indicating special cause variation.
|
|
7
|
+
*
|
|
8
|
+
* @reference Nelson, L.S. (1984). "The Shewhart Control Chart — Tests for Special Causes".
|
|
9
|
+
* Journal of Quality Technology, 16(4), 237-239.
|
|
10
|
+
* @reference Western Electric (1956). "Statistical Quality Control Handbook".
|
|
11
|
+
*
|
|
12
|
+
* @throws {RangeError} Values array must have at least 1 element
|
|
13
|
+
* @throws {RangeError} Sigma must be a positive number
|
|
14
|
+
*/
|
|
15
|
+
export declare function nelsonRules(input: NelsonRulesInput): NelsonRulesResult;
|
|
16
|
+
//# sourceMappingURL=nelsonRules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nelsonRules.d.ts","sourceRoot":"","sources":["../../src/quality/nelsonRules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAmB,MAAM,YAAY,CAAC;AAEvF;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,CAqCtE"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nelson Rules for SPC Control Chart Analysis
|
|
3
|
+
*
|
|
4
|
+
* Eight rules to detect non-random patterns in control chart data,
|
|
5
|
+
* indicating special cause variation.
|
|
6
|
+
*
|
|
7
|
+
* @reference Nelson, L.S. (1984). "The Shewhart Control Chart — Tests for Special Causes".
|
|
8
|
+
* Journal of Quality Technology, 16(4), 237-239.
|
|
9
|
+
* @reference Western Electric (1956). "Statistical Quality Control Handbook".
|
|
10
|
+
*
|
|
11
|
+
* @throws {RangeError} Values array must have at least 1 element
|
|
12
|
+
* @throws {RangeError} Sigma must be a positive number
|
|
13
|
+
*/
|
|
14
|
+
export function nelsonRules(input) {
|
|
15
|
+
const { values, centerLine, sigma, rules = [1, 2, 3, 4, 5, 6, 7, 8] } = input;
|
|
16
|
+
if (!Array.isArray(values) || values.length < 1) {
|
|
17
|
+
throw new RangeError('Values array must have at least 1 element');
|
|
18
|
+
}
|
|
19
|
+
if (!Number.isFinite(sigma) || sigma <= 0) {
|
|
20
|
+
throw new RangeError('Sigma must be a positive number');
|
|
21
|
+
}
|
|
22
|
+
if (!Number.isFinite(centerLine)) {
|
|
23
|
+
throw new RangeError('Center line must be a finite number');
|
|
24
|
+
}
|
|
25
|
+
const violations = [];
|
|
26
|
+
const ruleCheckers = {
|
|
27
|
+
1: () => checkRule1(values, centerLine, sigma),
|
|
28
|
+
2: () => checkRule2(values, centerLine),
|
|
29
|
+
3: () => checkRule3(values),
|
|
30
|
+
4: () => checkRule4(values),
|
|
31
|
+
5: () => checkRule5(values, centerLine, sigma),
|
|
32
|
+
6: () => checkRule6(values, centerLine, sigma),
|
|
33
|
+
7: () => checkRule7(values, centerLine, sigma),
|
|
34
|
+
8: () => checkRule8(values, centerLine, sigma),
|
|
35
|
+
};
|
|
36
|
+
for (const rule of rules) {
|
|
37
|
+
if (rule >= 1 && rule <= 8) {
|
|
38
|
+
const result = ruleCheckers[rule]();
|
|
39
|
+
if (result)
|
|
40
|
+
violations.push(result);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
violations,
|
|
45
|
+
hasViolation: violations.length > 0,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
const RULE_DESCRIPTIONS = {
|
|
49
|
+
1: 'One point beyond 3σ from center line',
|
|
50
|
+
2: 'Nine consecutive points on same side of center line',
|
|
51
|
+
3: 'Six consecutive points steadily increasing or decreasing',
|
|
52
|
+
4: 'Fourteen consecutive points alternating up and down',
|
|
53
|
+
5: 'Two of three consecutive points beyond 2σ (same side)',
|
|
54
|
+
6: 'Four of five consecutive points beyond 1σ (same side)',
|
|
55
|
+
7: 'Fifteen consecutive points within ±1σ (stratification)',
|
|
56
|
+
8: 'Eight consecutive points beyond ±1σ on both sides (mixture)',
|
|
57
|
+
};
|
|
58
|
+
// Rule 1: One point > 3σ from CL
|
|
59
|
+
function checkRule1(values, cl, sigma) {
|
|
60
|
+
const indices = [];
|
|
61
|
+
for (let i = 0; i < values.length; i++) {
|
|
62
|
+
if (Math.abs(values[i] - cl) > 3 * sigma) {
|
|
63
|
+
indices.push(i);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return indices.length > 0 ? { rule: 1, description: RULE_DESCRIPTIONS[1], indices } : null;
|
|
67
|
+
}
|
|
68
|
+
// Rule 2: Nine consecutive points on same side of CL
|
|
69
|
+
function checkRule2(values, cl) {
|
|
70
|
+
const indices = [];
|
|
71
|
+
const n = values.length;
|
|
72
|
+
if (n < 9)
|
|
73
|
+
return null;
|
|
74
|
+
for (let i = 0; i <= n - 9; i++) {
|
|
75
|
+
const above = values.slice(i, i + 9).every(v => v > cl);
|
|
76
|
+
const below = values.slice(i, i + 9).every(v => v < cl);
|
|
77
|
+
if (above || below) {
|
|
78
|
+
for (let j = i; j < i + 9; j++) {
|
|
79
|
+
if (!indices.includes(j))
|
|
80
|
+
indices.push(j);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return indices.length > 0 ? { rule: 2, description: RULE_DESCRIPTIONS[2], indices } : null;
|
|
85
|
+
}
|
|
86
|
+
// Rule 3: Six consecutive points steadily increasing or decreasing
|
|
87
|
+
function checkRule3(values) {
|
|
88
|
+
const indices = [];
|
|
89
|
+
const n = values.length;
|
|
90
|
+
if (n < 6)
|
|
91
|
+
return null;
|
|
92
|
+
for (let i = 0; i <= n - 6; i++) {
|
|
93
|
+
let increasing = true;
|
|
94
|
+
let decreasing = true;
|
|
95
|
+
for (let j = i; j < i + 5; j++) {
|
|
96
|
+
if (values[j + 1] <= values[j])
|
|
97
|
+
increasing = false;
|
|
98
|
+
if (values[j + 1] >= values[j])
|
|
99
|
+
decreasing = false;
|
|
100
|
+
}
|
|
101
|
+
if (increasing || decreasing) {
|
|
102
|
+
for (let j = i; j < i + 6; j++) {
|
|
103
|
+
if (!indices.includes(j))
|
|
104
|
+
indices.push(j);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return indices.length > 0 ? { rule: 3, description: RULE_DESCRIPTIONS[3], indices } : null;
|
|
109
|
+
}
|
|
110
|
+
// Rule 4: Fourteen consecutive points alternating up and down
|
|
111
|
+
function checkRule4(values) {
|
|
112
|
+
const indices = [];
|
|
113
|
+
const n = values.length;
|
|
114
|
+
if (n < 14)
|
|
115
|
+
return null;
|
|
116
|
+
for (let i = 0; i <= n - 14; i++) {
|
|
117
|
+
let alternating = true;
|
|
118
|
+
for (let j = i; j < i + 13; j++) {
|
|
119
|
+
const dir1 = values[j + 1] - values[j];
|
|
120
|
+
const dir2 = j + 2 < values.length ? values[j + 2] - values[j + 1] : 0;
|
|
121
|
+
if (j < i + 12 && dir1 * dir2 >= 0) {
|
|
122
|
+
alternating = false;
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
if (alternating) {
|
|
127
|
+
for (let j = i; j < i + 14; j++) {
|
|
128
|
+
if (!indices.includes(j))
|
|
129
|
+
indices.push(j);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return indices.length > 0 ? { rule: 4, description: RULE_DESCRIPTIONS[4], indices } : null;
|
|
134
|
+
}
|
|
135
|
+
// Rule 5: Two of three consecutive points > 2σ from CL (same side)
|
|
136
|
+
function checkRule5(values, cl, sigma) {
|
|
137
|
+
const indices = [];
|
|
138
|
+
const n = values.length;
|
|
139
|
+
if (n < 3)
|
|
140
|
+
return null;
|
|
141
|
+
for (let i = 0; i <= n - 3; i++) {
|
|
142
|
+
const window = values.slice(i, i + 3);
|
|
143
|
+
const aboveCount = window.filter(v => v > cl + 2 * sigma).length;
|
|
144
|
+
const belowCount = window.filter(v => v < cl - 2 * sigma).length;
|
|
145
|
+
if (aboveCount >= 2 || belowCount >= 2) {
|
|
146
|
+
for (let j = i; j < i + 3; j++) {
|
|
147
|
+
if (!indices.includes(j))
|
|
148
|
+
indices.push(j);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return indices.length > 0 ? { rule: 5, description: RULE_DESCRIPTIONS[5], indices } : null;
|
|
153
|
+
}
|
|
154
|
+
// Rule 6: Four of five consecutive points > 1σ from CL (same side)
|
|
155
|
+
function checkRule6(values, cl, sigma) {
|
|
156
|
+
const indices = [];
|
|
157
|
+
const n = values.length;
|
|
158
|
+
if (n < 5)
|
|
159
|
+
return null;
|
|
160
|
+
for (let i = 0; i <= n - 5; i++) {
|
|
161
|
+
const window = values.slice(i, i + 5);
|
|
162
|
+
const aboveCount = window.filter(v => v > cl + sigma).length;
|
|
163
|
+
const belowCount = window.filter(v => v < cl - sigma).length;
|
|
164
|
+
if (aboveCount >= 4 || belowCount >= 4) {
|
|
165
|
+
for (let j = i; j < i + 5; j++) {
|
|
166
|
+
if (!indices.includes(j))
|
|
167
|
+
indices.push(j);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return indices.length > 0 ? { rule: 6, description: RULE_DESCRIPTIONS[6], indices } : null;
|
|
172
|
+
}
|
|
173
|
+
// Rule 7: Fifteen consecutive points within ±1σ (stratification)
|
|
174
|
+
function checkRule7(values, cl, sigma) {
|
|
175
|
+
const indices = [];
|
|
176
|
+
const n = values.length;
|
|
177
|
+
if (n < 15)
|
|
178
|
+
return null;
|
|
179
|
+
for (let i = 0; i <= n - 15; i++) {
|
|
180
|
+
const allWithin = values.slice(i, i + 15).every(v => Math.abs(v - cl) < sigma);
|
|
181
|
+
if (allWithin) {
|
|
182
|
+
for (let j = i; j < i + 15; j++) {
|
|
183
|
+
if (!indices.includes(j))
|
|
184
|
+
indices.push(j);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return indices.length > 0 ? { rule: 7, description: RULE_DESCRIPTIONS[7], indices } : null;
|
|
189
|
+
}
|
|
190
|
+
// Rule 8: Eight consecutive points beyond ±1σ on both sides (mixture)
|
|
191
|
+
function checkRule8(values, cl, sigma) {
|
|
192
|
+
const indices = [];
|
|
193
|
+
const n = values.length;
|
|
194
|
+
if (n < 8)
|
|
195
|
+
return null;
|
|
196
|
+
for (let i = 0; i <= n - 8; i++) {
|
|
197
|
+
const window = values.slice(i, i + 8);
|
|
198
|
+
const allBeyond = window.every(v => Math.abs(v - cl) > sigma);
|
|
199
|
+
if (!allBeyond)
|
|
200
|
+
continue;
|
|
201
|
+
// Must have points on both sides
|
|
202
|
+
const hasAbove = window.some(v => v > cl + sigma);
|
|
203
|
+
const hasBelow = window.some(v => v < cl - sigma);
|
|
204
|
+
if (hasAbove && hasBelow) {
|
|
205
|
+
for (let j = i; j < i + 8; j++) {
|
|
206
|
+
if (!indices.includes(j))
|
|
207
|
+
indices.push(j);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return indices.length > 0 ? { rule: 8, description: RULE_DESCRIPTIONS[8], indices } : null;
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=nelsonRules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nelsonRules.js","sourceRoot":"","sources":["../../src/quality/nelsonRules.ts"],"names":[],"mappings":"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"}
|