@truedat/dq 4.53.6 → 4.53.8

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 (27) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/package.json +5 -5
  3. package/src/api/mutations.js +8 -0
  4. package/src/components/ConditionSummary.js +35 -26
  5. package/src/components/ImplementationActions.js +16 -0
  6. package/src/components/ImplementationSearchResults.js +9 -1
  7. package/src/components/ImplementationSummary.js +20 -14
  8. package/src/components/ImplementationsRoutes.js +12 -0
  9. package/src/components/NewRuleImplementation.js +62 -40
  10. package/src/components/QualityRoutes.js +7 -0
  11. package/src/components/RuleImplementation.js +1 -9
  12. package/src/components/__tests__/ImplementationSummary.spec.js +1 -1
  13. package/src/components/__tests__/NewRuleImplementation.spec.js +49 -45
  14. package/src/components/__tests__/__fixtures__/NewRuleImplementationProps.js +25 -23
  15. package/src/components/__tests__/__fixtures__/newRuleImplementationHelper.js +11 -12
  16. package/src/components/__tests__/__snapshots__/NewRuleImplementation.spec.js.snap +62 -1
  17. package/src/components/ruleImplementationForm/FiltersGrid.js +1 -1
  18. package/src/components/ruleImplementationForm/FiltersGroup.js +22 -20
  19. package/src/components/ruleImplementationForm/RuleImplementationForm.js +62 -25
  20. package/src/components/ruleImplementationForm/ValidationsForm.js +1 -2
  21. package/src/messages/en.js +9 -3
  22. package/src/messages/es.js +9 -3
  23. package/src/reducers/ruleImplementation.js +4 -1
  24. package/src/reducers/ruleRedirect.js +3 -0
  25. package/src/routines.js +1 -0
  26. package/src/sagas/index.js +3 -0
  27. package/src/sagas/restoreImplementation.js +24 -0
@@ -205,32 +205,34 @@ export const newRuleImplementationProps = {
205
205
  df_content: {},
206
206
  },
