From 2d2d91d59fee82d61a2407ead8a1e9d9b881066b Mon Sep 17 00:00:00 2001 From: Terry J Hawkins Date: Thu, 2 Jun 2022 17:24:38 -0500 Subject: [PATCH 01/17] new tables for HL7 results import --- .../sqlserver/snprc_ehr-21.001-22.000.sql | 360 +++++++++++ snprc_ehr/resources/schemas/snprc_ehr.xml | 242 ++++++++ .../HL7/Create_LIS_DemographicsHL7Staging.sql | 39 ++ .../HL7/Create_LIS_HL7ExportErrorLog.sql | 35 ++ .../HL7/Create_LIS_HL7ImportLog.sql | 44 ++ .../HL7/Create_LIS_f_format_hl7_date.sql | 41 ++ .../HL7/HL7_admin_permissions.sql | 9 + .../HL7/create_LIS_p_load_demographics.sql | 422 +++++++++++++ .../source_queries/HL7/f_format_hl7_date.sql | 30 + .../source_queries/HL7/p_load_hl7_data.sql | 569 ++++++++++++++++++ 10 files changed, 1791 insertions(+) create mode 100644 snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-21.001-22.000.sql create mode 100644 snprc_ehr/resources/source_queries/HL7/Create_LIS_DemographicsHL7Staging.sql create mode 100644 snprc_ehr/resources/source_queries/HL7/Create_LIS_HL7ExportErrorLog.sql create mode 100644 snprc_ehr/resources/source_queries/HL7/Create_LIS_HL7ImportLog.sql create mode 100644 snprc_ehr/resources/source_queries/HL7/Create_LIS_f_format_hl7_date.sql create mode 100644 snprc_ehr/resources/source_queries/HL7/HL7_admin_permissions.sql create mode 100644 snprc_ehr/resources/source_queries/HL7/create_LIS_p_load_demographics.sql create mode 100644 snprc_ehr/resources/source_queries/HL7/f_format_hl7_date.sql create mode 100644 snprc_ehr/resources/source_queries/HL7/p_load_hl7_data.sql diff --git a/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-21.001-22.000.sql b/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-21.001-22.000.sql new file mode 100644 index 000000000..6a857fde9 --- /dev/null +++ b/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-21.001-22.000.sql @@ -0,0 +1,360 @@ +/******************************************************* +New staging tables for Orchard clinical path data integration via HL7 +05/19/22 - Terry Hawkins +*/ + +/* + Drop tables if they already exist +*/ + +EXEC core.fn_dropifexists @objname = 'HL7_IMPORT_LOG',@objschema = 'snprc_ehr', @objtype = 'TABLE'; +EXEC core.fn_dropifexists @objname = 'HL7_OBX_Staging',@objschema = 'snprc_ehr', @objtype = 'TABLE'; +EXEC core.fn_dropifexists @objname = 'HL7_NTE_Staging',@objschema = 'snprc_ehr', @objtype = 'TABLE'; +EXEC core.fn_dropifexists @objname = 'HL7_OBR_Staging',@objschema = 'snprc_ehr', @objtype = 'TABLE'; +EXEC core.fn_dropifexists @objname = 'HL7_PID_Staging',@objschema = 'snprc_ehr', @objtype = 'TABLE'; +EXEC core.fn_dropifexists @objname = 'HL7_PV1_Staging',@objschema = 'snprc_ehr', @objtype = 'TABLE'; +EXEC core.fn_dropifexists @objname = 'HL7_ORC_Staging',@objschema = 'snprc_ehr', @objtype = 'TABLE'; +EXEC core.fn_dropifexists @objname = 'HL7_MSH_Staging',@objschema = 'snprc_ehr', @objtype = 'TABLE'; + +CREATE TABLE [snprc_ehr].[HL7_MSH_Staging]( + [MESSAGE_ID] [VARCHAR](50) NOT NULL, + [IDX] [INT] NOT NULL, + [SENDING_APPLICATION] [VARCHAR](50) NULL, + [SENDING_FACILITY] [VARCHAR](50) NULL, + [RECEIVING_APPLICATION] [VARCHAR](50) NULL, + [RECEIVING_FACILITY] [VARCHAR](50) NULL, + [MESSAGE_CONTROL_ID] [VARCHAR](50) NULL, + [MESSAGE_DATE_TM] [DATETIME] NULL, + [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, + [USER_NAME] [VARCHAR](128) NOT NULL, + [ENTRY_DATE_TM] [DATETIME] NOT NULL, + [TIMESTAMP] [TIMESTAMP] NULL, + CONSTRAINT [PK_HL7_MSH_Staging] PRIMARY KEY CLUSTERED +( + [MESSAGE_ID] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + ) + GO + +ALTER TABLE [snprc_ehr].[HL7_MSH_Staging] ADD CONSTRAINT [DF_HL7_MSH_Staging_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] + GO + +ALTER TABLE [snprc_ehr].[HL7_MSH_Staging] ADD CONSTRAINT [DF_HL7_MSH_Staging_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] + GO + +ALTER TABLE [snprc_ehr].[HL7_MSH_Staging] ADD CONSTRAINT [DF_HL7_MSH_Staging_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] + GO + +CREATE TABLE [snprc_ehr].[HL7_PID_Staging]( + [MESSAGE_ID] [VARCHAR](50) NOT NULL, + [IDX] [INT] NOT NULL, + [SET_ID] [VARCHAR](20) NULL, -- F1_C1 + [PATIENT_ID_EXTERNAL] [VARCHAR](20) NULL, -- F2_C1 + [PATIENT_ID_INTERNAL] [VARCHAR](20) NULL, -- F3_C1 + [BIRTHDATE] [DATETIME] NULL, --F7_C1 + [SEX] [VARCHAR] (20) NULL, -- F8_C1 + [BREED] [VARCHAR] (50) NULL, -- arc_species_code - F10_C1 (Race) + [SPECIES] [VARCHAR] (50) NULL, -- common name - F22_C1 (Ethnic Group) + [ACCOUNT_NUMBER] [VARCHAR] (50) NULL, --F18_C1 + [DEATH_DATE] [VARCHAR] (50) NULL, -- F29_C1 + [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, + [USER_NAME] [VARCHAR](128) NOT NULL, + [ENTRY_DATE_TM] [DATETIME] NOT NULL, + [TIMESTAMP] [TIMESTAMP] NULL, + CONSTRAINT [PK_HL7_PID_Staging] PRIMARY KEY CLUSTERED +( +[MESSAGE_ID] ASC, +[IDX] +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + ) + GO + +ALTER TABLE [snprc_ehr].[HL7_PID_Staging] ADD CONSTRAINT [DF_HL7_PID_Staging_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] + GO + +ALTER TABLE [snprc_ehr].[HL7_PID_Staging] ADD CONSTRAINT [DF_HL7_PID_Staging_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] + GO + +ALTER TABLE [snprc_ehr].[HL7_PID_Staging] ADD CONSTRAINT [DF_HL7_PID_Staging_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] + GO + +ALTER TABLE [snprc_ehr].[HL7_PID_Staging] WITH CHECK ADD CONSTRAINT [FK_PID_REF_MSH] FOREIGN KEY([MESSAGE_ID]) + REFERENCES [snprc_ehr].[HL7_MSH_Staging] ([MESSAGE_ID]) + GO + +CREATE NONCLUSTERED INDEX [IDX_HL7_PID_ID] ON [snprc_ehr].[HL7_PID_Staging] +( + [PATIENT_ID_EXTERNAL] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +GO + + +ALTER TABLE [snprc_ehr].[HL7_PID_Staging] CHECK CONSTRAINT [FK_PID_REF_MSH] + GO + +CREATE TABLE [snprc_ehr].[HL7_PV1_Staging]( + [MESSAGE_ID] [VARCHAR](50) NOT NULL, + [IDX] [INT] NOT NULL, + [SET_ID] [VARCHAR](20) NULL, -- F1_C1 + [ADMISSION_TYPE] [VARCHAR] (20) NULL, --F4_C1 + [ATTENDING_DOCTOR_LAST] [VARCHAR] (50) NULL, -- F7_C2 + [ATTENDING_DOCTOR_FIRST] [VARCHAR] (50) NULL, -- F7_C3 + [VISIT_NUMBER] [VARCHAR] (20) NULL, -- F19_C1 + [CHARGE_NUMBER] [VARCHAR] (20) NULL, -- F22_C1 (Courtesy Code) + [ADMIT_DATE] [DATETIME] NULL, --F44_C1 + [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, + [USER_NAME] [VARCHAR](128) NOT NULL, + [ENTRY_DATE_TM] [DATETIME] NOT NULL, + [TIMESTAMP] [TIMESTAMP] NULL, + CONSTRAINT [PK_HL7_PV1_Staging] PRIMARY KEY CLUSTERED +( + [MESSAGE_ID] ASC, +[IDX] +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + ) + GO + +ALTER TABLE [snprc_ehr].[HL7_PV1_Staging] ADD CONSTRAINT [DF_HL7_PV1_Staging_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] + GO + +ALTER TABLE [snprc_ehr].[HL7_PV1_Staging] ADD CONSTRAINT [DF_HL7_PV1_Staging_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] + GO + +ALTER TABLE [snprc_ehr].[HL7_PV1_Staging] ADD CONSTRAINT [DF_HL7_PV1_Staging_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] + GO + +ALTER TABLE [snprc_ehr].[HL7_PV1_Staging] WITH CHECK ADD CONSTRAINT [FK_PV1_REF_MSH] FOREIGN KEY([MESSAGE_ID]) + REFERENCES [snprc_ehr].[HL7_MSH_Staging] ([MESSAGE_ID]) + GO + +ALTER TABLE [snprc_ehr].[HL7_PV1_Staging] CHECK CONSTRAINT [FK_PV1_REF_MSH] + GO + +CREATE TABLE [snprc_ehr].[HL7_ORC_Staging]( + [MESSAGE_ID] [VARCHAR](50) NOT NULL, + [IDX] [INT] NOT NULL, + [ORDER_CONTROL_CODE] [VARCHAR](20) NULL, -- F1_C1 + [FILLER_ORDER_NUMBER] [VARCHAR] (22) NULL, --F3_C1 + [ENTERED_BY_LAST] [VARCHAR] (50) NULL, -- F10_C2 + [ENTERED_BY_FIRST] [VARCHAR] (50) NULL, -- F10_C3 + [VERIFIED_BY_LAST] [VARCHAR] (50) NULL, -- F11_C2 + [VERIFIED_BY_FIRST] [VARCHAR] (50) NULL, -- F11_C3 + [ORDER_PROVIDER_LAST] [VARCHAR] (50) NULL, -- F12_C2 + [ORDER_PROVIDER_FIRST] [VARCHAR] (50) NULL, -- F12_C3 + [ORDER_DATE] [DATETIME] NULL, -- F15_C1 + [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, + [USER_NAME] [VARCHAR](128) NOT NULL, + [ENTRY_DATE_TM] [DATETIME] NOT NULL, + [TIMESTAMP] [TIMESTAMP] NULL, + CONSTRAINT [PK_HL7_ORC_Staging] PRIMARY KEY CLUSTERED +( + [MESSAGE_ID] ASC, +[IDX] +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + ) + GO + +ALTER TABLE [snprc_ehr].[HL7_ORC_Staging] ADD CONSTRAINT [DF_HL7_ORC_Staging_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] + GO + +ALTER TABLE [snprc_ehr].[HL7_ORC_Staging] ADD CONSTRAINT [DF_HL7_ORC_Staging_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] + GO + +ALTER TABLE [snprc_ehr].[HL7_ORC_Staging] ADD CONSTRAINT [DF_HL7_ORC_Staging_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] + GO + +ALTER TABLE [snprc_ehr].[HL7_ORC_Staging] WITH CHECK ADD CONSTRAINT [FK_ORC_REF_MSH] FOREIGN KEY([MESSAGE_ID]) + REFERENCES [snprc_ehr].[HL7_MSH_Staging] ([MESSAGE_ID]) + GO + +ALTER TABLE [snprc_ehr].[HL7_ORC_Staging] CHECK CONSTRAINT [FK_ORC_REF_MSH] + GO + + +CREATE TABLE [snprc_ehr].[HL7_OBR_Staging]( + [MESSAGE_ID] [VARCHAR](50) NOT NULL, + [MESSAGE_CONTROL_ID] [VARCHAR](50) NOT NULL, + [IDX] [INT] NOT NULL, + [ANIMAL_ID] [VARCHAR](6) NOT NULL, + [VERIFIED_DATE_TM] [DATETIME] NULL, + [REQUESTED_DATE_TM] [DATETIME] NULL, + [OBSERVATION_DATE_TM] [DATETIME] NULL, + [SPECIMEN_RECEIVED_DATE_TM] [DATETIME] NULL, + [PV1_VISIT_NUM] [VARCHAR](50) NULL, + [SET_ID] [VARCHAR](20) NOT NULL, + [SPECIMEN_NUM] [VARCHAR](50) NULL, + [PROCEDURE_ID] [VARCHAR](20) NULL, + [PROCEDURE_NAME] [VARCHAR](20) NULL, + [PRIORITY] [VARCHAR](10) NULL, + [RESULT_STATUS] [VARCHAR](10) NULL, + [TECHNICIAN_NAME] [VARCHAR](MAX) NULL, + [TECHNICIAN_INITIALS] [VARCHAR](50) NULL, + [CHARGE_ID] [INT] NULL, + [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, + [USER_NAME] [VARCHAR](128) NOT NULL, + [ENTRY_DATE_TM] [DATETIME] NOT NULL, + [TIMESTAMP] [TIMESTAMP] NULL, + CONSTRAINT [PK_HL7_OBR_Staging] PRIMARY KEY CLUSTERED +( +[OBJECT_ID] +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +) +GO + +ALTER TABLE [snprc_ehr].[HL7_OBR_Staging] ADD CONSTRAINT [DF_HL7_OBR_Staging_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] + GO + +ALTER TABLE [snprc_ehr].[HL7_OBR_Staging] ADD CONSTRAINT [DF_HL7_OBR_Staging_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] + GO + +ALTER TABLE [snprc_ehr].[HL7_OBR_Staging] ADD CONSTRAINT [DF_HL7_OBR_Staging_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] + GO + +ALTER TABLE [snprc_ehr].[HL7_OBR_Staging] WITH CHECK ADD CONSTRAINT [CKC_ENTRY_DATE_TM_HL7_OBR_Staging_OBR] CHECK (([ENTRY_DATE_TM]<=GETDATE())) + GO + +ALTER TABLE [snprc_ehr].[HL7_OBR_Staging] CHECK CONSTRAINT [CKC_ENTRY_DATE_TM_HL7_OBR_Staging_OBR] + GO + +ALTER TABLE [snprc_ehr].[HL7_OBR_Staging] WITH CHECK ADD CONSTRAINT [FK_OBR_REF_MSH] FOREIGN KEY([MESSAGE_ID]) + REFERENCES [snprc_ehr].[HL7_MSH_Staging] ([MESSAGE_ID]) + GO + +ALTER TABLE [snprc_ehr].[HL7_OBR_Staging] CHECK CONSTRAINT [FK_OBR_REF_MSH] + GO + +CREATE NONCLUSTERED INDEX [IDX_HL7_OBR_ID_DATE] ON [snprc_ehr].[HL7_OBR_Staging] +( + [ANIMAL_ID] ASC, + [OBSERVATION_DATE_TM] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +GO + +CREATE TABLE [snprc_ehr].[HL7_OBX_Staging]( + [MESSAGE_ID] [VARCHAR](50) NOT NULL, + [IDX] [INT] NOT NULL, + [OBR_OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, + [SET_ID] [VARCHAR](20) NOT NULL, + [OBR_SET_ID] [VARCHAR](20) NOT NULL, + [VALUE_TYPE] [VARCHAR](10) NULL, + [TEST_ID] [VARCHAR](20) NULL, + [TEST_NAME] [VARCHAR](30) NULL, + [OBSERVED_VALUE] [VARCHAR](MAX) NULL, + [UNITS] [VARCHAR](20) NULL, + [REFERENCE_RANGE] [VARCHAR](60) NULL, + [ABNORMAL_FLAGS] [VARCHAR](10) NULL, + [RESULT_STATUS] [VARCHAR](10) NULL, + [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, + [USER_NAME] [VARCHAR](128) NOT NULL, + [ENTRY_DATE_TM] [DATETIME] NOT NULL, + [TIMESTAMP] [TIMESTAMP] NULL, + CONSTRAINT [PK_HL7_OBX_Staging] PRIMARY KEY CLUSTERED +( + [OBJECT_ID] +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +) +GO + +ALTER TABLE [snprc_ehr].[HL7_OBX_Staging] ADD CONSTRAINT [DF_HL7_OBX_Staging_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] + GO + +ALTER TABLE [snprc_ehr].[HL7_OBX_Staging] ADD CONSTRAINT [DF_HL7_OBX_Staging_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] + GO + +ALTER TABLE [snprc_ehr].[HL7_OBX_Staging] ADD CONSTRAINT [DF_HL7_OBX_Staging_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] + GO + +ALTER TABLE [snprc_ehr].[HL7_OBX_Staging] WITH CHECK ADD CONSTRAINT [FK_OBX_REF_OBR] FOREIGN KEY([OBR_OBJECT_ID]) + REFERENCES [snprc_ehr].[HL7_OBR_Staging] ([OBJECT_ID]) + GO + +ALTER TABLE [snprc_ehr].[HL7_OBX_Staging] CHECK CONSTRAINT [FK_OBX_REF_OBR] + GO + +CREATE NONCLUSTERED INDEX [IDX_HL7_OBX_OBR_OBJ_ID] ON [snprc_ehr].[HL7_OBX_Staging] +( + [OBR_OBJECT_ID] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +GO + + +CREATE TABLE [snprc_ehr].[HL7_NTE_Staging]( + [MESSAGE_ID] [VARCHAR](50) NOT NULL, + [IDX] [INT] NOT NULL, + [OBR_OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, + [SET_ID] [VARCHAR](20) NOT NULL, + [OBR_SET_ID] [VARCHAR](20) NOT NULL, + [COMMENT] [VARCHAR](MAX) NULL, + [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, + [USER_NAME] [VARCHAR](128) NOT NULL, + [ENTRY_DATE_TM] [DATETIME] NOT NULL, + [TIMESTAMP] [TIMESTAMP] NULL, + CONSTRAINT [PK_HL7_NTE_Staging] PRIMARY KEY CLUSTERED +( + [OBJECT_ID] ASC + +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +) +GO + +ALTER TABLE [snprc_ehr].[HL7_NTE_Staging] ADD CONSTRAINT [DF_HL7_NTE_Staging_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] + GO + +ALTER TABLE [snprc_ehr].[HL7_NTE_Staging] ADD CONSTRAINT [DF_HL7_NTE_Staging_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] + GO + +ALTER TABLE [snprc_ehr].[HL7_NTE_Staging] ADD CONSTRAINT [DF_HL7_NTE_Staging_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] + GO + +ALTER TABLE [snprc_ehr].[HL7_NTE_Staging] WITH CHECK ADD CONSTRAINT [FK_NTE_REF_OBR] FOREIGN KEY([OBR_OBJECT_ID]) + REFERENCES [snprc_ehr].[HL7_OBR_Staging] ([OBJECT_ID]) + GO + +ALTER TABLE [snprc_ehr].[HL7_NTE_Staging] CHECK CONSTRAINT [FK_NTE_REF_OBR] + GO + +CREATE NONCLUSTERED INDEX [IDX_HL7_NTE_OBR_OBJ_ID] ON [snprc_ehr].[HL7_NTE_Staging] +( + [OBR_OBJECT_ID] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +GO + +CREATE TABLE [snprc_ehr].[HL7_IMPORT_LOG]( + [TID] [NUMERIC](18, 0) IDENTITY(1,1) NOT NULL, + [MESSAGE_ID] [VARCHAR](50) NOT NULL, + [OBSERVATION_DATE_TM] [DATETIME] NULL, + [MESSAGE_CONTROL_ID] [VARCHAR](50) NULL, + [IMPORT_STATUS] [INT] NOT NULL, + [RESULT_STATUS] [VARCHAR](10) NULL, + [PATIENT_ID] [VARCHAR](20) NULL, + [SPECIES] [VARCHAR](50) NULL, + [HL7_MESSAGE_TEXT] [VARCHAR](MAX) NULL, + [IMPORT_TEXT] [VARCHAR](MAX) NULL, + [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, + [USER_NAME] [VARCHAR](128) NOT NULL, + [ENTRY_DATE_TM] [DATETIME] NOT NULL, + [TIMESTAMP] [TIMESTAMP] NULL, + CONSTRAINT [PK_HL7_IMPORT_LOG] PRIMARY KEY CLUSTERED +( +[TID] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + ) + GO + +ALTER TABLE [snprc_ehr].[HL7_IMPORT_LOG] ADD DEFAULT (USER_NAME()) FOR [USER_NAME] + GO + +ALTER TABLE [snprc_ehr].[HL7_IMPORT_LOG] ADD DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] + GO + +ALTER TABLE [snprc_ehr].[HL7_IMPORT_LOG] ADD CONSTRAINT [DF_HL7_IMPROT_LOG_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] + GO + +ALTER TABLE [snprc_ehr].[HL7_IMPORT_LOG] WITH CHECK ADD CONSTRAINT [CKC_HL7_IMPORT_LOG_OBSERVATION_DATE] CHECK (([OBSERVATION_DATE_TM] IS NULL OR [OBSERVATION_DATE_TM]<=GETDATE())) + GO + +ALTER TABLE [snprc_ehr].[HL7_IMPORT_LOG] CHECK CONSTRAINT [CKC_HL7_IMPORT_LOG_OBSERVATION_DATE] + GO + + + diff --git a/snprc_ehr/resources/schemas/snprc_ehr.xml b/snprc_ehr/resources/schemas/snprc_ehr.xml index 682df3ab1..c42d5ff00 100644 --- a/snprc_ehr/resources/schemas/snprc_ehr.xml +++ b/snprc_ehr/resources/schemas/snprc_ehr.xml @@ -1995,4 +1995,246 @@ External Reports + + MESSAGE_ID + DETAILED + + + + + + + + + + + + + + + + + HL7 MSH STAGING +
+ + MESSAGE_ID, IDX + DETAILED + + + + + + + + snprc_ehr + HL7_MSH_STAGING + MESSAGE_ID + + + + + + + + + + + + + + + + + + HL7 PID STAGING +
+ + MESSAGE_ID, IDX + DETAILED + + + + + + + + snprc_ehr + HL7_MSH_STAGING + MESSAGE_ID + + + + + + + + + + + + + + + + HL7 PV1 STAGING +
+ + MESSAGE_ID, IDX + DETAILED + + + + + + + + snprc_ehr + HL7_MSH_STAGING + MESSAGE_ID + + + + + + + + + + + + + + + + + + HL7 ORC STAGING +
+ + OBJECT_ID + DETAILED + + + + + + + + snprc_ehr + HL7_MSH_STAGING + MESSAGE_ID + + + + varchar + http://cpas.labkey.com/Study#ParticipantId + + ptid + + + study + demographics + Id + + + + + + + + + + + + + + + + + + + + + + HL7 OBR STAGING +
+ + OBJECT_ID + DETAILED + + + + + + + + snprc_ehr + HL7_MSH_STAGING + MESSAGE_ID + + + + + + + + + + + + + + + + + HL7 OBX STAGING +
+ + OBJECT_ID + DETAILED + + + + + + + + snprc_ehr + HL7_MSH_STAGING + MESSAGE_ID + + + + + + + + + + HL7 NTE STAGING +
+ + TID + DETAILED + + + + + + + + + + + + + + + + + + + + HL7 IMPORT LOG +
diff --git a/snprc_ehr/resources/source_queries/HL7/Create_LIS_DemographicsHL7Staging.sql b/snprc_ehr/resources/source_queries/HL7/Create_LIS_DemographicsHL7Staging.sql new file mode 100644 index 000000000..1bcd793c3 --- /dev/null +++ b/snprc_ehr/resources/source_queries/HL7/Create_LIS_DemographicsHL7Staging.sql @@ -0,0 +1,39 @@ +USE animal +GO + +-- Create TAC schema if not exists +IF NOT EXISTS (SELECT 1 FROM sys.schemas WHERE name = 'LIS') +BEGIN + -- The schema must be run in its own batch! +EXEC( 'CREATE SCHEMA LIS' ); +END + +DROP TABLE IF EXISTS LIS.DemographicsHL7Staging; + +CREATE TABLE LIS.DemographicsHL7Staging +( + RowId INT IDENTITY, + Id VARCHAR(6) NOT NULL, + Gender CHAR(1) NULL, + BirthDate DATETIME NULL, + DeathDate DATETIME NULL, + Breed VARCHAR(2) NULL, -- arc_species_code + Species VARCHAR(MAX) NULL, -- common name + isAlive Varchar(1) NULL, -- Y/N/NULL + Sire VARCHAR(6) NULL, + Dam VARCHAR(6) NULL, + Modified DATETIME NULL, + ModifiedBy VARCHAR(MAX) NULL, + Processed INT DEFAULT 0 NOT NULL, -- will be 0 when data is exported, and stored procedure will update it to 1 when processed + ObjectId UNIQUEIDENTIFIER DEFAULT NEWID() NOT NULL, + CONSTRAINT PK_TAC_DemographicsHL7Staging + PRIMARY KEY CLUSTERED (RowId ASC) +) + +GO + +-- Table permissions +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON LIS.DemographicsHL7Staging TO z_labkey; +GRANT VIEW DEFINITION ON LIS.DemographicsHL7Staging TO z_labkey; + +GO \ No newline at end of file diff --git a/snprc_ehr/resources/source_queries/HL7/Create_LIS_HL7ExportErrorLog.sql b/snprc_ehr/resources/source_queries/HL7/Create_LIS_HL7ExportErrorLog.sql new file mode 100644 index 000000000..e8abd493f --- /dev/null +++ b/snprc_ehr/resources/source_queries/HL7/Create_LIS_HL7ExportErrorLog.sql @@ -0,0 +1,35 @@ +USE animal +GO +/* + Error log for demographics export errors +*/ +-- Create TAC schema if not exists +IF NOT EXISTS (SELECT 1 FROM sys.schemas WHERE name = 'LIS') +BEGIN + -- The schema must be run in its own batch! +EXEC( 'CREATE SCHEMA LIS' ); +END + +DROP TABLE IF EXISTS LIS.HL7ExportErrorLog; + +CREATE TABLE LIS.HL7ExportErrorLog +( + [RowId] [NUMERIC](18, 0) IDENTITY(1,1) NOT NULL, + [ObjectId] [VARCHAR](50) NOT NULL, + [ProcessedDateTm] [DATETIME] NULL, + [MessageControlId] [VARCHAR](50) NULL, + [PatientId] [VARCHAR](20) NULL, + [ErrorMsg] [VARCHAR](MAX) NULL, + [UserName] [VARCHAR](128) NOT NULL, + [EntryDateTm] [DATETIME] NOT NULL, + CONSTRAINT PK_TAC_HL7ExportErrorLog + PRIMARY KEY CLUSTERED (RowId ASC) +) + +GO + +-- Table permissions +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON LIS.HL7ExportErrorLog TO z_labkey; +GRANT VIEW DEFINITION ON LIS.HL7ExportErrorLog TO z_labkey; + +GO \ No newline at end of file diff --git a/snprc_ehr/resources/source_queries/HL7/Create_LIS_HL7ImportLog.sql b/snprc_ehr/resources/source_queries/HL7/Create_LIS_HL7ImportLog.sql new file mode 100644 index 000000000..f60a026a5 --- /dev/null +++ b/snprc_ehr/resources/source_queries/HL7/Create_LIS_HL7ImportLog.sql @@ -0,0 +1,44 @@ +USE animal +GO +/* + Import log for results from Orchard Harvest +*/ +-- Create TAC schema if not exists +IF NOT EXISTS (SELECT 1 FROM sys.schemas WHERE name = 'LIS') +BEGIN + -- The schema must be run in its own batch! +EXEC( 'CREATE SCHEMA LIS' ); +END + +DROP TABLE IF EXISTS LIS.HL7ImportLog; + +CREATE TABLE LIS.HL7ImportLog +( + [RowId] [NUMERIC](18, 0) IDENTITY(1,1) NOT NULL, + [MessageId] [VARCHAR](50) NOT NULL, + [ObservationDateTm] [DATETIME] NULL, + [MessageControlId] [VARCHAR](50) NULL, + [ImportStatus] [INT] NOT NULL, + [ResultStatis] [VARCHAR](10) NULL, + [PatientId] [VARCHAR](20) NULL, + [Species] [VARCHAR](50) NULL, + [HL7MessageText] [VARCHAR](MAX) NULL, + [ImportText] [VARCHAR](MAX) NULL, + [UserName] [VARCHAR](128) NOT NULL, + [EntryDateTm] [DATETIME] NOT NULL, + [TIMESTAMP] [TIMESTAMP] NULL, + CONSTRAINT PK_TAC_HL7ImportLog + PRIMARY KEY CLUSTERED (RowId ASC) +) +GO +ALTER TABLE [LIS].HL7ImportLog ADD DEFAULT (USER_NAME()) FOR [UserName] + GO + +ALTER TABLE [LIS].HL7ImportLog ADD DEFAULT (GETDATE()) FOR [EntryDateTm] + GO + +-- Table permissions +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON LIS.HL7ImportLog TO z_labkey; +GRANT VIEW DEFINITION ON LIS.HL7ImportLog TO z_labkey; + +GO \ No newline at end of file diff --git a/snprc_ehr/resources/source_queries/HL7/Create_LIS_f_format_hl7_date.sql b/snprc_ehr/resources/source_queries/HL7/Create_LIS_f_format_hl7_date.sql new file mode 100644 index 000000000..358d85d6a --- /dev/null +++ b/snprc_ehr/resources/source_queries/HL7/Create_LIS_f_format_hl7_date.sql @@ -0,0 +1,41 @@ +USE +[TAC_HL7_staging] +GO +/****** Object: UserDefinedFunction [dbo].[f_format_hl7_date] Script Date: 3/23/2022 11:14:18 AM ******/ +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +-- ============================================= +-- Author: Terry Hawkins +-- Create date: 1/30/2014 +-- Description: Converts a date and time string into MSSQL datetime format +-- ============================================= +CREATE FUNCTION [dbo].[f_format_hl7_date] +( + -- Add the parameters for the function here + @date_str VARCHAR(50) +) +RETURNS DATETIME + +AS +BEGIN + DECLARE +@ret_date DATETIME + IF LEN(@date_str) = 8 +BEGIN + --20140117 + SET +@ret_date = CAST(SUBSTRING(@date_str, 1,4)+ '-' + SUBSTRING(@date_str, 5,2) + '-' + SUBSTRING(@date_str,7,2) AS DATETIME) +END +ELSE +BEGIN + --201401171008 + SET +@ret_date = CAST(SUBSTRING(@date_str, 1,4)+ '-' + SUBSTRING(@date_str, 5,2) + '-' + SUBSTRING(@date_str,7,2) + + ' ' + SUBSTRING(@date_str, 9,2) + ':' + SUBSTRING(@date_str, 11,2) AS DATETIME) +END + +RETURN @ret_date + +END diff --git a/snprc_ehr/resources/source_queries/HL7/HL7_admin_permissions.sql b/snprc_ehr/resources/source_queries/HL7/HL7_admin_permissions.sql new file mode 100644 index 000000000..ca96d03d9 --- /dev/null +++ b/snprc_ehr/resources/source_queries/HL7/HL7_admin_permissions.sql @@ -0,0 +1,9 @@ +-- HL7_Admin permissions required for HL7 Schema Engine import +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_IMPORT_LOG TO HL7_Admin; +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_MSH_Staging TO HL7_Admin; +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_NTE_Staging TO HL7_Admin; +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_OBR_Staging TO HL7_Admin; +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_OBX_Staging TO HL7_Admin; +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_ORC_Staging TO HL7_Admin; +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_PID_Staging TO HL7_Admin; +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_PV1_Staging TO HL7_Admin; \ No newline at end of file diff --git a/snprc_ehr/resources/source_queries/HL7/create_LIS_p_load_demographics.sql b/snprc_ehr/resources/source_queries/HL7/create_LIS_p_load_demographics.sql new file mode 100644 index 000000000..776a5157a --- /dev/null +++ b/snprc_ehr/resources/source_queries/HL7/create_LIS_p_load_demographics.sql @@ -0,0 +1,422 @@ +USE [animal] +GO +/****** Object: StoredProcedure [LIS].[p_load_hl7_data] Script Date: 3/23/2022 11:17:35 AM ******/ +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +-- =============================================================== +-- Author: Terry Hawkins +-- Create date: 3/23/2022 +-- Description: loads demographics from TAC to HL7 data tables +-- Returns: +-- 0 Okay +-- -1 thru -99 Reserved by sql server for system errors +-- -101 General error +-- @@error SQL errors +-- +-- Changes: +-- +-- ================================================================= +ALTER PROCEDURE [LIS].[p_load_demographics] +AS +BEGIN + -- SET NOCOUNT ON added to prevent extra result sets from + -- interfering with SELECT statements. + SET NOCOUNT ON; + DECLARE + @errno INT, + @error INTEGER, + @errormsg VARCHAR(MAX), + @hl7_messageId VARCHAR(50), + @hl7_messageControl VARCHAR(50), + @hl7_processed_date_tm VARCHAR(20), + @msgCursor CURSOR, + + -- cursor columns: + @RowId INT, + @Id VARCHAR(6), + @Gender VARCHAR(1), + @BirthDate DATETIME2, + @DeathDate DATETIME2, + @Breed VARCHAR(2), + @Species VARCHAR(MAX), + @isAlive VARCHAR(1), + @Sire VARCHAR(6), + @Dam VARCHAR(6), + @Modified DATETIME2, + @ModifiedBy VARCHAR(MAX), + @Processed INT, + @ObjectId UNIQUEIDENTIFIER, + @date DATETIME + + SET @date = GETDATE() + SET @hl7_processed_date_tm = FORMAT(GETDATE(),'yyyyMMddHHmmss') + + + -- Start a new transaction + SET XACT_ABORT ON; + begin transaction trans1 + + set @msgCursor = CURSOR LOCAL FOR + SELECT RowId, + Id, + Gender, + BirthDate, + DeathDate, + Breed, + Species, + isAlive, + Sire, + Dam, + Modified, + ModifiedBy, + Processed, + ObjectId + FROM LIS.DemographicsHL7Staging AS h + WHERE h.Processed = 0 + ORDER BY RowId ASC + + FOR READ ONLY + + OPEN @msgCursor + + FETCH @msgCursor INTO @RowId, @Id, @Gender, @BirthDate, @DeathDate, @Breed, @Species, @isAlive, @Sire, @Dam, @Modified, @ModifiedBy, @Processed, @ObjectId + + WHILE (@@FETCH_STATUS = 0) + BEGIN + /* + 1. You must generate a UNIQUE MessageID. We use a GUID (Select NewID() in MS SQL Works just fine), but any guaranteed unique key value which will fit into the + MessageID columns is fine. + + */ + SET @hl7_messageId = NEWID() + SET @hl7_messageControl = FORMAT(GETDATE(),'yyyyMMddHHmmssffff') + + /* + Step 2. (NOTE that steps 2 and 3 are interchangeable). You should then insert the appropriate rows into the _MessageManifest table. Again this table + contains only 3 pertinent columns the MessageID (generated in step 1), the SegmentName (MSH, PID, EVN etc, etc) and the SegmentIDX which is the physical + sequence in which each segment should appear in the message. MSH = 1, and so on and so on. There should be 1 row in this table for every HL7 segment + which your message contains. This SegmentIDX column is used to link/list the IDX column in the underlying segment data tables. + */ + + BEGIN TRY + -- MSH + INSERT INTO tac_hl7_staging.dbo.TAC_MessageManifest + ( + MessageID, + SegmentName, + SegmentIDX + ) + VALUES + ( @hl7_messageId, -- MessageID - varchar(50) + 'MSH', -- SegmentName - varchar(10) + 1 -- SegmentIDX - int + ) + -- PID + INSERT INTO tac_hl7_staging.dbo.TAC_MessageManifest + ( + MessageID, + SegmentName, + SegmentIDX + ) + VALUES + ( @hl7_messageId, -- MessageID - varchar(50) + 'PID', -- SegmentName - varchar(10) + 2 -- SegmentIDX - int + ) + -- NTE + INSERT INTO tac_hl7_staging.dbo.TAC_MessageManifest + ( + MessageID, + SegmentName, + SegmentIDX + ) + VALUES + ( @hl7_messageId, -- MessageID - varchar(50) + 'NTE', -- SegmentName - varchar(10) + 3 -- SegmentIDX - int + ) + END TRY + BEGIN CATCH + select @error = @@ERROR + SELECT @errormsg = 'Error inserting message: *' + @hl7_messageid + '* during Step 2 ' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + goto error + END CATCH + + /* + Step 3. (NOTE that steps 2 and 3 are interchangeable). You then populate the underlying data tables by inserting rows with MessageID (generated in step 1) and IDX + (equal to the SegmentIDX from step 2) and then complete the data fields. IMPORTANT NOTE: If you are creating HL7 segment data for a segment which has 2 tables + associated with it (Like the IN1 segment or GT1 segment etc) then you must insert a row into BOTH the _A table and the _B table even if you aren't populating + any data fields other than the MessageID and the IDX. + */ + + + -- Insert row into MSH table (dbo.TAC_Segment_MSH_A) + BEGIN TRY + + INSERT INTO tac_hl7_staging.dbo.TAC_Segment_MSH_A + ( + MessageID, + IDX, + MSH_F3_C1, -- Sending Application + MSH_F4_C1, -- Sending Facility + MSH_F5_C1, -- Receiving Application + MSH_F7_C1, -- Date/Time ofMessage + MSH_F9_C1, -- Message Type + MSH_F9_C2, -- Trigger Event ID + MSH_F10_C1, -- Message Control ID + MSH_F11_C1, -- Processing ID + MSH_F12_C1 -- Version ID (HL7) + ) + VALUES + ( @hl7_messageId, + 1, + 'TAC', + 'SNPRC', + 'HARVEST', + @hl7_processed_date_tm, + 'ADT', -- Patient Administration + 'A08', -- Update patient information (event A08) + @hl7_messageControl, + 'P', -- Production + '2.3' + ) + + + -- Insert row into the PID table (dbo.TAC_Segment_PID_A) + -- ?? Where do Breed and Species go ?? + + INSERT INTO tac_hl7_staging.dbo.TAC_Segment_PID_A + ( + MessageID, + IDX, + PID_F1_C1, + PID_F2_C1, + PID_F3_C1, + PID_F7_C1, + PID_F8_C1, + PID_F10_C1, + PID_F22_C1, + PID_F29_C1, + PID_F30_C1 + ) + VALUES + ( @hl7_messageId, -- MessageID - varchar(50) + 2, -- IDX - int + '1', -- Set Id + @id, -- Patient_id (External ID) + @id, -- Patient_id (Internal ID) + FORMAT(@BirthDate,'yyyyMMddHHmm'), -- Date of Birth + @Gender, -- Sex + RTRIM(@Species), -- Race - Species + RTRIM(@Breed), -- Ethnic Group - Breed + FORMAT(@DeathDate,'yyyyMMddHHmm'), -- Patient Death Date and Time + @isAlive -- Patient Death Indicator + ) + + -- Insert row into the NTE table (dbo.TAC_Segment_NTE_A) + INSERT INTO tac_hl7_staging.dbo.TAC_Segment_NTE_A + ( + MessageID, + IDX, + NTE_F1_C1, + NTE_F2_C1, + NTE_F3_C1 + ) + VALUES + ( @hl7_messageId, -- MessageID - varchar(50) + 3, -- IDX - int + '1', -- NTE_F1_C1 - varchar(20) Set Id + 'Export Date', -- NTE_F2_C1 - varchar(20) Source of comment + FORMAT(GETDATE(),'yyyyMMddHHmmss') -- NTE_F3_C1 - varchar(max) Comment + ) + END TRY + BEGIN CATCH + select @error = @@ERROR + SELECT @errormsg = 'Error inserting message: *' + @hl7_messageid + '* during Step 3 ' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + goto error + END CATCH + + /* + Step 4. After you have done all of this then you will insert a row into the _HL7Data table using the MessageID (generated in step 1). + ANOTHER IMPORTANT NOTE: If you are creating messages that use HL7 Repeating fields or SubComponent values then make sure that you review the section on HL7 + Repeating Fields thoroughly. + */ + + -- Insert row into the TAC_HL7Data Table + BEGIN TRY + + INSERT INTO tac_hl7_staging.dbo.TAC_HL7Data + ( + MessageID, + VendorName, + VendorVersion, + MsgControl, + PartnerAPP, + DateLoaded, + LastLoaded, + LoadCount, + MsgType, + MsgEvent, + Outbound, + Inbound, + Processed, + Warnings, + Loaded, + SchemaLoaded, + StatusMessage, + ArchiveID, + HL7Format, + SegmentCount, + MessageSize, + HL7Message + ) + VALUES + ( @hl7_messageId, -- MessageID - varchar(50) + 'TAC', -- VendorName - varchar(50) + '2.3', -- VendorVersion - varchar(25) + @hl7_messageControl, -- MsgControl - varchar(50) + @hl7_messageControl, -- PartnerAPP - varchar(128) - recommended to use MsgControl ID + GETDATE(), -- DateLoaded - datetime + GETDATE(), -- LastLoaded - datetime + 1, -- LoadCount - int + 'ADT', -- MsgType - varchar(20) + 'A08', -- MsgEvent - varchar(20) + 1, -- Outbound - int + 0, -- Inbound - int + 0, -- Processed - int + 0, -- Warnings - int + 0, -- Loaded - int + 0, -- SchemaLoaded - int + '', -- StatusMessage - varchar(1024) + '', -- ArchiveID - varchar(50) + 0, -- HL7Format - int + 0, -- SegmentCount - int + 0, -- MessageSize - int + '' -- HL7Message - varchar(max) + ) + END TRY + BEGIN CATCH + select @error = @@ERROR + SELECT @errormsg = 'Error inserting message: *' + @hl7_messageid + '* during Step 4 ' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + goto error + END CATCH + + /* + Step 5. Mark the records in the staging table as processed (0 = unprocessed, 1 = processed) + */ + + -- update staging table + BEGIN TRY + UPDATE h + SET Processed = 1 + FROM animal.LIS.DemographicsHL7Staging AS h + WHERE h.ObjectId = @ObjectId + END TRY + BEGIN CATCH + select @error = @@ERROR + SELECT @errormsg = 'Error inserting message: *' + @hl7_messageid + '* during Step 5 ' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + goto error + END CATCH + + /* + Step. 6 add record to import log + */ + INSERT INTO LIS.HL7ImportLog + ( + MessageId, + ObservationDateTm, + MessageControlId, + ImportStatus, + ResultStatis, + PatientId, + Species, + HL7MessageText, + ImportText, + UserName, + EntryDateTm + ) + VALUES + ( @hl7_messageId, -- MessageId - varchar(50) + GETDATE(), -- ObservationDateTm - datetime + @hl7_messageControl, -- MessageControlId - varchar(50) + 1, -- ImportStatus - int + 'F', -- ResultStatis - varchar(10) + @Id, -- PatientId - varchar(20) + @Species, -- Species - varchar(50) + NULL, -- HL7MessageText - varchar(max) + 'Upload okay', -- ImportText - varchar(max) + @ModifiedBy, -- USER_NAME - varchar(128) + @Modified -- ENTRY_DATE_TM - datetime + ) + + -- next row + FETCH NEXT FROM @msgCursor INTO @RowId, @Id, @Gender, @BirthDate, @DeathDate, @Breed, @Species, @isAlive, @Sire, @Dam, @Modified, @ModifiedBy, @Processed, @ObjectId + + END + + CLOSE @msgCursor + DEALLOCATE @msgCursor + -- Jump over error handling + GOTO finis + + -- error handling + error: + ROLLBACK + + -- Update error log + INSERT INTO LIS.HL7ExportErrorLog + ( + ObjectId, + ProcessedDateTm, + MessageControlId, + PatientId, + ErrorMsg, + UserName, + EntryDateTm + ) + VALUES + ( @ObjectId, -- ObjectId of demographics row -- varchar(50) + GETDATE(), -- PROCESSED_DATE_TM - datetime + @hl7_messageControl, -- MESSAGE_CONTROL_ID - varchar(50) + @Id, -- PATIENT_ID - varchar(20) + @errormsg, -- ERROR_MSG - varchar(max) + @ModifiedBy, -- USER_NAME - varchar(128) + @Modified -- ENTRY_DATE_TM - datetime + ); + + -- Note to self: XACT_ABORT (set above) will rollback transaction + THROW 51000, @errormsg, 1 + +-- If no error occurred, commit the entire transaction. + finis: + + COMMIT transaction trans1 + + RETURN 0 + +END + + +GO + +-- Table permissions +GRANT EXEC ON LIS.p_load_demographics TO z_labkey; +GRANT VIEW DEFINITION ON LIS.p_load_demographics TO z_labkey; + +GO + +USE tac_hl7_staging +GO + +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON tac_hl7_staging.dbo.TAC_MessageManifest TO labkey; +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON tac_hl7_staging.dbo.TAC_Segment_MSH_A TO labkey; +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON tac_hl7_staging.dbo.TAC_Segment_PID_A TO labkey; +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON tac_hl7_staging.dbo.TAC_Segment_NTE_A TO labkey; +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON tac_hl7_staging.dbo.TAC_HL7Data TO labkey; + +GO + +USE animal +go \ No newline at end of file diff --git a/snprc_ehr/resources/source_queries/HL7/f_format_hl7_date.sql b/snprc_ehr/resources/source_queries/HL7/f_format_hl7_date.sql new file mode 100644 index 000000000..c17e2b45e --- /dev/null +++ b/snprc_ehr/resources/source_queries/HL7/f_format_hl7_date.sql @@ -0,0 +1,30 @@ +-- ============================================= +-- Author: Terry Hawkins +-- Create date: 1/30/2014 +-- Description: Converts an HL7 date and time string into MSSQL datetime format +-- ============================================= +ALTER FUNCTION [dbo].[f_format_hl7_date] +( + -- Add the parameters for the function here + @date_str VARCHAR(50) +) +RETURNS DATETIME + +AS +BEGIN + DECLARE @ret_date DATETIME + IF LEN(@date_str) = 8 +BEGIN + --20140117 + SET @ret_date = CAST(SUBSTRING(@date_str, 1,4)+ '-' + SUBSTRING(@date_str, 5,2) + '-' + SUBSTRING(@date_str,7,2) AS DATETIME) +END +ELSE +BEGIN + --201401171008 + SET @ret_date = CAST(SUBSTRING(@date_str, 1,4)+ '-' + SUBSTRING(@date_str, 5,2) + '-' + SUBSTRING(@date_str,7,2) + + ' ' + SUBSTRING(@date_str, 9,2) + ':' + SUBSTRING(@date_str, 11,2) AS DATETIME) +END + +RETURN @ret_date + +END diff --git a/snprc_ehr/resources/source_queries/HL7/p_load_hl7_data.sql b/snprc_ehr/resources/source_queries/HL7/p_load_hl7_data.sql new file mode 100644 index 000000000..b262125a8 --- /dev/null +++ b/snprc_ehr/resources/source_queries/HL7/p_load_hl7_data.sql @@ -0,0 +1,569 @@ +-- =============================================================== +-- Author: Terry Hawkins +-- Create date: 05/19/2022 +-- Description: loads HL7 results from Orchard Harvest +-- Returns: +-- 0 Okay +-- -1 thru -99 Reserved by sql server for system errors +-- -100 Illegal null value passed into procedure +-- -101 General error +-- -102 Illegal update column passed into procedure +-- @@error SQL errors +-- +-- Note: hl7_import_log import_status: +-- 1 == import okay +-- 2 == animal not found in master table or as a cage location +-- other == SQL server error number +-- +-- Changes: +-- +-- ================================================================= +alter PROCEDURE [dbo].[p_load_hl7_data] +( @MessageId VARCHAR(50)) +AS +BEGIN + -- SET NOCOUNT ON added to prevent extra result sets from + -- interfering with SELECT statements. + SET NOCOUNT ON; + declare + @rowcnt INTEGER, + @error INTEGER, + @errormsg VARCHAR(MAX), + @animal_id VARCHAR(7), + @hl7_message_text VARCHAR(MAX), + @hl7_message_control_id VARCHAR(50), + @hl7_result_status VARCHAR(10), + @hl7_species VARCHAR(50), + @hl7_observation_date_tm DATETIME, + @pos INT, + @patient_id VARCHAR(32), + @table_prefix VARCHAR(3) + + SET @animal_id = 'Unproc' + SET @hl7_message_text = 'Could not read message text.' + SET @hl7_message_control_id = 'Unprocessed.' + SET @hl7_result_status = 'Unproc' + SET @hl7_species = 'Unprocessed' + SET @hl7_observation_date_tm = '01-01-1900 00:00' + SET @table_prefix = 'ORC' + + + -- Start a new transaction +begin transaction trans1 + + -- Check for nulls in non-nullable columns + if @MessageId is Null + begin + select @error = -100 + SELECT @errormsg = 'MessageId argument is null.' + goto error + END + + + IF NOT Exists (Select MessageID From Orchard_hl7_staging.dbo.ORC_HL7Data Where MessageID = @MessageID) + BEGIN + SELECT @error = -100 + SELECT @errormsg = 'MessageId not found in the ORC_HL7Data table.' + GOTO error + END + + BEGIN TRY + -- set local variables + SELECT @hl7_message_text = hl7Message, + @hl7_message_control_id = MsgControl + FROM dbo.ORC_HL7Data WHERE MessageID = @messageId + + SELECT @hl7_result_status = OBR_F25_C1, + @hl7_observation_date_tm = dbo.f_format_hl7_date(OBR_F7_C1) + FROM dbo.ORC_Segment_OBR_A WHERE MessageID = @messageId + + -- make sure we are working with an animal record + SELECT @hl7_species = pid.PID_F10_C1, + @patient_id = pid.PID_F2_C1, + @animal_id = LTRIM(RTRIM(pid.PID_F2_C1)) + FROM dbo.ORC_Segment_PID_A AS pid WHERE pid.MessageID = @MessageId + + END TRY + BEGIN CATCH + SELECT @error = -101 + SELECT @errormsg = 'Error reading HL7 message data from staging database.' + GOTO error + END CATCH + -------------------------------------------------------------------------------------------------------- + -- insert into MSH table + BEGIN TRY + INSERT INTO labkey.snprc_ehr.HL7_MSH_Staging + ( MESSAGE_ID, + IDX, + SENDING_APPLICATION, + SENDING_FACILITY, + RECEIVING_APPLICATION, + RECEIVING_FACILITY, + MESSAGE_CONTROL_ID, + MESSAGE_DATE_TM + ) + + SELECT msh.MessageID, + msh.IDX, + msh.MSH_F3_C1, + msh.MSH_F4_C1, + msh.MSH_F5_C1, + msh.MSH_F5_C1, + msh.MSH_F10_C1, + dbo.f_format_hl7_date(msh.MSH_F7_C1) + + FROM Orchard_HL7_staging.dbo.ORC_segment_msh_a AS msh + WHERE msh.MessageId = @messageid + END TRY + BEGIN CATCH + select @error = -101 + SELECT @errormsg = 'Error inserting message: *' + @messageid + '* into HL7_MSH_Staging.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + goto error + END CATCH + -------------------------------------------------------------------------------------------------------- + -- insert into PID table + BEGIN TRY + INSERT INTO labkey.snprc_ehr.HL7_PID_Staging + ( + MESSAGE_ID, + IDX, + SET_ID, + PATIENT_ID_EXTERNAL, + PATIENT_ID_INTERNAL, + BIRTHDATE, + SEX, + BREED, + SPECIES, + ACCOUNT_NUMBER, + DEATH_DATE + ) + + ( SELECT + pid.MessageId, -- MESSAGE_ID - varchar(50) + pid.IDX, -- IDX - int + pid.PID_F1_C1, -- SET_ID - varchar(20) + pid.PID_F2_C1, -- PATIENT_ID_EXTERNAL - varchar(20) + pid.PID_F3_C1, -- PATIENT_ID_INTERNAL - varchar(20) + dbo.f_format_hl7_date(pid.PID_F7_C1), -- BIRTHDATE - datetime + pid.PID_F8_C1, -- SEX - varchar(20) + pid.PID_F10_C1, -- BREED - varchar(50) + pid.PID_F22_C1, -- SPECIES - varchar(50) + pid.PID_F18_C1, -- ACCOUNT_NUMBER - varchar(50) + dbo.f_format_hl7_date(pid.PID_F29_C1) + FROM Orchard_hl7_staging.dbo.ORC_Segment_PID_A as pid + where pid.messageID = @messageId + ) + END TRY + BEGIN CATCH + select @error = -101 + SELECT @errormsg = 'Error inserting message: *' + @messageid + '* into HL7_PID_Staging.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + goto error + END CATCH + -------------------------------------------------------------------------------------------------------- + -- insert into PV1 table + BEGIN TRY + INSERT INTO labkey.snprc_ehr.HL7_PV1_Staging + ( + MESSAGE_ID, + IDX, + SET_ID, + ADMISSION_TYPE, + ATTENDING_DOCTOR_LAST, + ATTENDING_DOCTOR_FIRST, + VISIT_NUMBER, + CHARGE_NUMBER, + ADMIT_DATE + ) + ( + SELECT + pv1.messageId, -- MESSAGE_ID - varchar(50) + pv1.IDX, -- IDX - int + pv1.PV1_F1_C1, -- SET_ID - varchar(20) + pv1.PV1_F4_C1, -- ADMISSION_TYPE - varchar(20) + pv1.PV1_F7_C2, -- ATTENDING_DOCTOR_LAST - varchar(50) + pv1.PV1_F7_C3, -- ATTENDING_DOCTOR_FIRST - varchar(50) + pv1.PV1_F19_C1, -- VISIT_NUMBER - varchar(20) + pv1.PV1_F22_C1, -- CHARGE_NUMBER - varchar(20) + dbo.f_format_hl7_date(pv1b.PV1_F44_C1) -- ADMIT_DATE + FROM Orchard_HL7_staging.dbo.ORC_Segment_PV1_A as pv1 + INNER JOIN Orchard_hl7_staging.dbo.ORC_Segment_PV1_B AS pv1b ON pv1b.MessageID = pv1.MessageID AND pv1b.IDX = pv1.IDX + WHERE pv1.MessageId = @messageId + ) + END TRY + BEGIN CATCH + select @error = -101 + SELECT @errormsg = 'Error inserting message: *' + @messageid + '* into HL7_PV1_Staging.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + goto error + END CATCH + + -------------------------------------------------------------------------------------------------------- + -- insert into OCR table + + BEGIN TRY + INSERT INTO labkey.snprc_ehr.HL7_ORC_Staging + ( + MESSAGE_ID, + IDX, + ORDER_CONTROL_CODE, + FILLER_ORDER_NUMBER, + ENTERED_BY_LAST, + ENTERED_BY_FIRST, + VERIFIED_BY_LAST, + VERIFIED_BY_FIRST, + ORDER_PROVIDER_LAST, + ORDER_PROVIDER_FIRST, + ORDER_DATE + ) + ( SELECT + orc.MessageId, -- MESSAGE_ID - varchar(50) + orc.IDX, -- IDX - int + orc.ORC_F1_C1, -- ORDER_CONTROL_CODE - varchar(20) + orc.ORC_F3_C1, -- FILLER_ORDER_NUMBER - varchar(22) + orc.ORC_F10_C2, -- ENTERED_BY_LAST - varchar(50) + orc.ORC_F10_C3, -- ENTERED_BY_FIRST - varchar(50) + orc.ORC_F11_C2, -- VERIFIED_BY_LAST - varchar(50) + orc.ORC_F11_C3, -- VERIFIED_BY_FIRST - varchar(50) + orc.ORC_F12_C2, -- ORDER_PROVIDER_LAST - varchar(50) + orc.ORC_F12_C3, -- ORDER_PROVIDER_FIRST - varchar(50) + dbo.f_format_hl7_date(orc.ORC_F15_C1) -- ORDER_DATE - datetime + + FROM Orchard_HL7_staging.dbo.ORC_Segment_ORC_A as orc + WHERE orc.MessageId = @messageId + ) + END TRY + BEGIN CATCH + select @error = -101 + SELECT @errormsg = 'Error inserting message: *' + @messageid + '* into HL7_ORC_Staging.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + goto error + END CATCH + +-- TODO: which table do we want to use as the demographics source - using Marvin.labkey database for development +-- TODO: Do we want to import data for location pool samples? Section is commented out for now +-- IF NOT EXISTS (SELECT 1 FROM labkey.StudyDataSet.c6d340_demographics AS m WHERE m.participantid = @animal_id) +-- BEGIN +-- SET @pos = PATINDEX('%[ -9][ -9][0-9][.][0-9][0-9]', @patient_id) -- pattern match a location code +-- IF @pos = 0 +-- SET @pos = PATINDEX('%[ -9][0-9][.][0-9][0-9]', @patient_id) +-- IF @pos = 0 +-- SET @pos = PATINDEX('%[0-9][.][0-9][0-9]', @patient_id) +-- IF @pos >= 1 +-- begin +-- SET @animal_id = LTRIM(SUBSTRING(@patient_id, @pos, LEN(@patient_id) - (@pos-1) )) +-- IF (SELECT COUNT(*) FROM animal.dbo.valid_locations AS vl WHERE vl.location = CAST(@animal_id as numeric(6,2)) ) < 1 +-- GOTO not_animal_data -- The sample is not for an animal or a location +-- END +-- END + + +-- TODO: currently using database: Marvin.labkey for development +-- This section removes cancelled orders from the animal DB tables +-- OBR result status = 'X' Order cancelled + + IF @hl7_result_status = 'X' + BEGIN + BEGIN TRY + -- remove observations + DELETE cpx + + FROM labkey.snprc_ehr.HL7_OBX_Staging AS cpx + INNER JOIN labkey.snprc_ehr.HL7_OBR_Staging AS cpr ON cpr.OBJECT_ID = cpx.OBR_OBJECT_ID + INNER JOIN Orchard_hl7_staging.dbo.ORC_segment_obr_a AS obr ON obr.messageID = @MessageId AND obr.OBR_F1_C1 = cpx.OBR_SET_ID + WHERE LTRIM(RTRIM(obr.OBR_F25_C1)) = 'X' -- Result_status = Order cancelled + END TRY + BEGIN CATCH + select @error = -101 + SELECT @errormsg = 'Error deleting message: *' + @messageid + '* from HL7_OBX_Staging.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + goto error + END CATCH + + -- remove notes + BEGIN TRY + DELETE cpn + + FROM labkey.snprc_ehr.HL7_NTE_Staging AS cpn + JOIN labkey.snprc_ehr.HL7_OBR_Staging AS cpr ON cpr.OBJECT_ID = cpn.OBR_OBJECT_ID + JOIN dbo.ORC_segment_obr_a AS obr ON obr.messageID = @MessageId AND obr.OBR_F1_C1 = cpn.OBR_SET_ID + WHERE LTRIM(RTRIM(obr.OBR_F25_C1)) = 'X' -- Result_status = Order cancelled + END TRY + BEGIN CATCH + select @error = -101 + SELECT @errormsg = 'Error deleting message: *' + @messageid + '* from HL7_NTE_Staging.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + goto error + END CATCH + + -- update observation request + BEGIN TRY + UPDATE cpr + SET RESULT_STATUS = 'X' + + FROM labkey.snprc_ehr.HL7_OBR_Staging AS cpr + JOIN dbo.ORC_segment_obr_a AS obr ON obr.messageID = @MessageId AND cpr.Set_ID = obr.OBR_F1_C1 + WHERE LTRIM(RTRIM(obr.OBR_F25_C1)) = 'X' -- Result_status = Order cancelled + + END TRY + BEGIN CATCH + select @error = -101 + SELECT @errormsg = 'Error updating message: *' + @messageid + '* from HL7_OBR_Staging.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + goto error + END CATCH + + -- all processing finished jump to clean exit routine + + INSERT INTO labkey.snprc_ehr.HL7_IMPORT_LOG (MESSAGE_ID, OBSERVATION_DATE_TM, MESSAGE_CONTROL_ID, + IMPORT_STATUS, RESULT_STATUS, PATIENT_ID, SPECIES, HL7_MESSAGE_TEXT, IMPORT_TEXT) + VALUES (@messageId,@hl7_observation_date_tm, @hl7_message_control_id, 1, @hl7_result_status, + @animal_id, @hl7_species, @hl7_message_text, 'Record cancelled: okay.') + + GOTO finis +END + +-- Process messeges for new results +-- +IF @hl7_result_status = 'F' OR @hl7_result_status = 'C' OR @hl7_result_status = 'D' +BEGIN + -- RESULT_STATUS = 'F' + DECLARE @obr_object_id UNIQUEIDENTIFIER + DECLARE @ObjectId_TableVar TABLE (ObjectId UNIQUEIDENTIFIER, tid INT Identity) + + + BEGIN TRY + INSERT INTO labkey.snprc_ehr.HL7_OBR_Staging + + ( MESSAGE_ID , + IDX, + MESSAGE_CONTROL_ID , + ANIMAL_ID , + VERIFIED_DATE_TM, + REQUESTED_DATE_TM , + OBSERVATION_DATE_TM , + SPECIMEN_RECEIVED_DATE_TM, + SET_ID, + SPECIMEN_NUM , + PROCEDURE_ID , + PROCEDURE_NAME , + PRIORITY , + RESULT_STATUS , + TECHNICIAN_NAME , + TECHNICIAN_INITIALS, + CHARGE_ID, + OBJECT_ID + ) + + SELECT obr.MessageID, + obr.IDX, + msh.MSH_F10_C1, + @animal_id, + dbo.f_format_hl7_date(obr.OBR_F22_C1), -- verified_date_tm + dbo.f_format_hl7_date(obr.OBR_F6_C1), -- requested_date_tm + dbo.f_format_hl7_date(obr.OBR_F7_C1), -- observation_date_tm + dbo.f_format_hl7_date(obr.OBR_F14_C1), -- specimen_received_date_tm + obr.OBR_F1_C1, -- Set_ID + obr.OBR_F3_C1, --Filler Order Number + obr.OBR_F4_C1, -- Procedure ID + obr.OBR_F4_C2, -- Procedure Name + obr.OBR_F5_C1, -- Priority + LTRIM(RTRIM(obr.OBR_F25_C1)), -- Result status + obr.OBR_F34_C2, -- Technicial Name + NULL, -- Technician Initials + pv1.PV1_F24_C1, --charge_id -- TODO: maps to HL7 Contract Code + NEWID() -- object_ID + + FROM dbo.ORC_segment_obr_a AS obr + JOIN dbo.ORC_segment_pid_a AS pid ON pid.MessageID = obr.MessageID + JOIN dbo.ORC_Segment_MSH_A AS msh ON msh.MessageID = obr.MessageID + JOIN dbo.ORC_Segment_PV1_A AS pv1 ON pv1.MessageID = obr.MessageID + -- only load rows for animal_ids in master + --JOIN dbo.master AS m ON right(' '+ LTRIM(RTRIM(pid.PID_F2_C1)),6) = m.id + JOIN dbo.ORC_HL7Data AS h ON h.MessageID = obr.MessageID + -- ignore rows that are currently being processed + WHERE obr.MessageId = @MessageId + AND LTRIM(RTRIM(obr.OBR_F25_C1)) = 'F' + END TRY + BEGIN CATCH + select @error = -101 + SELECT @errormsg = 'Error inserting message: *' + @messageid + '* into HL7_OBR_Staging.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + goto error + END CATCH + + + + BEGIN TRY + -- This is a little tricky. The OBR and OBX records match on MessageId; however multiple OBR records can be in a single message. + -- If that happens, the IDX value of the OBX records that match a given OBR record will be one greater than the OBR's IDX value, + -- and will increment to be one less than the next OBR's IDX value. The LEAD function is used to get the next OBR.IDX value and + -- the OBX records are constrained by the OBR.IDX and OBR.next_OBR_IDX. A CTE is used to select the OBR records. + + -- get OBR's ObjectId + select @obr_object_id = (select ObjectId from @ObjectId_TableVar + WHERE tid = (SELECT MAX(tid) from @ObjectId_TableVar)) + -- New OBX records + ;WITH cte AS ( + + SELECT OBR.MessageId, OBR.IDX AS OBR_IDX, OBR.OBR_F1_C1 AS SET_ID, OBR.OBR_F25_C1 as RESULT_STATUS, cbr.OBJECT_ID as obr_object_id, + LEAD(OBR.IDX, 1, 9999) OVER (ORDER BY OBR.IDX) AS next_OBR_IDX + + FROM [Orchard_hl7_staging].[dbo].[ORC_Segment_OBR_A] AS OBR + INNER JOIN labkey.snprc_ehr.HL7_OBR_Staging as cbr on OBR.messageId = cbr.Message_ID and OBR.OBR_F1_C1 = cbr.SET_ID + WHERE OBR.MessageId = @messageId + ) + + INSERT INTO labkey.snprc_ehr.HL7_OBX_Staging + ( MESSAGE_ID , + IDX, + OBR_OBJECT_ID, + SET_ID, + OBR_SET_ID, + VALUE_TYPE , + TEST_ID , + TEST_NAME , + OBSERVED_VALUE , + UNITS , + REFERENCE_RANGE , -- TODO: missing reference ranges in Orchard data + ABNORMAL_FLAGS , -- TODO: ditto ditto + RESULT_STATUS -- TODO: ditto ditto + ) -- output Inserted.OBR_OBJECT_ID + + SELECT obx.MessageID, + obx.IDX, + cte.obr_object_id, + obx.OBX_F1_C1, + cte.SET_ID, -- OBR SET ID + obx.OBX_F2_C1, + obx.OBX_F3_C1, + obx.OBX_F3_C2, + obx.OBX_RESULTDATA, + obx.OBX_F6_C1, + obx.OBX_F7_C1, + obx.OBX_F8_C1, + obx.OBX_F11_C1 + FROM dbo.ORC_segment_obx_a AS obx + INNER JOIN cte ON OBX.MessageID = cte.MessageID AND obx.IDX > cte.OBR_IDX AND obx.IDX < cte.next_OBR_IDX + + -- only load data with result_status = 'F' (final). + AND cte.RESULT_STATUS = 'F' + + END TRY + BEGIN CATCH + select @error = -101 + SELECT @errormsg = 'Error inserting message: *' + @messageid + '* into HL7_OBX_Staging.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + goto error + END CATCH + + -- New NTE records + BEGIN TRY + ;WITH cte AS ( + + SELECT OBR.MessageId, OBR.IDX AS OBR_IDX, OBR.OBR_F1_C1 AS SET_ID, OBR.OBR_F25_C1 as RESULT_STATUS, cbr.OBJECT_ID as obr_object_id, + LEAD(OBR.IDX, 1, 9999) OVER (ORDER BY OBR.IDX) AS next_OBR_IDX + + FROM [Orchard_hl7_staging].[dbo].[ORC_Segment_OBR_A] AS OBR + INNER JOIN labkey.snprc_ehr.HL7_OBR_Staging as cbr on OBR.messageId = cbr.Message_ID and OBR.OBR_F1_C1 = cbr.SET_ID + WHERE OBR.MessageId = @messageId + ) + INSERT INTO labkey.snprc_ehr.HL7_NTE_Staging + ( MESSAGE_ID , + IDX, + OBR_OBJECT_ID, + SET_ID, + OBR_SET_ID, + COMMENT + ) + SELECT nte.MessageID, + nte.IDX, + cte.obr_object_id, + nte.NTE_F1_C1, + cte.SET_ID, -- OBR_SET_ID + nte.NTE_F3_C1 + FROM Orchard_hl7_staging.dbo.ORC_Segment_NTE_A AS nte + INNER JOIN cte ON nte.MessageID = cte.messageId AND nte.IDX > cte.OBR_IDX AND nte.IDX < cte.next_OBR_IDX + -- only load data with result_status = 'F' (final). + AND cte.RESULT_STATUS = 'F' + END TRY + BEGIN CATCH + select @error = -101 + SELECT @errormsg = 'Error inserting message: *' + @messageid + '* into HL7_OBR_Staging.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + goto error + END CATCH + + + -- Process messeges for corrected results + -- RESULT_STATUS = 'C' for corrected entries, 'D' for deleted entries + -- OBR entries don't change + Begin TRY + ;WITH cte AS ( + + SELECT OBR.MessageId, OBR.IDX AS OBR_IDX, OBR.OBR_F1_C1 AS SET_ID, OBR.OBR_F25_C1 as RESULT_STATUS, cbr.OBJECT_ID as obr_object_id, + LEAD(OBR.IDX, 1, 9999) OVER (ORDER BY OBR.IDX) AS next_OBR_IDX + + FROM [Orchard_hl7_staging].[dbo].[ORC_Segment_OBR_A] AS OBR + INNER JOIN labkey.snprc_ehr.HL7_OBR_Staging as cbr on OBR.messageId = cbr.Message_ID and OBR.OBR_F1_C1 = cbr.SET_ID + WHERE OBR.MessageId = @messageId + ) + + UPDATE cpx + SET -- cpx.MESSAGE_ID = , -- leave intact (needed to join with obr data) + -- cpx.SET_ID = , -- ditto (needed for ordering data) + -- cpx.VALUE_TYPE = , -- ditto (should not change) + -- cpx.TEST_ID = , -- ditto ditto + -- cpx.TEST_NAME ', -- ditto ditto + cpx.OBSERVED_VALUE = CASE WHEN obx.OBX_F11_C1 = 'D' then '00' else obx.OBX_RESULTDATA END, + -- cpx.UNITS = , -- leave intact (should not change) + -- cpx.REFERENCE_RANGE , -- ditto ditto + cpx.ABNORMAL_FLAGS = CASE WHEN obx.OBX_F11_C1 = 'D' then NULL else obx.OBX_F8_C1 END, + cpx.RESULT_STATUS = obx.OBX_F11_C1 + + FROM labkey.snprc_ehr.HL7_OBX_Staging AS cpx + INNER JOIN cte ON cpx.Message_ID = cte.MessageID AND cpx.IDX > cte.OBR_IDX AND cpx.IDX < cte.next_OBR_IDX + INNER JOIN Orchard_hl7_staging.dbo.ORC_segment_obx_a as OBX on cpx.MESSAGE_ID = OBX.MessageId and cpx.IDX = OBX.IDX + -- only update data with obx result_status = 'C' or 'D' (corrected or deleted entries) + WHERE RTRIM(LTRIM(obx.OBX_F11_C1)) in ('C', 'D') + + END TRY + BEGIN CATCH + select @error = -101 + SELECT @errormsg = 'Error processing message: *' + @messageid + '* for update of HL7_OBX_Staging.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + goto error + END CATCH + + -- all processing finished jump to clean exit routine + + INSERT INTO labkey.snprc_ehr.HL7_IMPORT_LOG (MESSAGE_ID, OBSERVATION_DATE_TM, MESSAGE_CONTROL_ID, IMPORT_STATUS, RESULT_STATUS, PATIENT_ID, SPECIES, HL7_MESSAGE_TEXT, IMPORT_TEXT) + VALUES (@messageId,@hl7_observation_date_tm, @hl7_message_control_id, 1, @hl7_result_status, @animal_id, @hl7_species, @hl7_message_text, 'upload okay.') + + + GOTO finis +END +not_animal_data: + + + INSERT INTO labkey.snprc_ehr.HL7_IMPORT_LOG (MESSAGE_ID, OBSERVATION_DATE_TM, MESSAGE_CONTROL_ID, IMPORT_STATUS, RESULT_STATUS, PATIENT_ID, SPECIES, HL7_MESSAGE_TEXT, IMPORT_TEXT) + VALUES (@messageId, @hl7_observation_date_tm, @hl7_message_control_id, 2, @hl7_result_status, @animal_id, @hl7_species, @hl7_message_text, 'Not animal data.') + + GOTO finis + +error: + -- an error occurred, rollback the entire transaction. + rollback transaction trans1 + + INSERT INTO labkey.snprc_ehr.HL7_IMPORT_LOG (MESSAGE_ID, OBSERVATION_DATE_TM, MESSAGE_CONTROL_ID, IMPORT_STATUS, RESULT_STATUS, PATIENT_ID, SPECIES, HL7_MESSAGE_TEXT, IMPORT_TEXT) + VALUES (@messageId, @hl7_observation_date_tm, @hl7_message_control_id, @error, @hl7_result_status, @animal_id, @hl7_species, @hl7_message_text, @errorMsg) + + Update Orchard_hl7_staging.dbo.ORC_HL7Data Set Processed = 1, StatusMessage = 'ERROR: Processed By p_load_hl7_data.sql' Where MessageID = @MessageID + + return @error + +-- If no error occurred, commit the entire transaction. +finis: + + Update Orchard_hl7_staging.dbo.ORC_HL7Data Set Processed = 1, StatusMessage = 'SUCCESS: Processed By p_load_hl7_data.sql' Where MessageID = @MessageID + commit transaction trans1 + + return 0 + +END + + +GRANT EXEC ON LIS.p_load_hl7_data TO hl7_admin; +GRANT VIEW DEFINITION ON LIS.p_load_demographics TO hl7_admin; + +GO \ No newline at end of file From e3e5578f23e30fb4f6d831272fda5ebd7b07e2c2 Mon Sep 17 00:00:00 2001 From: Terry J Hawkins Date: Tue, 14 Jun 2022 11:29:34 -0500 Subject: [PATCH 02/17] Added missing remark column to labwork pivot queries (#452) (#459) * - Added remark column to Culture pivot report - fixed foreign key * - Added remark column to Chemistry pivot report * - Added remark column to Hematology pivot report - fixed foreign key * - re-fixed CulturePivot foreign key * - Fixed remark value in MiscPivot - fixed foreign key * - Add remark value to Parasitology pivot - fixed foreign key * - Add remark value to Parasitology O&P pivot - fixed foreign key * - Add remark value to Surveillance pivot - fixed foreign key * - Add remark value to Urinalysis pivot - fixed foreign key --- snprc_ehr/resources/queries/study/CulturePivot.query.xml | 2 +- snprc_ehr/resources/queries/study/CulturePivot.sql | 3 ++- snprc_ehr/resources/queries/study/ParasitologyPivot.query.xml | 2 +- snprc_ehr/resources/queries/study/ParasitologyPivot.sql | 3 ++- .../resources/queries/study/ParasitologyPivotOP.query.xml | 2 +- snprc_ehr/resources/queries/study/ParasitologyPivotOP.sql | 3 ++- snprc_ehr/resources/queries/study/chemPivot.sql | 3 ++- snprc_ehr/resources/queries/study/chemPivotInner.sql | 1 + snprc_ehr/resources/queries/study/hematologyPivot.query.xml | 2 +- snprc_ehr/resources/queries/study/hematologyPivot.sql | 3 ++- snprc_ehr/resources/queries/study/hematologyPivotInner.sql | 1 + snprc_ehr/resources/queries/study/miscPivot.query.xml | 2 +- snprc_ehr/resources/queries/study/miscPivot.sql | 4 ++-- snprc_ehr/resources/queries/study/miscPivotInner.sql | 2 +- snprc_ehr/resources/queries/study/surveillancePivot.query.xml | 2 +- snprc_ehr/resources/queries/study/surveillancePivot.sql | 3 ++- snprc_ehr/resources/queries/study/surveillancePivotInner.sql | 3 +++ snprc_ehr/resources/queries/study/urinalysisPivot.query.xml | 2 +- snprc_ehr/resources/queries/study/urinalysisPivot.sql | 3 ++- snprc_ehr/resources/queries/study/urinalysisPivotInner.sql | 1 + 20 files changed, 30 insertions(+), 17 deletions(-) diff --git a/snprc_ehr/resources/queries/study/CulturePivot.query.xml b/snprc_ehr/resources/queries/study/CulturePivot.query.xml index f0f663990..733b7c629 100644 --- a/snprc_ehr/resources/queries/study/CulturePivot.query.xml +++ b/snprc_ehr/resources/queries/study/CulturePivot.query.xml @@ -21,7 +21,7 @@ study ClinpathRuns - message_id + objectid diff --git a/snprc_ehr/resources/queries/study/CulturePivot.sql b/snprc_ehr/resources/queries/study/CulturePivot.sql index 2c20d003e..bcbebe482 100644 --- a/snprc_ehr/resources/queries/study/CulturePivot.sql +++ b/snprc_ehr/resources/queries/study/CulturePivot.sql @@ -24,6 +24,7 @@ SELECT p.date, p.serviceTestId.testName as TestName, p.runId.serviceRequested as PanelName, + p.remark, GROUP_CONCAT(p.qualresult) as QResults FROM study.labworkResults as p @@ -32,7 +33,7 @@ FROM study.labworkResults as p and lt.ServiceId.Dataset='Culture' where p.id is not null - group by p.runid, p.Id, p.date,p.serviceTestId.testName, p.runId.serviceRequested + group by p.runid, p.Id, p.date,p.serviceTestId.testName, p.remark, p.runId.serviceRequested PIVOT QResults by TestName IN (select t.testName from snprc_ehr.labwork_panels t where t.includeInPanel = true diff --git a/snprc_ehr/resources/queries/study/ParasitologyPivot.query.xml b/snprc_ehr/resources/queries/study/ParasitologyPivot.query.xml index 403eda07d..484397090 100644 --- a/snprc_ehr/resources/queries/study/ParasitologyPivot.query.xml +++ b/snprc_ehr/resources/queries/study/ParasitologyPivot.query.xml @@ -21,7 +21,7 @@ study ClinpathRuns - message_id + objectid diff --git a/snprc_ehr/resources/queries/study/ParasitologyPivot.sql b/snprc_ehr/resources/queries/study/ParasitologyPivot.sql index 75c0afd84..bc3b2aaf1 100644 --- a/snprc_ehr/resources/queries/study/ParasitologyPivot.sql +++ b/snprc_ehr/resources/queries/study/ParasitologyPivot.sql @@ -22,6 +22,7 @@ SELECT p.runid, p.Id, p.date, + p.remark, p.serviceTestId.testName as TestName, p.runId.serviceRequested as PanelName, GROUP_CONCAT(p.qualresult) as QResults @@ -33,7 +34,7 @@ FROM study.labworkResults as p where p.id is not null and p.runId.serviceRequested not in ('OVA & PARASITES','OVA & PARASITES, URINE') -group by p.runid, p.Id, p.date,p.serviceTestId.testName, p.runId.serviceRequested +group by p.runid, p.Id, p.date,p.serviceTestId.testName, p.runId.serviceRequested, p.remark PIVOT QResults by TestName IN (select TestName from snprc_ehr.labwork_panels t where t.includeInPanel = true diff --git a/snprc_ehr/resources/queries/study/ParasitologyPivotOP.query.xml b/snprc_ehr/resources/queries/study/ParasitologyPivotOP.query.xml index 77d271bd2..b3886b305 100644 --- a/snprc_ehr/resources/queries/study/ParasitologyPivotOP.query.xml +++ b/snprc_ehr/resources/queries/study/ParasitologyPivotOP.query.xml @@ -27,7 +27,7 @@ study ClinpathRuns - message_id + objectid diff --git a/snprc_ehr/resources/queries/study/ParasitologyPivotOP.sql b/snprc_ehr/resources/queries/study/ParasitologyPivotOP.sql index 0dde51474..667ca0798 100644 --- a/snprc_ehr/resources/queries/study/ParasitologyPivotOP.sql +++ b/snprc_ehr/resources/queries/study/ParasitologyPivotOP.sql @@ -25,6 +25,7 @@ SELECT p.date, p.serviceTestId.testName as TestName, p.runId.serviceRequested as PanelName, + p.remark, GROUP_CONCAT(p.qualresult) as QResults FROM study.labworkResults as p @@ -34,7 +35,7 @@ FROM study.labworkResults as p where p.id is not null and p.runId.serviceRequested in ('OVA & PARASITES' ,'OVA & PARASITES, URINE') -group by p.runid, p.Id, p.date, p.serviceTestId.testName, p.runId.serviceRequested +group by p.runid, p.Id, p.date,p.remark, p.serviceTestId.testName, p.runId.serviceRequested PIVOT QResults by TestName IN (select TestName from snprc_ehr.labwork_panels t where t.includeInPanel = true diff --git a/snprc_ehr/resources/queries/study/chemPivot.sql b/snprc_ehr/resources/queries/study/chemPivot.sql index 7f35ad8eb..55329ed5d 100644 --- a/snprc_ehr/resources/queries/study/chemPivot.sql +++ b/snprc_ehr/resources/queries/study/chemPivot.sql @@ -19,11 +19,12 @@ b.date, b.runId, b.panelName, b.TestName, +b.remark, MAX(b.result) as results FROM chemPivotInner b -GROUP BY b.runid,b.id, b.date, b.TestName, b.panelName +GROUP BY b.runid,b.id, b.date, b.TestName, b.panelName, b.remark PIVOT results BY TestName IN (select TestName from snprc_ehr.labwork_panels t diff --git a/snprc_ehr/resources/queries/study/chemPivotInner.sql b/snprc_ehr/resources/queries/study/chemPivotInner.sql index b1a0b8435..92c804c7f 100644 --- a/snprc_ehr/resources/queries/study/chemPivotInner.sql +++ b/snprc_ehr/resources/queries/study/chemPivotInner.sql @@ -20,6 +20,7 @@ SELECT b.serviceTestId.testName AS TestName, coalesce(b.runId, b.objectid) as runId, + b.remark, b.resultoorindicator, CASE WHEN b.result IS NULL THEN b.qualresult diff --git a/snprc_ehr/resources/queries/study/hematologyPivot.query.xml b/snprc_ehr/resources/queries/study/hematologyPivot.query.xml index fc35e3110..1c97f72c2 100644 --- a/snprc_ehr/resources/queries/study/hematologyPivot.query.xml +++ b/snprc_ehr/resources/queries/study/hematologyPivot.query.xml @@ -27,7 +27,7 @@ study ClinpathRuns - message_id + objectid diff --git a/snprc_ehr/resources/queries/study/hematologyPivot.sql b/snprc_ehr/resources/queries/study/hematologyPivot.sql index 92404fec1..8141a936e 100644 --- a/snprc_ehr/resources/queries/study/hematologyPivot.sql +++ b/snprc_ehr/resources/queries/study/hematologyPivot.sql @@ -19,11 +19,12 @@ b.date, b.runid, b.panelName, b.TestName, +b.remark, MAX(b.result) as results FROM hematologyPivotInner b -GROUP BY b.runid, b.panelName, b.id, b.date, b.TestName +GROUP BY b.runid, b.panelName, b.id, b.date, b.TestName, b.remark PIVOT results BY TestName IN (select TestName from snprc_ehr.labwork_panels t diff --git a/snprc_ehr/resources/queries/study/hematologyPivotInner.sql b/snprc_ehr/resources/queries/study/hematologyPivotInner.sql index d33cf01c7..65c46c5ca 100644 --- a/snprc_ehr/resources/queries/study/hematologyPivotInner.sql +++ b/snprc_ehr/resources/queries/study/hematologyPivotInner.sql @@ -19,6 +19,7 @@ SELECT b.runId.serviceRequested as panelName, b.serviceTestId.testName AS TestName, coalesce(b.runId, b.objectid) as runId, + b.remark, b.resultoorindicator, CASE WHEN b.result IS NULL THEN b.qualresult diff --git a/snprc_ehr/resources/queries/study/miscPivot.query.xml b/snprc_ehr/resources/queries/study/miscPivot.query.xml index 82c22a9e6..af387c9e1 100644 --- a/snprc_ehr/resources/queries/study/miscPivot.query.xml +++ b/snprc_ehr/resources/queries/study/miscPivot.query.xml @@ -27,7 +27,7 @@ study ClinpathRuns - message_id + objectid diff --git a/snprc_ehr/resources/queries/study/miscPivot.sql b/snprc_ehr/resources/queries/study/miscPivot.sql index c9711eaea..529b59bb0 100644 --- a/snprc_ehr/resources/queries/study/miscPivot.sql +++ b/snprc_ehr/resources/queries/study/miscPivot.sql @@ -19,12 +19,12 @@ SELECT b.runId, b.panelName, b.TestName, + b.remark, MAX(b.result) as results, - (select group_concat(a.remark) from study.labworkResults as a where a.runId = b.runId) as remark FROM miscPivotInner b -GROUP BY b.runid,b.id, b.date, b.TestName, b.panelName +GROUP BY b.runid,b.id, b.date, b.TestName, b.panelName, b.remark PIVOT results BY TestName IN (select TestName from snprc_ehr.labwork_panels t diff --git a/snprc_ehr/resources/queries/study/miscPivotInner.sql b/snprc_ehr/resources/queries/study/miscPivotInner.sql index d02d0b04b..baf255c3c 100644 --- a/snprc_ehr/resources/queries/study/miscPivotInner.sql +++ b/snprc_ehr/resources/queries/study/miscPivotInner.sql @@ -18,7 +18,7 @@ SELECT b.date, b.runId.serviceRequested as panelName, b.serviceTestId.testName AS TestName, - + b.remark, coalesce(b.runId, b.objectid) as runId, b.resultoorindicator, CASE diff --git a/snprc_ehr/resources/queries/study/surveillancePivot.query.xml b/snprc_ehr/resources/queries/study/surveillancePivot.query.xml index 8edccfc0e..b0b00a033 100644 --- a/snprc_ehr/resources/queries/study/surveillancePivot.query.xml +++ b/snprc_ehr/resources/queries/study/surveillancePivot.query.xml @@ -27,7 +27,7 @@ study ClinpathRuns - message_id + objectid diff --git a/snprc_ehr/resources/queries/study/surveillancePivot.sql b/snprc_ehr/resources/queries/study/surveillancePivot.sql index 07a1e08d5..143bb8318 100644 --- a/snprc_ehr/resources/queries/study/surveillancePivot.sql +++ b/snprc_ehr/resources/queries/study/surveillancePivot.sql @@ -19,11 +19,12 @@ b.date, b.runid, b.panelName, b.TestName, +b.remark, MAX(b.result) as results FROM surveillancePivotInner b -GROUP BY b.runid, b.panelName, b.id, b.date, b.TestName +GROUP BY b.runid, b.panelName, b.id, b.date, b.TestName, b.remark PIVOT results BY TestName IN (select TestName from snprc_ehr.labwork_panels t diff --git a/snprc_ehr/resources/queries/study/surveillancePivotInner.sql b/snprc_ehr/resources/queries/study/surveillancePivotInner.sql index c146fb112..d0cc20e76 100644 --- a/snprc_ehr/resources/queries/study/surveillancePivotInner.sql +++ b/snprc_ehr/resources/queries/study/surveillancePivotInner.sql @@ -24,6 +24,7 @@ SELECT b.serviceTestId.testName AS TestName, coalesce(b.runId, b.objectid) as runId, b.resultoorindicator, + b.remark, CASE WHEN b.result IS NULL THEN b.qualresult ELSE CAST(CAST(b.result AS float) AS VARCHAR) @@ -40,6 +41,7 @@ SELECT b.serviceTestId.testName AS TestName, coalesce(b.runId, b.objectid) as runId, b.resultoorindicator, + b.remark, CASE WHEN b.result IS NULL THEN b.qualresult ELSE CAST(CAST(b.result AS float) AS VARCHAR) @@ -56,6 +58,7 @@ SELECT b.serviceTestId.testName AS TestName, coalesce(b.runId, cast(b.Sequencenum as varchar)) as runId, b.resultoorindicator, + b.remark, CASE WHEN b.result IS NULL THEN b.qualresult ELSE CAST(CAST(b.result AS float) AS VARCHAR) diff --git a/snprc_ehr/resources/queries/study/urinalysisPivot.query.xml b/snprc_ehr/resources/queries/study/urinalysisPivot.query.xml index 12625d953..b528d3668 100644 --- a/snprc_ehr/resources/queries/study/urinalysisPivot.query.xml +++ b/snprc_ehr/resources/queries/study/urinalysisPivot.query.xml @@ -27,7 +27,7 @@ study ClinpathRuns - message_id + objectid diff --git a/snprc_ehr/resources/queries/study/urinalysisPivot.sql b/snprc_ehr/resources/queries/study/urinalysisPivot.sql index 4a09df99f..7e41a1ecc 100644 --- a/snprc_ehr/resources/queries/study/urinalysisPivot.sql +++ b/snprc_ehr/resources/queries/study/urinalysisPivot.sql @@ -19,11 +19,12 @@ SELECT b.runId, b.panelName, b.TestName, + b.remark, MAX(b.result) as results FROM urinalysisPivotInner b -GROUP BY b.runid,b.id, b.date, b.TestName, b.panelName +GROUP BY b.runid,b.id, b.date, b.TestName, b.panelName, b.remark PIVOT results BY TestName IN (select TestName from snprc_ehr.labwork_panels t diff --git a/snprc_ehr/resources/queries/study/urinalysisPivotInner.sql b/snprc_ehr/resources/queries/study/urinalysisPivotInner.sql index d1f6a51bc..d35203c70 100644 --- a/snprc_ehr/resources/queries/study/urinalysisPivotInner.sql +++ b/snprc_ehr/resources/queries/study/urinalysisPivotInner.sql @@ -21,6 +21,7 @@ SELECT coalesce(b.runId, b.objectid) as runId, b.resultoorindicator, + b.remark, CASE WHEN b.result IS NULL THEN b.qualresult ELSE CAST(CAST(b.result AS float) AS VARCHAR) From 21ddb6a90a4f03d642eb825e5f0d6b4e63e9206f Mon Sep 17 00:00:00 2001 From: Terry J Hawkins Date: Tue, 14 Jun 2022 16:13:37 -0500 Subject: [PATCH 03/17] Added missing columns --- snprc_ehr/resources/schemas/snprc_ehr.xml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/snprc_ehr/resources/schemas/snprc_ehr.xml b/snprc_ehr/resources/schemas/snprc_ehr.xml index c42d5ff00..2814d1284 100644 --- a/snprc_ehr/resources/schemas/snprc_ehr.xml +++ b/snprc_ehr/resources/schemas/snprc_ehr.xml @@ -2004,11 +2004,13 @@ + + @@ -2125,6 +2127,8 @@ MESSAGE_ID + + varchar http://cpas.labkey.com/Study#ParticipantId @@ -2173,6 +2177,9 @@ MESSAGE_ID + + + @@ -2204,6 +2211,9 @@ MESSAGE_ID + + + @@ -2230,6 +2240,7 @@ + From f9f61ebc5001dbf15deeb2076707540794eea28a Mon Sep 17 00:00:00 2001 From: Terry J Hawkins Date: Wed, 15 Jun 2022 14:41:33 -0500 Subject: [PATCH 04/17] corrected spelling in comment --- .../resources/source_queries/create_LIS_p_load_demographics.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snprc_ehr/resources/source_queries/create_LIS_p_load_demographics.sql b/snprc_ehr/resources/source_queries/create_LIS_p_load_demographics.sql index 9ab811d17..5027a3dfa 100644 --- a/snprc_ehr/resources/source_queries/create_LIS_p_load_demographics.sql +++ b/snprc_ehr/resources/source_queries/create_LIS_p_load_demographics.sql @@ -210,7 +210,7 @@ BEGIN FORMAT(@BirthDate,'yyyyMMddHHmm'), -- Date of Birth @Gender, -- Sex RTRIM(@Species), -- Race - Species - RTRIM(@Breed), -- Ethnic Grouop - Breed + RTRIM(@Breed), -- Ethnic Group - Breed FORMAT(@DeathDate,'yyyyMMddHHmm'), -- Patient Death Date and Time @isAlive -- Patient Death Indicator ) From a7a6209f100256edab3b547adf4149e0a297b2d4 Mon Sep 17 00:00:00 2001 From: Terry J Hawkins Date: Wed, 6 Jul 2022 12:09:45 -0500 Subject: [PATCH 05/17] - Added pivot tables for Clinical Path Lab data - Updated table names - updated stored procedure for new table names - changed file structure --- .../snprc_ehr/HL7BiochemistryPivot.query.xml | 9 + .../snprc_ehr/HL7BiochemistryPivot.sql | 36 ++ .../queries/snprc_ehr/HL7CulturePivot.sql | 37 ++ .../snprc_ehr/HL7HematologyPivot.query.xml | 9 + .../queries/snprc_ehr/HL7HematologyPivot.sql | 25 ++ .../sqlserver/snprc_ehr-21.001-22.000.sql | 198 +++++---- snprc_ehr/resources/schemas/snprc_ehr.xml | 39 +- .../Create_LIS_DemographicsHL7Staging.sql | 39 -- .../Create_LIS_HL7ExportErrorLog.sql | 35 -- .../Create_LIS_HL7ImportLog.sql | 40 -- .../Create_LIS_f_format_hl7_date.sql | 41 -- .../HL7/Create_LIS_f_format_hl7_date.sql | 41 -- .../HL7/HL7_admin_permissions.sql | 15 +- .../source_queries/HL7/p_load_hl7_data.sql | 93 +++-- .../create_LIS_p_load_demographics.sql | 392 ------------------ 15 files changed, 326 insertions(+), 723 deletions(-) create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.query.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.sql create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.sql create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot.query.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot.sql delete mode 100644 snprc_ehr/resources/source_queries/Create_LIS_DemographicsHL7Staging.sql delete mode 100644 snprc_ehr/resources/source_queries/Create_LIS_HL7ExportErrorLog.sql delete mode 100644 snprc_ehr/resources/source_queries/Create_LIS_HL7ImportLog.sql delete mode 100644 snprc_ehr/resources/source_queries/Create_LIS_f_format_hl7_date.sql delete mode 100644 snprc_ehr/resources/source_queries/HL7/Create_LIS_f_format_hl7_date.sql delete mode 100644 snprc_ehr/resources/source_queries/create_LIS_p_load_demographics.sql diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.query.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.query.xml new file mode 100644 index 000000000..b6e82c36b --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.query.xml @@ -0,0 +1,9 @@ + + + + + Biochemistry Results Pivot +
+
+
+
\ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.sql new file mode 100644 index 000000000..712826bf7 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.sql @@ -0,0 +1,36 @@ +/* Valid Service types: + Biochemistry + Culture + Hematology + Histology + Misc Tests + Parasitology + Surveillance + Unknown + Urinalysis + */ +SELECT + obr.ANIMAL_ID as id, + obr.OBSERVATION_DATE_TM as date, + obr.MESSAGE_ID, + obr.PROCEDURE_NAME, + obr.PROCEDURE_ID, + nte.COMMENT, + obx.TEST_NAME, + MAX(obx.ABNORMAL_FLAGS) AS ABNORMAL_FLAGS, + MAX(obx.QUALITATIVE_RESULT) as QUALITATIVE_RESULT, + MAX(obx.RESULT) as RESULT + +FROM snprc_ehr.HL7_OBR obr + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID +WHERE obr.PROCEDURE_ID.Dataset = 'Biochemistry' + +GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, obr.PROCEDURE_NAME, obr.PROCEDURE_ID, nte.COMMENT, obx.TEST_NAME + PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TEST_NAME + +-- IN +-- ( +-- select TestName as TEST_NAME from snprc_ehr.labwork_panels t +-- where t.includeInPanel = true AND t.ServiceId.Dataset='Biochemistry' +-- ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.sql new file mode 100644 index 000000000..a98d5ca0c --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.sql @@ -0,0 +1,37 @@ +/* Valid Service types: + Biochemistry + Culture + Hematology + Histology + Misc Tests + Parasitology + Surveillance + Unknown + Urinalysis + */ +SELECT + obr.ANIMAL_ID as id, + obr.OBSERVATION_DATE_TM as date, + obr.MESSAGE_ID, + obr.PROCEDURE_NAME, + obr.PROCEDURE_ID, + nte.COMMENT, + obx.TEST_NAME, + --obx.TEST_ID, + MAX(obx.ABNORMAL_FLAGS) AS ABNORMAL_FLAGS, + MAX(obx.QUALITATIVE_RESULT) as QUALITATIVE_RESULT, + MAX(obx.RESULT) as RESULT + +FROM snprc_ehr.HL7_OBR obr + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID +WHERE obr.PROCEDURE_ID.Dataset = 'Culture' + +GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, obr.PROCEDURE_NAME, obr.PROCEDURE_ID, nte.COMMENT, obx.TEST_NAME --, obx.TEST_ID + PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TEST_NAME + +-- TEST_ID IN +-- ( +-- select TestId as TEST_ID from snprc_ehr.labwork_panels t +-- where t.includeInPanel = true AND t.ServiceId.Dataset='Culture' +-- ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot.query.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot.query.xml new file mode 100644 index 000000000..30d9242ab --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot.query.xml @@ -0,0 +1,9 @@ + + + + + Hematology Pivot +
+
+
+
\ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot.sql new file mode 100644 index 000000000..2a208a0fc --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot.sql @@ -0,0 +1,25 @@ +SELECT + obr.ANIMAL_ID as id, + obr.OBSERVATION_DATE_TM as date, + obr.MESSAGE_ID, + obr.PROCEDURE_NAME, + obr.PROCEDURE_ID, + nte.COMMENT, + obx.TEST_NAME, + MAX(obx.ABNORMAL_FLAGS) AS ABNORMAL_FLAGS, + MAX(obx.QUALITATIVE_RESULT) as QUALITATIVE_RESULT, + MAX(obx.RESULT) as RESULT + +FROM snprc_ehr.HL7_OBR obr +LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID +LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID +WHERE obr.PROCEDURE_ID.Dataset = 'Hematology' + +GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, obr.PROCEDURE_NAME, obr.PROCEDURE_ID, nte.COMMENT, obx.TEST_NAME +PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TEST_NAME + +-- IN +-- ( +-- select TestName as TEST_NAME from snprc_ehr.labwork_panels t +-- where t.includeInPanel = true AND t.ServiceId.Dataset='Hematology' +-- ) \ No newline at end of file diff --git a/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-21.001-22.000.sql b/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-21.001-22.000.sql index 6a857fde9..35fae2b86 100644 --- a/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-21.001-22.000.sql +++ b/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-21.001-22.000.sql @@ -1,5 +1,5 @@ /******************************************************* -New staging tables for Orchard clinical path data integration via HL7 +New tables for Orchard clinical path data integration via HL7 05/19/22 - Terry Hawkins */ @@ -8,44 +8,47 @@ New staging tables for Orchard clinical path data integration via HL7 */ EXEC core.fn_dropifexists @objname = 'HL7_IMPORT_LOG',@objschema = 'snprc_ehr', @objtype = 'TABLE'; -EXEC core.fn_dropifexists @objname = 'HL7_OBX_Staging',@objschema = 'snprc_ehr', @objtype = 'TABLE'; -EXEC core.fn_dropifexists @objname = 'HL7_NTE_Staging',@objschema = 'snprc_ehr', @objtype = 'TABLE'; -EXEC core.fn_dropifexists @objname = 'HL7_OBR_Staging',@objschema = 'snprc_ehr', @objtype = 'TABLE'; -EXEC core.fn_dropifexists @objname = 'HL7_PID_Staging',@objschema = 'snprc_ehr', @objtype = 'TABLE'; -EXEC core.fn_dropifexists @objname = 'HL7_PV1_Staging',@objschema = 'snprc_ehr', @objtype = 'TABLE'; -EXEC core.fn_dropifexists @objname = 'HL7_ORC_Staging',@objschema = 'snprc_ehr', @objtype = 'TABLE'; -EXEC core.fn_dropifexists @objname = 'HL7_MSH_Staging',@objschema = 'snprc_ehr', @objtype = 'TABLE'; - -CREATE TABLE [snprc_ehr].[HL7_MSH_Staging]( +EXEC core.fn_dropifexists @objname = 'HL7_OBX',@objschema = 'snprc_ehr', @objtype = 'TABLE'; +EXEC core.fn_dropifexists @objname = 'HL7_NTE',@objschema = 'snprc_ehr', @objtype = 'TABLE'; +EXEC core.fn_dropifexists @objname = 'HL7_OBR',@objschema = 'snprc_ehr', @objtype = 'TABLE'; +EXEC core.fn_dropifexists @objname = 'HL7_PID',@objschema = 'snprc_ehr', @objtype = 'TABLE'; +EXEC core.fn_dropifexists @objname = 'HL7_PV1',@objschema = 'snprc_ehr', @objtype = 'TABLE'; +EXEC core.fn_dropifexists @objname = 'HL7_ORC',@objschema = 'snprc_ehr', @objtype = 'TABLE'; +EXEC core.fn_dropifexists @objname = 'HL7_MSH',@objschema = 'snprc_ehr', @objtype = 'TABLE'; +EXEC core.fn_dropifexists @objname = 'f_isNumeric',@objschema = 'snprc_ehr', @objtype = 'FUNCTION'; + +CREATE TABLE [snprc_ehr].[HL7_MSH]( [MESSAGE_ID] [VARCHAR](50) NOT NULL, [IDX] [INT] NOT NULL, [SENDING_APPLICATION] [VARCHAR](50) NULL, [SENDING_FACILITY] [VARCHAR](50) NULL, [RECEIVING_APPLICATION] [VARCHAR](50) NULL, [RECEIVING_FACILITY] [VARCHAR](50) NULL, + [MESSAGE_TYPE] [VARCHAR](50) NULL, -- MSH_F9_C1 + [TRIGGER_EVENT_ID][VARCHAR](50) NULL, -- MSH_F9_C2 [MESSAGE_CONTROL_ID] [VARCHAR](50) NULL, [MESSAGE_DATE_TM] [DATETIME] NULL, [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, [USER_NAME] [VARCHAR](128) NOT NULL, [ENTRY_DATE_TM] [DATETIME] NOT NULL, [TIMESTAMP] [TIMESTAMP] NULL, - CONSTRAINT [PK_HL7_MSH_Staging] PRIMARY KEY CLUSTERED + CONSTRAINT [PK_HL7_MSH] PRIMARY KEY CLUSTERED ( [MESSAGE_ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ) GO -ALTER TABLE [snprc_ehr].[HL7_MSH_Staging] ADD CONSTRAINT [DF_HL7_MSH_Staging_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] +ALTER TABLE [snprc_ehr].[HL7_MSH] ADD CONSTRAINT [DF_HL7_MSH_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] GO -ALTER TABLE [snprc_ehr].[HL7_MSH_Staging] ADD CONSTRAINT [DF_HL7_MSH_Staging_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] +ALTER TABLE [snprc_ehr].[HL7_MSH] ADD CONSTRAINT [DF_HL7_MSH_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] GO -ALTER TABLE [snprc_ehr].[HL7_MSH_Staging] ADD CONSTRAINT [DF_HL7_MSH_Staging_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] +ALTER TABLE [snprc_ehr].[HL7_MSH] ADD CONSTRAINT [DF_HL7_MSH_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] GO -CREATE TABLE [snprc_ehr].[HL7_PID_Staging]( +CREATE TABLE [snprc_ehr].[HL7_PID]( [MESSAGE_ID] [VARCHAR](50) NOT NULL, [IDX] [INT] NOT NULL, [SET_ID] [VARCHAR](20) NULL, -- F1_C1 @@ -61,7 +64,7 @@ CREATE TABLE [snprc_ehr].[HL7_PID_Staging]( [USER_NAME] [VARCHAR](128) NOT NULL, [ENTRY_DATE_TM] [DATETIME] NOT NULL, [TIMESTAMP] [TIMESTAMP] NULL, - CONSTRAINT [PK_HL7_PID_Staging] PRIMARY KEY CLUSTERED + CONSTRAINT [PK_HL7_PID] PRIMARY KEY CLUSTERED ( [MESSAGE_ID] ASC, [IDX] @@ -69,30 +72,30 @@ CREATE TABLE [snprc_ehr].[HL7_PID_Staging]( ) GO -ALTER TABLE [snprc_ehr].[HL7_PID_Staging] ADD CONSTRAINT [DF_HL7_PID_Staging_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] +ALTER TABLE [snprc_ehr].[HL7_PID] ADD CONSTRAINT [DF_HL7_PID_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] GO -ALTER TABLE [snprc_ehr].[HL7_PID_Staging] ADD CONSTRAINT [DF_HL7_PID_Staging_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] +ALTER TABLE [snprc_ehr].[HL7_PID] ADD CONSTRAINT [DF_HL7_PID_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] GO -ALTER TABLE [snprc_ehr].[HL7_PID_Staging] ADD CONSTRAINT [DF_HL7_PID_Staging_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] +ALTER TABLE [snprc_ehr].[HL7_PID] ADD CONSTRAINT [DF_HL7_PID_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] GO -ALTER TABLE [snprc_ehr].[HL7_PID_Staging] WITH CHECK ADD CONSTRAINT [FK_PID_REF_MSH] FOREIGN KEY([MESSAGE_ID]) - REFERENCES [snprc_ehr].[HL7_MSH_Staging] ([MESSAGE_ID]) +ALTER TABLE [snprc_ehr].[HL7_PID] WITH CHECK ADD CONSTRAINT [FK_PID_REF_MSH] FOREIGN KEY([MESSAGE_ID]) + REFERENCES [snprc_ehr].[HL7_MSH] ([MESSAGE_ID]) GO -CREATE NONCLUSTERED INDEX [IDX_HL7_PID_ID] ON [snprc_ehr].[HL7_PID_Staging] +CREATE NONCLUSTERED INDEX [IDX_HL7_PID_ID] ON [snprc_ehr].[HL7_PID] ( [PATIENT_ID_EXTERNAL] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO -ALTER TABLE [snprc_ehr].[HL7_PID_Staging] CHECK CONSTRAINT [FK_PID_REF_MSH] +ALTER TABLE [snprc_ehr].[HL7_PID] CHECK CONSTRAINT [FK_PID_REF_MSH] GO -CREATE TABLE [snprc_ehr].[HL7_PV1_Staging]( +CREATE TABLE [snprc_ehr].[HL7_PV1]( [MESSAGE_ID] [VARCHAR](50) NOT NULL, [IDX] [INT] NOT NULL, [SET_ID] [VARCHAR](20) NULL, -- F1_C1 @@ -106,7 +109,7 @@ CREATE TABLE [snprc_ehr].[HL7_PV1_Staging]( [USER_NAME] [VARCHAR](128) NOT NULL, [ENTRY_DATE_TM] [DATETIME] NOT NULL, [TIMESTAMP] [TIMESTAMP] NULL, - CONSTRAINT [PK_HL7_PV1_Staging] PRIMARY KEY CLUSTERED + CONSTRAINT [PK_HL7_PV1] PRIMARY KEY CLUSTERED ( [MESSAGE_ID] ASC, [IDX] @@ -114,23 +117,23 @@ CREATE TABLE [snprc_ehr].[HL7_PV1_Staging]( ) GO -ALTER TABLE [snprc_ehr].[HL7_PV1_Staging] ADD CONSTRAINT [DF_HL7_PV1_Staging_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] +ALTER TABLE [snprc_ehr].[HL7_PV1] ADD CONSTRAINT [DF_HL7_PV1_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] GO -ALTER TABLE [snprc_ehr].[HL7_PV1_Staging] ADD CONSTRAINT [DF_HL7_PV1_Staging_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] +ALTER TABLE [snprc_ehr].[HL7_PV1] ADD CONSTRAINT [DF_HL7_PV1_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] GO -ALTER TABLE [snprc_ehr].[HL7_PV1_Staging] ADD CONSTRAINT [DF_HL7_PV1_Staging_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] +ALTER TABLE [snprc_ehr].[HL7_PV1] ADD CONSTRAINT [DF_HL7_PV1_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] GO -ALTER TABLE [snprc_ehr].[HL7_PV1_Staging] WITH CHECK ADD CONSTRAINT [FK_PV1_REF_MSH] FOREIGN KEY([MESSAGE_ID]) - REFERENCES [snprc_ehr].[HL7_MSH_Staging] ([MESSAGE_ID]) +ALTER TABLE [snprc_ehr].[HL7_PV1] WITH CHECK ADD CONSTRAINT [FK_PV1_REF_MSH] FOREIGN KEY([MESSAGE_ID]) + REFERENCES [snprc_ehr].[HL7_MSH] ([MESSAGE_ID]) GO -ALTER TABLE [snprc_ehr].[HL7_PV1_Staging] CHECK CONSTRAINT [FK_PV1_REF_MSH] +ALTER TABLE [snprc_ehr].[HL7_PV1] CHECK CONSTRAINT [FK_PV1_REF_MSH] GO -CREATE TABLE [snprc_ehr].[HL7_ORC_Staging]( +CREATE TABLE [snprc_ehr].[HL7_ORC]( [MESSAGE_ID] [VARCHAR](50) NOT NULL, [IDX] [INT] NOT NULL, [ORDER_CONTROL_CODE] [VARCHAR](20) NULL, -- F1_C1 @@ -141,12 +144,13 @@ CREATE TABLE [snprc_ehr].[HL7_ORC_Staging]( [VERIFIED_BY_FIRST] [VARCHAR] (50) NULL, -- F11_C3 [ORDER_PROVIDER_LAST] [VARCHAR] (50) NULL, -- F12_C2 [ORDER_PROVIDER_FIRST] [VARCHAR] (50) NULL, -- F12_C3 + [CALLBACK_EMAIL] [VARCHAR](50) NULL, -- F14_C3 [ORDER_DATE] [DATETIME] NULL, -- F15_C1 [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, [USER_NAME] [VARCHAR](128) NOT NULL, [ENTRY_DATE_TM] [DATETIME] NOT NULL, [TIMESTAMP] [TIMESTAMP] NULL, - CONSTRAINT [PK_HL7_ORC_Staging] PRIMARY KEY CLUSTERED + CONSTRAINT [PK_HL7_ORC] PRIMARY KEY CLUSTERED ( [MESSAGE_ID] ASC, [IDX] @@ -154,24 +158,24 @@ CREATE TABLE [snprc_ehr].[HL7_ORC_Staging]( ) GO -ALTER TABLE [snprc_ehr].[HL7_ORC_Staging] ADD CONSTRAINT [DF_HL7_ORC_Staging_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] +ALTER TABLE [snprc_ehr].[HL7_ORC] ADD CONSTRAINT [DF_HL7_ORC_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] GO -ALTER TABLE [snprc_ehr].[HL7_ORC_Staging] ADD CONSTRAINT [DF_HL7_ORC_Staging_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] +ALTER TABLE [snprc_ehr].[HL7_ORC] ADD CONSTRAINT [DF_HL7_ORC_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] GO -ALTER TABLE [snprc_ehr].[HL7_ORC_Staging] ADD CONSTRAINT [DF_HL7_ORC_Staging_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] +ALTER TABLE [snprc_ehr].[HL7_ORC] ADD CONSTRAINT [DF_HL7_ORC_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] GO -ALTER TABLE [snprc_ehr].[HL7_ORC_Staging] WITH CHECK ADD CONSTRAINT [FK_ORC_REF_MSH] FOREIGN KEY([MESSAGE_ID]) - REFERENCES [snprc_ehr].[HL7_MSH_Staging] ([MESSAGE_ID]) +ALTER TABLE [snprc_ehr].[HL7_ORC] WITH CHECK ADD CONSTRAINT [FK_ORC_REF_MSH] FOREIGN KEY([MESSAGE_ID]) + REFERENCES [snprc_ehr].[HL7_MSH] ([MESSAGE_ID]) GO -ALTER TABLE [snprc_ehr].[HL7_ORC_Staging] CHECK CONSTRAINT [FK_ORC_REF_MSH] +ALTER TABLE [snprc_ehr].[HL7_ORC] CHECK CONSTRAINT [FK_ORC_REF_MSH] GO -CREATE TABLE [snprc_ehr].[HL7_OBR_Staging]( +CREATE TABLE [snprc_ehr].[HL7_OBR]( [MESSAGE_ID] [VARCHAR](50) NOT NULL, [MESSAGE_CONTROL_ID] [VARCHAR](50) NOT NULL, [IDX] [INT] NOT NULL, @@ -184,53 +188,53 @@ CREATE TABLE [snprc_ehr].[HL7_OBR_Staging]( [SET_ID] [VARCHAR](20) NOT NULL, [SPECIMEN_NUM] [VARCHAR](50) NULL, [PROCEDURE_ID] [VARCHAR](20) NULL, - [PROCEDURE_NAME] [VARCHAR](20) NULL, + [PROCEDURE_NAME] [VARCHAR](50) NULL, [PRIORITY] [VARCHAR](10) NULL, [RESULT_STATUS] [VARCHAR](10) NULL, - [TECHNICIAN_NAME] [VARCHAR](MAX) NULL, - [TECHNICIAN_INITIALS] [VARCHAR](50) NULL, + [TECHNICIAN_FIRST_NAME] [VARCHAR](50) NULL, + [TECHNICIAN_LAST_NAME] [VARCHAR](50) NULL, [CHARGE_ID] [INT] NULL, [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, [USER_NAME] [VARCHAR](128) NOT NULL, [ENTRY_DATE_TM] [DATETIME] NOT NULL, [TIMESTAMP] [TIMESTAMP] NULL, - CONSTRAINT [PK_HL7_OBR_Staging] PRIMARY KEY CLUSTERED + CONSTRAINT [PK_HL7_OBR] PRIMARY KEY CLUSTERED ( [OBJECT_ID] )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ) GO -ALTER TABLE [snprc_ehr].[HL7_OBR_Staging] ADD CONSTRAINT [DF_HL7_OBR_Staging_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] +ALTER TABLE [snprc_ehr].[HL7_OBR] ADD CONSTRAINT [DF_HL7_OBR_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] GO -ALTER TABLE [snprc_ehr].[HL7_OBR_Staging] ADD CONSTRAINT [DF_HL7_OBR_Staging_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] +ALTER TABLE [snprc_ehr].[HL7_OBR] ADD CONSTRAINT [DF_HL7_OBR_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] GO -ALTER TABLE [snprc_ehr].[HL7_OBR_Staging] ADD CONSTRAINT [DF_HL7_OBR_Staging_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] +ALTER TABLE [snprc_ehr].[HL7_OBR] ADD CONSTRAINT [DF_HL7_OBR_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] GO -ALTER TABLE [snprc_ehr].[HL7_OBR_Staging] WITH CHECK ADD CONSTRAINT [CKC_ENTRY_DATE_TM_HL7_OBR_Staging_OBR] CHECK (([ENTRY_DATE_TM]<=GETDATE())) +ALTER TABLE [snprc_ehr].[HL7_OBR] WITH CHECK ADD CONSTRAINT [CKC_ENTRY_DATE_TM_HL7_OBR_OBR] CHECK (([ENTRY_DATE_TM]<=GETDATE())) GO -ALTER TABLE [snprc_ehr].[HL7_OBR_Staging] CHECK CONSTRAINT [CKC_ENTRY_DATE_TM_HL7_OBR_Staging_OBR] +ALTER TABLE [snprc_ehr].[HL7_OBR] CHECK CONSTRAINT [CKC_ENTRY_DATE_TM_HL7_OBR_OBR] GO -ALTER TABLE [snprc_ehr].[HL7_OBR_Staging] WITH CHECK ADD CONSTRAINT [FK_OBR_REF_MSH] FOREIGN KEY([MESSAGE_ID]) - REFERENCES [snprc_ehr].[HL7_MSH_Staging] ([MESSAGE_ID]) +ALTER TABLE [snprc_ehr].[HL7_OBR] WITH CHECK ADD CONSTRAINT [FK_OBR_REF_MSH] FOREIGN KEY([MESSAGE_ID]) + REFERENCES [snprc_ehr].[HL7_MSH] ([MESSAGE_ID]) GO -ALTER TABLE [snprc_ehr].[HL7_OBR_Staging] CHECK CONSTRAINT [FK_OBR_REF_MSH] +ALTER TABLE [snprc_ehr].[HL7_OBR] CHECK CONSTRAINT [FK_OBR_REF_MSH] GO -CREATE NONCLUSTERED INDEX [IDX_HL7_OBR_ID_DATE] ON [snprc_ehr].[HL7_OBR_Staging] +CREATE NONCLUSTERED INDEX [IDX_HL7_OBR_ID_DATE] ON [snprc_ehr].[HL7_OBR] ( [ANIMAL_ID] ASC, [OBSERVATION_DATE_TM] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO -CREATE TABLE [snprc_ehr].[HL7_OBX_Staging]( +CREATE TABLE [snprc_ehr].[HL7_OBX]( [MESSAGE_ID] [VARCHAR](50) NOT NULL, [IDX] [INT] NOT NULL, [OBR_OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, @@ -239,7 +243,8 @@ CREATE TABLE [snprc_ehr].[HL7_OBX_Staging]( [VALUE_TYPE] [VARCHAR](10) NULL, [TEST_ID] [VARCHAR](20) NULL, [TEST_NAME] [VARCHAR](30) NULL, - [OBSERVED_VALUE] [VARCHAR](MAX) NULL, + [QUALITATIVE_RESULT] [VARCHAR](MAX) NULL, + [RESULT] [VARCHAR](MAX) NULL, [UNITS] [VARCHAR](20) NULL, [REFERENCE_RANGE] [VARCHAR](60) NULL, [ABNORMAL_FLAGS] [VARCHAR](10) NULL, @@ -248,37 +253,37 @@ CREATE TABLE [snprc_ehr].[HL7_OBX_Staging]( [USER_NAME] [VARCHAR](128) NOT NULL, [ENTRY_DATE_TM] [DATETIME] NOT NULL, [TIMESTAMP] [TIMESTAMP] NULL, - CONSTRAINT [PK_HL7_OBX_Staging] PRIMARY KEY CLUSTERED + CONSTRAINT [PK_HL7_OBX] PRIMARY KEY CLUSTERED ( [OBJECT_ID] )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ) GO -ALTER TABLE [snprc_ehr].[HL7_OBX_Staging] ADD CONSTRAINT [DF_HL7_OBX_Staging_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] +ALTER TABLE [snprc_ehr].[HL7_OBX] ADD CONSTRAINT [DF_HL7_OBX_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] GO -ALTER TABLE [snprc_ehr].[HL7_OBX_Staging] ADD CONSTRAINT [DF_HL7_OBX_Staging_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] +ALTER TABLE [snprc_ehr].[HL7_OBX] ADD CONSTRAINT [DF_HL7_OBX_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] GO -ALTER TABLE [snprc_ehr].[HL7_OBX_Staging] ADD CONSTRAINT [DF_HL7_OBX_Staging_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] +ALTER TABLE [snprc_ehr].[HL7_OBX] ADD CONSTRAINT [DF_HL7_OBX_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] GO -ALTER TABLE [snprc_ehr].[HL7_OBX_Staging] WITH CHECK ADD CONSTRAINT [FK_OBX_REF_OBR] FOREIGN KEY([OBR_OBJECT_ID]) - REFERENCES [snprc_ehr].[HL7_OBR_Staging] ([OBJECT_ID]) +ALTER TABLE [snprc_ehr].[HL7_OBX] WITH CHECK ADD CONSTRAINT [FK_OBX_REF_OBR] FOREIGN KEY([OBR_OBJECT_ID]) + REFERENCES [snprc_ehr].[HL7_OBR] ([OBJECT_ID]) GO -ALTER TABLE [snprc_ehr].[HL7_OBX_Staging] CHECK CONSTRAINT [FK_OBX_REF_OBR] +ALTER TABLE [snprc_ehr].[HL7_OBX] CHECK CONSTRAINT [FK_OBX_REF_OBR] GO -CREATE NONCLUSTERED INDEX [IDX_HL7_OBX_OBR_OBJ_ID] ON [snprc_ehr].[HL7_OBX_Staging] +CREATE NONCLUSTERED INDEX [IDX_HL7_OBX_OBR_OBJ_ID] ON [snprc_ehr].[HL7_OBX] ( [OBR_OBJECT_ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO -CREATE TABLE [snprc_ehr].[HL7_NTE_Staging]( +CREATE TABLE [snprc_ehr].[HL7_NTE]( [MESSAGE_ID] [VARCHAR](50) NOT NULL, [IDX] [INT] NOT NULL, [OBR_OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, @@ -289,7 +294,7 @@ CREATE TABLE [snprc_ehr].[HL7_NTE_Staging]( [USER_NAME] [VARCHAR](128) NOT NULL, [ENTRY_DATE_TM] [DATETIME] NOT NULL, [TIMESTAMP] [TIMESTAMP] NULL, - CONSTRAINT [PK_HL7_NTE_Staging] PRIMARY KEY CLUSTERED + CONSTRAINT [PK_HL7_NTE] PRIMARY KEY CLUSTERED ( [OBJECT_ID] ASC @@ -297,23 +302,23 @@ CREATE TABLE [snprc_ehr].[HL7_NTE_Staging]( ) GO -ALTER TABLE [snprc_ehr].[HL7_NTE_Staging] ADD CONSTRAINT [DF_HL7_NTE_Staging_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] +ALTER TABLE [snprc_ehr].[HL7_NTE] ADD CONSTRAINT [DF_HL7_NTE_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] GO -ALTER TABLE [snprc_ehr].[HL7_NTE_Staging] ADD CONSTRAINT [DF_HL7_NTE_Staging_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] +ALTER TABLE [snprc_ehr].[HL7_NTE] ADD CONSTRAINT [DF_HL7_NTE_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] GO -ALTER TABLE [snprc_ehr].[HL7_NTE_Staging] ADD CONSTRAINT [DF_HL7_NTE_Staging_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] +ALTER TABLE [snprc_ehr].[HL7_NTE] ADD CONSTRAINT [DF_HL7_NTE_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] GO -ALTER TABLE [snprc_ehr].[HL7_NTE_Staging] WITH CHECK ADD CONSTRAINT [FK_NTE_REF_OBR] FOREIGN KEY([OBR_OBJECT_ID]) - REFERENCES [snprc_ehr].[HL7_OBR_Staging] ([OBJECT_ID]) +ALTER TABLE [snprc_ehr].[HL7_NTE] WITH CHECK ADD CONSTRAINT [FK_NTE_REF_OBR] FOREIGN KEY([OBR_OBJECT_ID]) + REFERENCES [snprc_ehr].[HL7_OBR] ([OBJECT_ID]) GO -ALTER TABLE [snprc_ehr].[HL7_NTE_Staging] CHECK CONSTRAINT [FK_NTE_REF_OBR] +ALTER TABLE [snprc_ehr].[HL7_NTE] CHECK CONSTRAINT [FK_NTE_REF_OBR] GO -CREATE NONCLUSTERED INDEX [IDX_HL7_NTE_OBR_OBJ_ID] ON [snprc_ehr].[HL7_NTE_Staging] +CREATE NONCLUSTERED INDEX [IDX_HL7_NTE_OBR_OBJ_ID] ON [snprc_ehr].[HL7_NTE] ( [OBR_OBJECT_ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] @@ -356,5 +361,50 @@ ALTER TABLE [snprc_ehr].[HL7_IMPORT_LOG] WITH CHECK ADD CONSTRAINT [CKC_HL7_IM ALTER TABLE [snprc_ehr].[HL7_IMPORT_LOG] CHECK CONSTRAINT [CKC_HL7_IMPORT_LOG_OBSERVATION_DATE] GO - - +-- ========================================================================== +-- Author: Terry Hawkins +-- Create date: 2/28/14 +-- Description: Returns 1 if the value is numeric, 0 if value is not numeric +-- 6/19/2015 added additional criteria based on the current datasets. tjh +-- 2/29/2016 fixed file formatting. Fixed bug in patindex call (removed). tjh +-- ========================================================================== +CREATE FUNCTION [snprc_ehr].[f_isNumeric] +( + @value VARCHAR(MAX) +) +RETURNS INT +AS +BEGIN + -- Declare the return variable here + DECLARE @return INT + + IF (@value IS NULL) + BEGIN + SET @return = 0 + GOTO finis + END + + select @value = LTRIM(RTRIM(REPLACE(@value, ' ', ''))) + + IF (ISNUMERIC(@value) = 1) + BEGIN + if ( LEN(@value) = 1 AND CHARINDEX ('+', @value, 1) > 0) + OR ( LEN(@value) = 1 AND CHARINDEX('-', @value, 1) > 0) + OR (CHARINDEX(',', @value, 1) > 0) + OR (CHARINDEX('-' , @value, 2) > 1) + + BEGIN + SET @return = 0 + GOTO finis + END + + SET @return = 1 + GOTO finis + + END + SET @return = 0 + + finis: + RETURN @return + +END \ No newline at end of file diff --git a/snprc_ehr/resources/schemas/snprc_ehr.xml b/snprc_ehr/resources/schemas/snprc_ehr.xml index 2814d1284..620dc8c8e 100644 --- a/snprc_ehr/resources/schemas/snprc_ehr.xml +++ b/snprc_ehr/resources/schemas/snprc_ehr.xml @@ -1995,7 +1995,7 @@ External Reports - +
MESSAGE_IDDETAILED @@ -2018,7 +2018,7 @@ HL7 MSH STAGING
- +
MESSAGE_ID, IDXDETAILED @@ -2029,7 +2029,7 @@ snprc_ehr - HL7_MSH_STAGING + HL7_MSH MESSAGE_ID @@ -2050,7 +2050,7 @@ HL7 PID STAGING
- +
MESSAGE_ID, IDXDETAILED @@ -2061,7 +2061,7 @@ snprc_ehr - HL7_MSH_STAGING + HL7_MSH MESSAGE_ID @@ -2080,7 +2080,7 @@ HL7 PV1 STAGING
- +
MESSAGE_ID, IDXDETAILED @@ -2091,7 +2091,7 @@ snprc_ehr - HL7_MSH_STAGING + HL7_MSH MESSAGE_ID @@ -2112,7 +2112,7 @@ HL7 ORC STAGING
- +
OBJECT_IDDETAILED @@ -2123,7 +2123,7 @@ snprc_ehr - HL7_MSH_STAGING + HL7_MSH MESSAGE_ID @@ -2148,12 +2148,19 @@ - + + Service ID + + snprc_ehr + labwork_services + ServiceId + + - - + + @@ -2162,7 +2169,7 @@ HL7 OBR STAGING
- +
OBJECT_IDDETAILED @@ -2173,7 +2180,7 @@ snprc_ehr - HL7_MSH_STAGING + HL7_MSH MESSAGE_ID @@ -2196,7 +2203,7 @@ HL7 OBX STAGING
- +
OBJECT_IDDETAILED @@ -2207,7 +2214,7 @@ snprc_ehr - HL7_MSH_STAGING + HL7_MSH MESSAGE_ID diff --git a/snprc_ehr/resources/source_queries/Create_LIS_DemographicsHL7Staging.sql b/snprc_ehr/resources/source_queries/Create_LIS_DemographicsHL7Staging.sql deleted file mode 100644 index 1bcd793c3..000000000 --- a/snprc_ehr/resources/source_queries/Create_LIS_DemographicsHL7Staging.sql +++ /dev/null @@ -1,39 +0,0 @@ -USE animal -GO - --- Create TAC schema if not exists -IF NOT EXISTS (SELECT 1 FROM sys.schemas WHERE name = 'LIS') -BEGIN - -- The schema must be run in its own batch! -EXEC( 'CREATE SCHEMA LIS' ); -END - -DROP TABLE IF EXISTS LIS.DemographicsHL7Staging; - -CREATE TABLE LIS.DemographicsHL7Staging -( - RowId INT IDENTITY, - Id VARCHAR(6) NOT NULL, - Gender CHAR(1) NULL, - BirthDate DATETIME NULL, - DeathDate DATETIME NULL, - Breed VARCHAR(2) NULL, -- arc_species_code - Species VARCHAR(MAX) NULL, -- common name - isAlive Varchar(1) NULL, -- Y/N/NULL - Sire VARCHAR(6) NULL, - Dam VARCHAR(6) NULL, - Modified DATETIME NULL, - ModifiedBy VARCHAR(MAX) NULL, - Processed INT DEFAULT 0 NOT NULL, -- will be 0 when data is exported, and stored procedure will update it to 1 when processed - ObjectId UNIQUEIDENTIFIER DEFAULT NEWID() NOT NULL, - CONSTRAINT PK_TAC_DemographicsHL7Staging - PRIMARY KEY CLUSTERED (RowId ASC) -) - -GO - --- Table permissions -GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON LIS.DemographicsHL7Staging TO z_labkey; -GRANT VIEW DEFINITION ON LIS.DemographicsHL7Staging TO z_labkey; - -GO \ No newline at end of file diff --git a/snprc_ehr/resources/source_queries/Create_LIS_HL7ExportErrorLog.sql b/snprc_ehr/resources/source_queries/Create_LIS_HL7ExportErrorLog.sql deleted file mode 100644 index e8abd493f..000000000 --- a/snprc_ehr/resources/source_queries/Create_LIS_HL7ExportErrorLog.sql +++ /dev/null @@ -1,35 +0,0 @@ -USE animal -GO -/* - Error log for demographics export errors -*/ --- Create TAC schema if not exists -IF NOT EXISTS (SELECT 1 FROM sys.schemas WHERE name = 'LIS') -BEGIN - -- The schema must be run in its own batch! -EXEC( 'CREATE SCHEMA LIS' ); -END - -DROP TABLE IF EXISTS LIS.HL7ExportErrorLog; - -CREATE TABLE LIS.HL7ExportErrorLog -( - [RowId] [NUMERIC](18, 0) IDENTITY(1,1) NOT NULL, - [ObjectId] [VARCHAR](50) NOT NULL, - [ProcessedDateTm] [DATETIME] NULL, - [MessageControlId] [VARCHAR](50) NULL, - [PatientId] [VARCHAR](20) NULL, - [ErrorMsg] [VARCHAR](MAX) NULL, - [UserName] [VARCHAR](128) NOT NULL, - [EntryDateTm] [DATETIME] NOT NULL, - CONSTRAINT PK_TAC_HL7ExportErrorLog - PRIMARY KEY CLUSTERED (RowId ASC) -) - -GO - --- Table permissions -GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON LIS.HL7ExportErrorLog TO z_labkey; -GRANT VIEW DEFINITION ON LIS.HL7ExportErrorLog TO z_labkey; - -GO \ No newline at end of file diff --git a/snprc_ehr/resources/source_queries/Create_LIS_HL7ImportLog.sql b/snprc_ehr/resources/source_queries/Create_LIS_HL7ImportLog.sql deleted file mode 100644 index 22b656a41..000000000 --- a/snprc_ehr/resources/source_queries/Create_LIS_HL7ImportLog.sql +++ /dev/null @@ -1,40 +0,0 @@ -USE animal -GO -/* - Import log for results from Orchard Harvest -*/ --- Create TAC schema if not exists -IF NOT EXISTS (SELECT 1 FROM sys.schemas WHERE name = 'LIS') -BEGIN - -- The schema must be run in its own batch! -EXEC( 'CREATE SCHEMA LIS' ); -END - -DROP TABLE IF EXISTS LIS.HL7ImportLog; - -CREATE TABLE LIS.HL7ImportLog -( - [RowId] [NUMERIC](18, 0) IDENTITY(1,1) NOT NULL, - [MessageId] [VARCHAR](50) NOT NULL, - [ObservationDateTm] [DATETIME] NULL, - [MessageControlId] [VARCHAR](50) NULL, - [ImportStatus] [INT] NOT NULL, - [ResultStatis] [VARCHAR](10) NULL, - [PatientId] [VARCHAR](20) NULL, - [Species] [VARCHAR](50) NULL, - [HL7MessageText] [VARCHAR](MAX) NULL, - [ImportText] [VARCHAR](MAX) NULL, - [UserName] [VARCHAR](128) NOT NULL, - [EntryDateTm] [DATETIME] NOT NULL, - [TIMESTAMP] [TIMESTAMP] NULL, - CONSTRAINT PK_TAC_HL7ImportLog - PRIMARY KEY CLUSTERED (RowId ASC) -) - -GO - --- Table permissions -GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON LIS.HL7ImportLog TO z_labkey; -GRANT VIEW DEFINITION ON LIS.HL7ImportLog TO z_labkey; - -GO \ No newline at end of file diff --git a/snprc_ehr/resources/source_queries/Create_LIS_f_format_hl7_date.sql b/snprc_ehr/resources/source_queries/Create_LIS_f_format_hl7_date.sql deleted file mode 100644 index 358d85d6a..000000000 --- a/snprc_ehr/resources/source_queries/Create_LIS_f_format_hl7_date.sql +++ /dev/null @@ -1,41 +0,0 @@ -USE -[TAC_HL7_staging] -GO -/****** Object: UserDefinedFunction [dbo].[f_format_hl7_date] Script Date: 3/23/2022 11:14:18 AM ******/ -SET ANSI_NULLS ON -GO -SET QUOTED_IDENTIFIER ON -GO --- ============================================= --- Author: Terry Hawkins --- Create date: 1/30/2014 --- Description: Converts a date and time string into MSSQL datetime format --- ============================================= -CREATE FUNCTION [dbo].[f_format_hl7_date] -( - -- Add the parameters for the function here - @date_str VARCHAR(50) -) -RETURNS DATETIME - -AS -BEGIN - DECLARE -@ret_date DATETIME - IF LEN(@date_str) = 8 -BEGIN - --20140117 - SET -@ret_date = CAST(SUBSTRING(@date_str, 1,4)+ '-' + SUBSTRING(@date_str, 5,2) + '-' + SUBSTRING(@date_str,7,2) AS DATETIME) -END -ELSE -BEGIN - --201401171008 - SET -@ret_date = CAST(SUBSTRING(@date_str, 1,4)+ '-' + SUBSTRING(@date_str, 5,2) + '-' + SUBSTRING(@date_str,7,2) + - ' ' + SUBSTRING(@date_str, 9,2) + ':' + SUBSTRING(@date_str, 11,2) AS DATETIME) -END - -RETURN @ret_date - -END diff --git a/snprc_ehr/resources/source_queries/HL7/Create_LIS_f_format_hl7_date.sql b/snprc_ehr/resources/source_queries/HL7/Create_LIS_f_format_hl7_date.sql deleted file mode 100644 index 358d85d6a..000000000 --- a/snprc_ehr/resources/source_queries/HL7/Create_LIS_f_format_hl7_date.sql +++ /dev/null @@ -1,41 +0,0 @@ -USE -[TAC_HL7_staging] -GO -/****** Object: UserDefinedFunction [dbo].[f_format_hl7_date] Script Date: 3/23/2022 11:14:18 AM ******/ -SET ANSI_NULLS ON -GO -SET QUOTED_IDENTIFIER ON -GO --- ============================================= --- Author: Terry Hawkins --- Create date: 1/30/2014 --- Description: Converts a date and time string into MSSQL datetime format --- ============================================= -CREATE FUNCTION [dbo].[f_format_hl7_date] -( - -- Add the parameters for the function here - @date_str VARCHAR(50) -) -RETURNS DATETIME - -AS -BEGIN - DECLARE -@ret_date DATETIME - IF LEN(@date_str) = 8 -BEGIN - --20140117 - SET -@ret_date = CAST(SUBSTRING(@date_str, 1,4)+ '-' + SUBSTRING(@date_str, 5,2) + '-' + SUBSTRING(@date_str,7,2) AS DATETIME) -END -ELSE -BEGIN - --201401171008 - SET -@ret_date = CAST(SUBSTRING(@date_str, 1,4)+ '-' + SUBSTRING(@date_str, 5,2) + '-' + SUBSTRING(@date_str,7,2) + - ' ' + SUBSTRING(@date_str, 9,2) + ':' + SUBSTRING(@date_str, 11,2) AS DATETIME) -END - -RETURN @ret_date - -END diff --git a/snprc_ehr/resources/source_queries/HL7/HL7_admin_permissions.sql b/snprc_ehr/resources/source_queries/HL7/HL7_admin_permissions.sql index ca96d03d9..13b386c9d 100644 --- a/snprc_ehr/resources/source_queries/HL7/HL7_admin_permissions.sql +++ b/snprc_ehr/resources/source_queries/HL7/HL7_admin_permissions.sql @@ -1,9 +1,10 @@ -- HL7_Admin permissions required for HL7 Schema Engine import GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_IMPORT_LOG TO HL7_Admin; -GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_MSH_Staging TO HL7_Admin; -GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_NTE_Staging TO HL7_Admin; -GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_OBR_Staging TO HL7_Admin; -GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_OBX_Staging TO HL7_Admin; -GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_ORC_Staging TO HL7_Admin; -GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_PID_Staging TO HL7_Admin; -GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_PV1_Staging TO HL7_Admin; \ No newline at end of file +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_MSH TO HL7_Admin; +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_NTE TO HL7_Admin; +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_OBR TO HL7_Admin; +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_OBX TO HL7_Admin; +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_ORC TO HL7_Admin; +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_PID TO HL7_Admin; +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_PV1 TO HL7_Admin; +GRANT EXECUTE ON labkey.snprc_ehr.f_isNumeric TO Labkey, HL7_Admin; \ No newline at end of file diff --git a/snprc_ehr/resources/source_queries/HL7/p_load_hl7_data.sql b/snprc_ehr/resources/source_queries/HL7/p_load_hl7_data.sql index b262125a8..c4875257c 100644 --- a/snprc_ehr/resources/source_queries/HL7/p_load_hl7_data.sql +++ b/snprc_ehr/resources/source_queries/HL7/p_load_hl7_data.sql @@ -18,7 +18,7 @@ -- Changes: -- -- ================================================================= -alter PROCEDURE [dbo].[p_load_hl7_data] +ALTER PROCEDURE [dbo].[p_load_hl7_data] ( @MessageId VARCHAR(50)) AS BEGIN @@ -92,13 +92,15 @@ begin transaction trans1 -------------------------------------------------------------------------------------------------------- -- insert into MSH table BEGIN TRY - INSERT INTO labkey.snprc_ehr.HL7_MSH_Staging + INSERT INTO labkey.snprc_ehr.HL7_MSH ( MESSAGE_ID, IDX, SENDING_APPLICATION, SENDING_FACILITY, RECEIVING_APPLICATION, RECEIVING_FACILITY, + MESSAGE_TYPE, + TRIGGER_EVENT_ID, MESSAGE_CONTROL_ID, MESSAGE_DATE_TM ) @@ -109,6 +111,8 @@ begin transaction trans1 msh.MSH_F4_C1, msh.MSH_F5_C1, msh.MSH_F5_C1, + msh.MSH_F9_C1, + msh.MSH_F9_C2, msh.MSH_F10_C1, dbo.f_format_hl7_date(msh.MSH_F7_C1) @@ -117,13 +121,13 @@ begin transaction trans1 END TRY BEGIN CATCH select @error = -101 - SELECT @errormsg = 'Error inserting message: *' + @messageid + '* into HL7_MSH_Staging.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + SELECT @errormsg = 'Error inserting message: *' + @messageid + '* into HL7_MSH.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() goto error END CATCH -------------------------------------------------------------------------------------------------------- -- insert into PID table BEGIN TRY - INSERT INTO labkey.snprc_ehr.HL7_PID_Staging + INSERT INTO labkey.snprc_ehr.HL7_PID ( MESSAGE_ID, IDX, @@ -156,13 +160,13 @@ begin transaction trans1 END TRY BEGIN CATCH select @error = -101 - SELECT @errormsg = 'Error inserting message: *' + @messageid + '* into HL7_PID_Staging.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + SELECT @errormsg = 'Error inserting message: *' + @messageid + '* into HL7_PID.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() goto error END CATCH -------------------------------------------------------------------------------------------------------- -- insert into PV1 table BEGIN TRY - INSERT INTO labkey.snprc_ehr.HL7_PV1_Staging + INSERT INTO labkey.snprc_ehr.HL7_PV1 ( MESSAGE_ID, IDX, @@ -192,7 +196,7 @@ begin transaction trans1 END TRY BEGIN CATCH select @error = -101 - SELECT @errormsg = 'Error inserting message: *' + @messageid + '* into HL7_PV1_Staging.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + SELECT @errormsg = 'Error inserting message: *' + @messageid + '* into HL7_PV1.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() goto error END CATCH @@ -200,7 +204,7 @@ begin transaction trans1 -- insert into OCR table BEGIN TRY - INSERT INTO labkey.snprc_ehr.HL7_ORC_Staging + INSERT INTO labkey.snprc_ehr.HL7_ORC ( MESSAGE_ID, IDX, @@ -212,6 +216,7 @@ begin transaction trans1 VERIFIED_BY_FIRST, ORDER_PROVIDER_LAST, ORDER_PROVIDER_FIRST, + CALLBACK_EMAIL, ORDER_DATE ) ( SELECT @@ -225,15 +230,16 @@ begin transaction trans1 orc.ORC_F11_C3, -- VERIFIED_BY_FIRST - varchar(50) orc.ORC_F12_C2, -- ORDER_PROVIDER_LAST - varchar(50) orc.ORC_F12_C3, -- ORDER_PROVIDER_FIRST - varchar(50) + orc.ORC_F14_C3, -- CALLBACK_EMAIL - varchar(50) dbo.f_format_hl7_date(orc.ORC_F15_C1) -- ORDER_DATE - datetime FROM Orchard_HL7_staging.dbo.ORC_Segment_ORC_A as orc WHERE orc.MessageId = @messageId ) END TRY - BEGIN CATCH + BEGIN CATCH select @error = -101 - SELECT @errormsg = 'Error inserting message: *' + @messageid + '* into HL7_ORC_Staging.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + SELECT @errormsg = 'Error inserting message: *' + @messageid + '* into HL7_ORC.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() goto error END CATCH @@ -265,14 +271,14 @@ begin transaction trans1 -- remove observations DELETE cpx - FROM labkey.snprc_ehr.HL7_OBX_Staging AS cpx - INNER JOIN labkey.snprc_ehr.HL7_OBR_Staging AS cpr ON cpr.OBJECT_ID = cpx.OBR_OBJECT_ID + FROM labkey.snprc_ehr.HL7_OBX AS cpx + INNER JOIN labkey.snprc_ehr.HL7_OBR AS cpr ON cpr.OBJECT_ID = cpx.OBR_OBJECT_ID INNER JOIN Orchard_hl7_staging.dbo.ORC_segment_obr_a AS obr ON obr.messageID = @MessageId AND obr.OBR_F1_C1 = cpx.OBR_SET_ID WHERE LTRIM(RTRIM(obr.OBR_F25_C1)) = 'X' -- Result_status = Order cancelled END TRY BEGIN CATCH select @error = -101 - SELECT @errormsg = 'Error deleting message: *' + @messageid + '* from HL7_OBX_Staging.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + SELECT @errormsg = 'Error deleting message: *' + @messageid + '* from HL7_OBX.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() goto error END CATCH @@ -280,14 +286,14 @@ begin transaction trans1 BEGIN TRY DELETE cpn - FROM labkey.snprc_ehr.HL7_NTE_Staging AS cpn - JOIN labkey.snprc_ehr.HL7_OBR_Staging AS cpr ON cpr.OBJECT_ID = cpn.OBR_OBJECT_ID + FROM labkey.snprc_ehr.HL7_NTE AS cpn + JOIN labkey.snprc_ehr.HL7_OBR AS cpr ON cpr.OBJECT_ID = cpn.OBR_OBJECT_ID JOIN dbo.ORC_segment_obr_a AS obr ON obr.messageID = @MessageId AND obr.OBR_F1_C1 = cpn.OBR_SET_ID WHERE LTRIM(RTRIM(obr.OBR_F25_C1)) = 'X' -- Result_status = Order cancelled END TRY BEGIN CATCH select @error = -101 - SELECT @errormsg = 'Error deleting message: *' + @messageid + '* from HL7_NTE_Staging.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + SELECT @errormsg = 'Error deleting message: *' + @messageid + '* from HL7_NTE.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() goto error END CATCH @@ -296,14 +302,14 @@ begin transaction trans1 UPDATE cpr SET RESULT_STATUS = 'X' - FROM labkey.snprc_ehr.HL7_OBR_Staging AS cpr + FROM labkey.snprc_ehr.HL7_OBR AS cpr JOIN dbo.ORC_segment_obr_a AS obr ON obr.messageID = @MessageId AND cpr.Set_ID = obr.OBR_F1_C1 WHERE LTRIM(RTRIM(obr.OBR_F25_C1)) = 'X' -- Result_status = Order cancelled END TRY BEGIN CATCH select @error = -101 - SELECT @errormsg = 'Error updating message: *' + @messageid + '* from HL7_OBR_Staging.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + SELECT @errormsg = 'Error updating message: *' + @messageid + '* from HL7_OBR.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() goto error END CATCH @@ -327,7 +333,7 @@ BEGIN BEGIN TRY - INSERT INTO labkey.snprc_ehr.HL7_OBR_Staging + INSERT INTO labkey.snprc_ehr.HL7_OBR ( MESSAGE_ID , IDX, @@ -343,8 +349,8 @@ BEGIN PROCEDURE_NAME , PRIORITY , RESULT_STATUS , - TECHNICIAN_NAME , - TECHNICIAN_INITIALS, + TECHNICIAN_LAST_NAME , + TECHNICIAN_FIRST_NAME, CHARGE_ID, OBJECT_ID ) @@ -363,8 +369,8 @@ BEGIN obr.OBR_F4_C2, -- Procedure Name obr.OBR_F5_C1, -- Priority LTRIM(RTRIM(obr.OBR_F25_C1)), -- Result status - obr.OBR_F34_C2, -- Technicial Name - NULL, -- Technician Initials + obr.OBR_F34_C1, -- Technician last name + obr.OBR_F34_C2, -- Technician first name pv1.PV1_F24_C1, --charge_id -- TODO: maps to HL7 Contract Code NEWID() -- object_ID @@ -381,7 +387,7 @@ BEGIN END TRY BEGIN CATCH select @error = -101 - SELECT @errormsg = 'Error inserting message: *' + @messageid + '* into HL7_OBR_Staging.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + SELECT @errormsg = 'Error inserting message: *' + @messageid + '* into HL7_OBR.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() goto error END CATCH @@ -403,11 +409,11 @@ BEGIN LEAD(OBR.IDX, 1, 9999) OVER (ORDER BY OBR.IDX) AS next_OBR_IDX FROM [Orchard_hl7_staging].[dbo].[ORC_Segment_OBR_A] AS OBR - INNER JOIN labkey.snprc_ehr.HL7_OBR_Staging as cbr on OBR.messageId = cbr.Message_ID and OBR.OBR_F1_C1 = cbr.SET_ID + INNER JOIN labkey.snprc_ehr.HL7_OBR as cbr on OBR.messageId = cbr.Message_ID and OBR.OBR_F1_C1 = cbr.SET_ID WHERE OBR.MessageId = @messageId ) - INSERT INTO labkey.snprc_ehr.HL7_OBX_Staging + INSERT INTO labkey.snprc_ehr.HL7_OBX ( MESSAGE_ID , IDX, OBR_OBJECT_ID, @@ -416,7 +422,8 @@ BEGIN VALUE_TYPE , TEST_ID , TEST_NAME , - OBSERVED_VALUE , + QUALITATIVE_RESULT, + RESULT, UNITS , REFERENCE_RANGE , -- TODO: missing reference ranges in Orchard data ABNORMAL_FLAGS , -- TODO: ditto ditto @@ -432,6 +439,9 @@ BEGIN obx.OBX_F3_C1, obx.OBX_F3_C2, obx.OBX_RESULTDATA, + CASE WHEN obx.OBX_F2_C1 = 'NM' AND snprc_ehr.f_isNumeric(obx.OBX_RESULTDATA) = 1 + THEN CAST(LTRIM(RTRIM(REPLACE(obx.OBX_RESULTDATA, ' ', ''))) AS DECIMAL(10, 3)) + ELSE NULL END AS RESULT, obx.OBX_F6_C1, obx.OBX_F7_C1, obx.OBX_F8_C1, @@ -445,7 +455,7 @@ BEGIN END TRY BEGIN CATCH select @error = -101 - SELECT @errormsg = 'Error inserting message: *' + @messageid + '* into HL7_OBX_Staging.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + SELECT @errormsg = 'Error inserting message: *' + @messageid + '* into HL7_OBX.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() goto error END CATCH @@ -457,10 +467,10 @@ BEGIN LEAD(OBR.IDX, 1, 9999) OVER (ORDER BY OBR.IDX) AS next_OBR_IDX FROM [Orchard_hl7_staging].[dbo].[ORC_Segment_OBR_A] AS OBR - INNER JOIN labkey.snprc_ehr.HL7_OBR_Staging as cbr on OBR.messageId = cbr.Message_ID and OBR.OBR_F1_C1 = cbr.SET_ID + INNER JOIN labkey.snprc_ehr.HL7_OBR as cbr on OBR.messageId = cbr.Message_ID and OBR.OBR_F1_C1 = cbr.SET_ID WHERE OBR.MessageId = @messageId ) - INSERT INTO labkey.snprc_ehr.HL7_NTE_Staging + INSERT INTO labkey.snprc_ehr.HL7_NTE ( MESSAGE_ID , IDX, OBR_OBJECT_ID, @@ -481,7 +491,7 @@ BEGIN END TRY BEGIN CATCH select @error = -101 - SELECT @errormsg = 'Error inserting message: *' + @messageid + '* into HL7_OBR_Staging.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + SELECT @errormsg = 'Error inserting message: *' + @messageid + '* into HL7_OBR.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() goto error END CATCH @@ -496,7 +506,7 @@ BEGIN LEAD(OBR.IDX, 1, 9999) OVER (ORDER BY OBR.IDX) AS next_OBR_IDX FROM [Orchard_hl7_staging].[dbo].[ORC_Segment_OBR_A] AS OBR - INNER JOIN labkey.snprc_ehr.HL7_OBR_Staging as cbr on OBR.messageId = cbr.Message_ID and OBR.OBR_F1_C1 = cbr.SET_ID + INNER JOIN labkey.snprc_ehr.HL7_OBR as cbr on OBR.messageId = cbr.Message_ID and OBR.OBR_F1_C1 = cbr.SET_ID WHERE OBR.MessageId = @messageId ) @@ -506,13 +516,23 @@ BEGIN -- cpx.VALUE_TYPE = , -- ditto (should not change) -- cpx.TEST_ID = , -- ditto ditto -- cpx.TEST_NAME ', -- ditto ditto - cpx.OBSERVED_VALUE = CASE WHEN obx.OBX_F11_C1 = 'D' then '00' else obx.OBX_RESULTDATA END, + + cpx.RESULT = CASE WHEN obx.OBX_F11_C1 = 'D' then '00' + else + CASE WHEN obx.OBX_F2_C1 = 'NM' AND snprc_ehr.f_isNumeric(obx.OBX_RESULTDATA) = 1 + THEN CAST(LTRIM(RTRIM(REPLACE(obx.OBX_RESULTDATA, ' ', ''))) AS DECIMAL(10, 3)) + ELSE + NULL + END + END, + + cpx.QUALITATIVE_RESULT = CASE WHEN obx.OBX_F11_C1 = 'D' THEN '00' ELSE obx.OBX_RESULTDATA END, -- cpx.UNITS = , -- leave intact (should not change) -- cpx.REFERENCE_RANGE , -- ditto ditto cpx.ABNORMAL_FLAGS = CASE WHEN obx.OBX_F11_C1 = 'D' then NULL else obx.OBX_F8_C1 END, cpx.RESULT_STATUS = obx.OBX_F11_C1 - FROM labkey.snprc_ehr.HL7_OBX_Staging AS cpx + FROM labkey.snprc_ehr.HL7_OBX AS cpx INNER JOIN cte ON cpx.Message_ID = cte.MessageID AND cpx.IDX > cte.OBR_IDX AND cpx.IDX < cte.next_OBR_IDX INNER JOIN Orchard_hl7_staging.dbo.ORC_segment_obx_a as OBX on cpx.MESSAGE_ID = OBX.MessageId and cpx.IDX = OBX.IDX -- only update data with obx result_status = 'C' or 'D' (corrected or deleted entries) @@ -521,7 +541,7 @@ BEGIN END TRY BEGIN CATCH select @error = -101 - SELECT @errormsg = 'Error processing message: *' + @messageid + '* for update of HL7_OBX_Staging.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + SELECT @errormsg = 'Error processing message: *' + @messageid + '* for update of HL7_OBX.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() goto error END CATCH @@ -530,12 +550,10 @@ BEGIN INSERT INTO labkey.snprc_ehr.HL7_IMPORT_LOG (MESSAGE_ID, OBSERVATION_DATE_TM, MESSAGE_CONTROL_ID, IMPORT_STATUS, RESULT_STATUS, PATIENT_ID, SPECIES, HL7_MESSAGE_TEXT, IMPORT_TEXT) VALUES (@messageId,@hl7_observation_date_tm, @hl7_message_control_id, 1, @hl7_result_status, @animal_id, @hl7_species, @hl7_message_text, 'upload okay.') - GOTO finis END not_animal_data: - INSERT INTO labkey.snprc_ehr.HL7_IMPORT_LOG (MESSAGE_ID, OBSERVATION_DATE_TM, MESSAGE_CONTROL_ID, IMPORT_STATUS, RESULT_STATUS, PATIENT_ID, SPECIES, HL7_MESSAGE_TEXT, IMPORT_TEXT) VALUES (@messageId, @hl7_observation_date_tm, @hl7_message_control_id, 2, @hl7_result_status, @animal_id, @hl7_species, @hl7_message_text, 'Not animal data.') @@ -562,7 +580,6 @@ finis: END - GRANT EXEC ON LIS.p_load_hl7_data TO hl7_admin; GRANT VIEW DEFINITION ON LIS.p_load_demographics TO hl7_admin; diff --git a/snprc_ehr/resources/source_queries/create_LIS_p_load_demographics.sql b/snprc_ehr/resources/source_queries/create_LIS_p_load_demographics.sql deleted file mode 100644 index 5027a3dfa..000000000 --- a/snprc_ehr/resources/source_queries/create_LIS_p_load_demographics.sql +++ /dev/null @@ -1,392 +0,0 @@ -USE [animal] -GO -/****** Object: StoredProcedure [LIS].[p_load_hl7_data] Script Date: 3/23/2022 11:17:35 AM ******/ -SET ANSI_NULLS ON -GO -SET QUOTED_IDENTIFIER ON -GO --- =============================================================== --- Author: Terry Hawkins --- Create date: 3/23/2022 --- Description: loads demographics from TAC to HL7 data tables --- Returns: --- 0 Okay --- -1 thru -99 Reserved by sql server for system errors --- -101 General error --- @@error SQL errors --- --- Changes: --- --- ================================================================= -ALTER PROCEDURE [LIS].[p_load_demographics] -AS -BEGIN - -- SET NOCOUNT ON added to prevent extra result sets from - -- interfering with SELECT statements. - SET NOCOUNT ON; - DECLARE - @errno INT, - @error INTEGER, - @errormsg VARCHAR(MAX), - @hl7_messageId VARCHAR(50), - @hl7_messageControl VARCHAR(50), - @hl7_processed_date_tm VARCHAR(20), - @msgCursor CURSOR, - - -- cursor columns: - @RowId INT, - @Id VARCHAR(6), - @Gender VARCHAR(1), - @BirthDate DATETIME2, - @DeathDate DATETIME2, - @Breed VARCHAR(2), - @Species VARCHAR(MAX), - @isAlive VARCHAR(1), - @Sire VARCHAR(6), - @Dam VARCHAR(6), - @Modified DATETIME2, - @ModifiedBy VARCHAR(MAX), - @Processed INT, - @ObjectId UNIQUEIDENTIFIER, - @date DATETIME - - SET @date = GETDATE() - SET @hl7_processed_date_tm = FORMAT(GETDATE(),'yyyyMMddHHmmss') - - - -- Start a new transaction - SET XACT_ABORT ON; - begin transaction trans1 - - set @msgCursor = CURSOR LOCAL FOR - SELECT RowId, - Id, - Gender, - BirthDate, - DeathDate, - Breed, - Species, - isAlive, - Sire, - Dam, - Modified, - ModifiedBy, - Processed, - ObjectId - FROM LIS.DemographicsHL7Staging AS h - WHERE h.Processed = 0 - ORDER BY RowId ASC - - FOR READ ONLY - - OPEN @msgCursor - - FETCH @msgCursor INTO @RowId, @Id, @Gender, @BirthDate, @DeathDate, @Breed, @Species, @isAlive, @Sire, @Dam, @Modified, @ModifiedBy, @Processed, @ObjectId - - WHILE (@@FETCH_STATUS = 0) - BEGIN - /* - 1. You must generate a UNIQUE MessageID. We use a GUID (Select NewID() in MS SQL Works just fine), but any guaranteed unique key value which will fit into the - MessageID columns is fine. - - */ - SET @hl7_messageId = NEWID() - SET @hl7_messageControl = FORMAT(GETDATE(),'yyyyMMddHHmmssffff') - - /* - Step 2. (NOTE that steps 2 and 3 are interchangeable). You should then insert the appropriate rows into the _MessageManifest table. Again this table - contains only 3 pertinent columns the MessageID (generated in step 1), the SegmentName (MSH, PID, EVN etc, etc) and the SegmentIDX which is the physical - sequence in which each segment should appear in the message. MSH = 1, and so on and so on. There should be 1 row in this table for every HL7 segment - which your message contains. This SegmentIDX column is used to link/list the IDX column in the underlying segment data tables. - */ - - BEGIN TRY - -- MSH - INSERT INTO tac_hl7_staging.dbo.TAC_MessageManifest - ( - MessageID, - SegmentName, - SegmentIDX - ) - VALUES - ( @hl7_messageId, -- MessageID - varchar(50) - 'MSH', -- SegmentName - varchar(10) - 1 -- SegmentIDX - int - ) - -- PID - INSERT INTO tac_hl7_staging.dbo.TAC_MessageManifest - ( - MessageID, - SegmentName, - SegmentIDX - ) - VALUES - ( @hl7_messageId, -- MessageID - varchar(50) - 'PID', -- SegmentName - varchar(10) - 2 -- SegmentIDX - int - ) - -- NTE - INSERT INTO tac_hl7_staging.dbo.TAC_MessageManifest - ( - MessageID, - SegmentName, - SegmentIDX - ) - VALUES - ( @hl7_messageId, -- MessageID - varchar(50) - 'NTE', -- SegmentName - varchar(10) - 3 -- SegmentIDX - int - ) - END TRY - BEGIN CATCH - select @error = @@ERROR - SELECT @errormsg = 'Error inserting message: *' + @hl7_messageid + '* during Step 2 ' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() - goto error - END CATCH - - /* - Step 3. (NOTE that steps 2 and 3 are interchangeable). You then populate the underlying data tables by inserting rows with MessageID (generated in step 1) and IDX - (equal to the SegmentIDX from step 2) and then complete the data fields. IMPORTANT NOTE: If you are creating HL7 segment data for a segment which has 2 tables - associated with it (Like the IN1 segment or GT1 segment etc) then you must insert a row into BOTH the _A table and the _B table even if you aren't populating - any data fields other than the MessageID and the IDX. - */ - - - -- Insert row into MSH table (dbo.TAC_Segment_MSH_A) - BEGIN TRY - - INSERT INTO tac_hl7_staging.dbo.TAC_Segment_MSH_A - ( - MessageID, - IDX, - MSH_F3_C1, -- Sending Application - MSH_F4_C1, -- Sending Facility - MSH_F5_C1, -- Receiving Application - MSH_F7_C1, -- Date/Time ofMessage - MSH_F9_C1, -- Message Type - MSH_F9_C2, -- Trigger Event ID - MSH_F10_C1, -- Message Control ID - MSH_F11_C1, -- Processing ID - MSH_F12_C1 -- Version ID (HL7) - ) - VALUES - ( @hl7_messageId, - 1, - 'TAC', - 'SNPRC', - 'HARVEST', - @hl7_processed_date_tm, - 'ADT', -- Patient Administration - 'A08', -- Update patient information (event A08) - @hl7_messageControl, - 'P', -- Production - '2.3' - ) - - - -- Insert row into the PID table (dbo.TAC_Segment_PID_A) - -- ?? Where do Breed and Species go ?? - - INSERT INTO tac_hl7_staging.dbo.TAC_Segment_PID_A - ( - MessageID, - IDX, - PID_F1_C1, - PID_F2_C1, - PID_F3_C1, - PID_F7_C1, - PID_F8_C1, - PID_F10_C1, - PID_F22_C1, - PID_F29_C1, - PID_F30_C1 - ) - VALUES - ( @hl7_messageId, -- MessageID - varchar(50) - 2, -- IDX - int - '1', -- Set Id - @id, -- Patient_id (External ID) - @id, -- Patient_id (Internal ID) - FORMAT(@BirthDate,'yyyyMMddHHmm'), -- Date of Birth - @Gender, -- Sex - RTRIM(@Species), -- Race - Species - RTRIM(@Breed), -- Ethnic Group - Breed - FORMAT(@DeathDate,'yyyyMMddHHmm'), -- Patient Death Date and Time - @isAlive -- Patient Death Indicator - ) - - -- Insert row into the NTE table (dbo.TAC_Segment_NTE_A) - INSERT INTO tac_hl7_staging.dbo.TAC_Segment_NTE_A - ( - MessageID, - IDX, - NTE_F1_C1, - NTE_F2_C1, - NTE_F3_C1 - ) - VALUES - ( @hl7_messageId, -- MessageID - varchar(50) - 3, -- IDX - int - '1', -- NTE_F1_C1 - varchar(20) Set Id - 'Export Date', -- NTE_F2_C1 - varchar(20) Source of comment - FORMAT(GETDATE(),'yyyyMMddHHmmss') -- NTE_F3_C1 - varchar(max) Comment - ) - END TRY - BEGIN CATCH - select @error = @@ERROR - SELECT @errormsg = 'Error inserting message: *' + @hl7_messageid + '* during Step 3 ' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() - goto error - END CATCH - - /* - Step 4. After you have done all of this then you will insert a row into the _HL7Data table using the MessageID (generated in step 1). - ANOTHER IMPORTANT NOTE: If you are creating messages that use HL7 Repeating fields or SubComponent values then make sure that you review the section on HL7 - Repeating Fields thoroughly. - */ - - -- Insert row into the TAC_HL7Data Table - BEGIN TRY - - INSERT INTO tac_hl7_staging.dbo.TAC_HL7Data - ( - MessageID, - VendorName, - VendorVersion, - MsgControl, - PartnerAPP, - DateLoaded, - LastLoaded, - LoadCount, - MsgType, - MsgEvent, - Outbound, - Inbound, - Processed, - Warnings, - Loaded, - SchemaLoaded, - StatusMessage, - ArchiveID, - HL7Format, - SegmentCount, - MessageSize, - HL7Message - ) - VALUES - ( @hl7_messageId, -- MessageID - varchar(50) - 'TAC', -- VendorName - varchar(50) - '2.3', -- VendorVersion - varchar(25) - @hl7_messageControl, -- MsgControl - varchar(50) - @hl7_messageControl, -- PartnerAPP - varchar(128) - recommended to use MsgControl ID - GETDATE(), -- DateLoaded - datetime - GETDATE(), -- LastLoaded - datetime - 1, -- LoadCount - int - 'ADT', -- MsgType - varchar(20) - 'A08', -- MsgEvent - varchar(20) - 1, -- Outbound - int - 0, -- Inbound - int - 0, -- Processed - int - 0, -- Warnings - int - 0, -- Loaded - int - 0, -- SchemaLoaded - int - '', -- StatusMessage - varchar(1024) - '', -- ArchiveID - varchar(50) - 0, -- HL7Format - int - 0, -- SegmentCount - int - 0, -- MessageSize - int - '' -- HL7Message - varchar(max) - ) - END TRY - BEGIN CATCH - select @error = @@ERROR - SELECT @errormsg = 'Error inserting message: *' + @hl7_messageid + '* during Step 4 ' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() - goto error - END CATCH - - /* - Step 5. Mark the records in the staging table as processed (0 = unprocessed, 1 = processed) - */ - - -- update staging table - BEGIN TRY - UPDATE h - SET Processed = 1 - FROM animal.LIS.DemographicsHL7Staging AS h - WHERE h.ObjectId = @ObjectId - END TRY - BEGIN CATCH - select @error = @@ERROR - SELECT @errormsg = 'Error inserting message: *' + @hl7_messageid + '* during Step 5 ' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() - goto error - END CATCH - - - - -- next row - FETCH NEXT FROM @msgCursor INTO @RowId, @Id, @Gender, @BirthDate, @DeathDate, @Breed, @Species, @isAlive, @Sire, @Dam, @Modified, @ModifiedBy, @Processed, @ObjectId - - END - - CLOSE @msgCursor - DEALLOCATE @msgCursor - -- Jump over error handling - GOTO finis - - -- error handling - error: - ROLLBACK; - - -- Update error log - INSERT INTO LIS.HL7ExportErrorLog - ( - ObjectId, - ProcessedDateTm, - MessageControlId, - PatientId, - ErrorMsg, - UserName, - EntryDateTm - ) - VALUES - ( @ObjectId, -- ObjectId of demographics row -- varchar(50) - GETDATE(), -- PROCESSED_DATE_TM - datetime - @hl7_messageControl, -- MESSAGE_CONTROL_ID - varchar(50) - @Id, -- PATIENT_ID - varchar(20) - @errormsg, -- ERROR_MSG - varchar(max) - @ModifiedBy, -- USER_NAME - varchar(128) - @Modified -- ENTRY_DATE_TM - datetime - ); - - -- Note to self: XACT_ABORT (set above) will rollback transaction - THROW 51000, @errormsg, 1 - --- If no error occurred, commit the entire transaction. - finis: - COMMIT transaction trans1 - - RETURN 0 - -END - - -GO - --- Table permissions -GRANT EXEC ON LIS.p_load_demographics TO z_labkey; -GRANT VIEW DEFINITION ON LIS.p_load_demographics TO z_labkey; - -GO - -USE tac_hl7_staging -GO - -GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON tac_hl7_staging.dbo.TAC_MessageManifest TO labkey; -GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON tac_hl7_staging.dbo.TAC_Segment_MSH_A TO labkey; -GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON tac_hl7_staging.dbo.TAC_Segment_PID_A TO labkey; -GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON tac_hl7_staging.dbo.TAC_Segment_NTE_A TO labkey; -GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON tac_hl7_staging.dbo.TAC_HL7Data TO labkey; - -GO - -USE animal -go \ No newline at end of file From 0b508d62a3d130048323d4bcff90d807228d747c Mon Sep 17 00:00:00 2001 From: Terry J Hawkins Date: Fri, 8 Jul 2022 16:40:37 -0500 Subject: [PATCH 06/17] - Still working on pivot queries - Begin adding ETLs to bring Sqlmed data into new table structures - Fixed FK in OBR table in metadata --- snprc_ehr/resources/etls/SqlmedMsh.xml | 22 +++++++ snprc_ehr/resources/etls/SqlmedObr.xml | 22 +++++++ .../snprc_ehr/HL7BiochemistryPivot.sql | 22 +++---- .../snprc_ehr/HL7CulturePivot.query.xml | 9 +++ .../queries/snprc_ehr/HL7CulturePivot.sql | 23 +++---- .../queries/snprc_ehr/HL7HematologyPivot.sql | 6 +- .../snprc_ehr/HL7HistologyPivot.query.xml | 9 +++ .../queries/snprc_ehr/HL7HistologyPivot.sql | 38 ++++++++++++ .../queries/snprc_ehr/HL7MiscPivot.query.xml | 9 +++ .../queries/snprc_ehr/HL7MiscPivot.sql | 38 ++++++++++++ .../snprc_ehr/HL7ParasitologyPivot.query.xml | 9 +++ .../snprc_ehr/HL7ParasitologyPivot.sql | 38 ++++++++++++ .../snprc_ehr/HL7SurveillancePivot.query.xml | 9 +++ .../snprc_ehr/HL7SurveillancePivot.sql | 32 ++++++++++ .../snprc_ehr/HL7SurveillancePivotInner.sql | 60 +++++++++++++++++++ .../snprc_ehr/HL7UnknownPivot.query.xml | 9 +++ .../queries/snprc_ehr/HL7UnknownPivot.sql | 38 ++++++++++++ .../queries/snprc_ehr/HL7Urinalysis.query.xml | 9 +++ .../queries/snprc_ehr/HL7UrinalysisPivot.sql | 38 ++++++++++++ snprc_ehr/resources/schemas/snprc_ehr.xml | 7 +-- .../HL7/create_v_sqlmed_msh.sql | 49 +++++++++++++++ .../HL7/create_v_sqlmed_obr.sql | 53 ++++++++++++++++ 22 files changed, 522 insertions(+), 27 deletions(-) create mode 100644 snprc_ehr/resources/etls/SqlmedMsh.xml create mode 100644 snprc_ehr/resources/etls/SqlmedObr.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.query.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot.query.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot.sql create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot.query.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot.sql create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot.query.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot.sql create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot.query.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot.sql create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivotInner.sql create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot.query.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot.sql create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7Urinalysis.query.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7UrinalysisPivot.sql create mode 100644 snprc_ehr/resources/source_queries/HL7/create_v_sqlmed_msh.sql create mode 100644 snprc_ehr/resources/source_queries/HL7/create_v_sqlmed_obr.sql diff --git a/snprc_ehr/resources/etls/SqlmedMsh.xml b/snprc_ehr/resources/etls/SqlmedMsh.xml new file mode 100644 index 000000000..ecae31d59 --- /dev/null +++ b/snprc_ehr/resources/etls/SqlmedMsh.xml @@ -0,0 +1,22 @@ + + + Sqlmed MSH data + Sqlmed MSH Data (Synthetic) + + + Copy to target + + + + + + + + + + + + + + + diff --git a/snprc_ehr/resources/etls/SqlmedObr.xml b/snprc_ehr/resources/etls/SqlmedObr.xml new file mode 100644 index 000000000..fa109e07d --- /dev/null +++ b/snprc_ehr/resources/etls/SqlmedObr.xml @@ -0,0 +1,22 @@ + + + Sqlmed OBR data + Clinical Pathology OBR data + + + Copy to target + + + + + + + + + + + + + + + diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.sql index 712826bf7..3edd7b215 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.sql @@ -9,28 +9,30 @@ Unknown Urinalysis */ -SELECT - obr.ANIMAL_ID as id, - obr.OBSERVATION_DATE_TM as date, +SELECT obr.ANIMAL_ID as id, + obr.OBSERVATION_DATE_TM as date, obr.MESSAGE_ID, - obr.PROCEDURE_NAME, + COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME) as PROCEDURE_NAME, obr.PROCEDURE_ID, nte.COMMENT, - obx.TEST_NAME, + COALESCE (lp.TestName, obx.TEST_NAME) as TestName, + --obx.TEST_ID, MAX(obx.ABNORMAL_FLAGS) AS ABNORMAL_FLAGS, MAX(obx.QUALITATIVE_RESULT) as QUALITATIVE_RESULT, MAX(obx.RESULT) as RESULT FROM snprc_ehr.HL7_OBR obr - LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx +ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId WHERE obr.PROCEDURE_ID.Dataset = 'Biochemistry' -GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, obr.PROCEDURE_NAME, obr.PROCEDURE_ID, nte.COMMENT, obx.TEST_NAME - PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TEST_NAME - +GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME), obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) + PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TestName +-- -- IN -- ( --- select TestName as TEST_NAME from snprc_ehr.labwork_panels t +-- select TestName from snprc_ehr.labwork_panels t -- where t.includeInPanel = true AND t.ServiceId.Dataset='Biochemistry' -- ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.query.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.query.xml new file mode 100644 index 000000000..af585aeee --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.query.xml @@ -0,0 +1,9 @@ + + + +
+ Culture and Sensitivity Results Pivot +
+ + + \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.sql index a98d5ca0c..6144b0119 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.sql @@ -9,29 +9,30 @@ Unknown Urinalysis */ -SELECT - obr.ANIMAL_ID as id, - obr.OBSERVATION_DATE_TM as date, +SELECT obr.ANIMAL_ID as id, + obr.OBSERVATION_DATE_TM as date, obr.MESSAGE_ID, - obr.PROCEDURE_NAME, + COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME) as PROCEDURE_NAME, obr.PROCEDURE_ID, nte.COMMENT, - obx.TEST_NAME, + COALESCE (lp.TestName, obx.TEST_NAME) as TestName, --obx.TEST_ID, MAX(obx.ABNORMAL_FLAGS) AS ABNORMAL_FLAGS, MAX(obx.QUALITATIVE_RESULT) as QUALITATIVE_RESULT, MAX(obx.RESULT) as RESULT FROM snprc_ehr.HL7_OBR obr - LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx +ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId WHERE obr.PROCEDURE_ID.Dataset = 'Culture' -GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, obr.PROCEDURE_NAME, obr.PROCEDURE_ID, nte.COMMENT, obx.TEST_NAME --, obx.TEST_ID - PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TEST_NAME - --- TEST_ID IN +GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME), obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) + PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TestName +-- +-- IN -- ( --- select TestId as TEST_ID from snprc_ehr.labwork_panels t +-- select TestName from snprc_ehr.labwork_panels t -- where t.includeInPanel = true AND t.ServiceId.Dataset='Culture' -- ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot.sql index 2a208a0fc..0b43ae460 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot.sql @@ -1,3 +1,7 @@ +PARAMETERS ( + SAMPLE_TYPE VARCHAR default '' +) + SELECT obr.ANIMAL_ID as id, obr.OBSERVATION_DATE_TM as date, @@ -13,7 +17,7 @@ SELECT FROM snprc_ehr.HL7_OBR obr LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID -WHERE obr.PROCEDURE_ID.Dataset = 'Hematology' +WHERE obr.PROCEDURE_ID.Dataset = SAMPLE_TYPE GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, obr.PROCEDURE_NAME, obr.PROCEDURE_ID, nte.COMMENT, obx.TEST_NAME PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TEST_NAME diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot.query.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot.query.xml new file mode 100644 index 000000000..7a648b718 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot.query.xml @@ -0,0 +1,9 @@ + + + + + Histology Pivot +
+
+
+
\ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot.sql new file mode 100644 index 000000000..7ae200bd3 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot.sql @@ -0,0 +1,38 @@ +/* Valid Service types: + Biochemistry + Culture + Hematology + Histology + Misc Tests + Parasitology + Surveillance + Unknown + Urinalysis + */ +SELECT obr.ANIMAL_ID as id, + obr.OBSERVATION_DATE_TM as date, + obr.MESSAGE_ID, + COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME) as PROCEDURE_NAME, + obr.PROCEDURE_ID, + nte.COMMENT, + COALESCE (lp.TestName, obx.TEST_NAME) as TestName, + --obx.TEST_ID, + MAX(obx.ABNORMAL_FLAGS) AS ABNORMAL_FLAGS, + MAX(obx.QUALITATIVE_RESULT) as QUALITATIVE_RESULT, + MAX(obx.RESULT) as RESULT + +FROM snprc_ehr.HL7_OBR obr + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx +ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId +WHERE obr.PROCEDURE_ID.Dataset = 'Histology' + +GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME), obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) + PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TestName +-- +-- IN +-- ( +-- select TestName from snprc_ehr.labwork_panels t +-- where t.includeInPanel = true AND t.ServiceId.Dataset='Histology' +-- ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot.query.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot.query.xml new file mode 100644 index 000000000..e6171430c --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot.query.xml @@ -0,0 +1,9 @@ + + + + + Misc Tests Pivot +
+
+
+
\ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot.sql new file mode 100644 index 000000000..197c07be4 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot.sql @@ -0,0 +1,38 @@ +/* Valid Service types: + Biochemistry + Culture + Hematology + Histology + Misc Tests + Parasitology + Surveillance + Unknown + Urinalysis + */ +SELECT obr.ANIMAL_ID as id, + obr.OBSERVATION_DATE_TM as date, + obr.MESSAGE_ID, + COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME) as PROCEDURE_NAME, + obr.PROCEDURE_ID, + nte.COMMENT, + COALESCE (lp.TestName, obx.TEST_NAME) as TestName, + --obx.TEST_ID, + MAX(obx.ABNORMAL_FLAGS) AS ABNORMAL_FLAGS, + MAX(obx.QUALITATIVE_RESULT) as QUALITATIVE_RESULT, + MAX(obx.RESULT) as RESULT + +FROM snprc_ehr.HL7_OBR obr + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx +ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId +WHERE obr.PROCEDURE_ID.Dataset = 'Misc Tests' + +GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME), obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) + PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TestName +-- +-- IN +-- ( +-- select TestName from snprc_ehr.labwork_panels t +-- where t.includeInPanel = true AND t.ServiceId.Dataset='Misc Tests' +-- ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot.query.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot.query.xml new file mode 100644 index 000000000..c65b2bb0c --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot.query.xml @@ -0,0 +1,9 @@ + + + + + Parasitology Pivot +
+
+
+
\ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot.sql new file mode 100644 index 000000000..7228c9af7 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot.sql @@ -0,0 +1,38 @@ +/* Valid Service types: + Biochemistry + Culture + Hematology + Histology + Misc Tests + Parasitology + Surveillance + Unknown + Urinalysis + */ +SELECT obr.ANIMAL_ID as id, + obr.OBSERVATION_DATE_TM as date, + obr.MESSAGE_ID, + COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME) as PROCEDURE_NAME, + obr.PROCEDURE_ID, + nte.COMMENT, + COALESCE (lp.TestName, obx.TEST_NAME) as TestName, + --obx.TEST_ID, + MAX(obx.ABNORMAL_FLAGS) AS ABNORMAL_FLAGS, + MAX(obx.QUALITATIVE_RESULT) as QUALITATIVE_RESULT, + MAX(obx.RESULT) as RESULT + +FROM snprc_ehr.HL7_OBR obr + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx +ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId +WHERE obr.PROCEDURE_ID.Dataset = 'Parasitology' + +GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME), obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) + PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TestName +-- +-- IN +-- ( +-- select TestName from snprc_ehr.labwork_panels t +-- where t.includeInPanel = true AND t.ServiceId.Dataset='Parasitology' +-- ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot.query.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot.query.xml new file mode 100644 index 000000000..cfeec42e8 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot.query.xml @@ -0,0 +1,9 @@ + + + + + Surveillance Pivot +
+
+
+
\ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot.sql new file mode 100644 index 000000000..d64d8b19d --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot.sql @@ -0,0 +1,32 @@ +/* Valid Service types: + Biochemistry + Culture + Hematology + Histology + Misc Tests + Parasitology + Surveillance + Unknown + Urinalysis + */ + select Id, + date, + MESSAGE_ID, + PROCEDURE_NAME, + PROCEDURE_ID, + COMMENT, + TestName, + MAX(ABNORMAL_FLAGS) as ABNORMAL_FLAGS, + MAX(QUALITATIVE_RESULT) as QUALITATIVE_RESULT, + MAX(RESULT) as RESULT +from snprc_ehr.HL7SurveillancePivotInner + +GROUP BY id, date, MESSAGE_ID, PROCEDURE_NAME, PROCEDURE_NAME, PROCEDURE_ID, COMMENT, TestName + PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TestName +-- +-- IN +-- ( +-- select TestName from snprc_ehr.labwork_panels t +-- where t.includeInPanel = true AND t.ServiceId.Dataset='Surveillance' +-- ) + diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivotInner.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivotInner.sql new file mode 100644 index 000000000..80b736bc1 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivotInner.sql @@ -0,0 +1,60 @@ +/* Valid Service types: + Biochemistry + Culture + Hematology + Histology + Misc Tests + Parasitology + Surveillance + Unknown + Urinalysis + */ + SELECT + obr.ANIMAL_ID AS Id, + obr.OBSERVATION_DATE_TM as date, + obr.MESSAGE_ID, + COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME) as PROCEDURE_NAME, + obr.PROCEDURE_ID, + COALESCE (lp.TestName, obx.TEST_NAME) as TestName, + nte.COMMENT, + obx.ABNORMAL_FLAGS, + obx.QUALITATIVE_RESULT, + obx.RESULT + + FROM snprc_ehr.HL7_OBR obr + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId + WHERE obr.PROCEDURE_ID.Dataset = 'Surveillance' + + UNION + + SELECT + b.id, + b.date, + coalesce(b.runId, cast(b.Sequencenum as varchar)) as MESSAGE_ID, + b.serviceTestId.serviceId.ServiceName AS PROCEDURE_NAME, + b.serviceTestId.serviceId AS PROCEDURE_ID, + b.serviceTestId.testName AS TestName, + b.remark as COMMENT, + '' AS ABNORMAL_FLAGS, + b.qualresult as QUALITATIVE_RESULT, + b.RESULT as RESULT + FROM study.labworkTaqman b + WHERE b.serviceTestId.includeInPanel = true and b.qcstate.publicdata = true and b.serviceTestid.ServiceId.Dataset = 'Surveillance' + + union + + SELECT + b.id, + b.date, + coalesce(b.runId, b.objectid) as MESSAGE_ID, + b.serviceTestId.serviceId.ServiceName AS PROCEDURE_NAME, + b.serviceTestId.serviceId AS PROCEDURE_ID, + b.serviceTestId.testName AS TestName, + b.remark as COMMENT, + '' AS ABNORMAL_FLAGS, + b.qualresult as QUALITATIVE_RESULT, + b.RESULT as RESULT + FROM study.assay_labworkResults b + WHERE b.serviceTestId.includeInPanel = true and b.qcstate.publicdata = true and b.serviceTestid.ServiceId.Dataset = 'Surveillance' \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot.query.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot.query.xml new file mode 100644 index 000000000..3d532dcfd --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot.query.xml @@ -0,0 +1,9 @@ + + + + + Unknown Panel Category Pivot +
+
+
+
\ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot.sql new file mode 100644 index 000000000..3961a8649 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot.sql @@ -0,0 +1,38 @@ +/* Valid Service types: + Biochemistry + Culture + Hematology + Histology + Misc Tests + Parasitology + Surveillance + Unknown + Urinalysis + */ +SELECT obr.ANIMAL_ID as id, + obr.OBSERVATION_DATE_TM as date, + obr.MESSAGE_ID, + COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME) as PROCEDURE_NAME, + obr.PROCEDURE_ID, + nte.COMMENT, + COALESCE (lp.TestName, obx.TEST_NAME) as TestName, + --obx.TEST_ID, + MAX(obx.ABNORMAL_FLAGS) AS ABNORMAL_FLAGS, + MAX(obx.QUALITATIVE_RESULT) as QUALITATIVE_RESULT, + MAX(obx.RESULT) as RESULT + +FROM snprc_ehr.HL7_OBR obr + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx +ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId +WHERE obr.PROCEDURE_ID.Dataset = 'Unknown' + +GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME), obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) + PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TestName +-- +-- IN +-- ( +-- select TestName from snprc_ehr.labwork_panels t +-- where t.includeInPanel = true AND t.ServiceId.Dataset='Unknown' +-- ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7Urinalysis.query.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7Urinalysis.query.xml new file mode 100644 index 000000000..5e01645b2 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7Urinalysis.query.xml @@ -0,0 +1,9 @@ + + + + + Urinalysis Pivot +
+
+
+
\ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7UrinalysisPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7UrinalysisPivot.sql new file mode 100644 index 000000000..e4b0f709d --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7UrinalysisPivot.sql @@ -0,0 +1,38 @@ +/* Valid Service types: + Biochemistry + Culture + Hematology + Histology + Misc Tests + Parasitology + Surveillance + Unknown + Urinalysis + */ +SELECT obr.ANIMAL_ID as id, + obr.OBSERVATION_DATE_TM as date, + obr.MESSAGE_ID, + COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME) as PROCEDURE_NAME, + obr.PROCEDURE_ID, + nte.COMMENT, + COALESCE (lp.TestName, obx.TEST_NAME) as TestName, + --obx.TEST_ID, + MAX(obx.ABNORMAL_FLAGS) AS ABNORMAL_FLAGS, + MAX(obx.QUALITATIVE_RESULT) as QUALITATIVE_RESULT, + MAX(obx.RESULT) as RESULT + +FROM snprc_ehr.HL7_OBR obr + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx +ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId +WHERE obr.PROCEDURE_ID.Dataset = 'Urinalysis' + +GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME), obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) + PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TestName +-- +-- IN +-- ( +-- select TestName from snprc_ehr.labwork_panels t +-- where t.includeInPanel = true AND t.ServiceId.Dataset='Urinalysis' +-- ) \ No newline at end of file diff --git a/snprc_ehr/resources/schemas/snprc_ehr.xml b/snprc_ehr/resources/schemas/snprc_ehr.xml index 620dc8c8e..1328accc5 100644 --- a/snprc_ehr/resources/schemas/snprc_ehr.xml +++ b/snprc_ehr/resources/schemas/snprc_ehr.xml @@ -2132,12 +2132,9 @@ varchar http://cpas.labkey.com/Study#ParticipantId - - ptid - study - demographics + animal Id @@ -2167,7 +2164,7 @@
- HL7 OBR STAGING + HL7 `OBR` STAGING OBJECT_ID diff --git a/snprc_ehr/resources/source_queries/HL7/create_v_sqlmed_msh.sql b/snprc_ehr/resources/source_queries/HL7/create_v_sqlmed_msh.sql new file mode 100644 index 000000000..61fa46935 --- /dev/null +++ b/snprc_ehr/resources/source_queries/HL7/create_v_sqlmed_msh.sql @@ -0,0 +1,49 @@ +USE [animal]; +GO + +/****** Object: View [labkey_etl].[V_CLINPATHRUNS] Script Date: 7/7/2022 3:09:20 PM ******/ +SET ANSI_NULLS ON; +GO + +SET QUOTED_IDENTIFIER ON; +GO + + + +ALTER VIEW [labkey_etl].[v_Sqlmed_msh] +AS +-- ========================================================================================== +-- Author: Terry Hawkins +-- Create date: 7-7-2022 +-- Description: Selects the MSH records from Sqlmed data to populate LabKey HL7 tables +-- Changes: +-- ========================================================================================== +SELECT obr.MESSAGE_ID AS MESSAGE_ID, + 0 AS IDX, + 'Sqlmed' AS SENDING_APPLICATION, + 'TxBiomed' AS SENDING_FACILITY, + 'TAC' AS RECEIVING_APPLICATION, + 'TxBiomed' AS RECEIVING_FACILITY, + 'ORU' AS MESSAGE_TYPE, + '' AS TRIGGER_EVENT_ID, + obr.MESSAGE_CONTROL_ID AS MESSAGE_CONTROL_ID, + obr.VERIFIED_DATE_TM AS MESSAGE_DATE_TM, + obr.OBJECT_ID AS OBJECT_ID, + obr.ENTRY_DATE_TM AS ENTRY_DATE_TM, + dbo.f_map_username(obr.USER_NAME) AS USER_NAME, + obr.TIMESTAMP AS TIMESTAMP +FROM dbo.CLINICAL_PATH_OBR AS obr + + -- select primates only from the TxBiomed colony + INNER JOIN labkey_etl.V_DEMOGRAPHICS AS d ON d.id = obr.ANIMAL_ID + LEFT OUTER JOIN dbo.TAC_COLUMNS AS tc ON tc.object_id = obr.OBJECT_ID +WHERE obr.RESULT_STATUS IN ( 'F', 'C', 'D' ) + AND obr.VERIFIED_DATE_TM IS NOT NULL; + + +GO + +-- Table permissions +GRANT SELECT ON [labkey_etl].[v_Sqlmed_msh] TO z_labkey; + +GO \ No newline at end of file diff --git a/snprc_ehr/resources/source_queries/HL7/create_v_sqlmed_obr.sql b/snprc_ehr/resources/source_queries/HL7/create_v_sqlmed_obr.sql new file mode 100644 index 000000000..070e536a1 --- /dev/null +++ b/snprc_ehr/resources/source_queries/HL7/create_v_sqlmed_obr.sql @@ -0,0 +1,53 @@ +USE [animal]; +GO + +SET ANSI_NULLS ON; +GO + +SET QUOTED_IDENTIFIER ON; +GO + + +ALTER VIEW labkey_etl.v_Sqlmed_obr +AS +-- ========================================================================================== +-- Author: Terry Hawkins +-- Create date: 7-7-2022 +-- Description: Selects the OBR records from Sqlmed data to populate LabKey HL7 tables +-- ========================================================================================== +SELECT obr.MESSAGE_ID AS MESSAGE_ID, + COALESCE (obr.MESSAGE_CONTROL_ID, '0') AS MESSAGE_CONTROL_ID, + 1 AS IDX, + LTRIM(RTRIM(obr.ANIMAL_ID)) AS ANIMAL_ID, + --obr.VERIFIED_DATE_TM AS VERIFIED_DATE_TM, + obr.REQUESTED_DATE_TM AS REQUESTED_DATE_TM, + obr.OBSERVATION_DATE_TM AS OBSERVATION_DATE_TM, + obr.SPECIMEN_RECEIVED_DATE_TM AS SPECIMEN_RECEIVED_DATE_TM, + CAST(CAST(obr.VERIFIED_DATE_TM AS DATETIME2(0)) AS DATETIME) AS VERIFIED_DATE_TM, + obr.PV1_VISIT_NUM AS PV1_VISIT_NUM, + obr.SET_ID AS SET_ID, + obr.SPECIMEN_NUM AS SPECIMEN_NUM, + obr.PROCEDURE_ID AS PROCEDURE_ID, + lu.ServiceName AS PROCEDURE_NAME, + obr.PRIORITY AS PRIORITY, + obr.RESULT_STATUS AS RESULT_STATUS, + obr.TECHNICIAN_NAME AS TECHNICIAN_FIRST_NAME, + obr.TECHNICIAN_INITIALS AS TECHNICIAN_LAST_NAME, + obr.CHARGE_ID AS CHARGE_ID, + obr.OBJECT_ID AS OBJECT_ID, + dbo.f_map_username(obr.USER_NAME) AS USER_NAME, + obr.ENTRY_DATE_TM AS ENTRY_DATE_TM, + obr.TIMESTAMP AS TIMESTAMP +FROM dbo.CLINICAL_PATH_OBR AS obr + + -- select primates only from the TxBiomed colony + INNER JOIN labkey_etl.V_DEMOGRAPHICS AS d ON d.id = obr.ANIMAL_ID + INNER JOIN dbo.CLINICAL_PATH_LABWORK_SERVICES AS lu ON obr.PROCEDURE_ID = lu.ServiceId + LEFT OUTER JOIN dbo.TAC_COLUMNS AS tc ON tc.object_id = obr.OBJECT_ID +WHERE obr.RESULT_STATUS IN ( 'F', 'C', 'D' ) + AND obr.VERIFIED_DATE_TM IS NOT NULL; + +GO + +GRANT SELECT ON labkey_etl.v_Sqlmed_obr TO z_labkey; +GO From 3cdc9c63ff8b8f2fb488b5058ea7ecb4a0446fdc Mon Sep 17 00:00:00 2001 From: Terry J Hawkins Date: Wed, 13 Jul 2022 09:30:17 -0500 Subject: [PATCH 07/17] - Added SQL scripts in source_queries to migrate old clinpath data to new datasets; runs in SSMS -Refactored FK link between assay_labworkResults, labworkTaqman and labworkPanels; FK changed from RowId to ObjectId - added pivot columns to test type specific pivot queries - added metadata for pivot queries - Refactored LabResultsLabworkType.java to use LabworkResultsAll as data source for labwork data - removed unused source queries and ETLs - added serviceTestId column to HL7_OBX table --- snprc_ehr/resources/etls/SqlmedMsh.xml | 22 --- snprc_ehr/resources/etls/SqlmedObr.xml | 22 --- .../snprc_ehr/HL7BiochemistryPivot.sql | 12 +- .../snprc_ehr/HL7BiochemistryPivot/.qview.xml | 6 + .../queries/snprc_ehr/HL7CulturePivot.sql | 12 +- .../snprc_ehr/HL7CulturePivot/.qview.xml | 6 + .../queries/snprc_ehr/HL7HematologyPivot.sql | 16 +-- .../snprc_ehr/HL7HematologyPivot/.qview.xml | 6 + .../queries/snprc_ehr/HL7HistologyPivot.sql | 12 +- .../snprc_ehr/HL7HistologyPivot/.qview.xml | 6 + .../queries/snprc_ehr/HL7MiscPivot.sql | 12 +- .../queries/snprc_ehr/HL7MiscPivot/.qview.xml | 6 + .../snprc_ehr/HL7ParasitologyPivot.sql | 11 +- .../snprc_ehr/HL7ParasitologyPivot/.qview.xml | 6 + .../snprc_ehr/HL7SurveillancePivot.sql | 12 +- .../snprc_ehr/HL7SurveillancePivot/.qview.xml | 6 + .../snprc_ehr/HL7SurveillancePivotInner.sql | 13 +- .../queries/snprc_ehr/HL7UnknownPivot.sql | 8 +- .../snprc_ehr/HL7UnknownPivot/.qview.xml | 6 + .../queries/snprc_ehr/HL7UrinalysisPivot.sql | 11 +- .../snprc_ehr/HL7UrinalysisPivot/.qview.xml | 6 + .../resources/queries/snprc_ehr/HL7_OBX.js | 66 +++++++++ .../queries/study/assay_labworkResults.js | 4 +- .../study/assay_labworkResults.query.xml | 2 +- .../queries/study/labworkResultsAll.query.xml | 6 +- .../queries/study/labworkResultsAll.sql | 130 +++++++++--------- .../queries/study/labworkTaqman.query.xml | 2 +- .../resources/queries/study/labworkTaqman.sql | 4 +- .../study/datasets/datasets_metadata.xml | 6 +- .../sqlserver/snprc_ehr-21.001-22.000.sql | 3 +- snprc_ehr/resources/schemas/snprc_ehr.xml | 12 +- .../HL7/create_v_sqlmed_msh.sql | 49 ------- .../HL7/create_v_sqlmed_obr.sql | 53 ------- .../source_queries/HL7/p_load_hl7_data.sql | 5 + .../history/LabResultsLabworkType.java | 5 +- 35 files changed, 269 insertions(+), 295 deletions(-) delete mode 100644 snprc_ehr/resources/etls/SqlmedMsh.xml delete mode 100644 snprc_ehr/resources/etls/SqlmedObr.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot/.qview.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot/.qview.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot/.qview.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot/.qview.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot/.qview.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot/.qview.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot/.qview.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot/.qview.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7UrinalysisPivot/.qview.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7_OBX.js delete mode 100644 snprc_ehr/resources/source_queries/HL7/create_v_sqlmed_msh.sql delete mode 100644 snprc_ehr/resources/source_queries/HL7/create_v_sqlmed_obr.sql diff --git a/snprc_ehr/resources/etls/SqlmedMsh.xml b/snprc_ehr/resources/etls/SqlmedMsh.xml deleted file mode 100644 index ecae31d59..000000000 --- a/snprc_ehr/resources/etls/SqlmedMsh.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - Sqlmed MSH data - Sqlmed MSH Data (Synthetic) - - - Copy to target - - - - - - - - - - - - - - - diff --git a/snprc_ehr/resources/etls/SqlmedObr.xml b/snprc_ehr/resources/etls/SqlmedObr.xml deleted file mode 100644 index fa109e07d..000000000 --- a/snprc_ehr/resources/etls/SqlmedObr.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - Sqlmed OBR data - Clinical Pathology OBR data - - - Copy to target - - - - - - - - - - - - - - - diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.sql index 3edd7b215..feca5f5a0 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.sql @@ -30,9 +30,9 @@ WHERE obr.PROCEDURE_ID.Dataset = 'Biochemistry' GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME), obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TestName --- --- IN --- ( --- select TestName from snprc_ehr.labwork_panels t --- where t.includeInPanel = true AND t.ServiceId.Dataset='Biochemistry' --- ) \ No newline at end of file + +IN + ( + select TestName from snprc_ehr.labwork_panels t + where t.includeInPanel = true AND t.ServiceId.Dataset='Biochemistry' + ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot/.qview.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot/.qview.xml new file mode 100644 index 000000000..b18074c28 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot/.qview.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.sql index 6144b0119..821e21c0e 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.sql @@ -30,9 +30,9 @@ WHERE obr.PROCEDURE_ID.Dataset = 'Culture' GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME), obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TestName --- --- IN --- ( --- select TestName from snprc_ehr.labwork_panels t --- where t.includeInPanel = true AND t.ServiceId.Dataset='Culture' --- ) \ No newline at end of file + +IN + ( + select TestName from snprc_ehr.labwork_panels t + where t.includeInPanel = true AND t.ServiceId.Dataset='Culture' + ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot/.qview.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot/.qview.xml new file mode 100644 index 000000000..b18074c28 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot/.qview.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot.sql index 0b43ae460..e3ceba7e5 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot.sql @@ -1,7 +1,3 @@ -PARAMETERS ( - SAMPLE_TYPE VARCHAR default '' -) - SELECT obr.ANIMAL_ID as id, obr.OBSERVATION_DATE_TM as date, @@ -17,13 +13,13 @@ SELECT FROM snprc_ehr.HL7_OBR obr LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID -WHERE obr.PROCEDURE_ID.Dataset = SAMPLE_TYPE +WHERE obr.PROCEDURE_ID.Dataset = 'Hematology' GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, obr.PROCEDURE_NAME, obr.PROCEDURE_ID, nte.COMMENT, obx.TEST_NAME PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TEST_NAME --- IN --- ( --- select TestName as TEST_NAME from snprc_ehr.labwork_panels t --- where t.includeInPanel = true AND t.ServiceId.Dataset='Hematology' --- ) \ No newline at end of file +IN + ( + select TestName as TEST_NAME from snprc_ehr.labwork_panels t + where t.includeInPanel = true AND t.ServiceId.Dataset='Hematology' + ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot/.qview.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot/.qview.xml new file mode 100644 index 000000000..b18074c28 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot/.qview.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot.sql index 7ae200bd3..d0a4bebc7 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot.sql @@ -30,9 +30,9 @@ WHERE obr.PROCEDURE_ID.Dataset = 'Histology' GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME), obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TestName --- --- IN --- ( --- select TestName from snprc_ehr.labwork_panels t --- where t.includeInPanel = true AND t.ServiceId.Dataset='Histology' --- ) \ No newline at end of file + +IN + ( + select TestName from snprc_ehr.labwork_panels t + where t.includeInPanel = true AND t.ServiceId.Dataset='Histology' + ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot/.qview.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot/.qview.xml new file mode 100644 index 000000000..b18074c28 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot/.qview.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot.sql index 197c07be4..362bb0147 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot.sql @@ -30,9 +30,9 @@ WHERE obr.PROCEDURE_ID.Dataset = 'Misc Tests' GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME), obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TestName --- --- IN --- ( --- select TestName from snprc_ehr.labwork_panels t --- where t.includeInPanel = true AND t.ServiceId.Dataset='Misc Tests' --- ) \ No newline at end of file + +IN + ( + select TestName from snprc_ehr.labwork_panels t + where t.includeInPanel = true AND t.ServiceId.Dataset='Misc Tests' + ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot/.qview.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot/.qview.xml new file mode 100644 index 000000000..b18074c28 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot/.qview.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot.sql index 7228c9af7..5b1231928 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot.sql @@ -30,9 +30,8 @@ WHERE obr.PROCEDURE_ID.Dataset = 'Parasitology' GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME), obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TestName --- --- IN --- ( --- select TestName from snprc_ehr.labwork_panels t --- where t.includeInPanel = true AND t.ServiceId.Dataset='Parasitology' --- ) \ No newline at end of file +IN + ( + select TestName from snprc_ehr.labwork_panels t + where t.includeInPanel = true AND t.ServiceId.Dataset='Parasitology' + ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot/.qview.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot/.qview.xml new file mode 100644 index 000000000..b18074c28 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot/.qview.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot.sql index d64d8b19d..c508edfd1 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot.sql @@ -23,10 +23,10 @@ from snprc_ehr.HL7SurveillancePivotInner GROUP BY id, date, MESSAGE_ID, PROCEDURE_NAME, PROCEDURE_NAME, PROCEDURE_ID, COMMENT, TestName PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TestName --- --- IN --- ( --- select TestName from snprc_ehr.labwork_panels t --- where t.includeInPanel = true AND t.ServiceId.Dataset='Surveillance' --- ) + + IN + ( + select TestName from snprc_ehr.labwork_panels t + where t.includeInPanel = true AND t.ServiceId.Dataset='Surveillance' + ) diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot/.qview.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot/.qview.xml new file mode 100644 index 000000000..b18074c28 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot/.qview.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivotInner.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivotInner.sql index 80b736bc1..9547e526e 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivotInner.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivotInner.sql @@ -1,14 +1,3 @@ -/* Valid Service types: - Biochemistry - Culture - Hematology - Histology - Misc Tests - Parasitology - Surveillance - Unknown - Urinalysis - */ SELECT obr.ANIMAL_ID AS Id, obr.OBSERVATION_DATE_TM as date, @@ -55,6 +44,6 @@ b.remark as COMMENT, '' AS ABNORMAL_FLAGS, b.qualresult as QUALITATIVE_RESULT, - b.RESULT as RESULT + NULL as RESULT FROM study.assay_labworkResults b WHERE b.serviceTestId.includeInPanel = true and b.qcstate.publicdata = true and b.serviceTestid.ServiceId.Dataset = 'Surveillance' \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot.sql index 3961a8649..9a8db1f6a 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot.sql @@ -30,9 +30,9 @@ WHERE obr.PROCEDURE_ID.Dataset = 'Unknown' GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME), obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TestName --- --- IN + +-- IN -- ( --- select TestName from snprc_ehr.labwork_panels t --- where t.includeInPanel = true AND t.ServiceId.Dataset='Unknown' +-- select TestName from snprc_ehr.labwork_panels t +-- where t.includeInPanel = true AND t.ServiceId.Dataset='Unknown' -- ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot/.qview.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot/.qview.xml new file mode 100644 index 000000000..b18074c28 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot/.qview.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7UrinalysisPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7UrinalysisPivot.sql index e4b0f709d..630384a82 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7UrinalysisPivot.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7UrinalysisPivot.sql @@ -30,9 +30,8 @@ WHERE obr.PROCEDURE_ID.Dataset = 'Urinalysis' GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME), obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TestName --- --- IN --- ( --- select TestName from snprc_ehr.labwork_panels t --- where t.includeInPanel = true AND t.ServiceId.Dataset='Urinalysis' --- ) \ No newline at end of file +IN + ( + select TestName from snprc_ehr.labwork_panels t + where t.includeInPanel = true AND t.ServiceId.Dataset='Urinalysis' + ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7UrinalysisPivot/.qview.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7UrinalysisPivot/.qview.xml new file mode 100644 index 000000000..b18074c28 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7UrinalysisPivot/.qview.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7_OBX.js b/snprc_ehr/resources/queries/snprc_ehr/HL7_OBX.js new file mode 100644 index 000000000..4afea6b77 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7_OBX.js @@ -0,0 +1,66 @@ +/** + * Created by thawkins on 7/12/2022 + */ + +require("ehr/triggers").initScript(this); + +var cachedIds = {}; +var cacheKey = ''; + +// the missing value codes will link the record up to an unknown service (needed for ancient legacy data) +var missingServiceId = 999999; +var missingTestId = 999999; + +function onUpsert(helper, scriptErrors, row, oldRow) { + // If we don't have the serviceTestId try resolving it based on the testId and serviceId + if (!row.serviceTestId) { + cacheKey = row.serviceId + '~' + row.testId; + row.serviceTestId = cachedIds[cacheKey]; + if (row.serviceTestId === undefined || row.serviceTestId == 'undefined') { + if (!assignServiceTestId(row, row.serviceId, row.testId)) { + // point the serviceTestId to a missing value type if the serviceId/testId is missing + // in the snprc_ehr.labkey_panels table + assignServiceTestId(row, missingServiceId, missingTestId); + } + } + else + { + // console.log("Cache hit: " + cachedIds[cacheKey]); + } + + } +} + +function assignServiceTestId (row, serviceId, testId ) { + + var result = true; + + LABKEY.Query.selectRows({ + schemaName: 'snprc_ehr', + queryName: 'labwork_panels', + columns: 'objectId', + scope: this, + filterArray: [ + LABKEY.Filter.create('ServiceId', serviceId, LABKEY.Filter.Types.EQUAL), + LABKEY.Filter.create('TestId', testId, LABKEY.Filter.Types.EQUAL) + ], + success: function (data) { + if (data.rows && data.rows.length) { + row.serviceTestId = data.rows[0].objectId; + cachedIds[cacheKey] = row.serviceTestId; + //console.log('caching ' + cacheKey + ': ' + row.serviceTestId); + + } + else { + result = false; + } + + }, + failure: function (error) { + console.log('Select rows error'); + console.log(error); + } + + }); + return result; +} \ No newline at end of file diff --git a/snprc_ehr/resources/queries/study/assay_labworkResults.js b/snprc_ehr/resources/queries/study/assay_labworkResults.js index 5d0fbc618..098dc1801 100644 --- a/snprc_ehr/resources/queries/study/assay_labworkResults.js +++ b/snprc_ehr/resources/queries/study/assay_labworkResults.js @@ -44,7 +44,7 @@ function assignServiceTestId (row, serviceId, testid ) { LABKEY.Query.selectRows({ schemaName: 'snprc_ehr', queryName: 'labwork_panels', - columns: 'RowId', + columns: 'ObjectId', scope: this, filterArray: [ LABKEY.Filter.create('ServiceId', serviceId, LABKEY.Filter.Types.EQUAL), @@ -52,7 +52,7 @@ function assignServiceTestId (row, serviceId, testid ) { ], success: function (data) { if (data.rows && data.rows.length) { - row.serviceTestId = data.rows[0].RowId; + row.serviceTestId = data.rows[0].ObjectId; cachedIds[cacheKey] = row.serviceTestId; //console.log('caching ' + cacheKey + ': ' + row.serviceTestId); diff --git a/snprc_ehr/resources/queries/study/assay_labworkResults.query.xml b/snprc_ehr/resources/queries/study/assay_labworkResults.query.xml index c72c0d009..eb14702d8 100644 --- a/snprc_ehr/resources/queries/study/assay_labworkResults.query.xml +++ b/snprc_ehr/resources/queries/study/assay_labworkResults.query.xml @@ -24,7 +24,7 @@ snprc_ehr labwork_panels - RowId + ObjectId TestName diff --git a/snprc_ehr/resources/queries/study/labworkResultsAll.query.xml b/snprc_ehr/resources/queries/study/labworkResultsAll.query.xml index d8f197694..b754987e5 100644 --- a/snprc_ehr/resources/queries/study/labworkResultsAll.query.xml +++ b/snprc_ehr/resources/queries/study/labworkResultsAll.query.xml @@ -21,11 +21,11 @@ true - Test Name + Service Test ID snprc_ehr labwork_panels - RowId + objectId TestName @@ -50,7 +50,7 @@ Units 60 - + Ref Range true false diff --git a/snprc_ehr/resources/queries/study/labworkResultsAll.sql b/snprc_ehr/resources/queries/study/labworkResultsAll.sql index 69bf5313e..94e837135 100644 --- a/snprc_ehr/resources/queries/study/labworkResultsAll.sql +++ b/snprc_ehr/resources/queries/study/labworkResultsAll.sql @@ -17,76 +17,76 @@ superceding original labworkResults table in all uses. Author: Charles Peterson, 10/29/2018 + 7/13/2022 Refactored to use HL7 tables from Orchard */ +SELECT + obr.ANIMAL_ID AS Id, + obr.OBSERVATION_DATE_TM as date, + obr.CHARGE_ID as project, + obr.PROCEDURE_ID as serviceId, + obx.serviceTestId as serviceTestId, + obx.TEST_ID as testId, + NULL as resultOORIndicator, + obx.VALUE_TYPE as VALUE_TYPE, + CAST(obx.RESULT as DOUBLE) as RESULT, + obx.UNITS as units, + obx.QUALITATIVE_RESULT as qualresult, + obx.REFERENCE_RANGE as refRange, + obx.ABNORMAL_FLAGS as abnormal_flags, + obx.MESSAGE_ID as runId, + NULL as enddate, + NULL as method, + nte.COMMENT as remark +FROM snprc_ehr.HL7_OBR obr + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN + ( + select nte.OBR_OBJECT_ID, nte.OBR_SET_ID, GROUP_CONCAT(nte.COMMENT) as COMMENT + from snprc_ehr.HL7_NTE nte + group by nte.OBR_OBJECT_ID, nte.OBR_SET_ID + ) AS nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId +UNION select - Id, - date, - project, - serviceId, - serviceTestId, - testid, - resultOORIndicator, - value_type, - result, - units, - qualresult, - refRange, - abnormal_flags, - runid, - enddate, - method, - remark, - history, - lsid -from study.labworkResults - -union - -select - Id, - date, - project, - serviceId, - serviceTestId, - testid, - resultOORIndicator, - value_type, - result, - units, - qualresult, - refRange, - abnormal_flags, - runid, - enddate, - method, - remark, - history, - lsid -from study.assay_labworkResults - + alr.Id, + alr.date, + alr.project, + alr.serviceId, + alr.serviceTestId, + alr.testid, + alr.resultOORIndicator, + alr.value_type, + alr.result, + alr.units, + alr.qualresult, + alr.refRange, + alr.abnormal_flags, + alr.runid, + alr.enddate, + alr.method, + alr.remark +from study.assay_labworkResults as alr union select - Id, - date, - project, - serviceId, - serviceTestId, - testid, - resultOORIndicator, - value_type, - result, - units, - qualresult, - refRange, - abnormal_flags, - runid, - enddate, - method, - remark, - history, - lsid -from study.labworkTaqman + lt.Id, + lt.date, + lt.project, + lt.serviceId, + lt.serviceTestId, + lt.testid, + lt.resultOORIndicator, + lt.value_type, + lt.result, + lt.units, + lt.qualresult, + lt.refRange, + lt.abnormal_flags, + lt.runid, + lt.enddate, + lt.method, + remark +from study.labworkTaqman as lt diff --git a/snprc_ehr/resources/queries/study/labworkTaqman.query.xml b/snprc_ehr/resources/queries/study/labworkTaqman.query.xml index a49ceea64..37e18394a 100644 --- a/snprc_ehr/resources/queries/study/labworkTaqman.query.xml +++ b/snprc_ehr/resources/queries/study/labworkTaqman.query.xml @@ -25,7 +25,7 @@ snprc_ehr labwork_panels - RowId + objectId TestName diff --git a/snprc_ehr/resources/queries/study/labworkTaqman.sql b/snprc_ehr/resources/queries/study/labworkTaqman.sql index b69b5d1c8..f42838437 100644 --- a/snprc_ehr/resources/queries/study/labworkTaqman.sql +++ b/snprc_ehr/resources/queries/study/labworkTaqman.sql @@ -3,7 +3,7 @@ SELECT tr.date, 0 AS project, lp.ServiceId, - lp.RowId AS serviceTestId, + lp.ObjectId AS serviceTestId, lp.TestId, NULL AS resultOORIndicator, 'TX' AS value_type, @@ -31,7 +31,7 @@ SELECT tr.date, 0 AS project, lp.ServiceId, - lp.RowId AS serviceTestId, + lp.ObjectId AS serviceTestId, lp.TestId, NULL AS resultOORIndicator, 'TX' AS value_type, diff --git a/snprc_ehr/resources/referenceStudy/study/datasets/datasets_metadata.xml b/snprc_ehr/resources/referenceStudy/study/datasets/datasets_metadata.xml index 574d912bd..abdab04a3 100644 --- a/snprc_ehr/resources/referenceStudy/study/datasets/datasets_metadata.xml +++ b/snprc_ehr/resources/referenceStudy/study/datasets/datasets_metadata.xml @@ -2479,12 +2479,12 @@ true - integer + entityid snprc_ehr labwork_panels - RowId - TestName + ObjectId + TestId diff --git a/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-21.001-22.000.sql b/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-21.001-22.000.sql index 35fae2b86..d6bad0af2 100644 --- a/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-21.001-22.000.sql +++ b/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-21.001-22.000.sql @@ -242,7 +242,8 @@ CREATE TABLE [snprc_ehr].[HL7_OBX]( [OBR_SET_ID] [VARCHAR](20) NOT NULL, [VALUE_TYPE] [VARCHAR](10) NULL, [TEST_ID] [VARCHAR](20) NULL, - [TEST_NAME] [VARCHAR](30) NULL, + [TEST_NAME] [VARCHAR](50) NULL, + [serviceTestId] [UNIQUEIDENTIFIER] NULL, [QUALITATIVE_RESULT] [VARCHAR](MAX) NULL, [RESULT] [VARCHAR](MAX) NULL, [UNITS] [VARCHAR](20) NULL, diff --git a/snprc_ehr/resources/schemas/snprc_ehr.xml b/snprc_ehr/resources/schemas/snprc_ehr.xml index 1328accc5..021dfe262 100644 --- a/snprc_ehr/resources/schemas/snprc_ehr.xml +++ b/snprc_ehr/resources/schemas/snprc_ehr.xml @@ -2188,7 +2188,17 @@ - + + serviceTestId + + snprc_ehr + labwork_panels + objectId + TestId + + + + diff --git a/snprc_ehr/resources/source_queries/HL7/create_v_sqlmed_msh.sql b/snprc_ehr/resources/source_queries/HL7/create_v_sqlmed_msh.sql deleted file mode 100644 index 61fa46935..000000000 --- a/snprc_ehr/resources/source_queries/HL7/create_v_sqlmed_msh.sql +++ /dev/null @@ -1,49 +0,0 @@ -USE [animal]; -GO - -/****** Object: View [labkey_etl].[V_CLINPATHRUNS] Script Date: 7/7/2022 3:09:20 PM ******/ -SET ANSI_NULLS ON; -GO - -SET QUOTED_IDENTIFIER ON; -GO - - - -ALTER VIEW [labkey_etl].[v_Sqlmed_msh] -AS --- ========================================================================================== --- Author: Terry Hawkins --- Create date: 7-7-2022 --- Description: Selects the MSH records from Sqlmed data to populate LabKey HL7 tables --- Changes: --- ========================================================================================== -SELECT obr.MESSAGE_ID AS MESSAGE_ID, - 0 AS IDX, - 'Sqlmed' AS SENDING_APPLICATION, - 'TxBiomed' AS SENDING_FACILITY, - 'TAC' AS RECEIVING_APPLICATION, - 'TxBiomed' AS RECEIVING_FACILITY, - 'ORU' AS MESSAGE_TYPE, - '' AS TRIGGER_EVENT_ID, - obr.MESSAGE_CONTROL_ID AS MESSAGE_CONTROL_ID, - obr.VERIFIED_DATE_TM AS MESSAGE_DATE_TM, - obr.OBJECT_ID AS OBJECT_ID, - obr.ENTRY_DATE_TM AS ENTRY_DATE_TM, - dbo.f_map_username(obr.USER_NAME) AS USER_NAME, - obr.TIMESTAMP AS TIMESTAMP -FROM dbo.CLINICAL_PATH_OBR AS obr - - -- select primates only from the TxBiomed colony - INNER JOIN labkey_etl.V_DEMOGRAPHICS AS d ON d.id = obr.ANIMAL_ID - LEFT OUTER JOIN dbo.TAC_COLUMNS AS tc ON tc.object_id = obr.OBJECT_ID -WHERE obr.RESULT_STATUS IN ( 'F', 'C', 'D' ) - AND obr.VERIFIED_DATE_TM IS NOT NULL; - - -GO - --- Table permissions -GRANT SELECT ON [labkey_etl].[v_Sqlmed_msh] TO z_labkey; - -GO \ No newline at end of file diff --git a/snprc_ehr/resources/source_queries/HL7/create_v_sqlmed_obr.sql b/snprc_ehr/resources/source_queries/HL7/create_v_sqlmed_obr.sql deleted file mode 100644 index 070e536a1..000000000 --- a/snprc_ehr/resources/source_queries/HL7/create_v_sqlmed_obr.sql +++ /dev/null @@ -1,53 +0,0 @@ -USE [animal]; -GO - -SET ANSI_NULLS ON; -GO - -SET QUOTED_IDENTIFIER ON; -GO - - -ALTER VIEW labkey_etl.v_Sqlmed_obr -AS --- ========================================================================================== --- Author: Terry Hawkins --- Create date: 7-7-2022 --- Description: Selects the OBR records from Sqlmed data to populate LabKey HL7 tables --- ========================================================================================== -SELECT obr.MESSAGE_ID AS MESSAGE_ID, - COALESCE (obr.MESSAGE_CONTROL_ID, '0') AS MESSAGE_CONTROL_ID, - 1 AS IDX, - LTRIM(RTRIM(obr.ANIMAL_ID)) AS ANIMAL_ID, - --obr.VERIFIED_DATE_TM AS VERIFIED_DATE_TM, - obr.REQUESTED_DATE_TM AS REQUESTED_DATE_TM, - obr.OBSERVATION_DATE_TM AS OBSERVATION_DATE_TM, - obr.SPECIMEN_RECEIVED_DATE_TM AS SPECIMEN_RECEIVED_DATE_TM, - CAST(CAST(obr.VERIFIED_DATE_TM AS DATETIME2(0)) AS DATETIME) AS VERIFIED_DATE_TM, - obr.PV1_VISIT_NUM AS PV1_VISIT_NUM, - obr.SET_ID AS SET_ID, - obr.SPECIMEN_NUM AS SPECIMEN_NUM, - obr.PROCEDURE_ID AS PROCEDURE_ID, - lu.ServiceName AS PROCEDURE_NAME, - obr.PRIORITY AS PRIORITY, - obr.RESULT_STATUS AS RESULT_STATUS, - obr.TECHNICIAN_NAME AS TECHNICIAN_FIRST_NAME, - obr.TECHNICIAN_INITIALS AS TECHNICIAN_LAST_NAME, - obr.CHARGE_ID AS CHARGE_ID, - obr.OBJECT_ID AS OBJECT_ID, - dbo.f_map_username(obr.USER_NAME) AS USER_NAME, - obr.ENTRY_DATE_TM AS ENTRY_DATE_TM, - obr.TIMESTAMP AS TIMESTAMP -FROM dbo.CLINICAL_PATH_OBR AS obr - - -- select primates only from the TxBiomed colony - INNER JOIN labkey_etl.V_DEMOGRAPHICS AS d ON d.id = obr.ANIMAL_ID - INNER JOIN dbo.CLINICAL_PATH_LABWORK_SERVICES AS lu ON obr.PROCEDURE_ID = lu.ServiceId - LEFT OUTER JOIN dbo.TAC_COLUMNS AS tc ON tc.object_id = obr.OBJECT_ID -WHERE obr.RESULT_STATUS IN ( 'F', 'C', 'D' ) - AND obr.VERIFIED_DATE_TM IS NOT NULL; - -GO - -GRANT SELECT ON labkey_etl.v_Sqlmed_obr TO z_labkey; -GO diff --git a/snprc_ehr/resources/source_queries/HL7/p_load_hl7_data.sql b/snprc_ehr/resources/source_queries/HL7/p_load_hl7_data.sql index c4875257c..afe5cae54 100644 --- a/snprc_ehr/resources/source_queries/HL7/p_load_hl7_data.sql +++ b/snprc_ehr/resources/source_queries/HL7/p_load_hl7_data.sql @@ -406,6 +406,7 @@ BEGIN ;WITH cte AS ( SELECT OBR.MessageId, OBR.IDX AS OBR_IDX, OBR.OBR_F1_C1 AS SET_ID, OBR.OBR_F25_C1 as RESULT_STATUS, cbr.OBJECT_ID as obr_object_id, + obr.OBR_F4_C1 as obr_service_id LEAD(OBR.IDX, 1, 9999) OVER (ORDER BY OBR.IDX) AS next_OBR_IDX FROM [Orchard_hl7_staging].[dbo].[ORC_Segment_OBR_A] AS OBR @@ -422,6 +423,7 @@ BEGIN VALUE_TYPE , TEST_ID , TEST_NAME , + serviceTestId, QUALITATIVE_RESULT, RESULT, UNITS , @@ -438,6 +440,7 @@ BEGIN obx.OBX_F2_C1, obx.OBX_F3_C1, obx.OBX_F3_C2, + lp.objectId, obx.OBX_RESULTDATA, CASE WHEN obx.OBX_F2_C1 = 'NM' AND snprc_ehr.f_isNumeric(obx.OBX_RESULTDATA) = 1 THEN CAST(LTRIM(RTRIM(REPLACE(obx.OBX_RESULTDATA, ' ', ''))) AS DECIMAL(10, 3)) @@ -448,6 +451,8 @@ BEGIN obx.OBX_F11_C1 FROM dbo.ORC_segment_obx_a AS obx INNER JOIN cte ON OBX.MessageID = cte.MessageID AND obx.IDX > cte.OBR_IDX AND obx.IDX < cte.next_OBR_IDX + LEFT OUTER JOIN labkey.snprc_ehr.labwork_panels AS lp ON cte.obr_service_id = lp.serviceId + AND obx.OBX_F3_C1 = lp.testId -- only load data with result_status = 'F' (final). AND cte.RESULT_STATUS = 'F' diff --git a/snprc_ehr/src/org/labkey/snprc_ehr/history/LabResultsLabworkType.java b/snprc_ehr/src/org/labkey/snprc_ehr/history/LabResultsLabworkType.java index 963dc950f..8072e587e 100644 --- a/snprc_ehr/src/org/labkey/snprc_ehr/history/LabResultsLabworkType.java +++ b/snprc_ehr/src/org/labkey/snprc_ehr/history/LabResultsLabworkType.java @@ -65,13 +65,14 @@ public class LabResultsLabworkType extends DefaultLabworkType public LabResultsLabworkType(Module module) { - super("Labwork Results", "study", "LabworkResults", module); + // LabworkResultsAll is a query that aggregates several labwork related datasets + super("Labwork Results", "study", "LabworkResultsAll", module); _testType = _default_testType; // this is just a temporary value it will be updated for the specific // assay type in the getRows() method. tjh _normalRangeField = "refRange"; _unitsField = "units"; _normalRangeStatusField = "abnormal_flags"; - _testIdField = "serviceTestId"; + _testIdField = "TestId"; } /** From 0f7d153d6436a35e756932e117c39b92fda02163 Mon Sep 17 00:00:00 2001 From: Terry J Hawkins Date: Wed, 13 Jul 2022 09:46:18 -0500 Subject: [PATCH 08/17] Added files missing from last commit --- .../HL7/copy Sqlmed MSH data to LK.sql | 45 ++++++++++++ .../HL7/copy Sqlmed NTE data to LK.sql | 35 ++++++++++ .../HL7/copy Sqlmed OBR data to LK.sql | 64 +++++++++++++++++ .../HL7/copy Sqlmed OBX data to LK.sql | 69 +++++++++++++++++++ 4 files changed, 213 insertions(+) create mode 100644 snprc_ehr/resources/source_queries/HL7/copy Sqlmed MSH data to LK.sql create mode 100644 snprc_ehr/resources/source_queries/HL7/copy Sqlmed NTE data to LK.sql create mode 100644 snprc_ehr/resources/source_queries/HL7/copy Sqlmed OBR data to LK.sql create mode 100644 snprc_ehr/resources/source_queries/HL7/copy Sqlmed OBX data to LK.sql diff --git a/snprc_ehr/resources/source_queries/HL7/copy Sqlmed MSH data to LK.sql b/snprc_ehr/resources/source_queries/HL7/copy Sqlmed MSH data to LK.sql new file mode 100644 index 000000000..1ee56e971 --- /dev/null +++ b/snprc_ehr/resources/source_queries/HL7/copy Sqlmed MSH data to LK.sql @@ -0,0 +1,45 @@ +-- ========================================================================================== +-- Author: Terry Hawkins +-- Create date: 7-11-2022 +-- Description: Copy MSH records from Sqlmed data to populate LabKey HL7 tables +-- Changes: +-- ========================================================================================== +INSERT INTO labkey.snprc_ehr.HL7_MSH +( + MESSAGE_ID, + IDX, + SENDING_APPLICATION, + SENDING_FACILITY, + RECEIVING_APPLICATION, + RECEIVING_FACILITY, + MESSAGE_TYPE, + TRIGGER_EVENT_ID, + MESSAGE_CONTROL_ID, + MESSAGE_DATE_TM, + OBJECT_ID, + USER_NAME, + ENTRY_DATE_TM +) +( + SELECT obr.MESSAGE_ID AS MESSAGE_ID, + 0 AS IDX, + 'Sqlmed' AS SENDING_APPLICATION, + 'TxBiomed' AS SENDING_FACILITY, + 'TAC' AS RECEIVING_APPLICATION, + 'TxBiomed' AS RECEIVING_FACILITY, + 'ORU' AS MESSAGE_TYPE, + '' AS TRIGGER_EVENT_ID, + obr.MESSAGE_CONTROL_ID AS MESSAGE_CONTROL_ID, + CAST(CAST(obr.VERIFIED_DATE_TM AS DATETIME2(0)) AS DATETIME) AS MESSAGE_DATE_TM, + obr.OBJECT_ID AS OBJECT_ID, + obr.ENTRY_DATE_TM AS ENTRY_DATE_TM, + dbo.f_map_username(obr.USER_NAME) AS USER_NAME + FROM dbo.CLINICAL_PATH_OBR AS obr + + -- select primates only from the TxBiomed colony + INNER JOIN labkey_etl.V_DEMOGRAPHICS AS d ON d.id = obr.ANIMAL_ID + LEFT OUTER JOIN dbo.TAC_COLUMNS AS tc ON tc.object_id = obr.OBJECT_ID + WHERE obr.RESULT_STATUS IN ( 'F', 'C', 'D' ) + AND obr.VERIFIED_DATE_TM IS NOT NULL + AND NOT EXISTS (SELECT 1 FROM labkey_etl.v_delete_clinPathRuns AS dcpr WHERE obr.OBJECT_ID = dcpr.objectid) +) \ No newline at end of file diff --git a/snprc_ehr/resources/source_queries/HL7/copy Sqlmed NTE data to LK.sql b/snprc_ehr/resources/source_queries/HL7/copy Sqlmed NTE data to LK.sql new file mode 100644 index 000000000..4d8e47037 --- /dev/null +++ b/snprc_ehr/resources/source_queries/HL7/copy Sqlmed NTE data to LK.sql @@ -0,0 +1,35 @@ +-- ========================================================================================== +-- Author: Terry Hawkins +-- Create date: 7-11-2022 +-- Description: copy NTE records from Sqlmed data to populate LabKey HL7 tables +-- ========================================================================================== +INSERT INTO labkey.snprc_ehr.HL7_NTE +( + MESSAGE_ID, + IDX, + OBR_OBJECT_ID, + SET_ID, + OBR_SET_ID, + COMMENT, + OBJECT_ID, + USER_NAME, + ENTRY_DATE_TM +) + +( +SELECT nte.MESSAGE_ID AS MESSAGE_ID, + 1 AS IDX, + obr.OBJECT_ID as OBR_OBJECT_ID, + nte.SET_ID AS SET_ID, + obr.SET_ID AS OBR_SET_ID, + nte.COMMENT as COMMENT, + nte.OBJECT_ID AS OBJECT_ID, + dbo.f_map_username(nte.USER_NAME) AS USER_NAME, + nte.ENTRY_DATE_TM AS ENTRY_DATE_TM +FROM dbo.CLINICAL_PATH_NTE AS nte + -- select primates only from the TxBiomed colony + INNER JOIN dbo.CLINICAL_PATH_OBR as obr on nte.MESSAGE_ID = obr.MESSAGE_ID + INNER JOIN labkey_etl.V_DEMOGRAPHICS AS d ON d.id = obr.ANIMAL_ID + LEFT OUTER JOIN dbo.TAC_COLUMNS AS tc ON tc.object_id = nte.OBJECT_ID +WHERE obr.VERIFIED_DATE_TM IS NOT NULL +) diff --git a/snprc_ehr/resources/source_queries/HL7/copy Sqlmed OBR data to LK.sql b/snprc_ehr/resources/source_queries/HL7/copy Sqlmed OBR data to LK.sql new file mode 100644 index 000000000..fc9c793e4 --- /dev/null +++ b/snprc_ehr/resources/source_queries/HL7/copy Sqlmed OBR data to LK.sql @@ -0,0 +1,64 @@ + +-- ========================================================================================== +-- Author: Terry Hawkins +-- Create date: 7-11-2022 +-- Description: copies OBR records from Sqlmed data to populate LabKey HL7 tables +-- ========================================================================================== +INSERT INTO labkey.snprc_ehr.HL7_OBR +( + MESSAGE_ID, + MESSAGE_CONTROL_ID, + IDX, + ANIMAL_ID, + VERIFIED_DATE_TM, + REQUESTED_DATE_TM, + OBSERVATION_DATE_TM, + SPECIMEN_RECEIVED_DATE_TM, + PV1_VISIT_NUM, + SET_ID, + SPECIMEN_NUM, + PROCEDURE_ID, + PROCEDURE_NAME, + PRIORITY, + RESULT_STATUS, + TECHNICIAN_FIRST_NAME, + TECHNICIAN_LAST_NAME, + CHARGE_ID, + OBJECT_ID, + USER_NAME, + ENTRY_DATE_TM +) + +( +SELECT obr.MESSAGE_ID AS MESSAGE_ID, + COALESCE (obr.MESSAGE_CONTROL_ID, '0') AS MESSAGE_CONTROL_ID, + 1 AS IDX, + LTRIM(RTRIM(obr.ANIMAL_ID)) AS ANIMAL_ID, + obr.VERIFIED_DATE_TM AS VERIFIED_DATE_TM, + obr.REQUESTED_DATE_TM AS REQUESTED_DATE_TM, + obr.OBSERVATION_DATE_TM AS OBSERVATION_DATE_TM, + obr.SPECIMEN_RECEIVED_DATE_TM AS SPECIMEN_RECEIVED_DATE_TM, + obr.PV1_VISIT_NUM AS PV1_VISIT_NUM, + obr.SET_ID AS SET_ID, + obr.SPECIMEN_NUM AS SPECIMEN_NUM, + obr.PROCEDURE_ID AS PROCEDURE_ID, + COALESCE (lu.ServiceName, obr.PROCEDURE_NAME) AS PROCEDURE_NAME, + obr.PRIORITY AS PRIORITY, + obr.RESULT_STATUS AS RESULT_STATUS, + obr.TECHNICIAN_NAME AS TECHNICIAN_FIRST_NAME, + obr.TECHNICIAN_INITIALS AS TECHNICIAN_LAST_NAME, + obr.CHARGE_ID AS CHARGE_ID, + obr.OBJECT_ID AS OBJECT_ID, + dbo.f_map_username(obr.USER_NAME) AS USER_NAME, + obr.ENTRY_DATE_TM AS ENTRY_DATE_TM +FROM dbo.CLINICAL_PATH_OBR AS obr + + -- select primates only from the TxBiomed colony + INNER JOIN labkey_etl.V_DEMOGRAPHICS AS d ON d.id = obr.ANIMAL_ID + INNER JOIN dbo.CLINICAL_PATH_LABWORK_SERVICES AS lu ON obr.PROCEDURE_ID = lu.ServiceId + LEFT OUTER JOIN dbo.TAC_COLUMNS AS tc ON tc.object_id = obr.OBJECT_ID +WHERE obr.RESULT_STATUS IN ( 'F', 'C', 'D' ) + AND obr.VERIFIED_DATE_TM IS NOT NULL + AND NOT EXISTS (SELECT 1 FROM labkey_etl.v_delete_clinPathRuns AS dcpr WHERE obr.OBJECT_ID = dcpr.objectid) + +) diff --git a/snprc_ehr/resources/source_queries/HL7/copy Sqlmed OBX data to LK.sql b/snprc_ehr/resources/source_queries/HL7/copy Sqlmed OBX data to LK.sql new file mode 100644 index 000000000..8eb7a3158 --- /dev/null +++ b/snprc_ehr/resources/source_queries/HL7/copy Sqlmed OBX data to LK.sql @@ -0,0 +1,69 @@ +-- ========================================================================================== +-- Author: Terry Hawkins +-- Create date: 7-11-2022 +-- Description: Copies OBX records from Sqlmed data to populate LabKey HL7 tables +-- ========================================================================================== +INSERT INTO labkey.snprc_ehr.HL7_OBX +( + MESSAGE_ID, + IDX, + OBR_OBJECT_ID, + SET_ID, + OBR_SET_ID, + VALUE_TYPE, + TEST_ID, + TEST_NAME, + serviceTestId, + QUALITATIVE_RESULT, + RESULT, + UNITS, + REFERENCE_RANGE, + ABNORMAL_FLAGS, + RESULT_STATUS, + OBJECT_ID, + USER_NAME, + ENTRY_DATE_TM +) +( +SELECT obx.MESSAGE_ID AS MESSAGE_ID, + 1 AS IDX, + obr.OBJECT_ID as OBR_OBJECT_ID, + obx.SET_ID AS SET_ID, + obr.SET_ID AS OBR_SET_ID, + obx.VALUE_TYPE AS VALUE_TYPE, + obx.TEST_ID AS TEST_ID, + COALESCE (lp.TestName, obx.TEST_NAME) as TEST_NAME, + lp.OBJECT_ID AS serviceTestId, + CAST(LTRIM(RTRIM(obx.OBSERVED_VALUE)) as VARCHAR(MAX)) as QUALITATIVE_RESULT, + CASE WHEN obx.VALUE_TYPE = 'NM' AND dbo.f_isNumeric(obx.OBSERVED_VALUE) = 1 + THEN CAST(LTRIM(RTRIM(REPLACE(obx.OBSERVED_VALUE, ' ', ''))) AS DECIMAL(10, 3)) + ELSE + NULL + END AS RESULT, + obx.UNITS AS UNITS, + obx.REFERENCE_RANGE AS REFERENCE_RANGE, + obx.ABNORMAL_FLAGS AS ABNORMAL_FLAGS, + obx.RESULT_STATUS AS RESULT_STATUS, + obx.OBJECT_ID AS OBJECT_ID, + dbo.f_map_username(obx.USER_NAME) AS USER_NAME, + obx.ENTRY_DATE_TM AS ENTRY_DATE_TM +FROM dbo.CLINICAL_PATH_OBX AS obx + + -- select primates only from the TxBiomed colony + INNER JOIN dbo.CLINICAL_PATH_OBR as obr on obx.MESSAGE_ID = obr.MESSAGE_ID + INNER JOIN labkey_etl.V_DEMOGRAPHICS AS d ON d.id = obr.ANIMAL_ID + LEFT OUTER JOIN dbo.CLINICAL_PATH_LABWORK_PANELS AS lp ON obr.PROCEDURE_ID = lp.ServiceId AND obx.TEST_ID = lp.TestId + LEFT OUTER JOIN dbo.TAC_COLUMNS AS tc ON tc.object_id = obx.OBJECT_ID +WHERE obx.RESULT_STATUS IN ( 'F', 'C', 'D' ) + AND obr.VERIFIED_DATE_TM IS NOT NULL + AND NOT EXISTS (SELECT 1 FROM labkey_etl.v_delete_labwork_results AS dclr WHERE obx.OBJECT_ID = dclr.objectid) +) +-- SELECT * FROM dbo.CLINICAL_PATH_OBX AS obx +-- -- select primates only from the TxBiomed colony +-- INNER JOIN dbo.CLINICAL_PATH_OBR as obr on obx.MESSAGE_ID = obr.MESSAGE_ID +-- INNER JOIN labkey_etl.V_DEMOGRAPHICS AS d ON d.id = obr.ANIMAL_ID +-- LEFT OUTER JOIN dbo.CLINICAL_PATH_LABWORK_PANELS AS lp ON obr.PROCEDURE_ID = lp.ServiceId AND obx.TEST_ID = lp.TestId +-- LEFT OUTER JOIN dbo.TAC_COLUMNS AS tc ON tc.object_id = obx.OBJECT_ID +--WHERE obx.RESULT_STATUS IN ( 'F', 'C', 'D' ) +-- AND NOT EXISTS (SELECT 1 FROM labkey_etl.v_delete_labwork_results AS dclr WHERE obx.OBJECT_ID = dclr.objectid) +-- and obx.MESSAGE_ID NOT IN (SELECT obr.message_id FROM labkey.snprc_ehr.HL7_OBR AS obr) \ No newline at end of file From e7b5bb6e42a5ddbbe0f2f162fa7ac7fdf7be153f Mon Sep 17 00:00:00 2001 From: Terry J Hawkins Date: Wed, 13 Jul 2022 13:40:46 -0500 Subject: [PATCH 09/17] Added study.labworkResults dataset to labworkResultsAll.sql query; TODO: remove study.labworkResults from query after data is merged into HL7_MSH, HL7_OBR, and HL7_OBX --- .../queries/study/labworkResultsAll.sql | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/snprc_ehr/resources/queries/study/labworkResultsAll.sql b/snprc_ehr/resources/queries/study/labworkResultsAll.sql index 94e837135..766a95be0 100644 --- a/snprc_ehr/resources/queries/study/labworkResultsAll.sql +++ b/snprc_ehr/resources/queries/study/labworkResultsAll.sql @@ -20,6 +20,32 @@ 7/13/2022 Refactored to use HL7 tables from Orchard */ + +-- TODO: remove study.labworkResults from query after data is merged into HL7_MSH, HL7_OBR, and HL7_OBX + +SELECT + lr.Id, + lr.date, + lr.project, + lr.serviceId, + lp.objectID AS serviceTestId, + lr.testid, + lr.resultOORIndicator, + lr.value_type, + lr.result, + lr.units, + lr.qualresult, + lr.refRange, + lr.abnormal_flags, + lr.runid, + lr.enddate, + lr.method, + lr.remark +FROM study.labworkResults lr +LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp ON lr.testId = lp.TestId AND lr.serviceId = lp.ServiceId + +union + SELECT obr.ANIMAL_ID AS Id, obr.OBSERVATION_DATE_TM as date, From 0f498527ca3104e7d9d9ec8ace912ecf2e38c25a Mon Sep 17 00:00:00 2001 From: Terry J Hawkins Date: Wed, 13 Jul 2022 15:13:39 -0500 Subject: [PATCH 10/17] Added missing metadata for HL7_MSH table --- snprc_ehr/resources/schemas/snprc_ehr.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/snprc_ehr/resources/schemas/snprc_ehr.xml b/snprc_ehr/resources/schemas/snprc_ehr.xml index 021dfe262..2c8ed2601 100644 --- a/snprc_ehr/resources/schemas/snprc_ehr.xml +++ b/snprc_ehr/resources/schemas/snprc_ehr.xml @@ -2009,6 +2009,8 @@ + + From 808d29c273a968f1fedf52fcf906967aa35bab47 Mon Sep 17 00:00:00 2001 From: Terry J Hawkins Date: Thu, 14 Jul 2022 15:21:27 -0500 Subject: [PATCH 11/17] copy Sqlmed Msh to LK.sql - fixed column order and removed CAST from MESSAGE_DATE_TM source column --- .../source_queries/HL7/copy Sqlmed MSH data to LK.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/snprc_ehr/resources/source_queries/HL7/copy Sqlmed MSH data to LK.sql b/snprc_ehr/resources/source_queries/HL7/copy Sqlmed MSH data to LK.sql index 1ee56e971..0a15820db 100644 --- a/snprc_ehr/resources/source_queries/HL7/copy Sqlmed MSH data to LK.sql +++ b/snprc_ehr/resources/source_queries/HL7/copy Sqlmed MSH data to LK.sql @@ -30,10 +30,10 @@ INSERT INTO labkey.snprc_ehr.HL7_MSH 'ORU' AS MESSAGE_TYPE, '' AS TRIGGER_EVENT_ID, obr.MESSAGE_CONTROL_ID AS MESSAGE_CONTROL_ID, - CAST(CAST(obr.VERIFIED_DATE_TM AS DATETIME2(0)) AS DATETIME) AS MESSAGE_DATE_TM, + obr.VERIFIED_DATE_TM AS MESSAGE_DATE_TM, obr.OBJECT_ID AS OBJECT_ID, - obr.ENTRY_DATE_TM AS ENTRY_DATE_TM, - dbo.f_map_username(obr.USER_NAME) AS USER_NAME + dbo.f_map_username(obr.USER_NAME) AS USER_NAME, + obr.ENTRY_DATE_TM AS ENTRY_DATE_TM FROM dbo.CLINICAL_PATH_OBR AS obr -- select primates only from the TxBiomed colony From 10448337f01be38bb43c10767aefa58c9cd667ff Mon Sep 17 00:00:00 2001 From: Terry J Hawkins Date: Thu, 21 Jul 2022 15:29:51 -0500 Subject: [PATCH 12/17] - Added HL7_GroupNTE view to concatenate NTE records into a single field for HL7 pivots - Updated HL7 pivot queries to use HL7_GroupNTE - added ProcedureName and TestName logic to HL7HematologyPivot.sql - added container column to HL7 tables - added container to Sqlmed migration scripts - added container column to Herme Tech stored procedure --- .../snprc_ehr/HL7BiochemistryPivot.sql | 20 +---- .../snprc_ehr/HL7CulturePivot.query.xml | 6 ++ .../queries/snprc_ehr/HL7CulturePivot.sql | 23 ++---- .../queries/snprc_ehr/HL7HematologyPivot.sql | 11 +-- .../queries/snprc_ehr/HL7HistologyPivot.sql | 17 +--- .../queries/snprc_ehr/HL7MiscPivot.sql | 17 +--- .../snprc_ehr/HL7ParasitologyPivot.sql | 17 +--- .../snprc_ehr/HL7SurveillancePivot.sql | 13 +--- .../snprc_ehr/HL7SurveillancePivotInner.sql | 2 +- .../queries/snprc_ehr/HL7UnknownPivot.sql | 14 +--- .../queries/snprc_ehr/HL7UrinalysisPivot.sql | 14 +--- .../queries/study/hematologyPivot.query.xml | 4 + .../queries/study/hematologyPivotInner.sql | 4 +- .../queries/study/labworkResultsAll.sql | 12 ++- .../sqlserver/snprc_ehr-21.001-22.000.sql | 43 ++++++++++- .../dbscripts/sqlserver/snprc_ehr-create.sql | 18 +++++ .../dbscripts/sqlserver/snprc_ehr-drop.sql | 2 + snprc_ehr/resources/schemas/snprc_ehr.xml | 30 ++++++-- .../HL7/HL7_admin_permissions.sql | 5 +- .../HL7/copy Sqlmed MSH data to LK.sql | 3 + .../HL7/copy Sqlmed NTE data to LK.sql | 3 + .../HL7/copy Sqlmed OBR data to LK.sql | 3 + .../HL7/copy Sqlmed OBX data to LK.sql | 14 +--- .../source_queries/HL7/p_load_hl7_data.sql | 77 ++++++++++++------- 24 files changed, 195 insertions(+), 177 deletions(-) create mode 100644 snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-create.sql create mode 100644 snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-drop.sql diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.sql index feca5f5a0..5da813f8a 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.sql @@ -1,14 +1,3 @@ -/* Valid Service types: - Biochemistry - Culture - Hematology - Histology - Misc Tests - Parasitology - Surveillance - Unknown - Urinalysis - */ SELECT obr.ANIMAL_ID as id, obr.OBSERVATION_DATE_TM as date, obr.MESSAGE_ID, @@ -16,7 +5,6 @@ SELECT obr.ANIMAL_ID as id, obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) as TestName, - --obx.TEST_ID, MAX(obx.ABNORMAL_FLAGS) AS ABNORMAL_FLAGS, MAX(obx.QUALITATIVE_RESULT) as QUALITATIVE_RESULT, MAX(obx.RESULT) as RESULT @@ -24,15 +12,15 @@ SELECT obr.ANIMAL_ID as id, FROM snprc_ehr.HL7_OBR obr LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID - LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_GroupNTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId WHERE obr.PROCEDURE_ID.Dataset = 'Biochemistry' GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME), obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) - PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TestName + PIVOT QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TestName IN ( - select TestName from snprc_ehr.labwork_panels t - where t.includeInPanel = true AND t.ServiceId.Dataset='Biochemistry' + SELECT DISTINCT TestName FROM snprc_ehr.labwork_panels t + WHERE t.includeInPanel = true AND t.ServiceId.Dataset='Biochemistry' ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.query.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.query.xml index af585aeee..c1aa74d98 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.query.xml +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.query.xml @@ -3,6 +3,12 @@
Culture and Sensitivity Results Pivot + + + Remarks + 300 + +
diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.sql index 821e21c0e..a16097a68 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.sql @@ -1,14 +1,3 @@ -/* Valid Service types: - Biochemistry - Culture - Hematology - Histology - Misc Tests - Parasitology - Surveillance - Unknown - Urinalysis - */ SELECT obr.ANIMAL_ID as id, obr.OBSERVATION_DATE_TM as date, obr.MESSAGE_ID, @@ -16,23 +5,21 @@ SELECT obr.ANIMAL_ID as id, obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) as TestName, - --obx.TEST_ID, MAX(obx.ABNORMAL_FLAGS) AS ABNORMAL_FLAGS, MAX(obx.QUALITATIVE_RESULT) as QUALITATIVE_RESULT, MAX(obx.RESULT) as RESULT FROM snprc_ehr.HL7_OBR obr - LEFT OUTER JOIN snprc_ehr.HL7_OBX obx -ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID - LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_GroupNTE AS nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId WHERE obr.PROCEDURE_ID.Dataset = 'Culture' GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME), obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) - PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TestName + PIVOT QUALITATIVE_RESULT BY TestName IN ( - select TestName from snprc_ehr.labwork_panels t - where t.includeInPanel = true AND t.ServiceId.Dataset='Culture' + SELECT DISTINCT TestName FROM snprc_ehr.labwork_panels t + WHERE t.includeInPanel = true AND t.ServiceId.Dataset='Culture' ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot.sql index e3ceba7e5..574f28bb6 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot.sql @@ -2,21 +2,22 @@ SELECT obr.ANIMAL_ID as id, obr.OBSERVATION_DATE_TM as date, obr.MESSAGE_ID, - obr.PROCEDURE_NAME, + COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME) as PROCEDURE_NAME, obr.PROCEDURE_ID, nte.COMMENT, - obx.TEST_NAME, + COALESCE (lp.TestName, obx.TEST_NAME) as TestName, MAX(obx.ABNORMAL_FLAGS) AS ABNORMAL_FLAGS, MAX(obx.QUALITATIVE_RESULT) as QUALITATIVE_RESULT, MAX(obx.RESULT) as RESULT FROM snprc_ehr.HL7_OBR obr LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID -LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId + LEFT OUTER JOIN snprc_ehr.HL7_GroupNTE AS nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID WHERE obr.PROCEDURE_ID.Dataset = 'Hematology' -GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, obr.PROCEDURE_NAME, obr.PROCEDURE_ID, nte.COMMENT, obx.TEST_NAME -PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TEST_NAME +GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME), obr.SET_ID, obr.PROCEDURE_NAME, obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) +PIVOT QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TestName IN ( diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot.sql index d0a4bebc7..1b8050a59 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot.sql @@ -1,14 +1,3 @@ -/* Valid Service types: - Biochemistry - Culture - Hematology - Histology - Misc Tests - Parasitology - Surveillance - Unknown - Urinalysis - */ SELECT obr.ANIMAL_ID as id, obr.OBSERVATION_DATE_TM as date, obr.MESSAGE_ID, @@ -16,15 +5,13 @@ SELECT obr.ANIMAL_ID as id, obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) as TestName, - --obx.TEST_ID, MAX(obx.ABNORMAL_FLAGS) AS ABNORMAL_FLAGS, MAX(obx.QUALITATIVE_RESULT) as QUALITATIVE_RESULT, MAX(obx.RESULT) as RESULT FROM snprc_ehr.HL7_OBR obr - LEFT OUTER JOIN snprc_ehr.HL7_OBX obx -ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID - LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_GroupNTE AS nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId WHERE obr.PROCEDURE_ID.Dataset = 'Histology' diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot.sql index 362bb0147..ba012f8e2 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot.sql @@ -1,14 +1,3 @@ -/* Valid Service types: - Biochemistry - Culture - Hematology - Histology - Misc Tests - Parasitology - Surveillance - Unknown - Urinalysis - */ SELECT obr.ANIMAL_ID as id, obr.OBSERVATION_DATE_TM as date, obr.MESSAGE_ID, @@ -16,15 +5,13 @@ SELECT obr.ANIMAL_ID as id, obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) as TestName, - --obx.TEST_ID, MAX(obx.ABNORMAL_FLAGS) AS ABNORMAL_FLAGS, MAX(obx.QUALITATIVE_RESULT) as QUALITATIVE_RESULT, MAX(obx.RESULT) as RESULT FROM snprc_ehr.HL7_OBR obr - LEFT OUTER JOIN snprc_ehr.HL7_OBX obx -ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID - LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_GroupNTE AS nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId WHERE obr.PROCEDURE_ID.Dataset = 'Misc Tests' diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot.sql index 5b1231928..a8ead6c4e 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot.sql @@ -1,14 +1,3 @@ -/* Valid Service types: - Biochemistry - Culture - Hematology - Histology - Misc Tests - Parasitology - Surveillance - Unknown - Urinalysis - */ SELECT obr.ANIMAL_ID as id, obr.OBSERVATION_DATE_TM as date, obr.MESSAGE_ID, @@ -16,15 +5,13 @@ SELECT obr.ANIMAL_ID as id, obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) as TestName, - --obx.TEST_ID, MAX(obx.ABNORMAL_FLAGS) AS ABNORMAL_FLAGS, MAX(obx.QUALITATIVE_RESULT) as QUALITATIVE_RESULT, MAX(obx.RESULT) as RESULT FROM snprc_ehr.HL7_OBR obr - LEFT OUTER JOIN snprc_ehr.HL7_OBX obx -ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID - LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_GroupNTE AS nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId WHERE obr.PROCEDURE_ID.Dataset = 'Parasitology' diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot.sql index c508edfd1..07d2a894b 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot.sql @@ -1,15 +1,4 @@ -/* Valid Service types: - Biochemistry - Culture - Hematology - Histology - Misc Tests - Parasitology - Surveillance - Unknown - Urinalysis - */ - select Id, +select Id, date, MESSAGE_ID, PROCEDURE_NAME, diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivotInner.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivotInner.sql index 9547e526e..193131036 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivotInner.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivotInner.sql @@ -12,7 +12,7 @@ FROM snprc_ehr.HL7_OBR obr LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID - LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_GroupNTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId WHERE obr.PROCEDURE_ID.Dataset = 'Surveillance' diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot.sql index 9a8db1f6a..206a06ad8 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot.sql @@ -1,14 +1,3 @@ -/* Valid Service types: - Biochemistry - Culture - Hematology - Histology - Misc Tests - Parasitology - Surveillance - Unknown - Urinalysis - */ SELECT obr.ANIMAL_ID as id, obr.OBSERVATION_DATE_TM as date, obr.MESSAGE_ID, @@ -16,7 +5,6 @@ SELECT obr.ANIMAL_ID as id, obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) as TestName, - --obx.TEST_ID, MAX(obx.ABNORMAL_FLAGS) AS ABNORMAL_FLAGS, MAX(obx.QUALITATIVE_RESULT) as QUALITATIVE_RESULT, MAX(obx.RESULT) as RESULT @@ -24,7 +12,7 @@ SELECT obr.ANIMAL_ID as id, FROM snprc_ehr.HL7_OBR obr LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID - LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_GroupNTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId WHERE obr.PROCEDURE_ID.Dataset = 'Unknown' diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7UrinalysisPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7UrinalysisPivot.sql index 630384a82..639999401 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7UrinalysisPivot.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7UrinalysisPivot.sql @@ -1,14 +1,3 @@ -/* Valid Service types: - Biochemistry - Culture - Hematology - Histology - Misc Tests - Parasitology - Surveillance - Unknown - Urinalysis - */ SELECT obr.ANIMAL_ID as id, obr.OBSERVATION_DATE_TM as date, obr.MESSAGE_ID, @@ -16,7 +5,6 @@ SELECT obr.ANIMAL_ID as id, obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) as TestName, - --obx.TEST_ID, MAX(obx.ABNORMAL_FLAGS) AS ABNORMAL_FLAGS, MAX(obx.QUALITATIVE_RESULT) as QUALITATIVE_RESULT, MAX(obx.RESULT) as RESULT @@ -24,7 +12,7 @@ SELECT obr.ANIMAL_ID as id, FROM snprc_ehr.HL7_OBR obr LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID - LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_GroupNTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId WHERE obr.PROCEDURE_ID.Dataset = 'Urinalysis' diff --git a/snprc_ehr/resources/queries/study/hematologyPivot.query.xml b/snprc_ehr/resources/queries/study/hematologyPivot.query.xml index 1c97f72c2..cfd716a2f 100644 --- a/snprc_ehr/resources/queries/study/hematologyPivot.query.xml +++ b/snprc_ehr/resources/queries/study/hematologyPivot.query.xml @@ -8,6 +8,10 @@ Hematology Panel Name 200 + + Remarks + 200 + true diff --git a/snprc_ehr/resources/queries/study/hematologyPivotInner.sql b/snprc_ehr/resources/queries/study/hematologyPivotInner.sql index 65c46c5ca..5dd2e2264 100644 --- a/snprc_ehr/resources/queries/study/hematologyPivotInner.sql +++ b/snprc_ehr/resources/queries/study/hematologyPivotInner.sql @@ -25,5 +25,5 @@ SELECT WHEN b.result IS NULL THEN b.qualresult ELSE CAST(CAST(b.result AS float) AS VARCHAR) END as result - FROM study.labworkResults b - WHERE b.serviceTestId.includeInPanel = true and b.qcstate.publicdata = true and b.serviceTestid.ServiceId.Dataset = 'Hematology' \ No newline at end of file + FROM study.labworkResultsAll b + WHERE b.serviceTestId.includeInPanel = true and b.serviceTestid.ServiceId.Dataset = 'Hematology' \ No newline at end of file diff --git a/snprc_ehr/resources/queries/study/labworkResultsAll.sql b/snprc_ehr/resources/queries/study/labworkResultsAll.sql index 766a95be0..478510b3a 100644 --- a/snprc_ehr/resources/queries/study/labworkResultsAll.sql +++ b/snprc_ehr/resources/queries/study/labworkResultsAll.sql @@ -40,7 +40,8 @@ SELECT lr.runid, lr.enddate, lr.method, - lr.remark + lr.remark, + lr.objectId FROM study.labworkResults lr LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp ON lr.testId = lp.TestId AND lr.serviceId = lp.ServiceId @@ -63,7 +64,8 @@ SELECT obx.MESSAGE_ID as runId, NULL as enddate, NULL as method, - nte.COMMENT as remark + nte.COMMENT as remark, + obx.OBJECT_ID AS objectId FROM snprc_ehr.HL7_OBR obr LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID LEFT OUTER JOIN @@ -93,7 +95,8 @@ select alr.runid, alr.enddate, alr.method, - alr.remark + alr.remark, + alr.objectId from study.assay_labworkResults as alr union @@ -114,5 +117,6 @@ select lt.runid, lt.enddate, lt.method, - remark + lt.remark, + null as objectId from study.labworkTaqman as lt diff --git a/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-21.001-22.000.sql b/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-21.001-22.000.sql index d6bad0af2..8a9f71325 100644 --- a/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-21.001-22.000.sql +++ b/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-21.001-22.000.sql @@ -28,6 +28,7 @@ CREATE TABLE [snprc_ehr].[HL7_MSH]( [TRIGGER_EVENT_ID][VARCHAR](50) NULL, -- MSH_F9_C2 [MESSAGE_CONTROL_ID] [VARCHAR](50) NULL, [MESSAGE_DATE_TM] [DATETIME] NULL, + [Container] [dbo].[ENTITYID] NOT NULL, [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, [USER_NAME] [VARCHAR](128) NOT NULL, [ENTRY_DATE_TM] [DATETIME] NOT NULL, @@ -48,6 +49,10 @@ ALTER TABLE [snprc_ehr].[HL7_MSH] ADD CONSTRAINT [DF_HL7_MSH_USER] DEFAULT (US ALTER TABLE [snprc_ehr].[HL7_MSH] ADD CONSTRAINT [DF_HL7_MSH_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] GO +ALTER TABLE [snprc_ehr].[HL7_MSH] WITH CHECK ADD CONSTRAINT [FK_HL7_MSH_container] FOREIGN KEY([Container]) + REFERENCES [core].[Containers] ([EntityId]) + GO + CREATE TABLE [snprc_ehr].[HL7_PID]( [MESSAGE_ID] [VARCHAR](50) NOT NULL, [IDX] [INT] NOT NULL, @@ -60,6 +65,7 @@ CREATE TABLE [snprc_ehr].[HL7_PID]( [SPECIES] [VARCHAR] (50) NULL, -- common name - F22_C1 (Ethnic Group) [ACCOUNT_NUMBER] [VARCHAR] (50) NULL, --F18_C1 [DEATH_DATE] [VARCHAR] (50) NULL, -- F29_C1 + [Container] [dbo].[ENTITYID] NOT NULL, [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, [USER_NAME] [VARCHAR](128) NOT NULL, [ENTRY_DATE_TM] [DATETIME] NOT NULL, @@ -91,10 +97,13 @@ CREATE NONCLUSTERED INDEX [IDX_HL7_PID_ID] ON [snprc_ehr].[HL7_PID] )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO - ALTER TABLE [snprc_ehr].[HL7_PID] CHECK CONSTRAINT [FK_PID_REF_MSH] GO +ALTER TABLE [snprc_ehr].[HL7_PID] WITH CHECK ADD CONSTRAINT [FK_HL7_PID_container] FOREIGN KEY([Container]) + REFERENCES [core].[Containers] ([EntityId]) + GO + CREATE TABLE [snprc_ehr].[HL7_PV1]( [MESSAGE_ID] [VARCHAR](50) NOT NULL, [IDX] [INT] NOT NULL, @@ -105,6 +114,7 @@ CREATE TABLE [snprc_ehr].[HL7_PV1]( [VISIT_NUMBER] [VARCHAR] (20) NULL, -- F19_C1 [CHARGE_NUMBER] [VARCHAR] (20) NULL, -- F22_C1 (Courtesy Code) [ADMIT_DATE] [DATETIME] NULL, --F44_C1 + [Container] [dbo].[ENTITYID] NOT NULL, [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, [USER_NAME] [VARCHAR](128) NOT NULL, [ENTRY_DATE_TM] [DATETIME] NOT NULL, @@ -133,6 +143,10 @@ ALTER TABLE [snprc_ehr].[HL7_PV1] WITH CHECK ADD CONSTRAINT [FK_PV1_REF_MSH] F ALTER TABLE [snprc_ehr].[HL7_PV1] CHECK CONSTRAINT [FK_PV1_REF_MSH] GO +ALTER TABLE [snprc_ehr].[HL7_PV1] WITH CHECK ADD CONSTRAINT [FK_HL7_PV1_container] FOREIGN KEY([Container]) + REFERENCES [core].[Containers] ([EntityId]) + GO + CREATE TABLE [snprc_ehr].[HL7_ORC]( [MESSAGE_ID] [VARCHAR](50) NOT NULL, [IDX] [INT] NOT NULL, @@ -146,6 +160,7 @@ CREATE TABLE [snprc_ehr].[HL7_ORC]( [ORDER_PROVIDER_FIRST] [VARCHAR] (50) NULL, -- F12_C3 [CALLBACK_EMAIL] [VARCHAR](50) NULL, -- F14_C3 [ORDER_DATE] [DATETIME] NULL, -- F15_C1 + [Container] [dbo].[ENTITYID] NOT NULL, [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, [USER_NAME] [VARCHAR](128) NOT NULL, [ENTRY_DATE_TM] [DATETIME] NOT NULL, @@ -174,6 +189,9 @@ ALTER TABLE [snprc_ehr].[HL7_ORC] WITH CHECK ADD CONSTRAINT [FK_ORC_REF_MSH] F ALTER TABLE [snprc_ehr].[HL7_ORC] CHECK CONSTRAINT [FK_ORC_REF_MSH] GO +ALTER TABLE [snprc_ehr].[HL7_ORC] WITH CHECK ADD CONSTRAINT [FK_HL7_ORC_container] FOREIGN KEY([Container]) + REFERENCES [core].[Containers] ([EntityId]) + GO CREATE TABLE [snprc_ehr].[HL7_OBR]( [MESSAGE_ID] [VARCHAR](50) NOT NULL, @@ -194,6 +212,7 @@ CREATE TABLE [snprc_ehr].[HL7_OBR]( [TECHNICIAN_FIRST_NAME] [VARCHAR](50) NULL, [TECHNICIAN_LAST_NAME] [VARCHAR](50) NULL, [CHARGE_ID] [INT] NULL, + [Container] [dbo].[ENTITYID] NOT NULL, [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, [USER_NAME] [VARCHAR](128) NOT NULL, [ENTRY_DATE_TM] [DATETIME] NOT NULL, @@ -234,6 +253,10 @@ CREATE NONCLUSTERED INDEX [IDX_HL7_OBR_ID_DATE] ON [snprc_ehr].[HL7_OBR] )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO +ALTER TABLE [snprc_ehr].[HL7_OBR] WITH CHECK ADD CONSTRAINT [FK_HL7_OBR_container] FOREIGN KEY([Container]) + REFERENCES [core].[Containers] ([EntityId]) + GO + CREATE TABLE [snprc_ehr].[HL7_OBX]( [MESSAGE_ID] [VARCHAR](50) NOT NULL, [IDX] [INT] NOT NULL, @@ -250,6 +273,7 @@ CREATE TABLE [snprc_ehr].[HL7_OBX]( [REFERENCE_RANGE] [VARCHAR](60) NULL, [ABNORMAL_FLAGS] [VARCHAR](10) NULL, [RESULT_STATUS] [VARCHAR](10) NULL, + [Container] [dbo].[ENTITYID] NOT NULL, [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, [USER_NAME] [VARCHAR](128) NOT NULL, [ENTRY_DATE_TM] [DATETIME] NOT NULL, @@ -283,6 +307,9 @@ CREATE NONCLUSTERED INDEX [IDX_HL7_OBX_OBR_OBJ_ID] ON [snprc_ehr].[HL7_OBX] )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO +ALTER TABLE [snprc_ehr].[HL7_OBX] WITH CHECK ADD CONSTRAINT [FK_HL7_OBX_container] FOREIGN KEY([Container]) + REFERENCES [core].[Containers] ([EntityId]) + GO CREATE TABLE [snprc_ehr].[HL7_NTE]( [MESSAGE_ID] [VARCHAR](50) NOT NULL, @@ -291,6 +318,7 @@ CREATE TABLE [snprc_ehr].[HL7_NTE]( [SET_ID] [VARCHAR](20) NOT NULL, [OBR_SET_ID] [VARCHAR](20) NOT NULL, [COMMENT] [VARCHAR](MAX) NULL, + [Container] [dbo].[ENTITYID] NOT NULL, [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, [USER_NAME] [VARCHAR](128) NOT NULL, [ENTRY_DATE_TM] [DATETIME] NOT NULL, @@ -319,6 +347,10 @@ ALTER TABLE [snprc_ehr].[HL7_NTE] WITH CHECK ADD CONSTRAINT [FK_NTE_REF_OBR] F ALTER TABLE [snprc_ehr].[HL7_NTE] CHECK CONSTRAINT [FK_NTE_REF_OBR] GO +ALTER TABLE [snprc_ehr].[HL7_NTE] WITH CHECK ADD CONSTRAINT [FK_HL7_NTE_container] FOREIGN KEY([Container]) + REFERENCES [core].[Containers] ([EntityId]) + GO + CREATE NONCLUSTERED INDEX [IDX_HL7_NTE_OBR_OBJ_ID] ON [snprc_ehr].[HL7_NTE] ( [OBR_OBJECT_ID] ASC @@ -336,6 +368,7 @@ CREATE TABLE [snprc_ehr].[HL7_IMPORT_LOG]( [SPECIES] [VARCHAR](50) NULL, [HL7_MESSAGE_TEXT] [VARCHAR](MAX) NULL, [IMPORT_TEXT] [VARCHAR](MAX) NULL, + [Container] [dbo].[ENTITYID] NOT NULL, [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, [USER_NAME] [VARCHAR](128) NOT NULL, [ENTRY_DATE_TM] [DATETIME] NOT NULL, @@ -362,6 +395,10 @@ ALTER TABLE [snprc_ehr].[HL7_IMPORT_LOG] WITH CHECK ADD CONSTRAINT [CKC_HL7_IM ALTER TABLE [snprc_ehr].[HL7_IMPORT_LOG] CHECK CONSTRAINT [CKC_HL7_IMPORT_LOG_OBSERVATION_DATE] GO +ALTER TABLE [snprc_ehr].[HL7_IMPORT_LOG] WITH CHECK ADD CONSTRAINT [FK_HL7_IMPORT_LOG_container] FOREIGN KEY([Container]) + REFERENCES [core].[Containers] ([EntityId]) + GO + -- ========================================================================== -- Author: Terry Hawkins -- Create date: 2/28/14 @@ -408,4 +445,6 @@ BEGIN finis: RETURN @return -END \ No newline at end of file +END + +GO diff --git a/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-create.sql b/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-create.sql new file mode 100644 index 000000000..423826312 --- /dev/null +++ b/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-create.sql @@ -0,0 +1,18 @@ +CREATE VIEW [snprc_ehr].[HL7_GroupNTE] AS +SELECT + a.OBR_OBJECT_ID, + a.OBR_SET_ID, + a.Container, + STRING_AGG( a.comment, CHAR(10)) WITHIN GROUP (ORDER BY a.SET_ID ASC) AS comment +FROM + ( + SELECT COALESCE(CAST(n.comment AS VARCHAR(MAX)), '') AS comment, + n.OBR_OBJECT_ID AS OBR_OBJECT_ID, + n.OBR_SET_ID AS OBR_SET_ID, + n.set_id, + n.Container + FROM snprc_ehr.HL7_NTE n + ) as a +GROUP BY a.OBR_OBJECT_ID, a.OBR_SET_ID, a.Container + +GO \ No newline at end of file diff --git a/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-drop.sql b/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-drop.sql new file mode 100644 index 000000000..6d8faf558 --- /dev/null +++ b/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-drop.sql @@ -0,0 +1,2 @@ + +EXEC core.fn_dropifexists @objname = 'HL7_GroupNTE',@objschema = 'snprc_ehr', @objtype = 'VIEW'; \ No newline at end of file diff --git a/snprc_ehr/resources/schemas/snprc_ehr.xml b/snprc_ehr/resources/schemas/snprc_ehr.xml index 2c8ed2601..47d2e81a8 100644 --- a/snprc_ehr/resources/schemas/snprc_ehr.xml +++ b/snprc_ehr/resources/schemas/snprc_ehr.xml @@ -2013,12 +2013,13 @@ + - HL7 MSH STAGING + HL7 MSH Data MESSAGE_ID, IDX @@ -2045,12 +2046,13 @@ + - HL7 PID STAGING + HL7 PID Data
MESSAGE_ID, IDX @@ -2075,12 +2077,13 @@ + - HL7 PV1 STAGING + HL7 PV1 Data
MESSAGE_ID, IDX @@ -2107,12 +2110,13 @@ + - HL7 ORC STAGING + HL7 ORC Data
OBJECT_ID @@ -2161,12 +2165,13 @@ + - HL7 `OBR` STAGING + HL7 OBR Data
OBJECT_ID @@ -2205,12 +2210,13 @@ + - HL7 OBX STAGING + HL7 OBX Data
OBJECT_ID @@ -2232,12 +2238,13 @@ + - HL7 NTE STAGING + HL7 NTE Data
TID @@ -2257,6 +2264,7 @@ + @@ -2264,4 +2272,12 @@ HL7 IMPORT LOG
+ + + + + + + +
diff --git a/snprc_ehr/resources/source_queries/HL7/HL7_admin_permissions.sql b/snprc_ehr/resources/source_queries/HL7/HL7_admin_permissions.sql index 13b386c9d..64b9d8e35 100644 --- a/snprc_ehr/resources/source_queries/HL7/HL7_admin_permissions.sql +++ b/snprc_ehr/resources/source_queries/HL7/HL7_admin_permissions.sql @@ -7,4 +7,7 @@ GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_OBX TO GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_ORC TO HL7_Admin; GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_PID TO HL7_Admin; GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_PV1 TO HL7_Admin; -GRANT EXECUTE ON labkey.snprc_ehr.f_isNumeric TO Labkey, HL7_Admin; \ No newline at end of file +GRANT EXECUTE ON labkey.snprc_ehr.f_isNumeric TO HL7_Admin; +GRANT SELECT ON labkey.snprc_ehr.HL7_GroupNTE TO HL7_Admin; +GRANT EXECUTE ON labkey.snprc_ehr.f_format_hl7_date TO HL7_Admin; +GRANT SELECT ON labkey.core.Containers TO HL7_Admin; diff --git a/snprc_ehr/resources/source_queries/HL7/copy Sqlmed MSH data to LK.sql b/snprc_ehr/resources/source_queries/HL7/copy Sqlmed MSH data to LK.sql index 0a15820db..0dc5e24c4 100644 --- a/snprc_ehr/resources/source_queries/HL7/copy Sqlmed MSH data to LK.sql +++ b/snprc_ehr/resources/source_queries/HL7/copy Sqlmed MSH data to LK.sql @@ -16,6 +16,7 @@ INSERT INTO labkey.snprc_ehr.HL7_MSH TRIGGER_EVENT_ID, MESSAGE_CONTROL_ID, MESSAGE_DATE_TM, + Container, OBJECT_ID, USER_NAME, ENTRY_DATE_TM @@ -31,6 +32,7 @@ INSERT INTO labkey.snprc_ehr.HL7_MSH '' AS TRIGGER_EVENT_ID, obr.MESSAGE_CONTROL_ID AS MESSAGE_CONTROL_ID, obr.VERIFIED_DATE_TM AS MESSAGE_DATE_TM, + c.EntityId as Container, obr.OBJECT_ID AS OBJECT_ID, dbo.f_map_username(obr.USER_NAME) AS USER_NAME, obr.ENTRY_DATE_TM AS ENTRY_DATE_TM @@ -38,6 +40,7 @@ INSERT INTO labkey.snprc_ehr.HL7_MSH -- select primates only from the TxBiomed colony INNER JOIN labkey_etl.V_DEMOGRAPHICS AS d ON d.id = obr.ANIMAL_ID + INNER JOIN labkey.core.Containers AS c on c.name = 'SNPRC' LEFT OUTER JOIN dbo.TAC_COLUMNS AS tc ON tc.object_id = obr.OBJECT_ID WHERE obr.RESULT_STATUS IN ( 'F', 'C', 'D' ) AND obr.VERIFIED_DATE_TM IS NOT NULL diff --git a/snprc_ehr/resources/source_queries/HL7/copy Sqlmed NTE data to LK.sql b/snprc_ehr/resources/source_queries/HL7/copy Sqlmed NTE data to LK.sql index 4d8e47037..cc353786c 100644 --- a/snprc_ehr/resources/source_queries/HL7/copy Sqlmed NTE data to LK.sql +++ b/snprc_ehr/resources/source_queries/HL7/copy Sqlmed NTE data to LK.sql @@ -11,6 +11,7 @@ INSERT INTO labkey.snprc_ehr.HL7_NTE SET_ID, OBR_SET_ID, COMMENT, + Container, OBJECT_ID, USER_NAME, ENTRY_DATE_TM @@ -23,6 +24,7 @@ SELECT nte.MESSAGE_ID AS MESSAGE_ID, nte.SET_ID AS SET_ID, obr.SET_ID AS OBR_SET_ID, nte.COMMENT as COMMENT, + c.EntityId as Container, nte.OBJECT_ID AS OBJECT_ID, dbo.f_map_username(nte.USER_NAME) AS USER_NAME, nte.ENTRY_DATE_TM AS ENTRY_DATE_TM @@ -31,5 +33,6 @@ FROM dbo.CLINICAL_PATH_NTE AS nte INNER JOIN dbo.CLINICAL_PATH_OBR as obr on nte.MESSAGE_ID = obr.MESSAGE_ID INNER JOIN labkey_etl.V_DEMOGRAPHICS AS d ON d.id = obr.ANIMAL_ID LEFT OUTER JOIN dbo.TAC_COLUMNS AS tc ON tc.object_id = nte.OBJECT_ID + INNER JOIN labkey.core.Containers AS c on c.name = 'SNPRC' WHERE obr.VERIFIED_DATE_TM IS NOT NULL ) diff --git a/snprc_ehr/resources/source_queries/HL7/copy Sqlmed OBR data to LK.sql b/snprc_ehr/resources/source_queries/HL7/copy Sqlmed OBR data to LK.sql index fc9c793e4..596431985 100644 --- a/snprc_ehr/resources/source_queries/HL7/copy Sqlmed OBR data to LK.sql +++ b/snprc_ehr/resources/source_queries/HL7/copy Sqlmed OBR data to LK.sql @@ -24,6 +24,7 @@ INSERT INTO labkey.snprc_ehr.HL7_OBR TECHNICIAN_FIRST_NAME, TECHNICIAN_LAST_NAME, CHARGE_ID, + Container, OBJECT_ID, USER_NAME, ENTRY_DATE_TM @@ -48,6 +49,7 @@ SELECT obr.MESSAGE_ID AS MESSAGE_ID, obr.TECHNICIAN_NAME AS TECHNICIAN_FIRST_NAME, obr.TECHNICIAN_INITIALS AS TECHNICIAN_LAST_NAME, obr.CHARGE_ID AS CHARGE_ID, + c.EntityId as Container, obr.OBJECT_ID AS OBJECT_ID, dbo.f_map_username(obr.USER_NAME) AS USER_NAME, obr.ENTRY_DATE_TM AS ENTRY_DATE_TM @@ -57,6 +59,7 @@ FROM dbo.CLINICAL_PATH_OBR AS obr INNER JOIN labkey_etl.V_DEMOGRAPHICS AS d ON d.id = obr.ANIMAL_ID INNER JOIN dbo.CLINICAL_PATH_LABWORK_SERVICES AS lu ON obr.PROCEDURE_ID = lu.ServiceId LEFT OUTER JOIN dbo.TAC_COLUMNS AS tc ON tc.object_id = obr.OBJECT_ID + INNER JOIN labkey.core.Containers AS c on c.name = 'SNPRC' WHERE obr.RESULT_STATUS IN ( 'F', 'C', 'D' ) AND obr.VERIFIED_DATE_TM IS NOT NULL AND NOT EXISTS (SELECT 1 FROM labkey_etl.v_delete_clinPathRuns AS dcpr WHERE obr.OBJECT_ID = dcpr.objectid) diff --git a/snprc_ehr/resources/source_queries/HL7/copy Sqlmed OBX data to LK.sql b/snprc_ehr/resources/source_queries/HL7/copy Sqlmed OBX data to LK.sql index 8eb7a3158..f20d03974 100644 --- a/snprc_ehr/resources/source_queries/HL7/copy Sqlmed OBX data to LK.sql +++ b/snprc_ehr/resources/source_queries/HL7/copy Sqlmed OBX data to LK.sql @@ -20,6 +20,7 @@ INSERT INTO labkey.snprc_ehr.HL7_OBX REFERENCE_RANGE, ABNORMAL_FLAGS, RESULT_STATUS, + Container, OBJECT_ID, USER_NAME, ENTRY_DATE_TM @@ -33,6 +34,7 @@ SELECT obx.MESSAGE_ID AS MESSAGE_ID, obx.VALUE_TYPE AS VALUE_TYPE, obx.TEST_ID AS TEST_ID, COALESCE (lp.TestName, obx.TEST_NAME) as TEST_NAME, + c.EntityId as Container, lp.OBJECT_ID AS serviceTestId, CAST(LTRIM(RTRIM(obx.OBSERVED_VALUE)) as VARCHAR(MAX)) as QUALITATIVE_RESULT, CASE WHEN obx.VALUE_TYPE = 'NM' AND dbo.f_isNumeric(obx.OBSERVED_VALUE) = 1 @@ -54,16 +56,8 @@ FROM dbo.CLINICAL_PATH_OBX AS obx INNER JOIN labkey_etl.V_DEMOGRAPHICS AS d ON d.id = obr.ANIMAL_ID LEFT OUTER JOIN dbo.CLINICAL_PATH_LABWORK_PANELS AS lp ON obr.PROCEDURE_ID = lp.ServiceId AND obx.TEST_ID = lp.TestId LEFT OUTER JOIN dbo.TAC_COLUMNS AS tc ON tc.object_id = obx.OBJECT_ID + INNER JOIN labkey.core.Containers AS c on c.name = 'SNPRC' WHERE obx.RESULT_STATUS IN ( 'F', 'C', 'D' ) AND obr.VERIFIED_DATE_TM IS NOT NULL AND NOT EXISTS (SELECT 1 FROM labkey_etl.v_delete_labwork_results AS dclr WHERE obx.OBJECT_ID = dclr.objectid) -) --- SELECT * FROM dbo.CLINICAL_PATH_OBX AS obx --- -- select primates only from the TxBiomed colony --- INNER JOIN dbo.CLINICAL_PATH_OBR as obr on obx.MESSAGE_ID = obr.MESSAGE_ID --- INNER JOIN labkey_etl.V_DEMOGRAPHICS AS d ON d.id = obr.ANIMAL_ID --- LEFT OUTER JOIN dbo.CLINICAL_PATH_LABWORK_PANELS AS lp ON obr.PROCEDURE_ID = lp.ServiceId AND obx.TEST_ID = lp.TestId --- LEFT OUTER JOIN dbo.TAC_COLUMNS AS tc ON tc.object_id = obx.OBJECT_ID ---WHERE obx.RESULT_STATUS IN ( 'F', 'C', 'D' ) --- AND NOT EXISTS (SELECT 1 FROM labkey_etl.v_delete_labwork_results AS dclr WHERE obx.OBJECT_ID = dclr.objectid) --- and obx.MESSAGE_ID NOT IN (SELECT obr.message_id FROM labkey.snprc_ehr.HL7_OBR AS obr) \ No newline at end of file +) \ No newline at end of file diff --git a/snprc_ehr/resources/source_queries/HL7/p_load_hl7_data.sql b/snprc_ehr/resources/source_queries/HL7/p_load_hl7_data.sql index afe5cae54..5fac5822b 100644 --- a/snprc_ehr/resources/source_queries/HL7/p_load_hl7_data.sql +++ b/snprc_ehr/resources/source_queries/HL7/p_load_hl7_data.sql @@ -37,7 +37,9 @@ BEGIN @hl7_observation_date_tm DATETIME, @pos INT, @patient_id VARCHAR(32), - @table_prefix VARCHAR(3) + @table_prefix VARCHAR(3), + @container UNIQUEIDENTIFIER + SET @animal_id = 'Unproc' SET @hl7_message_text = 'Could not read message text.' @@ -83,6 +85,9 @@ begin transaction trans1 @animal_id = LTRIM(RTRIM(pid.PID_F2_C1)) FROM dbo.ORC_Segment_PID_A AS pid WHERE pid.MessageID = @MessageId + -- get container id + SELECT @container = EntityId FROM labkey.core.Containers AS c WHERE c.Name = 'SNPRC' + END TRY BEGIN CATCH SELECT @error = -101 @@ -102,7 +107,8 @@ begin transaction trans1 MESSAGE_TYPE, TRIGGER_EVENT_ID, MESSAGE_CONTROL_ID, - MESSAGE_DATE_TM + MESSAGE_DATE_TM, + Container ) SELECT msh.MessageID, @@ -114,7 +120,8 @@ begin transaction trans1 msh.MSH_F9_C1, msh.MSH_F9_C2, msh.MSH_F10_C1, - dbo.f_format_hl7_date(msh.MSH_F7_C1) + dbo.f_format_hl7_date(msh.MSH_F7_C1), + @container AS Container FROM Orchard_HL7_staging.dbo.ORC_segment_msh_a AS msh WHERE msh.MessageId = @messageid @@ -139,7 +146,8 @@ begin transaction trans1 BREED, SPECIES, ACCOUNT_NUMBER, - DEATH_DATE + DEATH_DATE, + Container ) ( SELECT @@ -153,7 +161,8 @@ begin transaction trans1 pid.PID_F10_C1, -- BREED - varchar(50) pid.PID_F22_C1, -- SPECIES - varchar(50) pid.PID_F18_C1, -- ACCOUNT_NUMBER - varchar(50) - dbo.f_format_hl7_date(pid.PID_F29_C1) + dbo.f_format_hl7_date(pid.PID_F29_C1), + @container -- Container FROM Orchard_hl7_staging.dbo.ORC_Segment_PID_A as pid where pid.messageID = @messageId ) @@ -176,7 +185,8 @@ begin transaction trans1 ATTENDING_DOCTOR_FIRST, VISIT_NUMBER, CHARGE_NUMBER, - ADMIT_DATE + ADMIT_DATE, + Container ) ( SELECT @@ -188,7 +198,8 @@ begin transaction trans1 pv1.PV1_F7_C3, -- ATTENDING_DOCTOR_FIRST - varchar(50) pv1.PV1_F19_C1, -- VISIT_NUMBER - varchar(20) pv1.PV1_F22_C1, -- CHARGE_NUMBER - varchar(20) - dbo.f_format_hl7_date(pv1b.PV1_F44_C1) -- ADMIT_DATE + dbo.f_format_hl7_date(pv1b.PV1_F44_C1), -- ADMIT_DATE + @container -- Container FROM Orchard_HL7_staging.dbo.ORC_Segment_PV1_A as pv1 INNER JOIN Orchard_hl7_staging.dbo.ORC_Segment_PV1_B AS pv1b ON pv1b.MessageID = pv1.MessageID AND pv1b.IDX = pv1.IDX WHERE pv1.MessageId = @messageId @@ -217,7 +228,8 @@ begin transaction trans1 ORDER_PROVIDER_LAST, ORDER_PROVIDER_FIRST, CALLBACK_EMAIL, - ORDER_DATE + ORDER_DATE, + Container ) ( SELECT orc.MessageId, -- MESSAGE_ID - varchar(50) @@ -231,7 +243,8 @@ begin transaction trans1 orc.ORC_F12_C2, -- ORDER_PROVIDER_LAST - varchar(50) orc.ORC_F12_C3, -- ORDER_PROVIDER_FIRST - varchar(50) orc.ORC_F14_C3, -- CALLBACK_EMAIL - varchar(50) - dbo.f_format_hl7_date(orc.ORC_F15_C1) -- ORDER_DATE - datetime + dbo.f_format_hl7_date(orc.ORC_F15_C1), -- ORDER_DATE - datetime + @container -- Container FROM Orchard_HL7_staging.dbo.ORC_Segment_ORC_A as orc WHERE orc.MessageId = @messageId @@ -316,9 +329,9 @@ begin transaction trans1 -- all processing finished jump to clean exit routine INSERT INTO labkey.snprc_ehr.HL7_IMPORT_LOG (MESSAGE_ID, OBSERVATION_DATE_TM, MESSAGE_CONTROL_ID, - IMPORT_STATUS, RESULT_STATUS, PATIENT_ID, SPECIES, HL7_MESSAGE_TEXT, IMPORT_TEXT) + IMPORT_STATUS, RESULT_STATUS, PATIENT_ID, SPECIES, HL7_MESSAGE_TEXT, IMPORT_TEXT, Container) VALUES (@messageId,@hl7_observation_date_tm, @hl7_message_control_id, 1, @hl7_result_status, - @animal_id, @hl7_species, @hl7_message_text, 'Record cancelled: okay.') + @animal_id, @hl7_species, @hl7_message_text, 'Record cancelled: okay.', @container) GOTO finis END @@ -352,7 +365,8 @@ BEGIN TECHNICIAN_LAST_NAME , TECHNICIAN_FIRST_NAME, CHARGE_ID, - OBJECT_ID + OBJECT_ID, + Container ) SELECT obr.MessageID, @@ -372,7 +386,8 @@ BEGIN obr.OBR_F34_C1, -- Technician last name obr.OBR_F34_C2, -- Technician first name pv1.PV1_F24_C1, --charge_id -- TODO: maps to HL7 Contract Code - NEWID() -- object_ID + NEWID(), -- object_ID + @container FROM dbo.ORC_segment_obr_a AS obr JOIN dbo.ORC_segment_pid_a AS pid ON pid.MessageID = obr.MessageID @@ -406,11 +421,12 @@ BEGIN ;WITH cte AS ( SELECT OBR.MessageId, OBR.IDX AS OBR_IDX, OBR.OBR_F1_C1 AS SET_ID, OBR.OBR_F25_C1 as RESULT_STATUS, cbr.OBJECT_ID as obr_object_id, - obr.OBR_F4_C1 as obr_service_id + obr.OBR_F4_C1 as obr_service_id, LEAD(OBR.IDX, 1, 9999) OVER (ORDER BY OBR.IDX) AS next_OBR_IDX FROM [Orchard_hl7_staging].[dbo].[ORC_Segment_OBR_A] AS OBR INNER JOIN labkey.snprc_ehr.HL7_OBR as cbr on OBR.messageId = cbr.Message_ID and OBR.OBR_F1_C1 = cbr.SET_ID + INNER JOIN labkey.core.Containers AS c ON c.Name = 'SNPRC' WHERE OBR.MessageId = @messageId ) @@ -427,9 +443,10 @@ BEGIN QUALITATIVE_RESULT, RESULT, UNITS , - REFERENCE_RANGE , -- TODO: missing reference ranges in Orchard data - ABNORMAL_FLAGS , -- TODO: ditto ditto - RESULT_STATUS -- TODO: ditto ditto + REFERENCE_RANGE , + ABNORMAL_FLAGS , + RESULT_STATUS, + Container ) -- output Inserted.OBR_OBJECT_ID SELECT obx.MessageID, @@ -442,13 +459,14 @@ BEGIN obx.OBX_F3_C2, lp.objectId, obx.OBX_RESULTDATA, - CASE WHEN obx.OBX_F2_C1 = 'NM' AND snprc_ehr.f_isNumeric(obx.OBX_RESULTDATA) = 1 + CASE WHEN obx.OBX_F2_C1 = 'NM' AND labkey.snprc_ehr.f_isNumeric(obx.OBX_RESULTDATA) = 1 THEN CAST(LTRIM(RTRIM(REPLACE(obx.OBX_RESULTDATA, ' ', ''))) AS DECIMAL(10, 3)) ELSE NULL END AS RESULT, obx.OBX_F6_C1, obx.OBX_F7_C1, obx.OBX_F8_C1, - obx.OBX_F11_C1 + obx.OBX_F11_C1, + @container FROM dbo.ORC_segment_obx_a AS obx INNER JOIN cte ON OBX.MessageID = cte.MessageID AND obx.IDX > cte.OBR_IDX AND obx.IDX < cte.next_OBR_IDX LEFT OUTER JOIN labkey.snprc_ehr.labwork_panels AS lp ON cte.obr_service_id = lp.serviceId @@ -481,14 +499,16 @@ BEGIN OBR_OBJECT_ID, SET_ID, OBR_SET_ID, - COMMENT + COMMENT, + Container ) SELECT nte.MessageID, nte.IDX, cte.obr_object_id, nte.NTE_F1_C1, cte.SET_ID, -- OBR_SET_ID - nte.NTE_F3_C1 + nte.NTE_F3_C1, + @container FROM Orchard_hl7_staging.dbo.ORC_Segment_NTE_A AS nte INNER JOIN cte ON nte.MessageID = cte.messageId AND nte.IDX > cte.OBR_IDX AND nte.IDX < cte.next_OBR_IDX -- only load data with result_status = 'F' (final). @@ -524,7 +544,7 @@ BEGIN cpx.RESULT = CASE WHEN obx.OBX_F11_C1 = 'D' then '00' else - CASE WHEN obx.OBX_F2_C1 = 'NM' AND snprc_ehr.f_isNumeric(obx.OBX_RESULTDATA) = 1 + CASE WHEN obx.OBX_F2_C1 = 'NM' AND labkey.snprc_ehr.f_isNumeric(obx.OBX_RESULTDATA) = 1 THEN CAST(LTRIM(RTRIM(REPLACE(obx.OBX_RESULTDATA, ' ', ''))) AS DECIMAL(10, 3)) ELSE NULL @@ -552,15 +572,15 @@ BEGIN -- all processing finished jump to clean exit routine - INSERT INTO labkey.snprc_ehr.HL7_IMPORT_LOG (MESSAGE_ID, OBSERVATION_DATE_TM, MESSAGE_CONTROL_ID, IMPORT_STATUS, RESULT_STATUS, PATIENT_ID, SPECIES, HL7_MESSAGE_TEXT, IMPORT_TEXT) - VALUES (@messageId,@hl7_observation_date_tm, @hl7_message_control_id, 1, @hl7_result_status, @animal_id, @hl7_species, @hl7_message_text, 'upload okay.') + INSERT INTO labkey.snprc_ehr.HL7_IMPORT_LOG (MESSAGE_ID, OBSERVATION_DATE_TM, MESSAGE_CONTROL_ID, IMPORT_STATUS, RESULT_STATUS, PATIENT_ID, SPECIES, HL7_MESSAGE_TEXT, IMPORT_TEXT, Container) + VALUES (@messageId,@hl7_observation_date_tm, @hl7_message_control_id, 1, @hl7_result_status, @animal_id, @hl7_species, @hl7_message_text, 'upload okay.', @container) GOTO finis END not_animal_data: - INSERT INTO labkey.snprc_ehr.HL7_IMPORT_LOG (MESSAGE_ID, OBSERVATION_DATE_TM, MESSAGE_CONTROL_ID, IMPORT_STATUS, RESULT_STATUS, PATIENT_ID, SPECIES, HL7_MESSAGE_TEXT, IMPORT_TEXT) - VALUES (@messageId, @hl7_observation_date_tm, @hl7_message_control_id, 2, @hl7_result_status, @animal_id, @hl7_species, @hl7_message_text, 'Not animal data.') + INSERT INTO labkey.snprc_ehr.HL7_IMPORT_LOG (MESSAGE_ID, OBSERVATION_DATE_TM, MESSAGE_CONTROL_ID, IMPORT_STATUS, RESULT_STATUS, PATIENT_ID, SPECIES, HL7_MESSAGE_TEXT, IMPORT_TEXT, Container) + VALUES (@messageId, @hl7_observation_date_tm, @hl7_message_control_id, 2, @hl7_result_status, @animal_id, @hl7_species, @hl7_message_text, 'Not animal data.', @container) GOTO finis @@ -568,8 +588,8 @@ error: -- an error occurred, rollback the entire transaction. rollback transaction trans1 - INSERT INTO labkey.snprc_ehr.HL7_IMPORT_LOG (MESSAGE_ID, OBSERVATION_DATE_TM, MESSAGE_CONTROL_ID, IMPORT_STATUS, RESULT_STATUS, PATIENT_ID, SPECIES, HL7_MESSAGE_TEXT, IMPORT_TEXT) - VALUES (@messageId, @hl7_observation_date_tm, @hl7_message_control_id, @error, @hl7_result_status, @animal_id, @hl7_species, @hl7_message_text, @errorMsg) + INSERT INTO labkey.snprc_ehr.HL7_IMPORT_LOG (MESSAGE_ID, OBSERVATION_DATE_TM, MESSAGE_CONTROL_ID, IMPORT_STATUS, RESULT_STATUS, PATIENT_ID, SPECIES, HL7_MESSAGE_TEXT, IMPORT_TEXT, Container) + VALUES (@messageId, @hl7_observation_date_tm, @hl7_message_control_id, @error, @hl7_result_status, @animal_id, @hl7_species, @hl7_message_text, @errorMsg, @container) Update Orchard_hl7_staging.dbo.ORC_HL7Data Set Processed = 1, StatusMessage = 'ERROR: Processed By p_load_hl7_data.sql' Where MessageID = @MessageID @@ -586,6 +606,7 @@ finis: END GRANT EXEC ON LIS.p_load_hl7_data TO hl7_admin; +GRANT SELECT ON labkey.core.Containers TO hl7_admin; GRANT VIEW DEFINITION ON LIS.p_load_demographics TO hl7_admin; GO \ No newline at end of file From 3f11e813275e63ae18e056d8f019e9b198a4aeee Mon Sep 17 00:00:00 2001 From: Terry J Hawkins Date: Fri, 22 Jul 2022 16:40:50 -0500 Subject: [PATCH 13/17] Migrated feature branch from 22.3 release branch. --- snprc_ehr/resources/etls/SqlmedMsh.xml | 22 + snprc_ehr/resources/etls/SqlmedObr.xml | 22 + .../snprc_ehr/HL7BiochemistryPivot.query.xml | 9 + .../snprc_ehr/HL7BiochemistryPivot.sql | 36 ++ .../snprc_ehr/HL7BiochemistryPivot/.qview.xml | 6 + .../snprc_ehr/HL7CulturePivot.query.xml | 9 + .../queries/snprc_ehr/HL7CulturePivot.sql | 37 ++ .../snprc_ehr/HL7CulturePivot/.qview.xml | 6 + .../snprc_ehr/HL7HematologyPivot.query.xml | 9 + .../queries/snprc_ehr/HL7HematologyPivot.sql | 25 + .../snprc_ehr/HL7HematologyPivot/.qview.xml | 6 + .../snprc_ehr/HL7HistologyPivot.query.xml | 9 + .../queries/snprc_ehr/HL7HistologyPivot.sql | 38 ++ .../snprc_ehr/HL7HistologyPivot/.qview.xml | 6 + .../queries/snprc_ehr/HL7MiscPivot.query.xml | 9 + .../queries/snprc_ehr/HL7MiscPivot.sql | 38 ++ .../queries/snprc_ehr/HL7MiscPivot/.qview.xml | 6 + .../snprc_ehr/HL7ParasitologyPivot.query.xml | 9 + .../snprc_ehr/HL7ParasitologyPivot.sql | 38 ++ .../snprc_ehr/HL7ParasitologyPivot/.qview.xml | 6 + .../snprc_ehr/HL7SurveillancePivot.query.xml | 9 + .../snprc_ehr/HL7SurveillancePivot.sql | 32 + .../snprc_ehr/HL7SurveillancePivot/.qview.xml | 6 + .../snprc_ehr/HL7SurveillancePivotInner.sql | 60 ++ .../snprc_ehr/HL7UnknownPivot.query.xml | 9 + .../queries/snprc_ehr/HL7UnknownPivot.sql | 38 ++ .../snprc_ehr/HL7UnknownPivot/.qview.xml | 6 + .../queries/snprc_ehr/HL7Urinalysis.query.xml | 9 + .../queries/snprc_ehr/HL7UrinalysisPivot.sql | 38 ++ .../snprc_ehr/HL7UrinalysisPivot/.qview.xml | 6 + .../resources/queries/snprc_ehr/HL7_OBX.js | 66 ++ .../queries/study/assay_labworkResults.js | 4 +- .../study/assay_labworkResults.query.xml | 2 +- .../queries/study/hematologyPivot.query.xml | 4 + .../queries/study/hematologyPivotInner.sql | 4 +- .../queries/study/labworkResultsAll.query.xml | 6 +- .../queries/study/labworkResultsAll.sql | 154 +++-- .../queries/study/labworkTaqman.query.xml | 2 +- .../resources/queries/study/labworkTaqman.sql | 4 +- .../study/datasets/datasets_metadata.xml | 6 +- .../sqlserver/snprc_ehr-21.001-22.000.sql | 360 +++++++++++ .../dbscripts/sqlserver/snprc_ehr-create.sql | 18 + .../dbscripts/sqlserver/snprc_ehr-drop.sql | 2 + snprc_ehr/resources/schemas/snprc_ehr.xml | 285 +++++++++ .../Create_LIS_DemographicsHL7Staging.sql | 0 .../Create_LIS_HL7ExportErrorLog.sql | 0 .../{ => HL7}/Create_LIS_HL7ImportLog.sql | 6 +- .../Create_LIS_f_format_hl7_date.sql | 0 .../HL7/HL7_admin_permissions.sql | 9 + .../HL7/copy Sqlmed MSH data to LK.sql | 45 ++ .../HL7/copy Sqlmed NTE data to LK.sql | 35 ++ .../HL7/copy Sqlmed OBR data to LK.sql | 64 ++ .../HL7/copy Sqlmed OBX data to LK.sql | 69 +++ .../create_LIS_p_load_demographics.sql | 86 ++- .../HL7/create_v_sqlmed_msh.sql | 49 ++ .../HL7/create_v_sqlmed_obr.sql | 53 ++ .../source_queries/HL7/f_format_hl7_date.sql | 30 + .../source_queries/HL7/p_load_hl7_data.sql | 569 ++++++++++++++++++ .../history/LabResultsLabworkType.java | 5 +- 59 files changed, 2389 insertions(+), 107 deletions(-) create mode 100644 snprc_ehr/resources/etls/SqlmedMsh.xml create mode 100644 snprc_ehr/resources/etls/SqlmedObr.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.query.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.sql create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot/.qview.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.query.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.sql create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot/.qview.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot.query.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot.sql create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot/.qview.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot.query.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot.sql create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot/.qview.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot.query.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot.sql create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot/.qview.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot.query.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot.sql create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot/.qview.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot.query.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot.sql create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot/.qview.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivotInner.sql create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot.query.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot.sql create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot/.qview.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7Urinalysis.query.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7UrinalysisPivot.sql create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7UrinalysisPivot/.qview.xml create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7_OBX.js create mode 100644 snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-21.001-22.000.sql create mode 100644 snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-create.sql create mode 100644 snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-drop.sql rename snprc_ehr/resources/source_queries/{ => HL7}/Create_LIS_DemographicsHL7Staging.sql (100%) rename snprc_ehr/resources/source_queries/{ => HL7}/Create_LIS_HL7ExportErrorLog.sql (100%) rename snprc_ehr/resources/source_queries/{ => HL7}/Create_LIS_HL7ImportLog.sql (86%) rename snprc_ehr/resources/source_queries/{ => HL7}/Create_LIS_f_format_hl7_date.sql (100%) create mode 100644 snprc_ehr/resources/source_queries/HL7/HL7_admin_permissions.sql create mode 100644 snprc_ehr/resources/source_queries/HL7/copy Sqlmed MSH data to LK.sql create mode 100644 snprc_ehr/resources/source_queries/HL7/copy Sqlmed NTE data to LK.sql create mode 100644 snprc_ehr/resources/source_queries/HL7/copy Sqlmed OBR data to LK.sql create mode 100644 snprc_ehr/resources/source_queries/HL7/copy Sqlmed OBX data to LK.sql rename snprc_ehr/resources/source_queries/{ => HL7}/create_LIS_p_load_demographics.sql (90%) create mode 100644 snprc_ehr/resources/source_queries/HL7/create_v_sqlmed_msh.sql create mode 100644 snprc_ehr/resources/source_queries/HL7/create_v_sqlmed_obr.sql create mode 100644 snprc_ehr/resources/source_queries/HL7/f_format_hl7_date.sql create mode 100644 snprc_ehr/resources/source_queries/HL7/p_load_hl7_data.sql diff --git a/snprc_ehr/resources/etls/SqlmedMsh.xml b/snprc_ehr/resources/etls/SqlmedMsh.xml new file mode 100644 index 000000000..ecae31d59 --- /dev/null +++ b/snprc_ehr/resources/etls/SqlmedMsh.xml @@ -0,0 +1,22 @@ + + + Sqlmed MSH data + Sqlmed MSH Data (Synthetic) + + + Copy to target + + + + + + + + + + + + + + + diff --git a/snprc_ehr/resources/etls/SqlmedObr.xml b/snprc_ehr/resources/etls/SqlmedObr.xml new file mode 100644 index 000000000..fa109e07d --- /dev/null +++ b/snprc_ehr/resources/etls/SqlmedObr.xml @@ -0,0 +1,22 @@ + + + Sqlmed OBR data + Clinical Pathology OBR data + + + Copy to target + + + + + + + + + + + + + + + diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.query.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.query.xml new file mode 100644 index 000000000..b6e82c36b --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.query.xml @@ -0,0 +1,9 @@ + + + + + Biochemistry Results Pivot +
+
+
+
\ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.sql new file mode 100644 index 000000000..712826bf7 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.sql @@ -0,0 +1,36 @@ +/* Valid Service types: + Biochemistry + Culture + Hematology + Histology + Misc Tests + Parasitology + Surveillance + Unknown + Urinalysis + */ +SELECT + obr.ANIMAL_ID as id, + obr.OBSERVATION_DATE_TM as date, + obr.MESSAGE_ID, + obr.PROCEDURE_NAME, + obr.PROCEDURE_ID, + nte.COMMENT, + obx.TEST_NAME, + MAX(obx.ABNORMAL_FLAGS) AS ABNORMAL_FLAGS, + MAX(obx.QUALITATIVE_RESULT) as QUALITATIVE_RESULT, + MAX(obx.RESULT) as RESULT + +FROM snprc_ehr.HL7_OBR obr + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID +WHERE obr.PROCEDURE_ID.Dataset = 'Biochemistry' + +GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, obr.PROCEDURE_NAME, obr.PROCEDURE_ID, nte.COMMENT, obx.TEST_NAME + PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TEST_NAME + +-- IN +-- ( +-- select TestName as TEST_NAME from snprc_ehr.labwork_panels t +-- where t.includeInPanel = true AND t.ServiceId.Dataset='Biochemistry' +-- ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot/.qview.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot/.qview.xml new file mode 100644 index 000000000..b18074c28 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot/.qview.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.query.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.query.xml new file mode 100644 index 000000000..af585aeee --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.query.xml @@ -0,0 +1,9 @@ + + + + + Culture and Sensitivity Results Pivot +
+
+
+
\ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.sql new file mode 100644 index 000000000..a98d5ca0c --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.sql @@ -0,0 +1,37 @@ +/* Valid Service types: + Biochemistry + Culture + Hematology + Histology + Misc Tests + Parasitology + Surveillance + Unknown + Urinalysis + */ +SELECT + obr.ANIMAL_ID as id, + obr.OBSERVATION_DATE_TM as date, + obr.MESSAGE_ID, + obr.PROCEDURE_NAME, + obr.PROCEDURE_ID, + nte.COMMENT, + obx.TEST_NAME, + --obx.TEST_ID, + MAX(obx.ABNORMAL_FLAGS) AS ABNORMAL_FLAGS, + MAX(obx.QUALITATIVE_RESULT) as QUALITATIVE_RESULT, + MAX(obx.RESULT) as RESULT + +FROM snprc_ehr.HL7_OBR obr + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID +WHERE obr.PROCEDURE_ID.Dataset = 'Culture' + +GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, obr.PROCEDURE_NAME, obr.PROCEDURE_ID, nte.COMMENT, obx.TEST_NAME --, obx.TEST_ID + PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TEST_NAME + +-- TEST_ID IN +-- ( +-- select TestId as TEST_ID from snprc_ehr.labwork_panels t +-- where t.includeInPanel = true AND t.ServiceId.Dataset='Culture' +-- ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot/.qview.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot/.qview.xml new file mode 100644 index 000000000..b18074c28 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot/.qview.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot.query.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot.query.xml new file mode 100644 index 000000000..30d9242ab --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot.query.xml @@ -0,0 +1,9 @@ + + + + + Hematology Pivot +
+
+
+
\ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot.sql new file mode 100644 index 000000000..2a208a0fc --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot.sql @@ -0,0 +1,25 @@ +SELECT + obr.ANIMAL_ID as id, + obr.OBSERVATION_DATE_TM as date, + obr.MESSAGE_ID, + obr.PROCEDURE_NAME, + obr.PROCEDURE_ID, + nte.COMMENT, + obx.TEST_NAME, + MAX(obx.ABNORMAL_FLAGS) AS ABNORMAL_FLAGS, + MAX(obx.QUALITATIVE_RESULT) as QUALITATIVE_RESULT, + MAX(obx.RESULT) as RESULT + +FROM snprc_ehr.HL7_OBR obr +LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID +LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID +WHERE obr.PROCEDURE_ID.Dataset = 'Hematology' + +GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, obr.PROCEDURE_NAME, obr.PROCEDURE_ID, nte.COMMENT, obx.TEST_NAME +PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TEST_NAME + +-- IN +-- ( +-- select TestName as TEST_NAME from snprc_ehr.labwork_panels t +-- where t.includeInPanel = true AND t.ServiceId.Dataset='Hematology' +-- ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot/.qview.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot/.qview.xml new file mode 100644 index 000000000..b18074c28 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot/.qview.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot.query.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot.query.xml new file mode 100644 index 000000000..7a648b718 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot.query.xml @@ -0,0 +1,9 @@ + + + + + Histology Pivot +
+
+
+
\ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot.sql new file mode 100644 index 000000000..7ae200bd3 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot.sql @@ -0,0 +1,38 @@ +/* Valid Service types: + Biochemistry + Culture + Hematology + Histology + Misc Tests + Parasitology + Surveillance + Unknown + Urinalysis + */ +SELECT obr.ANIMAL_ID as id, + obr.OBSERVATION_DATE_TM as date, + obr.MESSAGE_ID, + COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME) as PROCEDURE_NAME, + obr.PROCEDURE_ID, + nte.COMMENT, + COALESCE (lp.TestName, obx.TEST_NAME) as TestName, + --obx.TEST_ID, + MAX(obx.ABNORMAL_FLAGS) AS ABNORMAL_FLAGS, + MAX(obx.QUALITATIVE_RESULT) as QUALITATIVE_RESULT, + MAX(obx.RESULT) as RESULT + +FROM snprc_ehr.HL7_OBR obr + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx +ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId +WHERE obr.PROCEDURE_ID.Dataset = 'Histology' + +GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME), obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) + PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TestName +-- +-- IN +-- ( +-- select TestName from snprc_ehr.labwork_panels t +-- where t.includeInPanel = true AND t.ServiceId.Dataset='Histology' +-- ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot/.qview.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot/.qview.xml new file mode 100644 index 000000000..b18074c28 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot/.qview.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot.query.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot.query.xml new file mode 100644 index 000000000..e6171430c --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot.query.xml @@ -0,0 +1,9 @@ + + + + + Misc Tests Pivot +
+
+
+
\ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot.sql new file mode 100644 index 000000000..197c07be4 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot.sql @@ -0,0 +1,38 @@ +/* Valid Service types: + Biochemistry + Culture + Hematology + Histology + Misc Tests + Parasitology + Surveillance + Unknown + Urinalysis + */ +SELECT obr.ANIMAL_ID as id, + obr.OBSERVATION_DATE_TM as date, + obr.MESSAGE_ID, + COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME) as PROCEDURE_NAME, + obr.PROCEDURE_ID, + nte.COMMENT, + COALESCE (lp.TestName, obx.TEST_NAME) as TestName, + --obx.TEST_ID, + MAX(obx.ABNORMAL_FLAGS) AS ABNORMAL_FLAGS, + MAX(obx.QUALITATIVE_RESULT) as QUALITATIVE_RESULT, + MAX(obx.RESULT) as RESULT + +FROM snprc_ehr.HL7_OBR obr + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx +ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId +WHERE obr.PROCEDURE_ID.Dataset = 'Misc Tests' + +GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME), obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) + PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TestName +-- +-- IN +-- ( +-- select TestName from snprc_ehr.labwork_panels t +-- where t.includeInPanel = true AND t.ServiceId.Dataset='Misc Tests' +-- ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot/.qview.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot/.qview.xml new file mode 100644 index 000000000..b18074c28 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot/.qview.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot.query.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot.query.xml new file mode 100644 index 000000000..c65b2bb0c --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot.query.xml @@ -0,0 +1,9 @@ + + + + + Parasitology Pivot +
+
+
+
\ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot.sql new file mode 100644 index 000000000..7228c9af7 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot.sql @@ -0,0 +1,38 @@ +/* Valid Service types: + Biochemistry + Culture + Hematology + Histology + Misc Tests + Parasitology + Surveillance + Unknown + Urinalysis + */ +SELECT obr.ANIMAL_ID as id, + obr.OBSERVATION_DATE_TM as date, + obr.MESSAGE_ID, + COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME) as PROCEDURE_NAME, + obr.PROCEDURE_ID, + nte.COMMENT, + COALESCE (lp.TestName, obx.TEST_NAME) as TestName, + --obx.TEST_ID, + MAX(obx.ABNORMAL_FLAGS) AS ABNORMAL_FLAGS, + MAX(obx.QUALITATIVE_RESULT) as QUALITATIVE_RESULT, + MAX(obx.RESULT) as RESULT + +FROM snprc_ehr.HL7_OBR obr + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx +ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId +WHERE obr.PROCEDURE_ID.Dataset = 'Parasitology' + +GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME), obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) + PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TestName +-- +-- IN +-- ( +-- select TestName from snprc_ehr.labwork_panels t +-- where t.includeInPanel = true AND t.ServiceId.Dataset='Parasitology' +-- ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot/.qview.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot/.qview.xml new file mode 100644 index 000000000..b18074c28 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot/.qview.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot.query.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot.query.xml new file mode 100644 index 000000000..cfeec42e8 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot.query.xml @@ -0,0 +1,9 @@ + + + + + Surveillance Pivot +
+
+
+
\ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot.sql new file mode 100644 index 000000000..d64d8b19d --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot.sql @@ -0,0 +1,32 @@ +/* Valid Service types: + Biochemistry + Culture + Hematology + Histology + Misc Tests + Parasitology + Surveillance + Unknown + Urinalysis + */ + select Id, + date, + MESSAGE_ID, + PROCEDURE_NAME, + PROCEDURE_ID, + COMMENT, + TestName, + MAX(ABNORMAL_FLAGS) as ABNORMAL_FLAGS, + MAX(QUALITATIVE_RESULT) as QUALITATIVE_RESULT, + MAX(RESULT) as RESULT +from snprc_ehr.HL7SurveillancePivotInner + +GROUP BY id, date, MESSAGE_ID, PROCEDURE_NAME, PROCEDURE_NAME, PROCEDURE_ID, COMMENT, TestName + PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TestName +-- +-- IN +-- ( +-- select TestName from snprc_ehr.labwork_panels t +-- where t.includeInPanel = true AND t.ServiceId.Dataset='Surveillance' +-- ) + diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot/.qview.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot/.qview.xml new file mode 100644 index 000000000..b18074c28 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot/.qview.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivotInner.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivotInner.sql new file mode 100644 index 000000000..80b736bc1 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivotInner.sql @@ -0,0 +1,60 @@ +/* Valid Service types: + Biochemistry + Culture + Hematology + Histology + Misc Tests + Parasitology + Surveillance + Unknown + Urinalysis + */ + SELECT + obr.ANIMAL_ID AS Id, + obr.OBSERVATION_DATE_TM as date, + obr.MESSAGE_ID, + COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME) as PROCEDURE_NAME, + obr.PROCEDURE_ID, + COALESCE (lp.TestName, obx.TEST_NAME) as TestName, + nte.COMMENT, + obx.ABNORMAL_FLAGS, + obx.QUALITATIVE_RESULT, + obx.RESULT + + FROM snprc_ehr.HL7_OBR obr + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId + WHERE obr.PROCEDURE_ID.Dataset = 'Surveillance' + + UNION + + SELECT + b.id, + b.date, + coalesce(b.runId, cast(b.Sequencenum as varchar)) as MESSAGE_ID, + b.serviceTestId.serviceId.ServiceName AS PROCEDURE_NAME, + b.serviceTestId.serviceId AS PROCEDURE_ID, + b.serviceTestId.testName AS TestName, + b.remark as COMMENT, + '' AS ABNORMAL_FLAGS, + b.qualresult as QUALITATIVE_RESULT, + b.RESULT as RESULT + FROM study.labworkTaqman b + WHERE b.serviceTestId.includeInPanel = true and b.qcstate.publicdata = true and b.serviceTestid.ServiceId.Dataset = 'Surveillance' + + union + + SELECT + b.id, + b.date, + coalesce(b.runId, b.objectid) as MESSAGE_ID, + b.serviceTestId.serviceId.ServiceName AS PROCEDURE_NAME, + b.serviceTestId.serviceId AS PROCEDURE_ID, + b.serviceTestId.testName AS TestName, + b.remark as COMMENT, + '' AS ABNORMAL_FLAGS, + b.qualresult as QUALITATIVE_RESULT, + b.RESULT as RESULT + FROM study.assay_labworkResults b + WHERE b.serviceTestId.includeInPanel = true and b.qcstate.publicdata = true and b.serviceTestid.ServiceId.Dataset = 'Surveillance' \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot.query.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot.query.xml new file mode 100644 index 000000000..3d532dcfd --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot.query.xml @@ -0,0 +1,9 @@ + + + + + Unknown Panel Category Pivot +
+
+
+
\ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot.sql new file mode 100644 index 000000000..3961a8649 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot.sql @@ -0,0 +1,38 @@ +/* Valid Service types: + Biochemistry + Culture + Hematology + Histology + Misc Tests + Parasitology + Surveillance + Unknown + Urinalysis + */ +SELECT obr.ANIMAL_ID as id, + obr.OBSERVATION_DATE_TM as date, + obr.MESSAGE_ID, + COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME) as PROCEDURE_NAME, + obr.PROCEDURE_ID, + nte.COMMENT, + COALESCE (lp.TestName, obx.TEST_NAME) as TestName, + --obx.TEST_ID, + MAX(obx.ABNORMAL_FLAGS) AS ABNORMAL_FLAGS, + MAX(obx.QUALITATIVE_RESULT) as QUALITATIVE_RESULT, + MAX(obx.RESULT) as RESULT + +FROM snprc_ehr.HL7_OBR obr + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx +ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId +WHERE obr.PROCEDURE_ID.Dataset = 'Unknown' + +GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME), obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) + PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TestName +-- +-- IN +-- ( +-- select TestName from snprc_ehr.labwork_panels t +-- where t.includeInPanel = true AND t.ServiceId.Dataset='Unknown' +-- ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot/.qview.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot/.qview.xml new file mode 100644 index 000000000..b18074c28 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot/.qview.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7Urinalysis.query.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7Urinalysis.query.xml new file mode 100644 index 000000000..5e01645b2 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7Urinalysis.query.xml @@ -0,0 +1,9 @@ + + + + + Urinalysis Pivot +
+
+
+
\ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7UrinalysisPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7UrinalysisPivot.sql new file mode 100644 index 000000000..e4b0f709d --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7UrinalysisPivot.sql @@ -0,0 +1,38 @@ +/* Valid Service types: + Biochemistry + Culture + Hematology + Histology + Misc Tests + Parasitology + Surveillance + Unknown + Urinalysis + */ +SELECT obr.ANIMAL_ID as id, + obr.OBSERVATION_DATE_TM as date, + obr.MESSAGE_ID, + COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME) as PROCEDURE_NAME, + obr.PROCEDURE_ID, + nte.COMMENT, + COALESCE (lp.TestName, obx.TEST_NAME) as TestName, + --obx.TEST_ID, + MAX(obx.ABNORMAL_FLAGS) AS ABNORMAL_FLAGS, + MAX(obx.QUALITATIVE_RESULT) as QUALITATIVE_RESULT, + MAX(obx.RESULT) as RESULT + +FROM snprc_ehr.HL7_OBR obr + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx +ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId +WHERE obr.PROCEDURE_ID.Dataset = 'Urinalysis' + +GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME), obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) + PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TestName +-- +-- IN +-- ( +-- select TestName from snprc_ehr.labwork_panels t +-- where t.includeInPanel = true AND t.ServiceId.Dataset='Urinalysis' +-- ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7UrinalysisPivot/.qview.xml b/snprc_ehr/resources/queries/snprc_ehr/HL7UrinalysisPivot/.qview.xml new file mode 100644 index 000000000..b18074c28 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7UrinalysisPivot/.qview.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7_OBX.js b/snprc_ehr/resources/queries/snprc_ehr/HL7_OBX.js new file mode 100644 index 000000000..4afea6b77 --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7_OBX.js @@ -0,0 +1,66 @@ +/** + * Created by thawkins on 7/12/2022 + */ + +require("ehr/triggers").initScript(this); + +var cachedIds = {}; +var cacheKey = ''; + +// the missing value codes will link the record up to an unknown service (needed for ancient legacy data) +var missingServiceId = 999999; +var missingTestId = 999999; + +function onUpsert(helper, scriptErrors, row, oldRow) { + // If we don't have the serviceTestId try resolving it based on the testId and serviceId + if (!row.serviceTestId) { + cacheKey = row.serviceId + '~' + row.testId; + row.serviceTestId = cachedIds[cacheKey]; + if (row.serviceTestId === undefined || row.serviceTestId == 'undefined') { + if (!assignServiceTestId(row, row.serviceId, row.testId)) { + // point the serviceTestId to a missing value type if the serviceId/testId is missing + // in the snprc_ehr.labkey_panels table + assignServiceTestId(row, missingServiceId, missingTestId); + } + } + else + { + // console.log("Cache hit: " + cachedIds[cacheKey]); + } + + } +} + +function assignServiceTestId (row, serviceId, testId ) { + + var result = true; + + LABKEY.Query.selectRows({ + schemaName: 'snprc_ehr', + queryName: 'labwork_panels', + columns: 'objectId', + scope: this, + filterArray: [ + LABKEY.Filter.create('ServiceId', serviceId, LABKEY.Filter.Types.EQUAL), + LABKEY.Filter.create('TestId', testId, LABKEY.Filter.Types.EQUAL) + ], + success: function (data) { + if (data.rows && data.rows.length) { + row.serviceTestId = data.rows[0].objectId; + cachedIds[cacheKey] = row.serviceTestId; + //console.log('caching ' + cacheKey + ': ' + row.serviceTestId); + + } + else { + result = false; + } + + }, + failure: function (error) { + console.log('Select rows error'); + console.log(error); + } + + }); + return result; +} \ No newline at end of file diff --git a/snprc_ehr/resources/queries/study/assay_labworkResults.js b/snprc_ehr/resources/queries/study/assay_labworkResults.js index 5d0fbc618..098dc1801 100644 --- a/snprc_ehr/resources/queries/study/assay_labworkResults.js +++ b/snprc_ehr/resources/queries/study/assay_labworkResults.js @@ -44,7 +44,7 @@ function assignServiceTestId (row, serviceId, testid ) { LABKEY.Query.selectRows({ schemaName: 'snprc_ehr', queryName: 'labwork_panels', - columns: 'RowId', + columns: 'ObjectId', scope: this, filterArray: [ LABKEY.Filter.create('ServiceId', serviceId, LABKEY.Filter.Types.EQUAL), @@ -52,7 +52,7 @@ function assignServiceTestId (row, serviceId, testid ) { ], success: function (data) { if (data.rows && data.rows.length) { - row.serviceTestId = data.rows[0].RowId; + row.serviceTestId = data.rows[0].ObjectId; cachedIds[cacheKey] = row.serviceTestId; //console.log('caching ' + cacheKey + ': ' + row.serviceTestId); diff --git a/snprc_ehr/resources/queries/study/assay_labworkResults.query.xml b/snprc_ehr/resources/queries/study/assay_labworkResults.query.xml index c72c0d009..eb14702d8 100644 --- a/snprc_ehr/resources/queries/study/assay_labworkResults.query.xml +++ b/snprc_ehr/resources/queries/study/assay_labworkResults.query.xml @@ -24,7 +24,7 @@ snprc_ehr labwork_panels - RowId + ObjectId TestName
diff --git a/snprc_ehr/resources/queries/study/hematologyPivot.query.xml b/snprc_ehr/resources/queries/study/hematologyPivot.query.xml index 1c97f72c2..cfd716a2f 100644 --- a/snprc_ehr/resources/queries/study/hematologyPivot.query.xml +++ b/snprc_ehr/resources/queries/study/hematologyPivot.query.xml @@ -8,6 +8,10 @@ Hematology Panel Name 200
+ + Remarks + 200 + true diff --git a/snprc_ehr/resources/queries/study/hematologyPivotInner.sql b/snprc_ehr/resources/queries/study/hematologyPivotInner.sql index 65c46c5ca..5dd2e2264 100644 --- a/snprc_ehr/resources/queries/study/hematologyPivotInner.sql +++ b/snprc_ehr/resources/queries/study/hematologyPivotInner.sql @@ -25,5 +25,5 @@ SELECT WHEN b.result IS NULL THEN b.qualresult ELSE CAST(CAST(b.result AS float) AS VARCHAR) END as result - FROM study.labworkResults b - WHERE b.serviceTestId.includeInPanel = true and b.qcstate.publicdata = true and b.serviceTestid.ServiceId.Dataset = 'Hematology' \ No newline at end of file + FROM study.labworkResultsAll b + WHERE b.serviceTestId.includeInPanel = true and b.serviceTestid.ServiceId.Dataset = 'Hematology' \ No newline at end of file diff --git a/snprc_ehr/resources/queries/study/labworkResultsAll.query.xml b/snprc_ehr/resources/queries/study/labworkResultsAll.query.xml index d8f197694..b754987e5 100644 --- a/snprc_ehr/resources/queries/study/labworkResultsAll.query.xml +++ b/snprc_ehr/resources/queries/study/labworkResultsAll.query.xml @@ -21,11 +21,11 @@ true
- Test Name + Service Test ID snprc_ehr labwork_panels - RowId + objectId TestName @@ -50,7 +50,7 @@ Units 60
- + Ref Range true false diff --git a/snprc_ehr/resources/queries/study/labworkResultsAll.sql b/snprc_ehr/resources/queries/study/labworkResultsAll.sql index 69bf5313e..478510b3a 100644 --- a/snprc_ehr/resources/queries/study/labworkResultsAll.sql +++ b/snprc_ehr/resources/queries/study/labworkResultsAll.sql @@ -17,76 +17,106 @@ superceding original labworkResults table in all uses. Author: Charles Peterson, 10/29/2018 + 7/13/2022 Refactored to use HL7 tables from Orchard */ +-- TODO: remove study.labworkResults from query after data is merged into HL7_MSH, HL7_OBR, and HL7_OBX -select - Id, - date, - project, - serviceId, - serviceTestId, - testid, - resultOORIndicator, - value_type, - result, - units, - qualresult, - refRange, - abnormal_flags, - runid, - enddate, - method, - remark, - history, - lsid -from study.labworkResults +SELECT + lr.Id, + lr.date, + lr.project, + lr.serviceId, + lp.objectID AS serviceTestId, + lr.testid, + lr.resultOORIndicator, + lr.value_type, + lr.result, + lr.units, + lr.qualresult, + lr.refRange, + lr.abnormal_flags, + lr.runid, + lr.enddate, + lr.method, + lr.remark, + lr.objectId +FROM study.labworkResults lr +LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp ON lr.testId = lp.TestId AND lr.serviceId = lp.ServiceId union -select - Id, - date, - project, - serviceId, - serviceTestId, - testid, - resultOORIndicator, - value_type, - result, - units, - qualresult, - refRange, - abnormal_flags, - runid, - enddate, - method, - remark, - history, - lsid -from study.assay_labworkResults +SELECT + obr.ANIMAL_ID AS Id, + obr.OBSERVATION_DATE_TM as date, + obr.CHARGE_ID as project, + obr.PROCEDURE_ID as serviceId, + obx.serviceTestId as serviceTestId, + obx.TEST_ID as testId, + NULL as resultOORIndicator, + obx.VALUE_TYPE as VALUE_TYPE, + CAST(obx.RESULT as DOUBLE) as RESULT, + obx.UNITS as units, + obx.QUALITATIVE_RESULT as qualresult, + obx.REFERENCE_RANGE as refRange, + obx.ABNORMAL_FLAGS as abnormal_flags, + obx.MESSAGE_ID as runId, + NULL as enddate, + NULL as method, + nte.COMMENT as remark, + obx.OBJECT_ID AS objectId +FROM snprc_ehr.HL7_OBR obr + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN + ( + select nte.OBR_OBJECT_ID, nte.OBR_SET_ID, GROUP_CONCAT(nte.COMMENT) as COMMENT + from snprc_ehr.HL7_NTE nte + group by nte.OBR_OBJECT_ID, nte.OBR_SET_ID + ) AS nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId + +UNION +select + alr.Id, + alr.date, + alr.project, + alr.serviceId, + alr.serviceTestId, + alr.testid, + alr.resultOORIndicator, + alr.value_type, + alr.result, + alr.units, + alr.qualresult, + alr.refRange, + alr.abnormal_flags, + alr.runid, + alr.enddate, + alr.method, + alr.remark, + alr.objectId +from study.assay_labworkResults as alr union select - Id, - date, - project, - serviceId, - serviceTestId, - testid, - resultOORIndicator, - value_type, - result, - units, - qualresult, - refRange, - abnormal_flags, - runid, - enddate, - method, - remark, - history, - lsid -from study.labworkTaqman + lt.Id, + lt.date, + lt.project, + lt.serviceId, + lt.serviceTestId, + lt.testid, + lt.resultOORIndicator, + lt.value_type, + lt.result, + lt.units, + lt.qualresult, + lt.refRange, + lt.abnormal_flags, + lt.runid, + lt.enddate, + lt.method, + lt.remark, + null as objectId +from study.labworkTaqman as lt diff --git a/snprc_ehr/resources/queries/study/labworkTaqman.query.xml b/snprc_ehr/resources/queries/study/labworkTaqman.query.xml index a49ceea64..37e18394a 100644 --- a/snprc_ehr/resources/queries/study/labworkTaqman.query.xml +++ b/snprc_ehr/resources/queries/study/labworkTaqman.query.xml @@ -25,7 +25,7 @@ snprc_ehr labwork_panels - RowId + objectId TestName diff --git a/snprc_ehr/resources/queries/study/labworkTaqman.sql b/snprc_ehr/resources/queries/study/labworkTaqman.sql index b69b5d1c8..f42838437 100644 --- a/snprc_ehr/resources/queries/study/labworkTaqman.sql +++ b/snprc_ehr/resources/queries/study/labworkTaqman.sql @@ -3,7 +3,7 @@ SELECT tr.date, 0 AS project, lp.ServiceId, - lp.RowId AS serviceTestId, + lp.ObjectId AS serviceTestId, lp.TestId, NULL AS resultOORIndicator, 'TX' AS value_type, @@ -31,7 +31,7 @@ SELECT tr.date, 0 AS project, lp.ServiceId, - lp.RowId AS serviceTestId, + lp.ObjectId AS serviceTestId, lp.TestId, NULL AS resultOORIndicator, 'TX' AS value_type, diff --git a/snprc_ehr/resources/referenceStudy/study/datasets/datasets_metadata.xml b/snprc_ehr/resources/referenceStudy/study/datasets/datasets_metadata.xml index 574d912bd..abdab04a3 100644 --- a/snprc_ehr/resources/referenceStudy/study/datasets/datasets_metadata.xml +++ b/snprc_ehr/resources/referenceStudy/study/datasets/datasets_metadata.xml @@ -2479,12 +2479,12 @@ true - integer + entityid snprc_ehr labwork_panels - RowId - TestName + ObjectId + TestId diff --git a/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-21.001-22.000.sql b/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-21.001-22.000.sql new file mode 100644 index 000000000..6a857fde9 --- /dev/null +++ b/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-21.001-22.000.sql @@ -0,0 +1,360 @@ +/******************************************************* +New staging tables for Orchard clinical path data integration via HL7 +05/19/22 - Terry Hawkins +*/ + +/* + Drop tables if they already exist +*/ + +EXEC core.fn_dropifexists @objname = 'HL7_IMPORT_LOG',@objschema = 'snprc_ehr', @objtype = 'TABLE'; +EXEC core.fn_dropifexists @objname = 'HL7_OBX_Staging',@objschema = 'snprc_ehr', @objtype = 'TABLE'; +EXEC core.fn_dropifexists @objname = 'HL7_NTE_Staging',@objschema = 'snprc_ehr', @objtype = 'TABLE'; +EXEC core.fn_dropifexists @objname = 'HL7_OBR_Staging',@objschema = 'snprc_ehr', @objtype = 'TABLE'; +EXEC core.fn_dropifexists @objname = 'HL7_PID_Staging',@objschema = 'snprc_ehr', @objtype = 'TABLE'; +EXEC core.fn_dropifexists @objname = 'HL7_PV1_Staging',@objschema = 'snprc_ehr', @objtype = 'TABLE'; +EXEC core.fn_dropifexists @objname = 'HL7_ORC_Staging',@objschema = 'snprc_ehr', @objtype = 'TABLE'; +EXEC core.fn_dropifexists @objname = 'HL7_MSH_Staging',@objschema = 'snprc_ehr', @objtype = 'TABLE'; + +CREATE TABLE [snprc_ehr].[HL7_MSH_Staging]( + [MESSAGE_ID] [VARCHAR](50) NOT NULL, + [IDX] [INT] NOT NULL, + [SENDING_APPLICATION] [VARCHAR](50) NULL, + [SENDING_FACILITY] [VARCHAR](50) NULL, + [RECEIVING_APPLICATION] [VARCHAR](50) NULL, + [RECEIVING_FACILITY] [VARCHAR](50) NULL, + [MESSAGE_CONTROL_ID] [VARCHAR](50) NULL, + [MESSAGE_DATE_TM] [DATETIME] NULL, + [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, + [USER_NAME] [VARCHAR](128) NOT NULL, + [ENTRY_DATE_TM] [DATETIME] NOT NULL, + [TIMESTAMP] [TIMESTAMP] NULL, + CONSTRAINT [PK_HL7_MSH_Staging] PRIMARY KEY CLUSTERED +( + [MESSAGE_ID] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + ) + GO + +ALTER TABLE [snprc_ehr].[HL7_MSH_Staging] ADD CONSTRAINT [DF_HL7_MSH_Staging_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] + GO + +ALTER TABLE [snprc_ehr].[HL7_MSH_Staging] ADD CONSTRAINT [DF_HL7_MSH_Staging_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] + GO + +ALTER TABLE [snprc_ehr].[HL7_MSH_Staging] ADD CONSTRAINT [DF_HL7_MSH_Staging_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] + GO + +CREATE TABLE [snprc_ehr].[HL7_PID_Staging]( + [MESSAGE_ID] [VARCHAR](50) NOT NULL, + [IDX] [INT] NOT NULL, + [SET_ID] [VARCHAR](20) NULL, -- F1_C1 + [PATIENT_ID_EXTERNAL] [VARCHAR](20) NULL, -- F2_C1 + [PATIENT_ID_INTERNAL] [VARCHAR](20) NULL, -- F3_C1 + [BIRTHDATE] [DATETIME] NULL, --F7_C1 + [SEX] [VARCHAR] (20) NULL, -- F8_C1 + [BREED] [VARCHAR] (50) NULL, -- arc_species_code - F10_C1 (Race) + [SPECIES] [VARCHAR] (50) NULL, -- common name - F22_C1 (Ethnic Group) + [ACCOUNT_NUMBER] [VARCHAR] (50) NULL, --F18_C1 + [DEATH_DATE] [VARCHAR] (50) NULL, -- F29_C1 + [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, + [USER_NAME] [VARCHAR](128) NOT NULL, + [ENTRY_DATE_TM] [DATETIME] NOT NULL, + [TIMESTAMP] [TIMESTAMP] NULL, + CONSTRAINT [PK_HL7_PID_Staging] PRIMARY KEY CLUSTERED +( +[MESSAGE_ID] ASC, +[IDX] +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + ) + GO + +ALTER TABLE [snprc_ehr].[HL7_PID_Staging] ADD CONSTRAINT [DF_HL7_PID_Staging_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] + GO + +ALTER TABLE [snprc_ehr].[HL7_PID_Staging] ADD CONSTRAINT [DF_HL7_PID_Staging_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] + GO + +ALTER TABLE [snprc_ehr].[HL7_PID_Staging] ADD CONSTRAINT [DF_HL7_PID_Staging_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] + GO + +ALTER TABLE [snprc_ehr].[HL7_PID_Staging] WITH CHECK ADD CONSTRAINT [FK_PID_REF_MSH] FOREIGN KEY([MESSAGE_ID]) + REFERENCES [snprc_ehr].[HL7_MSH_Staging] ([MESSAGE_ID]) + GO + +CREATE NONCLUSTERED INDEX [IDX_HL7_PID_ID] ON [snprc_ehr].[HL7_PID_Staging] +( + [PATIENT_ID_EXTERNAL] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +GO + + +ALTER TABLE [snprc_ehr].[HL7_PID_Staging] CHECK CONSTRAINT [FK_PID_REF_MSH] + GO + +CREATE TABLE [snprc_ehr].[HL7_PV1_Staging]( + [MESSAGE_ID] [VARCHAR](50) NOT NULL, + [IDX] [INT] NOT NULL, + [SET_ID] [VARCHAR](20) NULL, -- F1_C1 + [ADMISSION_TYPE] [VARCHAR] (20) NULL, --F4_C1 + [ATTENDING_DOCTOR_LAST] [VARCHAR] (50) NULL, -- F7_C2 + [ATTENDING_DOCTOR_FIRST] [VARCHAR] (50) NULL, -- F7_C3 + [VISIT_NUMBER] [VARCHAR] (20) NULL, -- F19_C1 + [CHARGE_NUMBER] [VARCHAR] (20) NULL, -- F22_C1 (Courtesy Code) + [ADMIT_DATE] [DATETIME] NULL, --F44_C1 + [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, + [USER_NAME] [VARCHAR](128) NOT NULL, + [ENTRY_DATE_TM] [DATETIME] NOT NULL, + [TIMESTAMP] [TIMESTAMP] NULL, + CONSTRAINT [PK_HL7_PV1_Staging] PRIMARY KEY CLUSTERED +( + [MESSAGE_ID] ASC, +[IDX] +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + ) + GO + +ALTER TABLE [snprc_ehr].[HL7_PV1_Staging] ADD CONSTRAINT [DF_HL7_PV1_Staging_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] + GO + +ALTER TABLE [snprc_ehr].[HL7_PV1_Staging] ADD CONSTRAINT [DF_HL7_PV1_Staging_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] + GO + +ALTER TABLE [snprc_ehr].[HL7_PV1_Staging] ADD CONSTRAINT [DF_HL7_PV1_Staging_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] + GO + +ALTER TABLE [snprc_ehr].[HL7_PV1_Staging] WITH CHECK ADD CONSTRAINT [FK_PV1_REF_MSH] FOREIGN KEY([MESSAGE_ID]) + REFERENCES [snprc_ehr].[HL7_MSH_Staging] ([MESSAGE_ID]) + GO + +ALTER TABLE [snprc_ehr].[HL7_PV1_Staging] CHECK CONSTRAINT [FK_PV1_REF_MSH] + GO + +CREATE TABLE [snprc_ehr].[HL7_ORC_Staging]( + [MESSAGE_ID] [VARCHAR](50) NOT NULL, + [IDX] [INT] NOT NULL, + [ORDER_CONTROL_CODE] [VARCHAR](20) NULL, -- F1_C1 + [FILLER_ORDER_NUMBER] [VARCHAR] (22) NULL, --F3_C1 + [ENTERED_BY_LAST] [VARCHAR] (50) NULL, -- F10_C2 + [ENTERED_BY_FIRST] [VARCHAR] (50) NULL, -- F10_C3 + [VERIFIED_BY_LAST] [VARCHAR] (50) NULL, -- F11_C2 + [VERIFIED_BY_FIRST] [VARCHAR] (50) NULL, -- F11_C3 + [ORDER_PROVIDER_LAST] [VARCHAR] (50) NULL, -- F12_C2 + [ORDER_PROVIDER_FIRST] [VARCHAR] (50) NULL, -- F12_C3 + [ORDER_DATE] [DATETIME] NULL, -- F15_C1 + [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, + [USER_NAME] [VARCHAR](128) NOT NULL, + [ENTRY_DATE_TM] [DATETIME] NOT NULL, + [TIMESTAMP] [TIMESTAMP] NULL, + CONSTRAINT [PK_HL7_ORC_Staging] PRIMARY KEY CLUSTERED +( + [MESSAGE_ID] ASC, +[IDX] +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + ) + GO + +ALTER TABLE [snprc_ehr].[HL7_ORC_Staging] ADD CONSTRAINT [DF_HL7_ORC_Staging_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] + GO + +ALTER TABLE [snprc_ehr].[HL7_ORC_Staging] ADD CONSTRAINT [DF_HL7_ORC_Staging_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] + GO + +ALTER TABLE [snprc_ehr].[HL7_ORC_Staging] ADD CONSTRAINT [DF_HL7_ORC_Staging_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] + GO + +ALTER TABLE [snprc_ehr].[HL7_ORC_Staging] WITH CHECK ADD CONSTRAINT [FK_ORC_REF_MSH] FOREIGN KEY([MESSAGE_ID]) + REFERENCES [snprc_ehr].[HL7_MSH_Staging] ([MESSAGE_ID]) + GO + +ALTER TABLE [snprc_ehr].[HL7_ORC_Staging] CHECK CONSTRAINT [FK_ORC_REF_MSH] + GO + + +CREATE TABLE [snprc_ehr].[HL7_OBR_Staging]( + [MESSAGE_ID] [VARCHAR](50) NOT NULL, + [MESSAGE_CONTROL_ID] [VARCHAR](50) NOT NULL, + [IDX] [INT] NOT NULL, + [ANIMAL_ID] [VARCHAR](6) NOT NULL, + [VERIFIED_DATE_TM] [DATETIME] NULL, + [REQUESTED_DATE_TM] [DATETIME] NULL, + [OBSERVATION_DATE_TM] [DATETIME] NULL, + [SPECIMEN_RECEIVED_DATE_TM] [DATETIME] NULL, + [PV1_VISIT_NUM] [VARCHAR](50) NULL, + [SET_ID] [VARCHAR](20) NOT NULL, + [SPECIMEN_NUM] [VARCHAR](50) NULL, + [PROCEDURE_ID] [VARCHAR](20) NULL, + [PROCEDURE_NAME] [VARCHAR](20) NULL, + [PRIORITY] [VARCHAR](10) NULL, + [RESULT_STATUS] [VARCHAR](10) NULL, + [TECHNICIAN_NAME] [VARCHAR](MAX) NULL, + [TECHNICIAN_INITIALS] [VARCHAR](50) NULL, + [CHARGE_ID] [INT] NULL, + [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, + [USER_NAME] [VARCHAR](128) NOT NULL, + [ENTRY_DATE_TM] [DATETIME] NOT NULL, + [TIMESTAMP] [TIMESTAMP] NULL, + CONSTRAINT [PK_HL7_OBR_Staging] PRIMARY KEY CLUSTERED +( +[OBJECT_ID] +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +) +GO + +ALTER TABLE [snprc_ehr].[HL7_OBR_Staging] ADD CONSTRAINT [DF_HL7_OBR_Staging_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] + GO + +ALTER TABLE [snprc_ehr].[HL7_OBR_Staging] ADD CONSTRAINT [DF_HL7_OBR_Staging_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] + GO + +ALTER TABLE [snprc_ehr].[HL7_OBR_Staging] ADD CONSTRAINT [DF_HL7_OBR_Staging_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] + GO + +ALTER TABLE [snprc_ehr].[HL7_OBR_Staging] WITH CHECK ADD CONSTRAINT [CKC_ENTRY_DATE_TM_HL7_OBR_Staging_OBR] CHECK (([ENTRY_DATE_TM]<=GETDATE())) + GO + +ALTER TABLE [snprc_ehr].[HL7_OBR_Staging] CHECK CONSTRAINT [CKC_ENTRY_DATE_TM_HL7_OBR_Staging_OBR] + GO + +ALTER TABLE [snprc_ehr].[HL7_OBR_Staging] WITH CHECK ADD CONSTRAINT [FK_OBR_REF_MSH] FOREIGN KEY([MESSAGE_ID]) + REFERENCES [snprc_ehr].[HL7_MSH_Staging] ([MESSAGE_ID]) + GO + +ALTER TABLE [snprc_ehr].[HL7_OBR_Staging] CHECK CONSTRAINT [FK_OBR_REF_MSH] + GO + +CREATE NONCLUSTERED INDEX [IDX_HL7_OBR_ID_DATE] ON [snprc_ehr].[HL7_OBR_Staging] +( + [ANIMAL_ID] ASC, + [OBSERVATION_DATE_TM] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +GO + +CREATE TABLE [snprc_ehr].[HL7_OBX_Staging]( + [MESSAGE_ID] [VARCHAR](50) NOT NULL, + [IDX] [INT] NOT NULL, + [OBR_OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, + [SET_ID] [VARCHAR](20) NOT NULL, + [OBR_SET_ID] [VARCHAR](20) NOT NULL, + [VALUE_TYPE] [VARCHAR](10) NULL, + [TEST_ID] [VARCHAR](20) NULL, + [TEST_NAME] [VARCHAR](30) NULL, + [OBSERVED_VALUE] [VARCHAR](MAX) NULL, + [UNITS] [VARCHAR](20) NULL, + [REFERENCE_RANGE] [VARCHAR](60) NULL, + [ABNORMAL_FLAGS] [VARCHAR](10) NULL, + [RESULT_STATUS] [VARCHAR](10) NULL, + [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, + [USER_NAME] [VARCHAR](128) NOT NULL, + [ENTRY_DATE_TM] [DATETIME] NOT NULL, + [TIMESTAMP] [TIMESTAMP] NULL, + CONSTRAINT [PK_HL7_OBX_Staging] PRIMARY KEY CLUSTERED +( + [OBJECT_ID] +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +) +GO + +ALTER TABLE [snprc_ehr].[HL7_OBX_Staging] ADD CONSTRAINT [DF_HL7_OBX_Staging_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] + GO + +ALTER TABLE [snprc_ehr].[HL7_OBX_Staging] ADD CONSTRAINT [DF_HL7_OBX_Staging_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] + GO + +ALTER TABLE [snprc_ehr].[HL7_OBX_Staging] ADD CONSTRAINT [DF_HL7_OBX_Staging_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] + GO + +ALTER TABLE [snprc_ehr].[HL7_OBX_Staging] WITH CHECK ADD CONSTRAINT [FK_OBX_REF_OBR] FOREIGN KEY([OBR_OBJECT_ID]) + REFERENCES [snprc_ehr].[HL7_OBR_Staging] ([OBJECT_ID]) + GO + +ALTER TABLE [snprc_ehr].[HL7_OBX_Staging] CHECK CONSTRAINT [FK_OBX_REF_OBR] + GO + +CREATE NONCLUSTERED INDEX [IDX_HL7_OBX_OBR_OBJ_ID] ON [snprc_ehr].[HL7_OBX_Staging] +( + [OBR_OBJECT_ID] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +GO + + +CREATE TABLE [snprc_ehr].[HL7_NTE_Staging]( + [MESSAGE_ID] [VARCHAR](50) NOT NULL, + [IDX] [INT] NOT NULL, + [OBR_OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, + [SET_ID] [VARCHAR](20) NOT NULL, + [OBR_SET_ID] [VARCHAR](20) NOT NULL, + [COMMENT] [VARCHAR](MAX) NULL, + [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, + [USER_NAME] [VARCHAR](128) NOT NULL, + [ENTRY_DATE_TM] [DATETIME] NOT NULL, + [TIMESTAMP] [TIMESTAMP] NULL, + CONSTRAINT [PK_HL7_NTE_Staging] PRIMARY KEY CLUSTERED +( + [OBJECT_ID] ASC + +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +) +GO + +ALTER TABLE [snprc_ehr].[HL7_NTE_Staging] ADD CONSTRAINT [DF_HL7_NTE_Staging_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] + GO + +ALTER TABLE [snprc_ehr].[HL7_NTE_Staging] ADD CONSTRAINT [DF_HL7_NTE_Staging_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] + GO + +ALTER TABLE [snprc_ehr].[HL7_NTE_Staging] ADD CONSTRAINT [DF_HL7_NTE_Staging_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] + GO + +ALTER TABLE [snprc_ehr].[HL7_NTE_Staging] WITH CHECK ADD CONSTRAINT [FK_NTE_REF_OBR] FOREIGN KEY([OBR_OBJECT_ID]) + REFERENCES [snprc_ehr].[HL7_OBR_Staging] ([OBJECT_ID]) + GO + +ALTER TABLE [snprc_ehr].[HL7_NTE_Staging] CHECK CONSTRAINT [FK_NTE_REF_OBR] + GO + +CREATE NONCLUSTERED INDEX [IDX_HL7_NTE_OBR_OBJ_ID] ON [snprc_ehr].[HL7_NTE_Staging] +( + [OBR_OBJECT_ID] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +GO + +CREATE TABLE [snprc_ehr].[HL7_IMPORT_LOG]( + [TID] [NUMERIC](18, 0) IDENTITY(1,1) NOT NULL, + [MESSAGE_ID] [VARCHAR](50) NOT NULL, + [OBSERVATION_DATE_TM] [DATETIME] NULL, + [MESSAGE_CONTROL_ID] [VARCHAR](50) NULL, + [IMPORT_STATUS] [INT] NOT NULL, + [RESULT_STATUS] [VARCHAR](10) NULL, + [PATIENT_ID] [VARCHAR](20) NULL, + [SPECIES] [VARCHAR](50) NULL, + [HL7_MESSAGE_TEXT] [VARCHAR](MAX) NULL, + [IMPORT_TEXT] [VARCHAR](MAX) NULL, + [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, + [USER_NAME] [VARCHAR](128) NOT NULL, + [ENTRY_DATE_TM] [DATETIME] NOT NULL, + [TIMESTAMP] [TIMESTAMP] NULL, + CONSTRAINT [PK_HL7_IMPORT_LOG] PRIMARY KEY CLUSTERED +( +[TID] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + ) + GO + +ALTER TABLE [snprc_ehr].[HL7_IMPORT_LOG] ADD DEFAULT (USER_NAME()) FOR [USER_NAME] + GO + +ALTER TABLE [snprc_ehr].[HL7_IMPORT_LOG] ADD DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] + GO + +ALTER TABLE [snprc_ehr].[HL7_IMPORT_LOG] ADD CONSTRAINT [DF_HL7_IMPROT_LOG_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] + GO + +ALTER TABLE [snprc_ehr].[HL7_IMPORT_LOG] WITH CHECK ADD CONSTRAINT [CKC_HL7_IMPORT_LOG_OBSERVATION_DATE] CHECK (([OBSERVATION_DATE_TM] IS NULL OR [OBSERVATION_DATE_TM]<=GETDATE())) + GO + +ALTER TABLE [snprc_ehr].[HL7_IMPORT_LOG] CHECK CONSTRAINT [CKC_HL7_IMPORT_LOG_OBSERVATION_DATE] + GO + + + diff --git a/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-create.sql b/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-create.sql new file mode 100644 index 000000000..423826312 --- /dev/null +++ b/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-create.sql @@ -0,0 +1,18 @@ +CREATE VIEW [snprc_ehr].[HL7_GroupNTE] AS +SELECT + a.OBR_OBJECT_ID, + a.OBR_SET_ID, + a.Container, + STRING_AGG( a.comment, CHAR(10)) WITHIN GROUP (ORDER BY a.SET_ID ASC) AS comment +FROM + ( + SELECT COALESCE(CAST(n.comment AS VARCHAR(MAX)), '') AS comment, + n.OBR_OBJECT_ID AS OBR_OBJECT_ID, + n.OBR_SET_ID AS OBR_SET_ID, + n.set_id, + n.Container + FROM snprc_ehr.HL7_NTE n + ) as a +GROUP BY a.OBR_OBJECT_ID, a.OBR_SET_ID, a.Container + +GO \ No newline at end of file diff --git a/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-drop.sql b/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-drop.sql new file mode 100644 index 000000000..6d8faf558 --- /dev/null +++ b/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-drop.sql @@ -0,0 +1,2 @@ + +EXEC core.fn_dropifexists @objname = 'HL7_GroupNTE',@objschema = 'snprc_ehr', @objtype = 'VIEW'; \ No newline at end of file diff --git a/snprc_ehr/resources/schemas/snprc_ehr.xml b/snprc_ehr/resources/schemas/snprc_ehr.xml index 682df3ab1..47d2e81a8 100644 --- a/snprc_ehr/resources/schemas/snprc_ehr.xml +++ b/snprc_ehr/resources/schemas/snprc_ehr.xml @@ -1995,4 +1995,289 @@ External Reports + + MESSAGE_ID + DETAILED + + + + + + + + + + + + + + + + + + + + + + HL7 MSH Data +
+ + MESSAGE_ID, IDX + DETAILED + + + + + + + + snprc_ehr + HL7_MSH + MESSAGE_ID + + + + + + + + + + + + + + + + + + + HL7 PID Data +
+ + MESSAGE_ID, IDX + DETAILED + + + + + + + + snprc_ehr + HL7_MSH + MESSAGE_ID + + + + + + + + + + + + + + + + + HL7 PV1 Data +
+ + MESSAGE_ID, IDX + DETAILED + + + + + + + + snprc_ehr + HL7_MSH + MESSAGE_ID + + + + + + + + + + + + + + + + + + + HL7 ORC Data +
+ + OBJECT_ID + DETAILED + + + + + + + + snprc_ehr + HL7_MSH + MESSAGE_ID + + + + + + varchar + http://cpas.labkey.com/Study#ParticipantId + + study + animal + Id + + + + + + + + + + + Service ID + + snprc_ehr + labwork_services + ServiceId + + + + + + + + + + + + + + + HL7 OBR Data +
+ + OBJECT_ID + DETAILED + + + + + + + + snprc_ehr + HL7_MSH + MESSAGE_ID + + + + + + + + + + + serviceTestId + + snprc_ehr + labwork_panels + objectId + TestId + + + + + + + + + + + + + + + HL7 OBX Data +
+ + OBJECT_ID + DETAILED + + + + + + + + snprc_ehr + HL7_MSH + MESSAGE_ID + + + + + + + + + + + + + + HL7 NTE Data +
+ + TID + DETAILED + + + + + + + + + + + + + + + + + + + + + + HL7 IMPORT LOG +
+ + + + + + + +
diff --git a/snprc_ehr/resources/source_queries/Create_LIS_DemographicsHL7Staging.sql b/snprc_ehr/resources/source_queries/HL7/Create_LIS_DemographicsHL7Staging.sql similarity index 100% rename from snprc_ehr/resources/source_queries/Create_LIS_DemographicsHL7Staging.sql rename to snprc_ehr/resources/source_queries/HL7/Create_LIS_DemographicsHL7Staging.sql diff --git a/snprc_ehr/resources/source_queries/Create_LIS_HL7ExportErrorLog.sql b/snprc_ehr/resources/source_queries/HL7/Create_LIS_HL7ExportErrorLog.sql similarity index 100% rename from snprc_ehr/resources/source_queries/Create_LIS_HL7ExportErrorLog.sql rename to snprc_ehr/resources/source_queries/HL7/Create_LIS_HL7ExportErrorLog.sql diff --git a/snprc_ehr/resources/source_queries/Create_LIS_HL7ImportLog.sql b/snprc_ehr/resources/source_queries/HL7/Create_LIS_HL7ImportLog.sql similarity index 86% rename from snprc_ehr/resources/source_queries/Create_LIS_HL7ImportLog.sql rename to snprc_ehr/resources/source_queries/HL7/Create_LIS_HL7ImportLog.sql index 22b656a41..f60a026a5 100644 --- a/snprc_ehr/resources/source_queries/Create_LIS_HL7ImportLog.sql +++ b/snprc_ehr/resources/source_queries/HL7/Create_LIS_HL7ImportLog.sql @@ -30,8 +30,12 @@ CREATE TABLE LIS.HL7ImportLog CONSTRAINT PK_TAC_HL7ImportLog PRIMARY KEY CLUSTERED (RowId ASC) ) - GO +ALTER TABLE [LIS].HL7ImportLog ADD DEFAULT (USER_NAME()) FOR [UserName] + GO + +ALTER TABLE [LIS].HL7ImportLog ADD DEFAULT (GETDATE()) FOR [EntryDateTm] + GO -- Table permissions GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON LIS.HL7ImportLog TO z_labkey; diff --git a/snprc_ehr/resources/source_queries/Create_LIS_f_format_hl7_date.sql b/snprc_ehr/resources/source_queries/HL7/Create_LIS_f_format_hl7_date.sql similarity index 100% rename from snprc_ehr/resources/source_queries/Create_LIS_f_format_hl7_date.sql rename to snprc_ehr/resources/source_queries/HL7/Create_LIS_f_format_hl7_date.sql diff --git a/snprc_ehr/resources/source_queries/HL7/HL7_admin_permissions.sql b/snprc_ehr/resources/source_queries/HL7/HL7_admin_permissions.sql new file mode 100644 index 000000000..ca96d03d9 --- /dev/null +++ b/snprc_ehr/resources/source_queries/HL7/HL7_admin_permissions.sql @@ -0,0 +1,9 @@ +-- HL7_Admin permissions required for HL7 Schema Engine import +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_IMPORT_LOG TO HL7_Admin; +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_MSH_Staging TO HL7_Admin; +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_NTE_Staging TO HL7_Admin; +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_OBR_Staging TO HL7_Admin; +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_OBX_Staging TO HL7_Admin; +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_ORC_Staging TO HL7_Admin; +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_PID_Staging TO HL7_Admin; +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_PV1_Staging TO HL7_Admin; \ No newline at end of file diff --git a/snprc_ehr/resources/source_queries/HL7/copy Sqlmed MSH data to LK.sql b/snprc_ehr/resources/source_queries/HL7/copy Sqlmed MSH data to LK.sql new file mode 100644 index 000000000..1ee56e971 --- /dev/null +++ b/snprc_ehr/resources/source_queries/HL7/copy Sqlmed MSH data to LK.sql @@ -0,0 +1,45 @@ +-- ========================================================================================== +-- Author: Terry Hawkins +-- Create date: 7-11-2022 +-- Description: Copy MSH records from Sqlmed data to populate LabKey HL7 tables +-- Changes: +-- ========================================================================================== +INSERT INTO labkey.snprc_ehr.HL7_MSH +( + MESSAGE_ID, + IDX, + SENDING_APPLICATION, + SENDING_FACILITY, + RECEIVING_APPLICATION, + RECEIVING_FACILITY, + MESSAGE_TYPE, + TRIGGER_EVENT_ID, + MESSAGE_CONTROL_ID, + MESSAGE_DATE_TM, + OBJECT_ID, + USER_NAME, + ENTRY_DATE_TM +) +( + SELECT obr.MESSAGE_ID AS MESSAGE_ID, + 0 AS IDX, + 'Sqlmed' AS SENDING_APPLICATION, + 'TxBiomed' AS SENDING_FACILITY, + 'TAC' AS RECEIVING_APPLICATION, + 'TxBiomed' AS RECEIVING_FACILITY, + 'ORU' AS MESSAGE_TYPE, + '' AS TRIGGER_EVENT_ID, + obr.MESSAGE_CONTROL_ID AS MESSAGE_CONTROL_ID, + CAST(CAST(obr.VERIFIED_DATE_TM AS DATETIME2(0)) AS DATETIME) AS MESSAGE_DATE_TM, + obr.OBJECT_ID AS OBJECT_ID, + obr.ENTRY_DATE_TM AS ENTRY_DATE_TM, + dbo.f_map_username(obr.USER_NAME) AS USER_NAME + FROM dbo.CLINICAL_PATH_OBR AS obr + + -- select primates only from the TxBiomed colony + INNER JOIN labkey_etl.V_DEMOGRAPHICS AS d ON d.id = obr.ANIMAL_ID + LEFT OUTER JOIN dbo.TAC_COLUMNS AS tc ON tc.object_id = obr.OBJECT_ID + WHERE obr.RESULT_STATUS IN ( 'F', 'C', 'D' ) + AND obr.VERIFIED_DATE_TM IS NOT NULL + AND NOT EXISTS (SELECT 1 FROM labkey_etl.v_delete_clinPathRuns AS dcpr WHERE obr.OBJECT_ID = dcpr.objectid) +) \ No newline at end of file diff --git a/snprc_ehr/resources/source_queries/HL7/copy Sqlmed NTE data to LK.sql b/snprc_ehr/resources/source_queries/HL7/copy Sqlmed NTE data to LK.sql new file mode 100644 index 000000000..4d8e47037 --- /dev/null +++ b/snprc_ehr/resources/source_queries/HL7/copy Sqlmed NTE data to LK.sql @@ -0,0 +1,35 @@ +-- ========================================================================================== +-- Author: Terry Hawkins +-- Create date: 7-11-2022 +-- Description: copy NTE records from Sqlmed data to populate LabKey HL7 tables +-- ========================================================================================== +INSERT INTO labkey.snprc_ehr.HL7_NTE +( + MESSAGE_ID, + IDX, + OBR_OBJECT_ID, + SET_ID, + OBR_SET_ID, + COMMENT, + OBJECT_ID, + USER_NAME, + ENTRY_DATE_TM +) + +( +SELECT nte.MESSAGE_ID AS MESSAGE_ID, + 1 AS IDX, + obr.OBJECT_ID as OBR_OBJECT_ID, + nte.SET_ID AS SET_ID, + obr.SET_ID AS OBR_SET_ID, + nte.COMMENT as COMMENT, + nte.OBJECT_ID AS OBJECT_ID, + dbo.f_map_username(nte.USER_NAME) AS USER_NAME, + nte.ENTRY_DATE_TM AS ENTRY_DATE_TM +FROM dbo.CLINICAL_PATH_NTE AS nte + -- select primates only from the TxBiomed colony + INNER JOIN dbo.CLINICAL_PATH_OBR as obr on nte.MESSAGE_ID = obr.MESSAGE_ID + INNER JOIN labkey_etl.V_DEMOGRAPHICS AS d ON d.id = obr.ANIMAL_ID + LEFT OUTER JOIN dbo.TAC_COLUMNS AS tc ON tc.object_id = nte.OBJECT_ID +WHERE obr.VERIFIED_DATE_TM IS NOT NULL +) diff --git a/snprc_ehr/resources/source_queries/HL7/copy Sqlmed OBR data to LK.sql b/snprc_ehr/resources/source_queries/HL7/copy Sqlmed OBR data to LK.sql new file mode 100644 index 000000000..fc9c793e4 --- /dev/null +++ b/snprc_ehr/resources/source_queries/HL7/copy Sqlmed OBR data to LK.sql @@ -0,0 +1,64 @@ + +-- ========================================================================================== +-- Author: Terry Hawkins +-- Create date: 7-11-2022 +-- Description: copies OBR records from Sqlmed data to populate LabKey HL7 tables +-- ========================================================================================== +INSERT INTO labkey.snprc_ehr.HL7_OBR +( + MESSAGE_ID, + MESSAGE_CONTROL_ID, + IDX, + ANIMAL_ID, + VERIFIED_DATE_TM, + REQUESTED_DATE_TM, + OBSERVATION_DATE_TM, + SPECIMEN_RECEIVED_DATE_TM, + PV1_VISIT_NUM, + SET_ID, + SPECIMEN_NUM, + PROCEDURE_ID, + PROCEDURE_NAME, + PRIORITY, + RESULT_STATUS, + TECHNICIAN_FIRST_NAME, + TECHNICIAN_LAST_NAME, + CHARGE_ID, + OBJECT_ID, + USER_NAME, + ENTRY_DATE_TM +) + +( +SELECT obr.MESSAGE_ID AS MESSAGE_ID, + COALESCE (obr.MESSAGE_CONTROL_ID, '0') AS MESSAGE_CONTROL_ID, + 1 AS IDX, + LTRIM(RTRIM(obr.ANIMAL_ID)) AS ANIMAL_ID, + obr.VERIFIED_DATE_TM AS VERIFIED_DATE_TM, + obr.REQUESTED_DATE_TM AS REQUESTED_DATE_TM, + obr.OBSERVATION_DATE_TM AS OBSERVATION_DATE_TM, + obr.SPECIMEN_RECEIVED_DATE_TM AS SPECIMEN_RECEIVED_DATE_TM, + obr.PV1_VISIT_NUM AS PV1_VISIT_NUM, + obr.SET_ID AS SET_ID, + obr.SPECIMEN_NUM AS SPECIMEN_NUM, + obr.PROCEDURE_ID AS PROCEDURE_ID, + COALESCE (lu.ServiceName, obr.PROCEDURE_NAME) AS PROCEDURE_NAME, + obr.PRIORITY AS PRIORITY, + obr.RESULT_STATUS AS RESULT_STATUS, + obr.TECHNICIAN_NAME AS TECHNICIAN_FIRST_NAME, + obr.TECHNICIAN_INITIALS AS TECHNICIAN_LAST_NAME, + obr.CHARGE_ID AS CHARGE_ID, + obr.OBJECT_ID AS OBJECT_ID, + dbo.f_map_username(obr.USER_NAME) AS USER_NAME, + obr.ENTRY_DATE_TM AS ENTRY_DATE_TM +FROM dbo.CLINICAL_PATH_OBR AS obr + + -- select primates only from the TxBiomed colony + INNER JOIN labkey_etl.V_DEMOGRAPHICS AS d ON d.id = obr.ANIMAL_ID + INNER JOIN dbo.CLINICAL_PATH_LABWORK_SERVICES AS lu ON obr.PROCEDURE_ID = lu.ServiceId + LEFT OUTER JOIN dbo.TAC_COLUMNS AS tc ON tc.object_id = obr.OBJECT_ID +WHERE obr.RESULT_STATUS IN ( 'F', 'C', 'D' ) + AND obr.VERIFIED_DATE_TM IS NOT NULL + AND NOT EXISTS (SELECT 1 FROM labkey_etl.v_delete_clinPathRuns AS dcpr WHERE obr.OBJECT_ID = dcpr.objectid) + +) diff --git a/snprc_ehr/resources/source_queries/HL7/copy Sqlmed OBX data to LK.sql b/snprc_ehr/resources/source_queries/HL7/copy Sqlmed OBX data to LK.sql new file mode 100644 index 000000000..8eb7a3158 --- /dev/null +++ b/snprc_ehr/resources/source_queries/HL7/copy Sqlmed OBX data to LK.sql @@ -0,0 +1,69 @@ +-- ========================================================================================== +-- Author: Terry Hawkins +-- Create date: 7-11-2022 +-- Description: Copies OBX records from Sqlmed data to populate LabKey HL7 tables +-- ========================================================================================== +INSERT INTO labkey.snprc_ehr.HL7_OBX +( + MESSAGE_ID, + IDX, + OBR_OBJECT_ID, + SET_ID, + OBR_SET_ID, + VALUE_TYPE, + TEST_ID, + TEST_NAME, + serviceTestId, + QUALITATIVE_RESULT, + RESULT, + UNITS, + REFERENCE_RANGE, + ABNORMAL_FLAGS, + RESULT_STATUS, + OBJECT_ID, + USER_NAME, + ENTRY_DATE_TM +) +( +SELECT obx.MESSAGE_ID AS MESSAGE_ID, + 1 AS IDX, + obr.OBJECT_ID as OBR_OBJECT_ID, + obx.SET_ID AS SET_ID, + obr.SET_ID AS OBR_SET_ID, + obx.VALUE_TYPE AS VALUE_TYPE, + obx.TEST_ID AS TEST_ID, + COALESCE (lp.TestName, obx.TEST_NAME) as TEST_NAME, + lp.OBJECT_ID AS serviceTestId, + CAST(LTRIM(RTRIM(obx.OBSERVED_VALUE)) as VARCHAR(MAX)) as QUALITATIVE_RESULT, + CASE WHEN obx.VALUE_TYPE = 'NM' AND dbo.f_isNumeric(obx.OBSERVED_VALUE) = 1 + THEN CAST(LTRIM(RTRIM(REPLACE(obx.OBSERVED_VALUE, ' ', ''))) AS DECIMAL(10, 3)) + ELSE + NULL + END AS RESULT, + obx.UNITS AS UNITS, + obx.REFERENCE_RANGE AS REFERENCE_RANGE, + obx.ABNORMAL_FLAGS AS ABNORMAL_FLAGS, + obx.RESULT_STATUS AS RESULT_STATUS, + obx.OBJECT_ID AS OBJECT_ID, + dbo.f_map_username(obx.USER_NAME) AS USER_NAME, + obx.ENTRY_DATE_TM AS ENTRY_DATE_TM +FROM dbo.CLINICAL_PATH_OBX AS obx + + -- select primates only from the TxBiomed colony + INNER JOIN dbo.CLINICAL_PATH_OBR as obr on obx.MESSAGE_ID = obr.MESSAGE_ID + INNER JOIN labkey_etl.V_DEMOGRAPHICS AS d ON d.id = obr.ANIMAL_ID + LEFT OUTER JOIN dbo.CLINICAL_PATH_LABWORK_PANELS AS lp ON obr.PROCEDURE_ID = lp.ServiceId AND obx.TEST_ID = lp.TestId + LEFT OUTER JOIN dbo.TAC_COLUMNS AS tc ON tc.object_id = obx.OBJECT_ID +WHERE obx.RESULT_STATUS IN ( 'F', 'C', 'D' ) + AND obr.VERIFIED_DATE_TM IS NOT NULL + AND NOT EXISTS (SELECT 1 FROM labkey_etl.v_delete_labwork_results AS dclr WHERE obx.OBJECT_ID = dclr.objectid) +) +-- SELECT * FROM dbo.CLINICAL_PATH_OBX AS obx +-- -- select primates only from the TxBiomed colony +-- INNER JOIN dbo.CLINICAL_PATH_OBR as obr on obx.MESSAGE_ID = obr.MESSAGE_ID +-- INNER JOIN labkey_etl.V_DEMOGRAPHICS AS d ON d.id = obr.ANIMAL_ID +-- LEFT OUTER JOIN dbo.CLINICAL_PATH_LABWORK_PANELS AS lp ON obr.PROCEDURE_ID = lp.ServiceId AND obx.TEST_ID = lp.TestId +-- LEFT OUTER JOIN dbo.TAC_COLUMNS AS tc ON tc.object_id = obx.OBJECT_ID +--WHERE obx.RESULT_STATUS IN ( 'F', 'C', 'D' ) +-- AND NOT EXISTS (SELECT 1 FROM labkey_etl.v_delete_labwork_results AS dclr WHERE obx.OBJECT_ID = dclr.objectid) +-- and obx.MESSAGE_ID NOT IN (SELECT obr.message_id FROM labkey.snprc_ehr.HL7_OBR AS obr) \ No newline at end of file diff --git a/snprc_ehr/resources/source_queries/create_LIS_p_load_demographics.sql b/snprc_ehr/resources/source_queries/HL7/create_LIS_p_load_demographics.sql similarity index 90% rename from snprc_ehr/resources/source_queries/create_LIS_p_load_demographics.sql rename to snprc_ehr/resources/source_queries/HL7/create_LIS_p_load_demographics.sql index 9ab811d17..776a5157a 100644 --- a/snprc_ehr/resources/source_queries/create_LIS_p_load_demographics.sql +++ b/snprc_ehr/resources/source_queries/HL7/create_LIS_p_load_demographics.sql @@ -210,7 +210,7 @@ BEGIN FORMAT(@BirthDate,'yyyyMMddHHmm'), -- Date of Birth @Gender, -- Sex RTRIM(@Species), -- Race - Species - RTRIM(@Breed), -- Ethnic Grouop - Breed + RTRIM(@Breed), -- Ethnic Group - Breed FORMAT(@DeathDate,'yyyyMMddHHmm'), -- Patient Death Date and Time @isAlive -- Patient Death Indicator ) @@ -320,7 +320,36 @@ BEGIN goto error END CATCH - + /* + Step. 6 add record to import log + */ + INSERT INTO LIS.HL7ImportLog + ( + MessageId, + ObservationDateTm, + MessageControlId, + ImportStatus, + ResultStatis, + PatientId, + Species, + HL7MessageText, + ImportText, + UserName, + EntryDateTm + ) + VALUES + ( @hl7_messageId, -- MessageId - varchar(50) + GETDATE(), -- ObservationDateTm - datetime + @hl7_messageControl, -- MessageControlId - varchar(50) + 1, -- ImportStatus - int + 'F', -- ResultStatis - varchar(10) + @Id, -- PatientId - varchar(20) + @Species, -- Species - varchar(50) + NULL, -- HL7MessageText - varchar(max) + 'Upload okay', -- ImportText - varchar(max) + @ModifiedBy, -- USER_NAME - varchar(128) + @Modified -- ENTRY_DATE_TM - datetime + ) -- next row FETCH NEXT FROM @msgCursor INTO @RowId, @Id, @Gender, @BirthDate, @DeathDate, @Breed, @Species, @isAlive, @Sire, @Dam, @Modified, @ModifiedBy, @Processed, @ObjectId @@ -333,35 +362,36 @@ BEGIN GOTO finis -- error handling - error: - ROLLBACK; - - -- Update error log - INSERT INTO LIS.HL7ExportErrorLog - ( - ObjectId, - ProcessedDateTm, - MessageControlId, - PatientId, - ErrorMsg, - UserName, - EntryDateTm - ) - VALUES - ( @ObjectId, -- ObjectId of demographics row -- varchar(50) - GETDATE(), -- PROCESSED_DATE_TM - datetime - @hl7_messageControl, -- MESSAGE_CONTROL_ID - varchar(50) - @Id, -- PATIENT_ID - varchar(20) - @errormsg, -- ERROR_MSG - varchar(max) - @ModifiedBy, -- USER_NAME - varchar(128) - @Modified -- ENTRY_DATE_TM - datetime - ); - - -- Note to self: XACT_ABORT (set above) will rollback transaction - THROW 51000, @errormsg, 1 + error: + ROLLBACK + + -- Update error log + INSERT INTO LIS.HL7ExportErrorLog + ( + ObjectId, + ProcessedDateTm, + MessageControlId, + PatientId, + ErrorMsg, + UserName, + EntryDateTm + ) + VALUES + ( @ObjectId, -- ObjectId of demographics row -- varchar(50) + GETDATE(), -- PROCESSED_DATE_TM - datetime + @hl7_messageControl, -- MESSAGE_CONTROL_ID - varchar(50) + @Id, -- PATIENT_ID - varchar(20) + @errormsg, -- ERROR_MSG - varchar(max) + @ModifiedBy, -- USER_NAME - varchar(128) + @Modified -- ENTRY_DATE_TM - datetime + ); + + -- Note to self: XACT_ABORT (set above) will rollback transaction + THROW 51000, @errormsg, 1 -- If no error occurred, commit the entire transaction. finis: + COMMIT transaction trans1 RETURN 0 diff --git a/snprc_ehr/resources/source_queries/HL7/create_v_sqlmed_msh.sql b/snprc_ehr/resources/source_queries/HL7/create_v_sqlmed_msh.sql new file mode 100644 index 000000000..61fa46935 --- /dev/null +++ b/snprc_ehr/resources/source_queries/HL7/create_v_sqlmed_msh.sql @@ -0,0 +1,49 @@ +USE [animal]; +GO + +/****** Object: View [labkey_etl].[V_CLINPATHRUNS] Script Date: 7/7/2022 3:09:20 PM ******/ +SET ANSI_NULLS ON; +GO + +SET QUOTED_IDENTIFIER ON; +GO + + + +ALTER VIEW [labkey_etl].[v_Sqlmed_msh] +AS +-- ========================================================================================== +-- Author: Terry Hawkins +-- Create date: 7-7-2022 +-- Description: Selects the MSH records from Sqlmed data to populate LabKey HL7 tables +-- Changes: +-- ========================================================================================== +SELECT obr.MESSAGE_ID AS MESSAGE_ID, + 0 AS IDX, + 'Sqlmed' AS SENDING_APPLICATION, + 'TxBiomed' AS SENDING_FACILITY, + 'TAC' AS RECEIVING_APPLICATION, + 'TxBiomed' AS RECEIVING_FACILITY, + 'ORU' AS MESSAGE_TYPE, + '' AS TRIGGER_EVENT_ID, + obr.MESSAGE_CONTROL_ID AS MESSAGE_CONTROL_ID, + obr.VERIFIED_DATE_TM AS MESSAGE_DATE_TM, + obr.OBJECT_ID AS OBJECT_ID, + obr.ENTRY_DATE_TM AS ENTRY_DATE_TM, + dbo.f_map_username(obr.USER_NAME) AS USER_NAME, + obr.TIMESTAMP AS TIMESTAMP +FROM dbo.CLINICAL_PATH_OBR AS obr + + -- select primates only from the TxBiomed colony + INNER JOIN labkey_etl.V_DEMOGRAPHICS AS d ON d.id = obr.ANIMAL_ID + LEFT OUTER JOIN dbo.TAC_COLUMNS AS tc ON tc.object_id = obr.OBJECT_ID +WHERE obr.RESULT_STATUS IN ( 'F', 'C', 'D' ) + AND obr.VERIFIED_DATE_TM IS NOT NULL; + + +GO + +-- Table permissions +GRANT SELECT ON [labkey_etl].[v_Sqlmed_msh] TO z_labkey; + +GO \ No newline at end of file diff --git a/snprc_ehr/resources/source_queries/HL7/create_v_sqlmed_obr.sql b/snprc_ehr/resources/source_queries/HL7/create_v_sqlmed_obr.sql new file mode 100644 index 000000000..070e536a1 --- /dev/null +++ b/snprc_ehr/resources/source_queries/HL7/create_v_sqlmed_obr.sql @@ -0,0 +1,53 @@ +USE [animal]; +GO + +SET ANSI_NULLS ON; +GO + +SET QUOTED_IDENTIFIER ON; +GO + + +ALTER VIEW labkey_etl.v_Sqlmed_obr +AS +-- ========================================================================================== +-- Author: Terry Hawkins +-- Create date: 7-7-2022 +-- Description: Selects the OBR records from Sqlmed data to populate LabKey HL7 tables +-- ========================================================================================== +SELECT obr.MESSAGE_ID AS MESSAGE_ID, + COALESCE (obr.MESSAGE_CONTROL_ID, '0') AS MESSAGE_CONTROL_ID, + 1 AS IDX, + LTRIM(RTRIM(obr.ANIMAL_ID)) AS ANIMAL_ID, + --obr.VERIFIED_DATE_TM AS VERIFIED_DATE_TM, + obr.REQUESTED_DATE_TM AS REQUESTED_DATE_TM, + obr.OBSERVATION_DATE_TM AS OBSERVATION_DATE_TM, + obr.SPECIMEN_RECEIVED_DATE_TM AS SPECIMEN_RECEIVED_DATE_TM, + CAST(CAST(obr.VERIFIED_DATE_TM AS DATETIME2(0)) AS DATETIME) AS VERIFIED_DATE_TM, + obr.PV1_VISIT_NUM AS PV1_VISIT_NUM, + obr.SET_ID AS SET_ID, + obr.SPECIMEN_NUM AS SPECIMEN_NUM, + obr.PROCEDURE_ID AS PROCEDURE_ID, + lu.ServiceName AS PROCEDURE_NAME, + obr.PRIORITY AS PRIORITY, + obr.RESULT_STATUS AS RESULT_STATUS, + obr.TECHNICIAN_NAME AS TECHNICIAN_FIRST_NAME, + obr.TECHNICIAN_INITIALS AS TECHNICIAN_LAST_NAME, + obr.CHARGE_ID AS CHARGE_ID, + obr.OBJECT_ID AS OBJECT_ID, + dbo.f_map_username(obr.USER_NAME) AS USER_NAME, + obr.ENTRY_DATE_TM AS ENTRY_DATE_TM, + obr.TIMESTAMP AS TIMESTAMP +FROM dbo.CLINICAL_PATH_OBR AS obr + + -- select primates only from the TxBiomed colony + INNER JOIN labkey_etl.V_DEMOGRAPHICS AS d ON d.id = obr.ANIMAL_ID + INNER JOIN dbo.CLINICAL_PATH_LABWORK_SERVICES AS lu ON obr.PROCEDURE_ID = lu.ServiceId + LEFT OUTER JOIN dbo.TAC_COLUMNS AS tc ON tc.object_id = obr.OBJECT_ID +WHERE obr.RESULT_STATUS IN ( 'F', 'C', 'D' ) + AND obr.VERIFIED_DATE_TM IS NOT NULL; + +GO + +GRANT SELECT ON labkey_etl.v_Sqlmed_obr TO z_labkey; +GO diff --git a/snprc_ehr/resources/source_queries/HL7/f_format_hl7_date.sql b/snprc_ehr/resources/source_queries/HL7/f_format_hl7_date.sql new file mode 100644 index 000000000..c17e2b45e --- /dev/null +++ b/snprc_ehr/resources/source_queries/HL7/f_format_hl7_date.sql @@ -0,0 +1,30 @@ +-- ============================================= +-- Author: Terry Hawkins +-- Create date: 1/30/2014 +-- Description: Converts an HL7 date and time string into MSSQL datetime format +-- ============================================= +ALTER FUNCTION [dbo].[f_format_hl7_date] +( + -- Add the parameters for the function here + @date_str VARCHAR(50) +) +RETURNS DATETIME + +AS +BEGIN + DECLARE @ret_date DATETIME + IF LEN(@date_str) = 8 +BEGIN + --20140117 + SET @ret_date = CAST(SUBSTRING(@date_str, 1,4)+ '-' + SUBSTRING(@date_str, 5,2) + '-' + SUBSTRING(@date_str,7,2) AS DATETIME) +END +ELSE +BEGIN + --201401171008 + SET @ret_date = CAST(SUBSTRING(@date_str, 1,4)+ '-' + SUBSTRING(@date_str, 5,2) + '-' + SUBSTRING(@date_str,7,2) + + ' ' + SUBSTRING(@date_str, 9,2) + ':' + SUBSTRING(@date_str, 11,2) AS DATETIME) +END + +RETURN @ret_date + +END diff --git a/snprc_ehr/resources/source_queries/HL7/p_load_hl7_data.sql b/snprc_ehr/resources/source_queries/HL7/p_load_hl7_data.sql new file mode 100644 index 000000000..b262125a8 --- /dev/null +++ b/snprc_ehr/resources/source_queries/HL7/p_load_hl7_data.sql @@ -0,0 +1,569 @@ +-- =============================================================== +-- Author: Terry Hawkins +-- Create date: 05/19/2022 +-- Description: loads HL7 results from Orchard Harvest +-- Returns: +-- 0 Okay +-- -1 thru -99 Reserved by sql server for system errors +-- -100 Illegal null value passed into procedure +-- -101 General error +-- -102 Illegal update column passed into procedure +-- @@error SQL errors +-- +-- Note: hl7_import_log import_status: +-- 1 == import okay +-- 2 == animal not found in master table or as a cage location +-- other == SQL server error number +-- +-- Changes: +-- +-- ================================================================= +alter PROCEDURE [dbo].[p_load_hl7_data] +( @MessageId VARCHAR(50)) +AS +BEGIN + -- SET NOCOUNT ON added to prevent extra result sets from + -- interfering with SELECT statements. + SET NOCOUNT ON; + declare + @rowcnt INTEGER, + @error INTEGER, + @errormsg VARCHAR(MAX), + @animal_id VARCHAR(7), + @hl7_message_text VARCHAR(MAX), + @hl7_message_control_id VARCHAR(50), + @hl7_result_status VARCHAR(10), + @hl7_species VARCHAR(50), + @hl7_observation_date_tm DATETIME, + @pos INT, + @patient_id VARCHAR(32), + @table_prefix VARCHAR(3) + + SET @animal_id = 'Unproc' + SET @hl7_message_text = 'Could not read message text.' + SET @hl7_message_control_id = 'Unprocessed.' + SET @hl7_result_status = 'Unproc' + SET @hl7_species = 'Unprocessed' + SET @hl7_observation_date_tm = '01-01-1900 00:00' + SET @table_prefix = 'ORC' + + + -- Start a new transaction +begin transaction trans1 + + -- Check for nulls in non-nullable columns + if @MessageId is Null + begin + select @error = -100 + SELECT @errormsg = 'MessageId argument is null.' + goto error + END + + + IF NOT Exists (Select MessageID From Orchard_hl7_staging.dbo.ORC_HL7Data Where MessageID = @MessageID) + BEGIN + SELECT @error = -100 + SELECT @errormsg = 'MessageId not found in the ORC_HL7Data table.' + GOTO error + END + + BEGIN TRY + -- set local variables + SELECT @hl7_message_text = hl7Message, + @hl7_message_control_id = MsgControl + FROM dbo.ORC_HL7Data WHERE MessageID = @messageId + + SELECT @hl7_result_status = OBR_F25_C1, + @hl7_observation_date_tm = dbo.f_format_hl7_date(OBR_F7_C1) + FROM dbo.ORC_Segment_OBR_A WHERE MessageID = @messageId + + -- make sure we are working with an animal record + SELECT @hl7_species = pid.PID_F10_C1, + @patient_id = pid.PID_F2_C1, + @animal_id = LTRIM(RTRIM(pid.PID_F2_C1)) + FROM dbo.ORC_Segment_PID_A AS pid WHERE pid.MessageID = @MessageId + + END TRY + BEGIN CATCH + SELECT @error = -101 + SELECT @errormsg = 'Error reading HL7 message data from staging database.' + GOTO error + END CATCH + -------------------------------------------------------------------------------------------------------- + -- insert into MSH table + BEGIN TRY + INSERT INTO labkey.snprc_ehr.HL7_MSH_Staging + ( MESSAGE_ID, + IDX, + SENDING_APPLICATION, + SENDING_FACILITY, + RECEIVING_APPLICATION, + RECEIVING_FACILITY, + MESSAGE_CONTROL_ID, + MESSAGE_DATE_TM + ) + + SELECT msh.MessageID, + msh.IDX, + msh.MSH_F3_C1, + msh.MSH_F4_C1, + msh.MSH_F5_C1, + msh.MSH_F5_C1, + msh.MSH_F10_C1, + dbo.f_format_hl7_date(msh.MSH_F7_C1) + + FROM Orchard_HL7_staging.dbo.ORC_segment_msh_a AS msh + WHERE msh.MessageId = @messageid + END TRY + BEGIN CATCH + select @error = -101 + SELECT @errormsg = 'Error inserting message: *' + @messageid + '* into HL7_MSH_Staging.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + goto error + END CATCH + -------------------------------------------------------------------------------------------------------- + -- insert into PID table + BEGIN TRY + INSERT INTO labkey.snprc_ehr.HL7_PID_Staging + ( + MESSAGE_ID, + IDX, + SET_ID, + PATIENT_ID_EXTERNAL, + PATIENT_ID_INTERNAL, + BIRTHDATE, + SEX, + BREED, + SPECIES, + ACCOUNT_NUMBER, + DEATH_DATE + ) + + ( SELECT + pid.MessageId, -- MESSAGE_ID - varchar(50) + pid.IDX, -- IDX - int + pid.PID_F1_C1, -- SET_ID - varchar(20) + pid.PID_F2_C1, -- PATIENT_ID_EXTERNAL - varchar(20) + pid.PID_F3_C1, -- PATIENT_ID_INTERNAL - varchar(20) + dbo.f_format_hl7_date(pid.PID_F7_C1), -- BIRTHDATE - datetime + pid.PID_F8_C1, -- SEX - varchar(20) + pid.PID_F10_C1, -- BREED - varchar(50) + pid.PID_F22_C1, -- SPECIES - varchar(50) + pid.PID_F18_C1, -- ACCOUNT_NUMBER - varchar(50) + dbo.f_format_hl7_date(pid.PID_F29_C1) + FROM Orchard_hl7_staging.dbo.ORC_Segment_PID_A as pid + where pid.messageID = @messageId + ) + END TRY + BEGIN CATCH + select @error = -101 + SELECT @errormsg = 'Error inserting message: *' + @messageid + '* into HL7_PID_Staging.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + goto error + END CATCH + -------------------------------------------------------------------------------------------------------- + -- insert into PV1 table + BEGIN TRY + INSERT INTO labkey.snprc_ehr.HL7_PV1_Staging + ( + MESSAGE_ID, + IDX, + SET_ID, + ADMISSION_TYPE, + ATTENDING_DOCTOR_LAST, + ATTENDING_DOCTOR_FIRST, + VISIT_NUMBER, + CHARGE_NUMBER, + ADMIT_DATE + ) + ( + SELECT + pv1.messageId, -- MESSAGE_ID - varchar(50) + pv1.IDX, -- IDX - int + pv1.PV1_F1_C1, -- SET_ID - varchar(20) + pv1.PV1_F4_C1, -- ADMISSION_TYPE - varchar(20) + pv1.PV1_F7_C2, -- ATTENDING_DOCTOR_LAST - varchar(50) + pv1.PV1_F7_C3, -- ATTENDING_DOCTOR_FIRST - varchar(50) + pv1.PV1_F19_C1, -- VISIT_NUMBER - varchar(20) + pv1.PV1_F22_C1, -- CHARGE_NUMBER - varchar(20) + dbo.f_format_hl7_date(pv1b.PV1_F44_C1) -- ADMIT_DATE + FROM Orchard_HL7_staging.dbo.ORC_Segment_PV1_A as pv1 + INNER JOIN Orchard_hl7_staging.dbo.ORC_Segment_PV1_B AS pv1b ON pv1b.MessageID = pv1.MessageID AND pv1b.IDX = pv1.IDX + WHERE pv1.MessageId = @messageId + ) + END TRY + BEGIN CATCH + select @error = -101 + SELECT @errormsg = 'Error inserting message: *' + @messageid + '* into HL7_PV1_Staging.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + goto error + END CATCH + + -------------------------------------------------------------------------------------------------------- + -- insert into OCR table + + BEGIN TRY + INSERT INTO labkey.snprc_ehr.HL7_ORC_Staging + ( + MESSAGE_ID, + IDX, + ORDER_CONTROL_CODE, + FILLER_ORDER_NUMBER, + ENTERED_BY_LAST, + ENTERED_BY_FIRST, + VERIFIED_BY_LAST, + VERIFIED_BY_FIRST, + ORDER_PROVIDER_LAST, + ORDER_PROVIDER_FIRST, + ORDER_DATE + ) + ( SELECT + orc.MessageId, -- MESSAGE_ID - varchar(50) + orc.IDX, -- IDX - int + orc.ORC_F1_C1, -- ORDER_CONTROL_CODE - varchar(20) + orc.ORC_F3_C1, -- FILLER_ORDER_NUMBER - varchar(22) + orc.ORC_F10_C2, -- ENTERED_BY_LAST - varchar(50) + orc.ORC_F10_C3, -- ENTERED_BY_FIRST - varchar(50) + orc.ORC_F11_C2, -- VERIFIED_BY_LAST - varchar(50) + orc.ORC_F11_C3, -- VERIFIED_BY_FIRST - varchar(50) + orc.ORC_F12_C2, -- ORDER_PROVIDER_LAST - varchar(50) + orc.ORC_F12_C3, -- ORDER_PROVIDER_FIRST - varchar(50) + dbo.f_format_hl7_date(orc.ORC_F15_C1) -- ORDER_DATE - datetime + + FROM Orchard_HL7_staging.dbo.ORC_Segment_ORC_A as orc + WHERE orc.MessageId = @messageId + ) + END TRY + BEGIN CATCH + select @error = -101 + SELECT @errormsg = 'Error inserting message: *' + @messageid + '* into HL7_ORC_Staging.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + goto error + END CATCH + +-- TODO: which table do we want to use as the demographics source - using Marvin.labkey database for development +-- TODO: Do we want to import data for location pool samples? Section is commented out for now +-- IF NOT EXISTS (SELECT 1 FROM labkey.StudyDataSet.c6d340_demographics AS m WHERE m.participantid = @animal_id) +-- BEGIN +-- SET @pos = PATINDEX('%[ -9][ -9][0-9][.][0-9][0-9]', @patient_id) -- pattern match a location code +-- IF @pos = 0 +-- SET @pos = PATINDEX('%[ -9][0-9][.][0-9][0-9]', @patient_id) +-- IF @pos = 0 +-- SET @pos = PATINDEX('%[0-9][.][0-9][0-9]', @patient_id) +-- IF @pos >= 1 +-- begin +-- SET @animal_id = LTRIM(SUBSTRING(@patient_id, @pos, LEN(@patient_id) - (@pos-1) )) +-- IF (SELECT COUNT(*) FROM animal.dbo.valid_locations AS vl WHERE vl.location = CAST(@animal_id as numeric(6,2)) ) < 1 +-- GOTO not_animal_data -- The sample is not for an animal or a location +-- END +-- END + + +-- TODO: currently using database: Marvin.labkey for development +-- This section removes cancelled orders from the animal DB tables +-- OBR result status = 'X' Order cancelled + + IF @hl7_result_status = 'X' + BEGIN + BEGIN TRY + -- remove observations + DELETE cpx + + FROM labkey.snprc_ehr.HL7_OBX_Staging AS cpx + INNER JOIN labkey.snprc_ehr.HL7_OBR_Staging AS cpr ON cpr.OBJECT_ID = cpx.OBR_OBJECT_ID + INNER JOIN Orchard_hl7_staging.dbo.ORC_segment_obr_a AS obr ON obr.messageID = @MessageId AND obr.OBR_F1_C1 = cpx.OBR_SET_ID + WHERE LTRIM(RTRIM(obr.OBR_F25_C1)) = 'X' -- Result_status = Order cancelled + END TRY + BEGIN CATCH + select @error = -101 + SELECT @errormsg = 'Error deleting message: *' + @messageid + '* from HL7_OBX_Staging.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + goto error + END CATCH + + -- remove notes + BEGIN TRY + DELETE cpn + + FROM labkey.snprc_ehr.HL7_NTE_Staging AS cpn + JOIN labkey.snprc_ehr.HL7_OBR_Staging AS cpr ON cpr.OBJECT_ID = cpn.OBR_OBJECT_ID + JOIN dbo.ORC_segment_obr_a AS obr ON obr.messageID = @MessageId AND obr.OBR_F1_C1 = cpn.OBR_SET_ID + WHERE LTRIM(RTRIM(obr.OBR_F25_C1)) = 'X' -- Result_status = Order cancelled + END TRY + BEGIN CATCH + select @error = -101 + SELECT @errormsg = 'Error deleting message: *' + @messageid + '* from HL7_NTE_Staging.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + goto error + END CATCH + + -- update observation request + BEGIN TRY + UPDATE cpr + SET RESULT_STATUS = 'X' + + FROM labkey.snprc_ehr.HL7_OBR_Staging AS cpr + JOIN dbo.ORC_segment_obr_a AS obr ON obr.messageID = @MessageId AND cpr.Set_ID = obr.OBR_F1_C1 + WHERE LTRIM(RTRIM(obr.OBR_F25_C1)) = 'X' -- Result_status = Order cancelled + + END TRY + BEGIN CATCH + select @error = -101 + SELECT @errormsg = 'Error updating message: *' + @messageid + '* from HL7_OBR_Staging.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + goto error + END CATCH + + -- all processing finished jump to clean exit routine + + INSERT INTO labkey.snprc_ehr.HL7_IMPORT_LOG (MESSAGE_ID, OBSERVATION_DATE_TM, MESSAGE_CONTROL_ID, + IMPORT_STATUS, RESULT_STATUS, PATIENT_ID, SPECIES, HL7_MESSAGE_TEXT, IMPORT_TEXT) + VALUES (@messageId,@hl7_observation_date_tm, @hl7_message_control_id, 1, @hl7_result_status, + @animal_id, @hl7_species, @hl7_message_text, 'Record cancelled: okay.') + + GOTO finis +END + +-- Process messeges for new results +-- +IF @hl7_result_status = 'F' OR @hl7_result_status = 'C' OR @hl7_result_status = 'D' +BEGIN + -- RESULT_STATUS = 'F' + DECLARE @obr_object_id UNIQUEIDENTIFIER + DECLARE @ObjectId_TableVar TABLE (ObjectId UNIQUEIDENTIFIER, tid INT Identity) + + + BEGIN TRY + INSERT INTO labkey.snprc_ehr.HL7_OBR_Staging + + ( MESSAGE_ID , + IDX, + MESSAGE_CONTROL_ID , + ANIMAL_ID , + VERIFIED_DATE_TM, + REQUESTED_DATE_TM , + OBSERVATION_DATE_TM , + SPECIMEN_RECEIVED_DATE_TM, + SET_ID, + SPECIMEN_NUM , + PROCEDURE_ID , + PROCEDURE_NAME , + PRIORITY , + RESULT_STATUS , + TECHNICIAN_NAME , + TECHNICIAN_INITIALS, + CHARGE_ID, + OBJECT_ID + ) + + SELECT obr.MessageID, + obr.IDX, + msh.MSH_F10_C1, + @animal_id, + dbo.f_format_hl7_date(obr.OBR_F22_C1), -- verified_date_tm + dbo.f_format_hl7_date(obr.OBR_F6_C1), -- requested_date_tm + dbo.f_format_hl7_date(obr.OBR_F7_C1), -- observation_date_tm + dbo.f_format_hl7_date(obr.OBR_F14_C1), -- specimen_received_date_tm + obr.OBR_F1_C1, -- Set_ID + obr.OBR_F3_C1, --Filler Order Number + obr.OBR_F4_C1, -- Procedure ID + obr.OBR_F4_C2, -- Procedure Name + obr.OBR_F5_C1, -- Priority + LTRIM(RTRIM(obr.OBR_F25_C1)), -- Result status + obr.OBR_F34_C2, -- Technicial Name + NULL, -- Technician Initials + pv1.PV1_F24_C1, --charge_id -- TODO: maps to HL7 Contract Code + NEWID() -- object_ID + + FROM dbo.ORC_segment_obr_a AS obr + JOIN dbo.ORC_segment_pid_a AS pid ON pid.MessageID = obr.MessageID + JOIN dbo.ORC_Segment_MSH_A AS msh ON msh.MessageID = obr.MessageID + JOIN dbo.ORC_Segment_PV1_A AS pv1 ON pv1.MessageID = obr.MessageID + -- only load rows for animal_ids in master + --JOIN dbo.master AS m ON right(' '+ LTRIM(RTRIM(pid.PID_F2_C1)),6) = m.id + JOIN dbo.ORC_HL7Data AS h ON h.MessageID = obr.MessageID + -- ignore rows that are currently being processed + WHERE obr.MessageId = @MessageId + AND LTRIM(RTRIM(obr.OBR_F25_C1)) = 'F' + END TRY + BEGIN CATCH + select @error = -101 + SELECT @errormsg = 'Error inserting message: *' + @messageid + '* into HL7_OBR_Staging.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + goto error + END CATCH + + + + BEGIN TRY + -- This is a little tricky. The OBR and OBX records match on MessageId; however multiple OBR records can be in a single message. + -- If that happens, the IDX value of the OBX records that match a given OBR record will be one greater than the OBR's IDX value, + -- and will increment to be one less than the next OBR's IDX value. The LEAD function is used to get the next OBR.IDX value and + -- the OBX records are constrained by the OBR.IDX and OBR.next_OBR_IDX. A CTE is used to select the OBR records. + + -- get OBR's ObjectId + select @obr_object_id = (select ObjectId from @ObjectId_TableVar + WHERE tid = (SELECT MAX(tid) from @ObjectId_TableVar)) + -- New OBX records + ;WITH cte AS ( + + SELECT OBR.MessageId, OBR.IDX AS OBR_IDX, OBR.OBR_F1_C1 AS SET_ID, OBR.OBR_F25_C1 as RESULT_STATUS, cbr.OBJECT_ID as obr_object_id, + LEAD(OBR.IDX, 1, 9999) OVER (ORDER BY OBR.IDX) AS next_OBR_IDX + + FROM [Orchard_hl7_staging].[dbo].[ORC_Segment_OBR_A] AS OBR + INNER JOIN labkey.snprc_ehr.HL7_OBR_Staging as cbr on OBR.messageId = cbr.Message_ID and OBR.OBR_F1_C1 = cbr.SET_ID + WHERE OBR.MessageId = @messageId + ) + + INSERT INTO labkey.snprc_ehr.HL7_OBX_Staging + ( MESSAGE_ID , + IDX, + OBR_OBJECT_ID, + SET_ID, + OBR_SET_ID, + VALUE_TYPE , + TEST_ID , + TEST_NAME , + OBSERVED_VALUE , + UNITS , + REFERENCE_RANGE , -- TODO: missing reference ranges in Orchard data + ABNORMAL_FLAGS , -- TODO: ditto ditto + RESULT_STATUS -- TODO: ditto ditto + ) -- output Inserted.OBR_OBJECT_ID + + SELECT obx.MessageID, + obx.IDX, + cte.obr_object_id, + obx.OBX_F1_C1, + cte.SET_ID, -- OBR SET ID + obx.OBX_F2_C1, + obx.OBX_F3_C1, + obx.OBX_F3_C2, + obx.OBX_RESULTDATA, + obx.OBX_F6_C1, + obx.OBX_F7_C1, + obx.OBX_F8_C1, + obx.OBX_F11_C1 + FROM dbo.ORC_segment_obx_a AS obx + INNER JOIN cte ON OBX.MessageID = cte.MessageID AND obx.IDX > cte.OBR_IDX AND obx.IDX < cte.next_OBR_IDX + + -- only load data with result_status = 'F' (final). + AND cte.RESULT_STATUS = 'F' + + END TRY + BEGIN CATCH + select @error = -101 + SELECT @errormsg = 'Error inserting message: *' + @messageid + '* into HL7_OBX_Staging.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + goto error + END CATCH + + -- New NTE records + BEGIN TRY + ;WITH cte AS ( + + SELECT OBR.MessageId, OBR.IDX AS OBR_IDX, OBR.OBR_F1_C1 AS SET_ID, OBR.OBR_F25_C1 as RESULT_STATUS, cbr.OBJECT_ID as obr_object_id, + LEAD(OBR.IDX, 1, 9999) OVER (ORDER BY OBR.IDX) AS next_OBR_IDX + + FROM [Orchard_hl7_staging].[dbo].[ORC_Segment_OBR_A] AS OBR + INNER JOIN labkey.snprc_ehr.HL7_OBR_Staging as cbr on OBR.messageId = cbr.Message_ID and OBR.OBR_F1_C1 = cbr.SET_ID + WHERE OBR.MessageId = @messageId + ) + INSERT INTO labkey.snprc_ehr.HL7_NTE_Staging + ( MESSAGE_ID , + IDX, + OBR_OBJECT_ID, + SET_ID, + OBR_SET_ID, + COMMENT + ) + SELECT nte.MessageID, + nte.IDX, + cte.obr_object_id, + nte.NTE_F1_C1, + cte.SET_ID, -- OBR_SET_ID + nte.NTE_F3_C1 + FROM Orchard_hl7_staging.dbo.ORC_Segment_NTE_A AS nte + INNER JOIN cte ON nte.MessageID = cte.messageId AND nte.IDX > cte.OBR_IDX AND nte.IDX < cte.next_OBR_IDX + -- only load data with result_status = 'F' (final). + AND cte.RESULT_STATUS = 'F' + END TRY + BEGIN CATCH + select @error = -101 + SELECT @errormsg = 'Error inserting message: *' + @messageid + '* into HL7_OBR_Staging.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + goto error + END CATCH + + + -- Process messeges for corrected results + -- RESULT_STATUS = 'C' for corrected entries, 'D' for deleted entries + -- OBR entries don't change + Begin TRY + ;WITH cte AS ( + + SELECT OBR.MessageId, OBR.IDX AS OBR_IDX, OBR.OBR_F1_C1 AS SET_ID, OBR.OBR_F25_C1 as RESULT_STATUS, cbr.OBJECT_ID as obr_object_id, + LEAD(OBR.IDX, 1, 9999) OVER (ORDER BY OBR.IDX) AS next_OBR_IDX + + FROM [Orchard_hl7_staging].[dbo].[ORC_Segment_OBR_A] AS OBR + INNER JOIN labkey.snprc_ehr.HL7_OBR_Staging as cbr on OBR.messageId = cbr.Message_ID and OBR.OBR_F1_C1 = cbr.SET_ID + WHERE OBR.MessageId = @messageId + ) + + UPDATE cpx + SET -- cpx.MESSAGE_ID = , -- leave intact (needed to join with obr data) + -- cpx.SET_ID = , -- ditto (needed for ordering data) + -- cpx.VALUE_TYPE = , -- ditto (should not change) + -- cpx.TEST_ID = , -- ditto ditto + -- cpx.TEST_NAME ', -- ditto ditto + cpx.OBSERVED_VALUE = CASE WHEN obx.OBX_F11_C1 = 'D' then '00' else obx.OBX_RESULTDATA END, + -- cpx.UNITS = , -- leave intact (should not change) + -- cpx.REFERENCE_RANGE , -- ditto ditto + cpx.ABNORMAL_FLAGS = CASE WHEN obx.OBX_F11_C1 = 'D' then NULL else obx.OBX_F8_C1 END, + cpx.RESULT_STATUS = obx.OBX_F11_C1 + + FROM labkey.snprc_ehr.HL7_OBX_Staging AS cpx + INNER JOIN cte ON cpx.Message_ID = cte.MessageID AND cpx.IDX > cte.OBR_IDX AND cpx.IDX < cte.next_OBR_IDX + INNER JOIN Orchard_hl7_staging.dbo.ORC_segment_obx_a as OBX on cpx.MESSAGE_ID = OBX.MessageId and cpx.IDX = OBX.IDX + -- only update data with obx result_status = 'C' or 'D' (corrected or deleted entries) + WHERE RTRIM(LTRIM(obx.OBX_F11_C1)) in ('C', 'D') + + END TRY + BEGIN CATCH + select @error = -101 + SELECT @errormsg = 'Error processing message: *' + @messageid + '* for update of HL7_OBX_Staging.' + CHAR(13)+CHAR(10) + ERROR_MESSAGE() + goto error + END CATCH + + -- all processing finished jump to clean exit routine + + INSERT INTO labkey.snprc_ehr.HL7_IMPORT_LOG (MESSAGE_ID, OBSERVATION_DATE_TM, MESSAGE_CONTROL_ID, IMPORT_STATUS, RESULT_STATUS, PATIENT_ID, SPECIES, HL7_MESSAGE_TEXT, IMPORT_TEXT) + VALUES (@messageId,@hl7_observation_date_tm, @hl7_message_control_id, 1, @hl7_result_status, @animal_id, @hl7_species, @hl7_message_text, 'upload okay.') + + + GOTO finis +END +not_animal_data: + + + INSERT INTO labkey.snprc_ehr.HL7_IMPORT_LOG (MESSAGE_ID, OBSERVATION_DATE_TM, MESSAGE_CONTROL_ID, IMPORT_STATUS, RESULT_STATUS, PATIENT_ID, SPECIES, HL7_MESSAGE_TEXT, IMPORT_TEXT) + VALUES (@messageId, @hl7_observation_date_tm, @hl7_message_control_id, 2, @hl7_result_status, @animal_id, @hl7_species, @hl7_message_text, 'Not animal data.') + + GOTO finis + +error: + -- an error occurred, rollback the entire transaction. + rollback transaction trans1 + + INSERT INTO labkey.snprc_ehr.HL7_IMPORT_LOG (MESSAGE_ID, OBSERVATION_DATE_TM, MESSAGE_CONTROL_ID, IMPORT_STATUS, RESULT_STATUS, PATIENT_ID, SPECIES, HL7_MESSAGE_TEXT, IMPORT_TEXT) + VALUES (@messageId, @hl7_observation_date_tm, @hl7_message_control_id, @error, @hl7_result_status, @animal_id, @hl7_species, @hl7_message_text, @errorMsg) + + Update Orchard_hl7_staging.dbo.ORC_HL7Data Set Processed = 1, StatusMessage = 'ERROR: Processed By p_load_hl7_data.sql' Where MessageID = @MessageID + + return @error + +-- If no error occurred, commit the entire transaction. +finis: + + Update Orchard_hl7_staging.dbo.ORC_HL7Data Set Processed = 1, StatusMessage = 'SUCCESS: Processed By p_load_hl7_data.sql' Where MessageID = @MessageID + commit transaction trans1 + + return 0 + +END + + +GRANT EXEC ON LIS.p_load_hl7_data TO hl7_admin; +GRANT VIEW DEFINITION ON LIS.p_load_demographics TO hl7_admin; + +GO \ No newline at end of file diff --git a/snprc_ehr/src/org/labkey/snprc_ehr/history/LabResultsLabworkType.java b/snprc_ehr/src/org/labkey/snprc_ehr/history/LabResultsLabworkType.java index 963dc950f..8072e587e 100644 --- a/snprc_ehr/src/org/labkey/snprc_ehr/history/LabResultsLabworkType.java +++ b/snprc_ehr/src/org/labkey/snprc_ehr/history/LabResultsLabworkType.java @@ -65,13 +65,14 @@ public class LabResultsLabworkType extends DefaultLabworkType public LabResultsLabworkType(Module module) { - super("Labwork Results", "study", "LabworkResults", module); + // LabworkResultsAll is a query that aggregates several labwork related datasets + super("Labwork Results", "study", "LabworkResultsAll", module); _testType = _default_testType; // this is just a temporary value it will be updated for the specific // assay type in the getRows() method. tjh _normalRangeField = "refRange"; _unitsField = "units"; _normalRangeStatusField = "abnormal_flags"; - _testIdField = "serviceTestId"; + _testIdField = "TestId"; } /** From 7c2e43b92e933a3fa245d52714f3cda68dfbeb99 Mon Sep 17 00:00:00 2001 From: Terry J Hawkins Date: Wed, 10 Aug 2022 09:46:53 -0500 Subject: [PATCH 14/17] Integrating new ClinPath data source with existing datasource - refactored existing queries to include data from new sources. --- .../queries/pdl_workflow/pdlResults.query.xml | 18 +- .../queries/pdl_workflow/pdlResults.sql | 12 +- .../queries/pdl_workflow/pdlWorkflow.sql | 4 +- .../snprc_ehr/HL7BiochemistryPivot.sql | 23 +- .../queries/snprc_ehr/HL7HematologyPivot.sql | 26 +- .../queries/snprc_ehr/HL7HistologyPivot.sql | 34 +-- .../queries/snprc_ehr/HL7MiscPivot.sql | 34 +-- .../snprc_ehr/HL7ParasitologyPivot.sql | 34 +-- .../snprc_ehr/HL7SurveillancePivot.sql | 29 +-- .../snprc_ehr/HL7SurveillancePivotInner.sql | 79 +++--- .../resources/queries/snprc_ehr/HL7_OBR.js | 5 + .../queries/spf_workflow/spfResults.sql | 7 +- .../queries/spf_workflow/spfWorkflow.sql | 1 - .../resources/queries/study/CulturePivot.sql | 33 ++- .../queries/study/assay_labworkResults.js | 43 +++- .../study/assay_labworkResults.query.xml | 2 +- .../resources/queries/study/chemPivot.sql | 3 +- .../queries/study/chemPivotInner.sql | 19 +- .../queries/study/clinpathRunsAll.sql | 32 ++- .../queries/study/culturePivotInner.sql | 26 ++ .../queries/study/hematologyPivot.sql | 4 +- .../queries/study/hematologyPivotInner.sql | 22 +- .../queries/study/labworkResultsAll.query.xml | 2 +- .../queries/study/labworkResultsAll.sql | 10 +- .../resources/queries/study/labworkTaqman.sql | 6 +- .../sqlserver/snprc_ehr-21.001-22.000.sql | 236 ++++++++++++------ .../HL7/HL7_admin_permissions.sql | 18 +- 27 files changed, 429 insertions(+), 333 deletions(-) create mode 100644 snprc_ehr/resources/queries/snprc_ehr/HL7_OBR.js create mode 100644 snprc_ehr/resources/queries/study/culturePivotInner.sql diff --git a/snprc_ehr/resources/queries/pdl_workflow/pdlResults.query.xml b/snprc_ehr/resources/queries/pdl_workflow/pdlResults.query.xml index b4e6b182b..8688f263f 100644 --- a/snprc_ehr/resources/queries/pdl_workflow/pdlResults.query.xml +++ b/snprc_ehr/resources/queries/pdl_workflow/pdlResults.query.xml @@ -52,11 +52,6 @@ Ref Range true false -
Abnormal Flags @@ -74,27 +69,16 @@ true Method - - - - - - true true study - ClinpathRuns + ClinpathRunsAll objectid diff --git a/snprc_ehr/resources/queries/pdl_workflow/pdlResults.sql b/snprc_ehr/resources/queries/pdl_workflow/pdlResults.sql index 135f80110..d1d79bed7 100644 --- a/snprc_ehr/resources/queries/pdl_workflow/pdlResults.sql +++ b/snprc_ehr/resources/queries/pdl_workflow/pdlResults.sql @@ -17,28 +17,18 @@ Purpose: ETL from SPF assay tables to assay_labworkResults and ultimately SurveillancePivot Author: Charles Peterson, Texas Biomedical Research Institute, October 17, 2018 */ --- noinspection SqlNoDataSourceInspection select distinct - case when d.snprc_id is NULL then - d.pdl_animal_id - else d.snprc_id end as Id, + COALESCE(d.snprc_id, d.pdl_animal_id) as Id, d.sample_date as date, d.procedure_name as panelName, NULL as serviceTestId, d.procedure_id as serviceId, d.test_id as testid, d.test_name as test_name, -/* d.Run as runId, */ NULL as runId, NULL as result, 'ST' as value_type, d.results as qualresult, d.file_name as remark, d.sample as sampleId - -/* ServiceName debugging hack - ,d.test_id as refRange, - d.procedure_id as abnormal_flags, - d.test_name as resultOORIndicator */ - from pdl_workflow.data as d diff --git a/snprc_ehr/resources/queries/pdl_workflow/pdlWorkflow.sql b/snprc_ehr/resources/queries/pdl_workflow/pdlWorkflow.sql index 1924314ee..9aadd5b2e 100644 --- a/snprc_ehr/resources/queries/pdl_workflow/pdlWorkflow.sql +++ b/snprc_ehr/resources/queries/pdl_workflow/pdlWorkflow.sql @@ -18,9 +18,7 @@ Author: Charles Peterson, Texas Biomedical Research Institute, September 20, 2018 */ select distinct - case when d.snprc_id is NULL then - d.pdl_animal_id - else d.snprc_id end as Id, + COALESCE(d.snprc_id, d.pdl_animal_id) as Id, d.sample_date as date, d.report_date as datefinalized, d.procedure_id as serviceId, diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.sql index 712826bf7..967fc1fbe 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.sql @@ -1,14 +1,3 @@ -/* Valid Service types: - Biochemistry - Culture - Hematology - Histology - Misc Tests - Parasitology - Surveillance - Unknown - Urinalysis - */ SELECT obr.ANIMAL_ID as id, obr.OBSERVATION_DATE_TM as date, @@ -23,14 +12,14 @@ SELECT FROM snprc_ehr.HL7_OBR obr LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID - LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_GroupNTE AS nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID WHERE obr.PROCEDURE_ID.Dataset = 'Biochemistry' GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, obr.PROCEDURE_NAME, obr.PROCEDURE_ID, nte.COMMENT, obx.TEST_NAME PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TEST_NAME --- IN --- ( --- select TestName as TEST_NAME from snprc_ehr.labwork_panels t --- where t.includeInPanel = true AND t.ServiceId.Dataset='Biochemistry' --- ) \ No newline at end of file + IN + ( + select TestName as TEST_NAME from snprc_ehr.labwork_panels t + where t.includeInPanel = true AND t.ServiceId.Dataset='Biochemistry' + ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot.sql index 2a208a0fc..922105f48 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7HematologyPivot.sql @@ -2,24 +2,24 @@ SELECT obr.ANIMAL_ID as id, obr.OBSERVATION_DATE_TM as date, obr.MESSAGE_ID, - obr.PROCEDURE_NAME, + COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME) as PROCEDURE_NAME, obr.PROCEDURE_ID, nte.COMMENT, - obx.TEST_NAME, + COALESCE (lp.TestName, obx.TEST_NAME) as TestName, MAX(obx.ABNORMAL_FLAGS) AS ABNORMAL_FLAGS, - MAX(obx.QUALITATIVE_RESULT) as QUALITATIVE_RESULT, - MAX(obx.RESULT) as RESULT + COALESCE(MAX(obx.RESULT), MAX(obx.QUALITATIVE_RESULT)) as RESULT FROM snprc_ehr.HL7_OBR obr -LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID -LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId + LEFT OUTER JOIN snprc_ehr.HL7_GroupNTE AS nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID WHERE obr.PROCEDURE_ID.Dataset = 'Hematology' -GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, obr.PROCEDURE_NAME, obr.PROCEDURE_ID, nte.COMMENT, obx.TEST_NAME -PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TEST_NAME +GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME), obr.SET_ID, obr.PROCEDURE_NAME, obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) + PIVOT RESULT, ABNORMAL_FLAGS BY TestName --- IN --- ( --- select TestName as TEST_NAME from snprc_ehr.labwork_panels t --- where t.includeInPanel = true AND t.ServiceId.Dataset='Hematology' --- ) \ No newline at end of file + IN + ( + select TestName as TEST_NAME from snprc_ehr.labwork_panels t + where t.includeInPanel = true AND t.ServiceId.Dataset='Hematology' + ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot.sql index 7ae200bd3..4da23711c 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7HistologyPivot.sql @@ -1,14 +1,3 @@ -/* Valid Service types: - Biochemistry - Culture - Hematology - Histology - Misc Tests - Parasitology - Surveillance - Unknown - Urinalysis - */ SELECT obr.ANIMAL_ID as id, obr.OBSERVATION_DATE_TM as date, obr.MESSAGE_ID, @@ -16,23 +5,20 @@ SELECT obr.ANIMAL_ID as id, obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) as TestName, - --obx.TEST_ID, MAX(obx.ABNORMAL_FLAGS) AS ABNORMAL_FLAGS, - MAX(obx.QUALITATIVE_RESULT) as QUALITATIVE_RESULT, - MAX(obx.RESULT) as RESULT + COALESCE(MAX(obx.RESULT), MAX(obx.QUALITATIVE_RESULT)) as RESULT FROM snprc_ehr.HL7_OBR obr - LEFT OUTER JOIN snprc_ehr.HL7_OBX obx -ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID - LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_GroupNTE AS nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId WHERE obr.PROCEDURE_ID.Dataset = 'Histology' GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME), obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) - PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TestName --- --- IN --- ( --- select TestName from snprc_ehr.labwork_panels t --- where t.includeInPanel = true AND t.ServiceId.Dataset='Histology' --- ) \ No newline at end of file + PIVOT RESULT, ABNORMAL_FLAGS BY TestName + + IN + ( + select TestName from snprc_ehr.labwork_panels t + where t.includeInPanel = true AND t.ServiceId.Dataset='Histology' + ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot.sql index 197c07be4..c0ae8b840 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7MiscPivot.sql @@ -1,14 +1,3 @@ -/* Valid Service types: - Biochemistry - Culture - Hematology - Histology - Misc Tests - Parasitology - Surveillance - Unknown - Urinalysis - */ SELECT obr.ANIMAL_ID as id, obr.OBSERVATION_DATE_TM as date, obr.MESSAGE_ID, @@ -16,23 +5,20 @@ SELECT obr.ANIMAL_ID as id, obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) as TestName, - --obx.TEST_ID, MAX(obx.ABNORMAL_FLAGS) AS ABNORMAL_FLAGS, - MAX(obx.QUALITATIVE_RESULT) as QUALITATIVE_RESULT, - MAX(obx.RESULT) as RESULT + COALESCE(MAX(obx.RESULT), MAX(obx.QUALITATIVE_RESULT)) as RESULT FROM snprc_ehr.HL7_OBR obr - LEFT OUTER JOIN snprc_ehr.HL7_OBX obx -ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID - LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_GroupNTE AS nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId WHERE obr.PROCEDURE_ID.Dataset = 'Misc Tests' GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME), obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) - PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TestName --- --- IN --- ( --- select TestName from snprc_ehr.labwork_panels t --- where t.includeInPanel = true AND t.ServiceId.Dataset='Misc Tests' --- ) \ No newline at end of file + PIVOT RESULT, ABNORMAL_FLAGS BY TestName + + IN + ( + select TestName from snprc_ehr.labwork_panels t + where t.includeInPanel = true AND t.ServiceId.Dataset='Misc Tests' + ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot.sql index 7228c9af7..7ae88f4da 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7ParasitologyPivot.sql @@ -1,14 +1,3 @@ -/* Valid Service types: - Biochemistry - Culture - Hematology - Histology - Misc Tests - Parasitology - Surveillance - Unknown - Urinalysis - */ SELECT obr.ANIMAL_ID as id, obr.OBSERVATION_DATE_TM as date, obr.MESSAGE_ID, @@ -16,23 +5,20 @@ SELECT obr.ANIMAL_ID as id, obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) as TestName, - --obx.TEST_ID, MAX(obx.ABNORMAL_FLAGS) AS ABNORMAL_FLAGS, - MAX(obx.QUALITATIVE_RESULT) as QUALITATIVE_RESULT, - MAX(obx.RESULT) as RESULT + COALESCE(MAX(obx.RESULT), MAX(obx.QUALITATIVE_RESULT)) as RESULT FROM snprc_ehr.HL7_OBR obr - LEFT OUTER JOIN snprc_ehr.HL7_OBX obx -ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID - LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_GroupNTE AS nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId WHERE obr.PROCEDURE_ID.Dataset = 'Parasitology' GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME), obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) - PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TestName --- --- IN --- ( --- select TestName from snprc_ehr.labwork_panels t --- where t.includeInPanel = true AND t.ServiceId.Dataset='Parasitology' --- ) \ No newline at end of file + PIVOT RESULT, ABNORMAL_FLAGS BY TestName + + IN + ( + select TestName from snprc_ehr.labwork_panels t + where t.includeInPanel = true AND t.ServiceId.Dataset='Parasitology' + ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot.sql index d64d8b19d..72b10db45 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot.sql @@ -1,15 +1,4 @@ -/* Valid Service types: - Biochemistry - Culture - Hematology - Histology - Misc Tests - Parasitology - Surveillance - Unknown - Urinalysis - */ - select Id, +select Id, date, MESSAGE_ID, PROCEDURE_NAME, @@ -17,16 +6,14 @@ COMMENT, TestName, MAX(ABNORMAL_FLAGS) as ABNORMAL_FLAGS, - MAX(QUALITATIVE_RESULT) as QUALITATIVE_RESULT, - MAX(RESULT) as RESULT + COALESCE(MAX(RESULT), MAX(QUALITATIVE_RESULT)) as RESULT from snprc_ehr.HL7SurveillancePivotInner GROUP BY id, date, MESSAGE_ID, PROCEDURE_NAME, PROCEDURE_NAME, PROCEDURE_ID, COMMENT, TestName - PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TestName --- --- IN --- ( --- select TestName from snprc_ehr.labwork_panels t --- where t.includeInPanel = true AND t.ServiceId.Dataset='Surveillance' --- ) + PIVOT RESULT, ABNORMAL_FLAGS BY TestName + IN + ( + select TestName from snprc_ehr.labwork_panels t + where t.includeInPanel = true AND t.ServiceId.Dataset='Surveillance' + ) diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivotInner.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivotInner.sql index 80b736bc1..ebb295120 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivotInner.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivotInner.sql @@ -1,17 +1,6 @@ -/* Valid Service types: - Biochemistry - Culture - Hematology - Histology - Misc Tests - Parasitology - Surveillance - Unknown - Urinalysis - */ - SELECT - obr.ANIMAL_ID AS Id, - obr.OBSERVATION_DATE_TM as date, +SELECT + obr.ANIMAL_ID AS Id, + obr.OBSERVATION_DATE_TM as date, obr.MESSAGE_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME) as PROCEDURE_NAME, obr.PROCEDURE_ID, @@ -21,40 +10,40 @@ obx.QUALITATIVE_RESULT, obx.RESULT - FROM snprc_ehr.HL7_OBR obr +FROM snprc_ehr.HL7_OBR obr LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID - LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_GroupNTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId - WHERE obr.PROCEDURE_ID.Dataset = 'Surveillance' +WHERE obr.PROCEDURE_ID.Dataset = 'Surveillance' - UNION +UNION - SELECT - b.id, - b.date, - coalesce(b.runId, cast(b.Sequencenum as varchar)) as MESSAGE_ID, - b.serviceTestId.serviceId.ServiceName AS PROCEDURE_NAME, - b.serviceTestId.serviceId AS PROCEDURE_ID, - b.serviceTestId.testName AS TestName, - b.remark as COMMENT, - '' AS ABNORMAL_FLAGS, - b.qualresult as QUALITATIVE_RESULT, - b.RESULT as RESULT - FROM study.labworkTaqman b - WHERE b.serviceTestId.includeInPanel = true and b.qcstate.publicdata = true and b.serviceTestid.ServiceId.Dataset = 'Surveillance' +SELECT + b.id, + b.date, + coalesce(b.runId, cast(b.Sequencenum as varchar)) as MESSAGE_ID, + b.serviceTestId.serviceId.ServiceName AS PROCEDURE_NAME, + b.serviceTestId.serviceId AS PROCEDURE_ID, + b.serviceTestId.testName AS TestName, + b.remark as COMMENT, + '' AS ABNORMAL_FLAGS, + b.qualresult as QUALITATIVE_RESULT, + b.RESULT as RESULT +FROM study.labworkTaqman b +WHERE b.serviceTestId.includeInPanel = true and b.qcstate.publicdata = true and b.serviceTestid.ServiceId.Dataset = 'Surveillance' - union +union - SELECT - b.id, - b.date, - coalesce(b.runId, b.objectid) as MESSAGE_ID, - b.serviceTestId.serviceId.ServiceName AS PROCEDURE_NAME, - b.serviceTestId.serviceId AS PROCEDURE_ID, - b.serviceTestId.testName AS TestName, - b.remark as COMMENT, - '' AS ABNORMAL_FLAGS, - b.qualresult as QUALITATIVE_RESULT, - b.RESULT as RESULT - FROM study.assay_labworkResults b - WHERE b.serviceTestId.includeInPanel = true and b.qcstate.publicdata = true and b.serviceTestid.ServiceId.Dataset = 'Surveillance' \ No newline at end of file +SELECT + b.id, + b.date, + coalesce(b.runId, b.objectid) as MESSAGE_ID, + b.serviceTestId.serviceId.ServiceName AS PROCEDURE_NAME, + b.serviceTestId.serviceId AS PROCEDURE_ID, + b.serviceTestId.testName AS TestName, + b.remark as COMMENT, + '' AS ABNORMAL_FLAGS, + b.qualresult as QUALITATIVE_RESULT, + NULL as RESULT +FROM study.assay_labworkResults b +WHERE b.serviceTestId.includeInPanel = true and b.qcstate.publicdata = true and b.serviceTestid.ServiceId.Dataset = 'Surveillance' \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7_OBR.js b/snprc_ehr/resources/queries/snprc_ehr/HL7_OBR.js new file mode 100644 index 000000000..ea0a2ee5e --- /dev/null +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7_OBR.js @@ -0,0 +1,5 @@ +/** + * Created by thawkins on 8/8/2022 + */ + +require("ehr/triggers").initScript(this); diff --git a/snprc_ehr/resources/queries/spf_workflow/spfResults.sql b/snprc_ehr/resources/queries/spf_workflow/spfResults.sql index 348313687..273fb08a6 100644 --- a/snprc_ehr/resources/queries/spf_workflow/spfResults.sql +++ b/snprc_ehr/resources/queries/spf_workflow/spfResults.sql @@ -26,7 +26,7 @@ select distinct d.procedure_id as serviceId, d.test_id as testid, d.test_name as test_name, - d.sample as runId, + NULL as runId, NULL as result, 'ST' as value_type, case when d.assay_value = 'N' then 'NEGATIVE' @@ -35,9 +35,4 @@ select distinct else d.assay_value end as qualresult, d.file_name as remark, d.sample as sampleId - -/* ServiceName debugging hack - ,d.test_id as refRange, - d.procedure_id as abnormal_flags */ - from spf_workflow.data as d diff --git a/snprc_ehr/resources/queries/spf_workflow/spfWorkflow.sql b/snprc_ehr/resources/queries/spf_workflow/spfWorkflow.sql index 5b88a2636..22026425a 100644 --- a/snprc_ehr/resources/queries/spf_workflow/spfWorkflow.sql +++ b/snprc_ehr/resources/queries/spf_workflow/spfWorkflow.sql @@ -27,5 +27,4 @@ 'Surveillance' as type, d.file_name as remark, d.sample as sampleId - from spf_workflow.data as d diff --git a/snprc_ehr/resources/queries/study/CulturePivot.sql b/snprc_ehr/resources/queries/study/CulturePivot.sql index bcbebe482..d55fff6bf 100644 --- a/snprc_ehr/resources/queries/study/CulturePivot.sql +++ b/snprc_ehr/resources/queries/study/CulturePivot.sql @@ -19,24 +19,19 @@ srr 04.02.2019 ******************************************************************************/ SELECT - p.runid, - p.Id, - p.date, - p.serviceTestId.testName as TestName, - p.runId.serviceRequested as PanelName, - p.remark, - GROUP_CONCAT(p.qualresult) as QResults + b.Id, + b.date, + b.panelName, + b.TestName, + b.remark, + MAX(b.result) as results +FROM culturePivotInner b -FROM study.labworkResults as p - inner join snprc_ehr.labwork_panels as lt - on p.serviceTestid = lt.rowId - and lt.ServiceId.Dataset='Culture' +GROUP BY b.panelName, b.id, b.date, b.TestName, b.remark -where p.id is not null - group by p.runid, p.Id, p.date,p.serviceTestId.testName, p.remark, p.runId.serviceRequested - PIVOT QResults by TestName IN - (select t.testName from snprc_ehr.labwork_panels t - where t.includeInPanel = true - and t.ServiceId.Dataset = 'Culture' - order by t.TestName asc - ); + PIVOT results BY TestName IN + +(select TestName from snprc_ehr.labwork_panels t + where t.includeInPanel = true AND t.ServiceId.Dataset='Culture' + order by t.TestName asc +) diff --git a/snprc_ehr/resources/queries/study/assay_labworkResults.js b/snprc_ehr/resources/queries/study/assay_labworkResults.js index 098dc1801..f98df5250 100644 --- a/snprc_ehr/resources/queries/study/assay_labworkResults.js +++ b/snprc_ehr/resources/queries/study/assay_labworkResults.js @@ -12,6 +12,7 @@ require("ehr/triggers").initScript(this); var cachedIds = {}; var cacheKey = ''; +let runIdCache = {}; // the missing value codes will link the record up to an unknown service (needed for ancient legacy data) var missingServiceId = 999999; @@ -31,10 +32,21 @@ function onUpsert(helper, scriptErrors, row, oldRow) { } else { - // console.log("Cache hit: " + cachedIds[cacheKey]); + //console.log("Cache hit: " + cachedIds[cacheKey]); } } + if (!row.runId) { + row.runId = runIdCache[row.sampleId]; + + if (row.runId === undefined || row.runId == 'undefined') { + assignRunId(row, row.sampleId); + } + else + { + //console.log("RunId Cache hit: " + runIdCache[row.sampleId]); + } + } } function assignServiceTestId (row, serviceId, testid ) { @@ -69,4 +81,33 @@ function assignServiceTestId (row, serviceId, testid ) { }); return result; +} + +function assignRunId (row, sampleId ) { + + let result = true; + + LABKEY.Query.selectRows({ + schemaName: 'study', + queryName: 'assay_clinpathRuns', + columns: '_key', + scope: this, + filterArray: [ + LABKEY.Filter.create('sampleId', sampleId, LABKEY.Filter.Types.EQUAL) + ], + success: function (data) { + if (data.rows && data.rows.length) { + row.runId = data.rows[0]._key; + runIdCache[row.sampleId] = row.runId; + } + else { + result = false; + } + }, + failure: function (error) { + console.log('Select rows error'); + console.log(error); + } + }); + return result; } \ No newline at end of file diff --git a/snprc_ehr/resources/queries/study/assay_labworkResults.query.xml b/snprc_ehr/resources/queries/study/assay_labworkResults.query.xml index eb14702d8..9674e2b9d 100644 --- a/snprc_ehr/resources/queries/study/assay_labworkResults.query.xml +++ b/snprc_ehr/resources/queries/study/assay_labworkResults.query.xml @@ -80,7 +80,7 @@ study assay_ClinpathRuns - sampleid + objectId diff --git a/snprc_ehr/resources/queries/study/chemPivot.sql b/snprc_ehr/resources/queries/study/chemPivot.sql index 55329ed5d..a2c532cde 100644 --- a/snprc_ehr/resources/queries/study/chemPivot.sql +++ b/snprc_ehr/resources/queries/study/chemPivot.sql @@ -16,7 +16,6 @@ SELECT b.Id, b.date, -b.runId, b.panelName, b.TestName, b.remark, @@ -24,7 +23,7 @@ MAX(b.result) as results FROM chemPivotInner b -GROUP BY b.runid,b.id, b.date, b.TestName, b.panelName, b.remark +GROUP BY b.id, b.date, b.TestName, b.panelName, b.remark PIVOT results BY TestName IN (select TestName from snprc_ehr.labwork_panels t diff --git a/snprc_ehr/resources/queries/study/chemPivotInner.sql b/snprc_ehr/resources/queries/study/chemPivotInner.sql index 92c804c7f..8df208be0 100644 --- a/snprc_ehr/resources/queries/study/chemPivotInner.sql +++ b/snprc_ehr/resources/queries/study/chemPivotInner.sql @@ -18,13 +18,26 @@ SELECT b.date, b.runId.serviceRequested as panelName, b.serviceTestId.testName AS TestName, - - coalesce(b.runId, b.objectid) as runId, b.remark, - b.resultoorindicator, CASE WHEN b.result IS NULL THEN b.qualresult ELSE CAST(CAST(b.result AS float) AS VARCHAR) END as result FROM study.labworkResults b WHERE b.serviceTestId.includeInPanel = true and b.qcstate.publicdata = true and b.serviceTestid.ServiceId.Dataset = 'Biochemistry' + +UNION + +SELECT + obr.ANIMAL_ID as id, + obr.OBSERVATION_DATE_TM as date, + obr.PROCEDURE_NAME as panelName, + obx.TEST_NAME as TestName, + nte.COMMENT as remark, + COALESCE(obx.RESULT, obx.QUALITATIVE_RESULT) as result + +FROM snprc_ehr.HL7_OBR obr + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_GroupNTE AS nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID +WHERE obr.PROCEDURE_ID.Dataset = 'Biochemistry' + diff --git a/snprc_ehr/resources/queries/study/clinpathRunsAll.sql b/snprc_ehr/resources/queries/study/clinpathRunsAll.sql index 596f7cca3..085f219d6 100644 --- a/snprc_ehr/resources/queries/study/clinpathRunsAll.sql +++ b/snprc_ehr/resources/queries/study/clinpathRunsAll.sql @@ -13,6 +13,34 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +select + ANIMAL_ID as Id, + OBSERVATION_DATE_TM AS date, + NULL AS enddate, + PROCEDURE_ID.Dataset.ServiceType AS type, + NULL as tissue, + CHARGE_ID AS project, + NULL AS instructions, + PROCEDURE_ID.ServiceName AS servicerequested, + NULL AS units, + PROCEDURE_ID AS serviceId, + NULL AS collectedBy, + SPECIMEN_NUM AS sampleId, + NULL AS collectionMethod, + NULL AS method, + NULL AS sampleQuantity, + NULL AS quantityUnits, + NULL AS chargetype, + VERIFIED_DATE_TM AS verifiedDate, + NULL AS datefinalized, + NULL AS remark, + NULL AS history, + OBJECT_ID AS objectid, + NULL AS lsid +from snprc_ehr.HL7_OBR + +union + select Id, date, @@ -63,7 +91,7 @@ select datefinalized, remark, history, - sampleId as objectid, + objectid, lsid from study.assay_clinpathRuns @@ -91,7 +119,7 @@ select distinct tr.date as datefinalized, 'From Excel import' as remark, tr.history as history, - cast(tr.sequencenum as varchar) as objectid, + null as objectid, tr.lsid from study.TaqmanResults as tr inner join snprc_ehr.labwork_services as ls on ls.serviceId = 20000 diff --git a/snprc_ehr/resources/queries/study/culturePivotInner.sql b/snprc_ehr/resources/queries/study/culturePivotInner.sql new file mode 100644 index 000000000..b7f69e5aa --- /dev/null +++ b/snprc_ehr/resources/queries/study/culturePivotInner.sql @@ -0,0 +1,26 @@ +SELECT + p.Id as Id, + p.date, + p.serviceTestId.testName as TestName, + p.runId.serviceRequested as PanelName, + p.remark, + p.qualresult as result + +FROM study.labworkResults as p +WHERE p.serviceTestId.includeInPanel = true AND p.serviceTestid.ServiceId.Dataset ='Culture' + +UNION + +SELECT + obr.ANIMAL_ID as id, + obr.OBSERVATION_DATE_TM as date, + COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME) as PanelName, + COALESCE (lp.TestName, obx.TEST_NAME) as TestName, + nte.COMMENT as remark, + COALESCE(obx.RESULT, obx.QUALITATIVE_RESULT) as result + +FROM snprc_ehr.HL7_OBR obr + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId + LEFT OUTER JOIN snprc_ehr.HL7_GroupNTE AS nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID +WHERE obr.PROCEDURE_ID.Dataset = 'Culture' diff --git a/snprc_ehr/resources/queries/study/hematologyPivot.sql b/snprc_ehr/resources/queries/study/hematologyPivot.sql index 8141a936e..609bf290d 100644 --- a/snprc_ehr/resources/queries/study/hematologyPivot.sql +++ b/snprc_ehr/resources/queries/study/hematologyPivot.sql @@ -16,7 +16,6 @@ SELECT b.Id, b.date, -b.runid, b.panelName, b.TestName, b.remark, @@ -24,10 +23,9 @@ MAX(b.result) as results FROM hematologyPivotInner b -GROUP BY b.runid, b.panelName, b.id, b.date, b.TestName, b.remark +GROUP BY b.panelName, b.id, b.date, b.TestName, b.remark PIVOT results BY TestName IN (select TestName from snprc_ehr.labwork_panels t where t.includeInPanel = true AND t.ServiceId.Dataset='Hematology' ) - diff --git a/snprc_ehr/resources/queries/study/hematologyPivotInner.sql b/snprc_ehr/resources/queries/study/hematologyPivotInner.sql index 5dd2e2264..9a7040b46 100644 --- a/snprc_ehr/resources/queries/study/hematologyPivotInner.sql +++ b/snprc_ehr/resources/queries/study/hematologyPivotInner.sql @@ -18,12 +18,26 @@ SELECT b.date, b.runId.serviceRequested as panelName, b.serviceTestId.testName AS TestName, - coalesce(b.runId, b.objectid) as runId, b.remark, - b.resultoorindicator, CASE WHEN b.result IS NULL THEN b.qualresult ELSE CAST(CAST(b.result AS float) AS VARCHAR) END as result - FROM study.labworkResultsAll b - WHERE b.serviceTestId.includeInPanel = true and b.serviceTestid.ServiceId.Dataset = 'Hematology' \ No newline at end of file +FROM study.labworkResults b +WHERE b.serviceTestId.includeInPanel = true and b.serviceTestid.ServiceId.Dataset = 'Hematology' + +UNION + +SELECT + obr.ANIMAL_ID as id, + obr.OBSERVATION_DATE_TM as date, + COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME) as PanelName, + COALESCE (lp.TestName, obx.TEST_NAME) as TestName, + nte.COMMENT as remark, + COALESCE(obx.RESULT, obx.QUALITATIVE_RESULT) as result + +FROM snprc_ehr.HL7_OBR obr + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId + LEFT OUTER JOIN snprc_ehr.HL7_GroupNTE AS nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID +WHERE obr.PROCEDURE_ID.Dataset = 'Hematology' diff --git a/snprc_ehr/resources/queries/study/labworkResultsAll.query.xml b/snprc_ehr/resources/queries/study/labworkResultsAll.query.xml index b754987e5..8a08fc79b 100644 --- a/snprc_ehr/resources/queries/study/labworkResultsAll.query.xml +++ b/snprc_ehr/resources/queries/study/labworkResultsAll.query.xml @@ -83,7 +83,7 @@ study - ClinpathRuns + ClinpathRunsAll objectid diff --git a/snprc_ehr/resources/queries/study/labworkResultsAll.sql b/snprc_ehr/resources/queries/study/labworkResultsAll.sql index 478510b3a..359135d1f 100644 --- a/snprc_ehr/resources/queries/study/labworkResultsAll.sql +++ b/snprc_ehr/resources/queries/study/labworkResultsAll.sql @@ -61,20 +61,14 @@ SELECT obx.QUALITATIVE_RESULT as qualresult, obx.REFERENCE_RANGE as refRange, obx.ABNORMAL_FLAGS as abnormal_flags, - obx.MESSAGE_ID as runId, + obx.OBR_OBJECT_ID as runId, NULL as enddate, NULL as method, nte.COMMENT as remark, obx.OBJECT_ID AS objectId FROM snprc_ehr.HL7_OBR obr LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID - LEFT OUTER JOIN - ( - select nte.OBR_OBJECT_ID, nte.OBR_SET_ID, GROUP_CONCAT(nte.COMMENT) as COMMENT - from snprc_ehr.HL7_NTE nte - group by nte.OBR_OBJECT_ID, nte.OBR_SET_ID - - ) AS nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_GroupNTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId UNION diff --git a/snprc_ehr/resources/queries/study/labworkTaqman.sql b/snprc_ehr/resources/queries/study/labworkTaqman.sql index f42838437..54b39b8e6 100644 --- a/snprc_ehr/resources/queries/study/labworkTaqman.sql +++ b/snprc_ehr/resources/queries/study/labworkTaqman.sql @@ -12,7 +12,7 @@ SELECT tr.SWBV AS qualresult, NULL AS refRange, NULL AS abnormal_flags, - cast(tr.sequencenum as varchar) AS runid, + null AS runid, NULL AS enddate, NULL AS method, 'From Excel import' AS remark, @@ -31,7 +31,7 @@ SELECT tr.date, 0 AS project, lp.ServiceId, - lp.ObjectId AS serviceTestId, + lp.ObjectId AS serviceTestId, lp.TestId, NULL AS resultOORIndicator, 'TX' AS value_type, @@ -40,7 +40,7 @@ SELECT tr.STLV1 AS qualresult, NULL AS refRange, NULL AS abnormal_flags, - cast(tr.sequencenum as varchar) AS runid, + null AS runid, NULL AS enddate, NULL AS method, 'From Excel import', diff --git a/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-21.001-22.000.sql b/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-21.001-22.000.sql index 6a857fde9..8a9f71325 100644 --- a/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-21.001-22.000.sql +++ b/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-21.001-22.000.sql @@ -1,5 +1,5 @@ /******************************************************* -New staging tables for Orchard clinical path data integration via HL7 +New tables for Orchard clinical path data integration via HL7 05/19/22 - Terry Hawkins */ @@ -8,44 +8,52 @@ New staging tables for Orchard clinical path data integration via HL7 */ EXEC core.fn_dropifexists @objname = 'HL7_IMPORT_LOG',@objschema = 'snprc_ehr', @objtype = 'TABLE'; -EXEC core.fn_dropifexists @objname = 'HL7_OBX_Staging',@objschema = 'snprc_ehr', @objtype = 'TABLE'; -EXEC core.fn_dropifexists @objname = 'HL7_NTE_Staging',@objschema = 'snprc_ehr', @objtype = 'TABLE'; -EXEC core.fn_dropifexists @objname = 'HL7_OBR_Staging',@objschema = 'snprc_ehr', @objtype = 'TABLE'; -EXEC core.fn_dropifexists @objname = 'HL7_PID_Staging',@objschema = 'snprc_ehr', @objtype = 'TABLE'; -EXEC core.fn_dropifexists @objname = 'HL7_PV1_Staging',@objschema = 'snprc_ehr', @objtype = 'TABLE'; -EXEC core.fn_dropifexists @objname = 'HL7_ORC_Staging',@objschema = 'snprc_ehr', @objtype = 'TABLE'; -EXEC core.fn_dropifexists @objname = 'HL7_MSH_Staging',@objschema = 'snprc_ehr', @objtype = 'TABLE'; - -CREATE TABLE [snprc_ehr].[HL7_MSH_Staging]( +EXEC core.fn_dropifexists @objname = 'HL7_OBX',@objschema = 'snprc_ehr', @objtype = 'TABLE'; +EXEC core.fn_dropifexists @objname = 'HL7_NTE',@objschema = 'snprc_ehr', @objtype = 'TABLE'; +EXEC core.fn_dropifexists @objname = 'HL7_OBR',@objschema = 'snprc_ehr', @objtype = 'TABLE'; +EXEC core.fn_dropifexists @objname = 'HL7_PID',@objschema = 'snprc_ehr', @objtype = 'TABLE'; +EXEC core.fn_dropifexists @objname = 'HL7_PV1',@objschema = 'snprc_ehr', @objtype = 'TABLE'; +EXEC core.fn_dropifexists @objname = 'HL7_ORC',@objschema = 'snprc_ehr', @objtype = 'TABLE'; +EXEC core.fn_dropifexists @objname = 'HL7_MSH',@objschema = 'snprc_ehr', @objtype = 'TABLE'; +EXEC core.fn_dropifexists @objname = 'f_isNumeric',@objschema = 'snprc_ehr', @objtype = 'FUNCTION'; + +CREATE TABLE [snprc_ehr].[HL7_MSH]( [MESSAGE_ID] [VARCHAR](50) NOT NULL, [IDX] [INT] NOT NULL, [SENDING_APPLICATION] [VARCHAR](50) NULL, [SENDING_FACILITY] [VARCHAR](50) NULL, [RECEIVING_APPLICATION] [VARCHAR](50) NULL, [RECEIVING_FACILITY] [VARCHAR](50) NULL, + [MESSAGE_TYPE] [VARCHAR](50) NULL, -- MSH_F9_C1 + [TRIGGER_EVENT_ID][VARCHAR](50) NULL, -- MSH_F9_C2 [MESSAGE_CONTROL_ID] [VARCHAR](50) NULL, [MESSAGE_DATE_TM] [DATETIME] NULL, + [Container] [dbo].[ENTITYID] NOT NULL, [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, [USER_NAME] [VARCHAR](128) NOT NULL, [ENTRY_DATE_TM] [DATETIME] NOT NULL, [TIMESTAMP] [TIMESTAMP] NULL, - CONSTRAINT [PK_HL7_MSH_Staging] PRIMARY KEY CLUSTERED + CONSTRAINT [PK_HL7_MSH] PRIMARY KEY CLUSTERED ( [MESSAGE_ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ) GO -ALTER TABLE [snprc_ehr].[HL7_MSH_Staging] ADD CONSTRAINT [DF_HL7_MSH_Staging_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] +ALTER TABLE [snprc_ehr].[HL7_MSH] ADD CONSTRAINT [DF_HL7_MSH_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] GO -ALTER TABLE [snprc_ehr].[HL7_MSH_Staging] ADD CONSTRAINT [DF_HL7_MSH_Staging_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] +ALTER TABLE [snprc_ehr].[HL7_MSH] ADD CONSTRAINT [DF_HL7_MSH_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] GO -ALTER TABLE [snprc_ehr].[HL7_MSH_Staging] ADD CONSTRAINT [DF_HL7_MSH_Staging_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] +ALTER TABLE [snprc_ehr].[HL7_MSH] ADD CONSTRAINT [DF_HL7_MSH_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] GO -CREATE TABLE [snprc_ehr].[HL7_PID_Staging]( +ALTER TABLE [snprc_ehr].[HL7_MSH] WITH CHECK ADD CONSTRAINT [FK_HL7_MSH_container] FOREIGN KEY([Container]) + REFERENCES [core].[Containers] ([EntityId]) + GO + +CREATE TABLE [snprc_ehr].[HL7_PID]( [MESSAGE_ID] [VARCHAR](50) NOT NULL, [IDX] [INT] NOT NULL, [SET_ID] [VARCHAR](20) NULL, -- F1_C1 @@ -57,11 +65,12 @@ CREATE TABLE [snprc_ehr].[HL7_PID_Staging]( [SPECIES] [VARCHAR] (50) NULL, -- common name - F22_C1 (Ethnic Group) [ACCOUNT_NUMBER] [VARCHAR] (50) NULL, --F18_C1 [DEATH_DATE] [VARCHAR] (50) NULL, -- F29_C1 + [Container] [dbo].[ENTITYID] NOT NULL, [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, [USER_NAME] [VARCHAR](128) NOT NULL, [ENTRY_DATE_TM] [DATETIME] NOT NULL, [TIMESTAMP] [TIMESTAMP] NULL, - CONSTRAINT [PK_HL7_PID_Staging] PRIMARY KEY CLUSTERED + CONSTRAINT [PK_HL7_PID] PRIMARY KEY CLUSTERED ( [MESSAGE_ID] ASC, [IDX] @@ -69,30 +78,33 @@ CREATE TABLE [snprc_ehr].[HL7_PID_Staging]( ) GO -ALTER TABLE [snprc_ehr].[HL7_PID_Staging] ADD CONSTRAINT [DF_HL7_PID_Staging_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] +ALTER TABLE [snprc_ehr].[HL7_PID] ADD CONSTRAINT [DF_HL7_PID_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] GO -ALTER TABLE [snprc_ehr].[HL7_PID_Staging] ADD CONSTRAINT [DF_HL7_PID_Staging_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] +ALTER TABLE [snprc_ehr].[HL7_PID] ADD CONSTRAINT [DF_HL7_PID_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] GO -ALTER TABLE [snprc_ehr].[HL7_PID_Staging] ADD CONSTRAINT [DF_HL7_PID_Staging_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] +ALTER TABLE [snprc_ehr].[HL7_PID] ADD CONSTRAINT [DF_HL7_PID_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] GO -ALTER TABLE [snprc_ehr].[HL7_PID_Staging] WITH CHECK ADD CONSTRAINT [FK_PID_REF_MSH] FOREIGN KEY([MESSAGE_ID]) - REFERENCES [snprc_ehr].[HL7_MSH_Staging] ([MESSAGE_ID]) +ALTER TABLE [snprc_ehr].[HL7_PID] WITH CHECK ADD CONSTRAINT [FK_PID_REF_MSH] FOREIGN KEY([MESSAGE_ID]) + REFERENCES [snprc_ehr].[HL7_MSH] ([MESSAGE_ID]) GO -CREATE NONCLUSTERED INDEX [IDX_HL7_PID_ID] ON [snprc_ehr].[HL7_PID_Staging] +CREATE NONCLUSTERED INDEX [IDX_HL7_PID_ID] ON [snprc_ehr].[HL7_PID] ( [PATIENT_ID_EXTERNAL] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO +ALTER TABLE [snprc_ehr].[HL7_PID] CHECK CONSTRAINT [FK_PID_REF_MSH] + GO -ALTER TABLE [snprc_ehr].[HL7_PID_Staging] CHECK CONSTRAINT [FK_PID_REF_MSH] +ALTER TABLE [snprc_ehr].[HL7_PID] WITH CHECK ADD CONSTRAINT [FK_HL7_PID_container] FOREIGN KEY([Container]) + REFERENCES [core].[Containers] ([EntityId]) GO -CREATE TABLE [snprc_ehr].[HL7_PV1_Staging]( +CREATE TABLE [snprc_ehr].[HL7_PV1]( [MESSAGE_ID] [VARCHAR](50) NOT NULL, [IDX] [INT] NOT NULL, [SET_ID] [VARCHAR](20) NULL, -- F1_C1 @@ -102,11 +114,12 @@ CREATE TABLE [snprc_ehr].[HL7_PV1_Staging]( [VISIT_NUMBER] [VARCHAR] (20) NULL, -- F19_C1 [CHARGE_NUMBER] [VARCHAR] (20) NULL, -- F22_C1 (Courtesy Code) [ADMIT_DATE] [DATETIME] NULL, --F44_C1 + [Container] [dbo].[ENTITYID] NOT NULL, [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, [USER_NAME] [VARCHAR](128) NOT NULL, [ENTRY_DATE_TM] [DATETIME] NOT NULL, [TIMESTAMP] [TIMESTAMP] NULL, - CONSTRAINT [PK_HL7_PV1_Staging] PRIMARY KEY CLUSTERED + CONSTRAINT [PK_HL7_PV1] PRIMARY KEY CLUSTERED ( [MESSAGE_ID] ASC, [IDX] @@ -114,23 +127,27 @@ CREATE TABLE [snprc_ehr].[HL7_PV1_Staging]( ) GO -ALTER TABLE [snprc_ehr].[HL7_PV1_Staging] ADD CONSTRAINT [DF_HL7_PV1_Staging_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] +ALTER TABLE [snprc_ehr].[HL7_PV1] ADD CONSTRAINT [DF_HL7_PV1_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] GO -ALTER TABLE [snprc_ehr].[HL7_PV1_Staging] ADD CONSTRAINT [DF_HL7_PV1_Staging_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] +ALTER TABLE [snprc_ehr].[HL7_PV1] ADD CONSTRAINT [DF_HL7_PV1_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] GO -ALTER TABLE [snprc_ehr].[HL7_PV1_Staging] ADD CONSTRAINT [DF_HL7_PV1_Staging_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] +ALTER TABLE [snprc_ehr].[HL7_PV1] ADD CONSTRAINT [DF_HL7_PV1_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] GO -ALTER TABLE [snprc_ehr].[HL7_PV1_Staging] WITH CHECK ADD CONSTRAINT [FK_PV1_REF_MSH] FOREIGN KEY([MESSAGE_ID]) - REFERENCES [snprc_ehr].[HL7_MSH_Staging] ([MESSAGE_ID]) +ALTER TABLE [snprc_ehr].[HL7_PV1] WITH CHECK ADD CONSTRAINT [FK_PV1_REF_MSH] FOREIGN KEY([MESSAGE_ID]) + REFERENCES [snprc_ehr].[HL7_MSH] ([MESSAGE_ID]) GO -ALTER TABLE [snprc_ehr].[HL7_PV1_Staging] CHECK CONSTRAINT [FK_PV1_REF_MSH] +ALTER TABLE [snprc_ehr].[HL7_PV1] CHECK CONSTRAINT [FK_PV1_REF_MSH] GO -CREATE TABLE [snprc_ehr].[HL7_ORC_Staging]( +ALTER TABLE [snprc_ehr].[HL7_PV1] WITH CHECK ADD CONSTRAINT [FK_HL7_PV1_container] FOREIGN KEY([Container]) + REFERENCES [core].[Containers] ([EntityId]) + GO + +CREATE TABLE [snprc_ehr].[HL7_ORC]( [MESSAGE_ID] [VARCHAR](50) NOT NULL, [IDX] [INT] NOT NULL, [ORDER_CONTROL_CODE] [VARCHAR](20) NULL, -- F1_C1 @@ -141,12 +158,14 @@ CREATE TABLE [snprc_ehr].[HL7_ORC_Staging]( [VERIFIED_BY_FIRST] [VARCHAR] (50) NULL, -- F11_C3 [ORDER_PROVIDER_LAST] [VARCHAR] (50) NULL, -- F12_C2 [ORDER_PROVIDER_FIRST] [VARCHAR] (50) NULL, -- F12_C3 + [CALLBACK_EMAIL] [VARCHAR](50) NULL, -- F14_C3 [ORDER_DATE] [DATETIME] NULL, -- F15_C1 + [Container] [dbo].[ENTITYID] NOT NULL, [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, [USER_NAME] [VARCHAR](128) NOT NULL, [ENTRY_DATE_TM] [DATETIME] NOT NULL, [TIMESTAMP] [TIMESTAMP] NULL, - CONSTRAINT [PK_HL7_ORC_Staging] PRIMARY KEY CLUSTERED + CONSTRAINT [PK_HL7_ORC] PRIMARY KEY CLUSTERED ( [MESSAGE_ID] ASC, [IDX] @@ -154,24 +173,27 @@ CREATE TABLE [snprc_ehr].[HL7_ORC_Staging]( ) GO -ALTER TABLE [snprc_ehr].[HL7_ORC_Staging] ADD CONSTRAINT [DF_HL7_ORC_Staging_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] +ALTER TABLE [snprc_ehr].[HL7_ORC] ADD CONSTRAINT [DF_HL7_ORC_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] GO -ALTER TABLE [snprc_ehr].[HL7_ORC_Staging] ADD CONSTRAINT [DF_HL7_ORC_Staging_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] +ALTER TABLE [snprc_ehr].[HL7_ORC] ADD CONSTRAINT [DF_HL7_ORC_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] GO -ALTER TABLE [snprc_ehr].[HL7_ORC_Staging] ADD CONSTRAINT [DF_HL7_ORC_Staging_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] +ALTER TABLE [snprc_ehr].[HL7_ORC] ADD CONSTRAINT [DF_HL7_ORC_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] GO -ALTER TABLE [snprc_ehr].[HL7_ORC_Staging] WITH CHECK ADD CONSTRAINT [FK_ORC_REF_MSH] FOREIGN KEY([MESSAGE_ID]) - REFERENCES [snprc_ehr].[HL7_MSH_Staging] ([MESSAGE_ID]) +ALTER TABLE [snprc_ehr].[HL7_ORC] WITH CHECK ADD CONSTRAINT [FK_ORC_REF_MSH] FOREIGN KEY([MESSAGE_ID]) + REFERENCES [snprc_ehr].[HL7_MSH] ([MESSAGE_ID]) GO -ALTER TABLE [snprc_ehr].[HL7_ORC_Staging] CHECK CONSTRAINT [FK_ORC_REF_MSH] +ALTER TABLE [snprc_ehr].[HL7_ORC] CHECK CONSTRAINT [FK_ORC_REF_MSH] GO +ALTER TABLE [snprc_ehr].[HL7_ORC] WITH CHECK ADD CONSTRAINT [FK_HL7_ORC_container] FOREIGN KEY([Container]) + REFERENCES [core].[Containers] ([EntityId]) + GO -CREATE TABLE [snprc_ehr].[HL7_OBR_Staging]( +CREATE TABLE [snprc_ehr].[HL7_OBR]( [MESSAGE_ID] [VARCHAR](50) NOT NULL, [MESSAGE_CONTROL_ID] [VARCHAR](50) NOT NULL, [IDX] [INT] NOT NULL, @@ -184,53 +206,58 @@ CREATE TABLE [snprc_ehr].[HL7_OBR_Staging]( [SET_ID] [VARCHAR](20) NOT NULL, [SPECIMEN_NUM] [VARCHAR](50) NULL, [PROCEDURE_ID] [VARCHAR](20) NULL, - [PROCEDURE_NAME] [VARCHAR](20) NULL, + [PROCEDURE_NAME] [VARCHAR](50) NULL, [PRIORITY] [VARCHAR](10) NULL, [RESULT_STATUS] [VARCHAR](10) NULL, - [TECHNICIAN_NAME] [VARCHAR](MAX) NULL, - [TECHNICIAN_INITIALS] [VARCHAR](50) NULL, + [TECHNICIAN_FIRST_NAME] [VARCHAR](50) NULL, + [TECHNICIAN_LAST_NAME] [VARCHAR](50) NULL, [CHARGE_ID] [INT] NULL, + [Container] [dbo].[ENTITYID] NOT NULL, [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, [USER_NAME] [VARCHAR](128) NOT NULL, [ENTRY_DATE_TM] [DATETIME] NOT NULL, [TIMESTAMP] [TIMESTAMP] NULL, - CONSTRAINT [PK_HL7_OBR_Staging] PRIMARY KEY CLUSTERED + CONSTRAINT [PK_HL7_OBR] PRIMARY KEY CLUSTERED ( [OBJECT_ID] )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ) GO -ALTER TABLE [snprc_ehr].[HL7_OBR_Staging] ADD CONSTRAINT [DF_HL7_OBR_Staging_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] +ALTER TABLE [snprc_ehr].[HL7_OBR] ADD CONSTRAINT [DF_HL7_OBR_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] GO -ALTER TABLE [snprc_ehr].[HL7_OBR_Staging] ADD CONSTRAINT [DF_HL7_OBR_Staging_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] +ALTER TABLE [snprc_ehr].[HL7_OBR] ADD CONSTRAINT [DF_HL7_OBR_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] GO -ALTER TABLE [snprc_ehr].[HL7_OBR_Staging] ADD CONSTRAINT [DF_HL7_OBR_Staging_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] +ALTER TABLE [snprc_ehr].[HL7_OBR] ADD CONSTRAINT [DF_HL7_OBR_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] GO -ALTER TABLE [snprc_ehr].[HL7_OBR_Staging] WITH CHECK ADD CONSTRAINT [CKC_ENTRY_DATE_TM_HL7_OBR_Staging_OBR] CHECK (([ENTRY_DATE_TM]<=GETDATE())) +ALTER TABLE [snprc_ehr].[HL7_OBR] WITH CHECK ADD CONSTRAINT [CKC_ENTRY_DATE_TM_HL7_OBR_OBR] CHECK (([ENTRY_DATE_TM]<=GETDATE())) GO -ALTER TABLE [snprc_ehr].[HL7_OBR_Staging] CHECK CONSTRAINT [CKC_ENTRY_DATE_TM_HL7_OBR_Staging_OBR] +ALTER TABLE [snprc_ehr].[HL7_OBR] CHECK CONSTRAINT [CKC_ENTRY_DATE_TM_HL7_OBR_OBR] GO -ALTER TABLE [snprc_ehr].[HL7_OBR_Staging] WITH CHECK ADD CONSTRAINT [FK_OBR_REF_MSH] FOREIGN KEY([MESSAGE_ID]) - REFERENCES [snprc_ehr].[HL7_MSH_Staging] ([MESSAGE_ID]) +ALTER TABLE [snprc_ehr].[HL7_OBR] WITH CHECK ADD CONSTRAINT [FK_OBR_REF_MSH] FOREIGN KEY([MESSAGE_ID]) + REFERENCES [snprc_ehr].[HL7_MSH] ([MESSAGE_ID]) GO -ALTER TABLE [snprc_ehr].[HL7_OBR_Staging] CHECK CONSTRAINT [FK_OBR_REF_MSH] +ALTER TABLE [snprc_ehr].[HL7_OBR] CHECK CONSTRAINT [FK_OBR_REF_MSH] GO -CREATE NONCLUSTERED INDEX [IDX_HL7_OBR_ID_DATE] ON [snprc_ehr].[HL7_OBR_Staging] +CREATE NONCLUSTERED INDEX [IDX_HL7_OBR_ID_DATE] ON [snprc_ehr].[HL7_OBR] ( [ANIMAL_ID] ASC, [OBSERVATION_DATE_TM] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO -CREATE TABLE [snprc_ehr].[HL7_OBX_Staging]( +ALTER TABLE [snprc_ehr].[HL7_OBR] WITH CHECK ADD CONSTRAINT [FK_HL7_OBR_container] FOREIGN KEY([Container]) + REFERENCES [core].[Containers] ([EntityId]) + GO + +CREATE TABLE [snprc_ehr].[HL7_OBX]( [MESSAGE_ID] [VARCHAR](50) NOT NULL, [IDX] [INT] NOT NULL, [OBR_OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, @@ -238,58 +265,65 @@ CREATE TABLE [snprc_ehr].[HL7_OBX_Staging]( [OBR_SET_ID] [VARCHAR](20) NOT NULL, [VALUE_TYPE] [VARCHAR](10) NULL, [TEST_ID] [VARCHAR](20) NULL, - [TEST_NAME] [VARCHAR](30) NULL, - [OBSERVED_VALUE] [VARCHAR](MAX) NULL, + [TEST_NAME] [VARCHAR](50) NULL, + [serviceTestId] [UNIQUEIDENTIFIER] NULL, + [QUALITATIVE_RESULT] [VARCHAR](MAX) NULL, + [RESULT] [VARCHAR](MAX) NULL, [UNITS] [VARCHAR](20) NULL, [REFERENCE_RANGE] [VARCHAR](60) NULL, [ABNORMAL_FLAGS] [VARCHAR](10) NULL, [RESULT_STATUS] [VARCHAR](10) NULL, + [Container] [dbo].[ENTITYID] NOT NULL, [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, [USER_NAME] [VARCHAR](128) NOT NULL, [ENTRY_DATE_TM] [DATETIME] NOT NULL, [TIMESTAMP] [TIMESTAMP] NULL, - CONSTRAINT [PK_HL7_OBX_Staging] PRIMARY KEY CLUSTERED + CONSTRAINT [PK_HL7_OBX] PRIMARY KEY CLUSTERED ( [OBJECT_ID] )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ) GO -ALTER TABLE [snprc_ehr].[HL7_OBX_Staging] ADD CONSTRAINT [DF_HL7_OBX_Staging_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] +ALTER TABLE [snprc_ehr].[HL7_OBX] ADD CONSTRAINT [DF_HL7_OBX_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] GO -ALTER TABLE [snprc_ehr].[HL7_OBX_Staging] ADD CONSTRAINT [DF_HL7_OBX_Staging_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] +ALTER TABLE [snprc_ehr].[HL7_OBX] ADD CONSTRAINT [DF_HL7_OBX_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] GO -ALTER TABLE [snprc_ehr].[HL7_OBX_Staging] ADD CONSTRAINT [DF_HL7_OBX_Staging_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] +ALTER TABLE [snprc_ehr].[HL7_OBX] ADD CONSTRAINT [DF_HL7_OBX_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] GO -ALTER TABLE [snprc_ehr].[HL7_OBX_Staging] WITH CHECK ADD CONSTRAINT [FK_OBX_REF_OBR] FOREIGN KEY([OBR_OBJECT_ID]) - REFERENCES [snprc_ehr].[HL7_OBR_Staging] ([OBJECT_ID]) +ALTER TABLE [snprc_ehr].[HL7_OBX] WITH CHECK ADD CONSTRAINT [FK_OBX_REF_OBR] FOREIGN KEY([OBR_OBJECT_ID]) + REFERENCES [snprc_ehr].[HL7_OBR] ([OBJECT_ID]) GO -ALTER TABLE [snprc_ehr].[HL7_OBX_Staging] CHECK CONSTRAINT [FK_OBX_REF_OBR] +ALTER TABLE [snprc_ehr].[HL7_OBX] CHECK CONSTRAINT [FK_OBX_REF_OBR] GO -CREATE NONCLUSTERED INDEX [IDX_HL7_OBX_OBR_OBJ_ID] ON [snprc_ehr].[HL7_OBX_Staging] +CREATE NONCLUSTERED INDEX [IDX_HL7_OBX_OBR_OBJ_ID] ON [snprc_ehr].[HL7_OBX] ( [OBR_OBJECT_ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO +ALTER TABLE [snprc_ehr].[HL7_OBX] WITH CHECK ADD CONSTRAINT [FK_HL7_OBX_container] FOREIGN KEY([Container]) + REFERENCES [core].[Containers] ([EntityId]) + GO -CREATE TABLE [snprc_ehr].[HL7_NTE_Staging]( +CREATE TABLE [snprc_ehr].[HL7_NTE]( [MESSAGE_ID] [VARCHAR](50) NOT NULL, [IDX] [INT] NOT NULL, [OBR_OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, [SET_ID] [VARCHAR](20) NOT NULL, [OBR_SET_ID] [VARCHAR](20) NOT NULL, [COMMENT] [VARCHAR](MAX) NULL, + [Container] [dbo].[ENTITYID] NOT NULL, [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, [USER_NAME] [VARCHAR](128) NOT NULL, [ENTRY_DATE_TM] [DATETIME] NOT NULL, [TIMESTAMP] [TIMESTAMP] NULL, - CONSTRAINT [PK_HL7_NTE_Staging] PRIMARY KEY CLUSTERED + CONSTRAINT [PK_HL7_NTE] PRIMARY KEY CLUSTERED ( [OBJECT_ID] ASC @@ -297,23 +331,27 @@ CREATE TABLE [snprc_ehr].[HL7_NTE_Staging]( ) GO -ALTER TABLE [snprc_ehr].[HL7_NTE_Staging] ADD CONSTRAINT [DF_HL7_NTE_Staging_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] +ALTER TABLE [snprc_ehr].[HL7_NTE] ADD CONSTRAINT [DF_HL7_NTE_OBJECT_ID] DEFAULT (NEWID()) FOR [OBJECT_ID] GO -ALTER TABLE [snprc_ehr].[HL7_NTE_Staging] ADD CONSTRAINT [DF_HL7_NTE_Staging_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] +ALTER TABLE [snprc_ehr].[HL7_NTE] ADD CONSTRAINT [DF_HL7_NTE_USER] DEFAULT (USER_NAME()) FOR [USER_NAME] GO -ALTER TABLE [snprc_ehr].[HL7_NTE_Staging] ADD CONSTRAINT [DF_HL7_NTE_Staging_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] +ALTER TABLE [snprc_ehr].[HL7_NTE] ADD CONSTRAINT [DF_HL7_NTE_ENTRY] DEFAULT (GETDATE()) FOR [ENTRY_DATE_TM] GO -ALTER TABLE [snprc_ehr].[HL7_NTE_Staging] WITH CHECK ADD CONSTRAINT [FK_NTE_REF_OBR] FOREIGN KEY([OBR_OBJECT_ID]) - REFERENCES [snprc_ehr].[HL7_OBR_Staging] ([OBJECT_ID]) +ALTER TABLE [snprc_ehr].[HL7_NTE] WITH CHECK ADD CONSTRAINT [FK_NTE_REF_OBR] FOREIGN KEY([OBR_OBJECT_ID]) + REFERENCES [snprc_ehr].[HL7_OBR] ([OBJECT_ID]) GO -ALTER TABLE [snprc_ehr].[HL7_NTE_Staging] CHECK CONSTRAINT [FK_NTE_REF_OBR] +ALTER TABLE [snprc_ehr].[HL7_NTE] CHECK CONSTRAINT [FK_NTE_REF_OBR] GO -CREATE NONCLUSTERED INDEX [IDX_HL7_NTE_OBR_OBJ_ID] ON [snprc_ehr].[HL7_NTE_Staging] +ALTER TABLE [snprc_ehr].[HL7_NTE] WITH CHECK ADD CONSTRAINT [FK_HL7_NTE_container] FOREIGN KEY([Container]) + REFERENCES [core].[Containers] ([EntityId]) + GO + +CREATE NONCLUSTERED INDEX [IDX_HL7_NTE_OBR_OBJ_ID] ON [snprc_ehr].[HL7_NTE] ( [OBR_OBJECT_ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] @@ -330,6 +368,7 @@ CREATE TABLE [snprc_ehr].[HL7_IMPORT_LOG]( [SPECIES] [VARCHAR](50) NULL, [HL7_MESSAGE_TEXT] [VARCHAR](MAX) NULL, [IMPORT_TEXT] [VARCHAR](MAX) NULL, + [Container] [dbo].[ENTITYID] NOT NULL, [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, [USER_NAME] [VARCHAR](128) NOT NULL, [ENTRY_DATE_TM] [DATETIME] NOT NULL, @@ -356,5 +395,56 @@ ALTER TABLE [snprc_ehr].[HL7_IMPORT_LOG] WITH CHECK ADD CONSTRAINT [CKC_HL7_IM ALTER TABLE [snprc_ehr].[HL7_IMPORT_LOG] CHECK CONSTRAINT [CKC_HL7_IMPORT_LOG_OBSERVATION_DATE] GO +ALTER TABLE [snprc_ehr].[HL7_IMPORT_LOG] WITH CHECK ADD CONSTRAINT [FK_HL7_IMPORT_LOG_container] FOREIGN KEY([Container]) + REFERENCES [core].[Containers] ([EntityId]) + GO +-- ========================================================================== +-- Author: Terry Hawkins +-- Create date: 2/28/14 +-- Description: Returns 1 if the value is numeric, 0 if value is not numeric +-- 6/19/2015 added additional criteria based on the current datasets. tjh +-- 2/29/2016 fixed file formatting. Fixed bug in patindex call (removed). tjh +-- ========================================================================== +CREATE FUNCTION [snprc_ehr].[f_isNumeric] +( + @value VARCHAR(MAX) +) +RETURNS INT +AS +BEGIN + -- Declare the return variable here + DECLARE @return INT + + IF (@value IS NULL) + BEGIN + SET @return = 0 + GOTO finis + END + + select @value = LTRIM(RTRIM(REPLACE(@value, ' ', ''))) + + IF (ISNUMERIC(@value) = 1) + BEGIN + if ( LEN(@value) = 1 AND CHARINDEX ('+', @value, 1) > 0) + OR ( LEN(@value) = 1 AND CHARINDEX('-', @value, 1) > 0) + OR (CHARINDEX(',', @value, 1) > 0) + OR (CHARINDEX('-' , @value, 2) > 1) + + BEGIN + SET @return = 0 + GOTO finis + END + SET @return = 1 + GOTO finis + + END + SET @return = 0 + + finis: + RETURN @return + +END + +GO diff --git a/snprc_ehr/resources/source_queries/HL7/HL7_admin_permissions.sql b/snprc_ehr/resources/source_queries/HL7/HL7_admin_permissions.sql index ca96d03d9..a7390862f 100644 --- a/snprc_ehr/resources/source_queries/HL7/HL7_admin_permissions.sql +++ b/snprc_ehr/resources/source_queries/HL7/HL7_admin_permissions.sql @@ -1,9 +1,13 @@ -- HL7_Admin permissions required for HL7 Schema Engine import GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_IMPORT_LOG TO HL7_Admin; -GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_MSH_Staging TO HL7_Admin; -GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_NTE_Staging TO HL7_Admin; -GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_OBR_Staging TO HL7_Admin; -GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_OBX_Staging TO HL7_Admin; -GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_ORC_Staging TO HL7_Admin; -GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_PID_Staging TO HL7_Admin; -GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_PV1_Staging TO HL7_Admin; \ No newline at end of file +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_MSH TO HL7_Admin; +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_NTE TO HL7_Admin; +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_OBR TO HL7_Admin; +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_OBX TO HL7_Admin; +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_ORC TO HL7_Admin; +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_PID TO HL7_Admin; +GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON labkey.snprc_ehr.HL7_PV1 TO HL7_Admin; +GRANT EXECUTE ON labkey.snprc_ehr.f_isNumeric TO HL7_Admin; +GRANT SELECT ON labkey.snprc_ehr.HL7_GroupNTE TO HL7_Admin; +GRANT EXECUTE ON labkey.snprc_ehr.f_format_hl7_date TO HL7_Admin; +GRANT SELECT ON labkey.core.Containers TO HL7_Admin; \ No newline at end of file From 5dc30c964f75d791af4de6a9a43671e4baab23b7 Mon Sep 17 00:00:00 2001 From: Terry J Hawkins Date: Mon, 15 Aug 2022 11:44:14 -0500 Subject: [PATCH 15/17] -Integrating new ClinPath data source with existing datasource -Updated clinpathRunsAll.sql to include Orchard sourced data -Added Orchard data to labwork pivot queries in study. e.g., hematologyPivot, chemPivot, culturePivot, etc.. -Added abnormal flags to clinpath pivot queries -Added color highlighting for abnormal test results to labwork history (in animal history > Clinical > Clinical History -Fixed wrong field display for DietDataSource in Clinical History -Fixed diet data source in CurrentDietDemographicsProvider.java and snprcOverrides.js (in animal snapshot view) --- .../snprc_ehr/HL7BiochemistryPivot.sql | 14 +- .../queries/snprc_ehr/HL7CulturePivot.sql | 36 ++-- .../snprc_ehr/HL7SurveillancePivot.sql | 3 +- .../snprc_ehr/HL7SurveillancePivotInner.sql | 3 - .../queries/snprc_ehr/HL7UnknownPivot.sql | 41 ++-- .../queries/snprc_ehr/HL7UrinalysisPivot.sql | 41 ++-- .../resources/queries/study/CulturePivot.sql | 13 +- .../queries/study/ParasitologyPivot.sql | 31 ++- .../queries/study/ParasitologyPivotInner.sql | 26 +++ .../queries/study/ParasitologyPivotOP.sql | 36 ++-- .../resources/queries/study/chemPivot.sql | 5 +- .../queries/study/chemPivotInner.sql | 10 +- .../queries/study/clinpathRunsAll.query.xml | 16 ++ .../queries/study/clinpathRunsAll.sql | 53 ++--- .../queries/study/culturePivotInner.sql | 6 +- .../queries/study/hematologyPivot.sql | 5 +- .../queries/study/hematologyPivotInner.sql | 11 +- .../queries/study/labworkResultsAll.query.xml | 12 +- .../queries/study/labworkResultsAll.sql | 16 +- .../study/labworkResultsAll/.qview.xml | 4 +- .../resources/queries/study/miscPivot.sql | 6 +- .../queries/study/miscPivotInner.sql | 37 ++-- .../queries/study/surveillancePivot.query.xml | 11 +- .../queries/study/surveillancePivot.sql | 21 +- .../queries/study/surveillancePivotInner.sql | 40 ++-- .../queries/study/urinalysisPivot.sql | 20 +- .../queries/study/urinalysisPivotInner.sql | 37 ++-- .../resources/web/snprc_ehr/snprcOverrides.js | 2 +- .../org/labkey/snprc_ehr/SNPRC_EHRModule.java | 6 +- .../snprc_ehr/constants/QueryConstants.java | 2 + .../CurrentDietDemographicsProvider.java | 2 +- .../snprc_ehr/history/DietDataSource.java | 4 +- .../snprc_ehr/history/LabworkDataSource.java | 201 ++++++++++++++++++ ...sultsLabworkType.java => LabworkType.java} | 19 +- 34 files changed, 507 insertions(+), 283 deletions(-) create mode 100644 snprc_ehr/resources/queries/study/ParasitologyPivotInner.sql create mode 100644 snprc_ehr/src/org/labkey/snprc_ehr/history/LabworkDataSource.java rename snprc_ehr/src/org/labkey/snprc_ehr/history/{LabResultsLabworkType.java => LabworkType.java} (91%) diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.sql index 967fc1fbe..903fe4c66 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7BiochemistryPivot.sql @@ -2,23 +2,23 @@ SELECT obr.ANIMAL_ID as id, obr.OBSERVATION_DATE_TM as date, obr.MESSAGE_ID, - obr.PROCEDURE_NAME, + COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME) as PROCEDURE_NAME, obr.PROCEDURE_ID, nte.COMMENT, - obx.TEST_NAME, + COALESCE (lp.TestName, obx.TEST_NAME) as TestName, MAX(obx.ABNORMAL_FLAGS) AS ABNORMAL_FLAGS, - MAX(obx.QUALITATIVE_RESULT) as QUALITATIVE_RESULT, - MAX(obx.RESULT) as RESULT + COALESCE(MAX(obx.RESULT), MAX(obx.QUALITATIVE_RESULT)) as RESULT FROM snprc_ehr.HL7_OBR obr LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId LEFT OUTER JOIN snprc_ehr.HL7_GroupNTE AS nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID WHERE obr.PROCEDURE_ID.Dataset = 'Biochemistry' -GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, obr.PROCEDURE_NAME, obr.PROCEDURE_ID, nte.COMMENT, obx.TEST_NAME - PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TEST_NAME +GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME), obr.SET_ID, obr.PROCEDURE_NAME, obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) + PIVOT RESULT, ABNORMAL_FLAGS BY TestName - IN + IN ( select TestName as TEST_NAME from snprc_ehr.labwork_panels t where t.includeInPanel = true AND t.ServiceId.Dataset='Biochemistry' diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.sql index a98d5ca0c..5db7c48c3 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7CulturePivot.sql @@ -1,37 +1,25 @@ -/* Valid Service types: - Biochemistry - Culture - Hematology - Histology - Misc Tests - Parasitology - Surveillance - Unknown - Urinalysis - */ SELECT obr.ANIMAL_ID as id, obr.OBSERVATION_DATE_TM as date, obr.MESSAGE_ID, - obr.PROCEDURE_NAME, + COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME) as PROCEDURE_NAME, obr.PROCEDURE_ID, nte.COMMENT, - obx.TEST_NAME, - --obx.TEST_ID, + COALESCE (lp.TestName, obx.TEST_NAME) as TestName, MAX(obx.ABNORMAL_FLAGS) AS ABNORMAL_FLAGS, - MAX(obx.QUALITATIVE_RESULT) as QUALITATIVE_RESULT, - MAX(obx.RESULT) as RESULT + COALESCE(MAX(obx.RESULT), MAX(obx.QUALITATIVE_RESULT)) as RESULT FROM snprc_ehr.HL7_OBR obr LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID - LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId + LEFT OUTER JOIN snprc_ehr.HL7_GroupNTE AS nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID WHERE obr.PROCEDURE_ID.Dataset = 'Culture' -GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, obr.PROCEDURE_NAME, obr.PROCEDURE_ID, nte.COMMENT, obx.TEST_NAME --, obx.TEST_ID - PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TEST_NAME +GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME), obr.SET_ID, obr.PROCEDURE_NAME, obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) + PIVOT RESULT, ABNORMAL_FLAGS BY TestName --- TEST_ID IN --- ( --- select TestId as TEST_ID from snprc_ehr.labwork_panels t --- where t.includeInPanel = true AND t.ServiceId.Dataset='Culture' --- ) \ No newline at end of file + IN + ( + select TestName as TEST_NAME from snprc_ehr.labwork_panels t + where t.includeInPanel = true AND t.ServiceId.Dataset='Culture' + ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot.sql index 72b10db45..244d4a09e 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivot.sql @@ -1,6 +1,5 @@ select Id, date, - MESSAGE_ID, PROCEDURE_NAME, PROCEDURE_ID, COMMENT, @@ -9,7 +8,7 @@ select Id, COALESCE(MAX(RESULT), MAX(QUALITATIVE_RESULT)) as RESULT from snprc_ehr.HL7SurveillancePivotInner -GROUP BY id, date, MESSAGE_ID, PROCEDURE_NAME, PROCEDURE_NAME, PROCEDURE_ID, COMMENT, TestName +GROUP BY id, date, PROCEDURE_NAME, PROCEDURE_NAME, PROCEDURE_ID, COMMENT, TestName PIVOT RESULT, ABNORMAL_FLAGS BY TestName IN diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivotInner.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivotInner.sql index ebb295120..e25b11d69 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivotInner.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7SurveillancePivotInner.sql @@ -1,7 +1,6 @@ SELECT obr.ANIMAL_ID AS Id, obr.OBSERVATION_DATE_TM as date, - obr.MESSAGE_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME) as PROCEDURE_NAME, obr.PROCEDURE_ID, COALESCE (lp.TestName, obx.TEST_NAME) as TestName, @@ -21,7 +20,6 @@ UNION SELECT b.id, b.date, - coalesce(b.runId, cast(b.Sequencenum as varchar)) as MESSAGE_ID, b.serviceTestId.serviceId.ServiceName AS PROCEDURE_NAME, b.serviceTestId.serviceId AS PROCEDURE_ID, b.serviceTestId.testName AS TestName, @@ -37,7 +35,6 @@ union SELECT b.id, b.date, - coalesce(b.runId, b.objectid) as MESSAGE_ID, b.serviceTestId.serviceId.ServiceName AS PROCEDURE_NAME, b.serviceTestId.serviceId AS PROCEDURE_ID, b.serviceTestId.testName AS TestName, diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot.sql index 3961a8649..f07823b22 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7UnknownPivot.sql @@ -1,38 +1,25 @@ -/* Valid Service types: - Biochemistry - Culture - Hematology - Histology - Misc Tests - Parasitology - Surveillance - Unknown - Urinalysis - */ -SELECT obr.ANIMAL_ID as id, - obr.OBSERVATION_DATE_TM as date, +SELECT + obr.ANIMAL_ID as id, + obr.OBSERVATION_DATE_TM as date, obr.MESSAGE_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME) as PROCEDURE_NAME, obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) as TestName, - --obx.TEST_ID, MAX(obx.ABNORMAL_FLAGS) AS ABNORMAL_FLAGS, - MAX(obx.QUALITATIVE_RESULT) as QUALITATIVE_RESULT, - MAX(obx.RESULT) as RESULT + COALESCE(MAX(obx.RESULT), MAX(obx.QUALITATIVE_RESULT)) as RESULT FROM snprc_ehr.HL7_OBR obr - LEFT OUTER JOIN snprc_ehr.HL7_OBX obx -ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID - LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId + LEFT OUTER JOIN snprc_ehr.HL7_GroupNTE AS nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID WHERE obr.PROCEDURE_ID.Dataset = 'Unknown' -GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME), obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) - PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TestName --- --- IN --- ( --- select TestName from snprc_ehr.labwork_panels t --- where t.includeInPanel = true AND t.ServiceId.Dataset='Unknown' --- ) \ No newline at end of file +GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME), obr.SET_ID, obr.PROCEDURE_NAME, obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) + PIVOT RESULT, ABNORMAL_FLAGS BY TestName + + IN + ( + select TestName as TEST_NAME from snprc_ehr.labwork_panels t + where t.includeInPanel = true AND t.ServiceId.Dataset='Unknown' + ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/snprc_ehr/HL7UrinalysisPivot.sql b/snprc_ehr/resources/queries/snprc_ehr/HL7UrinalysisPivot.sql index e4b0f709d..3051fd6f5 100644 --- a/snprc_ehr/resources/queries/snprc_ehr/HL7UrinalysisPivot.sql +++ b/snprc_ehr/resources/queries/snprc_ehr/HL7UrinalysisPivot.sql @@ -1,38 +1,25 @@ -/* Valid Service types: - Biochemistry - Culture - Hematology - Histology - Misc Tests - Parasitology - Surveillance - Unknown - Urinalysis - */ -SELECT obr.ANIMAL_ID as id, - obr.OBSERVATION_DATE_TM as date, +SELECT + obr.ANIMAL_ID as id, + obr.OBSERVATION_DATE_TM as date, obr.MESSAGE_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME) as PROCEDURE_NAME, obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) as TestName, - --obx.TEST_ID, MAX(obx.ABNORMAL_FLAGS) AS ABNORMAL_FLAGS, - MAX(obx.QUALITATIVE_RESULT) as QUALITATIVE_RESULT, - MAX(obx.RESULT) as RESULT + COALESCE(MAX(obx.RESULT), MAX(obx.QUALITATIVE_RESULT)) as RESULT FROM snprc_ehr.HL7_OBR obr - LEFT OUTER JOIN snprc_ehr.HL7_OBX obx -ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID - LEFT OUTER JOIN snprc_ehr.HL7_NTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId + LEFT OUTER JOIN snprc_ehr.HL7_GroupNTE AS nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID WHERE obr.PROCEDURE_ID.Dataset = 'Urinalysis' -GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, obr.PROCEDURE_NAME, obr.SET_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME), obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) - PIVOT RESULT, QUALITATIVE_RESULT, ABNORMAL_FLAGS BY TestName --- --- IN --- ( --- select TestName from snprc_ehr.labwork_panels t --- where t.includeInPanel = true AND t.ServiceId.Dataset='Urinalysis' --- ) \ No newline at end of file +GROUP BY obr.ANIMAL_ID, obr.OBSERVATION_DATE_TM, obr.MESSAGE_ID, COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME), obr.SET_ID, obr.PROCEDURE_NAME, obr.PROCEDURE_ID, nte.COMMENT, COALESCE (lp.TestName, obx.TEST_NAME) + PIVOT RESULT, ABNORMAL_FLAGS BY TestName + + IN + ( + select TestName as TEST_NAME from snprc_ehr.labwork_panels t + where t.includeInPanel = true AND t.ServiceId.Dataset='Urinalysis' + ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/study/CulturePivot.sql b/snprc_ehr/resources/queries/study/CulturePivot.sql index d55fff6bf..396186b0a 100644 --- a/snprc_ehr/resources/queries/study/CulturePivot.sql +++ b/snprc_ehr/resources/queries/study/CulturePivot.sql @@ -13,25 +13,20 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -/****************************************************************************** -Non Ova & Parasite (O&P) result set. -srr 04.02.2019 - -******************************************************************************/ SELECT b.Id, b.date, b.panelName, b.TestName, b.remark, - MAX(b.result) as results + MAX(b.result) as results, + GROUP_CONCAT(b.abnormal_flags) as abnormal_flags FROM culturePivotInner b GROUP BY b.panelName, b.id, b.date, b.TestName, b.remark - PIVOT results BY TestName IN - +PIVOT results, abnormal_flags BY TestName IN (select TestName from snprc_ehr.labwork_panels t - where t.includeInPanel = true AND t.ServiceId.Dataset='Culture' + where t.includeInPanel = true AND t.ServiceId.Dataset='Culture' order by t.TestName asc ) diff --git a/snprc_ehr/resources/queries/study/ParasitologyPivot.sql b/snprc_ehr/resources/queries/study/ParasitologyPivot.sql index bc3b2aaf1..d6f51b34d 100644 --- a/snprc_ehr/resources/queries/study/ParasitologyPivot.sql +++ b/snprc_ehr/resources/queries/study/ParasitologyPivot.sql @@ -19,25 +19,22 @@ srr 04.02.2019 ******************************************************************************/ SELECT - p.runid, p.Id, p.date, p.remark, - p.serviceTestId.testName as TestName, - p.runId.serviceRequested as PanelName, - GROUP_CONCAT(p.qualresult) as QResults + p.testName, + p.panelName, + GROUP_CONCAT(p.result) as result, + GROUP_CONCAT(p.abnormal_flags) as abnormal_flags + +FROM ParasitologyPivotInner p +WHERE p.panelName not in ('OVA & PARASITES','OVA & PARASITES, URINE') + +GROUP BY p.id, p.date, p.remark, p.panelName, p.TestName +PIVOT result, abnormal_flags BY TestName IN +(select TestName from snprc_ehr.labwork_panels t +where t.includeInPanel = true AND t.ServiceId.Dataset='Parasitology' + and t.ServiceId.ServiceName not in ('OVA & PARASITES','OVA & PARASITES, URINE') +) -FROM study.labworkResults as p - inner join snprc_ehr.labwork_panels as lt - on p.serviceTestid = lt.rowId - and lt.ServiceId.Dataset='Parasitology' -where p.id is not null - and p.runId.serviceRequested not in ('OVA & PARASITES','OVA & PARASITES, URINE') -group by p.runid, p.Id, p.date,p.serviceTestId.testName, p.runId.serviceRequested, p.remark - PIVOT QResults by TestName IN - (select TestName from snprc_ehr.labwork_panels t - where t.includeInPanel = true - and t.ServiceId.Dataset = 'Parasitology' - and t.ServiceId.ServiceName not in ('OVA & PARASITES','OVA & PARASITES, URINE') - ); diff --git a/snprc_ehr/resources/queries/study/ParasitologyPivotInner.sql b/snprc_ehr/resources/queries/study/ParasitologyPivotInner.sql new file mode 100644 index 000000000..a63afc694 --- /dev/null +++ b/snprc_ehr/resources/queries/study/ParasitologyPivotInner.sql @@ -0,0 +1,26 @@ +SELECT + b.Id, + b.date, + b.runId.serviceRequested as panelName, + b.serviceTestId.testName AS TestName, + b.remark, + COALESCE(CAST(CAST(b.result AS float) AS VARCHAR), b.qualresult) as result, + b.abnormal_flags +FROM study.labworkResults b +WHERE b.serviceTestId.includeInPanel = true and b.qcstate.publicdata = true and b.serviceTestid.ServiceId.Dataset = 'Parasitology' + +UNION + +SELECT + obr.ANIMAL_ID as id, + obr.OBSERVATION_DATE_TM as date, + obr.PROCEDURE_NAME as panelName, + obx.TEST_NAME as TestName, + nte.COMMENT as remark, + COALESCE(obx.RESULT, obx.QUALITATIVE_RESULT) as result, + obx.ABNORMAL_FLAGS AS abnormal_flags + +FROM snprc_ehr.HL7_OBR obr + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_GroupNTE AS nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID +WHERE obr.PROCEDURE_ID.Dataset = 'Parasitology' \ No newline at end of file diff --git a/snprc_ehr/resources/queries/study/ParasitologyPivotOP.sql b/snprc_ehr/resources/queries/study/ParasitologyPivotOP.sql index 667ca0798..b93a4ddf9 100644 --- a/snprc_ehr/resources/queries/study/ParasitologyPivotOP.sql +++ b/snprc_ehr/resources/queries/study/ParasitologyPivotOP.sql @@ -18,27 +18,21 @@ Ova & Parasite (O&P) result set. srr 04.02.2019 ******************************************************************************/ - SELECT - p.runid, - p.Id, - p.date, - p.serviceTestId.testName as TestName, - p.runId.serviceRequested as PanelName, - p.remark, - GROUP_CONCAT(p.qualresult) as QResults + p.Id, + p.date, + p.remark, + p.testName, + p.panelName, + GROUP_CONCAT(p.result) as result, + GROUP_CONCAT(p.abnormal_flags) as abnormal_flags -FROM study.labworkResults as p - inner join snprc_ehr.labwork_panels as lt - on p.serviceTestid = lt.rowId - and lt.ServiceId.Dataset='Parasitology' +FROM ParasitologyPivotInner p +WHERE p.panelName in ('OVA & PARASITES','OVA & PARASITES, URINE') -where p.id is not null - and p.runId.serviceRequested in ('OVA & PARASITES' ,'OVA & PARASITES, URINE') -group by p.runid, p.Id, p.date,p.remark, p.serviceTestId.testName, p.runId.serviceRequested - PIVOT QResults by TestName IN - (select TestName from snprc_ehr.labwork_panels t - where t.includeInPanel = true - and t.ServiceId.Dataset = 'Parasitology' - and t.ServiceId.ServiceName in ('OVA & PARASITES', 'OVA & PARASITES, URINE') - ); +GROUP BY p.id, p.date, p.remark, p.panelName, p.TestName + PIVOT result, abnormal_flags BY TestName IN +(select TestName from snprc_ehr.labwork_panels t +where t.includeInPanel = true AND t.ServiceId.Dataset='Parasitology' + and t.ServiceId.ServiceName in ('OVA & PARASITES','OVA & PARASITES, URINE') +) diff --git a/snprc_ehr/resources/queries/study/chemPivot.sql b/snprc_ehr/resources/queries/study/chemPivot.sql index a2c532cde..003ec9d78 100644 --- a/snprc_ehr/resources/queries/study/chemPivot.sql +++ b/snprc_ehr/resources/queries/study/chemPivot.sql @@ -19,13 +19,14 @@ b.date, b.panelName, b.TestName, b.remark, -MAX(b.result) as results +MAX(b.result) as results, +GROUP_CONCAT(b.abnormal_flags) as abnormal_flags FROM chemPivotInner b GROUP BY b.id, b.date, b.TestName, b.panelName, b.remark -PIVOT results BY TestName IN +PIVOT results, abnormal_flags BY TestName IN (select TestName from snprc_ehr.labwork_panels t where t.includeInPanel = true AND t.ServiceId.Dataset='Biochemistry' ) diff --git a/snprc_ehr/resources/queries/study/chemPivotInner.sql b/snprc_ehr/resources/queries/study/chemPivotInner.sql index 8df208be0..cd8f4c617 100644 --- a/snprc_ehr/resources/queries/study/chemPivotInner.sql +++ b/snprc_ehr/resources/queries/study/chemPivotInner.sql @@ -19,10 +19,8 @@ SELECT b.runId.serviceRequested as panelName, b.serviceTestId.testName AS TestName, b.remark, - CASE - WHEN b.result IS NULL THEN b.qualresult - ELSE CAST(CAST(b.result AS float) AS VARCHAR) - END as result + COALESCE(CAST(CAST(b.result AS float) AS VARCHAR), b.qualresult) as result, + b.abnormal_flags FROM study.labworkResults b WHERE b.serviceTestId.includeInPanel = true and b.qcstate.publicdata = true and b.serviceTestid.ServiceId.Dataset = 'Biochemistry' @@ -34,8 +32,8 @@ SELECT obr.PROCEDURE_NAME as panelName, obx.TEST_NAME as TestName, nte.COMMENT as remark, - COALESCE(obx.RESULT, obx.QUALITATIVE_RESULT) as result - + COALESCE(obx.RESULT, obx.QUALITATIVE_RESULT) as result, + obx.ABNORMAL_FLAGS AS abnormal_flags FROM snprc_ehr.HL7_OBR obr LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID LEFT OUTER JOIN snprc_ehr.HL7_GroupNTE AS nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID diff --git a/snprc_ehr/resources/queries/study/clinpathRunsAll.query.xml b/snprc_ehr/resources/queries/study/clinpathRunsAll.query.xml index 7e2e546e0..44f27d7de 100644 --- a/snprc_ehr/resources/queries/study/clinpathRunsAll.query.xml +++ b/snprc_ehr/resources/queries/study/clinpathRunsAll.query.xml @@ -111,6 +111,22 @@ core + + true + + core + qcstate + rowid + + + + true + + UserId + Users + core + + Clinpath Runs diff --git a/snprc_ehr/resources/queries/study/clinpathRunsAll.sql b/snprc_ehr/resources/queries/study/clinpathRunsAll.sql index 085f219d6..238403512 100644 --- a/snprc_ehr/resources/queries/study/clinpathRunsAll.sql +++ b/snprc_ehr/resources/queries/study/clinpathRunsAll.sql @@ -14,38 +14,40 @@ * limitations under the License. */ select - ANIMAL_ID as Id, - OBSERVATION_DATE_TM AS date, + obr.ANIMAL_ID as Id, + obr.OBSERVATION_DATE_TM AS date, NULL AS enddate, - PROCEDURE_ID.Dataset.ServiceType AS type, + obr.PROCEDURE_ID.Dataset.ServiceType AS type, NULL as tissue, - CHARGE_ID AS project, + obr.CHARGE_ID AS project, NULL AS instructions, - PROCEDURE_ID.ServiceName AS servicerequested, + obr.PROCEDURE_ID.ServiceName AS servicerequested, NULL AS units, - PROCEDURE_ID AS serviceId, + obr.PROCEDURE_ID AS serviceId, NULL AS collectedBy, - SPECIMEN_NUM AS sampleId, + obr.SPECIMEN_NUM AS sampleId, NULL AS collectionMethod, NULL AS method, NULL AS sampleQuantity, NULL AS quantityUnits, NULL AS chargetype, - VERIFIED_DATE_TM AS verifiedDate, + obr.VERIFIED_DATE_TM AS verifiedDate, NULL AS datefinalized, NULL AS remark, NULL AS history, - OBJECT_ID AS objectid, - NULL AS lsid -from snprc_ehr.HL7_OBR + obr.OBJECT_ID AS objectid, + NULL AS lsid, + q.rowId as QCState +FROM snprc_ehr.HL7_OBR as obr +INNER JOIN core.QCState as q on q.Label = 'Completed' -union +UNION -select +SELECT Id, date, enddate, - type, + serviceId.Dataset.ServiceType as type, tissue, project, instructions, @@ -64,16 +66,17 @@ select remark, history, objectid, - lsid -from study.clinpathRuns + lsid, + QCState +FROM study.clinpathRuns -union +UNION -select +SELECT Id, date, enddate, - type, + serviceId.Dataset.ServiceType as type, tissue, project, instructions, @@ -92,12 +95,13 @@ select remark, history, objectid, - lsid -from study.assay_clinpathRuns + lsid, + QCState +FROM study.assay_clinpathRuns -union +UNION -select distinct +SELECT DISTINCT tr.Id, tr.date, null enddate, @@ -120,7 +124,8 @@ select distinct 'From Excel import' as remark, tr.history as history, null as objectid, - tr.lsid + tr.lsid, + tr.QCState from study.TaqmanResults as tr inner join snprc_ehr.labwork_services as ls on ls.serviceId = 20000 diff --git a/snprc_ehr/resources/queries/study/culturePivotInner.sql b/snprc_ehr/resources/queries/study/culturePivotInner.sql index b7f69e5aa..b9ee417dd 100644 --- a/snprc_ehr/resources/queries/study/culturePivotInner.sql +++ b/snprc_ehr/resources/queries/study/culturePivotInner.sql @@ -4,7 +4,8 @@ SELECT p.serviceTestId.testName as TestName, p.runId.serviceRequested as PanelName, p.remark, - p.qualresult as result + p.qualresult as result, + p.abnormal_flags FROM study.labworkResults as p WHERE p.serviceTestId.includeInPanel = true AND p.serviceTestid.ServiceId.Dataset ='Culture' @@ -17,7 +18,8 @@ SELECT COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME) as PanelName, COALESCE (lp.TestName, obx.TEST_NAME) as TestName, nte.COMMENT as remark, - COALESCE(obx.RESULT, obx.QUALITATIVE_RESULT) as result + COALESCE(obx.RESULT, obx.QUALITATIVE_RESULT) as result, + obx.ABNORMAL_FLAGS AS abnormal_flags FROM snprc_ehr.HL7_OBR obr LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID diff --git a/snprc_ehr/resources/queries/study/hematologyPivot.sql b/snprc_ehr/resources/queries/study/hematologyPivot.sql index 609bf290d..46c923283 100644 --- a/snprc_ehr/resources/queries/study/hematologyPivot.sql +++ b/snprc_ehr/resources/queries/study/hematologyPivot.sql @@ -19,13 +19,14 @@ b.date, b.panelName, b.TestName, b.remark, -MAX(b.result) as results +MAX(b.result) as results, +GROUP_CONCAT(b.abnormal_flags) as abnormal_flags FROM hematologyPivotInner b GROUP BY b.panelName, b.id, b.date, b.TestName, b.remark -PIVOT results BY TestName IN +PIVOT results, abnormal_flags BY TestName IN (select TestName from snprc_ehr.labwork_panels t where t.includeInPanel = true AND t.ServiceId.Dataset='Hematology' ) diff --git a/snprc_ehr/resources/queries/study/hematologyPivotInner.sql b/snprc_ehr/resources/queries/study/hematologyPivotInner.sql index 9a7040b46..bee66db5a 100644 --- a/snprc_ehr/resources/queries/study/hematologyPivotInner.sql +++ b/snprc_ehr/resources/queries/study/hematologyPivotInner.sql @@ -19,10 +19,9 @@ SELECT b.runId.serviceRequested as panelName, b.serviceTestId.testName AS TestName, b.remark, - CASE - WHEN b.result IS NULL THEN b.qualresult - ELSE CAST(CAST(b.result AS float) AS VARCHAR) - END as result + COALESCE(CAST(CAST(b.result AS float) AS VARCHAR), b.qualresult) as result, + b.abnormal_flags + FROM study.labworkResults b WHERE b.serviceTestId.includeInPanel = true and b.serviceTestid.ServiceId.Dataset = 'Hematology' @@ -34,8 +33,8 @@ SELECT COALESCE (lp.ServiceId.ServiceName, obr.PROCEDURE_NAME) as PanelName, COALESCE (lp.TestName, obx.TEST_NAME) as TestName, nte.COMMENT as remark, - COALESCE(obx.RESULT, obx.QUALITATIVE_RESULT) as result - + COALESCE(obx.RESULT, obx.QUALITATIVE_RESULT) as result, + obx.ABNORMAL_FLAGS as abnormal_flags FROM snprc_ehr.HL7_OBR obr LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId diff --git a/snprc_ehr/resources/queries/study/labworkResultsAll.query.xml b/snprc_ehr/resources/queries/study/labworkResultsAll.query.xml index 8a08fc79b..ade016a6a 100644 --- a/snprc_ehr/resources/queries/study/labworkResultsAll.query.xml +++ b/snprc_ehr/resources/queries/study/labworkResultsAll.query.xml @@ -107,8 +107,16 @@ UserId Users core - -
+ ` +
+ + true + + core + qcstate + rowid + + diff --git a/snprc_ehr/resources/queries/study/labworkResultsAll.sql b/snprc_ehr/resources/queries/study/labworkResultsAll.sql index 359135d1f..297494ff6 100644 --- a/snprc_ehr/resources/queries/study/labworkResultsAll.sql +++ b/snprc_ehr/resources/queries/study/labworkResultsAll.sql @@ -41,11 +41,12 @@ SELECT lr.enddate, lr.method, lr.remark, - lr.objectId + lr.objectId, + lr.QCState FROM study.labworkResults lr LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp ON lr.testId = lp.TestId AND lr.serviceId = lp.ServiceId -union +UNION SELECT obr.ANIMAL_ID AS Id, @@ -65,12 +66,13 @@ SELECT NULL as enddate, NULL as method, nte.COMMENT as remark, - obx.OBJECT_ID AS objectId + obx.OBJECT_ID AS objectId, + q.rowId as QCState FROM snprc_ehr.HL7_OBR obr LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID LEFT OUTER JOIN snprc_ehr.HL7_GroupNTE nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID LEFT OUTER JOIN snprc_ehr.labwork_Panels AS lp on obx.TEST_ID = lp.TestId AND obr.PROCEDURE_ID = lp.ServiceId - + INNER JOIN core.QCState as q on q.Label = 'Completed' UNION select alr.Id, @@ -90,7 +92,8 @@ select alr.enddate, alr.method, alr.remark, - alr.objectId + alr.objectId, + alr.QCState from study.assay_labworkResults as alr union @@ -112,5 +115,6 @@ select lt.enddate, lt.method, lt.remark, - null as objectId + null as objectId, + lt.QCState from study.labworkTaqman as lt diff --git a/snprc_ehr/resources/queries/study/labworkResultsAll/.qview.xml b/snprc_ehr/resources/queries/study/labworkResultsAll/.qview.xml index b0798ccca..0a73206df 100644 --- a/snprc_ehr/resources/queries/study/labworkResultsAll/.qview.xml +++ b/snprc_ehr/resources/queries/study/labworkResultsAll/.qview.xml @@ -16,6 +16,7 @@
+ @@ -25,10 +26,7 @@ - - - diff --git a/snprc_ehr/resources/queries/study/miscPivot.sql b/snprc_ehr/resources/queries/study/miscPivot.sql index 529b59bb0..65377af24 100644 --- a/snprc_ehr/resources/queries/study/miscPivot.sql +++ b/snprc_ehr/resources/queries/study/miscPivot.sql @@ -16,17 +16,17 @@ SELECT b.Id, b.date, - b.runId, b.panelName, b.TestName, b.remark, MAX(b.result) as results, + GROUP_CONCAT(b.abnormal_flags) as abnormal_flags FROM miscPivotInner b -GROUP BY b.runid,b.id, b.date, b.TestName, b.panelName, b.remark +GROUP BY b.id, b.date, b.TestName, b.panelName, b.remark -PIVOT results BY TestName IN +PIVOT results, abnormal_flags BY TestName IN (select TestName from snprc_ehr.labwork_panels t where t.includeInPanel = true AND t.ServiceId.Dataset='Misc Tests' ) \ No newline at end of file diff --git a/snprc_ehr/resources/queries/study/miscPivotInner.sql b/snprc_ehr/resources/queries/study/miscPivotInner.sql index baf255c3c..da06c375d 100644 --- a/snprc_ehr/resources/queries/study/miscPivotInner.sql +++ b/snprc_ehr/resources/queries/study/miscPivotInner.sql @@ -14,16 +14,29 @@ * limitations under the License. */ SELECT - b.Id, - b.date, - b.runId.serviceRequested as panelName, - b.serviceTestId.testName AS TestName, - b.remark, - coalesce(b.runId, b.objectid) as runId, - b.resultoorindicator, - CASE - WHEN b.result IS NULL THEN b.qualresult - ELSE CAST(CAST(b.result AS float) AS VARCHAR) - END as result + b.Id, + b.date, + b.runId.serviceRequested as panelName, + b.serviceTestId.testName AS TestName, + b.remark, + COALESCE(CAST(CAST(b.result AS float) AS VARCHAR), qualresult) as result, + b.abnormal_flags FROM study.labworkResults b -WHERE b.serviceTestId.includeInPanel = true and b.qcstate.publicdata = true and b.serviceTestid.ServiceId.Dataset = 'Misc Tests' \ No newline at end of file +WHERE b.serviceTestId.includeInPanel = true and b.qcstate.publicdata = true and b.serviceTestid.ServiceId.Dataset = 'Misc Tests' + +UNION + +SELECT + obr.ANIMAL_ID as id, + obr.OBSERVATION_DATE_TM as date, + obr.PROCEDURE_NAME as panelName, + obx.TEST_NAME as TestName, + nte.COMMENT as remark, + COALESCE(obx.RESULT, obx.QUALITATIVE_RESULT) as result, + obx.ABNORMAL_FLAGS AS abnormal_flags + +FROM snprc_ehr.HL7_OBR obr + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_GroupNTE AS nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID +WHERE obr.PROCEDURE_ID.Dataset = 'Misc Tests' + diff --git a/snprc_ehr/resources/queries/study/surveillancePivot.query.xml b/snprc_ehr/resources/queries/study/surveillancePivot.query.xml index b0b00a033..b80783396 100644 --- a/snprc_ehr/resources/queries/study/surveillancePivot.query.xml +++ b/snprc_ehr/resources/queries/study/surveillancePivot.query.xml @@ -21,16 +21,7 @@ Surveillance Panel Name 200 - - true - false - - study - ClinpathRuns - objectid - - - + diff --git a/snprc_ehr/resources/queries/study/surveillancePivot.sql b/snprc_ehr/resources/queries/study/surveillancePivot.sql index 143bb8318..bd5a6f27b 100644 --- a/snprc_ehr/resources/queries/study/surveillancePivot.sql +++ b/snprc_ehr/resources/queries/study/surveillancePivot.sql @@ -14,19 +14,18 @@ * limitations under the License. */ SELECT -b.Id, -b.date, -b.runid, -b.panelName, -b.TestName, -b.remark, -MAX(b.result) as results + b.Id, + b.date, + b.panelName, + b.TestName, + b.remark, + MAX(b.result) as results, FROM surveillancePivotInner b -GROUP BY b.runid, b.panelName, b.id, b.date, b.TestName, b.remark +GROUP BY b.id, b.date, b.TestName, b.panelName, b.remark -PIVOT results BY TestName IN + PIVOT results BY TestName IN (select TestName from snprc_ehr.labwork_panels t - where t.includeInPanel = true AND t.ServiceId.Dataset='Surveillance') - +where t.includeInPanel = true AND t.ServiceId.Dataset='Surveillance' +) diff --git a/snprc_ehr/resources/queries/study/surveillancePivotInner.sql b/snprc_ehr/resources/queries/study/surveillancePivotInner.sql index d0cc20e76..17e3fb694 100644 --- a/snprc_ehr/resources/queries/study/surveillancePivotInner.sql +++ b/snprc_ehr/resources/queries/study/surveillancePivotInner.sql @@ -22,46 +22,46 @@ SELECT b.date, b.serviceTestId.serviceId.ServiceName AS PanelName, b.serviceTestId.testName AS TestName, - coalesce(b.runId, b.objectid) as runId, - b.resultoorindicator, b.remark, - CASE - WHEN b.result IS NULL THEN b.qualresult - ELSE CAST(CAST(b.result AS float) AS VARCHAR) - END as result + COALESCE( CAST(CAST(b.result AS float) AS VARCHAR), b.qualresult) as result FROM study.labworkResults b WHERE b.serviceTestId.includeInPanel = true and b.qcstate.publicdata = true and b.serviceTestid.ServiceId.Dataset = 'Surveillance' -union +UNION SELECT b.id, b.date, b.serviceTestId.serviceId.ServiceName AS PanelName, b.serviceTestId.testName AS TestName, - coalesce(b.runId, b.objectid) as runId, - b.resultoorindicator, b.remark, - CASE - WHEN b.result IS NULL THEN b.qualresult - ELSE CAST(CAST(b.result AS float) AS VARCHAR) - END as result + COALESCE( CAST(CAST(b.result AS float) AS VARCHAR), b.qualresult) as result FROM study.assay_labworkResults b WHERE b.serviceTestId.includeInPanel = true and b.qcstate.publicdata = true and b.serviceTestid.ServiceId.Dataset = 'Surveillance' -union +UNION SELECT b.id, b.date, b.serviceTestId.serviceId.ServiceName AS PanelName, b.serviceTestId.testName AS TestName, - coalesce(b.runId, cast(b.Sequencenum as varchar)) as runId, - b.resultoorindicator, b.remark, - CASE - WHEN b.result IS NULL THEN b.qualresult - ELSE CAST(CAST(b.result AS float) AS VARCHAR) - END as result + COALESCE( CAST(CAST(b.result AS float) AS VARCHAR), b.qualresult) as result FROM study.labworkTaqman b WHERE b.serviceTestId.includeInPanel = true and b.qcstate.publicdata = true and b.serviceTestid.ServiceId.Dataset = 'Surveillance' + +UNION + +SELECT + obr.ANIMAL_ID as id, + obr.OBSERVATION_DATE_TM as date, + obr.PROCEDURE_NAME as panelName, + obx.TEST_NAME as TestName, + nte.COMMENT as remark, + COALESCE(obx.RESULT, obx.QUALITATIVE_RESULT) as result + +FROM snprc_ehr.HL7_OBR obr + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_GroupNTE AS nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID +WHERE obr.PROCEDURE_ID.Dataset = 'Surveillance' \ No newline at end of file diff --git a/snprc_ehr/resources/queries/study/urinalysisPivot.sql b/snprc_ehr/resources/queries/study/urinalysisPivot.sql index 7e41a1ecc..4d3ecc63a 100644 --- a/snprc_ehr/resources/queries/study/urinalysisPivot.sql +++ b/snprc_ehr/resources/queries/study/urinalysisPivot.sql @@ -14,19 +14,19 @@ * limitations under the License. */ SELECT - b.Id, - b.date, - b.runId, - b.panelName, - b.TestName, - b.remark, - MAX(b.result) as results + b.Id, + b.date, + b.panelName, + b.TestName, + b.remark, + MAX(b.result) as results, + GROUP_CONCAT(b.abnormal_flags) as abnormal_flags FROM urinalysisPivotInner b -GROUP BY b.runid,b.id, b.date, b.TestName, b.panelName, b.remark +GROUP BY b.id, b.date, b.TestName, b.panelName, b.remark -PIVOT results BY TestName IN + PIVOT results, abnormal_flags BY TestName IN (select TestName from snprc_ehr.labwork_panels t where t.includeInPanel = true AND t.ServiceId.Dataset='Urinalysis' -) \ No newline at end of file +) diff --git a/snprc_ehr/resources/queries/study/urinalysisPivotInner.sql b/snprc_ehr/resources/queries/study/urinalysisPivotInner.sql index d35203c70..8346d5f0a 100644 --- a/snprc_ehr/resources/queries/study/urinalysisPivotInner.sql +++ b/snprc_ehr/resources/queries/study/urinalysisPivotInner.sql @@ -14,17 +14,28 @@ * limitations under the License. */ SELECT - b.Id, - b.date, - b.runId.serviceRequested as panelName, - b.serviceTestId.testName AS TestName, - - coalesce(b.runId, b.objectid) as runId, - b.resultoorindicator, - b.remark, - CASE - WHEN b.result IS NULL THEN b.qualresult - ELSE CAST(CAST(b.result AS float) AS VARCHAR) - END as result + b.Id, + b.date, + b.runId.serviceRequested as panelName, + b.serviceTestId.testName AS TestName, + b.remark, + COALESCE(CAST(CAST(b.result AS float) AS VARCHAR), qualresult) as result, + b.abnormal_flags FROM study.labworkResults b -WHERE b.serviceTestId.includeInPanel = true and b.qcstate.publicdata = true and b.serviceTestid.ServiceId.Dataset = 'Urinalysis' \ No newline at end of file +WHERE b.serviceTestId.includeInPanel = true and b.qcstate.publicdata = true and b.serviceTestid.ServiceId.Dataset = 'Urinalysis' + +UNION + +SELECT + obr.ANIMAL_ID as id, + obr.OBSERVATION_DATE_TM as date, + obr.PROCEDURE_NAME as panelName, + obx.TEST_NAME as TestName, + nte.COMMENT as remark, + COALESCE(obx.RESULT, obx.QUALITATIVE_RESULT) as result, + obx.ABNORMAL_FLAGS AS abnormal_flags + +FROM snprc_ehr.HL7_OBR obr + LEFT OUTER JOIN snprc_ehr.HL7_OBX obx ON obr.OBJECT_ID = obx.OBR_OBJECT_ID AND obr.SET_ID = obx.OBR_SET_ID + LEFT OUTER JOIN snprc_ehr.HL7_GroupNTE AS nte ON obr.OBJECT_ID = nte.OBR_OBJECT_ID AND obr.SET_ID = nte.OBR_SET_ID +WHERE obr.PROCEDURE_ID.Dataset = 'Urinalysis' \ No newline at end of file diff --git a/snprc_ehr/resources/web/snprc_ehr/snprcOverrides.js b/snprc_ehr/resources/web/snprc_ehr/snprcOverrides.js index ddcd7be0b..38e640eb1 100644 --- a/snprc_ehr/resources/web/snprc_ehr/snprcOverrides.js +++ b/snprc_ehr/resources/web/snprc_ehr/snprcOverrides.js @@ -205,7 +205,7 @@ Ext4.override(EHR.panel.SnapshotPanel, { Ext4.each(results, function (row) { var newRow = { diet_date: row['date'], - diet: row['code/meaning'], + diet: row['code/Diet'], }; rows.push(newRow); }, this); diff --git a/snprc_ehr/src/org/labkey/snprc_ehr/SNPRC_EHRModule.java b/snprc_ehr/src/org/labkey/snprc_ehr/SNPRC_EHRModule.java index 8e5c7e3ba..76458414f 100644 --- a/snprc_ehr/src/org/labkey/snprc_ehr/SNPRC_EHRModule.java +++ b/snprc_ehr/src/org/labkey/snprc_ehr/SNPRC_EHRModule.java @@ -83,7 +83,8 @@ import org.labkey.snprc_ehr.history.DefaultPregnanciesDataSource; import org.labkey.snprc_ehr.history.DefaultTreatmentOrdersDataSource; import org.labkey.snprc_ehr.history.DietDataSource; -import org.labkey.snprc_ehr.history.LabResultsLabworkType; +import org.labkey.snprc_ehr.history.LabworkType; +import org.labkey.snprc_ehr.history.LabworkDataSource; import org.labkey.snprc_ehr.history.OffspringDataSource; import org.labkey.snprc_ehr.notification.SampleSSRSNotification; import org.labkey.snprc_ehr.pipeline.FeeSchedulePipelineProvider; @@ -239,13 +240,14 @@ protected void doStartupAfterSpringConfig(ModuleContext moduleContext) EHRService.get().registerHistoryDataSource(new DefaultCasesDataSource(this)); EHRService.get().registerHistoryDataSource(new DefaultCasesCloseDataSource(this)); EHRService.get().registerHistoryDataSource(new DefaultPregnanciesDataSource(this)); + EHRService.get().registerHistoryDataSource(new LabworkDataSource(this)); // Add SNPRC clinical history data sources EHRService.get().registerHistoryDataSource(new DietDataSource(this)); EHRService.get().registerHistoryDataSource(new OffspringDataSource(this)); // Add SNPRC Labwork type - EHRService.get().registerLabworkType(new LabResultsLabworkType(this)); + EHRService.get().registerLabworkType(new LabworkType(this)); // demographics EHRService.get().registerDemographicsProvider(new ParentsDemographicsProvider(this)); diff --git a/snprc_ehr/src/org/labkey/snprc_ehr/constants/QueryConstants.java b/snprc_ehr/src/org/labkey/snprc_ehr/constants/QueryConstants.java index dd33393bd..bce30c6bf 100644 --- a/snprc_ehr/src/org/labkey/snprc_ehr/constants/QueryConstants.java +++ b/snprc_ehr/src/org/labkey/snprc_ehr/constants/QueryConstants.java @@ -36,6 +36,8 @@ public class QueryConstants public static final String DATE_COLUMN_VARIABLE = "dateColumnName"; public static final String EHR_LOOKUPS_SCHEMA = "ehr_lookups"; public static final String AGE_CLASS_LOOKUP_URL = "/detailsQueryRow.view?schemaName=ehr_lookups&query.queryName=ageclass&rowid="; + public static final String ENCOUNTER_FLAGS_TABLE = "encounter_flags"; + public static final String LABWORK_SERVICE_TYPE_COLUMN = "type"; public static final String AGE_CLASS_TABLE = "ageClass"; diff --git a/snprc_ehr/src/org/labkey/snprc_ehr/demographics/CurrentDietDemographicsProvider.java b/snprc_ehr/src/org/labkey/snprc_ehr/demographics/CurrentDietDemographicsProvider.java index 73101f3a8..959ab7c6e 100644 --- a/snprc_ehr/src/org/labkey/snprc_ehr/demographics/CurrentDietDemographicsProvider.java +++ b/snprc_ehr/src/org/labkey/snprc_ehr/demographics/CurrentDietDemographicsProvider.java @@ -46,7 +46,7 @@ protected Set getFieldKeys() keys.add(FieldKey.fromString("lsid")); keys.add(FieldKey.fromString("Id")); keys.add(FieldKey.fromString("code")); - keys.add(FieldKey.fromString("code/meaning")); + keys.add(FieldKey.fromString("code/Diet")); keys.add(FieldKey.fromString("date")); keys.add(FieldKey.fromString("enddate")); keys.add(FieldKey.fromString("performedby")); diff --git a/snprc_ehr/src/org/labkey/snprc_ehr/history/DietDataSource.java b/snprc_ehr/src/org/labkey/snprc_ehr/history/DietDataSource.java index 807926f99..bc9e94bec 100644 --- a/snprc_ehr/src/org/labkey/snprc_ehr/history/DietDataSource.java +++ b/snprc_ehr/src/org/labkey/snprc_ehr/history/DietDataSource.java @@ -39,8 +39,8 @@ protected String getHtml(Container c, Results rs, boolean redacted) throws SQLEx { StringBuilder sb = new StringBuilder(); - addStringFieldLookup(rs, sb, "meaning", "code", "Diet"); - addStringField(rs, sb, "code", "SNOMED"); + addStringFieldLookup(rs, sb, "Diet", "code", "Diet"); + addStringField(rs, sb, "Diet", "Diet"); addDateField(c, rs, sb, "enddate", "End Date"); return sb.toString(); diff --git a/snprc_ehr/src/org/labkey/snprc_ehr/history/LabworkDataSource.java b/snprc_ehr/src/org/labkey/snprc_ehr/history/LabworkDataSource.java new file mode 100644 index 000000000..41ff66997 --- /dev/null +++ b/snprc_ehr/src/org/labkey/snprc_ehr/history/LabworkDataSource.java @@ -0,0 +1,201 @@ +/* + * Copyright (c) 2013-2019 LabKey Corporation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.labkey.snprc_ehr.history; + +import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.NotNull; +import org.labkey.api.data.CompareType; +import org.labkey.api.data.Container; +import org.labkey.api.data.Results; +import org.labkey.api.data.Selector; +import org.labkey.api.data.SimpleFilter; +import org.labkey.api.data.TableInfo; +import org.labkey.api.data.TableSelector; +import org.labkey.api.ehr.EHRService; +import org.labkey.api.ehr.history.HistoryRow; +import org.labkey.api.ehr.history.AbstractDataSource; +import org.labkey.api.module.Module; +import org.labkey.api.ehr.history.LabworkType; +import org.labkey.api.query.FieldKey; +import org.labkey.api.query.QueryService; +import org.labkey.api.query.UserSchema; +import org.labkey.api.security.User; +import org.labkey.api.util.PageFlowUtil; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static org.labkey.snprc_ehr.constants.QueryConstants.*; + +/** + * * Forked from EHR DefaultLabworkDataSource.java - tjh + */ +public class LabworkDataSource extends AbstractDataSource +{ + private Map> _results; + private Map> _flags; + + public LabworkDataSource(Module module) + { + super("study", "clinpathRunsAll", "Labwork", "Labwork", module); + } + + @Override + protected String getHtml(Container c, Results rs, boolean redacted) throws SQLException + { + StringBuilder sb = new StringBuilder(); + + if (!redacted && EHRService.get().showLabworkPerformedBy(c, rs.hasColumn(FieldKey.fromString(LABWORK_SERVICE_TYPE_COLUMN)) ? rs.getString(LABWORK_SERVICE_TYPE_COLUMN) : null)) + { + sb.append(safeAppend(rs, "Performed By", "performedby")); + //Modified 10-13-2017 Blasa + sb.append(safeAppend(rs, "Testing Performed by", "createdby/DisplayName")); + } + + sb.append(safeAppend(rs, "Service/Panel", "servicerequested")); + + sb.append(safeAppend(rs, "Sample Type", "sampletype")); + + if (rs.hasColumn(FieldKey.fromString("tissue")) && rs.getObject("tissue") != null) + sb.append("Sample/Tissue: ").append(snomedToString(rs, FieldKey.fromString("tissue"), FieldKey.fromString("tissue/meaning"))); + + sb.append(safeAppend(rs, "Remark", "remark")); + + String runId = rs.getString("objectid"); + if (runId != null) + { + List flags = _flags.get(runId); + if (flags != null) + { + sb.append("Flags:\n"); + sb.append("
"); + sb.append(StringUtils.join(flags, "\n")); + sb.append("
").append("\n"); + } + + List results = _results.get(runId); + if (results != null) + { + sb.append("Results:\n"); + sb.append("
"); + sb.append(StringUtils.join(results, "\n")); + sb.append("
"); + } + } + + return sb.toString(); + } + + @Override + protected Set getColumnNames() + { + //Modified: 5-17-2017 R.Blasa + return PageFlowUtil.set("Id", "date", "enddate", "objectid", "type", "performedby", "sampletype", "tissue/meaning", "tissue", "collectionmethod", "method", "servicerequested", "createdby/DisplayName","remark"); + } + + @Override + public @NotNull List getRows(Container c, User u, final String subjectId, Date minDate, Date maxDate, boolean redacted) + { + Date start = new Date(); + + _results = EHRService.get().getLabworkResults(c, u, subjectId, minDate, maxDate, redacted); + + long duration = ((new Date()).getTime() - start.getTime()) / 1000; + if (duration > 6) + _log.error("Loaded lab results for: " + subjectId + " in " + duration + " seconds"); + + start = new Date(); + _flags = getFlags(c, u, subjectId, minDate, maxDate); + duration = ((new Date()).getTime() - start.getTime()) / 1000; + if (duration > 4) + _log.error("Loaded clinpath flags for: " + subjectId + " in " + duration + " seconds"); + + return super.getRows(c, u, subjectId, minDate, maxDate, redacted); + } + + public Map> getFlags(Container c, User u, String id, Date minDate, Date maxDate) + { + UserSchema schema = QueryService.get().getUserSchema(u, c, "ehr"); + TableInfo ti = schema.getTable(ENCOUNTER_FLAGS_TABLE); + + SimpleFilter filter = new SimpleFilter(); + if (id != null) + filter.addCondition(FieldKey.fromString("id"), id, CompareType.EQUAL); + if (minDate != null) + filter.addCondition(FieldKey.fromString("date"), minDate, CompareType.DATE_GTE); + if (maxDate != null) + filter.addCondition(FieldKey.fromString("date"), maxDate, CompareType.DATE_LTE); + + TableSelector ts = new TableSelector(ti, PageFlowUtil.set("parentid", "flag", "value"), filter, null); + final Map> map = new HashMap<>(); + + ts.forEach(new Selector.ForEachBlock() + { + @Override + public void exec(ResultSet rs) throws SQLException + { + String runId = rs.getString("parentid"); + if (runId != null) + { + List rows = map.get(runId); + if (rows == null) + rows = new ArrayList<>(); + + String flag = rs.getString("flag"); + String value = rs.getString("value"); + rows.add(flag + ": " + value + "\n"); + + map.put(runId, rows); + } + } + }); + + return map; + } + + @Override + protected String getCategoryText(Results rs) throws SQLException + { + String category = rs.getString(LABWORK_SERVICE_TYPE_COLUMN); + return category == null ? super.getCategoryText(rs) : category; + } + + @Override + protected String getPrimaryGroup(Results rs) throws SQLException + { + return getCategoryText(rs); + } + + @Override + public Set getAllowableCategoryGroups(Container c, User u) + { + Set types = new HashSet<>(); + types.add("Labwork"); + for (LabworkType type : EHRService.get().getLabworkTypes(c)) + { + types.add(type.getName()); + } + + return types; + } +} \ No newline at end of file diff --git a/snprc_ehr/src/org/labkey/snprc_ehr/history/LabResultsLabworkType.java b/snprc_ehr/src/org/labkey/snprc_ehr/history/LabworkType.java similarity index 91% rename from snprc_ehr/src/org/labkey/snprc_ehr/history/LabResultsLabworkType.java rename to snprc_ehr/src/org/labkey/snprc_ehr/history/LabworkType.java index 8072e587e..ec801552f 100644 --- a/snprc_ehr/src/org/labkey/snprc_ehr/history/LabResultsLabworkType.java +++ b/snprc_ehr/src/org/labkey/snprc_ehr/history/LabworkType.java @@ -50,20 +50,22 @@ * 7/21/2017 Fixed issue with labworkResults not populating. tjh * 7/28/2017 Fixed sorting issue. tjh * 8/14/2017 Fixed _runid_typeField. tjh + * 8/12/2022 Added color highlighting for abnormal results. tjh */ -public class LabResultsLabworkType extends DefaultLabworkType +public class LabworkType extends DefaultLabworkType { protected String _test_nameField = "serviceTestId/testName"; - protected String _sortField = "sortOrder"; + protected String _sortField = "serviceTestId/sortOrder"; protected String _runid_typeField = "runid/ServiceId/Dataset"; protected String _default_testType = "LabworkResults"; + protected String _test_typeField = "ServiceId/Dataset/ServiceType"; private static String _testType; private String _testCol = "RowId"; private String _sortCol = "sortOrder"; private Map _tests = null; - public LabResultsLabworkType(Module module) + public LabworkType(Module module) { // LabworkResultsAll is a query that aggregates several labwork related datasets super("Labwork Results", "study", "LabworkResultsAll", module); @@ -100,10 +102,12 @@ protected String getLine(Results rs, boolean redacted) throws SQLException if (result != null || qualResult != null) { //col 1 - sb.append("").append(testName).append("").append(" (").append(testId).append(") ").append(""); + sb.append( "" : "color:red;'>")); + sb.append(testName).append("").append(" (").append(testId).append(") ").append(""); // col 2 - sb.append(""); + sb.append( "" : "color:red;'>")); + if (qualResult != null) { sb.append(": ").append(qualResult); @@ -112,11 +116,10 @@ protected String getLine(Results rs, boolean redacted) throws SQLException sb.append(" ").append(units); } } - sb.append(""); // col 3 - sb.append(""); + sb.append( "" : "color:red;'>")); if (refRange != null) { sb.append("Normal Range: ").append(refRange); @@ -141,7 +144,7 @@ private Map loadTests(boolean forceRefresh) _tests = new CaseInsensitiveHashMap<>(); // - TableSelector ts = new TableSelector(ti, PageFlowUtil.set(_sortCol, _testCol), new SimpleFilter(FieldKey.fromString("ServiceId/Dataset/ServiceType"), _testType), null); + TableSelector ts = new TableSelector(ti, PageFlowUtil.set(_sortCol, _testCol), new SimpleFilter(FieldKey.fromString(_test_typeField), _testType), null); ts.forEach(new Selector.ForEachBlock() { @Override From 8fc79180ad7bc831bbd0f12318f7c7e373ab8a75 Mon Sep 17 00:00:00 2001 From: Terry J Hawkins Date: Tue, 16 Aug 2022 10:55:42 -0500 Subject: [PATCH 16/17] -Updated clinpathRunsAll.sql to use type column from clinpathRuns if snprc_ehr.labwork_services data is not populated -incremented module version number -renamed module upgrade script to align with new module version --- snprc_ehr/resources/queries/study/clinpathRunsAll.sql | 2 +- ...{snprc_ehr-21.001-22.000.sql => snprc_ehr-22.000-22.001.sql} | 0 snprc_ehr/src/org/labkey/snprc_ehr/SNPRC_EHRModule.java | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename snprc_ehr/resources/schemas/dbscripts/sqlserver/{snprc_ehr-21.001-22.000.sql => snprc_ehr-22.000-22.001.sql} (100%) diff --git a/snprc_ehr/resources/queries/study/clinpathRunsAll.sql b/snprc_ehr/resources/queries/study/clinpathRunsAll.sql index 238403512..2ae89bb35 100644 --- a/snprc_ehr/resources/queries/study/clinpathRunsAll.sql +++ b/snprc_ehr/resources/queries/study/clinpathRunsAll.sql @@ -47,7 +47,7 @@ SELECT Id, date, enddate, - serviceId.Dataset.ServiceType as type, + COALESCE(serviceId.Dataset.ServiceType, type) as type, tissue, project, instructions, diff --git a/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-21.001-22.000.sql b/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-22.000-22.001.sql similarity index 100% rename from snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-21.001-22.000.sql rename to snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-22.000-22.001.sql diff --git a/snprc_ehr/src/org/labkey/snprc_ehr/SNPRC_EHRModule.java b/snprc_ehr/src/org/labkey/snprc_ehr/SNPRC_EHRModule.java index 76458414f..83fb9551b 100644 --- a/snprc_ehr/src/org/labkey/snprc_ehr/SNPRC_EHRModule.java +++ b/snprc_ehr/src/org/labkey/snprc_ehr/SNPRC_EHRModule.java @@ -118,7 +118,7 @@ public String getName() @Override public @Nullable Double getSchemaVersion() { - return 22.000; + return 22.001; } @Override From 6d24ea25c51af0762b33fbc6d23a00e9eb779d66 Mon Sep 17 00:00:00 2001 From: Terry J Hawkins Date: Tue, 16 Aug 2022 12:37:39 -0500 Subject: [PATCH 17/17] Added missing column to snprc_ehr.xml schema --- snprc_ehr/resources/schemas/snprc_ehr.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/snprc_ehr/resources/schemas/snprc_ehr.xml b/snprc_ehr/resources/schemas/snprc_ehr.xml index 47d2e81a8..09ed60b3b 100644 --- a/snprc_ehr/resources/schemas/snprc_ehr.xml +++ b/snprc_ehr/resources/schemas/snprc_ehr.xml @@ -2109,6 +2109,7 @@ +