diff --git a/reporting-pipeline-service/src/main/resources/db/changelog/migrations/v7.13/rdb/rdb.changelog-7.13.yaml b/reporting-pipeline-service/src/main/resources/db/changelog/migrations/v7.13/rdb/rdb.changelog-7.13.yaml index 7f6ae8e39..9886f8fb2 100644 --- a/reporting-pipeline-service/src/main/resources/db/changelog/migrations/v7.13/rdb/rdb.changelog-7.13.yaml +++ b/reporting-pipeline-service/src/main/resources/db/changelog/migrations/v7.13/rdb/rdb.changelog-7.13.yaml @@ -3321,3 +3321,11 @@ databaseChangeLog: path: db/changelog/migrations/v7.13/rdb/routines/371-sp_lab100_cleanup.sql splitStatements: true endDelimiter: GO + - changeSet: + id: app-926-add_ix_event_metric_event_uid + author: liquibase + runOnChange: false + changes: + - sqlFile: + path: db/changelog/migrations/v7.13/rdb/tables/265-add_ix_event_metric_event_uid-001.sql + splitStatements: false diff --git a/reporting-pipeline-service/src/main/resources/db/changelog/migrations/v7.13/rdb/routines/048-sp_morbidity_report_datamart_postprocessing-001.sql b/reporting-pipeline-service/src/main/resources/db/changelog/migrations/v7.13/rdb/routines/048-sp_morbidity_report_datamart_postprocessing-001.sql index 39930e524..1f5782834 100644 --- a/reporting-pipeline-service/src/main/resources/db/changelog/migrations/v7.13/rdb/routines/048-sp_morbidity_report_datamart_postprocessing-001.sql +++ b/reporting-pipeline-service/src/main/resources/db/changelog/migrations/v7.13/rdb/routines/048-sp_morbidity_report_datamart_postprocessing-001.sql @@ -73,6 +73,95 @@ BEGIN SET @PROC_STEP_NO = @PROC_STEP_NO + 1; SET @PROC_STEP_NAME = ' GENERATING #MORB_EVENT_INIT'; + /* + Parse each UID param ONCE into a typed bigint temp table with a clustered PK, + then probe with EXISTS. Replaces 7 per-row STRING_SPLIT re-parses / implicit converts. + */ + -- uid_obs + IF OBJECT_ID('tempdb..#uid_obs') IS NOT NULL DROP TABLE #uid_obs; + + SELECT DISTINCT + u = TRY_CONVERT(numeric(18,0), NULLIF(TRIM(ss.value), '')) + INTO #uid_obs + FROM STRING_SPLIT(@obs_uids, ',') ss + WHERE TRY_CONVERT(numeric(18,0), NULLIF(TRIM(ss.value), '')) IS NOT NULL; + + -- we store this as numeric(18,0) because that's how mr.MORB_RPT_UID is stored + -- and we're joining on that later + ALTER TABLE #uid_obs ALTER COLUMN u numeric(18,0) NOT NULL; + + ALTER TABLE #uid_obs ADD PRIMARY KEY CLUSTERED (u); + -- + + IF OBJECT_ID('tempdb..#uid_pat') IS NOT NULL DROP TABLE #uid_pat; + SELECT DISTINCT u = ISNULL(CAST(ss.value AS bigint), 0) + INTO #uid_pat + FROM STRING_SPLIT(@pat_uids, ',') ss + ; + ALTER TABLE #uid_pat ADD PRIMARY KEY CLUSTERED (u); + + IF OBJECT_ID('tempdb..#uid_prov') IS NOT NULL DROP TABLE #uid_prov; + SELECT DISTINCT u = ISNULL(CAST(ss.value AS bigint), 0) + INTO #uid_prov + FROM STRING_SPLIT(@prov_uids, ',') ss + ; + ALTER TABLE #uid_prov ADD PRIMARY KEY CLUSTERED (u); + + IF OBJECT_ID('tempdb..#uid_org') IS NOT NULL DROP TABLE #uid_org; + SELECT DISTINCT u = ISNULL(CAST(ss.value AS bigint), 0) + INTO #uid_org + FROM STRING_SPLIT(@org_uids, ',') ss + ; + ALTER TABLE #uid_org ADD PRIMARY KEY CLUSTERED (u); + + IF OBJECT_ID('tempdb..#uid_inv') IS NOT NULL DROP TABLE #uid_inv; + SELECT DISTINCT u = ISNULL(CAST(ss.value AS bigint), 0) + INTO #uid_inv + FROM STRING_SPLIT(@inv_uids, ',') ss + ; + ALTER TABLE #uid_inv ADD PRIMARY KEY CLUSTERED (u); + + /* + Candidate pre-filter (equivalence-safe batch scoping). + Collect a SUPERSET of MORB_RPT_KEYs that could pass the #MORB_EVENT_INIT + filter, via seek-driven UNION branches each driven by a small #uid_* temp. + This lets the main projection seek the ~250 candidate reports instead of + scanning every ACTIVE report. The original WHERE below is left UNCHANGED, + so it still decides per (MR,MRE) row -> output is byte-identical even when + a report has multiple MRE rows (some matching, some not). #cand may contain + keys the final WHERE then drops (e.g. inactive); that's fine, it's a superset. + */ + IF OBJECT_ID('tempdb..#cand') IS NOT NULL DROP TABLE #cand; + SELECT MORB_RPT_KEY INTO #cand FROM ( + SELECT MR.MORB_RPT_KEY FROM dbo.MORBIDITY_REPORT MR WITH (NOLOCK) + WHERE EXISTS (SELECT 1 FROM #uid_obs z WHERE z.u = MR.MORB_RPT_UID) + UNION + SELECT MRE.MORB_RPT_KEY FROM dbo.MORBIDITY_REPORT_EVENT MRE WITH (NOLOCK) + JOIN dbo.INVESTIGATION inv WITH (NOLOCK) ON inv.INVESTIGATION_KEY = MRE.INVESTIGATION_KEY + WHERE EXISTS (SELECT 1 FROM #uid_inv z WHERE z.u = inv.CASE_UID) + UNION + SELECT MRE.MORB_RPT_KEY FROM dbo.MORBIDITY_REPORT_EVENT MRE WITH (NOLOCK) + JOIN dbo.D_PATIENT pat WITH (NOLOCK) ON pat.PATIENT_KEY = MRE.PATIENT_KEY + WHERE EXISTS (SELECT 1 FROM #uid_pat z WHERE z.u = pat.PATIENT_UID) + UNION + SELECT MRE.MORB_RPT_KEY FROM dbo.MORBIDITY_REPORT_EVENT MRE WITH (NOLOCK) + JOIN dbo.D_PROVIDER prov WITH (NOLOCK) ON prov.PROVIDER_KEY = MRE.PHYSICIAN_KEY + WHERE EXISTS (SELECT 1 FROM #uid_prov z WHERE z.u = prov.PROVIDER_UID) + UNION + SELECT MRE.MORB_RPT_KEY FROM dbo.MORBIDITY_REPORT_EVENT MRE WITH (NOLOCK) + JOIN dbo.D_PROVIDER rep WITH (NOLOCK) ON rep.PROVIDER_KEY = MRE.REPORTER_KEY + WHERE EXISTS (SELECT 1 FROM #uid_prov z WHERE z.u = rep.PROVIDER_UID) + UNION + SELECT MRE.MORB_RPT_KEY FROM dbo.MORBIDITY_REPORT_EVENT MRE WITH (NOLOCK) + JOIN dbo.D_ORGANIZATION o WITH (NOLOCK) ON o.ORGANIZATION_KEY = MRE.MORB_RPT_SRC_ORG_KEY + WHERE EXISTS (SELECT 1 FROM #uid_org z WHERE z.u = o.ORGANIZATION_UID) + UNION + SELECT MRE.MORB_RPT_KEY FROM dbo.MORBIDITY_REPORT_EVENT MRE WITH (NOLOCK) + JOIN dbo.D_ORGANIZATION h WITH (NOLOCK) ON h.ORGANIZATION_KEY = MRE.HSPTL_KEY + WHERE EXISTS (SELECT 1 FROM #uid_org z WHERE z.u = h.ORGANIZATION_UID) + ) q; + ALTER TABLE #cand ADD PRIMARY KEY CLUSTERED (MORB_RPT_KEY); + SELECT MR.MORB_RPT_KEY AS MORBIDITY_REPORT_KEY, MRE.PATIENT_KEY AS PERSON_KEY, @@ -195,6 +284,8 @@ BEGIN IIF(MRD.MORBIDITY_REPORT_KEY IS NULL, 'I', 'U') AS DML_IND INTO #MORB_EVENT_INIT FROM dbo.MORBIDITY_REPORT MR WITH (NOLOCK) + INNER JOIN #cand cnd + ON cnd.MORB_RPT_KEY = MR.MORB_RPT_KEY LEFT JOIN dbo.MORBIDITY_REPORT_EVENT MRE WITH (NOLOCK) ON MR.MORB_RPT_KEY = MRE.MORB_RPT_KEY LEFT JOIN dbo.MORBIDITY_REPORT_DATAMART MRD WITH (NOLOCK) @@ -214,19 +305,19 @@ BEGIN LEFT JOIN dbo.EVENT_METRIC EM WITH (NOLOCK) ON MR.MORB_RPT_UID = EM.EVENT_UID WHERE - (inv.CASE_UID IN (SELECT value FROM STRING_SPLIT(@inv_uids, ',')) + ( EXISTS (SELECT 1 FROM #uid_inv z WHERE z.u = inv.CASE_UID) OR - pat.PATIENT_UID IN (SELECT value FROM STRING_SPLIT(@pat_uids, ',')) + EXISTS (SELECT 1 FROM #uid_pat z WHERE z.u = pat.PATIENT_UID) OR - prov.PROVIDER_UID IN (SELECT value FROM STRING_SPLIT(@prov_uids, ',')) + EXISTS (SELECT 1 FROM #uid_prov z WHERE z.u = prov.PROVIDER_UID) OR - rep.PROVIDER_UID IN (SELECT value FROM STRING_SPLIT(@prov_uids, ',')) + EXISTS (SELECT 1 FROM #uid_prov z WHERE z.u = rep.PROVIDER_UID) OR - rep_fac.ORGANIZATION_UID IN (SELECT value FROM STRING_SPLIT(@org_uids, ',')) + EXISTS (SELECT 1 FROM #uid_org z WHERE z.u = rep_fac.ORGANIZATION_UID) OR - hsptl.ORGANIZATION_UID IN (SELECT value FROM STRING_SPLIT(@org_uids, ',')) + EXISTS (SELECT 1 FROM #uid_org z WHERE z.u = hsptl.ORGANIZATION_UID) OR - CAST(mr.MORB_RPT_UID AS bigint) IN (SELECT value FROM STRING_SPLIT(@obs_uids, ',')) + EXISTS (SELECT 1 FROM #uid_obs z WHERE z.u = mr.MORB_RPT_UID) ) AND MR.MORB_RPT_KEY <> 1 AND MR.RECORD_STATUS_CD = 'ACTIVE'; @@ -253,7 +344,7 @@ BEGIN INTO #INACTIVE_MORB FROM dbo.MORBIDITY_REPORT MR WITH (NOLOCK) WHERE - CAST(MR.MORB_RPT_UID AS bigint) IN (SELECT value FROM STRING_SPLIT(@obs_uids, ',')) + EXISTS (SELECT 1 FROM #uid_obs z WHERE z.u = MR.MORB_RPT_UID) AND MR.RECORD_STATUS_CD = 'INACTIVE'; if @debug = 'true' @@ -280,6 +371,9 @@ BEGIN dbo.LAB_TEST LT WITH (NOLOCK) ON LTR.LAB_TEST_KEY = LT.LAB_TEST_KEY WHERE M.MORBIDITY_REPORT_KEY != 1 AND M.RECORD_STATUS_CD = 'ACTIVE'; + CREATE NONCLUSTERED INDEX IX_MORB_TO_LAB_KEYS_LAB_RPT_LOCAL_ID + ON #MORB_TO_LAB_KEYS (LAB_RPT_LOCAL_ID); + if @debug = 'true' SELECT @Proc_Step_Name, * from #MORB_TO_LAB_KEYS; @@ -331,6 +425,9 @@ BEGIN on m.LAB_RPT_LOCAL_ID = lt.LAB_RPT_LOCAL_ID WHERE LT.LAB_TEST_TYPE = 'Result'; + CREATE NONCLUSTERED INDEX IX_MORB_LAB_RESULTS_KEY_ROWNUM + ON #MORB_LAB_RESULTS (MORBIDITY_REPORT_KEY, row_num); + if @debug = 'true' SELECT @Proc_Step_Name, * from #MORB_LAB_RESULTS; @@ -416,6 +513,9 @@ BEGIN INNER JOIN dbo.TREATMENT T WITH (NOLOCK) ON TE.TREATMENT_KEY = T.TREATMENT_KEY INNER JOIN dbo.RDB_DATE RD WITH (NOLOCK) ON TE.TREATMENT_DT_KEY = RD.DATE_KEY; + CREATE NONCLUSTERED INDEX IX_MORB_TREATMENTS_KEY_ROWNUM + ON #MORB_TREATMENTS (MORBIDITY_REPORT_KEY, row_num); + if @debug = 'true' SELECT @Proc_Step_Name, * from #MORB_TREATMENTS; @@ -645,7 +745,8 @@ BEGIN LEFT JOIN dbo.RDB_DATE d2 WITH (NOLOCK) ON src.ILLNESS_ONSET_DT_KEY = d2.DATE_KEY LEFT JOIN dbo.RDB_DATE d3 WITH (NOLOCK) - ON src.HSPTL_DISCHARGE_DT_KEY = d3.DATE_KEY; + ON src.HSPTL_DISCHARGE_DT_KEY = d3.DATE_KEY + OPTION (MAXDOP 1); if @debug = 'true' SELECT @Proc_Step_Name, * from #MORB_EVENT_FINAL; @@ -820,7 +921,7 @@ BEGIN tgt.MORB_REPORT_LAST_UPDATED_BY = src.MORB_REPORT_LAST_UPDATED_BY, tgt.EXTERNAL_IND = src.EXTERNAL_IND FROM #MORB_EVENT_FINAL src - LEFT JOIN dbo.MORBIDITY_REPORT_DATAMART tgt + INNER JOIN dbo.MORBIDITY_REPORT_DATAMART tgt ON src.MORBIDITY_REPORT_KEY = tgt.MORBIDITY_REPORT_KEY WHERE src.DML_IND = 'U'; diff --git a/reporting-pipeline-service/src/main/resources/db/changelog/migrations/v7.13/rdb/tables/265-add_ix_event_metric_event_uid-001.sql b/reporting-pipeline-service/src/main/resources/db/changelog/migrations/v7.13/rdb/tables/265-add_ix_event_metric_event_uid-001.sql new file mode 100644 index 000000000..4e4902b36 --- /dev/null +++ b/reporting-pipeline-service/src/main/resources/db/changelog/migrations/v7.13/rdb/tables/265-add_ix_event_metric_event_uid-001.sql @@ -0,0 +1,15 @@ +-- APP-926: covering index on EVENT_METRIC(EVENT_UID). +-- sp_morbidity_report_datamart_postprocessing builds #MORB_EVENT_INIT with +-- LEFT JOIN dbo.EVENT_METRIC EM ON MR.MORB_RPT_UID = EM.EVENT_UID +-- but the clustered PK is (EVENT_TYPE, EVENT_UID), so a join on EVENT_UID alone cannot seek and +-- degrades to a full scan of EVENT_METRIC. This covering +-- index turns that scan into a seek (the plan's own missing-index hint, 32.7% impact). Idempotent. +IF NOT EXISTS ( + SELECT 1 FROM sys.indexes + WHERE name = 'IX_EVENT_METRIC_EVENT_UID' AND object_id = OBJECT_ID('dbo.EVENT_METRIC') +) +BEGIN + CREATE NONCLUSTERED INDEX IX_EVENT_METRIC_EVENT_UID + ON dbo.EVENT_METRIC (EVENT_UID) + INCLUDE (PROG_AREA_DESC_TXT, ADD_TIME, ADD_USER_ID, LAST_CHG_TIME, LAST_CHG_USER_ID, ADD_USER_NAME, LAST_CHG_USER_NAME); +END diff --git a/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_empty/expected.json b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_empty/expected.json new file mode 100644 index 000000000..4b6413a19 --- /dev/null +++ b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_empty/expected.json @@ -0,0 +1,7 @@ +{ + "0": [ + { + "QUALIFYING_ROWS": 0 + } + ] +} diff --git a/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_empty/query.sql b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_empty/query.sql new file mode 100644 index 000000000..53d27088a --- /dev/null +++ b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_empty/query.sql @@ -0,0 +1,8 @@ +-- Empty params must produce no datamart rows in this case's key range. +-- A COUNT is used instead of a bare row SELECT because the framework requires the +-- query to return at least one row, so the assertion is that the count equals 0. +-- NOTE keep query.sql comments free of the statement separator character, since the +-- QueryRunner splits the file on that character before it strips comment lines. +SELECT COUNT(*) AS QUALIFYING_ROWS +FROM RDB_MODERN.dbo.MORBIDITY_REPORT_DATAMART +WHERE MORBIDITY_REPORT_KEY BETWEEN 9268000 AND 9268999; diff --git a/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_empty/setup.sql b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_empty/setup.sql new file mode 100644 index 000000000..ff3c23fd4 --- /dev/null +++ b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_empty/setup.sql @@ -0,0 +1,25 @@ +-- APP-926: empty-parameter guard. Valid, ACTIVE report data is present but every UID +-- list is empty, so no branch of the qualifying WHERE can match and the datamart gains +-- no rows in this case's key range. STRING_SPLIT('', ',') yields a single '' token that +-- casts to 0, and no seeded UID is 0, so nothing qualifies. Key range 9268xxx. +-- (query.sql asserts a COUNT of 0; the framework requires a query to return a row, so a +-- zero-row datamart SELECT can't be used here.) +USE RDB_MODERN; + +INSERT INTO dbo.D_PATIENT (PATIENT_KEY, PATIENT_UID, PATIENT_LOCAL_ID) +VALUES (9268010, 9268010, 'PAT9268010'); + +INSERT INTO dbo.MORBIDITY_REPORT + (MORB_RPT_KEY, MORB_RPT_UID, MORB_RPT_LOCAL_ID, JURISDICTION_NM, ELECTRONIC_IND, RECORD_STATUS_CD) +VALUES + (9268001, 9268001, 'MOR9268001', 'Empty County', NULL, 'ACTIVE'); + +INSERT INTO dbo.MORBIDITY_REPORT_EVENT + (MORB_RPT_KEY, PATIENT_KEY, PHYSICIAN_KEY, REPORTER_KEY, MORB_RPT_SRC_ORG_KEY, HSPTL_KEY, + INVESTIGATION_KEY, CONDITION_KEY, NURSING_HOME_KEY, HEALTH_CARE_KEY, LDF_GROUP_KEY, + MORB_RPT_CREATE_DT_KEY, HSPTL_DISCHARGE_DT_KEY, ILLNESS_ONSET_DT_KEY, MORB_RPT_DT_KEY, RECORD_STATUS_CD) +VALUES + (9268001, 9268010, 1,1,1,1, 1,1,1,1,1, 1,1,1,1, 'ACTIVE'); + +EXEC dbo.sp_morbidity_report_datamart_postprocessing + @obs_uids=N'', @pat_uids=N'', @prov_uids=N'', @org_uids=N'', @inv_uids=N'', @debug=0; diff --git a/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_inv/expected.json b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_inv/expected.json new file mode 100644 index 000000000..220f848ad --- /dev/null +++ b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_inv/expected.json @@ -0,0 +1,20 @@ +{ + "0": [ + { + "CASE_STATUS": "C", + "EXTERNAL_IND": "No", + "HOSPITAL_FAC_NAME": null, + "INVESTIGATION_CREATED_IND": "Yes", + "INVESTIGATION_KEY": 9265010, + "JURISDICTION_NAME": "Inv County", + "MORBIDITY_REPORT_KEY": 9265001, + "MORBIDITY_REPORT_LOCAL_ID": "MOR9265001", + "PATIENT_LOCAL_ID": null, + "PROGRAM_AREA_DESCRIPTION": "Enteric", + "PROVIDER_LAST_NAME": null, + "REPORTER_LAST_NAME": null, + "REPORTING_FACILITY_UID": null, + "REPORT_FAC_NAME": null + } + ] +} diff --git a/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_inv/query.sql b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_inv/query.sql new file mode 100644 index 000000000..c8f931b59 --- /dev/null +++ b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_inv/query.sql @@ -0,0 +1,19 @@ +-- Scoped to the 9265000..9265999 key range so only this case's rows are asserted. +SELECT + MORBIDITY_REPORT_KEY, + MORBIDITY_REPORT_LOCAL_ID, + JURISDICTION_NAME, + PATIENT_LOCAL_ID, + PROVIDER_LAST_NAME, + REPORTER_LAST_NAME, + REPORT_FAC_NAME, + REPORTING_FACILITY_UID, + HOSPITAL_FAC_NAME, + INVESTIGATION_KEY, + INVESTIGATION_CREATED_IND, + CASE_STATUS, + PROGRAM_AREA_DESCRIPTION, + EXTERNAL_IND +FROM RDB_MODERN.dbo.MORBIDITY_REPORT_DATAMART +WHERE MORBIDITY_REPORT_KEY BETWEEN 9265000 AND 9265999 +ORDER BY MORBIDITY_REPORT_KEY; diff --git a/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_inv/setup.sql b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_inv/setup.sql new file mode 100644 index 000000000..f1f804f3d --- /dev/null +++ b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_inv/setup.sql @@ -0,0 +1,32 @@ +-- APP-926: @inv_uids branch. A report qualifies when MRE.INVESTIGATION_KEY resolves +-- to an INVESTIGATION whose CASE_UID is in @inv_uids. This also exercises the +-- INVESTIGATION_CREATED_IND / INVESTIGATION_KEY / CASE_STATUS output columns +-- (NULLIF(inv.INVESTIGATION_KEY, 1) and IIF(COALESCE(...,1)=1,'No','Yes')). +-- Key range 9265xxx. +-- report 9265001 -> INVESTIGATION_KEY 9265010 (CASE_UID 9265010, in @inv) -> qualifies +-- report 9265002 -> INVESTIGATION_KEY 9265011 (CASE_UID 9265011, NOT in @inv) -> excluded +USE RDB_MODERN; + +INSERT INTO dbo.INVESTIGATION (INVESTIGATION_KEY, CASE_UID, INV_CASE_STATUS, RECORD_STATUS_CD) +VALUES (9265010, 9265010, 'C', 'ACTIVE'), + (9265011, 9265011, 'P', 'ACTIVE'); + +INSERT INTO dbo.MORBIDITY_REPORT + (MORB_RPT_KEY, MORB_RPT_UID, MORB_RPT_LOCAL_ID, JURISDICTION_NM, ELECTRONIC_IND, RECORD_STATUS_CD) +VALUES + (9265001, 9265001, 'MOR9265001', 'Inv County', NULL, 'ACTIVE'), + (9265002, 9265002, 'MOR9265002', 'Inv County', NULL, 'ACTIVE'); + +INSERT INTO dbo.MORBIDITY_REPORT_EVENT + (MORB_RPT_KEY, PATIENT_KEY, PHYSICIAN_KEY, REPORTER_KEY, MORB_RPT_SRC_ORG_KEY, HSPTL_KEY, + INVESTIGATION_KEY, CONDITION_KEY, NURSING_HOME_KEY, HEALTH_CARE_KEY, LDF_GROUP_KEY, + MORB_RPT_CREATE_DT_KEY, HSPTL_DISCHARGE_DT_KEY, ILLNESS_ONSET_DT_KEY, MORB_RPT_DT_KEY, RECORD_STATUS_CD) +VALUES + (9265001, 1,1,1,1,1, 9265010, 1,1,1,1, 1,1,1,1, 'ACTIVE'), + (9265002, 1,1,1,1,1, 9265011, 1,1,1,1, 1,1,1,1, 'ACTIVE'); + +INSERT INTO dbo.EVENT_METRIC (EVENT_TYPE, EVENT_UID, PROG_AREA_DESC_TXT) +VALUES ('Observation', 9265001, 'Enteric'); + +EXEC dbo.sp_morbidity_report_datamart_postprocessing + @obs_uids=N'', @pat_uids=N'', @prov_uids=N'', @org_uids=N'', @inv_uids=N'9265010', @debug=0; diff --git a/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_mixed/expected.json b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_mixed/expected.json new file mode 100644 index 000000000..e5c82f22c --- /dev/null +++ b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_mixed/expected.json @@ -0,0 +1,84 @@ +{ + "0": [ + { + "CASE_STATUS": null, + "EXTERNAL_IND": "Yes", + "HOSPITAL_FAC_NAME": null, + "INVESTIGATION_CREATED_IND": "No", + "INVESTIGATION_KEY": null, + "JURISDICTION_NAME": "Mixed County", + "MORBIDITY_REPORT_KEY": 9266001, + "MORBIDITY_REPORT_LOCAL_ID": "MOR9266001", + "PATIENT_LOCAL_ID": null, + "PROGRAM_AREA_DESCRIPTION": "Enteric", + "PROVIDER_LAST_NAME": null, + "REPORTER_LAST_NAME": null, + "REPORTING_FACILITY_UID": null, + "REPORT_FAC_NAME": null + }, + { + "CASE_STATUS": null, + "EXTERNAL_IND": "No", + "HOSPITAL_FAC_NAME": null, + "INVESTIGATION_CREATED_IND": "No", + "INVESTIGATION_KEY": null, + "JURISDICTION_NAME": "Mixed County", + "MORBIDITY_REPORT_KEY": 9266002, + "MORBIDITY_REPORT_LOCAL_ID": "MOR9266002", + "PATIENT_LOCAL_ID": "PAT9266020", + "PROGRAM_AREA_DESCRIPTION": "Enteric", + "PROVIDER_LAST_NAME": null, + "REPORTER_LAST_NAME": null, + "REPORTING_FACILITY_UID": null, + "REPORT_FAC_NAME": null + }, + { + "CASE_STATUS": null, + "EXTERNAL_IND": "No", + "HOSPITAL_FAC_NAME": null, + "INVESTIGATION_CREATED_IND": "No", + "INVESTIGATION_KEY": null, + "JURISDICTION_NAME": "Mixed County", + "MORBIDITY_REPORT_KEY": 9266003, + "MORBIDITY_REPORT_LOCAL_ID": "MOR9266003", + "PATIENT_LOCAL_ID": null, + "PROGRAM_AREA_DESCRIPTION": "Enteric", + "PROVIDER_LAST_NAME": "DocMixed", + "REPORTER_LAST_NAME": null, + "REPORTING_FACILITY_UID": null, + "REPORT_FAC_NAME": null + }, + { + "CASE_STATUS": null, + "EXTERNAL_IND": "No", + "HOSPITAL_FAC_NAME": "HospMixed", + "INVESTIGATION_CREATED_IND": "No", + "INVESTIGATION_KEY": null, + "JURISDICTION_NAME": "Mixed County", + "MORBIDITY_REPORT_KEY": 9266004, + "MORBIDITY_REPORT_LOCAL_ID": "MOR9266004", + "PATIENT_LOCAL_ID": null, + "PROGRAM_AREA_DESCRIPTION": "Enteric", + "PROVIDER_LAST_NAME": null, + "REPORTER_LAST_NAME": null, + "REPORTING_FACILITY_UID": null, + "REPORT_FAC_NAME": null + }, + { + "CASE_STATUS": "C", + "EXTERNAL_IND": "No", + "HOSPITAL_FAC_NAME": null, + "INVESTIGATION_CREATED_IND": "Yes", + "INVESTIGATION_KEY": 9266050, + "JURISDICTION_NAME": "Mixed County", + "MORBIDITY_REPORT_KEY": 9266005, + "MORBIDITY_REPORT_LOCAL_ID": "MOR9266005", + "PATIENT_LOCAL_ID": null, + "PROGRAM_AREA_DESCRIPTION": "Enteric", + "PROVIDER_LAST_NAME": null, + "REPORTER_LAST_NAME": null, + "REPORTING_FACILITY_UID": null, + "REPORT_FAC_NAME": null + } + ] +} diff --git a/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_mixed/query.sql b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_mixed/query.sql new file mode 100644 index 000000000..9583f3b87 --- /dev/null +++ b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_mixed/query.sql @@ -0,0 +1,19 @@ +-- Scoped to the 9266000..9266999 key range so only this case's rows are asserted. +SELECT + MORBIDITY_REPORT_KEY, + MORBIDITY_REPORT_LOCAL_ID, + JURISDICTION_NAME, + PATIENT_LOCAL_ID, + PROVIDER_LAST_NAME, + REPORTER_LAST_NAME, + REPORT_FAC_NAME, + REPORTING_FACILITY_UID, + HOSPITAL_FAC_NAME, + INVESTIGATION_KEY, + INVESTIGATION_CREATED_IND, + CASE_STATUS, + PROGRAM_AREA_DESCRIPTION, + EXTERNAL_IND +FROM RDB_MODERN.dbo.MORBIDITY_REPORT_DATAMART +WHERE MORBIDITY_REPORT_KEY BETWEEN 9266000 AND 9266999 +ORDER BY MORBIDITY_REPORT_KEY; diff --git a/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_mixed/setup.sql b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_mixed/setup.sql new file mode 100644 index 000000000..2c05c33fb --- /dev/null +++ b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_mixed/setup.sql @@ -0,0 +1,39 @@ +-- APP-926: all five qualifying branches supplied at once (obs + pat + prov + org + inv). +-- One report per branch, distinct keys in the 9266xxx range, so each branch of the +-- OR in the SP WHERE contributes exactly one datamart row (5 total). +USE RDB_MODERN; + +INSERT INTO dbo.D_PATIENT (PATIENT_KEY, PATIENT_UID, PATIENT_LOCAL_ID) VALUES (9266020, 9266020, 'PAT9266020'); +INSERT INTO dbo.D_PROVIDER (PROVIDER_KEY, PROVIDER_UID, PROVIDER_LAST_NAME) VALUES (9266030, 9266030, 'DocMixed'); +INSERT INTO dbo.D_ORGANIZATION (ORGANIZATION_KEY, ORGANIZATION_UID, ORGANIZATION_NAME) VALUES (9266040, 9266040, 'HospMixed'); +INSERT INTO dbo.INVESTIGATION (INVESTIGATION_KEY, CASE_UID, INV_CASE_STATUS, RECORD_STATUS_CD) VALUES (9266050, 9266050, 'C', 'ACTIVE'); + +INSERT INTO dbo.MORBIDITY_REPORT + (MORB_RPT_KEY, MORB_RPT_UID, MORB_RPT_LOCAL_ID, JURISDICTION_NM, ELECTRONIC_IND, RECORD_STATUS_CD) +VALUES + (9266001, 9266001, 'MOR9266001', 'Mixed County', 'E', 'ACTIVE'), -- obs branch + (9266002, 9266002, 'MOR9266002', 'Mixed County', NULL, 'ACTIVE'), -- pat branch + (9266003, 9266003, 'MOR9266003', 'Mixed County', NULL, 'ACTIVE'), -- prov (physician) branch + (9266004, 9266004, 'MOR9266004', 'Mixed County', NULL, 'ACTIVE'), -- org (hsptl) branch + (9266005, 9266005, 'MOR9266005', 'Mixed County', NULL, 'ACTIVE'); -- inv branch + +INSERT INTO dbo.MORBIDITY_REPORT_EVENT + (MORB_RPT_KEY, PATIENT_KEY, PHYSICIAN_KEY, REPORTER_KEY, MORB_RPT_SRC_ORG_KEY, HSPTL_KEY, + INVESTIGATION_KEY, CONDITION_KEY, NURSING_HOME_KEY, HEALTH_CARE_KEY, LDF_GROUP_KEY, + MORB_RPT_CREATE_DT_KEY, HSPTL_DISCHARGE_DT_KEY, ILLNESS_ONSET_DT_KEY, MORB_RPT_DT_KEY, RECORD_STATUS_CD) +VALUES + (9266001, 1, 1, 1,1,1, 1, 1,1,1,1, 1,1,1,1, 'ACTIVE'), + (9266002, 9266020, 1, 1,1,1, 1, 1,1,1,1, 1,1,1,1, 'ACTIVE'), + (9266003, 1, 9266030, 1,1,1, 1, 1,1,1,1, 1,1,1,1, 'ACTIVE'), + (9266004, 1, 1, 1,1,9266040, 1, 1,1,1,1, 1,1,1,1, 'ACTIVE'), + (9266005, 1, 1, 1,1,1, 9266050, 1,1,1,1, 1,1,1,1, 'ACTIVE'); + +INSERT INTO dbo.EVENT_METRIC (EVENT_TYPE, EVENT_UID, PROG_AREA_DESC_TXT) +VALUES ('Observation', 9266001, 'Enteric'), + ('Observation', 9266002, 'Enteric'), + ('Observation', 9266003, 'Enteric'), + ('Observation', 9266004, 'Enteric'), + ('Observation', 9266005, 'Enteric'); + +EXEC dbo.sp_morbidity_report_datamart_postprocessing + @obs_uids=N'9266001', @pat_uids=N'9266020', @prov_uids=N'9266030', @org_uids=N'9266040', @inv_uids=N'9266050', @debug=0; diff --git a/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_multievent/expected.json b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_multievent/expected.json new file mode 100644 index 000000000..3ec1457b5 --- /dev/null +++ b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_multievent/expected.json @@ -0,0 +1,20 @@ +{ + "0": [ + { + "CASE_STATUS": null, + "EXTERNAL_IND": "No", + "HOSPITAL_FAC_NAME": null, + "INVESTIGATION_CREATED_IND": "No", + "INVESTIGATION_KEY": null, + "JURISDICTION_NAME": "Multi County", + "MORBIDITY_REPORT_KEY": 9267001, + "MORBIDITY_REPORT_LOCAL_ID": "MOR9267001", + "PATIENT_LOCAL_ID": "PATMULTI", + "PROGRAM_AREA_DESCRIPTION": "Enteric", + "PROVIDER_LAST_NAME": null, + "REPORTER_LAST_NAME": null, + "REPORTING_FACILITY_UID": null, + "REPORT_FAC_NAME": null + } + ] +} diff --git a/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_multievent/query.sql b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_multievent/query.sql new file mode 100644 index 000000000..0d04a345f --- /dev/null +++ b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_multievent/query.sql @@ -0,0 +1,19 @@ +-- Scoped to the 9267000..9267999 key range so only this case's rows are asserted. +SELECT + MORBIDITY_REPORT_KEY, + MORBIDITY_REPORT_LOCAL_ID, + JURISDICTION_NAME, + PATIENT_LOCAL_ID, + PROVIDER_LAST_NAME, + REPORTER_LAST_NAME, + REPORT_FAC_NAME, + REPORTING_FACILITY_UID, + HOSPITAL_FAC_NAME, + INVESTIGATION_KEY, + INVESTIGATION_CREATED_IND, + CASE_STATUS, + PROGRAM_AREA_DESCRIPTION, + EXTERNAL_IND +FROM RDB_MODERN.dbo.MORBIDITY_REPORT_DATAMART +WHERE MORBIDITY_REPORT_KEY BETWEEN 9267000 AND 9267999 +ORDER BY MORBIDITY_REPORT_KEY; diff --git a/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_multievent/setup.sql b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_multievent/setup.sql new file mode 100644 index 000000000..d01a83fd4 --- /dev/null +++ b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_multievent/setup.sql @@ -0,0 +1,31 @@ +-- APP-926: multi-event report. One MORBIDITY_REPORT (9267001) has TWO +-- MORBIDITY_REPORT_EVENT rows. The SP builds #MORB_EVENT_INIT at MR x MRE grain and +-- applies the qualifying WHERE per (MR, MRE) row, so only the MRE row whose PATIENT_KEY +-- matches @pat_uids survives -> exactly ONE datamart row, carrying the matching +-- patient's data. This is the case a naive key-grain rewrite would break (emit both +-- rows, or the wrong MRE's data). Key range 9267xxx. +-- MRE (a) PATIENT_KEY 9267010 (D_PATIENT UID 9267010, in @pat) -> matches +-- MRE (b) PATIENT_KEY 1 (sentinel, UID NULL) -> does not match +USE RDB_MODERN; + +INSERT INTO dbo.D_PATIENT (PATIENT_KEY, PATIENT_UID, PATIENT_LOCAL_ID) +VALUES (9267010, 9267010, 'PATMULTI'); + +INSERT INTO dbo.MORBIDITY_REPORT + (MORB_RPT_KEY, MORB_RPT_UID, MORB_RPT_LOCAL_ID, JURISDICTION_NM, ELECTRONIC_IND, RECORD_STATUS_CD) +VALUES + (9267001, 9267001, 'MOR9267001', 'Multi County', NULL, 'ACTIVE'); + +INSERT INTO dbo.MORBIDITY_REPORT_EVENT + (MORB_RPT_KEY, PATIENT_KEY, PHYSICIAN_KEY, REPORTER_KEY, MORB_RPT_SRC_ORG_KEY, HSPTL_KEY, + INVESTIGATION_KEY, CONDITION_KEY, NURSING_HOME_KEY, HEALTH_CARE_KEY, LDF_GROUP_KEY, + MORB_RPT_CREATE_DT_KEY, HSPTL_DISCHARGE_DT_KEY, ILLNESS_ONSET_DT_KEY, MORB_RPT_DT_KEY, RECORD_STATUS_CD) +VALUES + (9267001, 9267010, 1,1,1,1, 1,1,1,1,1, 1,1,1,1, 'ACTIVE'), + (9267001, 1, 1,1,1,1, 1,1,1,1,1, 1,1,1,1, 'ACTIVE'); + +INSERT INTO dbo.EVENT_METRIC (EVENT_TYPE, EVENT_UID, PROG_AREA_DESC_TXT) +VALUES ('Observation', 9267001, 'Enteric'); + +EXEC dbo.sp_morbidity_report_datamart_postprocessing + @obs_uids=N'', @pat_uids=N'9267010', @prov_uids=N'', @org_uids=N'', @inv_uids=N'', @debug=0; diff --git a/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_obs/expected.json b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_obs/expected.json new file mode 100644 index 000000000..c9cefde0a --- /dev/null +++ b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_obs/expected.json @@ -0,0 +1,20 @@ +{ + "0": [ + { + "CASE_STATUS": null, + "EXTERNAL_IND": "Yes", + "HOSPITAL_FAC_NAME": null, + "INVESTIGATION_CREATED_IND": "No", + "INVESTIGATION_KEY": null, + "JURISDICTION_NAME": "Obs County", + "MORBIDITY_REPORT_KEY": 9261001, + "MORBIDITY_REPORT_LOCAL_ID": "MOR9261001", + "PATIENT_LOCAL_ID": null, + "PROGRAM_AREA_DESCRIPTION": "Enteric", + "PROVIDER_LAST_NAME": null, + "REPORTER_LAST_NAME": null, + "REPORTING_FACILITY_UID": null, + "REPORT_FAC_NAME": null + } + ] +} diff --git a/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_obs/query.sql b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_obs/query.sql new file mode 100644 index 000000000..869559174 --- /dev/null +++ b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_obs/query.sql @@ -0,0 +1,19 @@ +-- Scoped to the 9261xxx key range so only this case's rows are asserted. +SELECT + MORBIDITY_REPORT_KEY, + MORBIDITY_REPORT_LOCAL_ID, + JURISDICTION_NAME, + PATIENT_LOCAL_ID, + PROVIDER_LAST_NAME, + REPORTER_LAST_NAME, + REPORT_FAC_NAME, + REPORTING_FACILITY_UID, + HOSPITAL_FAC_NAME, + INVESTIGATION_KEY, + INVESTIGATION_CREATED_IND, + CASE_STATUS, + PROGRAM_AREA_DESCRIPTION, + EXTERNAL_IND +FROM RDB_MODERN.dbo.MORBIDITY_REPORT_DATAMART +WHERE MORBIDITY_REPORT_KEY BETWEEN 9261000 AND 9261999 +ORDER BY MORBIDITY_REPORT_KEY; diff --git a/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_obs/setup.sql b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_obs/setup.sql new file mode 100644 index 000000000..3e267dbd6 --- /dev/null +++ b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_obs/setup.sql @@ -0,0 +1,33 @@ +-- APP-926: sp_morbidity_report_datamart_postprocessing — @obs_uids branch. +-- A report qualifies for the datamart when CAST(MR.MORB_RPT_UID AS bigint) is in +-- @obs_uids AND MORB_RPT_KEY <> 1 AND MR.RECORD_STATUS_CD = 'ACTIVE'. +-- Key range 9261xxx is dedicated to this case so it can't collide with other cases +-- or the sentinel key=1 dimension rows. +-- 9261001 ACTIVE + in @obs_uids -> qualifies (the one expected row) +-- 9261002 ACTIVE + NOT in @obs -> excluded (param filter) +-- 9261003 INACTIVE+ in @obs_uids -> excluded (RECORD_STATUS_CD filter) +-- All MRE FK keys point to sentinel 1 (NULL dimension members) so only the obs +-- branch can match; EVENT_METRIC.EVENT_UID = MORB_RPT_UID feeds PROGRAM_AREA. +USE RDB_MODERN; + +INSERT INTO dbo.MORBIDITY_REPORT + (MORB_RPT_KEY, MORB_RPT_UID, MORB_RPT_LOCAL_ID, JURISDICTION_NM, ELECTRONIC_IND, RECORD_STATUS_CD) +VALUES + (9261001, 9261001, 'MOR9261001', 'Obs County', 'E', 'ACTIVE'), + (9261002, 9261002, 'MOR9261002', 'Obs County', NULL, 'ACTIVE'), + (9261003, 9261003, 'MOR9261003', 'Obs County', NULL, 'INACTIVE'); + +INSERT INTO dbo.MORBIDITY_REPORT_EVENT + (MORB_RPT_KEY, PATIENT_KEY, PHYSICIAN_KEY, REPORTER_KEY, MORB_RPT_SRC_ORG_KEY, HSPTL_KEY, + INVESTIGATION_KEY, CONDITION_KEY, NURSING_HOME_KEY, HEALTH_CARE_KEY, LDF_GROUP_KEY, + MORB_RPT_CREATE_DT_KEY, HSPTL_DISCHARGE_DT_KEY, ILLNESS_ONSET_DT_KEY, MORB_RPT_DT_KEY, RECORD_STATUS_CD) +VALUES + (9261001, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1, 'ACTIVE'), + (9261002, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1, 'ACTIVE'), + (9261003, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1, 'ACTIVE'); + +INSERT INTO dbo.EVENT_METRIC (EVENT_TYPE, EVENT_UID, PROG_AREA_DESC_TXT) +VALUES ('Observation', 9261001, 'Enteric'); + +EXEC dbo.sp_morbidity_report_datamart_postprocessing + @obs_uids=N'9261001,9261003', @pat_uids=N'', @prov_uids=N'', @org_uids=N'', @inv_uids=N'', @debug=0; diff --git a/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_org/expected.json b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_org/expected.json new file mode 100644 index 000000000..6edb1c52f --- /dev/null +++ b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_org/expected.json @@ -0,0 +1,36 @@ +{ + "0": [ + { + "CASE_STATUS": null, + "EXTERNAL_IND": "No", + "HOSPITAL_FAC_NAME": null, + "INVESTIGATION_CREATED_IND": "No", + "INVESTIGATION_KEY": null, + "JURISDICTION_NAME": "Org County", + "MORBIDITY_REPORT_KEY": 9264001, + "MORBIDITY_REPORT_LOCAL_ID": "MOR9264001", + "PATIENT_LOCAL_ID": null, + "PROGRAM_AREA_DESCRIPTION": "Enteric", + "PROVIDER_LAST_NAME": null, + "REPORTER_LAST_NAME": null, + "REPORTING_FACILITY_UID": 9264010, + "REPORT_FAC_NAME": "SrcOrg" + }, + { + "CASE_STATUS": null, + "EXTERNAL_IND": "No", + "HOSPITAL_FAC_NAME": "Hospital", + "INVESTIGATION_CREATED_IND": "No", + "INVESTIGATION_KEY": null, + "JURISDICTION_NAME": "Org County", + "MORBIDITY_REPORT_KEY": 9264002, + "MORBIDITY_REPORT_LOCAL_ID": "MOR9264002", + "PATIENT_LOCAL_ID": null, + "PROGRAM_AREA_DESCRIPTION": "Enteric", + "PROVIDER_LAST_NAME": null, + "REPORTER_LAST_NAME": null, + "REPORTING_FACILITY_UID": null, + "REPORT_FAC_NAME": null + } + ] +} diff --git a/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_org/query.sql b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_org/query.sql new file mode 100644 index 000000000..939dff20e --- /dev/null +++ b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_org/query.sql @@ -0,0 +1,19 @@ +-- Scoped to the 9264000..9264999 key range so only this case's rows are asserted. +SELECT + MORBIDITY_REPORT_KEY, + MORBIDITY_REPORT_LOCAL_ID, + JURISDICTION_NAME, + PATIENT_LOCAL_ID, + PROVIDER_LAST_NAME, + REPORTER_LAST_NAME, + REPORT_FAC_NAME, + REPORTING_FACILITY_UID, + HOSPITAL_FAC_NAME, + INVESTIGATION_KEY, + INVESTIGATION_CREATED_IND, + CASE_STATUS, + PROGRAM_AREA_DESCRIPTION, + EXTERNAL_IND +FROM RDB_MODERN.dbo.MORBIDITY_REPORT_DATAMART +WHERE MORBIDITY_REPORT_KEY BETWEEN 9264000 AND 9264999 +ORDER BY MORBIDITY_REPORT_KEY; diff --git a/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_org/setup.sql b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_org/setup.sql new file mode 100644 index 000000000..6abdebec9 --- /dev/null +++ b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_org/setup.sql @@ -0,0 +1,35 @@ +-- APP-926: @org_uids branch. A report qualifies when MRE.MORB_RPT_SRC_ORG_KEY OR +-- MRE.HSPTL_KEY resolves to a D_ORGANIZATION whose ORGANIZATION_UID is in @org_uids. +-- Key range 9264xxx. Both sub-branches are covered: +-- report 9264001 -> MORB_RPT_SRC_ORG_KEY 9264010 (reporting facility, REPORT_FAC_NAME/UID) +-- report 9264002 -> HSPTL_KEY 9264011 (hospital, HOSPITAL_FAC_NAME) +-- report 9264003 -> HSPTL_KEY 9264012 (UID 9264012 NOT in @org) -> excluded +USE RDB_MODERN; + +INSERT INTO dbo.D_ORGANIZATION (ORGANIZATION_KEY, ORGANIZATION_UID, ORGANIZATION_NAME) +VALUES (9264010, 9264010, 'SrcOrg'), + (9264011, 9264011, 'Hospital'), + (9264012, 9264012, 'OtherOrg'); + +INSERT INTO dbo.MORBIDITY_REPORT + (MORB_RPT_KEY, MORB_RPT_UID, MORB_RPT_LOCAL_ID, JURISDICTION_NM, ELECTRONIC_IND, RECORD_STATUS_CD) +VALUES + (9264001, 9264001, 'MOR9264001', 'Org County', NULL, 'ACTIVE'), + (9264002, 9264002, 'MOR9264002', 'Org County', NULL, 'ACTIVE'), + (9264003, 9264003, 'MOR9264003', 'Org County', NULL, 'ACTIVE'); + +INSERT INTO dbo.MORBIDITY_REPORT_EVENT + (MORB_RPT_KEY, PATIENT_KEY, PHYSICIAN_KEY, REPORTER_KEY, MORB_RPT_SRC_ORG_KEY, HSPTL_KEY, + INVESTIGATION_KEY, CONDITION_KEY, NURSING_HOME_KEY, HEALTH_CARE_KEY, LDF_GROUP_KEY, + MORB_RPT_CREATE_DT_KEY, HSPTL_DISCHARGE_DT_KEY, ILLNESS_ONSET_DT_KEY, MORB_RPT_DT_KEY, RECORD_STATUS_CD) +VALUES + (9264001, 1,1,1, 9264010, 1, 1,1,1,1,1, 1,1,1,1, 'ACTIVE'), + (9264002, 1,1,1, 1, 9264011, 1,1,1,1,1, 1,1,1,1, 'ACTIVE'), + (9264003, 1,1,1, 1, 9264012, 1,1,1,1,1, 1,1,1,1, 'ACTIVE'); + +INSERT INTO dbo.EVENT_METRIC (EVENT_TYPE, EVENT_UID, PROG_AREA_DESC_TXT) +VALUES ('Observation', 9264001, 'Enteric'), + ('Observation', 9264002, 'Enteric'); + +EXEC dbo.sp_morbidity_report_datamart_postprocessing + @obs_uids=N'', @pat_uids=N'', @prov_uids=N'', @org_uids=N'9264010,9264011', @inv_uids=N'', @debug=0; diff --git a/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_pat/expected.json b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_pat/expected.json new file mode 100644 index 000000000..39494b1a9 --- /dev/null +++ b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_pat/expected.json @@ -0,0 +1,20 @@ +{ + "0": [ + { + "CASE_STATUS": null, + "EXTERNAL_IND": "No", + "HOSPITAL_FAC_NAME": null, + "INVESTIGATION_CREATED_IND": "No", + "INVESTIGATION_KEY": null, + "JURISDICTION_NAME": "Pat County", + "MORBIDITY_REPORT_KEY": 9262001, + "MORBIDITY_REPORT_LOCAL_ID": "MOR9262001", + "PATIENT_LOCAL_ID": "PAT9262010", + "PROGRAM_AREA_DESCRIPTION": "Enteric", + "PROVIDER_LAST_NAME": null, + "REPORTER_LAST_NAME": null, + "REPORTING_FACILITY_UID": null, + "REPORT_FAC_NAME": null + } + ] +} diff --git a/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_pat/query.sql b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_pat/query.sql new file mode 100644 index 000000000..2e6e1765e --- /dev/null +++ b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_pat/query.sql @@ -0,0 +1,19 @@ +-- Scoped to the 9262000..9262999 key range so only this case's rows are asserted. +SELECT + MORBIDITY_REPORT_KEY, + MORBIDITY_REPORT_LOCAL_ID, + JURISDICTION_NAME, + PATIENT_LOCAL_ID, + PROVIDER_LAST_NAME, + REPORTER_LAST_NAME, + REPORT_FAC_NAME, + REPORTING_FACILITY_UID, + HOSPITAL_FAC_NAME, + INVESTIGATION_KEY, + INVESTIGATION_CREATED_IND, + CASE_STATUS, + PROGRAM_AREA_DESCRIPTION, + EXTERNAL_IND +FROM RDB_MODERN.dbo.MORBIDITY_REPORT_DATAMART +WHERE MORBIDITY_REPORT_KEY BETWEEN 9262000 AND 9262999 +ORDER BY MORBIDITY_REPORT_KEY; diff --git a/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_pat/setup.sql b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_pat/setup.sql new file mode 100644 index 000000000..21278e8cc --- /dev/null +++ b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_pat/setup.sql @@ -0,0 +1,30 @@ +-- APP-926: @pat_uids branch. A report qualifies when its MRE.PATIENT_KEY resolves +-- to a D_PATIENT whose PATIENT_UID is in @pat_uids. +-- Key range 9262xxx. +-- report 9262001 -> MRE.PATIENT_KEY 9262010 (D_PATIENT UID 9262010, in @pat) -> qualifies +-- report 9262002 -> MRE.PATIENT_KEY 9262011 (D_PATIENT UID 9262011, NOT in @pat) -> excluded +USE RDB_MODERN; + +INSERT INTO dbo.D_PATIENT (PATIENT_KEY, PATIENT_UID, PATIENT_LOCAL_ID) +VALUES (9262010, 9262010, 'PAT9262010'), + (9262011, 9262011, 'PAT9262011'); + +INSERT INTO dbo.MORBIDITY_REPORT + (MORB_RPT_KEY, MORB_RPT_UID, MORB_RPT_LOCAL_ID, JURISDICTION_NM, ELECTRONIC_IND, RECORD_STATUS_CD) +VALUES + (9262001, 9262001, 'MOR9262001', 'Pat County', NULL, 'ACTIVE'), + (9262002, 9262002, 'MOR9262002', 'Pat County', NULL, 'ACTIVE'); + +INSERT INTO dbo.MORBIDITY_REPORT_EVENT + (MORB_RPT_KEY, PATIENT_KEY, PHYSICIAN_KEY, REPORTER_KEY, MORB_RPT_SRC_ORG_KEY, HSPTL_KEY, + INVESTIGATION_KEY, CONDITION_KEY, NURSING_HOME_KEY, HEALTH_CARE_KEY, LDF_GROUP_KEY, + MORB_RPT_CREATE_DT_KEY, HSPTL_DISCHARGE_DT_KEY, ILLNESS_ONSET_DT_KEY, MORB_RPT_DT_KEY, RECORD_STATUS_CD) +VALUES + (9262001, 9262010, 1,1,1,1, 1,1,1,1,1, 1,1,1,1, 'ACTIVE'), + (9262002, 9262011, 1,1,1,1, 1,1,1,1,1, 1,1,1,1, 'ACTIVE'); + +INSERT INTO dbo.EVENT_METRIC (EVENT_TYPE, EVENT_UID, PROG_AREA_DESC_TXT) +VALUES ('Observation', 9262001, 'Enteric'); + +EXEC dbo.sp_morbidity_report_datamart_postprocessing + @obs_uids=N'', @pat_uids=N'9262010', @prov_uids=N'', @org_uids=N'', @inv_uids=N'', @debug=0; diff --git a/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_prov/expected.json b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_prov/expected.json new file mode 100644 index 000000000..c955c7ec2 --- /dev/null +++ b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_prov/expected.json @@ -0,0 +1,36 @@ +{ + "0": [ + { + "CASE_STATUS": null, + "EXTERNAL_IND": "No", + "HOSPITAL_FAC_NAME": null, + "INVESTIGATION_CREATED_IND": "No", + "INVESTIGATION_KEY": null, + "JURISDICTION_NAME": "Prov County", + "MORBIDITY_REPORT_KEY": 9263001, + "MORBIDITY_REPORT_LOCAL_ID": "MOR9263001", + "PATIENT_LOCAL_ID": null, + "PROGRAM_AREA_DESCRIPTION": "Enteric", + "PROVIDER_LAST_NAME": "DocPhys", + "REPORTER_LAST_NAME": null, + "REPORTING_FACILITY_UID": null, + "REPORT_FAC_NAME": null + }, + { + "CASE_STATUS": null, + "EXTERNAL_IND": "No", + "HOSPITAL_FAC_NAME": null, + "INVESTIGATION_CREATED_IND": "No", + "INVESTIGATION_KEY": null, + "JURISDICTION_NAME": "Prov County", + "MORBIDITY_REPORT_KEY": 9263002, + "MORBIDITY_REPORT_LOCAL_ID": "MOR9263002", + "PATIENT_LOCAL_ID": null, + "PROGRAM_AREA_DESCRIPTION": "Enteric", + "PROVIDER_LAST_NAME": null, + "REPORTER_LAST_NAME": "DocRep", + "REPORTING_FACILITY_UID": null, + "REPORT_FAC_NAME": null + } + ] +} diff --git a/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_prov/query.sql b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_prov/query.sql new file mode 100644 index 000000000..de947395e --- /dev/null +++ b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_prov/query.sql @@ -0,0 +1,19 @@ +-- Scoped to the 9263000..9263999 key range so only this case's rows are asserted. +SELECT + MORBIDITY_REPORT_KEY, + MORBIDITY_REPORT_LOCAL_ID, + JURISDICTION_NAME, + PATIENT_LOCAL_ID, + PROVIDER_LAST_NAME, + REPORTER_LAST_NAME, + REPORT_FAC_NAME, + REPORTING_FACILITY_UID, + HOSPITAL_FAC_NAME, + INVESTIGATION_KEY, + INVESTIGATION_CREATED_IND, + CASE_STATUS, + PROGRAM_AREA_DESCRIPTION, + EXTERNAL_IND +FROM RDB_MODERN.dbo.MORBIDITY_REPORT_DATAMART +WHERE MORBIDITY_REPORT_KEY BETWEEN 9263000 AND 9263999 +ORDER BY MORBIDITY_REPORT_KEY; diff --git a/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_prov/setup.sql b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_prov/setup.sql new file mode 100644 index 000000000..649a0bbec --- /dev/null +++ b/reporting-pipeline-service/src/test/resources/testData/unit/app926_morbidity_datamart_prov/setup.sql @@ -0,0 +1,35 @@ +-- APP-926: @prov_uids branch. A report qualifies when MRE.PHYSICIAN_KEY OR +-- MRE.REPORTER_KEY resolves to a D_PROVIDER whose PROVIDER_UID is in @prov_uids. +-- Key range 9263xxx. Both sub-branches are covered: +-- report 9263001 -> PHYSICIAN_KEY 9263010 (provider branch, PROVIDER_LAST_NAME) +-- report 9263002 -> REPORTER_KEY 9263011 (reporter branch, REPORTER_LAST_NAME) +-- report 9263003 -> PHYSICIAN_KEY 9263012 (UID 9263012 NOT in @prov) -> excluded +USE RDB_MODERN; + +INSERT INTO dbo.D_PROVIDER (PROVIDER_KEY, PROVIDER_UID, PROVIDER_LAST_NAME) +VALUES (9263010, 9263010, 'DocPhys'), + (9263011, 9263011, 'DocRep'), + (9263012, 9263012, 'DocOther'); + +INSERT INTO dbo.MORBIDITY_REPORT + (MORB_RPT_KEY, MORB_RPT_UID, MORB_RPT_LOCAL_ID, JURISDICTION_NM, ELECTRONIC_IND, RECORD_STATUS_CD) +VALUES + (9263001, 9263001, 'MOR9263001', 'Prov County', NULL, 'ACTIVE'), + (9263002, 9263002, 'MOR9263002', 'Prov County', NULL, 'ACTIVE'), + (9263003, 9263003, 'MOR9263003', 'Prov County', NULL, 'ACTIVE'); + +INSERT INTO dbo.MORBIDITY_REPORT_EVENT + (MORB_RPT_KEY, PATIENT_KEY, PHYSICIAN_KEY, REPORTER_KEY, MORB_RPT_SRC_ORG_KEY, HSPTL_KEY, + INVESTIGATION_KEY, CONDITION_KEY, NURSING_HOME_KEY, HEALTH_CARE_KEY, LDF_GROUP_KEY, + MORB_RPT_CREATE_DT_KEY, HSPTL_DISCHARGE_DT_KEY, ILLNESS_ONSET_DT_KEY, MORB_RPT_DT_KEY, RECORD_STATUS_CD) +VALUES + (9263001, 1, 9263010, 1, 1,1, 1,1,1,1,1, 1,1,1,1, 'ACTIVE'), + (9263002, 1, 1, 9263011, 1,1, 1,1,1,1,1, 1,1,1,1, 'ACTIVE'), + (9263003, 1, 9263012, 1, 1,1, 1,1,1,1,1, 1,1,1,1, 'ACTIVE'); + +INSERT INTO dbo.EVENT_METRIC (EVENT_TYPE, EVENT_UID, PROG_AREA_DESC_TXT) +VALUES ('Observation', 9263001, 'Enteric'), + ('Observation', 9263002, 'Enteric'); + +EXEC dbo.sp_morbidity_report_datamart_postprocessing + @obs_uids=N'', @pat_uids=N'', @prov_uids=N'9263010,9263011', @org_uids=N'', @inv_uids=N'', @debug=0;