207
207
  validations: [
208
- {
209
- operator: {
210
- name: "length_not_eq",
211
- value_type: "number",
212
- },
213
- structure: {
214
- external_id: "/data/example.txt[agent]",
215
- id: 4814766,
216
- metadata: {
217
- metadata: { order: "6" },
208
+ [
209
+ {
210
+ operator: {
211
+ name: "length_not_eq",
212
+ value_type: "number",
218
213
  },
219
- name: "agent",
220
- path: ["Main", "example.txt"],
221
- system: {
222
- external_id: "file_system",
223
- id: 33,
224
- name: "File System",
214
+ structure: {
215
+ external_id: "/data/example.txt[agent]",
216
+ id: 4814766,
217
+ metadata: {
218
+ metadata: { order: "6" },
219
+ },
220
+ name: "agent",
221
+ path: ["Main", "example.txt"],
222
+ system: {
223
+ external_id: "file_system",
224
+ id: 33,
225
+ name: "File System",
226
+ },
227
+ type: "Column",
225
228
  },
226
- type: "Column",
229
+ value: [
230
+ {
231
+ raw: 2,
232
+ },
233
+ ],
227
234
  },
228
- value: [
229
- {
230
- raw: 2,
231
- },
232
- ],
233
- },
235
+ ],
234
236
  ],
235
237
  segments: [
236
238
  {
@@ -13,7 +13,6 @@ const structuresFields = {
13
13
  11127104: [
14
14
  {
15
15
  data_structure_id: 11127108,
16
- data_type_class: "number",
17
16
  deleted_at: null,
18
17
  description:
19
18
  "Department id where employee works; foreign key to department_id column of the departments table",
@@ -21,6 +20,7 @@ const structuresFields = {
21
20
  links: [],
22
21
  name: "DEPARTMENT_ID",
23
22
  metadata: {
23
+ data_type_class: "number",
24
24
  database: "xe",
25
25
  default: "None",
26
26
  host: "localhost",
@@ -34,13 +34,13 @@ const structuresFields = {
34
34
  },
35
35
  {
36
36
  data_structure_id: 11127111,
37
- data_type_class: "string",
38
37
  deleted_at: null,
39
38
  description: "First name of the employee. A not null column.",
40
39
  inserted_at: "2022-04-12T14:28:06.057667Z",
41
40
  links: [],
42
41
  name: "FIRST_NAME",
43
42
  metadata: {
43
+ data_type_class: "string",
44
44
  database: "xe",
45
45
  default: "None",
46
46
  host: "localhost",
@@ -54,7 +54,6 @@ const structuresFields = {
54
54
  },
55
55
  {
56
56
  data_structure_id: 11127117,
57
- data_type_class: "number",
58
57
  deleted_at: null,
59
58
  description:
60
59
  "Monthly salary of the employee. Must be greater than zero (enforced by constraint emp_salary_min)",
@@ -75,7 +74,6 @@ const structuresFields = {
75
74
  },
76
75
  {
77
76
  data_structure_id: 11127116,
78
- data_type_class: "string",
79
77
  deleted_at: null,
80
78
  description:
81
79
  "Phone number of the employee; includes country code and area code",
@@ -84,6 +82,7 @@ const structuresFields = {
84
82
  name: "PHONE_NUMBER",
85
83
  type: "column",
86
84
  metadata: {
85
+ data_type_class: "string",
87
86
  database: "xe",
88
87
  default: "None",
89
88
  host: "localhost",
@@ -97,7 +96,6 @@ const structuresFields = {
97
96
  },
98
97
  {
99
98
  data_structure_id: 11127115,
100
- data_type_class: "number",
101
99
  deleted_at: null,
102
100
  description:
103
101
  "Manager id of the employee; has same domain as manager_id in departments table. Foreign key to employee_id column of employees table. (useful for reflexive joins and CONNECT BY query)",
@@ -106,6 +104,7 @@ const structuresFields = {
106
104
  name: "MANAGER_ID",
107
105
  type: "NUMBER",
108
106
  metadata: {
107
+ data_type_class: "number",
109
108
  database: "xe",
110
109
  default: "None",
111
110
  host: "localhost",
@@ -118,7 +117,6 @@ const structuresFields = {
118
117
  },
119
118
  {
120
119
  data_structure_id: 11127109,
121
- data_type_class: "string",
122
120
  deleted_at: null,
123
121
  description: "Email id of the employee",
124
122
  inserted_at: "2022-04-12T14:28:06.057667Z",
@@ -126,6 +124,7 @@ const structuresFields = {
126
124
  name: "EMAIL",
127
125
  type: "column",
128
126
  metadata: {
127
+ data_type_class: "string",
129
128
  database: "xe",
130
129
  default: "None",
131
130
  host: "localhost",
@@ -139,13 +138,13 @@ const structuresFields = {
139
138
  },
140
139
  {
141
140
  data_structure_id: 11127110,
142
- data_type_class: "number",
143
141
  deleted_at: null,
144
142
  description: "Primary key of employees table.",
145
143
  inserted_at: "2022-04-12T14:28:06.057667Z",
146
144
  links: [],
147
145
  name: "EMPLOYEE_ID",
148
146
  metadata: {
147
+ data_type_class: "number",
149
148
  database: "xe",
150
149
  default: "None",
151
150
  host: "localhost",
@@ -160,13 +159,13 @@ const structuresFields = {
160
159
  },
161
160
  {
162
161
  data_structure_id: 11127114,
163
- data_type_class: "string",
164
162
  deleted_at: null,
165
163
  description: "Last name of the employee. A not null column.",
166
164
  inserted_at: "2022-04-12T14:28:06.057667Z",
167
165
  links: [],
168
166
  name: "LAST_NAME",
169
167
  metadata: {
168
+ data_type_class: "string",
170
169
  database: "xe",
171
170
  default: "None",
172
171
  host: "localhost",
@@ -180,7 +179,6 @@ const structuresFields = {
180
179
  },
181
180
  {
182
181
  data_structure_id: 11127112,
183
- data_type_class: "date",
184
182
  deleted_at: null,
185
183
  description:
186
184
  "Date when the employee started on this job. A not null column.",
@@ -188,6 +186,7 @@ const structuresFields = {
188
186
  links: [],
189
187
  name: "HIRE_DATE",
190
188
  metadata: {
189
+ data_type_class: "date",
191
190
  database: "xe",
192
191
  default: "None",
193
192
  host: "localhost",
@@ -201,7 +200,6 @@ const structuresFields = {
201
200
  },
202
201
  {
203
202
  data_structure_id: 11127113,
204
- data_type_class: "string",
205
203
  deleted_at: null,
206
204
  description:
207
205
  "Current job of the employee; foreign key to job_id column of the jobs table. A not null column.",
@@ -209,6 +207,7 @@ const structuresFields = {
209
207
  links: [],
210
208
  name: "JOB_ID",
211
209
  metadata: {
210
+ data_type_class: "string",
212
211
  database: "xe",
213
212
  default: "None",
214
213
  host: "localhost",
@@ -222,7 +221,6 @@ const structuresFields = {
222
221
  },
223
222
  {
224
223
  data_structure_id: 11127107,
225
- data_type_class: "number",
226
224
  deleted_at: null,
227
225
  description:
228
226
  "Commission percentage of the employee; Only employees in sales department elgible for commission percentage",
@@ -230,6 +228,7 @@ const structuresFields = {
230
228
  links: [],
231
229
  name: "COMMISSION_PCT",
232
230
  metadata: {
231
+ data_type_class: "number",
233
232
  database: "xe",
234
233
  default: "None",
235
234
  host: "localhost",
@@ -374,7 +373,7 @@ const ruleImplementation = {
374
373
  rule_id: null,
375
374
  segments: [],
376
375
  status: "draft",
377
- validations: [],
376
+ validations: [[]],
378
377
  version: 2,
379
378
  };
380
379
 
@@ -653,7 +653,7 @@ exports[`<NewRuleImplementation /> calculate aliases when not informed 1`] = `
653
653
  <div
654
654
  class="content"
655
655
  >
656
- Validation
656
+ Validations
657
657
  </div>
658
658
  </h3>
659
659
  <div
@@ -1370,6 +1370,67 @@ exports[`<NewRuleImplementation /> matches the latest snapshot 1`] = `
1370
1370
  </div>
1371
1371
  </div>
1372
1372
  </div>
1373
+ <h3
1374
+ class="ui header"
1375
+ >
1376
+ <i
1377
+ aria-hidden="true"
1378
+ class="setting small icon"
1379
+ />
1380
+ <div
1381
+ class="content"
1382
+ >
1383
+ Validations
1384
+ </div>
1385
+ </h3>
1386
+ <div
1387
+ class="ui segment"
1388
+ >
1389
+ <table
1390
+ class="ui very basic table"
1391
+ >
1392
+ <thead
1393
+ class=""
1394
+ >
1395
+ <tr
1396
+ class=""
1397
+ >
1398
+ <th
1399
+ class=""
1400
+ >
1401
+ Field
1402
+ </th>
1403
+ <th
1404
+ class=""
1405
+ >
1406
+ Operator
1407
+ </th>
1408
+ <th
1409
+ class=""
1410
+ >
1411
+ Values
1412
+ </th>
1413
+ </tr>
1414
+ </thead>
1415
+ <tbody
1416
+ class=""
1417
+ >
1418
+ <tr
1419
+ class=""
1420
+ >
1421
+ <td
1422
+ class="five wide"
1423
+ />
1424
+ <td
1425
+ class="five wide"
1426
+ />
1427
+ <td
1428
+ class="five wide"
1429
+ />
1430
+ </tr>
1431
+ </tbody>
1432
+ </table>
1433
+ </div>
1373
1434
  </div>
1374
1435
  </div>
1375
1436
  </div>
@@ -142,7 +142,7 @@ export const FiltersGrid = ({
142
142
 
143
143
  return (
144
144
  <>
145
- <Grid verticalAlign="middle" divided="vertically">
145
+ <Grid verticalAlign="middle">
146
146
  <FiltersGroup
147
147
  activeConditionIndex={activeConditionIndex}
148
148
  allOperators={allOperators}
@@ -1,7 +1,7 @@
1
1
  import _ from "lodash/fp";
2
- import React, { useState } from "react";
2
+ import React, { Fragment, useState } from "react";
3
3
  import { useIntl } from "react-intl";
4
- import { Accordion, Grid, Icon, Popup } from "semantic-ui-react";
4
+ import { Accordion, Divider, Grid, Icon, Popup } from "semantic-ui-react";
5
5
  import PropTypes from "prop-types";
6
6
  import ValueConditions from "./ValueConditions";
7
7
  import FiltersFormGroup from "./FiltersFormGroup";
@@ -158,24 +158,26 @@ export const FiltersGroup = ({
158
158
  scope,
159
159
  }) => {
160
160
  return rows.map((clause, index) => (
161
- <Filter
162
- key={index}
163
- activeConditionIndex={activeConditionIndex}
164
- allOperators={allOperators}
165
- operators={operators}
166
- composeValue={composeValue}
167
- clause={clause}
168
- index={index}
169
- onConditionChange={onConditionChange}
170
- onOperatorChange={onOperatorChange}
171
- onStructureChange={onStructureChange}
172
- onValueChange={onValueChange}
173
- onModifierChange={onModifierChange}
174
- parentStructures={parentStructures}
175
- setActiveConditionIndex={setActiveConditionIndex}
176
- setRowValue={setRowValue}
177
- scope={scope}
178
- />
161
+ <Fragment key={index}>
162
+ <Filter
163
+ activeConditionIndex={activeConditionIndex}
164
+ allOperators={allOperators}
165
+ operators={operators}
166
+ composeValue={composeValue}
167
+ clause={clause}
168
+ index={index}
169
+ onConditionChange={onConditionChange}
170
+ onOperatorChange={onOperatorChange}
171
+ onStructureChange={onStructureChange}
172
+ onValueChange={onValueChange}
173
+ onModifierChange={onModifierChange}
174
+ parentStructures={parentStructures}
175
+ setActiveConditionIndex={setActiveConditionIndex}
176
+ setRowValue={setRowValue}
177
+ scope={scope}
178
+ />
179
+ {index < rows.length - 1 ? <Divider /> : null}
180
+ </Fragment>
179
181
  ));
180
182
  };
181
183
 
@@ -1,5 +1,5 @@
1
1
  import _ from "lodash/fp";
2
- import React, { useEffect, useState } from "react";
2
+ import React, { Fragment, useEffect, useState } from "react";
3
3
  import PropTypes from "prop-types";
4
4
  import { connect } from "react-redux";
5
5
  import { useHistory } from "react-router-dom";
@@ -45,7 +45,8 @@ RuleImplementationStep.propTypes = {
45
45
 
46
46
  export const RuleImplementationForm = ({
47
47
  addPopulation,
48
- addSegments,
48
+ addSegment,
49
+ addValidation,
49
50
  isSubmitting,
50
51
  onChange,
51
52
  onSubmit,
@@ -122,10 +123,6 @@ export const RuleImplementationForm = ({
122
123
  !!ruleImplementation?.domain_id &&
123
124
  areLimitsValid(ruleImplementation);
124
125
 
125
- const validValidations = () =>
126
- _.every(_.negate(_.isEmpty))(validations) &&
127
- validationsComplete(validations);
128
-
129
126
  const validSegments = () => _.every(_.negate(_.isEmpty))(segments);
130
127
 
131
128
  const validDataSet = () => areStructuresComplete();
@@ -158,7 +155,7 @@ export const RuleImplementationForm = ({
158
155
  {
159
156
  name: "validations",
160
157
  icon: "setting",
161
- isValid: () => validValidations(),
158
+ isValid: () => validValidations(validations),
162
159
  },
163
160
  ...(canManageSegmentsAnyDomain
164
161
  ? [
@@ -192,7 +189,13 @@ export const RuleImplementationForm = ({
192
189
  _.every(_.negate(_.isEmpty))(population) &&
193
190
  _.every((p) => itemComplete(p, attrsFromProfile(p)))(population);
194
191
 
192
+ const validValidations = (validationsSet) =>
193
+ _.every(
194
+ (validations) => _.negate(_.isEmpty) && validationsComplete(validations)
195
+ )(validationsSet);
196
+
195
197
  const validationsComplete = (validations) =>
198
+ _.negate(_.isEmpty)(validations) &&
196
199
  _.every((v) => itemComplete(v, attrsFromProfile(v)))(validations);
197
200
 
198
201
  const attrsFromProfile = (p) => {
@@ -361,14 +364,23 @@ export const RuleImplementationForm = ({
361
364
  {activeStep == "populations" ? (
362
365
  <>
363
366
  {populations.map((population, i) => (
364
- <Segment key={i}>
365
- <PopulationForm
366
- population={population}
367
- setPopulation={(p) => setPopulations(p, i)}
368
- structures={structures}
369
- typeOperators={operators}
370
- />
371
- </Segment>
367
+ <Fragment key={i}>
368
+ <Segment>
369
+ <PopulationForm
370
+ population={population}
371
+ setPopulation={(p) => setPopulations(p, i)}
372
+ structures={structures}
373
+ typeOperators={operators}
374
+ />
375
+ </Segment>
376
+ {i < populations.length - 1 ? (
377
+ <Divider horizontal>
378
+ {formatMessage({
379
+ id: "ruleImplementations.or",
380
+ })}
381
+ </Divider>
382
+ ) : null}
383
+ </Fragment>
372
384
  ))}
373
385
  {_.flow(_.flatten, _.isEmpty)(populations) ? (
374
386
  <PopulationTypeForm createFilter={() => addPopulation()} />
@@ -383,18 +395,42 @@ export const RuleImplementationForm = ({
383
395
  ) : null}
384
396
  </>
385
397
  ) : null}
386
- {activeStep == "validations" && (
387
- <ValidationsForm
388
- validations={validations}
389
- setValidations={setValidations}
390
- structures={structures}
391
- typeOperators={operators}
392
- />
393
- )}
398
+ {activeStep == "validations" ? (
399
+ <>
400
+ {validations.map((validation, i) => (
401
+ <Fragment key={i}>
402
+ <Segment>
403
+ <ValidationsForm
404
+ validations={validation}
405
+ setValidations={(v) => setValidations(v, i)}
406
+ structures={structures}
407
+ typeOperators={operators}
408
+ />
409
+ </Segment>
410
+ {i < validations.length - 1 ? (
411
+ <Divider horizontal>
412
+ {formatMessage({
413
+ id: "ruleImplementations.or",
414
+ })}
415
+ </Divider>
416
+ ) : null}
417
+ </Fragment>
418
+ ))}
419
+ {validValidations(validations) ? (
420
+ <Button
421
+ secondary
422
+ onClick={() => addValidation()}
423
+ content={formatMessage({
424
+ id: "ruleImplementationForm.validations.add",
425
+ })}
426
+ />
427
+ ) : null}
428
+ </>
429
+ ) : null}
394
430
  {activeStep == "segments" ? (
395
431
  <>
396
432
  {_.flow(_.flatten, _.isEmpty)(segments) ? (
397
- <SegmentsTypeForm createFilter={() => addSegments()} />
433
+ <SegmentsTypeForm createFilter={() => addSegment()} />
398
434
  ) : (
399
435
  <SegmentsForm
400
436
  segments={segments}
@@ -466,7 +502,8 @@ export const RuleImplementationForm = ({
466
502
 
467
503
  RuleImplementationForm.propTypes = {
468
504
  addPopulation: PropTypes.func,
469
- addSegments: PropTypes.func,
505
+ addValidation: PropTypes.func,
506
+ addSegment: PropTypes.func,
470
507
  authManageSegments: PropTypes.bool,
471
508
  isAdmin: PropTypes.bool,
472
509
  isSubmitting: PropTypes.bool,
@@ -17,8 +17,7 @@ export const ValidationsForm = ({
17
17
  const validation = { ..._.nth(index)(validations), ...value };
18
18
  setValidations(replaceAt(index, validation)(validations));
19
19
  } else {
20
- const array = dropAt(index)(validations);
21
- setValidations(_.isEmpty(array) ? [{}] : array);
20
+ setValidations(dropAt(index)(validations));
22
21
  }
23
22
  };
24
23
 
@@ -78,9 +78,11 @@ export default {
78
78
  "implementations.execute.filtered": "{count} implementations to execute",
79
79
  "implementations.header": "Quality Implementations",
80
80
  "implementations.header.manage": "Implementation Management",
81
+ "implementations.header.deprecated": "Deprecated Implementations",
81
82
  "implementations.search.placeholder": "Search implementations...",
82
83
  "implementations.subheader": "Quality implementations list and details",
83
84
  "implementations.subheader.manage": "Implementation Versions in Progress",
85
+ "implementations.subheader.deprecated": "List of deprecated quality implementations",
84
86
  "implementationsStructures.delete.confirmation.content":
85
87
  "The relation will be deleted. Are you sure?",
86
88
  "implementationsStructures.delete.confirmation.header":
@@ -438,7 +440,6 @@ export default {
438
440
  "ruleImplementation.props.reference_dataset": "Reference dataset",
439
441
  "ruleImplementation.props.reference_dataset.placeholder":
440
442
  "Search reference dataset",
441
- "ruleImplementation.props.status.deprecated": "Deprecated Implementation",
442
443
  "ruleImplementation.props.structure": "Structure",
443
444
  "ruleImplementation.props.structure.alias": "Alias",
444
445
  "ruleImplementation.props.structure.placeholder": "Search structure",
@@ -460,6 +461,7 @@ export default {
460
461
  "ruleImplementation.summary.population": "Population",
461
462
  "ruleImplementation.summary.source": "Data source",
462
463
  "ruleImplementation.summary.structure": "Structure",
464
+ "ruleImplementation.summary.invalid_structure": "Invalid structure",
463
465
  "ruleImplementation.summary.system": "System",
464
466
  "ruleImplementation.summary.validations": "Validations",
465
467
  "ruleImplementation.summary.values": "Values",
@@ -467,12 +469,14 @@ export default {
467
469
  "ruleImplementation.system.placeholder": "Select a system",
468
470
  "ruleImplementation.table": "Table",
469
471
  "ruleImplementation.table.placeholder": "Select a table",
472
+ "ruleImplementationForm.condition.add": "Add condition",
470
473
  "ruleImplementationForm.populations.add": "Add population",
471
474
  "ruleImplementationForm.step.dataset": "Data Set",
472
475
  "ruleImplementationForm.step.information": "Information",
473
476
  "ruleImplementationForm.step.populations": "Populations",
474
477
  "ruleImplementationForm.step.segments": "Segments",
475
478
  "ruleImplementationForm.step.validations": "Validations",
479
+ "ruleImplementationForm.validations.add": "Add validations",
476
480
  "ruleImplementationRawForm.props.database": "Database",
477
481
  "ruleImplementationRawForm.props.database.placeholder": "Select database",
478
482
  "ruleImplementationRawForm.props.dataset": "Dataset",
@@ -512,6 +516,7 @@ export default {
512
516
  "ruleImplementations.events.action_restored": "Implementation restored",
513
517
  "ruleImplementations.events.action_updated": "Implementation updated",
514
518
  "ruleImplementations.events.action_versioned": "Implementation versioned",
519
+ "ruleImplementations.or": "OR",
515
520
  "ruleImplementations.props.business_concept": "Concept",
516
521
  "ruleImplementations.props.executable": "Executable",
517
522
  "ruleImplementations.props.executable.false": "Internal",
@@ -549,9 +554,10 @@ export default {
549
554
  "ruleImplementations.summary.headers.filters": "Filters",
550
555
  "ruleImplementations.summary.headers.implementation": "Rule Implementation",
551
556
  "ruleImplementations.summary.headers.population": "Population",
552
- "ruleImplementations.summary.headers.populations": "Populations",
557
+ "ruleImplementations.summary.headers.population.plural": "Populations",
553
558
  "ruleImplementations.summary.headers.segments": "Segments",
554
- "ruleImplementations.summary.headers.validations": "Validation",
559
+ "ruleImplementations.summary.headers.validations": "Validations",
560
+ "ruleImplementations.summary.headers.validations.plural": "Validations",
555
561
  "ruleImplementations.update.success.header.implementation_unchanged":
556
562
  "The implementation has not changed",
557
563
  "ruleImplementations.upload.failed.header":
@@ -79,9 +79,12 @@ export default {
79
79
  "implementations.execute.filtered": "{count} implementaciones a ejecutar",
80
80
  "implementations.header": "Implementaciones de calidad",
81
81
  "implementations.header.manage": "Gestión de Implementaciones",
82
+ "implementations.header.deprecated": "Implementaciones archivadas",
82
83
  "implementations.search.placeholder": "Buscar implementaciones...",
83
84
  "implementations.subheader":
84
85
  "Listado y detalle de implementaciones de calidad",
86
+ "implementations.subheader.deprecated":
87
+ "Listado de implementaciones de calidad archivadas",
85
88
  "implementations.subheader.manage":
86
89
  "Versiones de Implementaciones en Progreso",
87
90
  "implementationsStructures.delete.confirmation.content":
@@ -447,8 +450,6 @@ export default {
447
450
  "ruleImplementation.props.reference_dataset": "Datos de referencia",
448
451
  "ruleImplementation.props.reference_dataset.placeholder":
449
452
  "Buscar datos de referencia",
450
- "ruleImplementation.props.status.deprecated":
451
- "Esta Implementación está archivada",
452
453
  "ruleImplementation.props.structure": "Estructura",
453
454
  "ruleImplementation.props.structure.alias": "Alias",
454
455
  "ruleImplementation.props.structure.placeholder": "Buscar estructura",
@@ -470,6 +471,7 @@ export default {
470
471
  "ruleImplementation.summary.population": "Población",
471
472
  "ruleImplementation.summary.source": "Origen de datos",
472
473
  "ruleImplementation.summary.structure": "Estructura",
474
+ "ruleImplementation.summary.invalid_structure": "Estructura inválida",
473
475
  "ruleImplementation.summary.system": "Sistema",
474
476
  "ruleImplementation.summary.validations": "Validaciones",
475
477
  "ruleImplementation.summary.values": "Valores",
@@ -477,12 +479,14 @@ export default {
477
479
  "ruleImplementation.system.placeholder": "Seleccionar sistema",
478
480
  "ruleImplementation.table": "Tabla",
479
481
  "ruleImplementation.table.placeholder": "Seleccionar tabla",
482
+ "ruleImplementationForm.condition.add": "Añadir condición",
480
483
  "ruleImplementationForm.populations.add": "Añadir población",
481
484
  "ruleImplementationForm.step.dataset": "Datos",
482
485
  "ruleImplementationForm.step.information": "Información",
483
486
  "ruleImplementationForm.step.populations": "Poblaciones",
484
487
  "ruleImplementationForm.step.segments": "Segmentos",
485
488
  "ruleImplementationForm.step.validations": "Validaciones",
489
+ "ruleImplementationForm.validations.add": "Añadir validación",
486
490
  "ruleImplementationRawForm.props.database": "Base de datos",
487
491
  "ruleImplementationRawForm.props.database.placeholder":
488
492
  "Seleccionar base de datos",
@@ -528,6 +532,7 @@ export default {
528
532
  "ruleImplementations.events.action_restored": "Implementación restaurada",
529
533
  "ruleImplementations.events.action_updated": "Implementación actualizada",
530
534
  "ruleImplementations.events.action_versioned": "Implementación versionada",
535
+ "ruleImplementations.or": "OR",
531
536
  "ruleImplementations.props.business_concept": "Concepto",
532
537
  "ruleImplementations.props.executable": "Ejecutable",
533
538
  "ruleImplementations.props.executable.false": "Interna",
@@ -570,9 +575,10 @@ export default {
570
575
  "ruleImplementations.summary.headers.implementation":
571
576
  "Implementación de una Regla",
572
577
  "ruleImplementations.summary.headers.population": "Población",
573
- "ruleImplementations.summary.headers.populations": "Poblaciones",
578
+ "ruleImplementations.summary.headers.population.plural": "Poblaciones",
574
579
  "ruleImplementations.summary.headers.segments": "Segmentos",
575
580
  "ruleImplementations.summary.headers.validations": "Validaciones",
581
+ "ruleImplementations.summary.headers.validations.plural": "Validaciones",
576
582
  "ruleImplementations.update.success.header.implementation_unchanged":
577
583
  "La implementación no ha cambiado",
578
584
  "ruleImplementations.upload.failed.header":
@@ -39,7 +39,10 @@ const ruleImplementation = (state = initialState, { type, payload }) => {
39
39
  case fetchRuleImplementation.TRIGGER:
40
40
  return initialState;
41
41
  case fetchRuleImplementation.SUCCESS:
42
- return pickFields(payload.data);
42
+ return pickFields({
43
+ ...payload.data,
44
+ validations: payload.data.validation,
45
+ });
43
46
  case clearRuleImplementation.TRIGGER:
44
47
  return initialState;
45
48
  default: