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.
@@ -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
- protected getLogs(data: number[], value: number, change: ChangeType, parameters: {
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, change, parameters, result) {
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
- ans.push(` Arguments:`);
56
- ans.push(` ------------------------`);
57
- Object.keys(parameters).forEach(p => {
58
- ans.push(` ${p}: ${parameters[p]}`);
59
- });
60
- ans.push(` ------------------------`);
61
- ans.push(` Values:`);
62
- ans.push(` ------------------------`);
63
- Object.keys(result.values).forEach(p => {
64
- ans.push(` ${p}: ${result.values[p]}`);
65
- });
66
- ans.push(` ------------------------`);
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":"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"}
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
- let err = this.checkLength(data, 1);
8
- if (err)
9
- return err;
10
- let last = data[data.length - 2];
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,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACpC,IAAI,GAAG;YACH,OAAO,GAAG,CAAC;QAEf,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjC,IAAI,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC;QAE9B,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QACjE,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;AApBD,oDAoBC"}
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
- let err = this.checkLength(data, 1);
8
- if (err)
9
- return err;
10
- let last = data[data.length - 2];
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,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACpC,IAAI,GAAG;YACH,OAAO,GAAG,CAAC;QAEf,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,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3D,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;AApBD,4DAoBC"}
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
@@ -8,7 +8,7 @@
8
8
  "framework": "npm",
9
9
  "application": "package",
10
10
  "private": false,
11
- "version": "1.4.13",
11
+ "version": "1.4.15",
12
12
  "author": "Amir Abolhasani",
13
13
  "license": "MIT",
14
14
  "main": "./dist/index.js",
@@ -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
- protected getLogs(data: number[], value: number, change: ChangeType, parameters: { [name: string]: number }, result: CalculationResult): string[]
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
- ans.push(` Arguments:`);
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(` ${p}: ${parameters[p]}`);
69
- });
70
- ans.push(` ------------------------`);
71
- ans.push(` Values:`);
72
- ans.push(` ------------------------`);
73
- Object.keys(result.values).forEach(p =>
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(` ${p}: ${result.values[p]}`);
76
- });
77
- ans.push(` ------------------------`);
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
- let err = this.checkLength(data, 1);
10
- if (err)
11
- return err;
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 - 2];
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
- let err = this.checkLength(data, 1);
10
- if (err)
11
- return err;
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 - 2];
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