@operato/dataset 1.0.0-beta.40 → 1.0.0-beta.44

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
@@ -3,6 +3,39 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [1.0.0-beta.44](https://github.com/hatiolab/operato/compare/v1.0.0-beta.43...v1.0.0-beta.44) (2022-07-07)
7
+
8
+ **Note:** Version bump only for package @operato/dataset
9
+
10
+
11
+
12
+
13
+
14
+ ## [1.0.0-beta.43](https://github.com/hatiolab/operato/compare/v1.0.0-beta.42...v1.0.0-beta.43) (2022-07-03)
15
+
16
+ **Note:** Version bump only for package @operato/dataset
17
+
18
+
19
+
20
+
21
+
22
+ ## [1.0.0-beta.42](https://github.com/hatiolab/operato/compare/v1.0.0-beta.41...v1.0.0-beta.42) (2022-07-03)
23
+
24
+ **Note:** Version bump only for package @operato/dataset
25
+
26
+
27
+
28
+
29
+
30
+ ## [1.0.0-beta.41](https://github.com/hatiolab/operato/compare/v1.0.0-beta.40...v1.0.0-beta.41) (2022-06-30)
31
+
32
+
33
+ ### :bug: Bug Fix
34
+
35
+ * dataset ([44ee34a](https://github.com/hatiolab/operato/commit/44ee34a52b9d7597061e624067aaf3f7cde703c1))
36
+
37
+
38
+
6
39
  ## [1.0.0-beta.40](https://github.com/hatiolab/operato/compare/v1.0.0-beta.39...v1.0.0-beta.40) (2022-06-29)
7
40
 
8
41
 
@@ -8,5 +8,4 @@ export declare class OxDataSampleView extends LitElement {
8
8
  private onChange;
9
9
  private buildSpec;
10
10
  private buildValue;
11
- private evaluateOOC;
12
11
  }
@@ -6,8 +6,9 @@ import { i18next } from '@operato/i18n';
6
6
  import { OxDataUseCase } from './usecase/ox-data-use-case.js';
7
7
  let OxDataSampleView = class OxDataSampleView extends LitElement {
8
8
  render() {
9
- var { data = {}, spec: dataItems = [] } = this.dataSample || {};
9
+ var { useCase, data = {}, judgment, dataItems = [] } = this.dataSample || {};
10
10
  const formatter = new Intl.DateTimeFormat(navigator.language, { dateStyle: 'full', timeStyle: 'short' });
11
+ const useCaseNames = (useCase === null || useCase === void 0 ? void 0 : useCase.split(',').filter(useCase => useCase.trim())) || [];
11
12
  const { name, description, collectedAt, workDate, workShift } = this.dataSample || {};
12
13
  /* TODO below converting logic should be removed after dataset migration */
13
14
  if (!(dataItems instanceof Array)) {
@@ -39,14 +40,14 @@ let OxDataSampleView = class OxDataSampleView extends LitElement {
39
40
  ${dataItems.map(dataItem => {
40
41
  const { name = '', tag = '', description = '', unit = '', spec = {} } = dataItem;
41
42
  const value = data[tag];
42
- const { ooc, oos } = this.evaluateOOC(spec, value) || {};
43
+ const { ooc, oos } = (judgment === null || judgment === void 0 ? void 0 : judgment[tag]) || {};
43
44
  return html `
44
45
  <tr ?ooc=${ooc} ?oos=${oos}>
45
46
  <td name>${name}</td>
46
47
  <td>${description}</td>
47
48
  <td>${unit}</td>
48
49
  <td>${this.buildValue(value)}</td>
49
- <td><pre>${this.buildSpec(spec)}</pre></td>
50
+ <td><pre>${this.buildSpec(useCaseNames, spec)}</pre></td>
50
51
  <td>${ooc ? html `<mwc-icon>done</mwc-icon>` : ''}</td>
51
52
  <td>${oos ? html `<mwc-icon>done</mwc-icon>` : ''}</td>
52
53
  </tr>
@@ -56,8 +57,8 @@ let OxDataSampleView = class OxDataSampleView extends LitElement {
56
57
  </form>`;
57
58
  }
58
59
  onChange(e) { }
59
- buildSpec(spec) {
60
- return OxDataUseCase.elaborateDataItemSpec(spec);
60
+ buildSpec(useCaseNames, spec) {
61
+ return OxDataUseCase.elaborateDataItemSpec(useCaseNames, spec);
61
62
  }
62
63
  buildValue(value) {
63
64
  if (value === undefined) {
@@ -75,9 +76,6 @@ let OxDataSampleView = class OxDataSampleView extends LitElement {
75
76
  });
76
77
  return typeof values[0] === 'boolean' ? elements : elements.join(', ');
77
78
  }
78
- evaluateOOC(spec, value) {
79
- return OxDataUseCase.evaluateItem(spec, value);
80
- }
81
79
  };
82
80
  OxDataSampleView.styles = css `
83
81
  :host {
@@ -1 +1 @@
1
- {"version":3,"file":"ox-data-sample-view.js","sourceRoot":"","sources":["../../src/ox-data-sample-view.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/input/ox-input-file.js'\n\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\nimport { i18next } from '@operato/i18n'\n\nimport { DataSample, DataSpecLimitSet } from './types.js'\nimport { OxDataUseCase } from './usecase/ox-data-use-case.js'\n\n@customElement('ox-data-sample-view')\nexport class OxDataSampleView extends LitElement {\n static styles = css`\n :host {\n display: flex;\n flex-direction: column;\n }\n\n form {\n flex: 1;\n\n display: flex;\n flex-direction: column;\n }\n\n h2 {\n margin: var(--title-margin);\n font: var(--title-font);\n color: var(--title-text-color);\n text-transform: capitalize;\n }\n [page-description] {\n margin: var(--page-description-margin);\n opacity: 0.7;\n font: var(--page-description-font);\n color: var(--secondary-color);\n text-transform: capitalize;\n }\n [page-description] * {\n vertical-align: middle;\n }\n [page-description] mwc-icon {\n margin-top: -2px;\n font-size: 0.9rem;\n color: var(--page-description-color);\n }\n\n table {\n border-collapse: collapse;\n margin-bottom: var(--margin-default);\n }\n th {\n padding: var(--th-padding);\n border-top: var(--th-border-top);\n border-bottom: var(--td-border-bottom);\n text-transform: var(--th-text-transform);\n font: var(--th-font);\n color: var(--th-color);\n text-align: left;\n }\n th[item] {\n min-width: 100px;\n }\n th[value] {\n min-width: 100px;\n }\n tr {\n background-color: var(--tr-background-color);\n }\n tr:nth-child(odd) {\n background-color: var(--tr-background-odd-color);\n }\n tr:hover {\n background-color: var(--tr-background-hover-color);\n }\n tr[ooc],\n tr[oos] {\n background-color: #fefbdf;\n }\n td {\n border-bottom: var(--td-border-bottom);\n padding: var(--td-padding);\n font: var(--td-font);\n color: var(--td-color);\n }\n td[name] {\n font-weight: bold;\n }\n td mwc-icon {\n color: var(--status-danger-color);\n }\n\n pre {\n tab-size: 2;\n }\n `\n\n @property({ type: Object }) dataSample?: DataSample\n\n render() {\n var { data = {}, spec: dataItems = [] } = this.dataSample || {}\n const formatter = new Intl.DateTimeFormat(navigator.language, { dateStyle: 'full', timeStyle: 'short' })\n\n const { name, description, collectedAt, workDate, workShift } = this.dataSample || {}\n\n /* TODO below converting logic should be removed after dataset migration */\n if (!(dataItems instanceof Array)) {\n dataItems = Object.keys(dataItems).map(tag => {\n var dataItem = (dataItems as any)[tag]\n dataItem.tag = tag\n return dataItem\n })\n }\n\n return html` <h2>${name}</h2>\n <p page-description>\n <mwc-icon>info_outline</mwc-icon> ${description}<br />\n <mwc-icon>alarm</mwc-icon> ${i18next.t('field.work-date')}: ${workDate} ${workShift} |\n <mwc-icon>pending_actions</mwc-icon> ${i18next.t('field.collected-at')}:\n ${formatter.format(new Date(collectedAt!))}\n </p>\n\n <form @change=${(e: Event) => this.onChange(e)}>\n <table>\n <tr>\n <th item>${i18next.t('field.item')}</th>\n <th>${i18next.t('field.description')}</th>\n <th>${i18next.t('field.unit')}</th>\n <th value>${i18next.t('field.value')}</th>\n <th>${i18next.t('field.spec')}</th>\n <th>${i18next.t('field.ooc')}</th>\n <th>${i18next.t('field.oos')}</th>\n </tr>\n ${dataItems.map(dataItem => {\n const { name = '', tag = '', description = '', unit = '', spec = {} } = dataItem\n const value = data[tag]\n const { ooc, oos } = this.evaluateOOC(spec, value) || {}\n\n return html`\n <tr ?ooc=${ooc} ?oos=${oos}>\n <td name>${name}</td>\n <td>${description}</td>\n <td>${unit}</td>\n <td>${this.buildValue(value)}</td>\n <td><pre>${this.buildSpec(spec)}</pre></td>\n <td>${ooc ? html`<mwc-icon>done</mwc-icon>` : ''}</td>\n <td>${oos ? html`<mwc-icon>done</mwc-icon>` : ''}</td>\n </tr>\n `\n })}\n </table>\n </form>`\n }\n\n private onChange(e: Event) {}\n\n private buildSpec(spec: DataSpecLimitSet) {\n return OxDataUseCase.elaborateDataItemSpec(spec)\n }\n\n private buildValue(value: any | any[]) {\n if (value === undefined) {\n return ''\n }\n const values = value instanceof Array ? value : [value]\n\n const elements = values.map((v: any, idx) => {\n switch (typeof v) {\n case 'boolean':\n return html` <input type=\"checkbox\" .checked=${v} disabled />`\n break\n\n default:\n return v === undefined ? '' : v\n }\n })\n\n return typeof values[0] === 'boolean' ? elements : elements.join(', ')\n }\n\n private evaluateOOC(spec: DataSpecLimitSet, value: any) {\n return OxDataUseCase.evaluateItem(spec, value)\n }\n}\n"]}
1
+ {"version":3,"file":"ox-data-sample-view.js","sourceRoot":"","sources":["../../src/ox-data-sample-view.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/input/ox-input-file.js'\n\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\nimport { i18next } from '@operato/i18n'\n\nimport { DataSample, DataSpecLimitSet } from './types.js'\nimport { OxDataUseCase } from './usecase/ox-data-use-case.js'\n\n@customElement('ox-data-sample-view')\nexport class OxDataSampleView extends LitElement {\n static styles = css`\n :host {\n display: flex;\n flex-direction: column;\n }\n\n form {\n flex: 1;\n\n display: flex;\n flex-direction: column;\n }\n\n h2 {\n margin: var(--title-margin);\n font: var(--title-font);\n color: var(--title-text-color);\n text-transform: capitalize;\n }\n [page-description] {\n margin: var(--page-description-margin);\n opacity: 0.7;\n font: var(--page-description-font);\n color: var(--secondary-color);\n text-transform: capitalize;\n }\n [page-description] * {\n vertical-align: middle;\n }\n [page-description] mwc-icon {\n margin-top: -2px;\n font-size: 0.9rem;\n color: var(--page-description-color);\n }\n\n table {\n border-collapse: collapse;\n margin-bottom: var(--margin-default);\n }\n th {\n padding: var(--th-padding);\n border-top: var(--th-border-top);\n border-bottom: var(--td-border-bottom);\n text-transform: var(--th-text-transform);\n font: var(--th-font);\n color: var(--th-color);\n text-align: left;\n }\n th[item] {\n min-width: 100px;\n }\n th[value] {\n min-width: 100px;\n }\n tr {\n background-color: var(--tr-background-color);\n }\n tr:nth-child(odd) {\n background-color: var(--tr-background-odd-color);\n }\n tr:hover {\n background-color: var(--tr-background-hover-color);\n }\n tr[ooc],\n tr[oos] {\n background-color: #fefbdf;\n }\n td {\n border-bottom: var(--td-border-bottom);\n padding: var(--td-padding);\n font: var(--td-font);\n color: var(--td-color);\n }\n td[name] {\n font-weight: bold;\n }\n td mwc-icon {\n color: var(--status-danger-color);\n }\n\n pre {\n tab-size: 2;\n }\n `\n\n @property({ type: Object }) dataSample?: DataSample\n\n render() {\n var { useCase, data = {}, judgment, dataItems = [] } = this.dataSample || {}\n const formatter = new Intl.DateTimeFormat(navigator.language, { dateStyle: 'full', timeStyle: 'short' })\n const useCaseNames = useCase?.split(',').filter(useCase => useCase.trim()) || []\n\n const { name, description, collectedAt, workDate, workShift } = this.dataSample || {}\n\n /* TODO below converting logic should be removed after dataset migration */\n if (!(dataItems instanceof Array)) {\n dataItems = Object.keys(dataItems).map(tag => {\n var dataItem = (dataItems as any)[tag]\n dataItem.tag = tag\n return dataItem\n })\n }\n\n return html` <h2>${name}</h2>\n <p page-description>\n <mwc-icon>info_outline</mwc-icon> ${description}<br />\n <mwc-icon>alarm</mwc-icon> ${i18next.t('field.work-date')}: ${workDate} ${workShift} |\n <mwc-icon>pending_actions</mwc-icon> ${i18next.t('field.collected-at')}:\n ${formatter.format(new Date(collectedAt!))}\n </p>\n\n <form @change=${(e: Event) => this.onChange(e)}>\n <table>\n <tr>\n <th item>${i18next.t('field.item')}</th>\n <th>${i18next.t('field.description')}</th>\n <th>${i18next.t('field.unit')}</th>\n <th value>${i18next.t('field.value')}</th>\n <th>${i18next.t('field.spec')}</th>\n <th>${i18next.t('field.ooc')}</th>\n <th>${i18next.t('field.oos')}</th>\n </tr>\n ${dataItems.map(dataItem => {\n const { name = '', tag = '', description = '', unit = '', spec = {} } = dataItem\n const value = data[tag]\n const { ooc, oos } = judgment?.[tag] || {}\n\n return html`\n <tr ?ooc=${ooc} ?oos=${oos}>\n <td name>${name}</td>\n <td>${description}</td>\n <td>${unit}</td>\n <td>${this.buildValue(value)}</td>\n <td><pre>${this.buildSpec(useCaseNames, spec)}</pre></td>\n <td>${ooc ? html`<mwc-icon>done</mwc-icon>` : ''}</td>\n <td>${oos ? html`<mwc-icon>done</mwc-icon>` : ''}</td>\n </tr>\n `\n })}\n </table>\n </form>`\n }\n\n private onChange(e: Event) {}\n\n private buildSpec(useCaseNames: string[], spec: DataSpecLimitSet): string {\n return OxDataUseCase.elaborateDataItemSpec(useCaseNames, spec)\n }\n\n private buildValue(value: any | any[]) {\n if (value === undefined) {\n return ''\n }\n const values = value instanceof Array ? value : [value]\n\n const elements = values.map((v: any, idx) => {\n switch (typeof v) {\n case 'boolean':\n return html` <input type=\"checkbox\" .checked=${v} disabled />`\n break\n\n default:\n return v === undefined ? '' : v\n }\n })\n\n return typeof values[0] === 'boolean' ? elements : elements.join(', ')\n }\n}\n"]}
@@ -59,12 +59,19 @@ export declare type DataSpecLimitSet = {
59
59
  export declare type DataCollection = {
60
60
  [tag: string]: any;
61
61
  };
62
+ export declare type Judgment = {
63
+ [tag: string]: {
64
+ ooc: boolean;
65
+ oos: boolean;
66
+ };
67
+ };
62
68
  export declare type DataSample = {
63
69
  name: string;
64
70
  description: string;
65
71
  useCase: string;
66
72
  data?: DataCollection;
67
- spec?: DataItem[];
73
+ judgment?: Judgment;
74
+ dataItems?: DataItem[];
68
75
  quota: number;
69
76
  workDate: string;
70
77
  workShift: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"","sourcesContent":["export type SelectOption = { text: string; value: string }\nexport type SelectOptions = SelectOption[]\nexport type TypeOptions = {\n options?: SelectOptions\n [prop: string]: any\n}\n\nexport type DataItem = {\n name: string\n description: string\n sequence: number\n tag: string\n type: string\n active: boolean\n options: TypeOptions\n unit: string\n quota: number\n spec: {\n [useCase: string]: {\n [limit: string]: number | string | string[] | boolean\n }\n }\n}\n\nexport type DataSet = {\n name: string\n description: string\n type: 'manual' | 'automatic'\n useCase: string\n active: boolean\n dataItems: DataItem[]\n spec: { [dataItem: string]: { [useCase: string]: any } }\n}\n\nexport type DataSpecDefinition = {\n type: string\n label: string\n name: string\n property?: { [option: string]: any }\n}\n\nexport type UseCaseDefinition = {\n name: string\n description: string\n help: string\n specs: DataSpecDefinition[]\n}\n\nexport type DataSpecLimit = {\n [limit: string]: number | string | string[] | boolean\n}\n\nexport type DataSpecLimitSet = {\n [useCase: string]: DataSpecLimit\n}\n\nexport type DataCollection = {\n [tag: string]: any\n}\n\nexport type DataSample = {\n name: string\n description: string\n useCase: string\n data?: DataCollection\n spec?: DataItem[]\n quota: number\n workDate: string\n workShift: string\n collectedAt: Date\n}\n\nexport type DataOocState = 'CREATED' | 'REVIEWED' | 'CORRECTED'\n\nexport type DataOoc = DataSample & {\n state: DataOocState\n correctiveAction: string\n history: {\n user: {\n id: string\n name: string\n }\n state: DataOocState\n comment: string\n timestamp: number\n }[]\n}\n\nexport type EvaluationResult = { oos: boolean; ooc: boolean }\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"","sourcesContent":["export type SelectOption = { text: string; value: string }\nexport type SelectOptions = SelectOption[]\nexport type TypeOptions = {\n options?: SelectOptions\n [prop: string]: any\n}\n\nexport type DataItem = {\n name: string\n description: string\n sequence: number\n tag: string\n type: string\n active: boolean\n options: TypeOptions\n unit: string\n quota: number\n spec: {\n [useCase: string]: {\n [limit: string]: number | string | string[] | boolean\n }\n }\n}\n\nexport type DataSet = {\n name: string\n description: string\n type: 'manual' | 'automatic'\n useCase: string\n active: boolean\n dataItems: DataItem[]\n spec: { [dataItem: string]: { [useCase: string]: any } }\n}\n\nexport type DataSpecDefinition = {\n type: string\n label: string\n name: string\n property?: { [option: string]: any }\n}\n\nexport type UseCaseDefinition = {\n name: string\n description: string\n help: string\n specs: DataSpecDefinition[]\n}\n\nexport type DataSpecLimit = {\n [limit: string]: number | string | string[] | boolean\n}\n\nexport type DataSpecLimitSet = {\n [useCase: string]: DataSpecLimit\n}\n\nexport type DataCollection = {\n [tag: string]: any\n}\n\nexport type Judgment = {\n [tag: string]: {\n ooc: boolean\n oos: boolean\n }\n}\n\nexport type DataSample = {\n name: string\n description: string\n useCase: string\n data?: DataCollection\n judgment?: Judgment\n dataItems?: DataItem[]\n quota: number\n workDate: string\n workShift: string\n collectedAt: Date\n}\n\nexport type DataOocState = 'CREATED' | 'REVIEWED' | 'CORRECTED'\n\nexport type DataOoc = DataSample & {\n state: DataOocState\n correctiveAction: string\n history: {\n user: {\n id: string\n name: string\n }\n state: DataOocState\n comment: string\n timestamp: number\n }[]\n}\n\nexport type EvaluationResult = { oos: boolean; ooc: boolean }\n"]}
@@ -35,30 +35,30 @@ export class OxDataUseCaseCCP extends OxDataUseCase {
35
35
  var ooc = false;
36
36
  for (let i = 0; i < values.length; i++) {
37
37
  const value = values[i];
38
- if (typeof criticalMinimum !== 'undefined' && value < criticalMinimum) {
38
+ if (criticalMinimum != null && value < criticalMinimum) {
39
39
  oos = true;
40
40
  break;
41
41
  }
42
- if (typeof criticalMaximum !== 'undefined' && value > criticalMaximum) {
42
+ if (criticalMaximum != null && value > criticalMaximum) {
43
43
  oos = true;
44
44
  break;
45
45
  }
46
- if (typeof criticalAcceptables !== 'undefined' && !criticalAcceptables.includes(value)) {
46
+ if (criticalAcceptables != null && !criticalAcceptables.includes(value)) {
47
47
  oos = true;
48
48
  break;
49
49
  }
50
50
  }
51
51
  for (let i = 0; i < values.length; i++) {
52
52
  const value = values[i];
53
- if (typeof targetMinimum !== 'undefined' && value < targetMinimum) {
53
+ if (targetMinimum != null && value < targetMinimum) {
54
54
  ooc = true;
55
55
  break;
56
56
  }
57
- if (typeof targetMaximum !== 'undefined' && value > targetMaximum) {
57
+ if (targetMaximum != null && value > targetMaximum) {
58
58
  ooc = true;
59
59
  break;
60
60
  }
61
- if (typeof targetAcceptables !== 'undefined' && !targetAcceptables.includes(value)) {
61
+ if (targetAcceptables != null && !targetAcceptables.includes(value)) {
62
62
  ooc = true;
63
63
  break;
64
64
  }
@@ -71,29 +71,29 @@ export class OxDataUseCaseCCP extends OxDataUseCase {
71
71
  }
72
72
  var text = '';
73
73
  const { minimum: criticalMinimum, maximum: criticalMaximum, acceptables: criticalAcceptables } = limits['criticalLimits'] || {};
74
- if (criticalMinimum !== undefined || criticalMaximum !== undefined || criticalAcceptables !== undefined) {
74
+ if (criticalMinimum != null || criticalMaximum != null || criticalAcceptables != null) {
75
75
  text += `${i18next.t('label.critical-limits')}\n`;
76
76
  }
77
- if (criticalMinimum !== undefined) {
77
+ if (criticalMinimum != null) {
78
78
  text += `\t${i18next.t('label.minimum value')} : ${criticalMinimum}\n`;
79
79
  }
80
- if (criticalMaximum !== undefined) {
80
+ if (criticalMaximum != null) {
81
81
  text += `\t${i18next.t('label.maximum value')} : ${criticalMaximum}\n`;
82
82
  }
83
- if (criticalAcceptables !== undefined) {
83
+ if (criticalAcceptables != null) {
84
84
  text += `\t${i18next.t('label.acceptables')} : ${criticalAcceptables instanceof Array ? criticalAcceptables.join(', ') : criticalAcceptables}\n`;
85
85
  }
86
86
  const { minimum: targetMinimum, maximum: targetMaximum, acceptables: targetAcceptables } = limits['targetLimits'] || {};
87
- if (targetMinimum !== undefined || targetMaximum !== undefined || targetAcceptables !== undefined) {
87
+ if (targetMinimum != null || targetMaximum != null || targetAcceptables != null) {
88
88
  text += `${i18next.t('label.target-limits')}\n`;
89
89
  }
90
- if (targetMinimum !== undefined) {
90
+ if (targetMinimum != null) {
91
91
  text += `\t${i18next.t('label.minimum value')} : ${targetMinimum}\n`;
92
92
  }
93
- if (targetMaximum !== undefined) {
93
+ if (targetMaximum != null) {
94
94
  text += `\t${i18next.t('label.maximum value')} : ${targetMaximum}\n`;
95
95
  }
96
- if (targetAcceptables !== undefined) {
96
+ if (targetAcceptables != null) {
97
97
  text += `\t${i18next.t('label.acceptables')} : ${targetAcceptables instanceof Array ? targetAcceptables.join(', ') : targetAcceptables}\n`;
98
98
  }
99
99
  return text;
@@ -1 +1 @@
1
- {"version":3,"file":"ox-data-use-case-ccp.js","sourceRoot":"","sources":["../../../../src/usecase/ccp/ox-data-use-case-ccp.ts"],"names":[],"mappings":"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","sourcesContent":["import i18next from 'i18next' // Since this is a common module, @operato/i18n was deliberately avoided.\n\nimport { DataItem, EvaluationResult, UseCaseDefinition } from '../../types'\nimport { OxDataUseCase } from '../ox-data-use-case.js'\n\nexport class OxDataUseCaseCCP extends OxDataUseCase {\n getSpecification(dataItem: DataItem): UseCaseDefinition {\n return {\n name: 'CCP',\n description: 'Critical Control Point Data Spec',\n help: '',\n specs: [\n {\n type: 'ccp-limits' /* A value which seperates acceptability from unacceptability */,\n label: 'critical-limits',\n name: 'criticalLimits',\n property: dataItem\n },\n {\n type: 'ccp-limits',\n label: 'target-limits',\n name: 'targetLimits',\n property: dataItem\n }\n ]\n }\n }\n\n evaluate(spec: any, values: any | any[]): EvaluationResult | undefined {\n if (!spec || typeof values === 'undefined') {\n return\n }\n\n if (!(values instanceof Array)) {\n values = [values]\n }\n\n const {\n minimum: criticalMinimum,\n maximum: criticalMaximum,\n acceptables: criticalAcceptables\n } = spec['criticalLimits'] || {}\n\n const {\n minimum: targetMinimum,\n maximum: targetMaximum,\n acceptables: targetAcceptables\n } = spec['targetLimits'] || {}\n\n var oos = false\n var ooc = false\n\n for (let i = 0; i < values.length; i++) {\n const value = values[i]\n\n if (typeof criticalMinimum !== 'undefined' && value < criticalMinimum) {\n oos = true\n break\n }\n\n if (typeof criticalMaximum !== 'undefined' && value > criticalMaximum) {\n oos = true\n break\n }\n\n if (typeof criticalAcceptables !== 'undefined' && !criticalAcceptables.includes(value)) {\n oos = true\n break\n }\n }\n\n for (let i = 0; i < values.length; i++) {\n const value = values[i]\n\n if (typeof targetMinimum !== 'undefined' && value < targetMinimum) {\n ooc = true\n break\n }\n\n if (typeof targetMaximum !== 'undefined' && value > targetMaximum) {\n ooc = true\n break\n }\n\n if (typeof targetAcceptables !== 'undefined' && !targetAcceptables.includes(value)) {\n ooc = true\n break\n }\n }\n\n return { oos, ooc }\n }\n\n elaborateUseCaseSpec(limits: any): string | undefined {\n if (!limits) {\n return\n }\n\n var text = ''\n\n const {\n minimum: criticalMinimum,\n maximum: criticalMaximum,\n acceptables: criticalAcceptables\n } = limits['criticalLimits'] || {}\n\n if (criticalMinimum !== undefined || criticalMaximum !== undefined || criticalAcceptables !== undefined) {\n text += `${i18next.t('label.critical-limits')}\\n`\n }\n\n if (criticalMinimum !== undefined) {\n text += `\\t${i18next.t('label.minimum value')} : ${criticalMinimum}\\n`\n }\n if (criticalMaximum !== undefined) {\n text += `\\t${i18next.t('label.maximum value')} : ${criticalMaximum}\\n`\n }\n if (criticalAcceptables !== undefined) {\n text += `\\t${i18next.t('label.acceptables')} : ${\n criticalAcceptables instanceof Array ? criticalAcceptables.join(', ') : criticalAcceptables\n }\\n`\n }\n\n const {\n minimum: targetMinimum,\n maximum: targetMaximum,\n acceptables: targetAcceptables\n } = limits['targetLimits'] || {}\n\n if (targetMinimum !== undefined || targetMaximum !== undefined || targetAcceptables !== undefined) {\n text += `${i18next.t('label.target-limits')}\\n`\n }\n\n if (targetMinimum !== undefined) {\n text += `\\t${i18next.t('label.minimum value')} : ${targetMinimum}\\n`\n }\n if (targetMaximum !== undefined) {\n text += `\\t${i18next.t('label.maximum value')} : ${targetMaximum}\\n`\n }\n if (targetAcceptables !== undefined) {\n text += `\\t${i18next.t('label.acceptables')} : ${\n targetAcceptables instanceof Array ? targetAcceptables.join(', ') : targetAcceptables\n }\\n`\n }\n\n return text\n }\n}\n"]}
1
+ {"version":3,"file":"ox-data-use-case-ccp.js","sourceRoot":"","sources":["../../../../src/usecase/ccp/ox-data-use-case-ccp.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAA,CAAC,yEAAyE;AAGvG,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAEtD,MAAM,OAAO,gBAAiB,SAAQ,aAAa;IACjD,gBAAgB,CAAC,QAAkB;QACjC,OAAO;YACL,IAAI,EAAE,KAAK;YACX,WAAW,EAAE,kCAAkC;YAC/C,IAAI,EAAE,EAAE;YACR,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,YAAY,CAAC,gEAAgE;oBACnF,KAAK,EAAE,iBAAiB;oBACxB,IAAI,EAAE,gBAAgB;oBACtB,QAAQ,EAAE,QAAQ;iBACnB;gBACD;oBACE,IAAI,EAAE,YAAY;oBAClB,KAAK,EAAE,eAAe;oBACtB,IAAI,EAAE,cAAc;oBACpB,QAAQ,EAAE,QAAQ;iBACnB;aACF;SACF,CAAA;IACH,CAAC;IAED,QAAQ,CAAC,IAAS,EAAE,MAAmB;QACrC,IAAI,CAAC,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YAC1C,OAAM;SACP;QAED,IAAI,CAAC,CAAC,MAAM,YAAY,KAAK,CAAC,EAAE;YAC9B,MAAM,GAAG,CAAC,MAAM,CAAC,CAAA;SAClB;QAED,MAAM,EACJ,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,eAAe,EACxB,WAAW,EAAE,mBAAmB,EACjC,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAA;QAEhC,MAAM,EACJ,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,iBAAiB,EAC/B,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAA;QAE9B,IAAI,GAAG,GAAG,KAAK,CAAA;QACf,IAAI,GAAG,GAAG,KAAK,CAAA;QAEf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;YAEvB,IAAI,eAAe,IAAI,IAAI,IAAI,KAAK,GAAG,eAAe,EAAE;gBACtD,GAAG,GAAG,IAAI,CAAA;gBACV,MAAK;aACN;YAED,IAAI,eAAe,IAAI,IAAI,IAAI,KAAK,GAAG,eAAe,EAAE;gBACtD,GAAG,GAAG,IAAI,CAAA;gBACV,MAAK;aACN;YAED,IAAI,mBAAmB,IAAI,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBACvE,GAAG,GAAG,IAAI,CAAA;gBACV,MAAK;aACN;SACF;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;YAEvB,IAAI,aAAa,IAAI,IAAI,IAAI,KAAK,GAAG,aAAa,EAAE;gBAClD,GAAG,GAAG,IAAI,CAAA;gBACV,MAAK;aACN;YAED,IAAI,aAAa,IAAI,IAAI,IAAI,KAAK,GAAG,aAAa,EAAE;gBAClD,GAAG,GAAG,IAAI,CAAA;gBACV,MAAK;aACN;YAED,IAAI,iBAAiB,IAAI,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBACnE,GAAG,GAAG,IAAI,CAAA;gBACV,MAAK;aACN;SACF;QAED,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAA;IACrB,CAAC;IAED,oBAAoB,CAAC,MAAW;QAC9B,IAAI,CAAC,MAAM,EAAE;YACX,OAAM;SACP;QAED,IAAI,IAAI,GAAG,EAAE,CAAA;QAEb,MAAM,EACJ,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,eAAe,EACxB,WAAW,EAAE,mBAAmB,EACjC,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAA;QAElC,IAAI,eAAe,IAAI,IAAI,IAAI,eAAe,IAAI,IAAI,IAAI,mBAAmB,IAAI,IAAI,EAAE;YACrF,IAAI,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC,IAAI,CAAA;SAClD;QAED,IAAI,eAAe,IAAI,IAAI,EAAE;YAC3B,IAAI,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,MAAM,eAAe,IAAI,CAAA;SACvE;QACD,IAAI,eAAe,IAAI,IAAI,EAAE;YAC3B,IAAI,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,MAAM,eAAe,IAAI,CAAA;SACvE;QACD,IAAI,mBAAmB,IAAI,IAAI,EAAE;YAC/B,IAAI,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,MACzC,mBAAmB,YAAY,KAAK,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,mBAC1E,IAAI,CAAA;SACL;QAED,MAAM,EACJ,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,iBAAiB,EAC/B,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CAAA;QAEhC,IAAI,aAAa,IAAI,IAAI,IAAI,aAAa,IAAI,IAAI,IAAI,iBAAiB,IAAI,IAAI,EAAE;YAC/E,IAAI,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAA;SAChD;QAED,IAAI,aAAa,IAAI,IAAI,EAAE;YACzB,IAAI,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,MAAM,aAAa,IAAI,CAAA;SACrE;QACD,IAAI,aAAa,IAAI,IAAI,EAAE;YACzB,IAAI,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,MAAM,aAAa,IAAI,CAAA;SACrE;QACD,IAAI,iBAAiB,IAAI,IAAI,EAAE;YAC7B,IAAI,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,MACzC,iBAAiB,YAAY,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,iBACtE,IAAI,CAAA;SACL;QAED,OAAO,IAAI,CAAA;IACb,CAAC;CACF","sourcesContent":["import i18next from 'i18next' // Since this is a common module, @operato/i18n was deliberately avoided.\n\nimport { DataItem, EvaluationResult, UseCaseDefinition } from '../../types'\nimport { OxDataUseCase } from '../ox-data-use-case.js'\n\nexport class OxDataUseCaseCCP extends OxDataUseCase {\n getSpecification(dataItem: DataItem): UseCaseDefinition {\n return {\n name: 'CCP',\n description: 'Critical Control Point Data Spec',\n help: '',\n specs: [\n {\n type: 'ccp-limits' /* A value which seperates acceptability from unacceptability */,\n label: 'critical-limits',\n name: 'criticalLimits',\n property: dataItem\n },\n {\n type: 'ccp-limits',\n label: 'target-limits',\n name: 'targetLimits',\n property: dataItem\n }\n ]\n }\n }\n\n evaluate(spec: any, values: any | any[]): EvaluationResult | undefined {\n if (!spec || typeof values === 'undefined') {\n return\n }\n\n if (!(values instanceof Array)) {\n values = [values]\n }\n\n const {\n minimum: criticalMinimum,\n maximum: criticalMaximum,\n acceptables: criticalAcceptables\n } = spec['criticalLimits'] || {}\n\n const {\n minimum: targetMinimum,\n maximum: targetMaximum,\n acceptables: targetAcceptables\n } = spec['targetLimits'] || {}\n\n var oos = false\n var ooc = false\n\n for (let i = 0; i < values.length; i++) {\n const value = values[i]\n\n if (criticalMinimum != null && value < criticalMinimum) {\n oos = true\n break\n }\n\n if (criticalMaximum != null && value > criticalMaximum) {\n oos = true\n break\n }\n\n if (criticalAcceptables != null && !criticalAcceptables.includes(value)) {\n oos = true\n break\n }\n }\n\n for (let i = 0; i < values.length; i++) {\n const value = values[i]\n\n if (targetMinimum != null && value < targetMinimum) {\n ooc = true\n break\n }\n\n if (targetMaximum != null && value > targetMaximum) {\n ooc = true\n break\n }\n\n if (targetAcceptables != null && !targetAcceptables.includes(value)) {\n ooc = true\n break\n }\n }\n\n return { oos, ooc }\n }\n\n elaborateUseCaseSpec(limits: any): string | undefined {\n if (!limits) {\n return\n }\n\n var text = ''\n\n const {\n minimum: criticalMinimum,\n maximum: criticalMaximum,\n acceptables: criticalAcceptables\n } = limits['criticalLimits'] || {}\n\n if (criticalMinimum != null || criticalMaximum != null || criticalAcceptables != null) {\n text += `${i18next.t('label.critical-limits')}\\n`\n }\n\n if (criticalMinimum != null) {\n text += `\\t${i18next.t('label.minimum value')} : ${criticalMinimum}\\n`\n }\n if (criticalMaximum != null) {\n text += `\\t${i18next.t('label.maximum value')} : ${criticalMaximum}\\n`\n }\n if (criticalAcceptables != null) {\n text += `\\t${i18next.t('label.acceptables')} : ${\n criticalAcceptables instanceof Array ? criticalAcceptables.join(', ') : criticalAcceptables\n }\\n`\n }\n\n const {\n minimum: targetMinimum,\n maximum: targetMaximum,\n acceptables: targetAcceptables\n } = limits['targetLimits'] || {}\n\n if (targetMinimum != null || targetMaximum != null || targetAcceptables != null) {\n text += `${i18next.t('label.target-limits')}\\n`\n }\n\n if (targetMinimum != null) {\n text += `\\t${i18next.t('label.minimum value')} : ${targetMinimum}\\n`\n }\n if (targetMaximum != null) {\n text += `\\t${i18next.t('label.maximum value')} : ${targetMaximum}\\n`\n }\n if (targetAcceptables != null) {\n text += `\\t${i18next.t('label.acceptables')} : ${\n targetAcceptables instanceof Array ? targetAcceptables.join(', ') : targetAcceptables\n }\\n`\n }\n\n return text\n }\n}\n"]}
@@ -7,7 +7,7 @@ export declare abstract class OxDataUseCase {
7
7
  static getUseCaseNames(): string[];
8
8
  static getUseCases(): OxDataUseCase[];
9
9
  static getUseCase(name: string): OxDataUseCase | undefined;
10
- static elaborateDataItemSpec(spec: DataSpecLimitSet): string;
10
+ static elaborateDataItemSpec(useCaseNames: string[], spec: DataSpecLimitSet): string;
11
11
  static evaluate(dataSet: DataSet, dataItems: DataItem[], data: any): EvaluationResult;
12
12
  static evaluateItem(spec: DataSpecLimitSet, values: any | any[]): EvaluationResult | undefined;
13
13
  abstract evaluate(specs: any, values: any[]): EvaluationResult | undefined;
@@ -11,8 +11,7 @@ export class OxDataUseCase {
11
11
  static getUseCase(name) {
12
12
  return OxDataUseCase.registry[name];
13
13
  }
14
- static elaborateDataItemSpec(spec) {
15
- const useCaseNames = Object.keys(spec || {});
14
+ static elaborateDataItemSpec(useCaseNames, spec) {
16
15
  var texts = [];
17
16
  useCaseNames.forEach(useCaseName => {
18
17
  const useCase = OxDataUseCase.getUseCase(useCaseName);
@@ -1 +1 @@
1
- {"version":3,"file":"ox-data-use-case.js","sourceRoot":"","sources":["../../../src/usecase/ox-data-use-case.ts"],"names":[],"mappings":"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","sourcesContent":["import { DataItem, DataSet, DataSpecLimitSet, EvaluationResult, UseCaseDefinition } from '../types'\n\nexport abstract class OxDataUseCase {\n static registry: { [name: string]: OxDataUseCase } = {}\n\n public static registerUseCase(name: string, useCase: OxDataUseCase) {\n OxDataUseCase.registry[name] = useCase\n }\n\n public static getUseCaseNames() {\n return Object.keys(OxDataUseCase.registry)\n }\n\n public static getUseCases(): OxDataUseCase[] {\n return Object.values(OxDataUseCase.registry)\n }\n\n public static getUseCase(name: string): OxDataUseCase | undefined {\n return OxDataUseCase.registry[name]\n }\n\n public static elaborateDataItemSpec(spec: DataSpecLimitSet): string {\n const useCaseNames = Object.keys(spec || {})\n\n var texts: string[] = []\n\n useCaseNames.forEach(useCaseName => {\n const useCase = OxDataUseCase.getUseCase(useCaseName)\n if (!useCase) {\n return\n }\n\n const limits = spec?.[useCaseName]\n if (!limits) {\n return\n }\n\n const result = useCase.elaborateUseCaseSpec(limits)\n if (!result) {\n return\n }\n\n texts.push(`[ ${useCaseName} ]`)\n texts.push(result)\n })\n\n return texts.join('\\n')\n }\n\n public static evaluate(dataSet: DataSet, dataItems: DataItem[], data: any): EvaluationResult {\n var ooc = false\n var oos = false\n\n if (!dataSet.useCase) {\n return { ooc, oos }\n }\n\n const useCaseNames = dataSet.useCase.split(',').map(useCaseName => useCaseName.trim())\n const useCases = useCaseNames.map(useCaseName => OxDataUseCase.getUseCase(useCaseName)).filter(useCase => !!useCase)\n\n for (let i = 0; i < dataItems.length; i++) {\n const dataItem = dataItems[i]\n const { active, tag } = dataItem\n if (!active || !tag) {\n continue\n }\n\n let values: any | any[] = data[tag]\n if (typeof values === 'undefined') {\n continue // TODO what if in case no value ?\n }\n\n if (!(values instanceof Array)) {\n values = [values]\n }\n\n for (let j = 0; j < useCases.length; j++) {\n const useCase = useCases[j]\n\n const specs = dataItem.spec?.[dataSet.useCase]\n if (!specs) {\n continue\n }\n\n const result = useCase!.evaluate(specs, values)\n\n if (result) {\n ooc ||= result.ooc\n oos ||= result.oos\n }\n }\n }\n\n return { ooc, oos }\n }\n\n public static evaluateItem(spec: DataSpecLimitSet, values: any | any[]): EvaluationResult | undefined {\n var ooc = false\n var oos = false\n\n if (typeof values === 'undefined') {\n return // TODO what if in case no value ?\n }\n\n if (!(values instanceof Array)) {\n values = [values]\n }\n\n const useCaseNames = Object.keys(spec || {})\n\n if (useCaseNames.length === 0) {\n return { ooc, oos }\n }\n\n useCaseNames.forEach(useCaseName => {\n const useCase = OxDataUseCase.getUseCase(useCaseName)\n if (!useCase) {\n return\n }\n\n const result = useCase?.evaluate(spec[useCaseName], values)\n\n if (result) {\n ooc ||= result.ooc\n oos ||= result.oos\n }\n })\n\n return { ooc, oos }\n }\n\n public abstract evaluate(specs: any, values: any[]): EvaluationResult | undefined\n public abstract elaborateUseCaseSpec(spec: any): string | undefined\n public abstract getSpecification(dataItem: DataItem): UseCaseDefinition\n}\n"]}
1
+ {"version":3,"file":"ox-data-use-case.js","sourceRoot":"","sources":["../../../src/usecase/ox-data-use-case.ts"],"names":[],"mappings":"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","sourcesContent":["import { DataItem, DataSet, DataSpecLimitSet, EvaluationResult, UseCaseDefinition } from '../types'\n\nexport abstract class OxDataUseCase {\n static registry: { [name: string]: OxDataUseCase } = {}\n\n public static registerUseCase(name: string, useCase: OxDataUseCase) {\n OxDataUseCase.registry[name] = useCase\n }\n\n public static getUseCaseNames() {\n return Object.keys(OxDataUseCase.registry)\n }\n\n public static getUseCases(): OxDataUseCase[] {\n return Object.values(OxDataUseCase.registry)\n }\n\n public static getUseCase(name: string): OxDataUseCase | undefined {\n return OxDataUseCase.registry[name]\n }\n\n public static elaborateDataItemSpec(useCaseNames: string[], spec: DataSpecLimitSet): string {\n var texts: string[] = []\n\n useCaseNames.forEach(useCaseName => {\n const useCase = OxDataUseCase.getUseCase(useCaseName)\n if (!useCase) {\n return\n }\n\n const limits = spec?.[useCaseName]\n if (!limits) {\n return\n }\n\n const result = useCase.elaborateUseCaseSpec(limits)\n if (!result) {\n return\n }\n\n texts.push(`[ ${useCaseName} ]`)\n texts.push(result)\n })\n\n return texts.join('\\n')\n }\n\n public static evaluate(dataSet: DataSet, dataItems: DataItem[], data: any): EvaluationResult {\n var ooc = false\n var oos = false\n\n if (!dataSet.useCase) {\n return { ooc, oos }\n }\n\n const useCaseNames = dataSet.useCase.split(',').map(useCaseName => useCaseName.trim())\n const useCases = useCaseNames.map(useCaseName => OxDataUseCase.getUseCase(useCaseName)).filter(useCase => !!useCase)\n\n for (let i = 0; i < dataItems.length; i++) {\n const dataItem = dataItems[i]\n const { active, tag } = dataItem\n if (!active || !tag) {\n continue\n }\n\n let values: any | any[] = data[tag]\n if (typeof values === 'undefined') {\n continue // TODO what if in case no value ?\n }\n\n if (!(values instanceof Array)) {\n values = [values]\n }\n\n for (let j = 0; j < useCases.length; j++) {\n const useCase = useCases[j]\n\n const specs = dataItem.spec?.[dataSet.useCase]\n if (!specs) {\n continue\n }\n\n const result = useCase!.evaluate(specs, values)\n\n if (result) {\n ooc ||= result.ooc\n oos ||= result.oos\n }\n }\n }\n\n return { ooc, oos }\n }\n\n public static evaluateItem(spec: DataSpecLimitSet, values: any | any[]): EvaluationResult | undefined {\n var ooc = false\n var oos = false\n\n if (typeof values === 'undefined') {\n return // TODO what if in case no value ?\n }\n\n if (!(values instanceof Array)) {\n values = [values]\n }\n\n const useCaseNames = Object.keys(spec || {})\n\n if (useCaseNames.length === 0) {\n return { ooc, oos }\n }\n\n useCaseNames.forEach(useCaseName => {\n const useCase = OxDataUseCase.getUseCase(useCaseName)\n if (!useCase) {\n return\n }\n\n const result = useCase?.evaluate(spec[useCaseName], values)\n\n if (result) {\n ooc ||= result.ooc\n oos ||= result.oos\n }\n })\n\n return { ooc, oos }\n }\n\n public abstract evaluate(specs: any, values: any[]): EvaluationResult | undefined\n public abstract elaborateUseCaseSpec(spec: any): string | undefined\n public abstract getSpecification(dataItem: DataItem): UseCaseDefinition\n}\n"]}
@@ -19,13 +19,13 @@ export class OxDataUseCaseQC {
19
19
  const { minimum, maximum, acceptables } = spec['passLimits'];
20
20
  for (let i = 0; i < values.length; i++) {
21
21
  const value = values[i];
22
- if (typeof minimum !== 'undefined' && value < minimum) {
22
+ if (minimum != null && value < minimum) {
23
23
  return { oos: true, ooc: true };
24
24
  }
25
- if (typeof maximum !== 'undefined' && value > maximum) {
25
+ if (maximum != null && value > maximum) {
26
26
  return { oos: true, ooc: true };
27
27
  }
28
- if (typeof acceptables !== 'undefined' && !acceptables.includes(value)) {
28
+ if (acceptables != null && !acceptables.includes(value)) {
29
29
  return { oos: true, ooc: true };
30
30
  }
31
31
  }
@@ -37,16 +37,16 @@ export class OxDataUseCaseQC {
37
37
  }
38
38
  var text = '';
39
39
  const { minimum, maximum, acceptables } = limits['passLimits'] || {};
40
- if (minimum !== undefined || maximum !== undefined || acceptables !== undefined) {
40
+ if (minimum != null || maximum != null || acceptables != null) {
41
41
  text += `${i18next.t('label.pass-limits')}\n`;
42
42
  }
43
- if (minimum !== undefined) {
43
+ if (minimum != null) {
44
44
  text += `\t${i18next.t('label.minimum value')} : ${minimum}\n`;
45
45
  }
46
- if (maximum !== undefined) {
46
+ if (maximum != null) {
47
47
  text += `\t${i18next.t('label.maximum value')} : ${maximum}\n`;
48
48
  }
49
- if (acceptables !== undefined) {
49
+ if (acceptables != null) {
50
50
  text += `\t${i18next.t('label.acceptables')} : ${acceptables instanceof Array ? acceptables.join(', ') : acceptables}\n`;
51
51
  }
52
52
  return text;
@@ -1 +1 @@
1
- {"version":3,"file":"ox-data-use-case-qc.js","sourceRoot":"","sources":["../../../../src/usecase/qc/ox-data-use-case-qc.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAA,CAAC,yEAAyE;AAKvG,MAAM,OAAO,eAAe;IAC1B,gBAAgB,CAAC,QAAkB;QACjC,OAAO;YACL,IAAI,EAAE,IAAI;YACV,WAAW,EAAE,2BAA2B;YACxC,IAAI,EAAE,EAAE;YACR,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,WAAW,CAAC,kEAAkE;oBACpF,KAAK,EAAE,aAAa;oBACpB,IAAI,EAAE,YAAY;oBAClB,QAAQ,EAAE,QAAQ;iBACnB;aACF;SACF,CAAA;IACH,CAAC;IAED,QAAQ,CAAC,IAAS,EAAE,MAAa;QAC/B,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,CAAA;QAE5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;YAEvB,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,KAAK,GAAG,OAAO,EAAE;gBACrD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAA;aAChC;YAED,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,KAAK,GAAG,OAAO,EAAE;gBACrD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAA;aAChC;YAED,IAAI,OAAO,WAAW,KAAK,WAAW,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBACtE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAA;aAChC;SACF;QAED,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAA;IACnC,CAAC;IAED,oBAAoB,CAAC,MAAW;QAC9B,IAAI,CAAC,MAAM,EAAE;YACX,OAAM;SACP;QAED,IAAI,IAAI,GAAG,EAAE,CAAA;QAEb,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,CAAA;QAEpE,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS,EAAE;YAC/E,IAAI,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAA;SAC9C;QAED,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,IAAI,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,MAAM,OAAO,IAAI,CAAA;SAC/D;QACD,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,IAAI,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,MAAM,OAAO,IAAI,CAAA;SAC/D;QACD,IAAI,WAAW,KAAK,SAAS,EAAE;YAC7B,IAAI,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,MACzC,WAAW,YAAY,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAC1D,IAAI,CAAA;SACL;QAED,OAAO,IAAI,CAAA;IACb,CAAC;CACF","sourcesContent":["import i18next from 'i18next' // Since this is a common module, @operato/i18n was deliberately avoided.\n\nimport { DataItem, EvaluationResult, UseCaseDefinition } from '../../types.js'\nimport { OxDataUseCase } from '../ox-data-use-case.js'\n\nexport class OxDataUseCaseQC implements OxDataUseCase {\n getSpecification(dataItem: DataItem): UseCaseDefinition {\n return {\n name: 'QC',\n description: 'Quality Control Data Spec',\n help: '',\n specs: [\n {\n type: 'qc-limits' /* 'A value which seperates acceptability from unacceptability' */,\n label: 'pass-limits',\n name: 'passLimits',\n property: dataItem\n }\n ]\n }\n }\n\n evaluate(spec: any, values: any[]): EvaluationResult {\n const { minimum, maximum, acceptables } = spec['passLimits']\n\n for (let i = 0; i < values.length; i++) {\n const value = values[i]\n\n if (typeof minimum !== 'undefined' && value < minimum) {\n return { oos: true, ooc: true }\n }\n\n if (typeof maximum !== 'undefined' && value > maximum) {\n return { oos: true, ooc: true }\n }\n\n if (typeof acceptables !== 'undefined' && !acceptables.includes(value)) {\n return { oos: true, ooc: true }\n }\n }\n\n return { oos: false, ooc: false }\n }\n\n elaborateUseCaseSpec(limits: any): string | undefined {\n if (!limits) {\n return\n }\n\n var text = ''\n\n const { minimum, maximum, acceptables } = limits['passLimits'] || {}\n\n if (minimum !== undefined || maximum !== undefined || acceptables !== undefined) {\n text += `${i18next.t('label.pass-limits')}\\n`\n }\n\n if (minimum !== undefined) {\n text += `\\t${i18next.t('label.minimum value')} : ${minimum}\\n`\n }\n if (maximum !== undefined) {\n text += `\\t${i18next.t('label.maximum value')} : ${maximum}\\n`\n }\n if (acceptables !== undefined) {\n text += `\\t${i18next.t('label.acceptables')} : ${\n acceptables instanceof Array ? acceptables.join(', ') : acceptables\n }\\n`\n }\n\n return text\n }\n}\n"]}
1
+ {"version":3,"file":"ox-data-use-case-qc.js","sourceRoot":"","sources":["../../../../src/usecase/qc/ox-data-use-case-qc.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAA,CAAC,yEAAyE;AAKvG,MAAM,OAAO,eAAe;IAC1B,gBAAgB,CAAC,QAAkB;QACjC,OAAO;YACL,IAAI,EAAE,IAAI;YACV,WAAW,EAAE,2BAA2B;YACxC,IAAI,EAAE,EAAE;YACR,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,WAAW,CAAC,kEAAkE;oBACpF,KAAK,EAAE,aAAa;oBACpB,IAAI,EAAE,YAAY;oBAClB,QAAQ,EAAE,QAAQ;iBACnB;aACF;SACF,CAAA;IACH,CAAC;IAED,QAAQ,CAAC,IAAS,EAAE,MAAa;QAC/B,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,CAAA;QAE5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;YAEvB,IAAI,OAAO,IAAI,IAAI,IAAI,KAAK,GAAG,OAAO,EAAE;gBACtC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAA;aAChC;YAED,IAAI,OAAO,IAAI,IAAI,IAAI,KAAK,GAAG,OAAO,EAAE;gBACtC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAA;aAChC;YAED,IAAI,WAAW,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBACvD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAA;aAChC;SACF;QAED,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAA;IACnC,CAAC;IAED,oBAAoB,CAAC,MAAW;QAC9B,IAAI,CAAC,MAAM,EAAE;YACX,OAAM;SACP;QAED,IAAI,IAAI,GAAG,EAAE,CAAA;QAEb,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,CAAA;QAEpE,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI,IAAI,WAAW,IAAI,IAAI,EAAE;YAC7D,IAAI,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAA;SAC9C;QAED,IAAI,OAAO,IAAI,IAAI,EAAE;YACnB,IAAI,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,MAAM,OAAO,IAAI,CAAA;SAC/D;QACD,IAAI,OAAO,IAAI,IAAI,EAAE;YACnB,IAAI,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,MAAM,OAAO,IAAI,CAAA;SAC/D;QACD,IAAI,WAAW,IAAI,IAAI,EAAE;YACvB,IAAI,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,MACzC,WAAW,YAAY,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAC1D,IAAI,CAAA;SACL;QAED,OAAO,IAAI,CAAA;IACb,CAAC;CACF","sourcesContent":["import i18next from 'i18next' // Since this is a common module, @operato/i18n was deliberately avoided.\n\nimport { DataItem, EvaluationResult, UseCaseDefinition } from '../../types.js'\nimport { OxDataUseCase } from '../ox-data-use-case.js'\n\nexport class OxDataUseCaseQC implements OxDataUseCase {\n getSpecification(dataItem: DataItem): UseCaseDefinition {\n return {\n name: 'QC',\n description: 'Quality Control Data Spec',\n help: '',\n specs: [\n {\n type: 'qc-limits' /* 'A value which seperates acceptability from unacceptability' */,\n label: 'pass-limits',\n name: 'passLimits',\n property: dataItem\n }\n ]\n }\n }\n\n evaluate(spec: any, values: any[]): EvaluationResult {\n const { minimum, maximum, acceptables } = spec['passLimits']\n\n for (let i = 0; i < values.length; i++) {\n const value = values[i]\n\n if (minimum != null && value < minimum) {\n return { oos: true, ooc: true }\n }\n\n if (maximum != null && value > maximum) {\n return { oos: true, ooc: true }\n }\n\n if (acceptables != null && !acceptables.includes(value)) {\n return { oos: true, ooc: true }\n }\n }\n\n return { oos: false, ooc: false }\n }\n\n elaborateUseCaseSpec(limits: any): string | undefined {\n if (!limits) {\n return\n }\n\n var text = ''\n\n const { minimum, maximum, acceptables } = limits['passLimits'] || {}\n\n if (minimum != null || maximum != null || acceptables != null) {\n text += `${i18next.t('label.pass-limits')}\\n`\n }\n\n if (minimum != null) {\n text += `\\t${i18next.t('label.minimum value')} : ${minimum}\\n`\n }\n if (maximum != null) {\n text += `\\t${i18next.t('label.maximum value')} : ${maximum}\\n`\n }\n if (acceptables != null) {\n text += `\\t${i18next.t('label.acceptables')} : ${\n acceptables instanceof Array ? acceptables.join(', ') : acceptables\n }\\n`\n }\n\n return text\n }\n}\n"]}