-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_integration_functionality.py
More file actions
127 lines (106 loc) · 4.81 KB
/
Copy pathtest_integration_functionality.py
File metadata and controls
127 lines (106 loc) · 4.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#!/usr/bin/env python3
"""
Test script to verify multi-source data integration functionality.
"""
from datetime import datetime, timedelta
from src.data.integration import MultiSourceDataIntegrator, SourceMetadata
from src.data.enums import DataSource, ConflictResolutionStrategy
from src.data.models import PatientData, Demographics, VitalsData, Gender, BloodType
def test_multi_source_integration():
"""Test the multi-source data integration functionality."""
# Create integrator
integrator = MultiSourceDataIntegrator(
conflict_strategy=ConflictResolutionStrategy.PRIORITY_BASED
)
# Register sources
fhir_source = SourceMetadata(
source_id="fhir_system_1",
source_type=DataSource.FHIR_R4,
priority=80,
reliability_score=0.9,
last_updated=datetime.now() - timedelta(minutes=5)
)
manual_source = SourceMetadata(
source_id="manual_entry_1",
source_type=DataSource.MANUAL_ENTRY,
priority=60,
reliability_score=0.8,
last_updated=datetime.now() - timedelta(minutes=2)
)
integrator.register_source(fhir_source)
integrator.register_source(manual_source)
# Create patient data from different sources
patient_data_fhir = PatientData(
patient_id="patient_123",
demographics=Demographics(
age=45,
gender=Gender.MALE,
blood_type=BloodType.A_POSITIVE,
weight_kg=75.0
),
vitals=VitalsData(
heart_rate_bpm=72,
systolic_bp_mmhg=120,
diastolic_bp_mmhg=80,
temperature_celsius=36.5,
recorded_at=datetime.now() - timedelta(minutes=5),
source="FHIR System"
)
)
patient_data_manual = PatientData(
patient_id="patient_123",
demographics=Demographics(
age=45,
gender=Gender.MALE,
blood_type=BloodType.A_POSITIVE,
height_cm=180.0 # Additional data from manual entry
),
vitals=VitalsData(
heart_rate_bpm=75, # Slightly different value - conflict
systolic_bp_mmhg=125, # Slightly different value - conflict
diastolic_bp_mmhg=82, # Slightly different value - conflict
oxygen_saturation_percent=98.0, # Additional data
recorded_at=datetime.now() - timedelta(minutes=2),
source="Manual Entry"
)
)
# Integrate data
patient_data_list = [
(patient_data_fhir, "fhir_system_1"),
(patient_data_manual, "manual_entry_1")
]
integrated_data, conflicts, consistency_issues = integrator.integrate_patient_data(patient_data_list)
# Verify integration results
print("=== Multi-Source Data Integration Test Results ===")
print(f"Patient ID: {integrated_data.patient_id}")
print(f"Conflicts found: {len(conflicts)}")
print(f"Consistency issues: {len(consistency_issues)}")
# Check that conflicts were resolved using priority-based strategy
# FHIR should win over manual entry for vitals
print(f"Heart rate (should be from FHIR): {integrated_data.vitals.heart_rate_bpm}")
print(f"Systolic BP (should be from FHIR): {integrated_data.vitals.systolic_bp_mmhg}")
# Check that non-conflicting data was merged
print(f"Weight from FHIR: {integrated_data.demographics.weight_kg}")
print(f"Height from manual: {integrated_data.demographics.height_cm}")
print(f"Oxygen saturation from manual: {integrated_data.vitals.oxygen_saturation_percent}")
# Check source attribution
attribution = integrator.get_source_attribution("patient_123")
print(f"Sources used: {len(attribution['sources_used'])}")
print(f"Conflicts resolved: {attribution['conflicts_resolved']}")
print("\n=== Test Results ===")
# Verify priority-based resolution worked
assert integrated_data.vitals.heart_rate_bpm == 72, "FHIR data should win for heart rate"
assert integrated_data.vitals.systolic_bp_mmhg == 120, "FHIR data should win for systolic BP"
# Verify data merging worked
assert integrated_data.demographics.weight_kg == 75.0, "Weight should be preserved from FHIR"
assert integrated_data.demographics.height_cm == 180.0, "Height should be added from manual"
assert integrated_data.vitals.oxygen_saturation_percent == 98.0, "O2 sat should be added from manual"
# Verify conflicts were detected
assert len(conflicts) > 0, "Conflicts should have been detected"
print("✅ All integration tests passed!")
print("✅ Conflict resolution engine working correctly")
print("✅ Data consistency validation working correctly")
print("✅ Source attribution and timestamp tracking working correctly")
return True
if __name__ == "__main__":
test_multi_source_integration()