@@ -18,76 +18,111 @@ Basic Usage
1818.. code-block :: python
1919
2020 from pydhis2 import get_client, DHIS2Config
21- from pydhis2.dqr import DQRMetrics
21+ from pydhis2.core.types import AnalyticsQuery
22+ from pydhis2.dqr.metrics import CompletenessMetrics, ConsistencyMetrics, TimelinessMetrics
2223
2324 AsyncDHIS2Client, _ = get_client()
2425 config = DHIS2Config()
2526
2627 async with AsyncDHIS2Client(config) as client:
2728 # Fetch analytics data
28- query = AnalyticsQuery(dx = [" ... " ], ou = " ... " , pe = " ... " )
29+ query = AnalyticsQuery(dx = [" indicator_id " ], ou = " org_unit_id " , pe = " 2023 " )
2930 df = await client.analytics.to_pandas(query)
3031
3132 # Run DQR analysis
32- dqr = DQRMetrics(df)
33- results = dqr.assess_all()
34- print (results)
33+ completeness = CompletenessMetrics()
34+ consistency = ConsistencyMetrics()
35+ timeliness = TimelinessMetrics()
36+
37+ completeness_results = completeness.calculate(df)
38+ consistency_results = consistency.calculate(df)
39+ timeliness_results = timeliness.calculate(df)
40+
41+ for result in completeness_results + consistency_results + timeliness_results:
42+ print (f " { result.metric_name} : { result.value:.2% } ( { result.status} ) " )
3543
3644 Completeness Metrics
3745--------------------
3846
3947.. code-block :: python
4048
41- dqr = DQRMetrics(df)
49+ from pydhis2. dqr.metrics import CompletenessMetrics
4250
43- # Reporting completeness
44- completeness = dqr.reporting_completeness()
45- print (f " Completeness: { completeness:.2% } " )
51+ completeness = CompletenessMetrics()
52+ results = completeness.calculate(df)
4653
47- # Missing data analysis
48- missing = dqr.missing_data_analysis()
49- print (missing)
54+ for result in results:
55+ print (f " { result.metric_name} : { result.value:.2% } " )
56+ print (f " Status: { result.status} " )
57+ print (f " Message: { result.message} " )
58+ print (f " Details: { result.details} " )
5059
5160 Consistency Metrics
5261-------------------
5362
5463.. code-block :: python
5564
56- # Outlier detection
57- outliers = dqr.detect_outliers(threshold = 3.0 )
58- print (f " Found { len (outliers)} outliers " )
65+ from pydhis2.dqr.metrics import ConsistencyMetrics
66+
67+ consistency = ConsistencyMetrics()
68+ results = consistency.calculate(df)
5969
60- # Variance analysis
61- variance = dqr.variance_analysis()
62- print (variance)
70+ for result in results:
71+ print (f " { result.metric_name} : { result.value:.2% } " )
72+ if result.metric_name == " outlier_detection" :
73+ print (f " Outliers detected: { result.details.get(' outlier_count' )} " )
6374
6475 Timeliness Metrics
6576------------------
6677
6778.. code-block :: python
6879
69- # Submission timeliness
70- timeliness = dqr.submission_timeliness()
71- print (f " On-time submissions: { timeliness:.2% } " )
80+ from pydhis2.dqr.metrics import TimelinessMetrics
81+
82+ timeliness = TimelinessMetrics()
83+ results = timeliness.calculate(df)
84+
85+ for result in results:
86+ print (f " { result.metric_name} : { result.value:.2% } " )
87+ print (f " Timely records: { result.details.get(' timely_records' )} / { result.details.get(' total_records' )} " )
7288
7389 Generating Reports
7490------------------
7591
76- HTML Report
77- ~~~~~~~~~~~
78-
79- .. code-block :: python
80-
81- dqr.generate_report(output = " dqr_report.html" , format = " html" )
82-
83- JSON Summary
84- ~~~~~~~~~~~~
92+ Collect All Results
93+ ~~~~~~~~~~~~~~~~~~~
8594
8695.. code-block :: python
8796
8897 import json
98+ from pydhis2.dqr.metrics import CompletenessMetrics, ConsistencyMetrics, TimelinessMetrics
99+
100+ # Calculate all metrics
101+ completeness = CompletenessMetrics()
102+ consistency = ConsistencyMetrics()
103+ timeliness = TimelinessMetrics()
104+
105+ all_results = (
106+ completeness.calculate(df) +
107+ consistency.calculate(df) +
108+ timeliness.calculate(df)
109+ )
110+
111+ # Convert to summary dict
112+ summary = {
113+ " metrics" : [
114+ {
115+ " name" : r.metric_name,
116+ " value" : r.value,
117+ " status" : r.status,
118+ " message" : r.message,
119+ " details" : r.details
120+ }
121+ for r in all_results
122+ ]
123+ }
89124
90- summary = dqr.summary()
125+ # Save to JSON
91126 with open (" dqr_summary.json" , " w" ) as f:
92127 json.dump(summary, f, indent = 2 )
93128
0 commit comments