Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions cdisc_rules_engine/services/reporting/sdtm_report_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,13 @@ def _generate_error_details(
if result.get("errors", []) and result.get("executionStatus") == "success":
variables = result.get("variables", [])
for error in result.get("errors"):
values = []
for variable in variables:
raw_value = error.get("value", {}).get(variable)
if raw_value is None:
values.append(None)
else:
values.append(str(raw_value))
error_item = {
"core_id": validation_result.id,
"message": result.get("message"),
Expand All @@ -274,16 +281,9 @@ def _generate_error_details(
"USUBJID": error.get("USUBJID", ""),
"row": error.get("row", ""),
"SEQ": error.get("SEQ", ""),
"variables": variables,
"values": self.process_values(values),
}
values = []
for variable in variables:
raw_value = error.get("value", {}).get(variable)
if raw_value is None:
values.append(None)
else:
values.append(str(raw_value))
error_item["variables"] = variables
error_item["values"] = self.process_values(values)
errors.append(error_item)
return errors

Expand Down
22 changes: 12 additions & 10 deletions cdisc_rules_engine/services/reporting/usdm_report_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ def get_summary_data(self) -> list[dict]:
return [
"Entity",
"CORE-ID",
"CDISC RuleID",
"Message",
"Issues",
"Explanation"
Expand All @@ -128,6 +129,7 @@ def get_summary_data(self) -> list[dict]:
"entity": result.get("entity")
or (result.get("dataset", "") or "").replace(".json", ""),
"core_id": validation_result.id,
"cdisc_rule_id": validation_result.cdisc_rule_id,
"message": result.get("message"),
"issues": len(result.get("errors")),
}
Expand Down Expand Up @@ -164,7 +166,7 @@ def _generate_error_details(
"Entity",
"Instance ID",
"Path",
"Variable(s)",
"Attributes",
"Value(s)"
]
"""
Expand All @@ -173,6 +175,13 @@ def _generate_error_details(
if result.get("errors", []) and result.get("executionStatus") == "success":
variables = result.get("variables", [])
for error in result.get("errors"):
values = []
for variable in variables:
raw_value = error.get("value", {}).get(variable)
if raw_value is None:
values.append(None)
else:
values.append(str(raw_value))
error_item = {
"core_id": validation_result.id,
"cdisc_rule_id": validation_result.cdisc_rule_id,
Expand All @@ -182,16 +191,9 @@ def _generate_error_details(
or error.get("dataset", "").replace(".json", ""),
"instance_id": error.get("instance_id"),
"path": error.get("path"),
"attributes": variables,
"values": self.process_values(values),
}
values = []
for variable in variables:
raw_value = error.get("value", {}).get(variable)
if raw_value is None:
values.append(None)
else:
values.append(str(raw_value))
error_item["variables"] = variables
error_item["values"] = self.process_values(values)
errors.append(error_item)
return errors

Expand Down
21 changes: 12 additions & 9 deletions cdisc_rules_engine/utilities/jsonata_processor.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,23 +55,26 @@ def execute_jsonata_rule(
f"\n Expected a list, but got: {results}"
)
for result in results:
entity = (
result.get("entity")
or result.get("dataset")
or result.get("instanceType")
)
error_entity = ValidationErrorEntity(
value=result,
dataset=result.get("dataset") or "",
dataset=entity,
row=result.get("row"),
USUBJID=result.get("USUBJID"),
SEQ=result.get("SEQ"),
entity=result.get("entity")
# For backwards compatibility. To be removed in the future:
or result.get("dataset") or result.get("instanceType"),
entity=entity,
instance_id=result.get("instance_id") or result.get("id"),
path=result.get("path") or result.get("_path"),
)
errors[result.get("dataset")].append(error_entity)
errors[entity].append(error_entity)
validation_error_container = [
ValidationErrorContainer(
dataset=dataset,
domain=dataset,
dataset=entity,
domain=entity,
targets=rule.get("output_variables"),
errors=error,
message=next(iter(rule.get("actions", [])), {})
Expand All @@ -82,9 +85,9 @@ def execute_jsonata_rule(
if results
else ExecutionStatus.EXECUTION_ERROR.value
),
entity=dataset,
entity=entity,
).to_representation()
for dataset, error in errors.items()
for entity, error in errors.items()
]
return validation_error_container

Expand Down
Binary file modified resources/templates/usdm-report-template.xlsx
Binary file not shown.
8 changes: 5 additions & 3 deletions tests/unit/test_services/test_reporting/test_usdm_report.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ def test_get_detailed_data(mock_validation_results):
"entity": "",
"instance_id": None,
"path": None,
"variables": ["AESTDY", "DOMAIN"],
"attributes": ["AESTDY", "DOMAIN"],
"values": ["test", "test"],
},
{
Expand All @@ -61,7 +61,7 @@ def test_get_detailed_data(mock_validation_results):
"entity": "",
"instance_id": None,
"path": None,
"variables": ["AESTDY", "DOMAIN"],
"attributes": ["AESTDY", "DOMAIN"],
"values": ["test", "test"],
},
{
Expand All @@ -72,7 +72,7 @@ def test_get_detailed_data(mock_validation_results):
"entity": "",
"instance_id": None,
"path": None,
"variables": ["TTVAR1", "TTVAR2"],
"attributes": ["TTVAR1", "TTVAR2"],
"values": ["test", "test"],
},
]
Expand All @@ -98,12 +98,14 @@ def test_get_summary_data(mock_validation_results):
{
"entity": "",
"core_id": mock_validation_results[0].id,
"cdisc_rule_id": mock_validation_results[0].cdisc_rule_id,
"message": "AESTDY and DOMAIN are equal to test",
"issues": 2,
},
{
"entity": "",
"core_id": mock_validation_results[1].id,
"cdisc_rule_id": mock_validation_results[1].cdisc_rule_id,
"message": "TTVARs are wrong",
"issues": 1,
},
Expand Down
2 changes: 0 additions & 2 deletions tests/unit/test_utilities/test_jsonata_processor.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ class TestJSONataProcessor(TestCase):
"errors": [
{
"value": {"row": "", "A": "same value 1", "B": "same value 1"},
"dataset": "",
"row": "",
},
{
Expand All @@ -67,7 +66,6 @@ class TestJSONataProcessor(TestCase):
"A": "same value 2",
"B": "same value 2",
},
"dataset": "",
"row": "/C/C",
},
],
Expand Down
Loading