@truedat/dq 4.33.10 → 4.35.2

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.
Files changed (96) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/package.json +5 -5
  3. package/src/api.js +7 -1
  4. package/src/components/ConditionSummary.js +23 -21
  5. package/src/components/ExecutionDetails.js +11 -14
  6. package/src/components/ExecutionGroup.js +24 -15
  7. package/src/components/ImplementationResultBar.js +80 -0
  8. package/src/components/ImplementationSummary.js +33 -72
  9. package/src/components/ImplementationsUploadButton.js +61 -0
  10. package/src/components/InformationSummary.js +68 -0
  11. package/src/components/NewRuleImplementation.js +12 -0
  12. package/src/components/RuleForm.js +0 -178
  13. package/src/components/RuleImplementation.js +10 -6
  14. package/src/components/RuleImplementationProperties.js +31 -64
  15. package/src/components/RuleImplementationResults.js +87 -53
  16. package/src/components/RuleImplementationsActions.js +3 -59
  17. package/src/components/RuleImplementationsDownload.js +86 -0
  18. package/src/components/RuleImplementationsOptions.js +28 -0
  19. package/src/components/RuleProperties.js +1 -10
  20. package/src/components/RuleResultDecorator.js +43 -26
  21. package/src/components/RuleResultRow.js +4 -1
  22. package/src/components/RuleResultsUpload.js +47 -0
  23. package/src/components/RuleRoutes.js +0 -13
  24. package/src/components/RuleSummary.js +15 -2
  25. package/src/components/RulesActions.js +17 -10
  26. package/src/components/RulesUploadButton.js +58 -0
  27. package/src/components/__tests__/ExecutionGroup.spec.js +11 -7
  28. package/src/components/__tests__/ImplementationResultBar.spec.js +98 -0
  29. package/src/components/__tests__/ImplementationSummary.spec.js +9 -26
  30. package/src/components/__tests__/InformationSummary.spec.js +35 -0
  31. package/src/components/__tests__/NewRuleImplementation.spec.js +1 -1
  32. package/src/components/__tests__/RuleForm.spec.js +0 -191
  33. package/src/components/__tests__/RuleImplementation.spec.js +1 -0
  34. package/src/components/__tests__/RuleImplementationProperties.spec.js +23 -33
  35. package/src/components/__tests__/RuleImplementationsActions.spec.js +0 -9
  36. package/src/components/__tests__/RuleImplementationsOptions.spec.js +18 -0
  37. package/src/components/__tests__/RuleProperties.spec.js +7 -9
  38. package/src/components/__tests__/RuleResultDecorator.spec.js +17 -11
  39. package/src/components/__tests__/RuleResultRow.spec.js +25 -46
  40. package/src/components/__tests__/RuleResultsUpload.spec.js +18 -0
  41. package/src/components/__tests__/RuleRow.spec.js +0 -4
  42. package/src/components/__tests__/RuleSummary.spec.js +6 -6
  43. package/src/components/__tests__/Rules.spec.js +15 -39
  44. package/src/components/__tests__/__snapshots__/ConditionSummary.spec.js.snap +55 -51
  45. package/src/components/__tests__/__snapshots__/ExecutionGroup.spec.js.snap +5 -4
  46. package/src/components/__tests__/__snapshots__/ImplementationResultBar.spec.js.snap +141 -0
  47. package/src/components/__tests__/__snapshots__/ImplementationSummary.spec.js.snap +194 -457
  48. package/src/components/__tests__/__snapshots__/InformationSummary.spec.js.snap +185 -0
  49. package/src/components/__tests__/__snapshots__/NewRuleImplementation.spec.js.snap +6 -0
  50. package/src/components/__tests__/__snapshots__/RuleForm.spec.js.snap +0 -148
  51. package/src/components/__tests__/__snapshots__/RuleImplementation.spec.js.snap +20 -0
  52. package/src/components/__tests__/__snapshots__/RuleImplementationProperties.spec.js.snap +43 -49
  53. package/src/components/__tests__/__snapshots__/RuleImplementationResults.spec.js.snap +63 -61
  54. package/src/components/__tests__/__snapshots__/RuleImplementationsActions.spec.js.snap +1 -7
  55. package/src/components/__tests__/__snapshots__/RuleImplementationsOptions.spec.js.snap +58 -0
  56. package/src/components/__tests__/__snapshots__/RuleProperties.spec.js.snap +0 -1
  57. package/src/components/__tests__/__snapshots__/RuleResultsUpload.spec.js.snap +18 -0
  58. package/src/components/__tests__/__snapshots__/RuleRow.spec.js.snap +0 -28
  59. package/src/components/__tests__/__snapshots__/Rules.spec.js.snap +0 -101
  60. package/src/components/ruleImplementationForm/FiltersGroup.js +1 -0
  61. package/src/components/ruleImplementationForm/InformationForm.js +5 -5
  62. package/src/components/ruleImplementationForm/LimitsForm.js +142 -0
  63. package/src/components/ruleImplementationForm/RuleImplementationForm.js +14 -4
  64. package/src/components/ruleImplementationForm/RuleImplementationRawForm.js +16 -6
  65. package/src/components/ruleImplementationForm/ValueConditions.js +11 -0
  66. package/src/components/ruleImplementationForm/__tests__/LimitsForm.spec.js +186 -0
  67. package/src/components/ruleImplementationForm/__tests__/RuleImplementationRawForm.spec.js +42 -35
  68. package/src/components/ruleImplementationForm/__tests__/__snapshots__/LimitsForm.spec.js.snap +1104 -0
  69. package/src/components/ruleImplementationForm/__tests__/__snapshots__/RuleImplementationForm.spec.js.snap +4 -1
  70. package/src/components/ruleImplementationForm/__tests__/__snapshots__/RuleImplementationRawForm.spec.js.snap +12 -1
  71. package/src/components/ruleImplementationForm/limitsValidation.js +72 -0
  72. package/src/messages/en.js +167 -76
  73. package/src/messages/es.js +292 -185
  74. package/src/reducers/__tests__/rule.spec.js +2 -4
  75. package/src/reducers/__tests__/ruleImplementation.spec.js +2 -0
  76. package/src/reducers/__tests__/ruleImplementations.spec.js +12 -8
  77. package/src/reducers/__tests__/uploadingResults.spec.js +28 -0
  78. package/src/reducers/dqMessage.js +121 -1
  79. package/src/reducers/index.js +6 -0
  80. package/src/reducers/rule.js +0 -3
  81. package/src/reducers/ruleImplementation.js +3 -0
  82. package/src/reducers/ruleImplementationRedirect.js +6 -1
  83. package/src/reducers/ruleImplementations.js +3 -0
  84. package/src/reducers/ruleRedirect.js +5 -0
  85. package/src/reducers/uploadImplementationsFile.js +28 -0
  86. package/src/reducers/uploadRulesFile.js +25 -0
  87. package/src/reducers/uploadingResults.js +16 -0
  88. package/src/routines.js +3 -0
  89. package/src/sagas/__tests__/uploadResults.spec.js +65 -0
  90. package/src/sagas/index.js +9 -0
  91. package/src/sagas/uploadImplementations.js +28 -0
  92. package/src/sagas/uploadResults.js +32 -0
  93. package/src/sagas/uploadRules.js +28 -0
  94. package/src/selectors/getRuleImplementationColumns.js +38 -3
  95. package/src/selectors/ruleColumnsSelector.js +0 -31
  96. package/src/styles/ruleSummary.less +17 -10
@@ -72,13 +72,16 @@ exports[`<RuleImplementationForm /> matches the latest snapshot 1`] = `
72
72
  />
73
73
  </Form>
74
74
  </GridRow>
75
+ <Divider
76
+ hidden={true}
77
+ />
75
78
  <GridRow
76
79
  stretched={true}
77
80
  >
78
81
  <Button
79
82
  as="button"
80
83
  content="actions.next"
81
- disabled={false}
84
+ disabled={true}
82
85
  floated="right"
83
86
  loading={false}
84
87
  onClick={[Function]}
@@ -30,11 +30,22 @@ exports[`<RuleImplementationRawForm /> matches the latest snapshot 1`] = `
30
30
  name="implementation_key"
31
31
  onChange={[Function]}
32
32
  placeholder="ruleImplementation.props.name.placeholder"
33
- readOnly={false}
34
33
  required={true}
35
34
  value=""
36
35
  />
37
36
  </FormField>
37
+ <LimitsForm
38
+ onChange={[MockFunction]}
39
+ ruleImplementation={
40
+ Object {
41
+ "executable": true,
42
+ "goal": "10",
43
+ "id": 1,
44
+ "minimum": "1",
45
+ "result_type": "percentage",
46
+ }
47
+ }
48
+ />
38
49
  <FormDropdown
39
50
  as={[Function]}
40
51
  control={[Function]}
