namirasoft-bill-watch 1.4.13 → 1.4.15
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/dist/formula/BaseFormula.d.ts +2 -3
- package/dist/formula/BaseFormula.js +20 -14
- package/dist/formula/BaseFormula.js.map +1 -1
- package/dist/formula/statistical/amount/Formula_AmountByLast.js +8 -5
- package/dist/formula/statistical/amount/Formula_AmountByLast.js.map +1 -1
- package/dist/formula/statistical/percent/Formula_PercentageByLast.js +8 -5
- package/dist/formula/statistical/percent/Formula_PercentageByLast.js.map +1 -1
- package/package.json +1 -1
- package/src/formula/BaseFormula.ts +23 -14
- package/src/formula/statistical/amount/Formula_AmountByLast.ts +8 -5
- package/src/formula/statistical/percent/Formula_PercentageByLast.ts +8 -5
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { CalculationResult } from "./CalculationResult";
|
|
2
2
|
import { ChangeType } from "./ChangeType";
|
|
3
|
+
import { FormulaRow } from "./FormulaRow";
|
|
3
4
|
export declare abstract class BaseFormula {
|
|
4
5
|
checkLength(data: number[], min_length: number): CalculationResult | null;
|
|
5
6
|
checkChnage(change: ChangeType, difference: number, values: {
|
|
@@ -9,7 +10,5 @@ export declare abstract class BaseFormula {
|
|
|
9
10
|
abstract evaluate(data: number[], value: number, change: ChangeType, parameters: {
|
|
10
11
|
[name: string]: number;
|
|
11
12
|
}): CalculationResult;
|
|
12
|
-
|
|
13
|
-
[name: string]: number;
|
|
14
|
-
}, result: CalculationResult): string[];
|
|
13
|
+
static getLogs(data: number[], value: number, formula: FormulaRow, result: CalculationResult): string[];
|
|
15
14
|
}
|
|
@@ -38,7 +38,7 @@ class BaseFormula {
|
|
|
38
38
|
return (sorted[mid - 1] + sorted[mid]) / 2;
|
|
39
39
|
return sorted[mid];
|
|
40
40
|
}
|
|
41
|
-
getLogs(data, value,
|
|
41
|
+
static getLogs(data, value, formula, result) {
|
|
42
42
|
let ans = [];
|
|
43
43
|
if (result.value === true)
|
|
44
44
|
ans.push(`Anomaly has been detected`);
|
|
@@ -49,21 +49,27 @@ class BaseFormula {
|
|
|
49
49
|
ans.push(` ----------------------------`);
|
|
50
50
|
if (result.reason)
|
|
51
51
|
ans.push(` Reason: ${result.reason}`);
|
|
52
|
+
ans.push(` Name: ${formula.name}`);
|
|
52
53
|
ans.push(` Data: ${data.join(", ")}`);
|
|
54
|
+
ans.push(` Data Length: ${data.length}`);
|
|
53
55
|
ans.push(` Value: ${value}`);
|
|
54
|
-
ans.push(` Change Type: ${change}`);
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
Object.keys(result.values).
|
|
64
|
-
ans.push(`
|
|
65
|
-
|
|
66
|
-
|
|
56
|
+
ans.push(` Change Type: ${formula.change}`);
|
|
57
|
+
if (Object.keys(formula.parameters).length > 0) {
|
|
58
|
+
ans.push(` Arguments:`);
|
|
59
|
+
ans.push(` ------------------------`);
|
|
60
|
+
Object.keys(formula.parameters).forEach(p => {
|
|
61
|
+
ans.push(` ${p}: ${formula.parameters[p]}`);
|
|
62
|
+
});
|
|
63
|
+
ans.push(` ------------------------`);
|
|
64
|
+
}
|
|
65
|
+
if (Object.keys(result.values).length > 0) {
|
|
66
|
+
ans.push(` Values:`);
|
|
67
|
+
ans.push(` ------------------------`);
|
|
68
|
+
Object.keys(result.values).forEach(p => {
|
|
69
|
+
ans.push(` ${p}: ${result.values[p]}`);
|
|
70
|
+
});
|
|
71
|
+
ans.push(` ------------------------`);
|
|
72
|
+
}
|
|
67
73
|
ans.push(` ----------------------------`);
|
|
68
74
|
return ans;
|
|
69
75
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseFormula.js","sourceRoot":"","sources":["../../src/formula/BaseFormula.ts"],"names":[],"mappings":";;;AACA,6CAA0C;
|
|
1
|
+
{"version":3,"file":"BaseFormula.js","sourceRoot":"","sources":["../../src/formula/BaseFormula.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,12 +4,15 @@ exports.Formula_AmountByLast = void 0;
|
|
|
4
4
|
const BaseFormula_1 = require("../../BaseFormula");
|
|
5
5
|
class Formula_AmountByLast extends BaseFormula_1.BaseFormula {
|
|
6
6
|
evaluate(data, value, change, parameters) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
if (data.length == 0)
|
|
8
|
+
return {
|
|
9
|
+
value: true,
|
|
10
|
+
reason: "New Cost",
|
|
11
|
+
values: {}
|
|
12
|
+
};
|
|
13
|
+
let last = data[data.length - 1];
|
|
11
14
|
let difference = value - last;
|
|
12
|
-
err = this.checkChnage(change, difference, { last, difference });
|
|
15
|
+
let err = this.checkChnage(change, difference, { last, difference });
|
|
13
16
|
if (err)
|
|
14
17
|
return err;
|
|
15
18
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Formula_AmountByLast.js","sourceRoot":"","sources":["../../../../src/formula/statistical/amount/Formula_AmountByLast.ts"],"names":[],"mappings":";;;AAAA,mDAAgD;AAIhD,MAAa,oBAAqB,SAAQ,yBAAW;IAEjD,QAAQ,CAAC,IAAc,EAAE,KAAa,EAAE,MAAkB,EAAE,UAAiC;QAEzF,IAAI,
|
|
1
|
+
{"version":3,"file":"Formula_AmountByLast.js","sourceRoot":"","sources":["../../../../src/formula/statistical/amount/Formula_AmountByLast.ts"],"names":[],"mappings":";;;AAAA,mDAAgD;AAIhD,MAAa,oBAAqB,SAAQ,yBAAW;IAEjD,QAAQ,CAAC,IAAc,EAAE,KAAa,EAAE,MAAkB,EAAE,UAAiC;QAEzF,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;YAChB,OAAO;gBACH,KAAK,EAAE,IAAI;gBACX,MAAM,EAAE,UAAU;gBAClB,MAAM,EAAE,EAAE;aACb,CAAC;QAEN,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjC,IAAI,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC;QAE9B,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QACrE,IAAI,GAAG;YACH,OAAO,GAAG,CAAC;QAEf,OAAO;YACH,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,SAAS;YACnD,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;SAC/B,CAAC;IACN,CAAC;CACJ;AAvBD,oDAuBC"}
|
|
@@ -4,12 +4,15 @@ exports.Formula_PercentageByLast = void 0;
|
|
|
4
4
|
const BaseFormula_1 = require("../../BaseFormula");
|
|
5
5
|
class Formula_PercentageByLast extends BaseFormula_1.BaseFormula {
|
|
6
6
|
evaluate(data, value, change, parameters) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
if (data.length == 0)
|
|
8
|
+
return {
|
|
9
|
+
value: true,
|
|
10
|
+
reason: "New Cost",
|
|
11
|
+
values: {}
|
|
12
|
+
};
|
|
13
|
+
let last = data[data.length - 1];
|
|
11
14
|
let percent = (value - last) / last * 100;
|
|
12
|
-
err = this.checkChnage(change, percent, { last, percent });
|
|
15
|
+
let err = this.checkChnage(change, percent, { last, percent });
|
|
13
16
|
if (err)
|
|
14
17
|
return err;
|
|
15
18
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Formula_PercentageByLast.js","sourceRoot":"","sources":["../../../../src/formula/statistical/percent/Formula_PercentageByLast.ts"],"names":[],"mappings":";;;AAAA,mDAAgD;AAIhD,MAAa,wBAAyB,SAAQ,yBAAW;IAErD,QAAQ,CAAC,IAAc,EAAE,KAAa,EAAE,MAAkB,EAAE,UAAiC;QAEzF,IAAI,
|
|
1
|
+
{"version":3,"file":"Formula_PercentageByLast.js","sourceRoot":"","sources":["../../../../src/formula/statistical/percent/Formula_PercentageByLast.ts"],"names":[],"mappings":";;;AAAA,mDAAgD;AAIhD,MAAa,wBAAyB,SAAQ,yBAAW;IAErD,QAAQ,CAAC,IAAc,EAAE,KAAa,EAAE,MAAkB,EAAE,UAAiC;QAEzF,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;YAChB,OAAO;gBACH,KAAK,EAAE,IAAI;gBACX,MAAM,EAAE,UAAU;gBAClB,MAAM,EAAE,EAAE;aACb,CAAC;QAEN,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjC,IAAI,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC;QAE1C,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/D,IAAI,GAAG;YACH,OAAO,GAAG,CAAC;QAEf,OAAO;YACH,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,SAAS;YAChD,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;SAC5B,CAAC;IACN,CAAC;CACJ;AAvBD,4DAuBC"}
|
package/package.json
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { CalculationResult } from "./CalculationResult";
|
|
2
2
|
import { ChangeType } from "./ChangeType";
|
|
3
|
+
import { FormulaRow } from "./FormulaRow";
|
|
3
4
|
|
|
4
5
|
export abstract class BaseFormula
|
|
5
6
|
{
|
|
@@ -46,7 +47,7 @@ export abstract class BaseFormula
|
|
|
46
47
|
return sorted[mid];
|
|
47
48
|
}
|
|
48
49
|
abstract evaluate(data: number[], value: number, change: ChangeType, parameters: { [name: string]: number }): CalculationResult;
|
|
49
|
-
|
|
50
|
+
static getLogs(data: number[], value: number, formula: FormulaRow, result: CalculationResult): string[]
|
|
50
51
|
{
|
|
51
52
|
let ans: string[] = [];
|
|
52
53
|
if (result.value === true)
|
|
@@ -58,23 +59,31 @@ export abstract class BaseFormula
|
|
|
58
59
|
ans.push(` ----------------------------`);
|
|
59
60
|
if (result.reason)
|
|
60
61
|
ans.push(` Reason: ${result.reason}`);
|
|
62
|
+
ans.push(` Name: ${formula.name}`);
|
|
61
63
|
ans.push(` Data: ${data.join(", ")}`);
|
|
64
|
+
ans.push(` Data Length: ${data.length}`);
|
|
62
65
|
ans.push(` Value: ${value}`);
|
|
63
|
-
ans.push(` Change Type: ${change}`);
|
|
64
|
-
|
|
65
|
-
ans.push(` ------------------------`);
|
|
66
|
-
Object.keys(parameters).forEach(p =>
|
|
66
|
+
ans.push(` Change Type: ${formula.change}`);
|
|
67
|
+
if (Object.keys(formula.parameters).length > 0)
|
|
67
68
|
{
|
|
68
|
-
ans.push(`
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
69
|
+
ans.push(` Arguments:`);
|
|
70
|
+
ans.push(` ------------------------`);
|
|
71
|
+
Object.keys(formula.parameters).forEach(p =>
|
|
72
|
+
{
|
|
73
|
+
ans.push(` ${p}: ${formula.parameters[p]}`);
|
|
74
|
+
});
|
|
75
|
+
ans.push(` ------------------------`);
|
|
76
|
+
}
|
|
77
|
+
if (Object.keys(result.values).length > 0)
|
|
74
78
|
{
|
|
75
|
-
ans.push(`
|
|
76
|
-
|
|
77
|
-
|
|
79
|
+
ans.push(` Values:`);
|
|
80
|
+
ans.push(` ------------------------`);
|
|
81
|
+
Object.keys(result.values).forEach(p =>
|
|
82
|
+
{
|
|
83
|
+
ans.push(` ${p}: ${result.values[p]}`);
|
|
84
|
+
});
|
|
85
|
+
ans.push(` ------------------------`);
|
|
86
|
+
}
|
|
78
87
|
ans.push(` ----------------------------`);
|
|
79
88
|
|
|
80
89
|
return ans;
|
|
@@ -6,14 +6,17 @@ export class Formula_AmountByLast extends BaseFormula
|
|
|
6
6
|
{
|
|
7
7
|
evaluate(data: number[], value: number, change: ChangeType, parameters: { threshold: number }): CalculationResult
|
|
8
8
|
{
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
if (data.length == 0)
|
|
10
|
+
return {
|
|
11
|
+
value: true,
|
|
12
|
+
reason: "New Cost",
|
|
13
|
+
values: {}
|
|
14
|
+
};
|
|
12
15
|
|
|
13
|
-
let last = data[data.length -
|
|
16
|
+
let last = data[data.length - 1];
|
|
14
17
|
let difference = value - last;
|
|
15
18
|
|
|
16
|
-
err = this.checkChnage(change, difference, { last, difference });
|
|
19
|
+
let err = this.checkChnage(change, difference, { last, difference });
|
|
17
20
|
if (err)
|
|
18
21
|
return err;
|
|
19
22
|
|
|
@@ -6,14 +6,17 @@ export class Formula_PercentageByLast extends BaseFormula
|
|
|
6
6
|
{
|
|
7
7
|
evaluate(data: number[], value: number, change: ChangeType, parameters: { threshold: number }): CalculationResult
|
|
8
8
|
{
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
if (data.length == 0)
|
|
10
|
+
return {
|
|
11
|
+
value: true,
|
|
12
|
+
reason: "New Cost",
|
|
13
|
+
values: {}
|
|
14
|
+
};
|
|
12
15
|
|
|
13
|
-
let last = data[data.length -
|
|
16
|
+
let last = data[data.length - 1];
|
|
14
17
|
let percent = (value - last) / last * 100;
|
|
15
18
|
|
|
16
|
-
err = this.checkChnage(change, percent, { last, percent });
|
|
19
|
+
let err = this.checkChnage(change, percent, { last, percent });
|
|
17
20
|
if (err)
|
|
18
21
|
return err;
|
|
19
22
|
|