33import pandas as pd
44from datetime import datetime
55from enum import IntEnum
6+ from utils .data_validation import DataValidation
67
78
89class SqlQueryValues (IntEnum ):
@@ -29,21 +30,30 @@ def get_kit_id_from_db(
2930 kit_id_df (pd.DataFrame): A pandas DataFrame containing the result of the query
3031 """
3132 logging .info ("Retrieving useable test kit ids" )
32- kit_id_df = OracleDB ().execute_query (
33- f"""select tk.kitid, tk.screening_subject_id, sst.subject_nhs_number
33+ query = """select tk.kitid, tk.screening_subject_id, sst.subject_nhs_number
3434 from tk_items_t tk
3535 inner join ep_subject_episode_t se on se.screening_subject_id = tk.screening_subject_id
3636 inner join screening_subject_t sst on (sst.screening_subject_id = tk.screening_subject_id)
3737 inner join sd_contact_t sdc on (sdc.nhs_number = sst.subject_nhs_number)
38- where tk.tk_type_id = { tk_type_id }
38+ where tk.tk_type_id = : tk_type_id
3939 and tk.logged_in_flag = 'N'
40- and sdc.hub_id = { hub_id }
40+ and sdc.hub_id = : hub_id
4141 and device_id is null
4242 and tk.invalidated_date is null
43- and se.latest_event_status_id in ({ SqlQueryValues . S10_EVENT_STATUS } , { SqlQueryValues . S19_EVENT_STATUS } )
43+ and se.latest_event_status_id in (:s10_event_status, :s19_event_status )
4444 order by tk.kitid DESC
45- fetch first { no_of_kits_to_retrieve } rows only"""
46- )
45+ fetch first :subjects_to_retrieve rows only"""
46+
47+ params = {
48+ "s10_event_status" : SqlQueryValues .S10_EVENT_STATUS ,
49+ "s19_event_status" : SqlQueryValues .S19_EVENT_STATUS ,
50+ "tk_type_id" : tk_type_id ,
51+ "hub_id" : hub_id ,
52+ "subjects_to_retrieve" : no_of_kits_to_retrieve ,
53+ }
54+
55+ kit_id_df = DataValidation ().check_for_duplicate_records (query , params )
56+
4757 return kit_id_df
4858
4959
@@ -83,22 +93,29 @@ def get_kit_id_logged_from_db(smokescreen_properties: dict) -> pd.DataFrame:
8393 Returns:
8494 return kit_id_df (pd.DataFrame): A pandas DataFrame containing the result of the query
8595 """
86- kit_id_df = OracleDB ().execute_query (
87- f"""SELECT tk.kitid,tk.device_id,tk.screening_subject_id
96+ query = """SELECT tk.kitid,tk.device_id,tk.screening_subject_id
8897 FROM tk_items_t tk
8998 INNER JOIN kit_queue kq ON kq.device_id = tk.device_id
9099 INNER JOIN ep_subject_episode_t se ON se.screening_subject_id = tk.screening_subject_id
91100 WHERE tk.logged_in_flag = 'Y'
92101 AND kq.test_kit_status IN ('LOGGED', 'POSTED')
93- AND se.episode_status_id = { SqlQueryValues . OPEN_EPISODE_STATUS_ID }
102+ AND se.episode_status_id = :open_episode_status_id
94103 AND tk.tk_type_id = 2
95- AND se.latest_event_status_id = { SqlQueryValues . S43_EVENT_STATUS }
96- AND tk.logged_in_at = { smokescreen_properties [ "c3_fit_kit_results_test_org_id" ] }
104+ AND se.latest_event_status_id = :s43_event_status
105+ AND tk.logged_in_at = :logged_in_at
97106 AND tk.reading_flag = 'N'
98107 AND tk.test_results IS NULL
99- fetch first { smokescreen_properties [ "c3_total_fit_kits_to_retrieve" ] } rows only
108+ fetch first :subjects_to_retrieve rows only
100109 """
101- )
110+
111+ params = {
112+ "s43_event_status" : SqlQueryValues .S43_EVENT_STATUS ,
113+ "logged_in_at" : smokescreen_properties ["c3_fit_kit_results_test_org_id" ],
114+ "open_episode_status_id" : SqlQueryValues .OPEN_EPISODE_STATUS_ID ,
115+ "subjects_to_retrieve" : smokescreen_properties ["c3_total_fit_kits_to_retrieve" ],
116+ }
117+
118+ kit_id_df = DataValidation ().check_for_duplicate_records (query , params )
102119
103120 return kit_id_df
104121
@@ -263,25 +280,31 @@ def get_subjects_for_appointments(subjects_to_retrieve: int) -> pd.DataFrame:
263280 Returns:
264281 subjects_df (pd.DataFrame): A pandas DataFrame containing the result of the query
265282 """
266- subjects_df = OracleDB ().execute_query (
267- f"""
268- select tk.kitid, ss.subject_nhs_number, se.screening_subject_id
283+
284+ query = """select tk.kitid, ss.subject_nhs_number, se.screening_subject_id
269285 from tk_items_t tk
270286 inner join ep_subject_episode_t se on se.screening_subject_id = tk.screening_subject_id
271287 inner join screening_subject_t ss on ss.screening_subject_id = se.screening_subject_id
272288 inner join sd_contact_t c on c.nhs_number = ss.subject_nhs_number
273- where se.latest_event_status_id = { SqlQueryValues . A8_EVENT_STATUS }
289+ where se.latest_event_status_id = :a8_event_status
274290 and tk.logged_in_flag = 'Y'
275- and se.episode_status_id = { SqlQueryValues . OPEN_EPISODE_STATUS_ID }
291+ and se.episode_status_id = :open_episode_status_id
276292 and ss.screening_status_id != 4008
277293 and tk.logged_in_at = 23159
278294 and c.hub_id = 23159
279295 and tk.tk_type_id = 2
280296 and tk.datestamp > add_months(sysdate,-24)
281297 order by ss.subject_nhs_number desc
282- fetch first { subjects_to_retrieve } rows only
298+ fetch first : subjects_to_retrieve rows only
283299 """
284- )
300+ params = {
301+ "a8_event_status" : SqlQueryValues .A8_EVENT_STATUS ,
302+ "open_episode_status_id" : SqlQueryValues .OPEN_EPISODE_STATUS_ID ,
303+ "subjects_to_retrieve" : subjects_to_retrieve ,
304+ }
305+
306+ subjects_df = DataValidation ().check_for_duplicate_records (query , params )
307+
285308 return subjects_df
286309
287310
@@ -297,9 +320,8 @@ def get_subjects_with_booked_appointments(subjects_to_retrieve: int) -> pd.DataF
297320 Returns:
298321 subjects_df (pd.DataFrame): A pandas DataFrame containing the result of the query
299322 """
300- subjects_df = OracleDB ().execute_query (
301- f"""
302- select a.appointment_date, s.subject_nhs_number, c.person_family_name, c.person_given_name
323+
324+ query = """select a.appointment_date, s.subject_nhs_number, c.person_family_name, c.person_given_name
303325 from
304326 (select count(*), ds.screening_subject_id
305327 from
@@ -318,10 +340,11 @@ def get_subjects_with_booked_appointments(subjects_to_retrieve: int) -> pd.DataF
318340 inner join screening_subject_t s on s.screening_subject_id = se.screening_subject_id
319341 inner join sd_contact_t c on c.nhs_number = s.subject_nhs_number
320342 inner join appointment_t a on se.subject_epis_id = a.subject_epis_id
321- where se.latest_event_status_id = { SqlQueryValues . POSITIVE_APPOINTMENT_BOOKED }
343+ where se.latest_event_status_id = :positive_appointment_booked
322344 and tk.logged_in_flag = 'Y'
323- and se.episode_status_id = { SqlQueryValues . OPEN_EPISODE_STATUS_ID }
345+ and se.episode_status_id = :open_episode_status_id
324346 and tk.logged_in_at = 23159
347+ and tk.algorithm_sc_id = 23162
325348 --and a.appointment_date > sysdate-27
326349 and a.cancel_date is null
327350 and a.attend_info_id is null and a.attend_date is null
@@ -330,7 +353,15 @@ def get_subjects_with_booked_appointments(subjects_to_retrieve: int) -> pd.DataF
330353 and tk.tk_type_id = 2
331354 --and tk.datestamp > add_months(sysdate,-24)
332355 order by a.appointment_date desc
333- fetch first { subjects_to_retrieve } rows only
356+ fetch first : subjects_to_retrieve rows only
334357 """
335- )
358+
359+ params = {
360+ "positive_appointment_booked" : SqlQueryValues .POSITIVE_APPOINTMENT_BOOKED ,
361+ "open_episode_status_id" : SqlQueryValues .OPEN_EPISODE_STATUS_ID ,
362+ "subjects_to_retrieve" : subjects_to_retrieve ,
363+ }
364+
365+ subjects_df = DataValidation ().check_for_duplicate_records (query , params )
366+
336367 return subjects_df
0 commit comments