@@ -0,0 +1,72 @@
1
+ import _ from "lodash/fp";
2
+
3
+ export default function generateValidationMessages(ruleImplementation) {
4
+ const minimum = Number(ruleImplementation.minimum);
5
+ const goal = Number(ruleImplementation.goal);
6
+
7
+ const invalidNumberMessage = "rule.form.validation.invalid_number_format";
8
+ const invalidMinimumFormat = ruleImplementation.minimum && isNaN(minimum);
9
+ const invalidGoalFormat = ruleImplementation.goal && isNaN(goal);
10
+ if (invalidMinimumFormat || invalidGoalFormat)
11
+ return {
12
+ minimum: invalidMinimumFormat ? [invalidNumberMessage] : undefined,
13
+ goal: invalidGoalFormat ? [invalidNumberMessage] : undefined,
14
+ };
15
+
16
+ const requiredMessage = "rule.form.validation.empty_required";
17
+ const isEmpty = (value) =>
18
+ _.isNil(value) || (_.isEmpty(value) && !_.isNumber(value));
19
+
20
+ const emptyMinimum = isEmpty(ruleImplementation.minimum);
21
+ const emptyGoal = isEmpty(ruleImplementation.goal);
22
+ if (emptyMinimum || emptyGoal)
23
+ return {
24
+ minimum: emptyMinimum ? [requiredMessage] : undefined,
25
+ goal: emptyGoal ? [requiredMessage] : undefined,
26
+ };
27
+
28
+ const percentageResultValidationMessages = () =>
29
+ goal > 100
30
+ ? {
31
+ goal: ["ruleImplementation.form.validation.max_goal"],
32
+ }
33
+ : minimum > goal
34
+ ? {
35
+ minimum: "ruleImplementation.form.validation.minimum_greater",
36
+ goal: "ruleImplementation.form.validation.goal_less",
37
+ }
38
+ : {};
39
+
40
+ const errorsNumberResultValidationMessages = () =>
41
+ minimum < goal
42
+ ? {
43
+ minimum: "ruleImplementation.form.validation.minimum.greater_eq.goal",
44
+ goal: "ruleImplementation.form.validation.goal.less_eq.minimum",
45
+ }
46
+ : {};
47
+
48
+ const deviationResultValidationMessages = () =>
49
+ minimum > 100
50
+ ? {
51
+ minimum: "ruleImplementation.form.validation.max_minimum",
52
+ }
53
+ : minimum < goal
54
+ ? {
55
+ minimum: "ruleImplementation.form.validation.minimum.greater_eq.goal",
56
+ goal: "ruleImplementation.form.validation.goal.less_eq.minimum",
57
+ }
58
+ : {};
59
+ switch (ruleImplementation.result_type) {
60
+ case "percentage":
61
+ return percentageResultValidationMessages();
62
+ case "errors_number":
63
+ return errorsNumberResultValidationMessages();
64
+ case "deviation":
65
+ return deviationResultValidationMessages();
66
+ }
67
+ }
68
+
69
+ export const areLimitsValid = (ruleImplementation) => {
70
+ const validations = generateValidationMessages(ruleImplementation);
71
+ return _.isNil(validations.minimum) && _.isNil(validations.goal);
72
+ };
@@ -5,23 +5,32 @@ export default {
5
5
  "actions.prev": "Previous",
6
6
  "actions.save": "Save",
7
7
  "actions.submit": "Submit",
8
- "alert.createExecutionGroup.success.content": "{count} implementations queued for execution",
8
+ "alert.createExecutionGroup.success.content":
9
+ "{count} implementations queued for execution",
9
10
  "alert.createExecutionGroup.success.header": "Executions scheduled",
10
11
  "alert.createRule.failed.header": "Error creating rule",
11
- "alert.createRuleImplementation.failed.header": "Error creating implementation",
12
+ "alert.createRuleImplementation.failed.header":
13
+ "Error creating implementation",
12
14
  "alert.deleteRule.failed.header": "Error deleting rule",
13
15
  "alert.updateRule.failed.header": "Error updating rule",
14
- "alert.updateRuleImplementation.failed.header": "Error updating implementation",
16
+ "alert.updateRuleImplementation.failed.header":
17
+ "Error updating implementation",
15
18
  "concepts.rules.empty": "This concept has no quality rules",
16
19
  "createRule.error.domain_id.required": "Domain is required",
17
- "createRuleImplementation.error.implementation_key.duplicated": "Duplicated implementation key",
18
- "dataset.form.button.add_join.popup": "Select both fields to add a new clause",
20
+ "createRuleImplementation.error.implementation_key.duplicated":
21
+ "Duplicated implementation key",
22
+ "createRule.error.rule_name_bc_id.unique_constraint":
23
+ "Duplicated rule name. Edit name or associated business concept.",
24
+ "dataset.form.button.add_join.popup":
25
+ "Select both fields to add a new clause",
19
26
  "dataset.form.button.add_structure": "Add Structure",
20
- "datasetForm.implementation_key.tooltip": "Leave empty for autogeneration of implementation key after saving implementation",
21
- "executionGroup": "Executions",
27
+ "datasetForm.implementation_key.tooltip":
28
+ "Leave empty for autogeneration of implementation key after saving implementation",
29
+ executionGroup: "Executions",
22
30
  "executions.completed.content": "{count} executions completed.",
23
31
  "executions.completed.header": "Executions completed",
24
- "executions.pending.content": "There are {pending} executions pending, please check again later.",
32
+ "executions.pending.content":
33
+ "There are {pending} executions pending, please check again later.",
25
34
  "executions.pending.header": "Executions scheduled",
26
35
  "field_type.icon.date": "calendar alternate outline",
27
36
  "field_type.icon.number": "hashtag",
@@ -45,9 +54,13 @@ export default {
45
54
  "filtersGrid.field.operator": "Operator",
46
55
  "filtersGrid.field.value": "Value",
47
56
  "implementations.actions.do_execution": "Execute implementations",
48
- "implementations.actions.download.tooltip": "Download to csv",
49
- "implementations.actions.execution.confirmation.content": "{implementations_count} implementations will be executed. Are you sure?",
50
- "implementations.actions.execution.confirmation.header": "Implementations execution",
57
+ "implementations.actions.download.tooltip": "Download with csv format",
58
+ "implementations.actions.download.empty":
59
+ "There are no Implementations to be downloaded",
60
+ "implementations.actions.execution.confirmation.content":
61
+ "{implementations_count} implementations will be executed. Are you sure?",
62
+ "implementations.actions.execution.confirmation.header":
63
+ "Implementations execution",
51
64
  "implementations.actions.execution.confirmation.legend": "Template fields",
52
65
  "implementations.execute.filtered": "{count} implementations to execute",
53
66
  "implementations.search.placeholder": "Search implementations...",
@@ -68,7 +81,7 @@ export default {
68
81
  "quality.business_concept": "Business Concept",
69
82
  "quality.current": "Current",
70
83
  "quality.description": "Description",
71
- "quality.error": "Error in latest execution",
84
+ "quality.error": "Latest execution failed",
72
85
  "quality.domain": "Domain",
73
86
  "quality.goal": "Goal",
74
87
  "quality.goal.list": "Goal",
@@ -101,6 +114,7 @@ export default {
101
114
  "quality.subheader": "Manage data quality rules",
102
115
  "quality.template": "Template",
103
116
  "quality.threshold": "Threshold",
117
+ "quality.thresholds": "Limits",
104
118
  "quality.type": "Type",
105
119
  "quality.type_params": "Params",
106
120
  "quality_result.no_execution": "Not executed",
@@ -108,46 +122,73 @@ export default {
108
122
  "quality_result.under_goal": "Under goal",
109
123
  "quality_result.under_minimum": "Under threshold",
110
124
  "quality_result.under_minumum": "Under threshold",
111
- "quality_result.failed" : "Failed",
112
- "rule": "Quality Rule",
125
+ "quality_result.failed": "Failed",
126
+ rule: "Quality Rule",
113
127
  "rule.date.placeholder": "YYYY-MM-DD",
114
128
  "rule.error.goal.required": "Goal required",
115
129
  "rule.error.minimum.required": "Minimun threshold required",
116
- "rule.error.rule_implementations.rule.delete.existing.implementations": "All rule implementations should be removed",
117
- "rule.error.rule_name_bc_id.unique_constraint": "Duplicated rule name. Edit name or associated business concept.",
130
+ "rule.error.rule_implementations.rule.delete.existing.implementations":
131
+ "All rule implementations should be removed",
132
+ "rule.error.rule_name_bc_id.unique_constraint":
133
+ "Duplicated rule name. Edit name or associated business concept.",
118
134
  "rule.form.accordion.select": "Select",
119
135
  "rule.form.concept.label": "Concept",
120
- "rule.form.tooltip.deviation.goal": "Maximum errored records percentage for this rule to be considered OK (lower is better)",
121
- "rule.form.tooltip.deviation.minimum": "Errored records percentage right/upper bound. Rules over this value will be considered erroneous. Higher than goal.",
122
- "rule.form.tooltip.errors_number.goal": "Maximum errored records number for this rule to be considered OK (lower is better).",
123
- "rule.form.tooltip.errors_number.minimum": "Errored records number right/upper bound. Rules over this value will be considered erroneous. Higher than goal.",
124
- "rule.form.tooltip.percentage.goal": "Minimum correct records percentage required for this rule to be considered OK (higher is better)",
125
- "rule.form.tooltip.percentage.minimum": "Correct records percentage left/lower bound. Rules under this value will be considered erroneous. Lower than goal.",
126
- "rule.form.tooltip.result_type": "Defines the format of rule execution results: percentage (of good records), deviation (percentage of bad records), absolute number of errored records.",
127
- "rule.form.tooltip.type": "Defines the rule to be executed on the data. For certain types of rules it will be necessary to entry aditional parameters",
136
+ "ruleImplementation.form.tooltip.deviation.goal":
137
+ "Maximum errored records percentage for this rule to be considered OK (lower is better)",
138
+ "ruleImplementation.form.tooltip.deviation.minimum":
139
+ "Errored records percentage right/upper bound. Rules over this value will be considered erroneous. Higher than goal.",
140
+ "ruleImplementation.form.tooltip.errors_number.goal":
141
+ "Maximum errored records number for this rule to be considered OK (lower is better).",
142
+ "ruleImplementation.form.tooltip.errors_number.minimum":
143
+ "Errored records number right/upper bound. Rules over this value will be considered erroneous. Higher than goal.",
144
+ "ruleImplementation.form.tooltip.percentage.goal":
145
+ "Minimum correct records percentage required for this rule to be considered OK (higher is better)",
146
+ "ruleImplementation.form.tooltip.percentage.minimum":
147
+ "Correct records percentage left/lower bound. Rules under this value will be considered erroneous. Lower than goal.",
148
+ "ruleImplementation.form.tooltip.result_type":
149
+ "Defines the format of rule execution results: percentage (of good records), deviation (percentage of bad records), absolute number of errored records.",
150
+ "rule.form.tooltip.type":
151
+ "Defines the rule to be executed on the data. For certain types of rules it will be necessary to entry aditional parameters",
128
152
  "rule.form.validation.domain_required": "Domain required to select concept",
129
153
  "rule.form.validation.empty_required": "Required field is empty",
130
- "rule.form.validation.goal.less_eq.minimum": "Goal must be less than (or equal to) the threshold (lower goal is better)",
131
- "rule.form.validation.goal_less": "Goal must be greater than (or equal to) the threshold (higher goal is better).",
132
- "rule.form.validation.max_goal": "Goal percentage cannot be greater than 100",
133
- "rule.form.validation.max_minimum": "Threshold percentage cannot be greater than 100",
134
- "rule.form.validation.minimum.greater_eq.goal": "Threshold must greater than (or equal to) the goal",
135
- "rule.form.validation.minimum_greater": "Threshold must be lower than (or equal to) the goal",
154
+ "rule.form.validation.invalid_number_format": "Invalid number format",
155
+ "ruleImplementation.form.validation.goal.less_eq.minimum":
156
+ "Goal must be less than (or equal to) the threshold (lower goal is better)",
157
+ "ruleImplementation.form.validation.goal_less":
158
+ "Goal must be greater than (or equal to) the threshold (higher goal is better).",
159
+ "ruleImplementation.form.validation.max_goal":
160
+ "Goal percentage cannot be greater than 100",
161
+ "ruleImplementation.form.validation.max_minimum":
162
+ "Threshold percentage cannot be greater than 100",
163
+ "ruleImplementation.form.validation.minimum.greater_eq.goal":
164
+ "Threshold must greater than (or equal to) the goal",
165
+ "ruleImplementation.form.validation.minimum_greater":
166
+ "Threshold must be lower than (or equal to) the goal",
136
167
  "rule.form_validation.date.invalid": "Invalid date",
137
- "rule.form_validation.float.decimal_separator.invalid": "Invalid decimal separator",
168
+ "rule.form_validation.float.decimal_separator.invalid":
169
+ "Invalid decimal separator",
138
170
  "rule.form_validation.float.invalid": "Invalid number",
139
171
  "rule.form_validation.float.invalid_decimals": "Decimals number exceeded",
140
172
  "rule.form_validation.integer.invalid": "Invalid number",
141
173
  "rule.form_validation.whole_number.invalid": "Invalid whole number",
142
- "rule.implementation.error.implementation_key.not_available": "Key already asigned. Please, type a new key",
143
- "rule.implementation.error.population.value.invalid_length_between_value_type": "Invalid range of values",
144
- "rule.implementation.error.population.value.left_value_must_be_le_than_right": "Left value should be lower or equals to right value",
145
- "rule.implementation.error.raw_content.dataset.invalid_content": "Found not valid content in dataset",
146
- "rule.implementation.error.raw_content.population.invalid_content": "Found not valid content in population",
147
- "rule.implementation.error.raw_content.validations.invalid_content": "Found not valid content in validations",
148
- "rule.implementation.error.validations.value.invalid_length_between_value_type": "Invalid range of values",
149
- "rule.implementation.error.validations.value.left_value_must_be_le_than_right": "Left value should be lower or equals to right value",
150
- "rule.implementations.deprecated": "Deprecated implementations. You will be able to query its data",
174
+ "rule.implementation.error.implementation_key.not_available":
175
+ "Key already asigned. Please, type a new key",
176
+ "rule.implementation.error.population.value.invalid_length_between_value_type":
177
+ "Invalid range of values",
178
+ "rule.implementation.error.population.value.left_value_must_be_le_than_right":
179
+ "Left value should be lower or equals to right value",
180
+ "rule.implementation.error.raw_content.dataset.invalid_content":
181
+ "Found not valid content in dataset",
182
+ "rule.implementation.error.raw_content.population.invalid_content":
183
+ "Found not valid content in population",
184
+ "rule.implementation.error.raw_content.validations.invalid_content":
185
+ "Found not valid content in validations",
186
+ "rule.implementation.error.validations.value.invalid_length_between_value_type":
187
+ "Invalid range of values",
188
+ "rule.implementation.error.validations.value.left_value_must_be_le_than_right":
189
+ "Left value should be lower or equals to right value",
190
+ "rule.implementations.deprecated":
191
+ "Deprecated implementations. You will be able to query its data",
151
192
  "rule.max_date": "Maximum date",
152
193
  "rule.max_value": "Maximum value",
153
194
  "rule.min_date": "Minimum date",
@@ -161,23 +202,17 @@ export default {
161
202
  "rule.props.business_concept_id.placeholder": "Related term",
162
203
  "rule.props.description": "Description",
163
204
  "rule.props.description.placeholder": "Rule description",
164
- "rule.props.goal": "Goal",
165
- "rule.props.goal.placeholder": "Goal value",
166
205
  "rule.props.implementations": "Implementations",
167
- "rule.props.minimum": "Threshold",
168
- "rule.props.minimum.placeholder": "Threshold value",
169
206
  "rule.props.name": "Name",
170
207
  "rule.props.name.placeholder": "Rule name",
171
- "rule.props.result_type": "Result Type",
172
- "rule.props.result_type.deviation": "Deviation",
173
- "rule.props.result_type.errors_number": "Error count",
174
- "rule.props.result_type.percentage": "Percentage",
175
208
  "rule.props.type": "Rule Type",
176
209
  "rule.props.type.placeholder": "Values range",
177
210
  "rule.props.type_params": "Parameters",
178
211
  "rule.props.type_params.placeholder": "Parameters",
179
- "rule.ruleImplementation.results.empty": "No results found for current implementation",
180
- "rule.ruleImplementation.results.details.empty": "No details found for current result",
212
+ "rule.ruleImplementation.results.empty":
213
+ "No results found for current implementation",
214
+ "rule.ruleImplementation.results.details.empty":
215
+ "No details found for current result",
181
216
  "rule.ruleImplementations.empty": "No rule implementations for current rule",
182
217
  "rule.type.custom_validation": "Is a custom validation",
183
218
  "rule.type.date_format": "Has date format",
@@ -197,7 +232,8 @@ export default {
197
232
  "rule.type.numeric_format": "Has a numeric format",
198
233
  "rule.type.unique_values": "Has unique values",
199
234
  "rule.type_params.error.max_date.cast.date": "Max date invalid",
200
- "rule.type_params.error.max_date.must.be.greater.than.or.equal.to.min_date": "Date not valid",
235
+ "rule.type_params.error.max_date.must.be.greater.than.or.equal.to.min_date":
236
+ "Date not valid",
201
237
  "rule.type_params.error.max_date.required": "Max date required",
202
238
  "rule.type_params.error.min_date.cast.date": "Min date invalid",
203
239
  "rule.type_params.error.min_date.required": "Min date required",
@@ -205,16 +241,22 @@ export default {
205
241
  "ruleImplementation.action.deprecate": "deprecated",
206
242
  "ruleImplementation.actions.clone": "Clone implementation",
207
243
  "ruleImplementation.actions.delete": "Delete implementation",
208
- "ruleImplementation.actions.delete.confirmation.content": "This rule implementation will be deleted. Are you sure?",
209
- "ruleImplementation.actions.delete.confirmation.header": "Delete implementation",
244
+ "ruleImplementation.actions.delete.confirmation.content":
245
+ "This rule implementation will be deleted. Are you sure?",
246
+ "ruleImplementation.actions.delete.confirmation.header":
247
+ "Delete implementation",
210
248
  "ruleImplementation.actions.deprecate": "Deprecate implementation",
211
- "ruleImplementation.actions.deprecate.confirmation.content": "Once {action} you can only view it on {mode}. Are you sure?",
212
- "ruleImplementation.actions.deprecate.confirmation.header": "Deprecate implementation",
249
+ "ruleImplementation.actions.deprecate.confirmation.content":
250
+ "Once {action} you can only view it on {mode}. Are you sure?",
251
+ "ruleImplementation.actions.deprecate.confirmation.header":
252
+ "Deprecate implementation",
213
253
  "ruleImplementation.actions.edit": "Edit implementation",
214
254
  "ruleImplementation.actions.move": "Move to another rule",
215
255
  "ruleImplementation.actions.restore": "Restore Implementation",
216
- "ruleImplementation.actions.restore.confirmation.content": "A deleted implementation will be restored. ¿Are you sure?",
217
- "ruleImplementation.actions.restore.confirmation.header": "Restore implementation",
256
+ "ruleImplementation.actions.restore.confirmation.content":
257
+ "A deleted implementation will be restored. ¿Are you sure?",
258
+ "ruleImplementation.actions.restore.confirmation.header":
259
+ "Restore implementation",
218
260
  "ruleImplementation.column": "Column",
219
261
  "ruleImplementation.column.placeholder": "Select a column",
220
262
  "ruleImplementation.deprecate.folder": '"Deprecated items"',
@@ -234,11 +276,13 @@ export default {
234
276
  "ruleImplementation.filtersField.last_day_of_month": "Last day of month",
235
277
  "ruleImplementation.filtersField.last_day_of_week": "Last day of week",
236
278
  "ruleImplementation.filtersField.last_month_last_day": "Last month last day",
237
- "ruleImplementation.filtersField.last_validation_period": "Last validation period",
279
+ "ruleImplementation.filtersField.last_validation_period":
280
+ "Last validation period",
238
281
  "ruleImplementation.filtersField.last_year_last_day": "Last year last day",
239
282
  "ruleImplementation.filtersField.number": "Number",
240
283
  "ruleImplementation.filtersField.phone": "Phone",
241
- "ruleImplementation.filtersField.previous_month_last_day": "Previous month last day",
284
+ "ruleImplementation.filtersField.previous_month_last_day":
285
+ "Previous month last day",
242
286
  "ruleImplementation.filtersField.season": "Season",
243
287
  "ruleImplementation.filtersField.timestamp": "Date/Time",
244
288
  "ruleImplementation.freetext.false": "No",
@@ -295,7 +339,8 @@ export default {
295
339
  "ruleImplementation.operator.gte.string": "greater or equal than (text)",
296
340
  "ruleImplementation.operator.gte.timestamp": "greater or equal than",
297
341
  "ruleImplementation.operator.gte_var": "greater or equal than",
298
- "ruleImplementation.operator.gte_var.string": "greater or equal than variable",
342
+ "ruleImplementation.operator.gte_var.string":
343
+ "greater or equal than variable",
299
344
  "ruleImplementation.operator.in_list": "is in list",
300
345
  "ruleImplementation.operator.in_list.string_list": "is in list",
301
346
  "ruleImplementation.operator.is_false": "is FALSE",
@@ -307,7 +352,8 @@ export default {
307
352
  "ruleImplementation.operator.length_gt": "length greater than",
308
353
  "ruleImplementation.operator.length_gt.number": "length greater than",
309
354
  "ruleImplementation.operator.length_gte": "length greater or equal than",
310
- "ruleImplementation.operator.length_gte.number": "length greater or equal than",
355
+ "ruleImplementation.operator.length_gte.number":
356
+ "length greater or equal than",
311
357
  "ruleImplementation.operator.length_lt": "length less than",
312
358
  "ruleImplementation.operator.length_lt.number": "length less than",
313
359
  "ruleImplementation.operator.length_lte": "length less or equal than",
@@ -344,11 +390,13 @@ export default {
344
390
  "ruleImplementation.operator.not_references": "is not referenced",
345
391
  "ruleImplementation.operator.not_references.field": "is not referenced",
346
392
  "ruleImplementation.operator.number_of_decimals": "has a number of decimals",
347
- "ruleImplementation.operator.number_of_decimals.number": "has a number of decimals",
393
+ "ruleImplementation.operator.number_of_decimals.number":
394
+ "has a number of decimals",
348
395
  "ruleImplementation.operator.references": "referenced in",
349
396
  "ruleImplementation.operator.references.field": "referenced in field",
350
397
  "ruleImplementation.operator.regex_format": "matches regular expression",
351
- "ruleImplementation.operator.regex_format.string": "matches regular expression",
398
+ "ruleImplementation.operator.regex_format.string":
399
+ "matches regular expression",
352
400
  "ruleImplementation.operator.starts_with": "starts with",
353
401
  "ruleImplementation.operator.starts_with.string": "starts with",
354
402
  "ruleImplementation.operator.unique": "has unique value",
@@ -390,21 +438,31 @@ export default {
390
438
  "ruleImplementationRawForm.props.database": "Database",
391
439
  "ruleImplementationRawForm.props.database.placeholder": "Select database",
392
440
  "ruleImplementationRawForm.props.dataset": "Dataset",
393
- "ruleImplementationRawForm.props.dataset.help": "Subset of structures that will be validated. In SQL systems implementations this clause will be the FROM part of the query",
394
- "ruleImplementationRawForm.props.dataset.placeholder": "TPERSONS p \nLEFT JOIN TCLIENTES c ON c.person_id = p.id",
441
+ "ruleImplementationRawForm.props.dataset.help":
442
+ "Subset of structures that will be validated. In SQL systems implementations this clause will be the FROM part of the query",
443
+ "ruleImplementationRawForm.props.dataset.placeholder":
444
+ "TPERSONS p \nLEFT JOIN TCLIENTES c ON c.person_id = p.id",
395
445
  "ruleImplementationRawForm.props.population": "Population",
396
- "ruleImplementationRawForm.props.population.help": "Optional filter to be applied over dataset. This filter will define the number of records of validations",
397
- "ruleImplementationRawForm.props.population.placeholder": "p.tipo = 'F'\nAND c.pais = 'ES' ",
446
+ "ruleImplementationRawForm.props.population.help":
447
+ "Optional filter to be applied over dataset. This filter will define the number of records of validations",
448
+ "ruleImplementationRawForm.props.population.placeholder":
449
+ "p.tipo = 'F'\nAND c.pais = 'ES' ",
398
450
  "ruleImplementationRawForm.props.source": "Data source",
399
451
  "ruleImplementationRawForm.props.source.placeholder": "Select data source",
400
452
  "ruleImplementationRawForm.props.validations": "Validations",
401
- "ruleImplementationRawForm.props.validations.help": "Validations to be performed against selected data. It will output the count of valid registers over the data defined in dataset and population",
402
- "ruleImplementationRawForm.props.validations.placeholder": "p.nombre is not null\nAND p.nombre <> ",
403
- "ruleImplementationRawForm.rawText.error": "Entered content not allowed: {invalid_content}",
453
+ "ruleImplementationRawForm.props.validations.help":
454
+ "Validations to be performed against selected data. It will output the count of valid registers over the data defined in dataset and population",
455
+ "ruleImplementationRawForm.props.validations.placeholder":
456
+ "p.nombre is not null\nAND p.nombre <> ",
457
+ "ruleImplementationRawForm.rawText.error":
458
+ "Entered content not allowed: {invalid_content}",
404
459
  "ruleImplementations.actions.active.tooltip": "Active implementations",
405
460
  "ruleImplementations.actions.create": "New Implementation",
406
461
  "ruleImplementations.actions.edit": "Edit Implementation",
407
462
  "ruleImplementations.actions.popup.deprecated": "Deprecated Implementations",
463
+ "ruleImplementations.actions.upload.tooltip": "Upload Implementations",
464
+ "ruleImplementations.actions.upload.confirmation.header":
465
+ "Confirm bulk upload",
408
466
  "ruleImplementations.header": "Quality Implementations",
409
467
  "ruleImplementations.props.business_concept": "Concept",
410
468
  "ruleImplementations.props.status": "Status",
@@ -412,12 +470,18 @@ export default {
412
470
  "ruleImplementations.props.executable.true": "Executable",
413
471
  "ruleImplementations.props.executable.false": "Internal",
414
472
  "ruleImplementations.props.execution": "Execution",
415
- "ruleImplementations.props.goal": "Goal",
416
473
  "ruleImplementations.props.implementation_key": "Identifier",
417
474
  "ruleImplementations.props.implementation_type": "Type",
418
475
  "ruleImplementations.props.inserted_at": "Inserted at",
419
476
  "ruleImplementations.props.last_execution_at": "Last Execution",
420
- "ruleImplementations.props.minimum": "Minimum",
477
+ "ruleImplementations.props.minimum": "Threshold",
478
+ "ruleImplementations.props.minimum.placeholder": "Threshold value",
479
+ "ruleImplementations.props.goal": "Goal",
480
+ "ruleImplementations.props.goal.placeholder": "Goal value",
481
+ "ruleImplementations.props.result_type": "Result Type",
482
+ "ruleImplementations.props.result_type.deviation": "Deviation",
483
+ "ruleImplementations.props.result_type.errors_number": "Error count",
484
+ "ruleImplementations.props.result_type.percentage": "Percentage",
421
485
  "ruleImplementations.props.quality_result.no_execution": "Not executed",
422
486
  "ruleImplementations.props.quality_result.over_goal": "Over goal",
423
487
  "ruleImplementations.props.quality_result.under_goal": "Under goal",
@@ -434,6 +498,20 @@ export default {
434
498
  "ruleImplementations.summary.headers.implementation": "Rule Implementation",
435
499
  "ruleImplementations.summary.headers.population": "Population",
436
500
  "ruleImplementations.summary.headers.validations": "Validation",
501
+ "ruleImplementations.upload.success.errors":
502
+ "Error in {implementation_key} attribute: {key} message: {message} ",
503
+ "ruleImplementations.upload.success.header":
504
+ "Upload success! Loaded {count_ids} omitted {count_errors}:",
505
+ "ruleImplementations.upload.failed.header":
506
+ "Error uploading file. No rules have been created.",
507
+ "ruleImplementations.upload.failed.misssing_required_columns":
508
+ "Faltan columnas obligatorias en el fichero. Esperado [{expected}]. Recibido [{found}].",
509
+ "ruleResults.actions.upload.tooltip": "Upload rule results",
510
+ "ruleResults.actions.upload.confirmation.header": "Upload rule results",
511
+ "ruleResults.upload.success.header": "Upload successful!",
512
+ "ruleResults.upload.failed.header":
513
+ "Error uploading file. No results have been created.",
514
+ "ruleResults.upload.failed.content": "Error in line {row}.",
437
515
  "ruleResult.props.header.information": "Information",
438
516
  "ruleResult.props.header.details": "Details",
439
517
  "ruleResult.props.date": "Date",
@@ -442,16 +520,28 @@ export default {
442
520
  "ruleResult.props.quality": "Quality",
443
521
  "ruleResult.props.records": "Records",
444
522
  "ruleSubscription.actions.remove": "Eliminar",
445
- "rule_result.actions.delete.confirmation.content": "This rule result will be deleted. Are you sure?",
523
+ "rule_result.actions.delete.confirmation.content":
524
+ "This rule result will be deleted. Are you sure?",
446
525
  "rule_result.actions.delete.confirmation.header": "Delete result",
447
526
  "rules.actions.activate_execution": "Activate executions",
448
527
  "rules.actions.create": "New Quality Rule",
449
- "rules.actions.delete.confirmation.content": "The rule {name} will be deleted. ¿Are you sure?",
528
+ "rules.actions.delete.confirmation.content":
529
+ "The rule {name} will be deleted. ¿Are you sure?",
450
530
  "rules.actions.delete.confirmation.header": "Delete Quality Rule",
531
+ "rules.actions.upload.confirmation.header": "Confirm bulk upload",
532
+ "rules.actions.upload.tooltip": "Upload Rules",
451
533
  "rules.crumbs.top": "Rules",
452
534
  "rules.retrieved.results": "{count} rules found",
453
535
  "rules.search.placeholder": "Search rules...",
454
536
  "rules.searching": "Searching...",
537
+ "rules.upload.success.errors":
538
+ "Error in {rule_name} attribute: {key} message: {message} ",
539
+ "rules.upload.success.header":
540
+ "Upload successful! Loaded {count_ids} omitted {count_errors}:",
541
+ "rules.upload.failed.header":
542
+ "Error uploading file. No rules have been created.",
543
+ "rules.upload.failed.misssing_required_columns":
544
+ "Missing required columns. Expected [{expected}]. Found [{found}].",
455
545
  "structureFields.dropdown.label": "Select Field",
456
546
  "structureFields.dropdown.placeholder": "Fields",
457
547
  "summary.link.and": "and",
@@ -461,6 +551,7 @@ export default {
461
551
  "tabs.dq.ruleImplementation.results": "Results",
462
552
  "tabs.dq.ruleImplementations": "Implementations",
463
553
  "tabs.qualityRules": "Quality Rules",
464
- "updateRuleImplementation.error.implementation_key.duplicated": "Duplicated implementation key",
465
- "updateRule.error.domain_id.required": "Domain is required"
554
+ "updateRuleImplementation.error.implementation_key.duplicated":
555
+ "Duplicated implementation key",
556
+ "updateRule.error.domain_id.required": "Domain is required",
466
557
  };