From 4d8e2a70f51bafc54eddd3d35e81749afcfc8e95 Mon Sep 17 00:00:00 2001 From: Adam Rauch Date: Fri, 21 Aug 2026 15:01:28 -0700 Subject: [PATCH 01/12] Consolidate onprc_ssu scripts --- onprc_ssu/module.properties | 4 ++-- ...0-13.21.sql => onprc_ssu-0.000-25.000.sql} | 10 +++++++++- .../sqlserver/onprc_ssu-13.21-13.22.sql | 17 ----------------- .../sqlserver/onprc_ssu-13.22-13.23.sql | 19 ------------------- .../org/labkey/onprc_ssu/ONPRC_SSUModule.java | 4 ++-- 5 files changed, 13 insertions(+), 41 deletions(-) rename onprc_ssu/resources/schemas/dbscripts/sqlserver/{onprc_ssu-13.20-13.21.sql => onprc_ssu-0.000-25.000.sql} (82%) delete mode 100644 onprc_ssu/resources/schemas/dbscripts/sqlserver/onprc_ssu-13.21-13.22.sql delete mode 100644 onprc_ssu/resources/schemas/dbscripts/sqlserver/onprc_ssu-13.22-13.23.sql diff --git a/onprc_ssu/module.properties b/onprc_ssu/module.properties index b21928fe5..fbfea49ba 100644 --- a/onprc_ssu/module.properties +++ b/onprc_ssu/module.properties @@ -1,3 +1,3 @@ ModuleClass: org.labkey.onprc_ssu.ONPRC_SSUModule -SupportedDatabases: mssql -ManageVersion: false +SupportedDatabases: mssql, pgsql +ManageVersion: true diff --git a/onprc_ssu/resources/schemas/dbscripts/sqlserver/onprc_ssu-13.20-13.21.sql b/onprc_ssu/resources/schemas/dbscripts/sqlserver/onprc_ssu-0.000-25.000.sql similarity index 82% rename from onprc_ssu/resources/schemas/dbscripts/sqlserver/onprc_ssu-13.20-13.21.sql rename to onprc_ssu/resources/schemas/dbscripts/sqlserver/onprc_ssu-0.000-25.000.sql index 7c2a9b137..2b86999cf 100644 --- a/onprc_ssu/resources/schemas/dbscripts/sqlserver/onprc_ssu-13.20-13.21.sql +++ b/onprc_ssu/resources/schemas/dbscripts/sqlserver/onprc_ssu-0.000-25.000.sql @@ -35,4 +35,12 @@ CREATE TABLE onprc_ssu.schedule ( modifiedby int, constraint PK_schedule PRIMARY KEY (objectid) -); \ No newline at end of file +); + +/* 13.xxx SQL scripts */ + +ALTER TABLE onprc_ssu.schedule ADD project integer; + +ALTER TABLE onprc_ssu.schedule ADD formcreated bit; +ALTER TABLE onprc_ssu.schedule ADD encounterid entityid; +ALTER TABLE onprc_ssu.schedule ADD taskid entityid; \ No newline at end of file diff --git a/onprc_ssu/resources/schemas/dbscripts/sqlserver/onprc_ssu-13.21-13.22.sql b/onprc_ssu/resources/schemas/dbscripts/sqlserver/onprc_ssu-13.21-13.22.sql deleted file mode 100644 index a4333d8eb..000000000 --- a/onprc_ssu/resources/schemas/dbscripts/sqlserver/onprc_ssu-13.21-13.22.sql +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright (c) 2011 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. - */ - -ALTER TABLE onprc_ssu.schedule ADD project integer; \ No newline at end of file diff --git a/onprc_ssu/resources/schemas/dbscripts/sqlserver/onprc_ssu-13.22-13.23.sql b/onprc_ssu/resources/schemas/dbscripts/sqlserver/onprc_ssu-13.22-13.23.sql deleted file mode 100644 index 9f83153b5..000000000 --- a/onprc_ssu/resources/schemas/dbscripts/sqlserver/onprc_ssu-13.22-13.23.sql +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright (c) 2011 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. - */ - -ALTER TABLE onprc_ssu.schedule ADD formcreated bit; -ALTER TABLE onprc_ssu.schedule ADD encounterid entityid; -ALTER TABLE onprc_ssu.schedule ADD taskid entityid; \ No newline at end of file diff --git a/onprc_ssu/src/org/labkey/onprc_ssu/ONPRC_SSUModule.java b/onprc_ssu/src/org/labkey/onprc_ssu/ONPRC_SSUModule.java index 99b6a6825..8ba709fcf 100644 --- a/onprc_ssu/src/org/labkey/onprc_ssu/ONPRC_SSUModule.java +++ b/onprc_ssu/src/org/labkey/onprc_ssu/ONPRC_SSUModule.java @@ -46,9 +46,9 @@ public String getName() } @Override - public boolean hasScripts() + public double getEarliestUpgradeVersion() { - return true; + return 13.23; } @Override From cf3c3e328dc0961def78991ba10778fbb2db4f9e Mon Sep 17 00:00:00 2001 From: Adam Rauch Date: Fri, 21 Aug 2026 15:20:24 -0700 Subject: [PATCH 02/12] PostgreSQL onprc_ssu scripts --- .../postgresql/onprc_ssu-0.000-25.000.sql | 41 +++++++++++++++++++ .../org/labkey/onprc_ssu/ONPRC_SSUModule.java | 2 +- 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 onprc_ssu/resources/schemas/dbscripts/postgresql/onprc_ssu-0.000-25.000.sql diff --git a/onprc_ssu/resources/schemas/dbscripts/postgresql/onprc_ssu-0.000-25.000.sql b/onprc_ssu/resources/schemas/dbscripts/postgresql/onprc_ssu-0.000-25.000.sql new file mode 100644 index 000000000..0caad9f9e --- /dev/null +++ b/onprc_ssu/resources/schemas/dbscripts/postgresql/onprc_ssu-0.000-25.000.sql @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2011 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. + */ + +CREATE SCHEMA onprc_ssu; + +CREATE TABLE onprc_ssu.schedule ( + rowid SERIAL, + Id varchar(100), + date timestamp, + location varchar(200), + procedureid int, + + objectid entityid not null, + + container entityid, + created timestamp, + createdby int, + modified timestamp, + modifiedby int, + + constraint PK_schedule PRIMARY KEY (objectid) +); + +ALTER TABLE onprc_ssu.schedule ADD project integer; + +ALTER TABLE onprc_ssu.schedule ADD formcreated boolean; +ALTER TABLE onprc_ssu.schedule ADD encounterid entityid; +ALTER TABLE onprc_ssu.schedule ADD taskid entityid; diff --git a/onprc_ssu/src/org/labkey/onprc_ssu/ONPRC_SSUModule.java b/onprc_ssu/src/org/labkey/onprc_ssu/ONPRC_SSUModule.java index 8ba709fcf..154e27899 100644 --- a/onprc_ssu/src/org/labkey/onprc_ssu/ONPRC_SSUModule.java +++ b/onprc_ssu/src/org/labkey/onprc_ssu/ONPRC_SSUModule.java @@ -42,7 +42,7 @@ public String getName() @Override public @Nullable Double getSchemaVersion() { - return 13.23; + return 26.000; } @Override From ae47afe2f82e787c2bf9662a6ead0bb22c094474 Mon Sep 17 00:00:00 2001 From: Adam Rauch Date: Fri, 21 Aug 2026 15:27:47 -0700 Subject: [PATCH 03/12] Clean up script --- .../dbscripts/postgresql/onprc_ssu-0.000-25.000.sql | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/onprc_ssu/resources/schemas/dbscripts/postgresql/onprc_ssu-0.000-25.000.sql b/onprc_ssu/resources/schemas/dbscripts/postgresql/onprc_ssu-0.000-25.000.sql index 0caad9f9e..cfcbd6b2c 100644 --- a/onprc_ssu/resources/schemas/dbscripts/postgresql/onprc_ssu-0.000-25.000.sql +++ b/onprc_ssu/resources/schemas/dbscripts/postgresql/onprc_ssu-0.000-25.000.sql @@ -22,6 +22,10 @@ CREATE TABLE onprc_ssu.schedule ( date timestamp, location varchar(200), procedureid int, + project integer, + formcreated boolean, + encounterid entityid, + taskid entityid, objectid entityid not null, @@ -33,9 +37,3 @@ CREATE TABLE onprc_ssu.schedule ( constraint PK_schedule PRIMARY KEY (objectid) ); - -ALTER TABLE onprc_ssu.schedule ADD project integer; - -ALTER TABLE onprc_ssu.schedule ADD formcreated boolean; -ALTER TABLE onprc_ssu.schedule ADD encounterid entityid; -ALTER TABLE onprc_ssu.schedule ADD taskid entityid; From c510a4c461ee4bba05907b27c1e41f86bf152ef4 Mon Sep 17 00:00:00 2001 From: Adam Rauch Date: Fri, 21 Aug 2026 15:39:50 -0700 Subject: [PATCH 04/12] Consolidate onprc_ehr_compliancedb SQL scripts --- ONPRC_EHR_ComplianceDB/module.properties | 4 +- .../onprc_ehr_compliancedb-0.000-24.000.sql | 43 - .../onprc_ehr_compliancedb-0.000-25.000.sql | 2530 +++++++++++++++++ .../onprc_ehr_compliancedb-24.001-24.002.sql | 311 -- .../onprc_ehr_compliancedb-24.002-24.003.sql | 65 - .../onprc_ehr_compliancedb-24.003-24.004.sql | 66 - .../onprc_ehr_compliancedb-24.004-24.005.sql | 250 -- .../onprc_ehr_compliancedb-24.005-24.006.sql | 261 -- .../onprc_ehr_compliancedb-24.006-24.007.sql | 349 --- .../onprc_ehr_compliancedb-24.007-24.008.sql | 317 --- .../onprc_ehr_compliancedb-24.008-24.009.sql | 232 -- .../onprc_ehr_compliancedb-24.009-24.010.sql | 325 --- .../onprc_ehr_compliancedb-24.010-24.011.sql | 251 -- .../onprc_ehr_compliancedb-24.011-24.012.sql | 65 - 14 files changed, 2532 insertions(+), 2537 deletions(-) delete mode 100644 ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-0.000-24.000.sql create mode 100644 ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-0.000-25.000.sql delete mode 100644 ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.001-24.002.sql delete mode 100644 ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.002-24.003.sql delete mode 100644 ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.003-24.004.sql delete mode 100644 ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.004-24.005.sql delete mode 100644 ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.005-24.006.sql delete mode 100644 ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.006-24.007.sql delete mode 100644 ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.007-24.008.sql delete mode 100644 ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.008-24.009.sql delete mode 100644 ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.009-24.010.sql delete mode 100644 ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.010-24.011.sql delete mode 100644 ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.011-24.012.sql diff --git a/ONPRC_EHR_ComplianceDB/module.properties b/ONPRC_EHR_ComplianceDB/module.properties index 7c901fa67..d6cafdc82 100644 --- a/ONPRC_EHR_ComplianceDB/module.properties +++ b/ONPRC_EHR_ComplianceDB/module.properties @@ -1,4 +1,4 @@ Name: ONPRC_EHR_ComplianceDB ModuleClass: org.labkey.ONPRCEHR_ComplianceDB.ONPRC_EHR_ComplianceDBModule -SupportedDatabases: mssql -ManageVersion: false +SupportedDatabases: mssql, pgsql +ManageVersion: true diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-0.000-24.000.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-0.000-24.000.sql deleted file mode 100644 index 2ada5c5ca..000000000 --- a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-0.000-24.000.sql +++ /dev/null @@ -1,43 +0,0 @@ - -CREATE SCHEMA onprc_ehr_compliancedb; -GO - -CREATE TABLE onprc_ehr_compliancedb.SciShield_Data -( - RowId INT IDENTITY(1,1) NOT NULL, - employeeId nvarchar(255) not null, - requirementname nvarchar(255) null, - Date datetime null, - Container ENTITYID NOT NULL, - comment nvarchar(2000) null, - CreatedBy USERID, - Created datetime, - ModifiedBy USERID, - Modified datetime, - processed int NULL - - CONSTRAINT PK_ScieShield_Data PRIMARY KEY (RowId), - CONSTRAINT FK_ONPRC_EHR_COMPLIANCE_SCISHIELD_DATA_CONTAINER FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) -); -CREATE INDEX IX_ONPRC_EHR_COMPLIANCEDB_SCISHIELD_DATA_CONTAINER ON onprc_ehr_compliancedb.SciShield_Data (Container); - -CREATE TABLE onprc_ehr_compliancedb.SciShield_Reference_Data -( - rowId int identity(1,1), - label nvarchar(250) NULL, - value nvarchar(255) NOT NULL , - columnName nvarchar(255) NOT NULL, - sort_order integer null, - endDate datetime NULL, - Container ENTITYID NOT NULL, - CreatedBy USERID, - Created datetime, - ModifiedBy USERID, - Modified datetime, - - CONSTRAINT pk_SciShield_reference PRIMARY KEY (value), - CONSTRAINT FK_ONPRC_EHR_COMPLIANCE_REFERENCE_DATA_CONTAINER FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) -); -CREATE INDEX IX_ONPRC_EHR_COMPLIANCEDB_SCISHIELD_REFERENCE_DATA_CONTAINER ON onprc_ehr_compliancedb.SciShield_Reference_Data (Container); - -GO \ No newline at end of file diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-0.000-25.000.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-0.000-25.000.sql new file mode 100644 index 000000000..a2339f639 --- /dev/null +++ b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-0.000-25.000.sql @@ -0,0 +1,2530 @@ +CREATE SCHEMA onprc_ehr_compliancedb; +GO + +CREATE TABLE onprc_ehr_compliancedb.SciShield_Data +( + RowId INT IDENTITY(1,1) NOT NULL, + employeeId nvarchar(255) not null, + requirementname nvarchar(255) null, + Date datetime null, + Container ENTITYID NOT NULL, + comment nvarchar(2000) null, + CreatedBy USERID, + Created datetime, + ModifiedBy USERID, + Modified datetime, + processed int NULL + + CONSTRAINT PK_ScieShield_Data PRIMARY KEY (RowId), + CONSTRAINT FK_ONPRC_EHR_COMPLIANCE_SCISHIELD_DATA_CONTAINER FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) +); +CREATE INDEX IX_ONPRC_EHR_COMPLIANCEDB_SCISHIELD_DATA_CONTAINER ON onprc_ehr_compliancedb.SciShield_Data (Container); + +CREATE TABLE onprc_ehr_compliancedb.SciShield_Reference_Data +( + rowId int identity(1,1), + label nvarchar(250) NULL, + value nvarchar(255) NOT NULL , + columnName nvarchar(255) NOT NULL, + sort_order integer null, + endDate datetime NULL, + Container ENTITYID NOT NULL, + CreatedBy USERID, + Created datetime, + ModifiedBy USERID, + Modified datetime, + + CONSTRAINT pk_SciShield_reference PRIMARY KEY (value), + CONSTRAINT FK_ONPRC_EHR_COMPLIANCE_REFERENCE_DATA_CONTAINER FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) +); +CREATE INDEX IX_ONPRC_EHR_COMPLIANCEDB_SCISHIELD_REFERENCE_DATA_CONTAINER ON onprc_ehr_compliancedb.SciShield_Reference_Data (Container); + +GO + +/* 24.xxx SQL scripts */ + +-- Author: R. Blasa +-- Created: 2-10-2024 +-- Description: Stored procedure program process SciShield INitial Data + + +CREATE TABLE [onprc_ehr_compliancedb].[SciShieldTemp] ( + [searchID] [int] IDENTITY(100,1) NOT NULL, + [employeeid] [varchar](500) NULL, + [requirementname] [varchar](3000) NULL, + [completeddate] [smalldatetime] NULL, + [comment] [varchar](300) NULL, + [createddate] [smalldatetime] NULL, + [rowid] [int] NULL + ) ON [PRIMARY] + GO + +CREATE TABLE [onprc_ehr_compliancedb].[SciShieldMasterTemp]( + [searchID] [int] IDENTITY(100,1) NOT NULL, + [employeeid] [varchar](500) NULL, + [requirementname] [varchar](3000) NULL, + [completeddate] [smalldatetime] NULL, + [comment] [varchar](300) NULL, + [createddate] [smalldatetime] NULL, + [rowid] [int] NULL + ) ON [PRIMARY] + GO + + + +-- Author: R. Blasa +-- Created: 2-10-2024 + +/* +** +** Created by +** Blasa 1-25-2024 Import process from ScieShield To Prime Compliance Module +** +** Processed codes: Null ---Not Processed +** 1 ------ Successfully posted +** 2 --------- invalid Employeeid +** 3 --------- Undefined Requirement Name +** 4--------- Already exists Compliance module +** +** +** +*/ + +CREATE Procedure onprc_ehr_compliancedb.[p_SciShieldToPrimeProcess] + + +AS + + +DECLARE + @SearchKey Int, + @TempsearchKey Int, + @requirementnameFinal varchar(2000), + @requirementnanme varchar(2000), + @employeeid varchar(500), + @Completiondate smalldatetime, + @SciShieldID int + + + + + +BEGIN + + ---- Reset temp table + + Delete onprc_ehr_compliancedb.SciShieldTemp + + + If @@Error <> 0 + GoTo Err_Proc + + +If exists(Select * from onprc_ehr_compliancedb.SciShield_Data where processed is null) +BEGIN + + Insert into onprc_ehr_compliancedb.SciShieldTemp + ( + employeeid, + requirementname, + completeddate, + createddate, + rowid + ) + + + select + employeeid, -------employeeid + requirementname, ----requirement name + date, ----completed Date + getdate(), --- created date + rowid --- SciShield unique id + + + from onprc_ehr_compliancedb.SciShield_Data + where processed is null + + order by employeeid, requirementname, date desc + + If @@Error <> 0 + GoTo Err_Proc + + END + +ELSE ------ No new entries exit + BEGIN + + GOTO No_Records + + END + + --- Initialize Varaibles + + Set @TempsearchKey = 0 + Set @SearchKey = 0 + + + + --- Start processing input records from SciShield + + + Select top 1 @searchkey = searchID from onprc_ehr_compliancedb.SciShieldTemp + order by searchID + + + + +While @TempSearchKey < @SearchKey + BEGIN + Set @requirementnameFinal = '' + Set @requirementnanme = '' + Set @employeeid = '' + Set @Completiondate = Null + Set @SciShieldID = Null + + + Select @employeeid =rtrim(ltrim(lower(employeeid))), @requirementnanme = requirementname, @completiondate = completeddate, @SciShieldID = rowid + from onprc_ehr_compliancedb.SciShieldTemp Where searchID = @Searchkey + + ---Validate requirementname + IF exists (Select * from onprc_ehr_compliancedb.SciShield_Reference_Data where label = @requirementnanme And columnname = 'requirementname' ) + BEGIN + + Select @requirementnameFinal = value from onprc_ehr_compliancedb.SciShield_Reference_Data where label = @requirementnanme And columnname = 'requirementname' + END + ELSE IF exists (Select * from ehr_compliancedb.requirements where requirementname = @requirementnanme) + BEGIN + Select @requirementnameFinal = requirementname from ehr_compliancedb.requirements where requirementname = @requirementnanme + END + + ELSE + BEGIN + Update ss + Set ss.processed = 3 + + From onprc_ehr_compliancedb.SciShield_Data ss Where ss.rowid = @SciShieldID + + If @@Error <> 0 + GoTo Err_Proc + + GOTO Next_Record + END + + ----validate if the record already exists + + IF exists( Select * from ehr_compliancedb.completiondates Where employeeid = @employeeid And requirementname = @requirementnameFinal + And date = @completiondate) + BEGIN + Update ss + Set ss.processed = 4 + + From onprc_ehr_compliancedb.SciShield_Data ss Where ss.rowid = @SciShieldID + + If @@Error <> 0 + GoTo Err_Proc + + GOTO Next_Record + END + + + ----validate if the employeeid is defined + + IF not exists( Select * from ehr_compliancedb.employees Where employeeid = @employeeid And enddate is null) + BEGIN + + Update ss + Set ss.processed = 2 + + From onprc_ehr_compliancedb.SciShield_Data ss Where ss.rowid = @SciShieldID + + + If @@Error <> 0 + GoTo Err_Proc + + GOTO Next_Record + + + + END ---- + + + ---- IF all previous version were validated proceed with the record insert + + + IF not exists( Select * from ehr_compliancedb.completiondates Where employeeid = @employeeid And requirementname = @requirementnameFinal + And date = @completiondate) + + BEGIN + Insert into ehr_compliancedb.completiondates + (employeeid, + requirementname, + date, + trainer, + container, + created, + createdby, + modified, + modifiedby + + ) + values( + @employeeid, + @requirementnameFinal, + @completiondate, + 'ONLINE TRAINING', + 'CD170458-C55F-102F-9907-5107380A54BE', + getdate(), + 2595, + getdate(), + 2595 + ) + If @@Error <> 0 + GoTo Err_Proc + + + + +---------- Set successful entry flag + + Update ss + Set ss.processed = 1 + + From onprc_ehr_compliancedb.SciShield_Data ss Where ss.rowid = @SciShieldID + + + If @@Error <> 0 + GoTo Err_Proc + +END ---- + + + + +Next_Record: + + + + Set @TempSearchkey = @SearchKey + + + Select Top 1 @Searchkey = searchID from onprc_ehr_compliancedb.SciShieldTemp + Where searchID > @TempSearchkey + Order by searchID + + + +END ---(While) + + + + ---- Create a master records of the last most recent entries + If exists (Select * from onprc_ehr_compliancedb.SciShieldTemp) + BEGiN + Insert into onprc_ehr_compliancedb.SciShieldMasterTemp + select + employeeid, + requirementname, + completeddate, + comment, + createddate, + rowid + + + from onprc_ehr_compliancedb.SciShieldTemp + + + If @@Error <> 0 + GoTo Err_Proc +END + +No_Records: + + RETURN 0 + + +Err_Proc: + -------Error Generated, Transfer process stopped + RETURN 1 + + +END + +GO + +CREATE INDEX IX_completiondates_trainer ON ehr_compliancedb.completiondates(trainer); +GO + +-- Author: R. Blasa +-- Created: 9-16-2024 + +/* +** +** Created by +** Blasa 9-16-2024 Storedprocedure to update Compliance Access contaimer values +** +** +** +*/ + +CREATE Procedure onprc_ehr_compliancedb.[p_ComplianceAccesscontainerUpdate] + + +AS + + + +BEGIN + + ------ Update container value and include as part of the main Compliance module + +If exists(Select * from ehr_Compliancedb.CompletionDates ss where ss.container = '47F00C3F-5691-103D-8866-41AD310B2640' ) +BEGIN + + Update ss + set ss.container = 'CD170458-C55F-102F-9907-5107380A54BE' ----Compliance folder on Prime Production + + from ehr_Compliancedb.CompletionDates ss + Where ss.container = 'F1C05E2D-618D-103D-ABC9-9814909BFFCD' ---Compliance Access folder on Prime Production + + If @@Error <> 0 + GoTo Err_Proc + + END + +ELSE ------ No new entries exit + BEGIN + + GOTO No_Records + + END + + + + +No_Records: + + RETURN 0 + + +Err_Proc: + -------Error Generated, Transfer process stopped + RETURN 1 + + +END + +GO + +EXEC core.fn_dropifexists 'p_ComplianceAccesscontainerUpdate', 'onprc_ehr_compliancedb', 'PROCEDURE'; +GO + +-- Author: R. Blasa +-- Created: 10-2-2024 + +/* +** +** Created by +** Blasa 9-16-2024 Storedprocedure to update Compliance Access contaimer values. +** 10-2-2024 Corrected Container values. +** +** +** +*/ + +CREATE Procedure onprc_ehr_compliancedb.p_ComplianceAccesscontainerUpdate + + +AS + + + +BEGIN + + ------ Update container value and include as part of the main Compliance module + +If exists(Select * from ehr_Compliancedb.CompletionDates ss where ss.container = 'F1C05E2D-618D-103D-ABC9-9814909BFFCD' ) +BEGIN + + Update ss + set ss.container = 'CD170458-C55F-102F-9907-5107380A54BE' ----Compliance folder on Prime Production + + from ehr_Compliancedb.CompletionDates ss + Where ss.container = 'F1C05E2D-618D-103D-ABC9-9814909BFFCD' ---Compliance Access folder on Prime Production + + If @@Error <> 0 + GoTo Err_Proc + + END + +ELSE ------ No new entries exit + BEGIN + + GOTO No_Records + + END + + + + +No_Records: + + RETURN 0 + + +Err_Proc: + -------Error Generated, Transfer process stopped + RETURN 1 + + +END + +GO + +EXEC core.fn_dropifexists 'p_ComplianceAccesscontainerUpdate', 'onprc_ehr_compliancedb', 'PROCEDURE'; +GO + +-- Author: R. Blasa +-- Created: 12-10-2024 + +/* +** +** Created by +** Blasa 12-10-2024 Storedprocedure to update string name "ARRS" to "DCM" +** +** +** +** +*/ + +CREATE Procedure onprc_ehr_compliancedb.p_ComplianceTranslatestringUpdate + + +AS + + + +BEGIN + + ------ Update container value and include as part of the main Compliance module + +If exists(select * from ehr_compliancedb.EmployeePerUnit ------> count= 496 + where unit like '%arrs%' + ) +BEGIN + + Update ehr_compliancedb.EmployeePerUnit + set unit = replace(unit,'arrs', 'DCM') + + + + If @@Error <> 0 + GoTo Err_Proc + + END + + + If exists(select * from ehr_compliancedb.EmployeePerUnit ------> count= 496 + where category like '%arrs%' + ) + BEGIN + + Update ehr_compliancedb.EmployeePerUnit + set category = replace(category,'arrs', 'DCM') + + + + If @@Error <> 0 + GoTo Err_Proc + + END + + + + If exists(select * from ehr_compliancedb.Employees + where majorudds like '%arrs%' + ) + BEGIN + + Update ehr_compliancedb.Employees + set majorudds = replace(majorudds,'arrs', 'DCM') + + + + If @@Error <> 0 + GoTo Err_Proc + + END + + + + If exists(select * from ehr_compliancedb.Employees + where unit like '%arrs%' + ) + BEGIN + + Update ehr_compliancedb.Employees + set unit = replace(unit,'arrs', 'DCM') + + If @@Error <> 0 + GoTo Err_Proc + + END + + + + If exists(select * from ehr_compliancedb.Employees + where category like '%arrs%' + ) + BEGIN + + Update ehr_compliancedb.Employees + set category = replace(category,'arrs', 'DCM') + + If @@Error <> 0 + GoTo Err_Proc + + END + + + + If exists(select * from ehr_compliancedb.requirements + where requirementname like '%arrs%' + ) + BEGIN + + Update ehr_compliancedb.requirements + set requirementname = replace(requirementname,'arrs', 'DCM') + + + If @@Error <> 0 + GoTo Err_Proc + + END + + + + If exists(select * from ehr_compliancedb.EmployeeRequirementExemptions + where requirementname like '%arrs%' + ) + BEGIN + + Update ehr_compliancedb.EmployeeRequirementExemptions + set requirementname = replace(requirementname,'arrs', 'DCM') + + + If @@Error <> 0 + GoTo Err_Proc + + END + + + + + If exists(select * from ehr_compliancedb.unit_names + where unit like '%arrs%' + ) + BEGIN + + Update ehr_compliancedb.unit_names + set unit = replace(unit,'arrs', 'DCM') + + + + If @@Error <> 0 + GoTo Err_Proc + + END + + + If exists(select * from ehr_compliancedb.RequirementsPerCategory + where RequirementName like '%arrs%' + ) + BEGIN + + Update ehr_compliancedb.RequirementsPerCategory + set requirementname = replace(requirementname,'arrs', 'DCM') + + + + If @@Error <> 0 + GoTo Err_Proc + + END + + + If exists(select * from ehr_compliancedb.RequirementsPerCategory + where category like '%arrs%' + ) + BEGIN + + Update ehr_compliancedb.RequirementsPerCategory + set category = replace(category,'arrs', 'DCM') + + If @@Error <> 0 + GoTo Err_Proc + + END + + + If exists(select * from ehr_compliancedb.RequirementsPerCategory + where unit like '%arrs%' + ) + BEGIN + + Update ehr_compliancedb.RequirementsPerCategory + set unit = replace(unit,'arrs', 'DCM') + + + If @@Error <> 0 + GoTo Err_Proc + + END + + If exists(select * from ehr_compliancedb.completiondates + where requirementname like '%arrs%' + ) + BEGIN + + Update ehr_compliancedb.completiondates + set requirementname = replace(requirementname,'arrs', 'DCM') + + + If @@Error <> 0 + GoTo Err_Proc + + END + + If exists(select * from ehr_compliancedb.EmployeeCategory + where categoryname like '%arrs%' + ) + BEGIN + + Update ehr_compliancedb.EmployeeCategory + set categoryname = replace(categoryname ,'arrs', 'DCM') + + + If @@Error <> 0 + GoTo Err_Proc + + END + + + + + + + + +No_Records: + + RETURN 0 + + +Err_Proc: + -- + RETURN 1 + + +END + +GO + +-- Author: R. Blasa +-- Created: 9-20-2024-2024 +-- Description: Stored procedure program to create a static data set for Compliance Procedure Recent Test .sql + + + CREATE TABLE onprc_ehr_compliancedb.ComplianceProcedureReport( + [rowid] [int] IDENTITY(1,1) NOT NULL, + [employeeid] varchar(300) NULL, + [requirementname] [varchar](4000) NULL, + [unit] [varchar](500) NULL, + [category] [varchar](500) NULL, + [trackingflag] [varchar](100) NULL, + [email] [varchar](500) NULL, + [lastname] [varchar](500) NULL, + [firstname] [varchar](500) NULL, + [host] [varchar](500) NULL, + [supervisor] [varchar](500) NULL, + [trainee_type] [varchar](500) NULL, + [times_completed] [smallint] NULL, + [expired_period] [smallint] NULL, + [new_expired_period] [smallint] NULL, + [mostrecentcompleted_date] [smalldatetime] NULL, + [comment] [varchar](4000) NULL, + [snooze_date] [smalldatetime] NULL, + [months_until_renewal] [Float] NULL, + [requirement_name_type] [varchar](1000) NULL + + ) ON [PRIMARY] + GO + +-- Author: R. Blasa +-- Created: 9-20-2024 + +/* +** +** Created by +** Blasa 9-20-2024 Created a storedprocedure to create a static set of data from +** the ComplianceProcedureRecentTest.sql query +** +** +** +*/ + +CREATE Procedure onprc_ehr_compliancedb.p_ComplianceProcedureOverDueSoon_Process + + +AS + + + ----- Reset Reporting table + Delete onprc_ehr_compliancedb.ComplianceProcedureReport + + If @@Error <> 0 + GoTo Err_Proc + + + +BEGIN + + Insert into onprc_ehr_compliancedb.ComplianceProcedureReport + ( + requirementname, + employeeid, + unit, + category, + trackingflag, + email, + lastname, + firstname, + host, + supervisor, + trainee_type, + requirement_name_type, + times_completed, + expired_period, + new_expired_Period, + mostrecentcompleted_date, + comment, + snooze_date, + months_until_renewal + + ) + + + + + + select b.requirementname, + a.employeeid, + string_agg(a.unit,char(10)) as unit, + string_agg(a.category,char(10)) as category, + (select top 1 h.trackingflag from ehr_compliancedb.requirementspercategory h where h.requirementname = b.requirementname) as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = b.requirementname) as requirement_type, + + (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as times_Completed, + + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = b.requirementname) as ExpiredPeriod, + + ( select (datediff(month,max(pq.date), tt.reviewdate) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + + (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as mostrecentcompleted_date, + + (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as comment, + + (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as snooze_date, + + CAST( + CASE + + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = b.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 + WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = b.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > ( datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN + + ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate()) ) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > ( datediff(month,max(pq.date), tt.reviewdate) ) ) + + + + + ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate()) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) + + END AS Float) AS MonthsUntilRenewal + + + + from ehr_Compliancedb.employeeperunit a ,ehr_compliancedb.requirementspercategory b + where ( a.unit = b.unit or a.category = b.category ) + And b.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid + And b.requirementname = t.requirementname) + + And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) + And b.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = b.requirementname And q.dateDisabled is null ) + + + group by b.requirementname,a.employeeid + + + union + + select a.requirementname, + a.employeeid, + null as unit, + null as category, + 'No' as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer + + + (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, + + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, + + ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + + (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, + + (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, + + (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, + + CAST( + CASE + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 + WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > ( datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN + + ( select ( datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > ( datediff(month,max(pq.date), tt.reviewdate) ) ) + + + ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate()) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) + + END AS Float) AS MonthsUntilRenewal + + + from ehr_compliancedb.completiondates a + where a.requirementname not in (select distinct h.requirementname from ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h Where (k.unit = h.unit + or k.category = h.category) And a.employeeid = k.employeeid ) + And a.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid + And a.requirementname = t.requirementname) + And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) + And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) + + group by a.requirementname,a.employeeid + + UNION + + -- Additional requirements for employees that have not completed training, but is required + select j.requirementname, + j.employeeid, + null as unit, + null as category, + 'Yes' as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = j.requirementname) as requirement_type, ----- type trainee, or trainer + null as timesCompleted, + null as ExpiredPeriod, + null as NewExpirePeriod, + null as MostRecentDate, + '' as comment, + null as snooze_date, + null AS MonthsUntilRenewal + + + + from ehr_compliancedb.RequirementsPerEmployee j + Where j.requirementname not in (select z.requirementname from ehr_compliancedb.completiondates z where z.requirementname = j.requirementname + and z.employeeid = j.employeeid and z.date is not null) + And j.employeeid in (select p.employeeid from ehr_compliancedb.employees p where j.employeeid = p.employeeid And p.enddate is null) + And j.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = j.requirementname And q.dateDisabled is null ) + + group by j.requirementname,j.employeeid + + order by employeeid,requirementname, mostrecentcompleted_date desc + + + If @@Error <> 0 + GoTo Err_Proc + + + + + RETURN 0 + + +Err_Proc: + + RETURN 1 + + +END + +GO + +-- Author: R. Blasa +-- Created: 9-20-2024-2024 +-- Description: Stored procedure program to create a static data set for Compliance Recent Test .sql + + + CREATE TABLE onprc_ehr_compliancedb.ComplianceRecentReport( + [rowid] [int] IDENTITY(1,1) NOT NULL, + [employeeid] varchar(300) NULL, + [requirementname] [varchar](4000) NULL, + [unit] [varchar](500) NULL, + [category] [varchar](500) NULL, + [trackingflag] [varchar](100) NULL, + [email] [varchar](500) NULL, + [lastname] [varchar](500) NULL, + [firstname] [varchar](500) NULL, + [host] [varchar](500) NULL, + [supervisor] [varchar](500) NULL, + [trainee_type] [varchar](500) NULL, + [times_completed] [smallint] NULL, + [expired_period] [smallint] NULL, + [new_expired_period] [smallint] NULL, + [mostrecentcompleted_date] [smalldatetime] NULL, + [comment] [varchar](4000) NULL, + [snooze_date] [smalldatetime] NULL, + [months_until_renewal] [FLOAT] NULL, + [requirement_name_type] [varchar](1000) NULL + + ) ON [PRIMARY] + GO + + +-- Author: R. Blasa +-- Created: 9-20-2024 + +/* +** +** Created by +** Blasa 9-20-2024 Created a storedprocedure to create a static set of data from +** the ComplianceRecentTest.sql query +** +** +** +*/ + +CREATE Procedure onprc_ehr_compliancedb.p_ComplianceRecentOverDueSoon_Process + + +AS + + + + ----- Reset Reporting table + Delete onprc_ehr_compliancedb.ComplianceRecentReport + + If @@Error <> 0 + GoTo Err_Proc + + + +BEGIN + + Insert into onprc_ehr_compliancedb.ComplianceRecentReport + ( + requirementname, + employeeid, + unit, + category, + trackingflag, + email, + lastname, + firstname, + host, + supervisor, + trainee_type, + requirement_name_type, + times_completed, + expired_period, + new_expired_Period, + mostrecentcompleted_date, + comment, + snooze_date, + months_until_renewal + + ) + + + + + select b.requirementname, + a.employeeid, + string_agg(a.unit,char(10)) as unit, + string_agg(a.category,char(10)) as category, + (select top 1 h.trackingflag from ehr_compliancedb.requirementspercategory h where h.requirementname = b.requirementname) as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = b.requirementname) as requirement_type, ----- type trainee, or trainer + + + (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as times_Completed, + + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = b.requirementname) as ExpiredPeriod, + + ( select (datediff(month,max(pq.date), tt.reviewdate) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + + (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as mostrecentcompleted_date, + + (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as comment, + + (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as snooze_date, + + CAST( + CASE + + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = b.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 + WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = b.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > ( datediff(month,max(pq.date), tt.reviewdate) ) ) > 0 THEN + + ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) ) ) + + + + + ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) + + END AS FLOAT) AS MonthsUntilRenewal + + + + from ehr_Compliancedb.employeeperunit a ,ehr_compliancedb.requirementspercategory b + where ( a.unit = b.unit or a.category = b.category ) + And b.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid + And b.requirementname = t.requirementname) + And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) + And b.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = b.requirementname And q.dateDisabled is null ) + + + group by b.requirementname,a.employeeid + + + union + + select a.requirementname, + a.employeeid, + null as unit, + null as category, + 'No' as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer + + + (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, + + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, + + ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + + (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, + + (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, + + (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, + + CAST( + CASE + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 + WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN + + ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) ) ) + + + ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) + + END AS FLOAT) AS MonthsUntilRenewal + + + from ehr_compliancedb.completiondates a + where a.requirementname not in (select distinct h.requirementname from ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h Where (k.unit = h.unit + or k.category = h.category) And a.employeeid = k.employeeid ) + And a.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid + And a.requirementname = t.requirementname) + And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) + And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) + + group by a.requirementname,a.employeeid + + UNION + + --- Training that was completed by as an employee training exemptions, and at least completed one, or more times + + select a.requirementname, + a.employeeid, + null as unit, + null as category, + 'No' as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer + + + (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, + + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, + + ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + + (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, + + (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, + + (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, + + CAST( + CASE + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 + WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN + + ( select ( datediff(month,max(pq.date), tt.reviewdate) - (datediff(month,max(pq.date), getdate())) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) ) + + + ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) + + END AS DECIMAL) AS MonthsUntilRenewal + + + from ehr_compliancedb.employeerequirementexemptions a + Where a.requirementname in (select z.requirementname from ehr_compliancedb.completiondates z where z.requirementname = a.requirementname + and z.employeeid = a.employeeid and z.date is not null) + And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) + And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) + + group by a.requirementname,a.employeeid + + UNION + + --- Additional requirements for employees that have not completed training, but is required + + select j.requirementname, + j.employeeid, + null as unit, + null as category, + 'Yes' as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = j.requirementname) as requirement_type, ----- type trainee, or trainer + + (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= j.requirementname and zz.employeeid= j.employeeid ) as timesCompleted, + + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = j.requirementname) as ExpiredPeriod, + + ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + + (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= j.requirementname and zz.employeeid= j.employeeid ) as MostRecentDate, + + (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= j.requirementname and zz.employeeid= j.employeeid ) + And yy.requirementname= j.requirementname and yy.employeeid= j.employeeid ) as comment, + + (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= j.requirementname and zz.employeeid= j.employeeid ) + And yy.requirementname= j.requirementname and yy.employeeid= j.employeeid ) as snooze_date, + + CAST( + CASE + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = j.requirementname and st.employeeid = j.employeeid ) IS NULL then 0 + WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = j.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN + + ( select ( datediff(month,max(pq.date), tt.reviewdate) - (datediff(month,max(pq.date), getdate())) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) ) + + + ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod ) + + END AS DECIMAL) AS MonthsUntilRenewal + + + + + + from ehr_compliancedb.RequirementsPerEmployee j + Where j.requirementname not in (select z.requirementname from ehr_compliancedb.completiondates z where z.requirementname = j.requirementname + and z.employeeid = j.employeeid and z.date is not null) + And j.employeeid in (select p.employeeid from ehr_compliancedb.employees p where j.employeeid = p.employeeid And p.enddate is null) + And j.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = j.requirementname And q.dateDisabled is null ) + + group by j.requirementname,j.employeeid + + order by employeeid,requirementname, mostrecentcompleted_date desc + + + If @@Error <> 0 + GoTo Err_Proc + + + + + RETURN 0 + + +Err_Proc: + + RETURN 1 + + +END + +GO + +EXEC core.fn_dropifexists 'p_ComplianceRecentOverDueSoon_Process', 'onprc_ehr_compliancedb', 'PROCEDURE'; +GO + +-- Author: R. Blasa +-- Created: 9-20-2024 + +/* +** +** Created by +** Blasa 9-20-2024 Created a storedprocedure to create a static set of data from +** the ComplianceRecentTest.sql query +** +** +** +*/ + +CREATE Procedure onprc_ehr_compliancedb.p_ComplianceRecentOverDueSoon_Process + + +AS + + + + ----- Reset Reporting table + Delete onprc_ehr_compliancedb.ComplianceRecentReport + + If @@Error <> 0 + GoTo Err_Proc + + + +BEGIN + + Insert into onprc_ehr_compliancedb.ComplianceRecentReport + ( + requirementname, + employeeid, + unit, + category, + trackingflag, + email, + lastname, + firstname, + host, + supervisor, + trainee_type, + requirement_name_type, + times_completed, + expired_period, + new_expired_Period, + mostrecentcompleted_date, + comment, + snooze_date, + months_until_renewal + + ) + + + + + select b.requirementname, + a.employeeid, + string_agg(a.unit,char(10)) as unit, + string_agg(a.category,char(10)) as category, + string_agg(b.trackingflag,char(10)) as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = b.requirementname) as requirement_type, ----- type trainee, or trainer + + + (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as times_Completed, + + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = b.requirementname) as ExpiredPeriod, + + ( select (datediff(month,max(pq.date), tt.reviewdate) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + + (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as mostrecentcompleted_date, + + (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as comment, + + (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as snooze_date, + + CAST( + CASE + + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = b.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 + WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = b.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > ( datediff(month,max(pq.date), tt.reviewdate) ) ) > 0 THEN + + ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) ) ) + + + + + ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) + + END AS FLOAT) AS MonthsUntilRenewal + + + + from ehr_Compliancedb.employeeperunit a ,ehr_compliancedb.requirementspercategory b + where ( a.unit = b.unit or a.category = b.category ) + And b.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid + And b.requirementname = t.requirementname) + And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) + And b.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = b.requirementname And q.dateDisabled is null ) + + + group by b.requirementname,a.employeeid + + + union + + select a.requirementname, + a.employeeid, + null as unit, + null as category, + 'None' as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer + + + (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, + + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, + + ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + + (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, + + (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, + + (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, + + CAST( + CASE + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 + WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN + + ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) ) ) + + + ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) + + END AS FLOAT) AS MonthsUntilRenewal + + + from ehr_compliancedb.completiondates a + where a.requirementname not in (select distinct h.requirementname from ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h Where (k.unit = h.unit + or k.category = h.category) And a.employeeid = k.employeeid ) + And a.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid + And a.requirementname = t.requirementname) + And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) + And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) + + group by a.requirementname,a.employeeid + + UNION + + --- Training that was completed by as an employee training exemptions, and at least completed one, or more times + + select a.requirementname, + a.employeeid, + null as unit, + null as category, + 'No' as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer + + + (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, + + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, + + ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + + (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, + + (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, + + (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, + + CAST( + CASE + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 + WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN + + ( select ( datediff(month,max(pq.date), tt.reviewdate) - (datediff(month,max(pq.date), getdate())) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) ) + + + ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) + + END AS DECIMAL) AS MonthsUntilRenewal + + + from ehr_compliancedb.employeerequirementexemptions a + Where a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) + And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) + + group by a.requirementname,a.employeeid + + UNION + + --- Additional requirements for employees that have not completed training, but is required + + select j.requirementname, + j.employeeid, + null as unit, + null as category, + 'Yes' as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = j.requirementname) as requirement_type, ----- type trainee, or trainer + + (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= j.requirementname and zz.employeeid= j.employeeid ) as timesCompleted, + + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = j.requirementname) as ExpiredPeriod, + + ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + + (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= j.requirementname and zz.employeeid= j.employeeid ) as MostRecentDate, + + (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= j.requirementname and zz.employeeid= j.employeeid ) + And yy.requirementname= j.requirementname and yy.employeeid= j.employeeid ) as comment, + + (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= j.requirementname and zz.employeeid= j.employeeid ) + And yy.requirementname= j.requirementname and yy.employeeid= j.employeeid ) as snooze_date, + + CAST( + CASE + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = j.requirementname and st.employeeid = j.employeeid ) IS NULL then 0 + WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = j.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN + + ( select ( datediff(month,max(pq.date), tt.reviewdate) - (datediff(month,max(pq.date), getdate())) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) ) + + + ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod ) + + END AS DECIMAL) AS MonthsUntilRenewal + + + + from ehr_compliancedb.RequirementsPerEmployee j + Where j.employeeid in (select p.employeeid from ehr_compliancedb.employees p where j.employeeid = p.employeeid And p.enddate is null) + And j.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = j.requirementname And q.dateDisabled is null ) + + group by j.requirementname,j.employeeid + + order by employeeid,requirementname, mostrecentcompleted_date desc + + + If @@Error <> 0 + GoTo Err_Proc + + + + + RETURN 0 + + +Err_Proc: + + RETURN 1 + + +END + +GO + +EXEC core.fn_dropifexists 'p_ComplianceProcedureOverDueSoon_Process', 'onprc_ehr_compliancedb', 'PROCEDURE'; +GO + +-- Author: R. Blasa +-- Created: 9-20-2024 + +/* +** +** Created by +** Blasa 9-20-2024 Created a storedprocedure to create a static set of data from +** the ComplianceProcedureRecentTest.sql query +** +** +** +*/ + +CREATE Procedure onprc_ehr_compliancedb.p_ComplianceProcedureOverDueSoon_Process + + +AS + + + ----- Reset Reporting table + Delete onprc_ehr_compliancedb.ComplianceProcedureReport + + If @@Error <> 0 + GoTo Err_Proc + + + +BEGIN + + Insert into onprc_ehr_compliancedb.ComplianceProcedureReport + ( + requirementname, + employeeid, + unit, + category, + trackingflag, + email, + lastname, + firstname, + host, + supervisor, + trainee_type, + requirement_name_type, + times_completed, + expired_period, + new_expired_Period, + mostrecentcompleted_date, + comment, + snooze_date, + months_until_renewal + + ) + + + + + + select b.requirementname, + a.employeeid, + string_agg(a.unit,char(10)) as unit, + string_agg(a.category,char(10)) as category, + string_agg(b.trackingflag,char(10)) as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = b.requirementname) as requirement_type, + + (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as times_Completed, + + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = b.requirementname) as ExpiredPeriod, + + ( select (datediff(month,max(pq.date), tt.reviewdate) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + + (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as mostrecentcompleted_date, + + (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as comment, + + (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as snooze_date, + + CAST( + CASE + + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = b.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 + WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = b.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > ( datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN + + ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate()) ) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > ( datediff(month,max(pq.date), tt.reviewdate) ) ) + + + + + ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate()) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) + + END AS Float) AS MonthsUntilRenewal + + + + from ehr_Compliancedb.employeeperunit a ,ehr_compliancedb.requirementspercategory b + where ( a.unit = b.unit or a.category = b.category ) + And b.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid + And b.requirementname = t.requirementname) + And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) + And b.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = b.requirementname And q.dateDisabled is null ) + + + group by b.requirementname,a.employeeid + + union + + select a.requirementname, + a.employeeid, + null as unit, + null as category, + 'None' as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer + + + (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, + + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, + + ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + + (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, + + (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, + + (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, + + CAST( + CASE + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 + WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN + + ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) ) ) + + + ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) + + END AS FLOAT) AS MonthsUntilRenewal + + + from ehr_compliancedb.completiondates a + where a.requirementname not in (select distinct h.requirementname from ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h Where (k.unit = h.unit + or k.category = h.category) And a.employeeid = k.employeeid ) + And a.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid + And a.requirementname = t.requirementname) + And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) + And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) + + group by a.requirementname,a.employeeid + + union + + -- Additional requirements for employees that have not completed training, but is required + select j.requirementname, + j.employeeid, + null as unit, + null as category, + 'Yes' as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = j.requirementname) as requirement_type, ----- type trainee, or trainer + null as timesCompleted, + null as ExpiredPeriod, + null as NewExpirePeriod, + null as MostRecentDate, + '' as comment, + null as snooze_date, + null AS MonthsUntilRenewal + + + + from ehr_compliancedb.RequirementsPerEmployee j + Where j.employeeid in (select p.employeeid from ehr_compliancedb.employees p where j.employeeid = p.employeeid And p.enddate is null) + And j.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = j.requirementname And q.dateDisabled is null ) + + group by j.requirementname,j.employeeid + + order by employeeid,requirementname, mostrecentcompleted_date desc + + + If @@Error <> 0 + GoTo Err_Proc + + + + + RETURN 0 + + +Err_Proc: + + RETURN 1 + + +END + +GO + +CREATE TABLE onprc_ehr_compliancedb.RequirementsPerEmployee +( + RowId INT IDENTITY(1,1) NOT NULL, + EmployeeId varchar(255) not null, + RequirementName varchar(255) not null, + CreatedBy USERID, + Created datetime, + ModifiedBy USERID, + Modified datetime, + trackingflag varchar(100) + + CONSTRAINT PK_RequirementsPerEmployeename PRIMARY KEY (RowId) +); +GO + +EXEC core.fn_dropifexists 'p_ComplianceRecentOverDueSoon_Process', 'onprc_ehr_compliancedb', 'PROCEDURE'; +GO + +-- Author: R. Blasa +-- Created: 9-20-2024 + +/* +** +** Created by +** Blasa 9-20-2024 Created a storedprocedure to create a static set of data from +** the ComplianceRecentTest.sql query +** +** +** +*/ + +CREATE Procedure onprc_ehr_compliancedb.p_ComplianceRecentOverDueSoon_Process + + +AS + + + + ----- Reset Reporting table + Delete onprc_ehr_compliancedb.ComplianceRecentReport + + If @@Error <> 0 + GoTo Err_Proc + + + +BEGIN + + Insert into onprc_ehr_compliancedb.ComplianceRecentReport + ( + requirementname, + employeeid, + unit, + category, + trackingflag, + email, + lastname, + firstname, + host, + supervisor, + trainee_type, + requirement_name_type, + times_completed, + expired_period, + new_expired_Period, + mostrecentcompleted_date, + comment, + snooze_date, + months_until_renewal + + ) + + + + + select b.requirementname, + a.employeeid, + string_agg(a.unit,char(10)) as unit, + string_agg(a.category,char(10)) as category, + string_agg(b.trackingflag,char(10)) as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = b.requirementname) as requirement_type, ----- type trainee, or trainer + + + (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as times_Completed, + + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = b.requirementname) as ExpiredPeriod, + + ( select (datediff(month,max(pq.date), tt.reviewdate) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (COALESCE(tt.expireperiod,0)) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + + (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as mostrecentcompleted_date, + + (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as comment, + + (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as snooze_date, + + CAST( + CASE + + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = b.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 + WHEN ( select (COALESCE(tt.expireperiod,0)) from ehr_compliancedb.requirements tt where tt.requirementname = b.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.reviewdate) > (max(pq.date)) ) > 0 THEN + + ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.reviewdate) > (max(pq.date)) ) + + + + + ELSE ( select (COALESCE(tt.expireperiod,0)) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) + + END AS FLOAT) AS MonthsUntilRenewal + + + + from ehr_Compliancedb.employeeperunit a ,ehr_compliancedb.requirementspercategory b + where ( a.unit = b.unit or a.category = b.category ) + And b.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid + And b.requirementname = t.requirementname) + And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) + And b.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = b.requirementname And q.dateDisabled is null ) + + + group by b.requirementname,a.employeeid + + + union + + select a.requirementname, + a.employeeid, + null as unit, + null as category, + 'None' as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer + + + (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, + + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, + + ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (COALESCE(tt.expireperiod,0)) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + + (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, + + (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, + + (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, + + CAST( + CASE + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 + WHEN ( select (COALESCE(tt.expireperiod,0)) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.reviewdate) > (max(pq.date)) ) > 0 THEN + + ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.reviewdate) > (max(pq.date)) ) + + + ELSE ( select (COALESCE(tt.expireperiod,0)) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) + + END AS FLOAT) AS MonthsUntilRenewal + + + from ehr_compliancedb.completiondates a + where a.requirementname not in (select distinct h.requirementname from ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h Where (k.unit = h.unit + or k.category = h.category) And a.employeeid = k.employeeid ) + And a.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid + And a.requirementname = t.requirementname) + And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) + And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) + + group by a.requirementname,a.employeeid + + UNION + + --- Training that was completed by as an employee training exemptions, and at least completed one, or more times + + select a.requirementname, + a.employeeid, + null as unit, + null as category, + 'No' as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer + + + (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, + + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, + + ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (COALESCE(tt.expireperiod,0)) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + + (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, + + (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, + + (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, + + CAST( + CASE + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 + WHEN ( select (COALESCE(tt.expireperiod,0)) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.reviewdate) > (max(pq.date)) ) > 0 THEN + + ( select ( datediff(month,max(pq.date), tt.reviewdate) - (datediff(month,max(pq.date), getdate())) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.reviewdate) > (max(pq.date)) ) + + + ELSE ( select (COALESCE(tt.expireperiod,0)) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) + + END AS DECIMAL) AS MonthsUntilRenewal + + + from ehr_compliancedb.employeerequirementexemptions a + Where a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) + And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) + + group by a.requirementname,a.employeeid + + UNION + + --- Additional requirements for employees that have not completed training, but is required + + select j.requirementname, + j.employeeid, + null as unit, + null as category, + string_agg(j.trackingflag,char(10)) as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = j.requirementname) as requirement_type, ----- type trainee, or trainer + 0 as timesCompleted, + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = j.requirementname) as ExpiredPeriod, + ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate + having (COALESCE(tt.expireperiod,0)) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + null as MostRecentDate, + '' as comment, + null as snooze_date, + CAST( + CASE + + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = j.requirementname and st.employeeid = j.employeeid ) IS NULL then 0 + WHEN ( select (COALESCE(tt.expireperiod,0)) from ehr_compliancedb.requirements tt where tt.requirementname = j.requirementname group by tt.expireperiod ) = 0 then Null + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.reviewdate) > (max(pq.date)) ) > 0 THEN + + ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.reviewdate) > (max(pq.date)) ) + + + ELSE ( select (COALESCE(tt.expireperiod,0)) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod ) + + END AS FLOAT) AS MonthsUntilRenewal + + + from onprc_ehr_compliancedb.RequirementsPerEmployee j + Where j.employeeid in (select p.employeeid from ehr_compliancedb.employees p where j.employeeid = p.employeeid And p.enddate is null) + And j.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = j.requirementname And q.dateDisabled is null ) + And j.requirementname not in (select distinct h.requirementname from ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h Where (k.unit = h.unit + or k.category = h.category) And j.employeeid = k.employeeid ) + And j.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where j.employeeid = t.employeeid And j.requirementname = t.requirementname) + And j.requirementname not in (select distinct k.requirementname from ehr_compliancedb.completiondates k Where k.employeeid = j.employeeid) + + group by j.requirementname,j.employeeid + + order by employeeid,requirementname, mostrecentcompleted_date desc + + + If @@Error <> 0 + GoTo Err_Proc + + + + + RETURN 0 + + +Err_Proc: + + RETURN 1 + + +END + +GO + +EXEC core.fn_dropifexists 'p_ComplianceProcedureOverDueSoon_Process', 'onprc_ehr_compliancedb', 'PROCEDURE'; +GO + +-- Author: R. Blasa +-- Created: 9-20-2024 + +/* +** +** Created by +** Blasa 9-20-2024 Created a storedprocedure to create a static set of data from +** the ComplianceProcedureRecentTest.sql query +** +** +** +*/ + +CREATE Procedure onprc_ehr_compliancedb.p_ComplianceProcedureOverDueSoon_Process + + +AS + + + ----- Reset Reporting table + Delete onprc_ehr_compliancedb.ComplianceProcedureReport + + If @@Error <> 0 + GoTo Err_Proc + + + +BEGIN + + Insert into onprc_ehr_compliancedb.ComplianceProcedureReport + ( + requirementname, + employeeid, + unit, + category, + trackingflag, + email, + lastname, + firstname, + host, + supervisor, + trainee_type, + requirement_name_type, + times_completed, + expired_period, + new_expired_Period, + mostrecentcompleted_date, + comment, + snooze_date, + months_until_renewal + + ) + + + + + + select b.requirementname, + a.employeeid, + string_agg(a.unit,char(10)) as unit, + string_agg(a.category,char(10)) as category, + string_agg(b.trackingflag,char(10)) as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = b.requirementname) as requirement_type, + + (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as times_Completed, + + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = b.requirementname) as ExpiredPeriod, + + ( select (datediff(month,max(pq.date), tt.reviewdate) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (COALESCE(tt.expireperiod,0)) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + + (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as mostrecentcompleted_date, + + (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as comment, + + (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as snooze_date, + + CAST( + CASE + + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = b.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 + WHEN ( select (COALESCE(tt.expireperiod,0)) from ehr_compliancedb.requirements tt where tt.requirementname = b.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.reviewdate) > (max(pq.date)) ) > 0 THEN + + ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate()) ) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.reviewdate) > (max(pq.date)) ) + + + ELSE ( select (COALESCE(tt.expireperiod,0)) - ( datediff(month,max(pq.date), getdate()) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) + + END AS Float) AS MonthsUntilRenewal + + + + from ehr_Compliancedb.employeeperunit a ,ehr_compliancedb.requirementspercategory b + where ( a.unit = b.unit or a.category = b.category ) + And b.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid + And b.requirementname = t.requirementname) + And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) + And b.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = b.requirementname And q.dateDisabled is null ) + + + group by b.requirementname,a.employeeid + + union + + select a.requirementname, + a.employeeid, + null as unit, + null as category, + 'None' as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer + + + (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, + + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, + + ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (COALESCE(tt.expireperiod,0)) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + + (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, + + (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, + + (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, + + CAST( + CASE + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 + WHEN ( select (COALESCE(tt.expireperiod,0)) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.reviewdate) > (max(pq.date)) ) > 0 THEN + + ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.reviewdate) > (max(pq.date)) ) + + + ELSE ( select (COALESCE(tt.expireperiod,0)) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) + + END AS FLOAT) AS MonthsUntilRenewal + + + from ehr_compliancedb.completiondates a + where a.requirementname not in (select distinct h.requirementname from ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h Where (k.unit = h.unit + or k.category = h.category) And a.employeeid = k.employeeid ) + And a.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid + And a.requirementname = t.requirementname) + And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) + And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) + + group by a.requirementname,a.employeeid + + union + + -- Additional requirements for employees that have not completed training, but is required + select j.requirementname, + j.employeeid, + null as unit, + null as category, + string_agg(j.trackingflag,char(10)) as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = j.requirementname) as requirement_type, ----- type trainee, or trainer + 0 as timesCompleted, + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = j.requirementname) as ExpiredPeriod, + ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate + having (COALESCE(tt.expireperiod,0)) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + null as MostRecentDate, + '' as comment, + null as snooze_date, + CAST( + CASE + + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = j.requirementname and st.employeeid = j.employeeid ) IS NULL then 0 + WHEN ( select (COALESCE(tt.expireperiod,0)) from ehr_compliancedb.requirements tt where tt.requirementname = j.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.reviewdate) > (max(pq.date)) ) > 0 THEN + + ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.reviewdate) > (max(pq.date)) ) + + + ELSE ( select (COALESCE(tt.expireperiod,0)) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod ) + + END AS FLOAT) AS MonthsUntilRenewal + + + + from onprc_ehr_compliancedb.RequirementsPerEmployee j + Where j.employeeid in (select p.employeeid from ehr_compliancedb.employees p where j.employeeid = p.employeeid And p.enddate is null) + And j.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = j.requirementname And q.dateDisabled is null ) + And j.requirementname not in (select distinct h.requirementname from ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h Where (k.unit = h.unit + or k.category = h.category) And j.employeeid = k.employeeid ) + And j.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where j.employeeid = t.employeeid And j.requirementname = t.requirementname) + And j.requirementname not in (select distinct k.requirementname from ehr_compliancedb.completiondates k Where k.employeeid = j.employeeid) + + group by j.requirementname,j.employeeid + + order by employeeid,requirementname, mostrecentcompleted_date desc + + + If @@Error <> 0 + GoTo Err_Proc + + + + + RETURN 0 + + +Err_Proc: + + RETURN 1 + + +END + +GO + +EXEC core.fn_dropifexists 'p_ComplianceAccesscontainerUpdate', 'onprc_ehr_compliancedb', 'PROCEDURE'; +GO + +-- Author: R. Blasa +-- Created: 10-2-2024 + +/* +** +** Created by +** Blasa 9-5-2025 Storedprocedure to update Compliance Access contaimer values and update +** Completion date records +** . +** +** +** +*/ + +CREATE Procedure onprc_ehr_compliancedb.p_ComplianceAccesscontainerUpdate + + + AS + + + +BEGIN + + ------ Update container value and include as part of the main Compliance module + +If exists(Select * from ehr_Compliancedb.CompletionDates ss where ss.container = 'F1C05E2D-618D-103D-ABC9-9814909BFFCD' ) +BEGIN + +Update ss +set ss.container = 'CD170458-C55F-102F-9907-5107380A54BE' ----Compliance folder on Prime Production + + from ehr_Compliancedb.CompletionDates ss +Where ss.container = 'F1C05E2D-618D-103D-ABC9-9814909BFFCD' ---Compliance Access folder on Prime Production + + If @@Error <> 0 + GoTo Err_Proc + +END + +ELSE ------ No new entries exit +BEGIN + +GOTO No_Records + +END + + + + +No_Records: + + RETURN 0 + + +Err_Proc: + -------Error Generated, Transfer process stopped + RETURN 1 + + +END + +GO \ No newline at end of file diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.001-24.002.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.001-24.002.sql deleted file mode 100644 index c36be855e..000000000 --- a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.001-24.002.sql +++ /dev/null @@ -1,311 +0,0 @@ - - - - --- Author: R. Blasa --- Created: 2-10-2024 --- Description: Stored procedure program process SciShield INitial Data - - -CREATE TABLE [onprc_ehr_compliancedb].[SciShieldTemp] ( - [searchID] [int] IDENTITY(100,1) NOT NULL, - [employeeid] [varchar](500) NULL, - [requirementname] [varchar](3000) NULL, - [completeddate] [smalldatetime] NULL, - [comment] [varchar](300) NULL, - [createddate] [smalldatetime] NULL, - [rowid] [int] NULL - ) ON [PRIMARY] - GO - -CREATE TABLE [onprc_ehr_compliancedb].[SciShieldMasterTemp]( - [searchID] [int] IDENTITY(100,1) NOT NULL, - [employeeid] [varchar](500) NULL, - [requirementname] [varchar](3000) NULL, - [completeddate] [smalldatetime] NULL, - [comment] [varchar](300) NULL, - [createddate] [smalldatetime] NULL, - [rowid] [int] NULL - ) ON [PRIMARY] - GO - - - --- Author: R. Blasa --- Created: 2-10-2024 - -/* -** -** Created by -** Blasa 1-25-2024 Import process from ScieShield To Prime Compliance Module -** -** Processed codes: Null ---Not Processed -** 1 ------ Successfully posted -** 2 --------- invalid Employeeid -** 3 --------- Undefined Requirement Name -** 4--------- Already exists Compliance module -** -** -** -*/ - -CREATE Procedure onprc_ehr_compliancedb.[p_SciShieldToPrimeProcess] - - -AS - - -DECLARE - @SearchKey Int, - @TempsearchKey Int, - @requirementnameFinal varchar(2000), - @requirementnanme varchar(2000), - @employeeid varchar(500), - @Completiondate smalldatetime, - @SciShieldID int - - - - - -BEGIN - - ---- Reset temp table - - Delete onprc_ehr_compliancedb.SciShieldTemp - - - If @@Error <> 0 - GoTo Err_Proc - - -If exists(Select * from onprc_ehr_compliancedb.SciShield_Data where processed is null) -BEGIN - - Insert into onprc_ehr_compliancedb.SciShieldTemp - ( - employeeid, - requirementname, - completeddate, - createddate, - rowid - ) - - - select - employeeid, -------employeeid - requirementname, ----requirement name - date, ----completed Date - getdate(), --- created date - rowid --- SciShield unique id - - - from onprc_ehr_compliancedb.SciShield_Data - where processed is null - - order by employeeid, requirementname, date desc - - If @@Error <> 0 - GoTo Err_Proc - - END - -ELSE ------ No new entries exit - BEGIN - - GOTO No_Records - - END - - --- Initialize Varaibles - - Set @TempsearchKey = 0 - Set @SearchKey = 0 - - - - --- Start processing input records from SciShield - - - Select top 1 @searchkey = searchID from onprc_ehr_compliancedb.SciShieldTemp - order by searchID - - - - -While @TempSearchKey < @SearchKey - BEGIN - Set @requirementnameFinal = '' - Set @requirementnanme = '' - Set @employeeid = '' - Set @Completiondate = Null - Set @SciShieldID = Null - - - Select @employeeid =rtrim(ltrim(lower(employeeid))), @requirementnanme = requirementname, @completiondate = completeddate, @SciShieldID = rowid - from onprc_ehr_compliancedb.SciShieldTemp Where searchID = @Searchkey - - ---Validate requirementname - IF exists (Select * from onprc_ehr_compliancedb.SciShield_Reference_Data where label = @requirementnanme And columnname = 'requirementname' ) - BEGIN - - Select @requirementnameFinal = value from onprc_ehr_compliancedb.SciShield_Reference_Data where label = @requirementnanme And columnname = 'requirementname' - END - ELSE IF exists (Select * from ehr_compliancedb.requirements where requirementname = @requirementnanme) - BEGIN - Select @requirementnameFinal = requirementname from ehr_compliancedb.requirements where requirementname = @requirementnanme - END - - ELSE - BEGIN - Update ss - Set ss.processed = 3 - - From onprc_ehr_compliancedb.SciShield_Data ss Where ss.rowid = @SciShieldID - - If @@Error <> 0 - GoTo Err_Proc - - GOTO Next_Record - END - - ----validate if the record already exists - - IF exists( Select * from ehr_compliancedb.completiondates Where employeeid = @employeeid And requirementname = @requirementnameFinal - And date = @completiondate) - BEGIN - Update ss - Set ss.processed = 4 - - From onprc_ehr_compliancedb.SciShield_Data ss Where ss.rowid = @SciShieldID - - If @@Error <> 0 - GoTo Err_Proc - - GOTO Next_Record - END - - - ----validate if the employeeid is defined - - IF not exists( Select * from ehr_compliancedb.employees Where employeeid = @employeeid And enddate is null) - BEGIN - - Update ss - Set ss.processed = 2 - - From onprc_ehr_compliancedb.SciShield_Data ss Where ss.rowid = @SciShieldID - - - If @@Error <> 0 - GoTo Err_Proc - - GOTO Next_Record - - - - END ---- - - - ---- IF all previous version were validated proceed with the record insert - - - IF not exists( Select * from ehr_compliancedb.completiondates Where employeeid = @employeeid And requirementname = @requirementnameFinal - And date = @completiondate) - - BEGIN - Insert into ehr_compliancedb.completiondates - (employeeid, - requirementname, - date, - trainer, - container, - created, - createdby, - modified, - modifiedby - - ) - values( - @employeeid, - @requirementnameFinal, - @completiondate, - 'ONLINE TRAINING', - 'CD170458-C55F-102F-9907-5107380A54BE', - getdate(), - 2595, - getdate(), - 2595 - ) - If @@Error <> 0 - GoTo Err_Proc - - - - ----------- Set successful entry flag - - Update ss - Set ss.processed = 1 - - From onprc_ehr_compliancedb.SciShield_Data ss Where ss.rowid = @SciShieldID - - - If @@Error <> 0 - GoTo Err_Proc - -END ---- - - - - -Next_Record: - - - - Set @TempSearchkey = @SearchKey - - - Select Top 1 @Searchkey = searchID from onprc_ehr_compliancedb.SciShieldTemp - Where searchID > @TempSearchkey - Order by searchID - - - -END ---(While) - - - - ---- Create a master records of the last most recent entries - If exists (Select * from onprc_ehr_compliancedb.SciShieldTemp) - BEGiN - Insert into onprc_ehr_compliancedb.SciShieldMasterTemp - select - employeeid, - requirementname, - completeddate, - comment, - createddate, - rowid - - - from onprc_ehr_compliancedb.SciShieldTemp - - - If @@Error <> 0 - GoTo Err_Proc -END - -No_Records: - - RETURN 0 - - -Err_Proc: - -------Error Generated, Transfer process stopped - RETURN 1 - - -END - -GO \ No newline at end of file diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.002-24.003.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.002-24.003.sql deleted file mode 100644 index 51a39f1c9..000000000 --- a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.002-24.003.sql +++ /dev/null @@ -1,65 +0,0 @@ - - -CREATE INDEX IX_completiondates_trainer ON ehr_compliancedb.completiondates(trainer); -GO - --- Author: R. Blasa --- Created: 9-16-2024 - -/* -** -** Created by -** Blasa 9-16-2024 Storedprocedure to update Compliance Access contaimer values -** -** -** -*/ - -CREATE Procedure onprc_ehr_compliancedb.[p_ComplianceAccesscontainerUpdate] - - -AS - - - -BEGIN - - ------ Update container value and include as part of the main Compliance module - -If exists(Select * from ehr_Compliancedb.CompletionDates ss where ss.container = '47F00C3F-5691-103D-8866-41AD310B2640' ) -BEGIN - - Update ss - set ss.container = 'CD170458-C55F-102F-9907-5107380A54BE' ----Compliance folder on Prime Production - - from ehr_Compliancedb.CompletionDates ss - Where ss.container = 'F1C05E2D-618D-103D-ABC9-9814909BFFCD' ---Compliance Access folder on Prime Production - - If @@Error <> 0 - GoTo Err_Proc - - END - -ELSE ------ No new entries exit - BEGIN - - GOTO No_Records - - END - - - - -No_Records: - - RETURN 0 - - -Err_Proc: - -------Error Generated, Transfer process stopped - RETURN 1 - - -END - -GO \ No newline at end of file diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.003-24.004.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.003-24.004.sql deleted file mode 100644 index ce18d1d4b..000000000 --- a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.003-24.004.sql +++ /dev/null @@ -1,66 +0,0 @@ - - -EXEC core.fn_dropifexists 'p_ComplianceAccesscontainerUpdate', 'onprc_ehr_compliancedb', 'PROCEDURE'; -GO - --- Author: R. Blasa --- Created: 10-2-2024 - -/* -** -** Created by -** Blasa 9-16-2024 Storedprocedure to update Compliance Access contaimer values. -** 10-2-2024 Corrected Container values. -** -** -** -*/ - -CREATE Procedure onprc_ehr_compliancedb.p_ComplianceAccesscontainerUpdate - - -AS - - - -BEGIN - - ------ Update container value and include as part of the main Compliance module - -If exists(Select * from ehr_Compliancedb.CompletionDates ss where ss.container = 'F1C05E2D-618D-103D-ABC9-9814909BFFCD' ) -BEGIN - - Update ss - set ss.container = 'CD170458-C55F-102F-9907-5107380A54BE' ----Compliance folder on Prime Production - - from ehr_Compliancedb.CompletionDates ss - Where ss.container = 'F1C05E2D-618D-103D-ABC9-9814909BFFCD' ---Compliance Access folder on Prime Production - - If @@Error <> 0 - GoTo Err_Proc - - END - -ELSE ------ No new entries exit - BEGIN - - GOTO No_Records - - END - - - - -No_Records: - - RETURN 0 - - -Err_Proc: - -------Error Generated, Transfer process stopped - RETURN 1 - - -END - -GO \ No newline at end of file diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.004-24.005.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.004-24.005.sql deleted file mode 100644 index 4c2b7aa50..000000000 --- a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.004-24.005.sql +++ /dev/null @@ -1,250 +0,0 @@ - - -EXEC core.fn_dropifexists 'p_ComplianceAccesscontainerUpdate', 'onprc_ehr_compliancedb', 'PROCEDURE'; -GO - --- Author: R. Blasa --- Created: 12-10-2024 - -/* -** -** Created by -** Blasa 12-10-2024 Storedprocedure to update string name "ARRS" to "DCM" -** -** -** -** -*/ - -CREATE Procedure onprc_ehr_compliancedb.p_ComplianceTranslatestringUpdate - - -AS - - - -BEGIN - - ------ Update container value and include as part of the main Compliance module - -If exists(select * from ehr_compliancedb.EmployeePerUnit ------> count= 496 - where unit like '%arrs%' - ) -BEGIN - - Update ehr_compliancedb.EmployeePerUnit - set unit = replace(unit,'arrs', 'DCM') - - - - If @@Error <> 0 - GoTo Err_Proc - - END - - - If exists(select * from ehr_compliancedb.EmployeePerUnit ------> count= 496 - where category like '%arrs%' - ) - BEGIN - - Update ehr_compliancedb.EmployeePerUnit - set category = replace(category,'arrs', 'DCM') - - - - If @@Error <> 0 - GoTo Err_Proc - - END - - - - If exists(select * from ehr_compliancedb.Employees - where majorudds like '%arrs%' - ) - BEGIN - - Update ehr_compliancedb.Employees - set majorudds = replace(majorudds,'arrs', 'DCM') - - - - If @@Error <> 0 - GoTo Err_Proc - - END - - - - If exists(select * from ehr_compliancedb.Employees - where unit like '%arrs%' - ) - BEGIN - - Update ehr_compliancedb.Employees - set unit = replace(unit,'arrs', 'DCM') - - If @@Error <> 0 - GoTo Err_Proc - - END - - - - If exists(select * from ehr_compliancedb.Employees - where category like '%arrs%' - ) - BEGIN - - Update ehr_compliancedb.Employees - set category = replace(category,'arrs', 'DCM') - - If @@Error <> 0 - GoTo Err_Proc - - END - - - - If exists(select * from ehr_compliancedb.requirements - where requirementname like '%arrs%' - ) - BEGIN - - Update ehr_compliancedb.requirements - set requirementname = replace(requirementname,'arrs', 'DCM') - - - If @@Error <> 0 - GoTo Err_Proc - - END - - - - If exists(select * from ehr_compliancedb.EmployeeRequirementExemptions - where requirementname like '%arrs%' - ) - BEGIN - - Update ehr_compliancedb.EmployeeRequirementExemptions - set requirementname = replace(requirementname,'arrs', 'DCM') - - - If @@Error <> 0 - GoTo Err_Proc - - END - - - - - If exists(select * from ehr_compliancedb.unit_names - where unit like '%arrs%' - ) - BEGIN - - Update ehr_compliancedb.unit_names - set unit = replace(unit,'arrs', 'DCM') - - - - If @@Error <> 0 - GoTo Err_Proc - - END - - - If exists(select * from ehr_compliancedb.RequirementsPerCategory - where RequirementName like '%arrs%' - ) - BEGIN - - Update ehr_compliancedb.RequirementsPerCategory - set requirementname = replace(requirementname,'arrs', 'DCM') - - - - If @@Error <> 0 - GoTo Err_Proc - - END - - - If exists(select * from ehr_compliancedb.RequirementsPerCategory - where category like '%arrs%' - ) - BEGIN - - Update ehr_compliancedb.RequirementsPerCategory - set category = replace(category,'arrs', 'DCM') - - If @@Error <> 0 - GoTo Err_Proc - - END - - - If exists(select * from ehr_compliancedb.RequirementsPerCategory - where unit like '%arrs%' - ) - BEGIN - - Update ehr_compliancedb.RequirementsPerCategory - set unit = replace(unit,'arrs', 'DCM') - - - If @@Error <> 0 - GoTo Err_Proc - - END - - If exists(select * from ehr_compliancedb.completiondates - where requirementname like '%arrs%' - ) - BEGIN - - Update ehr_compliancedb.completiondates - set requirementname = replace(requirementname,'arrs', 'DCM') - - - If @@Error <> 0 - GoTo Err_Proc - - END - - If exists(select * from ehr_compliancedb.EmployeeCategory - where categoryname like '%arrs%' - ) - BEGIN - - Update ehr_compliancedb.EmployeeCategory - set categoryname = replace(categoryname ,'arrs', 'DCM') - - - If @@Error <> 0 - GoTo Err_Proc - - END - - - - - - - - -No_Records: - - RETURN 0 - - -Err_Proc: - -- - RETURN 1 - - -END - -GO \ No newline at end of file diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.005-24.006.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.005-24.006.sql deleted file mode 100644 index 0a739ae44..000000000 --- a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.005-24.006.sql +++ /dev/null @@ -1,261 +0,0 @@ --- Author: R. Blasa --- Created: 9-20-2024-2024 --- Description: Stored procedure program to create a static data set for Compliance Procedure Recent Test .sql - - - CREATE TABLE onprc_ehr_compliancedb.ComplianceProcedureReport( - [rowid] [int] IDENTITY(1,1) NOT NULL, - [employeeid] varchar(300) NULL, - [requirementname] [varchar](4000) NULL, - [unit] [varchar](500) NULL, - [category] [varchar](500) NULL, - [trackingflag] [varchar](100) NULL, - [email] [varchar](500) NULL, - [lastname] [varchar](500) NULL, - [firstname] [varchar](500) NULL, - [host] [varchar](500) NULL, - [supervisor] [varchar](500) NULL, - [trainee_type] [varchar](500) NULL, - [times_completed] [smallint] NULL, - [expired_period] [smallint] NULL, - [new_expired_period] [smallint] NULL, - [mostrecentcompleted_date] [smalldatetime] NULL, - [comment] [varchar](4000) NULL, - [snooze_date] [smalldatetime] NULL, - [months_until_renewal] [Float] NULL, - [requirement_name_type] [varchar](1000) NULL - - ) ON [PRIMARY] - GO - --- Author: R. Blasa --- Created: 9-20-2024 - -/* -** -** Created by -** Blasa 9-20-2024 Created a storedprocedure to create a static set of data from -** the ComplianceProcedureRecentTest.sql query -** -** -** -*/ - -CREATE Procedure onprc_ehr_compliancedb.p_ComplianceProcedureOverDueSoon_Process - - -AS - - - ----- Reset Reporting table - Delete onprc_ehr_compliancedb.ComplianceProcedureReport - - If @@Error <> 0 - GoTo Err_Proc - - - -BEGIN - - Insert into onprc_ehr_compliancedb.ComplianceProcedureReport - ( - requirementname, - employeeid, - unit, - category, - trackingflag, - email, - lastname, - firstname, - host, - supervisor, - trainee_type, - requirement_name_type, - times_completed, - expired_period, - new_expired_Period, - mostrecentcompleted_date, - comment, - snooze_date, - months_until_renewal - - ) - - - - - - select b.requirementname, - a.employeeid, - string_agg(a.unit,char(10)) as unit, - string_agg(a.category,char(10)) as category, - (select top 1 h.trackingflag from ehr_compliancedb.requirementspercategory h where h.requirementname = b.requirementname) as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = b.requirementname) as requirement_type, - - (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as times_Completed, - - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = b.requirementname) as ExpiredPeriod, - - ( select (datediff(month,max(pq.date), tt.reviewdate) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - - (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as mostrecentcompleted_date, - - (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as comment, - - (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as snooze_date, - - CAST( - CASE - - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = b.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 - WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = b.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > ( datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN - - ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate()) ) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > ( datediff(month,max(pq.date), tt.reviewdate) ) ) - - - - - ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate()) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) - - END AS Float) AS MonthsUntilRenewal - - - - from ehr_Compliancedb.employeeperunit a ,ehr_compliancedb.requirementspercategory b - where ( a.unit = b.unit or a.category = b.category ) - And b.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid - And b.requirementname = t.requirementname) - - And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) - And b.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = b.requirementname And q.dateDisabled is null ) - - - group by b.requirementname,a.employeeid - - - union - - select a.requirementname, - a.employeeid, - null as unit, - null as category, - 'No' as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer - - - (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, - - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, - - ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - - (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, - - (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, - - (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, - - CAST( - CASE - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 - WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > ( datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN - - ( select ( datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > ( datediff(month,max(pq.date), tt.reviewdate) ) ) - - - ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate()) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) - - END AS Float) AS MonthsUntilRenewal - - - from ehr_compliancedb.completiondates a - where a.requirementname not in (select distinct h.requirementname from ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h Where (k.unit = h.unit - or k.category = h.category) And a.employeeid = k.employeeid ) - And a.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid - And a.requirementname = t.requirementname) - And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) - And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) - - group by a.requirementname,a.employeeid - - UNION - - -- Additional requirements for employees that have not completed training, but is required - select j.requirementname, - j.employeeid, - null as unit, - null as category, - 'Yes' as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = j.requirementname) as requirement_type, ----- type trainee, or trainer - null as timesCompleted, - null as ExpiredPeriod, - null as NewExpirePeriod, - null as MostRecentDate, - '' as comment, - null as snooze_date, - null AS MonthsUntilRenewal - - - - from ehr_compliancedb.RequirementsPerEmployee j - Where j.requirementname not in (select z.requirementname from ehr_compliancedb.completiondates z where z.requirementname = j.requirementname - and z.employeeid = j.employeeid and z.date is not null) - And j.employeeid in (select p.employeeid from ehr_compliancedb.employees p where j.employeeid = p.employeeid And p.enddate is null) - And j.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = j.requirementname And q.dateDisabled is null ) - - group by j.requirementname,j.employeeid - - order by employeeid,requirementname, mostrecentcompleted_date desc - - - If @@Error <> 0 - GoTo Err_Proc - - - - - RETURN 0 - - -Err_Proc: - - RETURN 1 - - -END - -GO \ No newline at end of file diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.006-24.007.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.006-24.007.sql deleted file mode 100644 index 24134b431..000000000 --- a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.006-24.007.sql +++ /dev/null @@ -1,349 +0,0 @@ --- Author: R. Blasa --- Created: 9-20-2024-2024 --- Description: Stored procedure program to create a static data set for Compliance Recent Test .sql - - - CREATE TABLE onprc_ehr_compliancedb.ComplianceRecentReport( - [rowid] [int] IDENTITY(1,1) NOT NULL, - [employeeid] varchar(300) NULL, - [requirementname] [varchar](4000) NULL, - [unit] [varchar](500) NULL, - [category] [varchar](500) NULL, - [trackingflag] [varchar](100) NULL, - [email] [varchar](500) NULL, - [lastname] [varchar](500) NULL, - [firstname] [varchar](500) NULL, - [host] [varchar](500) NULL, - [supervisor] [varchar](500) NULL, - [trainee_type] [varchar](500) NULL, - [times_completed] [smallint] NULL, - [expired_period] [smallint] NULL, - [new_expired_period] [smallint] NULL, - [mostrecentcompleted_date] [smalldatetime] NULL, - [comment] [varchar](4000) NULL, - [snooze_date] [smalldatetime] NULL, - [months_until_renewal] [FLOAT] NULL, - [requirement_name_type] [varchar](1000) NULL - - ) ON [PRIMARY] - GO - - --- Author: R. Blasa --- Created: 9-20-2024 - -/* -** -** Created by -** Blasa 9-20-2024 Created a storedprocedure to create a static set of data from -** the ComplianceRecentTest.sql query -** -** -** -*/ - -CREATE Procedure onprc_ehr_compliancedb.p_ComplianceRecentOverDueSoon_Process - - -AS - - - - ----- Reset Reporting table - Delete onprc_ehr_compliancedb.ComplianceRecentReport - - If @@Error <> 0 - GoTo Err_Proc - - - -BEGIN - - Insert into onprc_ehr_compliancedb.ComplianceRecentReport - ( - requirementname, - employeeid, - unit, - category, - trackingflag, - email, - lastname, - firstname, - host, - supervisor, - trainee_type, - requirement_name_type, - times_completed, - expired_period, - new_expired_Period, - mostrecentcompleted_date, - comment, - snooze_date, - months_until_renewal - - ) - - - - - select b.requirementname, - a.employeeid, - string_agg(a.unit,char(10)) as unit, - string_agg(a.category,char(10)) as category, - (select top 1 h.trackingflag from ehr_compliancedb.requirementspercategory h where h.requirementname = b.requirementname) as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = b.requirementname) as requirement_type, ----- type trainee, or trainer - - - (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as times_Completed, - - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = b.requirementname) as ExpiredPeriod, - - ( select (datediff(month,max(pq.date), tt.reviewdate) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - - (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as mostrecentcompleted_date, - - (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as comment, - - (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as snooze_date, - - CAST( - CASE - - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = b.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 - WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = b.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > ( datediff(month,max(pq.date), tt.reviewdate) ) ) > 0 THEN - - ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) ) ) - - - - - ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) - - END AS FLOAT) AS MonthsUntilRenewal - - - - from ehr_Compliancedb.employeeperunit a ,ehr_compliancedb.requirementspercategory b - where ( a.unit = b.unit or a.category = b.category ) - And b.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid - And b.requirementname = t.requirementname) - And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) - And b.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = b.requirementname And q.dateDisabled is null ) - - - group by b.requirementname,a.employeeid - - - union - - select a.requirementname, - a.employeeid, - null as unit, - null as category, - 'No' as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer - - - (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, - - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, - - ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - - (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, - - (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, - - (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, - - CAST( - CASE - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 - WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN - - ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) ) ) - - - ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) - - END AS FLOAT) AS MonthsUntilRenewal - - - from ehr_compliancedb.completiondates a - where a.requirementname not in (select distinct h.requirementname from ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h Where (k.unit = h.unit - or k.category = h.category) And a.employeeid = k.employeeid ) - And a.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid - And a.requirementname = t.requirementname) - And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) - And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) - - group by a.requirementname,a.employeeid - - UNION - - --- Training that was completed by as an employee training exemptions, and at least completed one, or more times - - select a.requirementname, - a.employeeid, - null as unit, - null as category, - 'No' as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer - - - (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, - - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, - - ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - - (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, - - (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, - - (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, - - CAST( - CASE - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 - WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN - - ( select ( datediff(month,max(pq.date), tt.reviewdate) - (datediff(month,max(pq.date), getdate())) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) ) - - - ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) - - END AS DECIMAL) AS MonthsUntilRenewal - - - from ehr_compliancedb.employeerequirementexemptions a - Where a.requirementname in (select z.requirementname from ehr_compliancedb.completiondates z where z.requirementname = a.requirementname - and z.employeeid = a.employeeid and z.date is not null) - And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) - And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) - - group by a.requirementname,a.employeeid - - UNION - - --- Additional requirements for employees that have not completed training, but is required - - select j.requirementname, - j.employeeid, - null as unit, - null as category, - 'Yes' as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = j.requirementname) as requirement_type, ----- type trainee, or trainer - - (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= j.requirementname and zz.employeeid= j.employeeid ) as timesCompleted, - - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = j.requirementname) as ExpiredPeriod, - - ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - - (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= j.requirementname and zz.employeeid= j.employeeid ) as MostRecentDate, - - (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= j.requirementname and zz.employeeid= j.employeeid ) - And yy.requirementname= j.requirementname and yy.employeeid= j.employeeid ) as comment, - - (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= j.requirementname and zz.employeeid= j.employeeid ) - And yy.requirementname= j.requirementname and yy.employeeid= j.employeeid ) as snooze_date, - - CAST( - CASE - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = j.requirementname and st.employeeid = j.employeeid ) IS NULL then 0 - WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = j.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN - - ( select ( datediff(month,max(pq.date), tt.reviewdate) - (datediff(month,max(pq.date), getdate())) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) ) - - - ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod ) - - END AS DECIMAL) AS MonthsUntilRenewal - - - - - - from ehr_compliancedb.RequirementsPerEmployee j - Where j.requirementname not in (select z.requirementname from ehr_compliancedb.completiondates z where z.requirementname = j.requirementname - and z.employeeid = j.employeeid and z.date is not null) - And j.employeeid in (select p.employeeid from ehr_compliancedb.employees p where j.employeeid = p.employeeid And p.enddate is null) - And j.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = j.requirementname And q.dateDisabled is null ) - - group by j.requirementname,j.employeeid - - order by employeeid,requirementname, mostrecentcompleted_date desc - - - If @@Error <> 0 - GoTo Err_Proc - - - - - RETURN 0 - - -Err_Proc: - - RETURN 1 - - -END - -GO diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.007-24.008.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.007-24.008.sql deleted file mode 100644 index ea9b67efb..000000000 --- a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.007-24.008.sql +++ /dev/null @@ -1,317 +0,0 @@ - - -EXEC core.fn_dropifexists 'p_ComplianceRecentOverDueSoon_Process', 'onprc_ehr_compliancedb', 'PROCEDURE'; -GO - --- Author: R. Blasa --- Created: 9-20-2024 - -/* -** -** Created by -** Blasa 9-20-2024 Created a storedprocedure to create a static set of data from -** the ComplianceRecentTest.sql query -** -** -** -*/ - -CREATE Procedure onprc_ehr_compliancedb.p_ComplianceRecentOverDueSoon_Process - - -AS - - - - ----- Reset Reporting table - Delete onprc_ehr_compliancedb.ComplianceRecentReport - - If @@Error <> 0 - GoTo Err_Proc - - - -BEGIN - - Insert into onprc_ehr_compliancedb.ComplianceRecentReport - ( - requirementname, - employeeid, - unit, - category, - trackingflag, - email, - lastname, - firstname, - host, - supervisor, - trainee_type, - requirement_name_type, - times_completed, - expired_period, - new_expired_Period, - mostrecentcompleted_date, - comment, - snooze_date, - months_until_renewal - - ) - - - - - select b.requirementname, - a.employeeid, - string_agg(a.unit,char(10)) as unit, - string_agg(a.category,char(10)) as category, - string_agg(b.trackingflag,char(10)) as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = b.requirementname) as requirement_type, ----- type trainee, or trainer - - - (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as times_Completed, - - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = b.requirementname) as ExpiredPeriod, - - ( select (datediff(month,max(pq.date), tt.reviewdate) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - - (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as mostrecentcompleted_date, - - (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as comment, - - (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as snooze_date, - - CAST( - CASE - - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = b.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 - WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = b.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > ( datediff(month,max(pq.date), tt.reviewdate) ) ) > 0 THEN - - ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) ) ) - - - - - ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) - - END AS FLOAT) AS MonthsUntilRenewal - - - - from ehr_Compliancedb.employeeperunit a ,ehr_compliancedb.requirementspercategory b - where ( a.unit = b.unit or a.category = b.category ) - And b.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid - And b.requirementname = t.requirementname) - And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) - And b.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = b.requirementname And q.dateDisabled is null ) - - - group by b.requirementname,a.employeeid - - - union - - select a.requirementname, - a.employeeid, - null as unit, - null as category, - 'None' as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer - - - (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, - - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, - - ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - - (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, - - (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, - - (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, - - CAST( - CASE - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 - WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN - - ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) ) ) - - - ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) - - END AS FLOAT) AS MonthsUntilRenewal - - - from ehr_compliancedb.completiondates a - where a.requirementname not in (select distinct h.requirementname from ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h Where (k.unit = h.unit - or k.category = h.category) And a.employeeid = k.employeeid ) - And a.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid - And a.requirementname = t.requirementname) - And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) - And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) - - group by a.requirementname,a.employeeid - - UNION - - --- Training that was completed by as an employee training exemptions, and at least completed one, or more times - - select a.requirementname, - a.employeeid, - null as unit, - null as category, - 'No' as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer - - - (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, - - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, - - ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - - (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, - - (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, - - (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, - - CAST( - CASE - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 - WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN - - ( select ( datediff(month,max(pq.date), tt.reviewdate) - (datediff(month,max(pq.date), getdate())) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) ) - - - ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) - - END AS DECIMAL) AS MonthsUntilRenewal - - - from ehr_compliancedb.employeerequirementexemptions a - Where a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) - And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) - - group by a.requirementname,a.employeeid - - UNION - - --- Additional requirements for employees that have not completed training, but is required - - select j.requirementname, - j.employeeid, - null as unit, - null as category, - 'Yes' as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = j.requirementname) as requirement_type, ----- type trainee, or trainer - - (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= j.requirementname and zz.employeeid= j.employeeid ) as timesCompleted, - - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = j.requirementname) as ExpiredPeriod, - - ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - - (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= j.requirementname and zz.employeeid= j.employeeid ) as MostRecentDate, - - (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= j.requirementname and zz.employeeid= j.employeeid ) - And yy.requirementname= j.requirementname and yy.employeeid= j.employeeid ) as comment, - - (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= j.requirementname and zz.employeeid= j.employeeid ) - And yy.requirementname= j.requirementname and yy.employeeid= j.employeeid ) as snooze_date, - - CAST( - CASE - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = j.requirementname and st.employeeid = j.employeeid ) IS NULL then 0 - WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = j.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN - - ( select ( datediff(month,max(pq.date), tt.reviewdate) - (datediff(month,max(pq.date), getdate())) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) ) - - - ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod ) - - END AS DECIMAL) AS MonthsUntilRenewal - - - - from ehr_compliancedb.RequirementsPerEmployee j - Where j.employeeid in (select p.employeeid from ehr_compliancedb.employees p where j.employeeid = p.employeeid And p.enddate is null) - And j.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = j.requirementname And q.dateDisabled is null ) - - group by j.requirementname,j.employeeid - - order by employeeid,requirementname, mostrecentcompleted_date desc - - - If @@Error <> 0 - GoTo Err_Proc - - - - - RETURN 0 - - -Err_Proc: - - RETURN 1 - - -END - -GO diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.008-24.009.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.008-24.009.sql deleted file mode 100644 index 54bfb6df4..000000000 --- a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.008-24.009.sql +++ /dev/null @@ -1,232 +0,0 @@ - - -EXEC core.fn_dropifexists 'p_ComplianceProcedureOverDueSoon_Process', 'onprc_ehr_compliancedb', 'PROCEDURE'; -GO - --- Author: R. Blasa --- Created: 9-20-2024 - -/* -** -** Created by -** Blasa 9-20-2024 Created a storedprocedure to create a static set of data from -** the ComplianceProcedureRecentTest.sql query -** -** -** -*/ - -CREATE Procedure onprc_ehr_compliancedb.p_ComplianceProcedureOverDueSoon_Process - - -AS - - - ----- Reset Reporting table - Delete onprc_ehr_compliancedb.ComplianceProcedureReport - - If @@Error <> 0 - GoTo Err_Proc - - - -BEGIN - - Insert into onprc_ehr_compliancedb.ComplianceProcedureReport - ( - requirementname, - employeeid, - unit, - category, - trackingflag, - email, - lastname, - firstname, - host, - supervisor, - trainee_type, - requirement_name_type, - times_completed, - expired_period, - new_expired_Period, - mostrecentcompleted_date, - comment, - snooze_date, - months_until_renewal - - ) - - - - - - select b.requirementname, - a.employeeid, - string_agg(a.unit,char(10)) as unit, - string_agg(a.category,char(10)) as category, - string_agg(b.trackingflag,char(10)) as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = b.requirementname) as requirement_type, - - (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as times_Completed, - - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = b.requirementname) as ExpiredPeriod, - - ( select (datediff(month,max(pq.date), tt.reviewdate) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - - (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as mostrecentcompleted_date, - - (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as comment, - - (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as snooze_date, - - CAST( - CASE - - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = b.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 - WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = b.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > ( datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN - - ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate()) ) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > ( datediff(month,max(pq.date), tt.reviewdate) ) ) - - - - - ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate()) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) - - END AS Float) AS MonthsUntilRenewal - - - - from ehr_Compliancedb.employeeperunit a ,ehr_compliancedb.requirementspercategory b - where ( a.unit = b.unit or a.category = b.category ) - And b.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid - And b.requirementname = t.requirementname) - And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) - And b.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = b.requirementname And q.dateDisabled is null ) - - - group by b.requirementname,a.employeeid - - union - - select a.requirementname, - a.employeeid, - null as unit, - null as category, - 'None' as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer - - - (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, - - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, - - ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - - (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, - - (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, - - (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, - - CAST( - CASE - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 - WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN - - ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) ) ) - - - ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) - - END AS FLOAT) AS MonthsUntilRenewal - - - from ehr_compliancedb.completiondates a - where a.requirementname not in (select distinct h.requirementname from ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h Where (k.unit = h.unit - or k.category = h.category) And a.employeeid = k.employeeid ) - And a.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid - And a.requirementname = t.requirementname) - And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) - And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) - - group by a.requirementname,a.employeeid - - union - - -- Additional requirements for employees that have not completed training, but is required - select j.requirementname, - j.employeeid, - null as unit, - null as category, - 'Yes' as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = j.requirementname) as requirement_type, ----- type trainee, or trainer - null as timesCompleted, - null as ExpiredPeriod, - null as NewExpirePeriod, - null as MostRecentDate, - '' as comment, - null as snooze_date, - null AS MonthsUntilRenewal - - - - from ehr_compliancedb.RequirementsPerEmployee j - Where j.employeeid in (select p.employeeid from ehr_compliancedb.employees p where j.employeeid = p.employeeid And p.enddate is null) - And j.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = j.requirementname And q.dateDisabled is null ) - - group by j.requirementname,j.employeeid - - order by employeeid,requirementname, mostrecentcompleted_date desc - - - If @@Error <> 0 - GoTo Err_Proc - - - - - RETURN 0 - - -Err_Proc: - - RETURN 1 - - -END - -GO \ No newline at end of file diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.009-24.010.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.009-24.010.sql deleted file mode 100644 index 7d8b3cb9b..000000000 --- a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.009-24.010.sql +++ /dev/null @@ -1,325 +0,0 @@ - -CREATE TABLE onprc_ehr_compliancedb.RequirementsPerEmployee -( - RowId INT IDENTITY(1,1) NOT NULL, - EmployeeId varchar(255) not null, - RequirementName varchar(255) not null, - CreatedBy USERID, - Created datetime, - ModifiedBy USERID, - Modified datetime, - trackingflag varchar(100) - - CONSTRAINT PK_RequirementsPerEmployeename PRIMARY KEY (RowId) -); -GO - -EXEC core.fn_dropifexists 'p_ComplianceRecentOverDueSoon_Process', 'onprc_ehr_compliancedb', 'PROCEDURE'; -GO - --- Author: R. Blasa --- Created: 9-20-2024 - -/* -** -** Created by -** Blasa 9-20-2024 Created a storedprocedure to create a static set of data from -** the ComplianceRecentTest.sql query -** -** -** -*/ - -CREATE Procedure onprc_ehr_compliancedb.p_ComplianceRecentOverDueSoon_Process - - -AS - - - - ----- Reset Reporting table - Delete onprc_ehr_compliancedb.ComplianceRecentReport - - If @@Error <> 0 - GoTo Err_Proc - - - -BEGIN - - Insert into onprc_ehr_compliancedb.ComplianceRecentReport - ( - requirementname, - employeeid, - unit, - category, - trackingflag, - email, - lastname, - firstname, - host, - supervisor, - trainee_type, - requirement_name_type, - times_completed, - expired_period, - new_expired_Period, - mostrecentcompleted_date, - comment, - snooze_date, - months_until_renewal - - ) - - - - - select b.requirementname, - a.employeeid, - string_agg(a.unit,char(10)) as unit, - string_agg(a.category,char(10)) as category, - string_agg(b.trackingflag,char(10)) as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = b.requirementname) as requirement_type, ----- type trainee, or trainer - - - (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as times_Completed, - - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = b.requirementname) as ExpiredPeriod, - - ( select (datediff(month,max(pq.date), tt.reviewdate) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (COALESCE(tt.expireperiod,0)) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - - (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as mostrecentcompleted_date, - - (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as comment, - - (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as snooze_date, - - CAST( - CASE - - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = b.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 - WHEN ( select (COALESCE(tt.expireperiod,0)) from ehr_compliancedb.requirements tt where tt.requirementname = b.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.reviewdate) > (max(pq.date)) ) > 0 THEN - - ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.reviewdate) > (max(pq.date)) ) - - - - - ELSE ( select (COALESCE(tt.expireperiod,0)) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) - - END AS FLOAT) AS MonthsUntilRenewal - - - - from ehr_Compliancedb.employeeperunit a ,ehr_compliancedb.requirementspercategory b - where ( a.unit = b.unit or a.category = b.category ) - And b.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid - And b.requirementname = t.requirementname) - And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) - And b.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = b.requirementname And q.dateDisabled is null ) - - - group by b.requirementname,a.employeeid - - - union - - select a.requirementname, - a.employeeid, - null as unit, - null as category, - 'None' as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer - - - (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, - - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, - - ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (COALESCE(tt.expireperiod,0)) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - - (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, - - (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, - - (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, - - CAST( - CASE - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 - WHEN ( select (COALESCE(tt.expireperiod,0)) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.reviewdate) > (max(pq.date)) ) > 0 THEN - - ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.reviewdate) > (max(pq.date)) ) - - - ELSE ( select (COALESCE(tt.expireperiod,0)) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) - - END AS FLOAT) AS MonthsUntilRenewal - - - from ehr_compliancedb.completiondates a - where a.requirementname not in (select distinct h.requirementname from ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h Where (k.unit = h.unit - or k.category = h.category) And a.employeeid = k.employeeid ) - And a.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid - And a.requirementname = t.requirementname) - And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) - And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) - - group by a.requirementname,a.employeeid - - UNION - - --- Training that was completed by as an employee training exemptions, and at least completed one, or more times - - select a.requirementname, - a.employeeid, - null as unit, - null as category, - 'No' as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer - - - (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, - - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, - - ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (COALESCE(tt.expireperiod,0)) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - - (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, - - (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, - - (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, - - CAST( - CASE - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 - WHEN ( select (COALESCE(tt.expireperiod,0)) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.reviewdate) > (max(pq.date)) ) > 0 THEN - - ( select ( datediff(month,max(pq.date), tt.reviewdate) - (datediff(month,max(pq.date), getdate())) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.reviewdate) > (max(pq.date)) ) - - - ELSE ( select (COALESCE(tt.expireperiod,0)) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) - - END AS DECIMAL) AS MonthsUntilRenewal - - - from ehr_compliancedb.employeerequirementexemptions a - Where a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) - And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) - - group by a.requirementname,a.employeeid - - UNION - - --- Additional requirements for employees that have not completed training, but is required - - select j.requirementname, - j.employeeid, - null as unit, - null as category, - string_agg(j.trackingflag,char(10)) as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = j.requirementname) as requirement_type, ----- type trainee, or trainer - 0 as timesCompleted, - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = j.requirementname) as ExpiredPeriod, - ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate - having (COALESCE(tt.expireperiod,0)) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - null as MostRecentDate, - '' as comment, - null as snooze_date, - CAST( - CASE - - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = j.requirementname and st.employeeid = j.employeeid ) IS NULL then 0 - WHEN ( select (COALESCE(tt.expireperiod,0)) from ehr_compliancedb.requirements tt where tt.requirementname = j.requirementname group by tt.expireperiod ) = 0 then Null - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.reviewdate) > (max(pq.date)) ) > 0 THEN - - ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.reviewdate) > (max(pq.date)) ) - - - ELSE ( select (COALESCE(tt.expireperiod,0)) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod ) - - END AS FLOAT) AS MonthsUntilRenewal - - - from onprc_ehr_compliancedb.RequirementsPerEmployee j - Where j.employeeid in (select p.employeeid from ehr_compliancedb.employees p where j.employeeid = p.employeeid And p.enddate is null) - And j.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = j.requirementname And q.dateDisabled is null ) - And j.requirementname not in (select distinct h.requirementname from ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h Where (k.unit = h.unit - or k.category = h.category) And j.employeeid = k.employeeid ) - And j.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where j.employeeid = t.employeeid And j.requirementname = t.requirementname) - And j.requirementname not in (select distinct k.requirementname from ehr_compliancedb.completiondates k Where k.employeeid = j.employeeid) - - group by j.requirementname,j.employeeid - - order by employeeid,requirementname, mostrecentcompleted_date desc - - - If @@Error <> 0 - GoTo Err_Proc - - - - - RETURN 0 - - -Err_Proc: - - RETURN 1 - - -END - -GO diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.010-24.011.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.010-24.011.sql deleted file mode 100644 index 8452ee8c8..000000000 --- a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.010-24.011.sql +++ /dev/null @@ -1,251 +0,0 @@ - - -EXEC core.fn_dropifexists 'p_ComplianceProcedureOverDueSoon_Process', 'onprc_ehr_compliancedb', 'PROCEDURE'; -GO - --- Author: R. Blasa --- Created: 9-20-2024 - -/* -** -** Created by -** Blasa 9-20-2024 Created a storedprocedure to create a static set of data from -** the ComplianceProcedureRecentTest.sql query -** -** -** -*/ - -CREATE Procedure onprc_ehr_compliancedb.p_ComplianceProcedureOverDueSoon_Process - - -AS - - - ----- Reset Reporting table - Delete onprc_ehr_compliancedb.ComplianceProcedureReport - - If @@Error <> 0 - GoTo Err_Proc - - - -BEGIN - - Insert into onprc_ehr_compliancedb.ComplianceProcedureReport - ( - requirementname, - employeeid, - unit, - category, - trackingflag, - email, - lastname, - firstname, - host, - supervisor, - trainee_type, - requirement_name_type, - times_completed, - expired_period, - new_expired_Period, - mostrecentcompleted_date, - comment, - snooze_date, - months_until_renewal - - ) - - - - - - select b.requirementname, - a.employeeid, - string_agg(a.unit,char(10)) as unit, - string_agg(a.category,char(10)) as category, - string_agg(b.trackingflag,char(10)) as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = b.requirementname) as requirement_type, - - (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as times_Completed, - - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = b.requirementname) as ExpiredPeriod, - - ( select (datediff(month,max(pq.date), tt.reviewdate) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (COALESCE(tt.expireperiod,0)) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - - (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as mostrecentcompleted_date, - - (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as comment, - - (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as snooze_date, - - CAST( - CASE - - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = b.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 - WHEN ( select (COALESCE(tt.expireperiod,0)) from ehr_compliancedb.requirements tt where tt.requirementname = b.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.reviewdate) > (max(pq.date)) ) > 0 THEN - - ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate()) ) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.reviewdate) > (max(pq.date)) ) - - - ELSE ( select (COALESCE(tt.expireperiod,0)) - ( datediff(month,max(pq.date), getdate()) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) - - END AS Float) AS MonthsUntilRenewal - - - - from ehr_Compliancedb.employeeperunit a ,ehr_compliancedb.requirementspercategory b - where ( a.unit = b.unit or a.category = b.category ) - And b.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid - And b.requirementname = t.requirementname) - And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) - And b.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = b.requirementname And q.dateDisabled is null ) - - - group by b.requirementname,a.employeeid - - union - - select a.requirementname, - a.employeeid, - null as unit, - null as category, - 'None' as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer - - - (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, - - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, - - ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (COALESCE(tt.expireperiod,0)) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - - (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, - - (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, - - (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, - - CAST( - CASE - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 - WHEN ( select (COALESCE(tt.expireperiod,0)) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.reviewdate) > (max(pq.date)) ) > 0 THEN - - ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.reviewdate) > (max(pq.date)) ) - - - ELSE ( select (COALESCE(tt.expireperiod,0)) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) - - END AS FLOAT) AS MonthsUntilRenewal - - - from ehr_compliancedb.completiondates a - where a.requirementname not in (select distinct h.requirementname from ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h Where (k.unit = h.unit - or k.category = h.category) And a.employeeid = k.employeeid ) - And a.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid - And a.requirementname = t.requirementname) - And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) - And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) - - group by a.requirementname,a.employeeid - - union - - -- Additional requirements for employees that have not completed training, but is required - select j.requirementname, - j.employeeid, - null as unit, - null as category, - string_agg(j.trackingflag,char(10)) as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = j.requirementname) as requirement_type, ----- type trainee, or trainer - 0 as timesCompleted, - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = j.requirementname) as ExpiredPeriod, - ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate - having (COALESCE(tt.expireperiod,0)) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - null as MostRecentDate, - '' as comment, - null as snooze_date, - CAST( - CASE - - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = j.requirementname and st.employeeid = j.employeeid ) IS NULL then 0 - WHEN ( select (COALESCE(tt.expireperiod,0)) from ehr_compliancedb.requirements tt where tt.requirementname = j.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.reviewdate) > (max(pq.date)) ) > 0 THEN - - ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.reviewdate) > (max(pq.date)) ) - - - ELSE ( select (COALESCE(tt.expireperiod,0)) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod ) - - END AS FLOAT) AS MonthsUntilRenewal - - - - from onprc_ehr_compliancedb.RequirementsPerEmployee j - Where j.employeeid in (select p.employeeid from ehr_compliancedb.employees p where j.employeeid = p.employeeid And p.enddate is null) - And j.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = j.requirementname And q.dateDisabled is null ) - And j.requirementname not in (select distinct h.requirementname from ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h Where (k.unit = h.unit - or k.category = h.category) And j.employeeid = k.employeeid ) - And j.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where j.employeeid = t.employeeid And j.requirementname = t.requirementname) - And j.requirementname not in (select distinct k.requirementname from ehr_compliancedb.completiondates k Where k.employeeid = j.employeeid) - - group by j.requirementname,j.employeeid - - order by employeeid,requirementname, mostrecentcompleted_date desc - - - If @@Error <> 0 - GoTo Err_Proc - - - - - RETURN 0 - - -Err_Proc: - - RETURN 1 - - -END - -GO \ No newline at end of file diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.011-24.012.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.011-24.012.sql deleted file mode 100644 index 2c97c39ae..000000000 --- a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.011-24.012.sql +++ /dev/null @@ -1,65 +0,0 @@ -EXEC core.fn_dropifexists 'p_ComplianceAccesscontainerUpdate', 'onprc_ehr_compliancedb', 'PROCEDURE'; -GO - --- Author: R. Blasa --- Created: 10-2-2024 - -/* -** -** Created by -** Blasa 9-5-2025 Storedprocedure to update Compliance Access contaimer values and update -** Completion date records -** . -** -** -** -*/ - -CREATE Procedure onprc_ehr_compliancedb.p_ComplianceAccesscontainerUpdate - - - AS - - - -BEGIN - - ------ Update container value and include as part of the main Compliance module - -If exists(Select * from ehr_Compliancedb.CompletionDates ss where ss.container = 'F1C05E2D-618D-103D-ABC9-9814909BFFCD' ) -BEGIN - -Update ss -set ss.container = 'CD170458-C55F-102F-9907-5107380A54BE' ----Compliance folder on Prime Production - - from ehr_Compliancedb.CompletionDates ss -Where ss.container = 'F1C05E2D-618D-103D-ABC9-9814909BFFCD' ---Compliance Access folder on Prime Production - - If @@Error <> 0 - GoTo Err_Proc - -END - -ELSE ------ No new entries exit -BEGIN - -GOTO No_Records - -END - - - - -No_Records: - - RETURN 0 - - -Err_Proc: - -------Error Generated, Transfer process stopped - RETURN 1 - - -END - -GO \ No newline at end of file From 53e5111047168c9933d61b8e208e41128a39db61 Mon Sep 17 00:00:00 2001 From: Adam Rauch Date: Fri, 21 Aug 2026 15:41:22 -0700 Subject: [PATCH 05/12] Schema version --- .../ONPRC_EHR_ComplianceDBModule.java | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/ONPRC_EHR_ComplianceDB/src/org/labkey/ONPRCEHR_ComplianceDB/ONPRC_EHR_ComplianceDBModule.java b/ONPRC_EHR_ComplianceDB/src/org/labkey/ONPRCEHR_ComplianceDB/ONPRC_EHR_ComplianceDBModule.java index e03bd4352..adc19a67c 100644 --- a/ONPRC_EHR_ComplianceDB/src/org/labkey/ONPRCEHR_ComplianceDB/ONPRC_EHR_ComplianceDBModule.java +++ b/ONPRC_EHR_ComplianceDB/src/org/labkey/ONPRCEHR_ComplianceDB/ONPRC_EHR_ComplianceDBModule.java @@ -55,8 +55,8 @@ public String getName() @Override public Double getSchemaVersion() { - return 25.001; - } //Modified: 9-8-025 + return 26.000; + } @Override public @NotNull Collection getSchemaNames() @@ -64,12 +64,6 @@ public Double getSchemaVersion() return Collections.singleton(ONPRC_EHR_ComplianceDBSchema.NAME); } - @Override - public boolean hasScripts() - { - return true; - } - @Override protected void registerSchemas() { From b322a1294931b0ceabeeea7c70c2d08144c84e60 Mon Sep 17 00:00:00 2001 From: Adam Rauch Date: Fri, 21 Aug 2026 16:13:45 -0700 Subject: [PATCH 06/12] Consolidate extscheduler scripts --- extscheduler/module.properties | 4 +- .../sqlserver/extscheduler-0.000-25.000.sql | 568 ++++++++++++++++++ .../sqlserver/extscheduler-15.20-15.21.sql | 38 -- .../sqlserver/extscheduler-15.21-15.22.sql | 6 - .../sqlserver/extscheduler-15.22-15.23.sql | 24 - .../sqlserver/extscheduler-15.23-15.24.sql | 27 - .../sqlserver/extscheduler-15.24-15.25.sql | 20 - .../sqlserver/extscheduler-15.25-15.26.sql | 1 - .../sqlserver/extscheduler-15.26-15.27.sql | 2 - .../sqlserver/extscheduler-15.27-15.28.sql | 16 - .../sqlserver/extscheduler-15.28-15.29.sql | 1 - .../sqlserver/extscheduler-15.29-15.30.sql | 1 - .../sqlserver/extscheduler-15.30-15.31.sql | 21 - .../sqlserver/extscheduler-20.02-20.03.sql | 7 - .../sqlserver/extscheduler-20.502-20.503.sql | 49 -- .../sqlserver/extscheduler-20.503-20.504.sql | 55 -- .../sqlserver/extscheduler-20.504-20.505.sql | 55 -- .../sqlserver/extscheduler-20.505-20.506.sql | 55 -- .../sqlserver/extscheduler-20.601-20.602.sql | 28 - .../sqlserver/extscheduler-20.602-20.603.sql | 28 - .../sqlserver/extscheduler-20.901-20.902.sql | 32 - .../sqlserver/extscheduler-20.903-20.904.sql | 32 - .../sqlserver/extscheduler-20.910-20.911.sql | 11 - .../sqlserver/extscheduler-20.911-20.912.sql | 14 - .../sqlserver/extscheduler-20.922-20.923.sql | 9 - .../sqlserver/extscheduler-20.936-20.937.sql | 13 - .../sqlserver/extscheduler-21.001-21.002.sql | 1 - .../sqlserver/extscheduler-23.001-23.002.sql | 19 - .../extscheduler/ExtSchedulerModule.java | 6 +- 29 files changed, 573 insertions(+), 570 deletions(-) create mode 100644 extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-0.000-25.000.sql delete mode 100644 extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.20-15.21.sql delete mode 100644 extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.21-15.22.sql delete mode 100644 extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.22-15.23.sql delete mode 100644 extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.23-15.24.sql delete mode 100644 extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.24-15.25.sql delete mode 100644 extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.25-15.26.sql delete mode 100644 extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.26-15.27.sql delete mode 100644 extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.27-15.28.sql delete mode 100644 extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.28-15.29.sql delete mode 100644 extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.29-15.30.sql delete mode 100644 extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.30-15.31.sql delete mode 100644 extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.02-20.03.sql delete mode 100644 extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.502-20.503.sql delete mode 100644 extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.503-20.504.sql delete mode 100644 extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.504-20.505.sql delete mode 100644 extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.505-20.506.sql delete mode 100644 extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.601-20.602.sql delete mode 100644 extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.602-20.603.sql delete mode 100644 extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.901-20.902.sql delete mode 100644 extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.903-20.904.sql delete mode 100644 extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.910-20.911.sql delete mode 100644 extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.911-20.912.sql delete mode 100644 extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.922-20.923.sql delete mode 100644 extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.936-20.937.sql delete mode 100644 extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-21.001-21.002.sql delete mode 100644 extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-23.001-23.002.sql diff --git a/extscheduler/module.properties b/extscheduler/module.properties index cfa1b282e..85ac54a44 100644 --- a/extscheduler/module.properties +++ b/extscheduler/module.properties @@ -1,5 +1,5 @@ Name: extscheduler ModuleClass: org.labkey.extscheduler.ExtSchedulerModule -SupportedDatabases: mssql +SupportedDatabases: mssql, pgsql RequiredServerVersion: 15.2 -ManageVersion: false +ManageVersion: true diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-0.000-25.000.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-0.000-25.000.sql new file mode 100644 index 000000000..e665d02d7 --- /dev/null +++ b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-0.000-25.000.sql @@ -0,0 +1,568 @@ +CREATE SCHEMA extscheduler; +GO + +CREATE TABLE extscheduler.Resources +( + Id INT IDENTITY(1,1) NOT NULL, + Name VARCHAR(255) NOT NULL, + Color VARCHAR(20), + + Container ENTITYID NOT NULL, + CreatedBy USERID, + Created DATETIME, + ModifiedBy USERID, + Modified DATETIME, + + CONSTRAINT PK_resources PRIMARY KEY (Id), + CONSTRAINT UQ_resources_ContainerName UNIQUE (Container, Name) +); + +CREATE TABLE extscheduler.Events +( + Id INT IDENTITY(1,1) NOT NULL, + ResourceId INT NOT NULL, + Name VARCHAR(255) NOT NULL, + StartDate DATETIME NOT NULL, + EndDate DATETIME NOT NULL, + UserId USERID NOT NULL, + + Container ENTITYID NOT NULL, + CreatedBy USERID, + Created DATETIME, + ModifiedBy USERID, + Modified DATETIME, + + CONSTRAINT PK_events PRIMARY KEY (Id), + CONSTRAINT FK_events_ResourceId FOREIGN KEY (ResourceId) REFERENCES extscheduler.resources(Id), + CONSTRAINT UQ_events_ContainerResourceName UNIQUE (Container, ResourceId, Name) +); + +/* 15.xxx SQL scripts */ + +ALTER TABLE extscheduler.Resources Add Room VARCHAR(255); +ALTER TABLE extscheduler.Resources Add Bldg VARCHAR (255); + + +ALTER TABLE extscheduler.Events ADD Alias VARCHAR(25); + +CREATE TABLE extscheduler.users +( + Id INT IDENTITY(1,1) NOT NULL, + PrimeUserID USERID NOT NULL, + FirstName VARCHAR(255) NOT NULL, + LastName Varchar(255) NOT NULL, + Email VARCHAR(255) NOT NULL, + Phone VARCHAR(255), + Department VARCHAR(255), + Lab_FirstName VARCHAR(255), + Lab_LastName VARCHAR(255), + FiscalAuthority_Name VARCHAR(255), + FiscalAuthority_Phone VARCHAR(255), + SecurityLevel VARCHAR(255), + Container ENTITYID NOT NULL, + CreatedBy USERID, + Created DATETIME, + ModifiedBy USERID, + Modified DATETIME, + + CONSTRAINT PK_users PRIMARY KEY (Id), + CONSTRAINT FK_users_PrimeUserID FOREIGN KEY (PrimeUserID) REFERENCES core.Usersdata(UserId), + CONSTRAINT UQ_users_ContainerPrimeUserID UNIQUE (Container, PrimeUserID) +); + +DROP TABLE extscheduler.users; + + +CREATE TABLE extscheduler.users +( + Id INT IDENTITY(1,1) NOT NULL, + PrimeUserID USERID NOT NULL, + FirstName VARCHAR(255) NOT NULL, + LastName Varchar(255) NOT NULL, + Email VARCHAR(255) NOT NULL, + Phone VARCHAR(255), + Department VARCHAR(255), + Lab_FirstName VARCHAR(255), + Lab_LastName VARCHAR(255), + FiscalAuthority_Name VARCHAR(255), + FiscalAuthority_Phone VARCHAR(255), + SecurityLevel VARCHAR(255), + Container ENTITYID NOT NULL, + CreatedBy USERID, + Created DATETIME, + ModifiedBy USERID, + Modified DATETIME, + + CONSTRAINT PK_users PRIMARY KEY (Id), + CONSTRAINT FK_users_PrimeUserID FOREIGN KEY (PrimeUserID) REFERENCES core.Usersdata(UserId), + CONSTRAINT UQ_users_ContainerPrimeUserID UNIQUE (Container, PrimeUserID) +); + +ALTER TABLE extscheduler.events DROP CONSTRAINT UQ_events_ContainerResourceName; +ALTER TABLE extscheduler.events ADD CONSTRAINT CHK_event_DateRangeValid CHECK (StartDate <= EndDate); + +GO + +CREATE TRIGGER TR_OverlappingDateRanges ON extscheduler.events FOR INSERT, UPDATE AS +BEGIN + IF EXISTS( + SELECT 1 FROM extscheduler.events R + INNER JOIN inserted I + ON ( + (R.Container = I.Container AND R.ResourceId = I.ResourceId AND R.StartDate < I.EndDate AND I.StartDate < R.EndDate) + AND NOT (R.Container = I.Container AND R.ResourceId = I.ResourceId AND R.StartDate = I.StartDate AND I.EndDate = R.EndDate) + ) + ) + BEGIN + RAISERROR('Start/End date ranges may not overlap for the same resource.', 16, 1) + ROLLBACK + END +END + +GO + +ALTER TABLE extscheduler.events ALTER COLUMN Name VARCHAR(255) NULL; + +DROP TABLE extscheduler.users; + +GO + +ALTER TRIGGER extscheduler.TR_OverlappingDateRanges ON extscheduler.Events FOR INSERT, UPDATE AS +BEGIN + IF EXISTS( + SELECT 1 FROM extscheduler.events R + INNER JOIN inserted I + ON ( + (R.Container = I.Container AND R.ResourceId = I.ResourceId AND R.StartDate < I.EndDate AND I.StartDate < R.EndDate) + AND NOT (R.Id = I.Id) + ) + ) + BEGIN + RAISERROR('Start/End date ranges may not overlap for the same resource.', 16, 1) + ROLLBACK + END +END + +GO + +ALTER TABLE extscheduler.Events ADD Quantity INT; + +ALTER TABLE extscheduler.Events ADD Comments VARCHAR(255); + +GO + +ALTER TRIGGER extscheduler.TR_OverlappingDateRanges ON extscheduler.Events FOR INSERT, UPDATE AS +BEGIN + IF EXISTS( + SELECT 1 FROM extscheduler.events R + LEFT JOIN ( + SELECT ObjectId, Value FROM prop.Properties + JOIN prop.PropertySets ON PropertySets."Set" = Properties."Set" + WHERE Name = 'ExtSchedulerAllowEventOverlap' + ) P ON R.Container = P.ObjectId + INNER JOIN inserted I + ON (P.Value IS NULL OR P.Value = 'false') AND ( + (R.Container = I.Container AND R.ResourceId = I.ResourceId AND R.StartDate < I.EndDate AND I.StartDate < R.EndDate) + AND NOT (R.Id = I.Id) + ) + ) + BEGIN + RAISERROR('Start/End date ranges may not overlap for the same resource.', 16, 1) + ROLLBACK + END +END + +GO + +/* 20.xxx SQL scripts */ + +/* +Created: 2020-05-07 +Created by jonesga +Purpose: Update of Comments field of scheduler per user request + +*/ +ALTER TABLE extscheduler.Events ALTER COLUMN Comments NVARCHAR(4000); + +/* +Created: 2020-05-07 +Created by jonesga +Purpose: Dataset to mimic DateRange from Labkey for SCheduler actionin SQL + +*/ +EXEC core.fn_dropifexists 'DateParts','extScheduler','TABLE'; +GO + +CREATE TABLE extScheduler.dateParts +(date datetime, +dateOnly datetime, +DayOfYear int, +DayofMonth int, +DayofWeek int, +DayName varchar(20), + +WeekofMonth int, +WeekofYear int, + Month int, + year int) + +Go + +Insert into extScheduler.DateParts + (Date, + dateonly, + DayOfYear, + DayofMonth, + DayofWeek, + DayName, + WeekofMonth, + WeekofYear, + Month, + year) +Select + + i.NDate, + CAST(i.Ndate as date) as dateOnly, + cast(datepart(dy,i.Ndate) as integer) as DayOfYear, + cast(datepart(dd,i.Ndate) as integer) as DayOfMonth, + cast(datepart(dw,i.Ndate) as integer) as DayOfWeek, + cast(dateName(dd,i.Ndate) as VarChar(20)) as DayName, + (cast(datepart(dd,i.Ndate) as integer)/ 7) as WeekofMonth, + cast(datepart(wk,i.Ndate) as integer) as WeekofYear, + cast(datepart(mm,i.Ndate) as integer) as Month, + cast(datepart(yyyy,i.Ndate) as integer) as Year +FROM (SELECT DateAdd(dd, i.value, '5/1/2020') as NDate FROM ldk.integers i)i +Where i.nDate <= '4/20/2021' + +-- ================================================ +-- Template generated from Template Explorer using: +-- Create Procedure (New Menu).SQL +-- +-- Use the Specify Values for Template Parameters +-- command (Ctrl-Shift-M) to fill in the parameter +-- values below. +-- +-- This block of comments will not be included in +-- the definition of the procedure. +-- ================================================ +-- ============================================= +-- Author: jonesga@ohsu.edu +-- Create date: 2020-05-13 +-- Description: PRocedure to Block out Scheduling for Covid19 testing for 3:30 to 7 PM on Monday and Friday +-- ============================================= +EXEC core.fn_dropifexists 'extBlockOutEvening', 'extscheduler', 'PROCEDURE' +GO + +CREATE PROCEDURE extscheduler.extBlockOutEvening + -- Add the parameters for the stored procedure here + @Month INTEGER, @ResourceID INTEGER +AS +BEGIN + + INSERT INTO [extscheduler].[Events] + ([ResourceId] + ,[Name] + ,[StartDate] + ,[EndDate] + ,[UserId] + ,[Container] + ,[CreatedBy] + ,[Created] + ,[Quantity] + ,[Comments]) + + SELECT @ResourceID + ,'No Covid-19 Testing' + ,DateAdd(hh,1530,c.date) as StartDate + ,DateAdd(hh,19,c.date) as EndDate + ,1003 + ,'5C3C9FF8-6BCF-1038-930A-7D62F3A605B4' + ,1003 + ,GetDate() + ,1 + ,'Insert by ISE' + FROM [Labkey].[extscheduler].[dateParts] c + where c.dayofWeek in (2,6) and c.Month = @Month +--Days of Week start with Sunday + + + +END +GO + +/****** Object: StoredProcedure [extscheduler].[extBlockOutMorning] Script Date: 5/13/2020 6:10:00 AM ******/ +-- ================================================ +-- Template generated from Template Explorer using: +-- Create Procedure (New Menu).SQL +-- +-- Use the Specify Values for Template Parameters +-- command (Ctrl-Shift-M) to fill in the parameter +-- values below. +-- +-- This block of comments will not be included in +-- the definition of the procedure. +-- ================================================ +-- ============================================= +-- Author: jonesga@ohsu.edu +-- Create date: 2020-05-13 +-- Description: PRocedure to Block out Scheduling for Covid19 testing for 7 to 8 on Monday and Friday +-- ============================================= +EXEC core.fn_dropifexists 'extBlockOutMorning', 'extscheduler', 'PROCEDURE' +GO + +CREATE PROCEDURE [extscheduler].[extBlockOutMorning] + -- Add the parameters for the stored procedure here + @Month INTEGER, @ResourceID INTEGER +AS +BEGIN + + INSERT INTO [extscheduler].[Events] + ([ResourceId] + ,[Name] + ,[StartDate] + ,[EndDate] + ,[UserId] + ,[Container] + ,[CreatedBy] + ,[Created] + ,[Quantity] + ,[Comments]) + + SELECT @ResourceID + ,'No Covid-19 Testing' + ,DateAdd(hh,7,c.date) as StartDate + ,DateAdd(hh,8,c.date) as EndDate + ,1003 + ,'5C3C9FF8-6BCF-1038-930A-7D62F3A605B4' + ,1003 + ,GetDate() + ,1 + ,'Insert by ISE' + FROM [Labkey].[extscheduler].[dateParts] c + where c.dayofWeek in (2,6) and c.Month = @Month +--Days of Week start with Sunday + +END + +GO + +-- /****** Object: StoredProcedure [extscheduler].[extBlockOutDays] Script Date: 5/13/2020 6:12:06 AM ******/ +-- ================================================ +-- Template generated from Template Explorer using: +-- Create Procedure (New Menu).SQL +-- +-- Use the Specify Values for Template Parameters +-- command (Ctrl-Shift-M) to fill in the parameter +-- values below. +-- +-- This block of comments will not be included in +-- the definition of the procedure. +-- ================================================ +-- ============================================= +-- Author: jonesga@ohsu.edu +-- Create date: 2020-05-13 +-- Description: PRocedure to Block out Scheduling for Covid19 testing for all days except Monday and Friday +-- ============================================= +EXEC core.fn_dropifexists 'extBlockOutDays', 'extscheduler', 'PROCEDURE' +GO + +CREATE PROCEDURE [extscheduler].[extBlockOutDays] + -- Add the parameters for the stored procedure here + @Month INTEGER, @ResourceID INTEGER +AS +BEGIN + + INSERT INTO [extscheduler].[Events] + ([ResourceId] + ,[Name] + ,[StartDate] + ,[EndDate] + ,[UserId] + ,[Container] + ,[CreatedBy] + ,[Created] + ,[Quantity] + ,[Comments]) + + SELECT @ResourceID + ,'No Covid-19 Testing' + ,DateAdd(hh,7,c.date) as StartDate + ,DateAdd(hh,19,c.date) as EndDate + ,1003 + ,'5C3C9FF8-6BCF-1038-930A-7D62F3A605B4' + ,1003 + ,GetDate() + ,1 + ,'Insert by ISE' + FROM [Labkey].[extscheduler].[dateParts] c + where c.dayofWeek in (1,3,4,5,7) and c.Month = @Month +--Days of Week start with Sunday + +END + +GO + +EXEC core.fn_dropifexists 'vw_Covid19Research', 'extScheduler', 'VIEW', NULL; +GO + +CREATE VIEW extScheduler.vw_Covid19Research AS +SELECT extscheduler.Events.Id AS SChedulerID, extscheduler.Events.ResourceId, extscheduler.Resources.Name AS ResourceName, extscheduler.Events.Name, extscheduler.Events.StartDate, extscheduler.Events.UserId, + extscheduler.Events.CreatedBy, extscheduler.Events.Created, extscheduler.Events.Quantity, core.UsersData.IM AS EmployeeID +FROM extscheduler.Events LEFT OUTER JOIN + core.UsersData ON extscheduler.Events.UserId = core.UsersData.UserId LEFT OUTER JOIN + extscheduler.Resources ON extscheduler.Events.ResourceId = extscheduler.Resources.Id +WHERE (extscheduler.Events.ResourceId = 67); + +GO + +EXEC core.fn_dropifexists 'vw_Covid19DCMSchedule', 'extScheduler', 'VIEW', NULL; +GO + +CREATE VIEW extScheduler.vw_Covid19DCMSchedule AS +SELECT extscheduler.Events.Id AS SChedulerID, extscheduler.Events.ResourceId, extscheduler.Resources.Name AS ResourceName, extscheduler.Events.Name, extscheduler.Events.StartDate, extscheduler.Events.UserId, + extscheduler.Events.CreatedBy, extscheduler.Events.Created, extscheduler.Events.Quantity, core.UsersData.IM AS EmployeeID + FROM extscheduler.Events LEFT OUTER JOIN + core.UsersData ON extscheduler.Events.UserId = core.UsersData.UserId LEFT OUTER JOIN + extscheduler.Resources ON extscheduler.Events.ResourceId = extscheduler.Resources.Id + WHERE (extscheduler.Resources.Name LIKE 'DCM%'); + +GO + +/****** Object: Table [list].[c10437d746_covid19testing] Script Date: 9/16/2020 9:19:28 AM ******/ +EXEC core.fn_dropifexists 'Covid19Testing', 'extScheduler', 'TABLE', NULL; +GO + +CREATE TABLE [extScheduler].[Covid19Testing]( + [container] [dbo].[ENTITYID] NOT NULL, + [entityId] [dbo].[ENTITYID] NOT NULL, + [lastIndexed] [datetime] NULL, + [createdBy] [int] NULL, + [modified] [datetime] NULL, + [modifiedBy] [int] NULL, + [created] [datetime] NULL, + [Key] [int] IDENTITY(1,1) NOT NULL, + [SchedulerID] [int] NULL, + [ResourceID] [int] NULL, + [UserName] [nvarchar](4000) NULL, + [UserID] [int] NULL, + [EmployeeID] [nvarchar](4000) NULL, + [ScheduledDate] [datetime] NULL, + [ScheduledTime] [datetime] NULL, + [Create] [datetime] NULL, + [SampleDate] [nvarchar](4000) NULL, + [CreatedB] [nvarchar](4000) NULL, + [ComplianceUpdated] [bit] NULL, + CONSTRAINT [covid19testing_pk] PRIMARY KEY CLUSTERED +( +[Key] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) ON [PRIMARY] + GO + +/****** Object: Table [list].[c10437d746_covid19testing] Script Date: 9/16/2020 9:19:28 AM ******/ +EXEC core.fn_dropifexists 'Covid19Testing', 'extScheduler', 'TABLE', NULL; +GO + +CREATE TABLE [extScheduler].[Covid19Testing]( + [container] [dbo].[ENTITYID] NOT NULL, + [entityId] [dbo].[ENTITYID] NOT NULL, + [lastIndexed] [datetime] NULL, + [createdBy] [int] NULL, + [modified] [datetime] NULL, + [modifiedBy] [int] NULL, + [created] [datetime] NULL, + [Key] [int] IDENTITY(1,1) NOT NULL, + [SchedulerID] [int] NULL, + [ResourceID] [int] NULL, + [UserName] [nvarchar](4000) NULL, + [UserID] [int] NULL, + [EmployeeID] [nvarchar](4000) NULL, + [ScheduledDate] [datetime] NULL, + [ScheduledTime] [datetime] NULL, + [Create] [datetime] NULL, + [SampleDate] [nvarchar](4000) NULL, + [CreatedB] [nvarchar](4000) NULL, + [ComplianceUpdated] [bit] NULL, + CONSTRAINT [covid19testingKey_pk] PRIMARY KEY CLUSTERED +( +[Key] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) ON [PRIMARY] + GO + +EXEC core.fn_dropifexists 'TempScheduler', 'extScheduler', 'TABLE', NULL; +GO + +CREATE TABLE [extscheduler].[TempScheduler]( + [Searchkey] [int] IDENTITY(100,1) NOT NULL, + [usernames] [varchar](500) NULL, + [EventId] [varchar](max) NULL, + [StartDate] [smalldatetime] NULL, + [created] [smalldatetime] NULL + ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] + GO + +EXEC core.fn_dropifexists 'TempCoV19Interim', 'extScheduler', 'TABLE', NULL; +GO + +/****** Object: Table [extscheduler].[TempScheduler] + ONCE TESTED CHAN GE TO labkey_public + Script Date: 10/29/2020 8:19:18 AM ******/ + +CREATE TABLE [extscheduler].[TempCoV19Interim]( + [EventId] [varchar](max) NULL, + [UserName] [nvarchar](1000) NULL, + [container] [varchar](max) NULL, + [notes] nvarchar(100) null + ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] + GO + +EXEC core.fn_dropifexists 'TempCoV19Interim', 'extScheduler', 'TABLE', NULL; +GO + +CREATE TABLE [extscheduler].[TempCoV19Interim]( + [EventId] [varchar](max) NULL, + [UserName] [nvarchar](1000) NULL, + [container] [varchar](max) NULL + ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] + GO + +EXEC core.fn_dropifexists 'TempCoV19Final', 'extScheduler', 'TABLE', NULL; + GO + +CREATE TABLE [extscheduler].[TempCoV19Final]( + [container] [uniqueidentifier] NOT NULL, + [UserName] [nvarchar](4000) NULL, + [UserID] [int] NULL, + [EventID] [int] NULL, + [StartDate] [smalldatetime] NULL, + [EmployeeID] [nvarchar](4000) NULL, + [Created] [smalldatetime] NULL + ) ON [PRIMARY] + GO + +/* 21.xxx SQL scripts */ + +ALTER TABLE extscheduler.Resources ADD Instance varchar(50); + +/* 23.xxx SQL scripts */ + +EXEC core.fn_dropifexists 'TempCoV19Final', 'extScheduler', 'TABLE', NULL; + GO +EXEC core.fn_dropifexists 'covid19testing', 'extScheduler', 'TABLE', NULL; +GO + +EXEC core.fn_dropifexists 'tempscheduler', 'extScheduler', 'TABLE', NULL; +GO + +EXEC core.fn_dropifexists 'TempCoV19Interim', 'extScheduler', 'TABLE', NULL; +GO + +EXEC core.fn_dropifexists 'vw_Covid19Research', 'extScheduler', 'VIEW', NULL; +GO + +EXEC core.fn_dropifexists 'vw_covid19dcmschedule', 'extScheduler', 'VIEW', NULL; +GO + +EXEC core.fn_dropifexists 'vw_Covid19DCMDaily', 'extScheduler', 'VIEW', NULL; +GO \ No newline at end of file diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.20-15.21.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.20-15.21.sql deleted file mode 100644 index a42290b84..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.20-15.21.sql +++ /dev/null @@ -1,38 +0,0 @@ -CREATE SCHEMA extscheduler; -GO - -CREATE TABLE extscheduler.Resources -( - Id INT IDENTITY(1,1) NOT NULL, - Name VARCHAR(255) NOT NULL, - Color VARCHAR(20), - - Container ENTITYID NOT NULL, - CreatedBy USERID, - Created DATETIME, - ModifiedBy USERID, - Modified DATETIME, - - CONSTRAINT PK_resources PRIMARY KEY (Id), - CONSTRAINT UQ_resources_ContainerName UNIQUE (Container, Name) -); - -CREATE TABLE extscheduler.Events -( - Id INT IDENTITY(1,1) NOT NULL, - ResourceId INT NOT NULL, - Name VARCHAR(255) NOT NULL, - StartDate DATETIME NOT NULL, - EndDate DATETIME NOT NULL, - UserId USERID NOT NULL, - - Container ENTITYID NOT NULL, - CreatedBy USERID, - Created DATETIME, - ModifiedBy USERID, - Modified DATETIME, - - CONSTRAINT PK_events PRIMARY KEY (Id), - CONSTRAINT FK_events_ResourceId FOREIGN KEY (ResourceId) REFERENCES extscheduler.resources(Id), - CONSTRAINT UQ_events_ContainerResourceName UNIQUE (Container, ResourceId, Name) -); \ No newline at end of file diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.21-15.22.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.21-15.22.sql deleted file mode 100644 index 201d67257..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.21-15.22.sql +++ /dev/null @@ -1,6 +0,0 @@ - -ALTER TABLE extscheduler.Resources Add Room VARCHAR(255); -ALTER TABLE extscheduler.Resources Add Bldg VARCHAR (255); - - -ALTER TABLE extscheduler.Events ADD Alias VARCHAR(25); \ No newline at end of file diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.22-15.23.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.22-15.23.sql deleted file mode 100644 index bdcdf797b..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.22-15.23.sql +++ /dev/null @@ -1,24 +0,0 @@ -CREATE TABLE extscheduler.users -( - Id INT IDENTITY(1,1) NOT NULL, - PrimeUserID USERID NOT NULL, - FirstName VARCHAR(255) NOT NULL, - LastName Varchar(255) NOT NULL, - Email VARCHAR(255) NOT NULL, - Phone VARCHAR(255), - Department VARCHAR(255), - Lab_FirstName VARCHAR(255), - Lab_LastName VARCHAR(255), - FiscalAuthority_Name VARCHAR(255), - FiscalAuthority_Phone VARCHAR(255), - SecurityLevel VARCHAR(255), - Container ENTITYID NOT NULL, - CreatedBy USERID, - Created DATETIME, - ModifiedBy USERID, - Modified DATETIME, - - CONSTRAINT PK_users PRIMARY KEY (Id), - CONSTRAINT FK_users_PrimeUserID FOREIGN KEY (PrimeUserID) REFERENCES core.Usersdata(UserId), - CONSTRAINT UQ_users_ContainerPrimeUserID UNIQUE (Container, PrimeUserID) -); diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.23-15.24.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.23-15.24.sql deleted file mode 100644 index 37b9da6a9..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.23-15.24.sql +++ /dev/null @@ -1,27 +0,0 @@ -DROP TABLE extscheduler.users; - - -CREATE TABLE extscheduler.users -( - Id INT IDENTITY(1,1) NOT NULL, - PrimeUserID USERID NOT NULL, - FirstName VARCHAR(255) NOT NULL, - LastName Varchar(255) NOT NULL, - Email VARCHAR(255) NOT NULL, - Phone VARCHAR(255), - Department VARCHAR(255), - Lab_FirstName VARCHAR(255), - Lab_LastName VARCHAR(255), - FiscalAuthority_Name VARCHAR(255), - FiscalAuthority_Phone VARCHAR(255), - SecurityLevel VARCHAR(255), - Container ENTITYID NOT NULL, - CreatedBy USERID, - Created DATETIME, - ModifiedBy USERID, - Modified DATETIME, - - CONSTRAINT PK_users PRIMARY KEY (Id), - CONSTRAINT FK_users_PrimeUserID FOREIGN KEY (PrimeUserID) REFERENCES core.Usersdata(UserId), - CONSTRAINT UQ_users_ContainerPrimeUserID UNIQUE (Container, PrimeUserID) -); diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.24-15.25.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.24-15.25.sql deleted file mode 100644 index 697272a9a..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.24-15.25.sql +++ /dev/null @@ -1,20 +0,0 @@ -ALTER TABLE extscheduler.events DROP CONSTRAINT UQ_events_ContainerResourceName; -ALTER TABLE extscheduler.events ADD CONSTRAINT CHK_event_DateRangeValid CHECK (StartDate <= EndDate); - -GO - -CREATE TRIGGER TR_OverlappingDateRanges ON extscheduler.events FOR INSERT, UPDATE AS -BEGIN - IF EXISTS( - SELECT 1 FROM extscheduler.events R - INNER JOIN inserted I - ON ( - (R.Container = I.Container AND R.ResourceId = I.ResourceId AND R.StartDate < I.EndDate AND I.StartDate < R.EndDate) - AND NOT (R.Container = I.Container AND R.ResourceId = I.ResourceId AND R.StartDate = I.StartDate AND I.EndDate = R.EndDate) - ) - ) - BEGIN - RAISERROR('Start/End date ranges may not overlap for the same resource.', 16, 1) - ROLLBACK - END -END \ No newline at end of file diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.25-15.26.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.25-15.26.sql deleted file mode 100644 index 678dc8f41..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.25-15.26.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE extscheduler.events ALTER COLUMN Name VARCHAR(255) NULL; diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.26-15.27.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.26-15.27.sql deleted file mode 100644 index a15bb70fe..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.26-15.27.sql +++ /dev/null @@ -1,2 +0,0 @@ - -DROP TABLE extscheduler.users; \ No newline at end of file diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.27-15.28.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.27-15.28.sql deleted file mode 100644 index 8a4027489..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.27-15.28.sql +++ /dev/null @@ -1,16 +0,0 @@ - -ALTER TRIGGER extscheduler.TR_OverlappingDateRanges ON extscheduler.Events FOR INSERT, UPDATE AS -BEGIN - IF EXISTS( - SELECT 1 FROM extscheduler.events R - INNER JOIN inserted I - ON ( - (R.Container = I.Container AND R.ResourceId = I.ResourceId AND R.StartDate < I.EndDate AND I.StartDate < R.EndDate) - AND NOT (R.Id = I.Id) - ) - ) - BEGIN - RAISERROR('Start/End date ranges may not overlap for the same resource.', 16, 1) - ROLLBACK - END -END \ No newline at end of file diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.28-15.29.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.28-15.29.sql deleted file mode 100644 index 4ae71d86e..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.28-15.29.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE extscheduler.Events ADD Quantity INT; \ No newline at end of file diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.29-15.30.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.29-15.30.sql deleted file mode 100644 index 6fc9496ad..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.29-15.30.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE extscheduler.Events ADD Comments VARCHAR(255); \ No newline at end of file diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.30-15.31.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.30-15.31.sql deleted file mode 100644 index 048fef129..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.30-15.31.sql +++ /dev/null @@ -1,21 +0,0 @@ - -ALTER TRIGGER extscheduler.TR_OverlappingDateRanges ON extscheduler.Events FOR INSERT, UPDATE AS -BEGIN - IF EXISTS( - SELECT 1 FROM extscheduler.events R - LEFT JOIN ( - SELECT ObjectId, Value FROM prop.Properties - JOIN prop.PropertySets ON PropertySets."Set" = Properties."Set" - WHERE Name = 'ExtSchedulerAllowEventOverlap' - ) P ON R.Container = P.ObjectId - INNER JOIN inserted I - ON (P.Value IS NULL OR P.Value = 'false') AND ( - (R.Container = I.Container AND R.ResourceId = I.ResourceId AND R.StartDate < I.EndDate AND I.StartDate < R.EndDate) - AND NOT (R.Id = I.Id) - ) - ) - BEGIN - RAISERROR('Start/End date ranges may not overlap for the same resource.', 16, 1) - ROLLBACK - END -END \ No newline at end of file diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.02-20.03.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.02-20.03.sql deleted file mode 100644 index ae7232d34..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.02-20.03.sql +++ /dev/null @@ -1,7 +0,0 @@ -/* -Created: 2020-05-07 -Created by jonesga -Purpose: Update of Comments field of scheduler per user request - -*/ -ALTER TABLE extscheduler.Events ALTER COLUMN Comments NVARCHAR(4000); \ No newline at end of file diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.502-20.503.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.502-20.503.sql deleted file mode 100644 index 7ca6608b7..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.502-20.503.sql +++ /dev/null @@ -1,49 +0,0 @@ -/* -Created: 2020-05-07 -Created by jonesga -Purpose: Dataset to mimic DateRange from Labkey for SCheduler actionin SQL - -*/ -EXEC core.fn_dropifexists 'DateParts','extScheduler','TABLE'; -GO - -CREATE TABLE extScheduler.dateParts -(date datetime, -dateOnly datetime, -DayOfYear int, -DayofMonth int, -DayofWeek int, -DayName varchar(20), - -WeekofMonth int, -WeekofYear int, - Month int, - year int) - -Go - -Insert into extScheduler.DateParts - (Date, - dateonly, - DayOfYear, - DayofMonth, - DayofWeek, - DayName, - WeekofMonth, - WeekofYear, - Month, - year) -Select - - i.NDate, - CAST(i.Ndate as date) as dateOnly, - cast(datepart(dy,i.Ndate) as integer) as DayOfYear, - cast(datepart(dd,i.Ndate) as integer) as DayOfMonth, - cast(datepart(dw,i.Ndate) as integer) as DayOfWeek, - cast(dateName(dd,i.Ndate) as VarChar(20)) as DayName, - (cast(datepart(dd,i.Ndate) as integer)/ 7) as WeekofMonth, - cast(datepart(wk,i.Ndate) as integer) as WeekofYear, - cast(datepart(mm,i.Ndate) as integer) as Month, - cast(datepart(yyyy,i.Ndate) as integer) as Year -FROM (SELECT DateAdd(dd, i.value, '5/1/2020') as NDate FROM ldk.integers i)i -Where i.nDate <= '4/20/2021' \ No newline at end of file diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.503-20.504.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.503-20.504.sql deleted file mode 100644 index b6b61df4e..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.503-20.504.sql +++ /dev/null @@ -1,55 +0,0 @@ --- ================================================ --- Template generated from Template Explorer using: --- Create Procedure (New Menu).SQL --- --- Use the Specify Values for Template Parameters --- command (Ctrl-Shift-M) to fill in the parameter --- values below. --- --- This block of comments will not be included in --- the definition of the procedure. --- ================================================ --- ============================================= --- Author: jonesga@ohsu.edu --- Create date: 2020-05-13 --- Description: PRocedure to Block out Scheduling for Covid19 testing for 3:30 to 7 PM on Monday and Friday --- ============================================= -EXEC core.fn_dropifexists 'extBlockOutEvening', 'extscheduler', 'PROCEDURE' -GO - -CREATE PROCEDURE extscheduler.extBlockOutEvening - -- Add the parameters for the stored procedure here - @Month INTEGER, @ResourceID INTEGER -AS -BEGIN - - INSERT INTO [extscheduler].[Events] - ([ResourceId] - ,[Name] - ,[StartDate] - ,[EndDate] - ,[UserId] - ,[Container] - ,[CreatedBy] - ,[Created] - ,[Quantity] - ,[Comments]) - - SELECT @ResourceID - ,'No Covid-19 Testing' - ,DateAdd(hh,1530,c.date) as StartDate - ,DateAdd(hh,19,c.date) as EndDate - ,1003 - ,'5C3C9FF8-6BCF-1038-930A-7D62F3A605B4' - ,1003 - ,GetDate() - ,1 - ,'Insert by ISE' - FROM [Labkey].[extscheduler].[dateParts] c - where c.dayofWeek in (2,6) and c.Month = @Month ---Days of Week start with Sunday - - - -END -GO diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.504-20.505.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.504-20.505.sql deleted file mode 100644 index b6de4bbeb..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.504-20.505.sql +++ /dev/null @@ -1,55 +0,0 @@ -/****** Object: StoredProcedure [extscheduler].[extBlockOutMorning] Script Date: 5/13/2020 6:10:00 AM ******/ --- ================================================ --- Template generated from Template Explorer using: --- Create Procedure (New Menu).SQL --- --- Use the Specify Values for Template Parameters --- command (Ctrl-Shift-M) to fill in the parameter --- values below. --- --- This block of comments will not be included in --- the definition of the procedure. --- ================================================ --- ============================================= --- Author: jonesga@ohsu.edu --- Create date: 2020-05-13 --- Description: PRocedure to Block out Scheduling for Covid19 testing for 7 to 8 on Monday and Friday --- ============================================= -EXEC core.fn_dropifexists 'extBlockOutMorning', 'extscheduler', 'PROCEDURE' -GO - -CREATE PROCEDURE [extscheduler].[extBlockOutMorning] - -- Add the parameters for the stored procedure here - @Month INTEGER, @ResourceID INTEGER -AS -BEGIN - - INSERT INTO [extscheduler].[Events] - ([ResourceId] - ,[Name] - ,[StartDate] - ,[EndDate] - ,[UserId] - ,[Container] - ,[CreatedBy] - ,[Created] - ,[Quantity] - ,[Comments]) - - SELECT @ResourceID - ,'No Covid-19 Testing' - ,DateAdd(hh,7,c.date) as StartDate - ,DateAdd(hh,8,c.date) as EndDate - ,1003 - ,'5C3C9FF8-6BCF-1038-930A-7D62F3A605B4' - ,1003 - ,GetDate() - ,1 - ,'Insert by ISE' - FROM [Labkey].[extscheduler].[dateParts] c - where c.dayofWeek in (2,6) and c.Month = @Month ---Days of Week start with Sunday - -END - -GO diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.505-20.506.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.505-20.506.sql deleted file mode 100644 index 8ba6347df..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.505-20.506.sql +++ /dev/null @@ -1,55 +0,0 @@ --- /****** Object: StoredProcedure [extscheduler].[extBlockOutDays] Script Date: 5/13/2020 6:12:06 AM ******/ --- ================================================ --- Template generated from Template Explorer using: --- Create Procedure (New Menu).SQL --- --- Use the Specify Values for Template Parameters --- command (Ctrl-Shift-M) to fill in the parameter --- values below. --- --- This block of comments will not be included in --- the definition of the procedure. --- ================================================ --- ============================================= --- Author: jonesga@ohsu.edu --- Create date: 2020-05-13 --- Description: PRocedure to Block out Scheduling for Covid19 testing for all days except Monday and Friday --- ============================================= -EXEC core.fn_dropifexists 'extBlockOutDays', 'extscheduler', 'PROCEDURE' -GO - -CREATE PROCEDURE [extscheduler].[extBlockOutDays] - -- Add the parameters for the stored procedure here - @Month INTEGER, @ResourceID INTEGER -AS -BEGIN - - INSERT INTO [extscheduler].[Events] - ([ResourceId] - ,[Name] - ,[StartDate] - ,[EndDate] - ,[UserId] - ,[Container] - ,[CreatedBy] - ,[Created] - ,[Quantity] - ,[Comments]) - - SELECT @ResourceID - ,'No Covid-19 Testing' - ,DateAdd(hh,7,c.date) as StartDate - ,DateAdd(hh,19,c.date) as EndDate - ,1003 - ,'5C3C9FF8-6BCF-1038-930A-7D62F3A605B4' - ,1003 - ,GetDate() - ,1 - ,'Insert by ISE' - FROM [Labkey].[extscheduler].[dateParts] c - where c.dayofWeek in (1,3,4,5,7) and c.Month = @Month ---Days of Week start with Sunday - -END - -GO diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.601-20.602.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.601-20.602.sql deleted file mode 100644 index 91cf20033..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.601-20.602.sql +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright (c) 2003-2005 Fred Hutchinson Cancer Research Center - * - * 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. - * Created 2020-06-09 - * Created by jonesga - * Purpose - View joining Scheduler Resources, Events and the User Data - */ -EXEC core.fn_dropifexists 'vw_Covid19Research', 'extScheduler', 'VIEW', NULL; -GO - -CREATE VIEW extScheduler.vw_Covid19Research AS -SELECT extscheduler.Events.Id AS SChedulerID, extscheduler.Events.ResourceId, extscheduler.Resources.Name AS ResourceName, extscheduler.Events.Name, extscheduler.Events.StartDate, extscheduler.Events.UserId, - extscheduler.Events.CreatedBy, extscheduler.Events.Created, extscheduler.Events.Quantity, core.UsersData.IM AS EmployeeID -FROM extscheduler.Events LEFT OUTER JOIN - core.UsersData ON extscheduler.Events.UserId = core.UsersData.UserId LEFT OUTER JOIN - extscheduler.Resources ON extscheduler.Events.ResourceId = extscheduler.Resources.Id -WHERE (extscheduler.Events.ResourceId = 67) diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.602-20.603.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.602-20.603.sql deleted file mode 100644 index 85ef48351..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.602-20.603.sql +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright (c) 2003-2005 Fred Hutchinson Cancer Research Center - * - * 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. - * Created 2020-06-09 - * Created by jonesga - * Purpose - View joining Scheduler Resources, Events and the User Data - */ -EXEC core.fn_dropifexists 'vw_Covid19DCMSchedule', 'extScheduler', 'VIEW', NULL; -GO - -CREATE VIEW extScheduler.vw_Covid19DCMSchedule AS -SELECT extscheduler.Events.Id AS SChedulerID, extscheduler.Events.ResourceId, extscheduler.Resources.Name AS ResourceName, extscheduler.Events.Name, extscheduler.Events.StartDate, extscheduler.Events.UserId, - extscheduler.Events.CreatedBy, extscheduler.Events.Created, extscheduler.Events.Quantity, core.UsersData.IM AS EmployeeID - FROM extscheduler.Events LEFT OUTER JOIN - core.UsersData ON extscheduler.Events.UserId = core.UsersData.UserId LEFT OUTER JOIN - extscheduler.Resources ON extscheduler.Events.ResourceId = extscheduler.Resources.Id - WHERE (extscheduler.Resources.Name LIKE 'DCM%') diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.901-20.902.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.901-20.902.sql deleted file mode 100644 index 9f118c9d4..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.901-20.902.sql +++ /dev/null @@ -1,32 +0,0 @@ - -/****** Object: Table [list].[c10437d746_covid19testing] Script Date: 9/16/2020 9:19:28 AM ******/ -EXEC core.fn_dropifexists 'Covid19Testing', 'extScheduler', 'TABLE', NULL; -GO - -CREATE TABLE [extScheduler].[Covid19Testing]( - [container] [dbo].[ENTITYID] NOT NULL, - [entityId] [dbo].[ENTITYID] NOT NULL, - [lastIndexed] [datetime] NULL, - [createdBy] [int] NULL, - [modified] [datetime] NULL, - [modifiedBy] [int] NULL, - [created] [datetime] NULL, - [Key] [int] IDENTITY(1,1) NOT NULL, - [SchedulerID] [int] NULL, - [ResourceID] [int] NULL, - [UserName] [nvarchar](4000) NULL, - [UserID] [int] NULL, - [EmployeeID] [nvarchar](4000) NULL, - [ScheduledDate] [datetime] NULL, - [ScheduledTime] [datetime] NULL, - [Create] [datetime] NULL, - [SampleDate] [nvarchar](4000) NULL, - [CreatedB] [nvarchar](4000) NULL, - [ComplianceUpdated] [bit] NULL, - CONSTRAINT [covid19testing_pk] PRIMARY KEY CLUSTERED -( -[Key] ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] - ) ON [PRIMARY] - GO - diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.903-20.904.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.903-20.904.sql deleted file mode 100644 index c648c48f1..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.903-20.904.sql +++ /dev/null @@ -1,32 +0,0 @@ - -/****** Object: Table [list].[c10437d746_covid19testing] Script Date: 9/16/2020 9:19:28 AM ******/ -EXEC core.fn_dropifexists 'Covid19Testing', 'extScheduler', 'TABLE', NULL; -GO - -CREATE TABLE [extScheduler].[Covid19Testing]( - [container] [dbo].[ENTITYID] NOT NULL, - [entityId] [dbo].[ENTITYID] NOT NULL, - [lastIndexed] [datetime] NULL, - [createdBy] [int] NULL, - [modified] [datetime] NULL, - [modifiedBy] [int] NULL, - [created] [datetime] NULL, - [Key] [int] IDENTITY(1,1) NOT NULL, - [SchedulerID] [int] NULL, - [ResourceID] [int] NULL, - [UserName] [nvarchar](4000) NULL, - [UserID] [int] NULL, - [EmployeeID] [nvarchar](4000) NULL, - [ScheduledDate] [datetime] NULL, - [ScheduledTime] [datetime] NULL, - [Create] [datetime] NULL, - [SampleDate] [nvarchar](4000) NULL, - [CreatedB] [nvarchar](4000) NULL, - [ComplianceUpdated] [bit] NULL, - CONSTRAINT [covid19testingKey_pk] PRIMARY KEY CLUSTERED -( -[Key] ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] - ) ON [PRIMARY] - GO - diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.910-20.911.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.910-20.911.sql deleted file mode 100644 index 00cfdeb80..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.910-20.911.sql +++ /dev/null @@ -1,11 +0,0 @@ -EXEC core.fn_dropifexists 'TempScheduler', 'extScheduler', 'TABLE', NULL; -GO - -CREATE TABLE [extscheduler].[TempScheduler]( - [Searchkey] [int] IDENTITY(100,1) NOT NULL, - [usernames] [varchar](500) NULL, - [EventId] [varchar](max) NULL, - [StartDate] [smalldatetime] NULL, - [created] [smalldatetime] NULL - ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] - GO diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.911-20.912.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.911-20.912.sql deleted file mode 100644 index 0f9f2a570..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.911-20.912.sql +++ /dev/null @@ -1,14 +0,0 @@ -EXEC core.fn_dropifexists 'TempCoV19Interim', 'extScheduler', 'TABLE', NULL; -GO - -/****** Object: Table [extscheduler].[TempScheduler] - ONCE TESTED CHAN GE TO labkey_public - Script Date: 10/29/2020 8:19:18 AM ******/ - -CREATE TABLE [extscheduler].[TempCoV19Interim]( - [EventId] [varchar](max) NULL, - [UserName] [nvarchar](1000) NULL, - [container] [varchar](max) NULL, - [notes] nvarchar(100) null - ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] - GO diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.922-20.923.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.922-20.923.sql deleted file mode 100644 index f892cd5b4..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.922-20.923.sql +++ /dev/null @@ -1,9 +0,0 @@ -EXEC core.fn_dropifexists 'TempCoV19Interim', 'extScheduler', 'TABLE', NULL; -GO - -CREATE TABLE [extscheduler].[TempCoV19Interim]( - [EventId] [varchar](max) NULL, - [UserName] [nvarchar](1000) NULL, - [container] [varchar](max) NULL - ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] - GO diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.936-20.937.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.936-20.937.sql deleted file mode 100644 index adf2cc97a..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.936-20.937.sql +++ /dev/null @@ -1,13 +0,0 @@ -EXEC core.fn_dropifexists 'TempCoV19Final', 'extScheduler', 'TABLE', NULL; - GO - -CREATE TABLE [extscheduler].[TempCoV19Final]( - [container] [uniqueidentifier] NOT NULL, - [UserName] [nvarchar](4000) NULL, - [UserID] [int] NULL, - [EventID] [int] NULL, - [StartDate] [smalldatetime] NULL, - [EmployeeID] [nvarchar](4000) NULL, - [Created] [smalldatetime] NULL - ) ON [PRIMARY] - GO diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-21.001-21.002.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-21.001-21.002.sql deleted file mode 100644 index ffc8359a2..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-21.001-21.002.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE extscheduler.Resources ADD Instance varchar(50); \ No newline at end of file diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-23.001-23.002.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-23.001-23.002.sql deleted file mode 100644 index 67387b57f..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-23.001-23.002.sql +++ /dev/null @@ -1,19 +0,0 @@ -EXEC core.fn_dropifexists 'TempCoV19Final', 'extScheduler', 'TABLE', NULL; - GO -EXEC core.fn_dropifexists 'covid19testing', 'extScheduler', 'TABLE', NULL; -GO - -EXEC core.fn_dropifexists 'tempscheduler', 'extScheduler', 'TABLE', NULL; -GO - -EXEC core.fn_dropifexists 'TempCoV19Interim', 'extScheduler', 'TABLE', NULL; -GO - -EXEC core.fn_dropifexists 'vw_Covid19Research', 'extScheduler', 'VIEW', NULL; -GO - -EXEC core.fn_dropifexists 'vw_covid19dcmschedule', 'extScheduler', 'VIEW', NULL; -GO - -EXEC core.fn_dropifexists 'vw_Covid19DCMDaily', 'extScheduler', 'VIEW', NULL; -GO diff --git a/extscheduler/src/org/labkey/extscheduler/ExtSchedulerModule.java b/extscheduler/src/org/labkey/extscheduler/ExtSchedulerModule.java index be8aa0d4f..db2e52c9d 100644 --- a/extscheduler/src/org/labkey/extscheduler/ExtSchedulerModule.java +++ b/extscheduler/src/org/labkey/extscheduler/ExtSchedulerModule.java @@ -27,13 +27,13 @@ public String getName() @Override public @Nullable Double getSchemaVersion() { - return 23.002; + return 26.000; } @Override - public boolean hasScripts() + public double getEarliestUpgradeVersion() { - return true; + return 23.002; } @Override From db7c2addc1b1776164e991145f5f54004143798a Mon Sep 17 00:00:00 2001 From: Adam Rauch Date: Fri, 21 Aug 2026 16:57:21 -0700 Subject: [PATCH 07/12] Migrate extscheduler and onprc_ehr_compliancedb scripts to PostgreSQL --- .../onprc_ehr_compliancedb-0.000-25.000.sql | 959 ++++++++++++++++++ .../onprc_ehr_compliancedb-25.000-25.001.sql | 618 +++++++++++ .../postgresql/extscheduler-0.000-25.000.sql | 465 +++++++++ 3 files changed, 2042 insertions(+) create mode 100644 ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/postgresql/onprc_ehr_compliancedb-0.000-25.000.sql create mode 100644 ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/postgresql/onprc_ehr_compliancedb-25.000-25.001.sql create mode 100644 extscheduler/resources/schemas/dbscripts/postgresql/extscheduler-0.000-25.000.sql diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/postgresql/onprc_ehr_compliancedb-0.000-25.000.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/postgresql/onprc_ehr_compliancedb-0.000-25.000.sql new file mode 100644 index 000000000..bcf38c5be --- /dev/null +++ b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/postgresql/onprc_ehr_compliancedb-0.000-25.000.sql @@ -0,0 +1,959 @@ +CREATE SCHEMA IF NOT EXISTS onprc_ehr_compliancedb; + +CREATE TABLE onprc_ehr_compliancedb.SciShield_Data +( + RowId SERIAL NOT NULL, + employeeId VARCHAR(255) NOT NULL, + requirementname VARCHAR(255) NULL, + Date TIMESTAMP NULL, + Container ENTITYID NOT NULL, + comment VARCHAR(2000) NULL, + CreatedBy USERID, + Created TIMESTAMP, + ModifiedBy USERID, + Modified TIMESTAMP, + processed INT NULL, + + CONSTRAINT PK_ScieShield_Data PRIMARY KEY (RowId), + CONSTRAINT FK_ONPRC_EHR_COMPLIANCE_SCISHIELD_DATA_CONTAINER FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) +); +CREATE INDEX IX_ONPRC_EHR_COMPLIANCEDB_SCISHIELD_DATA_CONTAINER ON onprc_ehr_compliancedb.SciShield_Data (Container); + +CREATE TABLE onprc_ehr_compliancedb.SciShield_Reference_Data +( + rowId SERIAL NOT NULL, + label VARCHAR(250) NULL, + value VARCHAR(255) NOT NULL, + columnName VARCHAR(255) NOT NULL, + sort_order INTEGER NULL, + endDate TIMESTAMP NULL, + Container ENTITYID NOT NULL, + CreatedBy USERID, + Created TIMESTAMP, + ModifiedBy USERID, + Modified TIMESTAMP, + + CONSTRAINT pk_SciShield_reference PRIMARY KEY (value), + CONSTRAINT FK_ONPRC_EHR_COMPLIANCE_REFERENCE_DATA_CONTAINER FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) +); +CREATE INDEX IX_ONPRC_EHR_COMPLIANCEDB_SCISHIELD_REFERENCE_DATA_CONTAINER ON onprc_ehr_compliancedb.SciShield_Reference_Data (Container); + +/* 24.xxx SQL scripts */ + +-- Author: R. Blasa +-- Created: 2-10-2024 +-- Description: Stored procedure program process SciShield Initial Data + +CREATE TABLE onprc_ehr_compliancedb.SciShieldTemp ( + searchID INT GENERATED BY DEFAULT AS IDENTITY (START WITH 100 INCREMENT BY 1) NOT NULL, + employeeid VARCHAR(500) NULL, + requirementname VARCHAR(3000) NULL, + completeddate TIMESTAMP NULL, + comment VARCHAR(300) NULL, + createddate TIMESTAMP NULL, + rowid INT NULL +); + +CREATE TABLE onprc_ehr_compliancedb.SciShieldMasterTemp ( + searchID INT GENERATED BY DEFAULT AS IDENTITY (START WITH 100 INCREMENT BY 1) NOT NULL, + employeeid VARCHAR(500) NULL, + requirementname VARCHAR(3000) NULL, + completeddate TIMESTAMP NULL, + comment VARCHAR(300) NULL, + createddate TIMESTAMP NULL, + rowid INT NULL +); + +-- Author: R. Blasa +-- Created: 2-10-2024 + +/* +** +** Created by +** Blasa 1-25-2024 Import process from ScieShield To Prime Compliance Module +** +** Processed codes: Null ---Not Processed +** 1 ------ Successfully posted +** 2 --------- invalid Employeeid +** 3 --------- Undefined Requirement Name +** 4--------- Already exists Compliance module +** +** +** +*/ + +CREATE OR REPLACE FUNCTION onprc_ehr_compliancedb.p_SciShieldToPrimeProcess() +RETURNS integer AS $$ +DECLARE + _requirementnameFinal VARCHAR(2000); + _requirementname VARCHAR(2000); + _employeeid VARCHAR(500); + _Completiondate TIMESTAMP; + _SciShieldID INT; + rec RECORD; +BEGIN + ---- Reset temp table + DELETE FROM onprc_ehr_compliancedb.SciShieldTemp; + + IF EXISTS (SELECT 1 FROM onprc_ehr_compliancedb.SciShield_Data WHERE processed IS NULL) THEN + INSERT INTO onprc_ehr_compliancedb.SciShieldTemp + (employeeid, requirementname, completeddate, createddate, rowid) + SELECT + employeeid, + requirementname, + date, + now(), + rowid + FROM onprc_ehr_compliancedb.SciShield_Data + WHERE processed IS NULL + ORDER BY employeeid, requirementname, date DESC; + ELSE + RETURN 0; + END IF; + + FOR rec IN + SELECT searchID, employeeid, requirementname, completeddate, rowid + FROM onprc_ehr_compliancedb.SciShieldTemp + ORDER BY searchID + LOOP + _requirementnameFinal := ''; + _requirementname := COALESCE(rec.requirementname, ''); + _employeeid := TRIM(LOWER(COALESCE(rec.employeeid, ''))); + _Completiondate := rec.completeddate; + _SciShieldID := rec.rowid; + + -- Validate requirementname + IF EXISTS (SELECT 1 FROM onprc_ehr_compliancedb.SciShield_Reference_Data WHERE label = _requirementname AND columnname = 'requirementname') THEN + SELECT value INTO _requirementnameFinal + FROM onprc_ehr_compliancedb.SciShield_Reference_Data + WHERE label = _requirementname AND columnname = 'requirementname' + LIMIT 1; + ELSIF EXISTS (SELECT 1 FROM ehr_compliancedb.requirements WHERE requirementname = _requirementname) THEN + SELECT requirementname INTO _requirementnameFinal + FROM ehr_compliancedb.requirements + WHERE requirementname = _requirementname + LIMIT 1; + ELSE + UPDATE onprc_ehr_compliancedb.SciShield_Data ss + SET processed = 3 + WHERE ss.rowid = _SciShieldID; + + CONTINUE; + END IF; + + -- Validate if the record already exists + IF EXISTS (SELECT 1 FROM ehr_compliancedb.completiondates WHERE employeeid = _employeeid AND requirementname = _requirementnameFinal AND date = _Completiondate) THEN + UPDATE onprc_ehr_compliancedb.SciShield_Data ss + SET processed = 4 + WHERE ss.rowid = _SciShieldID; + + CONTINUE; + END IF; + + -- Validate if the employeeid is defined + IF NOT EXISTS (SELECT 1 FROM ehr_compliancedb.employees WHERE employeeid = _employeeid AND enddate IS NULL) THEN + UPDATE onprc_ehr_compliancedb.SciShield_Data ss + SET processed = 2 + WHERE ss.rowid = _SciShieldID; + + CONTINUE; + END IF; + + -- If all previous version were validated proceed with the record insert + IF NOT EXISTS (SELECT 1 FROM ehr_compliancedb.completiondates WHERE employeeid = _employeeid AND requirementname = _requirementnameFinal AND date = _Completiondate) THEN + INSERT INTO ehr_compliancedb.completiondates + (employeeid, requirementname, date, trainer, container, created, createdby, modified, modifiedby) + VALUES + (_employeeid, _requirementnameFinal, _Completiondate, 'ONLINE TRAINING', 'CD170458-C55F-102F-9907-5107380A54BE', now(), 2595, now(), 2595); + + UPDATE onprc_ehr_compliancedb.SciShield_Data ss + SET processed = 1 + WHERE ss.rowid = _SciShieldID; + END IF; + END LOOP; + + -- Create master records of the last most recent entries + IF EXISTS (SELECT 1 FROM onprc_ehr_compliancedb.SciShieldTemp) THEN + INSERT INTO onprc_ehr_compliancedb.SciShieldMasterTemp + (employeeid, requirementname, completeddate, comment, createddate, rowid) + SELECT + employeeid, + requirementname, + completeddate, + comment, + createddate, + rowid + FROM onprc_ehr_compliancedb.SciShieldTemp; + END IF; + + RETURN 0; + +EXCEPTION + WHEN OTHERS THEN + RETURN 1; +END; +$$ LANGUAGE plpgsql; + +CREATE INDEX IF NOT EXISTS IX_completiondates_trainer ON ehr_compliancedb.completiondates(trainer); + +SELECT core.fn_dropifexists('p_ComplianceAccesscontainerUpdate', 'onprc_ehr_compliancedb', 'PROCEDURE', NULL); + +-- Author: R. Blasa +-- Created: 12-10-2024 + +/* +** +** Created by +** Blasa 12-10-2024 Storedprocedure to update string name "ARRS" to "DCM" +** +** +** +** +*/ + +CREATE OR REPLACE FUNCTION onprc_ehr_compliancedb.p_ComplianceTranslatestringUpdate() +RETURNS integer AS $$ +BEGIN + IF EXISTS (SELECT 1 FROM ehr_compliancedb.EmployeePerUnit WHERE unit LIKE '%arrs%') THEN + UPDATE ehr_compliancedb.EmployeePerUnit SET unit = replace(unit, 'arrs', 'DCM'); + END IF; + + IF EXISTS (SELECT 1 FROM ehr_compliancedb.EmployeePerUnit WHERE category LIKE '%arrs%') THEN + UPDATE ehr_compliancedb.EmployeePerUnit SET category = replace(category, 'arrs', 'DCM'); + END IF; + + IF EXISTS (SELECT 1 FROM ehr_compliancedb.Employees WHERE majorudds LIKE '%arrs%') THEN + UPDATE ehr_compliancedb.Employees SET majorudds = replace(majorudds, 'arrs', 'DCM'); + END IF; + + IF EXISTS (SELECT 1 FROM ehr_compliancedb.Employees WHERE unit LIKE '%arrs%') THEN + UPDATE ehr_compliancedb.Employees SET unit = replace(unit, 'arrs', 'DCM'); + END IF; + + IF EXISTS (SELECT 1 FROM ehr_compliancedb.Employees WHERE category LIKE '%arrs%') THEN + UPDATE ehr_compliancedb.Employees SET category = replace(category, 'arrs', 'DCM'); + END IF; + + IF EXISTS (SELECT 1 FROM ehr_compliancedb.requirements WHERE requirementname LIKE '%arrs%') THEN + UPDATE ehr_compliancedb.requirements SET requirementname = replace(requirementname, 'arrs', 'DCM'); + END IF; + + IF EXISTS (SELECT 1 FROM ehr_compliancedb.EmployeeRequirementExemptions WHERE requirementname LIKE '%arrs%') THEN + UPDATE ehr_compliancedb.EmployeeRequirementExemptions SET requirementname = replace(requirementname, 'arrs', 'DCM'); + END IF; + + IF EXISTS (SELECT 1 FROM ehr_compliancedb.unit_names WHERE unit LIKE '%arrs%') THEN + UPDATE ehr_compliancedb.unit_names SET unit = replace(unit, 'arrs', 'DCM'); + END IF; + + IF EXISTS (SELECT 1 FROM ehr_compliancedb.RequirementsPerCategory WHERE RequirementName LIKE '%arrs%') THEN + UPDATE ehr_compliancedb.RequirementsPerCategory SET requirementname = replace(requirementname, 'arrs', 'DCM'); + END IF; + + IF EXISTS (SELECT 1 FROM ehr_compliancedb.RequirementsPerCategory WHERE category LIKE '%arrs%') THEN + UPDATE ehr_compliancedb.RequirementsPerCategory SET category = replace(category, 'arrs', 'DCM'); + END IF; + + IF EXISTS (SELECT 1 FROM ehr_compliancedb.RequirementsPerCategory WHERE unit LIKE '%arrs%') THEN + UPDATE ehr_compliancedb.RequirementsPerCategory SET unit = replace(unit, 'arrs', 'DCM'); + END IF; + + IF EXISTS (SELECT 1 FROM ehr_compliancedb.completiondates WHERE requirementname LIKE '%arrs%') THEN + UPDATE ehr_compliancedb.completiondates SET requirementname = replace(requirementname, 'arrs', 'DCM'); + END IF; + + IF EXISTS (SELECT 1 FROM ehr_compliancedb.EmployeeCategory WHERE categoryname LIKE '%arrs%') THEN + UPDATE ehr_compliancedb.EmployeeCategory SET categoryname = replace(categoryname, 'arrs', 'DCM'); + END IF; + + RETURN 0; + +EXCEPTION + WHEN OTHERS THEN + RETURN 1; +END; +$$ LANGUAGE plpgsql; + +-- Author: R. Blasa +-- Created: 9-20-2024 +-- Description: Stored procedure program to create a static data set for Compliance Procedure Recent Test .sql + +CREATE TABLE onprc_ehr_compliancedb.ComplianceProcedureReport ( + rowid SERIAL NOT NULL, + employeeid VARCHAR(300) NULL, + requirementname VARCHAR(4000) NULL, + unit VARCHAR(500) NULL, + category VARCHAR(500) NULL, + trackingflag VARCHAR(100) NULL, + email VARCHAR(500) NULL, + lastname VARCHAR(500) NULL, + firstname VARCHAR(500) NULL, + host VARCHAR(500) NULL, + supervisor VARCHAR(500) NULL, + trainee_type VARCHAR(500) NULL, + times_completed SMALLINT NULL, + expired_period SMALLINT NULL, + new_expired_period SMALLINT NULL, + mostrecentcompleted_date TIMESTAMP NULL, + comment VARCHAR(4000) NULL, + snooze_date TIMESTAMP NULL, + months_until_renewal DOUBLE PRECISION NULL, + requirement_name_type VARCHAR(1000) NULL +); + +CREATE TABLE onprc_ehr_compliancedb.ComplianceRecentReport ( + rowid SERIAL NOT NULL, + employeeid VARCHAR(300) NULL, + requirementname VARCHAR(4000) NULL, + unit VARCHAR(500) NULL, + category VARCHAR(500) NULL, + trackingflag VARCHAR(100) NULL, + email VARCHAR(500) NULL, + lastname VARCHAR(500) NULL, + firstname VARCHAR(500) NULL, + host VARCHAR(500) NULL, + supervisor VARCHAR(500) NULL, + trainee_type VARCHAR(500) NULL, + times_completed SMALLINT NULL, + expired_period SMALLINT NULL, + new_expired_period SMALLINT NULL, + mostrecentcompleted_date TIMESTAMP NULL, + comment VARCHAR(4000) NULL, + snooze_date TIMESTAMP NULL, + months_until_renewal DOUBLE PRECISION NULL, + requirement_name_type VARCHAR(1000) NULL +); + +CREATE TABLE onprc_ehr_compliancedb.RequirementsPerEmployee ( + RowId SERIAL NOT NULL, + EmployeeId VARCHAR(255) NOT NULL, + RequirementName VARCHAR(255) NOT NULL, + CreatedBy USERID, + Created TIMESTAMP, + ModifiedBy USERID, + Modified TIMESTAMP, + trackingflag VARCHAR(100), + + CONSTRAINT PK_RequirementsPerEmployeename PRIMARY KEY (RowId) +); + +SELECT core.fn_dropifexists('p_ComplianceRecentOverDueSoon_Process', 'onprc_ehr_compliancedb', 'PROCEDURE', NULL); + +-- Author: R. Blasa +-- Created: 9-20-2024 + +CREATE OR REPLACE FUNCTION onprc_ehr_compliancedb.p_ComplianceRecentOverDueSoon_Process() +RETURNS integer AS $$ +BEGIN + DELETE FROM onprc_ehr_compliancedb.ComplianceRecentReport; + + INSERT INTO onprc_ehr_compliancedb.ComplianceRecentReport + ( + requirementname, + employeeid, + unit, + category, + trackingflag, + email, + lastname, + firstname, + host, + supervisor, + trainee_type, + requirement_name_type, + times_completed, + expired_period, + new_expired_Period, + mostrecentcompleted_date, + comment, + snooze_date, + months_until_renewal + ) + SELECT + b.requirementname, + a.employeeid, + string_agg(a.unit, chr(10)) AS unit, + string_agg(a.category, chr(10)) AS category, + string_agg(b.trackingflag, chr(10)) AS trackingflag, + (SELECT h.email FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS email, + (SELECT h.lastname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS lastname, + (SELECT h.firstname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS firstname, + (SELECT h.majorudds FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS host, + (SELECT h.supervisor FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS supervisor, + (SELECT h.type FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS trainee_type, + (SELECT h.type FROM ehr_compliancedb.Requirements h WHERE h.requirementname = b.requirementname) AS requirement_type, + (SELECT count(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = b.requirementname AND zz.employeeid = a.employeeid) AS times_Completed, + (SELECT k.expireperiod FROM ehr_compliancedb.Requirements k WHERE k.requirementname = b.requirementname) AS ExpiredPeriod, + ( + SELECT ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = b.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING (COALESCE(tt.expireperiod, 0)) > ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + AND (tt.reviewdate IS NOT NULL) + ) AS NewExpirePeriod, + (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = b.requirementname AND zz.employeeid = a.employeeid) AS mostrecentcompleted_date, + ( + SELECT string_agg(DISTINCT yy.comment, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = b.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = b.requirementname AND yy.employeeid = a.employeeid + ) AS comment, + ( + SELECT string_agg(DISTINCT yy.snooze_date::text, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = b.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = b.requirementname AND yy.employeeid = a.employeeid + ) AS snooze_date, + CAST( + CASE + WHEN (SELECT max(st.date) FROM ehr_compliancedb.completiondates st WHERE st.requirementname = b.requirementname AND st.employeeid = a.employeeid) IS NULL THEN 0 + WHEN (SELECT COALESCE(tt.expireperiod, 0) FROM ehr_compliancedb.requirements tt WHERE tt.requirementname = b.requirementname GROUP BY tt.expireperiod) = 0 THEN NULL + WHEN ( + SELECT count(*) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = b.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) > 0 THEN + ( + SELECT (((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date)))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = b.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) + ELSE + ( + SELECT COALESCE(tt.expireperiod, 0) - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = b.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod + ) + END AS DOUBLE PRECISION + ) AS MonthsUntilRenewal + FROM ehr_compliancedb.employeeperunit a, ehr_compliancedb.requirementspercategory b + WHERE (a.unit = b.unit OR a.category = b.category) + AND b.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE a.employeeid = t.employeeid AND b.requirementname = t.requirementname) + AND a.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE a.employeeid = p.employeeid AND p.enddate IS NULL) + AND b.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = b.requirementname AND q.dateDisabled IS NULL) + GROUP BY b.requirementname, a.employeeid + + UNION + + SELECT + a.requirementname, + a.employeeid, + NULL AS unit, + NULL AS category, + 'None' AS trackingflag, + (SELECT h.email FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS email, + (SELECT h.lastname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS lastname, + (SELECT h.firstname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS firstname, + (SELECT h.majorudds FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS host, + (SELECT h.supervisor FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS supervisor, + (SELECT h.type FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS trainee_type, + (SELECT h.type FROM ehr_compliancedb.Requirements h WHERE h.requirementname = a.requirementname) AS requirement_type, + (SELECT count(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) AS timesCompleted, + (SELECT k.expireperiod FROM ehr_compliancedb.Requirements k WHERE k.requirementname = a.requirementname) AS ExpiredPeriod, + ( + SELECT ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING (COALESCE(tt.expireperiod, 0)) > ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + AND (tt.reviewdate IS NOT NULL) + ) AS NewExpirePeriod, + (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) AS MostRecentDate, + ( + SELECT string_agg(DISTINCT yy.comment, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = a.requirementname AND yy.employeeid = a.employeeid + ) AS comment, + ( + SELECT string_agg(DISTINCT yy.snooze_date::text, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = a.requirementname AND yy.employeeid = a.employeeid + ) AS snooze_date, + CAST( + CASE + WHEN (SELECT max(st.date) FROM ehr_compliancedb.completiondates st WHERE st.requirementname = a.requirementname AND st.employeeid = a.employeeid) IS NULL THEN 0 + WHEN (SELECT COALESCE(tt.expireperiod, 0) FROM ehr_compliancedb.requirements tt WHERE tt.requirementname = a.requirementname GROUP BY tt.expireperiod) = 0 THEN NULL + WHEN ( + SELECT count(*) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) > 0 THEN + ( + SELECT (((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date)))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) + ELSE + ( + SELECT COALESCE(tt.expireperiod, 0) - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod + ) + END AS DOUBLE PRECISION + ) AS MonthsUntilRenewal + FROM ehr_compliancedb.completiondates a + WHERE a.requirementname NOT IN ( + SELECT DISTINCT h.requirementname + FROM ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h + WHERE (k.unit = h.unit OR k.category = h.category) AND a.employeeid = k.employeeid + ) + AND a.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE a.employeeid = t.employeeid AND a.requirementname = t.requirementname) + AND a.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE a.employeeid = p.employeeid AND p.enddate IS NULL) + AND a.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = a.requirementname AND q.dateDisabled IS NULL) + GROUP BY a.requirementname, a.employeeid + + UNION + + SELECT + a.requirementname, + a.employeeid, + NULL AS unit, + NULL AS category, + 'No' AS trackingflag, + (SELECT h.email FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS email, + (SELECT h.lastname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS lastname, + (SELECT h.firstname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS firstname, + (SELECT h.majorudds FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS host, + (SELECT h.supervisor FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS supervisor, + (SELECT h.type FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS trainee_type, + (SELECT h.type FROM ehr_compliancedb.Requirements h WHERE h.requirementname = a.requirementname) AS requirement_type, + (SELECT count(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) AS timesCompleted, + (SELECT k.expireperiod FROM ehr_compliancedb.Requirements k WHERE k.requirementname = a.requirementname) AS ExpiredPeriod, + ( + SELECT ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING (COALESCE(tt.expireperiod, 0)) > ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + AND (tt.reviewdate IS NOT NULL) + ) AS NewExpirePeriod, + (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) AS MostRecentDate, + ( + SELECT string_agg(DISTINCT yy.comment, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = a.requirementname AND yy.employeeid = a.employeeid + ) AS comment, + ( + SELECT string_agg(DISTINCT yy.snooze_date::text, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = a.requirementname AND yy.employeeid = a.employeeid + ) AS snooze_date, + CAST( + CASE + WHEN (SELECT max(st.date) FROM ehr_compliancedb.completiondates st WHERE st.requirementname = a.requirementname AND st.employeeid = a.employeeid) IS NULL THEN 0 + WHEN (SELECT COALESCE(tt.expireperiod, 0) FROM ehr_compliancedb.requirements tt WHERE tt.requirementname = a.requirementname GROUP BY tt.expireperiod) = 0 THEN NULL + WHEN ( + SELECT count(*) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) > 0 THEN + ( + SELECT (((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date)))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) + ELSE + ( + SELECT COALESCE(tt.expireperiod, 0) - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod + ) + END AS DECIMAL + ) AS MonthsUntilRenewal + FROM ehr_compliancedb.employeerequirementexemptions a + WHERE a.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE a.employeeid = p.employeeid AND p.enddate IS NULL) + AND a.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = a.requirementname AND q.dateDisabled IS NULL) + GROUP BY a.requirementname, a.employeeid + + UNION + + SELECT + j.requirementname, + j.employeeid, + NULL AS unit, + NULL AS category, + string_agg(j.trackingflag, chr(10)) AS trackingflag, + (SELECT h.email FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS email, + (SELECT h.lastname FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS lastname, + (SELECT h.firstname FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS firstname, + (SELECT h.majorudds FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS host, + (SELECT h.supervisor FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS supervisor, + (SELECT h.type FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS trainee_type, + (SELECT h.type FROM ehr_compliancedb.Requirements h WHERE h.requirementname = j.requirementname) AS requirement_type, + 0 AS timesCompleted, + (SELECT k.expireperiod FROM ehr_compliancedb.Requirements k WHERE k.requirementname = j.requirementname) AS ExpiredPeriod, + ( + SELECT ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = j.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = j.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING (COALESCE(tt.expireperiod, 0)) > ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + AND (tt.reviewdate IS NOT NULL) + ) AS NewExpirePeriod, + NULL AS MostRecentDate, + '' AS comment, + NULL AS snooze_date, + CAST( + CASE + WHEN (SELECT max(st.date) FROM ehr_compliancedb.completiondates st WHERE st.requirementname = j.requirementname AND st.employeeid = j.employeeid) IS NULL THEN 0 + WHEN (SELECT COALESCE(tt.expireperiod, 0) FROM ehr_compliancedb.requirements tt WHERE tt.requirementname = j.requirementname GROUP BY tt.expireperiod) = 0 THEN NULL + WHEN ( + SELECT count(*) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = j.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = j.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) > 0 THEN + ( + SELECT (((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date)))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = j.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = j.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) + ELSE + ( + SELECT COALESCE(tt.expireperiod, 0) - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = j.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = j.employeeid + GROUP BY tt.expireperiod + ) + END AS DOUBLE PRECISION + ) AS MonthsUntilRenewal + FROM onprc_ehr_compliancedb.RequirementsPerEmployee j + WHERE j.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE j.employeeid = p.employeeid AND p.enddate IS NULL) + AND j.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = j.requirementname AND q.dateDisabled IS NULL) + AND j.requirementname NOT IN ( + SELECT DISTINCT h.requirementname + FROM ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h + WHERE (k.unit = h.unit OR k.category = h.category) AND j.employeeid = k.employeeid + ) + AND j.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE j.employeeid = t.employeeid AND j.requirementname = t.requirementname) + AND j.requirementname NOT IN (SELECT DISTINCT k.requirementname FROM ehr_compliancedb.completiondates k WHERE k.employeeid = j.employeeid) + GROUP BY j.requirementname, j.employeeid + ORDER BY employeeid, requirementname, mostrecentcompleted_date DESC; + + RETURN 0; + +EXCEPTION + WHEN OTHERS THEN + RETURN 1; +END; +$$ LANGUAGE plpgsql; + +SELECT core.fn_dropifexists('p_ComplianceProcedureOverDueSoon_Process', 'onprc_ehr_compliancedb', 'PROCEDURE', NULL); + +-- Author: R. Blasa +-- Created: 9-20-2024 + +CREATE OR REPLACE FUNCTION onprc_ehr_compliancedb.p_ComplianceProcedureOverDueSoon_Process() +RETURNS integer AS $$ +BEGIN + DELETE FROM onprc_ehr_compliancedb.ComplianceProcedureReport; + + INSERT INTO onprc_ehr_compliancedb.ComplianceProcedureReport + ( + requirementname, + employeeid, + unit, + category, + trackingflag, + email, + lastname, + firstname, + host, + supervisor, + trainee_type, + requirement_name_type, + times_completed, + expired_period, + new_expired_Period, + mostrecentcompleted_date, + comment, + snooze_date, + months_until_renewal + ) + SELECT + b.requirementname, + a.employeeid, + string_agg(a.unit, chr(10)) AS unit, + string_agg(a.category, chr(10)) AS category, + string_agg(b.trackingflag, chr(10)) AS trackingflag, + (SELECT h.email FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS email, + (SELECT h.lastname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS lastname, + (SELECT h.firstname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS firstname, + (SELECT h.majorudds FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS host, + (SELECT h.supervisor FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS supervisor, + (SELECT h.type FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS trainee_type, + (SELECT h.type FROM ehr_compliancedb.Requirements h WHERE h.requirementname = b.requirementname) AS requirement_type, + (SELECT count(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = b.requirementname AND zz.employeeid = a.employeeid) AS times_Completed, + (SELECT k.expireperiod FROM ehr_compliancedb.Requirements k WHERE k.requirementname = b.requirementname) AS ExpiredPeriod, + ( + SELECT ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = b.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING (COALESCE(tt.expireperiod, 0)) > ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + AND (tt.reviewdate IS NOT NULL) + ) AS NewExpirePeriod, + (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = b.requirementname AND zz.employeeid = a.employeeid) AS mostrecentcompleted_date, + ( + SELECT string_agg(DISTINCT yy.comment, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = b.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = b.requirementname AND yy.employeeid = a.employeeid + ) AS comment, + ( + SELECT string_agg(DISTINCT yy.snooze_date::text, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = b.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = b.requirementname AND yy.employeeid = a.employeeid + ) AS snooze_date, + CAST( + CASE + WHEN (SELECT max(st.date) FROM ehr_compliancedb.completiondates st WHERE st.requirementname = b.requirementname AND st.employeeid = a.employeeid) IS NULL THEN 0 + WHEN (SELECT COALESCE(tt.expireperiod, 0) FROM ehr_compliancedb.requirements tt WHERE tt.requirementname = b.requirementname GROUP BY tt.expireperiod) = 0 THEN NULL + WHEN ( + SELECT count(*) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = b.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) > 0 THEN + ( + SELECT (((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date)))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = b.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) + ELSE + ( + SELECT COALESCE(tt.expireperiod, 0) - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = b.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod + ) + END AS DOUBLE PRECISION + ) AS MonthsUntilRenewal + FROM ehr_compliancedb.employeeperunit a, ehr_compliancedb.requirementspercategory b + WHERE (a.unit = b.unit OR a.category = b.category) + AND b.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE a.employeeid = t.employeeid AND b.requirementname = t.requirementname) + AND a.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE a.employeeid = p.employeeid AND p.enddate IS NULL) + AND b.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = b.requirementname AND q.dateDisabled IS NULL) + GROUP BY b.requirementname, a.employeeid + + UNION + + SELECT + a.requirementname, + a.employeeid, + NULL AS unit, + NULL AS category, + 'None' AS trackingflag, + (SELECT h.email FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS email, + (SELECT h.lastname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS lastname, + (SELECT h.firstname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS firstname, + (SELECT h.majorudds FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS host, + (SELECT h.supervisor FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS supervisor, + (SELECT h.type FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS trainee_type, + (SELECT h.type FROM ehr_compliancedb.Requirements h WHERE h.requirementname = a.requirementname) AS requirement_type, + (SELECT count(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) AS timesCompleted, + (SELECT k.expireperiod FROM ehr_compliancedb.Requirements k WHERE k.requirementname = a.requirementname) AS ExpiredPeriod, + ( + SELECT ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING (COALESCE(tt.expireperiod, 0)) > ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + AND (tt.reviewdate IS NOT NULL) + ) AS NewExpirePeriod, + (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) AS MostRecentDate, + ( + SELECT string_agg(DISTINCT yy.comment, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = a.requirementname AND yy.employeeid = a.employeeid + ) AS comment, + ( + SELECT string_agg(DISTINCT yy.snooze_date::text, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = a.requirementname AND yy.employeeid = a.employeeid + ) AS snooze_date, + CAST( + CASE + WHEN (SELECT max(st.date) FROM ehr_compliancedb.completiondates st WHERE st.requirementname = a.requirementname AND st.employeeid = a.employeeid) IS NULL THEN 0 + WHEN (SELECT COALESCE(tt.expireperiod, 0) FROM ehr_compliancedb.requirements tt WHERE tt.requirementname = a.requirementname GROUP BY tt.expireperiod) = 0 THEN NULL + WHEN ( + SELECT count(*) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) > 0 THEN + ( + SELECT (((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date)))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) + ELSE + ( + SELECT COALESCE(tt.expireperiod, 0) - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod + ) + END AS DOUBLE PRECISION + ) AS MonthsUntilRenewal + FROM ehr_compliancedb.completiondates a + WHERE a.requirementname NOT IN ( + SELECT DISTINCT h.requirementname + FROM ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h + WHERE (k.unit = h.unit OR k.category = h.category) AND a.employeeid = k.employeeid + ) + AND a.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE a.employeeid = t.employeeid AND a.requirementname = t.requirementname) + AND a.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE a.employeeid = p.employeeid AND p.enddate IS NULL) + AND a.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = a.requirementname AND q.dateDisabled IS NULL) + GROUP BY a.requirementname, a.employeeid + + UNION + + SELECT + j.requirementname, + j.employeeid, + NULL AS unit, + NULL AS category, + string_agg(j.trackingflag, chr(10)) AS trackingflag, + (SELECT h.email FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS email, + (SELECT h.lastname FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS lastname, + (SELECT h.firstname FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS firstname, + (SELECT h.majorudds FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS host, + (SELECT h.supervisor FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS supervisor, + (SELECT h.type FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS trainee_type, + (SELECT h.type FROM ehr_compliancedb.Requirements h WHERE h.requirementname = j.requirementname) AS requirement_type, + 0 AS timesCompleted, + (SELECT k.expireperiod FROM ehr_compliancedb.Requirements k WHERE k.requirementname = j.requirementname) AS ExpiredPeriod, + ( + SELECT ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = j.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = j.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING (COALESCE(tt.expireperiod, 0)) > ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + AND (tt.reviewdate IS NOT NULL) + ) AS NewExpirePeriod, + NULL AS MostRecentDate, + '' AS comment, + NULL AS snooze_date, + CAST( + CASE + WHEN (SELECT max(st.date) FROM ehr_compliancedb.completiondates st WHERE st.requirementname = j.requirementname AND st.employeeid = j.employeeid) IS NULL THEN 0 + WHEN (SELECT COALESCE(tt.expireperiod, 0) FROM ehr_compliancedb.requirements tt WHERE tt.requirementname = j.requirementname GROUP BY tt.expireperiod) = 0 THEN NULL + WHEN ( + SELECT count(*) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = j.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = j.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) > 0 THEN + ( + SELECT (((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date)))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = j.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = j.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) + ELSE + ( + SELECT COALESCE(tt.expireperiod, 0) - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = j.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = j.employeeid + GROUP BY tt.expireperiod + ) + END AS DOUBLE PRECISION + ) AS MonthsUntilRenewal + FROM onprc_ehr_compliancedb.RequirementsPerEmployee j + WHERE j.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE j.employeeid = p.employeeid AND p.enddate IS NULL) + AND j.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = j.requirementname AND q.dateDisabled IS NULL) + AND j.requirementname NOT IN ( + SELECT DISTINCT h.requirementname + FROM ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h + WHERE (k.unit = h.unit OR k.category = h.category) AND j.employeeid = k.employeeid + ) + AND j.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE j.employeeid = t.employeeid AND j.requirementname = t.requirementname) + AND j.requirementname NOT IN (SELECT DISTINCT k.requirementname FROM ehr_compliancedb.completiondates k WHERE k.employeeid = j.employeeid) + GROUP BY j.requirementname, j.employeeid + ORDER BY employeeid, requirementname, mostrecentcompleted_date DESC; + + RETURN 0; + +EXCEPTION + WHEN OTHERS THEN + RETURN 1; +END; +$$ LANGUAGE plpgsql; + +SELECT core.fn_dropifexists('p_ComplianceAccesscontainerUpdate', 'onprc_ehr_compliancedb', 'PROCEDURE', NULL); + +-- Author: R. Blasa +-- Created: 10-2-2024 + +/* +** +** Created by +** Blasa 9-5-2025 Stored procedure to update Compliance Access container values and update +** Completion date records +** . +** +** +** +*/ + +-- TODO: Delete this? On PostgreSQL, all GUIDs are lowercase, so this probably won't ever match. But it also looks like +-- a one-time fix-up that probably ran long ago on the production DB. + +CREATE OR REPLACE FUNCTION onprc_ehr_compliancedb.p_ComplianceAccesscontainerUpdate() +RETURNS integer AS $$ +BEGIN + IF EXISTS (SELECT 1 FROM ehr_compliancedb.completiondates WHERE container = 'F1C05E2D-618D-103D-ABC9-9814909BFFCD') THEN + UPDATE ehr_compliancedb.completiondates + SET container = 'CD170458-C55F-102F-9907-5107380A54BE' + WHERE container = 'F1C05E2D-618D-103D-ABC9-9814909BFFCD'; + END IF; + + RETURN 0; + +EXCEPTION + WHEN OTHERS THEN + RETURN 1; +END; +$$ LANGUAGE plpgsql; diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/postgresql/onprc_ehr_compliancedb-25.000-25.001.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/postgresql/onprc_ehr_compliancedb-25.000-25.001.sql new file mode 100644 index 000000000..145b95069 --- /dev/null +++ b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/postgresql/onprc_ehr_compliancedb-25.000-25.001.sql @@ -0,0 +1,618 @@ +ALTER TABLE onprc_ehr_compliancedb.ComplianceProcedureReport ALTER COLUMN expired_period TYPE VARCHAR(50); +ALTER TABLE onprc_ehr_compliancedb.ComplianceProcedureReport ALTER COLUMN new_expired_period TYPE VARCHAR(50); + +ALTER TABLE onprc_ehr_compliancedb.ComplianceRecentReport ALTER COLUMN expired_period TYPE VARCHAR(50); +ALTER TABLE onprc_ehr_compliancedb.ComplianceRecentReport ALTER COLUMN new_expired_period TYPE VARCHAR(50); + +DROP FUNCTION IF EXISTS onprc_ehr_compliancedb.p_ComplianceProcedureOverDueSoon_Process; + +-- Author: R. Blasa +-- Created: 9-20-2024 + +/* +** +** Created by +** Blasa 9-20-2024 Created a storedprocedure to create a static set of data from +** the ComplianceProcedureRecentTest.sql query +** +** 1-22-2026 Fix the issues with more than one subquery results +** +** +** +*/ + +CREATE OR REPLACE FUNCTION onprc_ehr_compliancedb.p_ComplianceProcedureOverDueSoon_Process() +RETURNS integer AS $$ +BEGIN + -- Reset Reporting table + DELETE FROM onprc_ehr_compliancedb.ComplianceProcedureReport; + + INSERT INTO onprc_ehr_compliancedb.ComplianceProcedureReport + ( + requirementname, + employeeid, + unit, + category, + trackingflag, + email, + lastname, + firstname, + host, + supervisor, + trainee_type, + requirement_name_type, + times_completed, + expired_period, + new_expired_Period, + mostrecentcompleted_date, + comment, + snooze_date, + months_until_renewal + ) + SELECT + b.requirementname, + a.employeeid, + string_agg(a.unit, chr(10)) AS unit, + string_agg(a.category, chr(10)) AS category, + string_agg(b.trackingflag, chr(10)) AS trackingflag, + (SELECT h.email FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS email, + (SELECT h.lastname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS lastname, + (SELECT h.firstname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS firstname, + (SELECT h.majorudds FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS host, + (SELECT h.supervisor FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS supervisor, + (SELECT h.type FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS trainee_type, + (SELECT string_agg(h.type::text, chr(10)) FROM ehr_compliancedb.Requirements h WHERE h.requirementname = b.requirementname) AS requirement_type, + (SELECT count(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = b.requirementname AND zz.employeeid = a.employeeid) AS times_Completed, + (SELECT string_agg(k.expireperiod::text, chr(10)) FROM ehr_compliancedb.Requirements k WHERE k.requirementname = b.requirementname) AS ExpiredPeriod, + ( + SELECT ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = b.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING (COALESCE(tt.expireperiod, 0)) > ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + AND (tt.reviewdate IS NOT NULL) + ) AS NewExpirePeriod, + (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = b.requirementname AND zz.employeeid = a.employeeid) AS mostrecentcompleted_date, + ( + SELECT string_agg(DISTINCT yy.comment, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = b.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = b.requirementname AND yy.employeeid = a.employeeid + ) AS comment, + ( + SELECT string_agg(DISTINCT yy.snooze_date::text, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = b.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = b.requirementname AND yy.employeeid = a.employeeid + ) AS snooze_date, + CAST( + CASE + WHEN (SELECT max(st.date) FROM ehr_compliancedb.completiondates st WHERE st.requirementname = b.requirementname AND st.employeeid = a.employeeid) IS NULL THEN 0 + WHEN (SELECT COALESCE(tt.expireperiod, 0) FROM ehr_compliancedb.requirements tt WHERE tt.requirementname = b.requirementname GROUP BY tt.expireperiod) = 0 THEN NULL + WHEN ( + SELECT count(*) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = b.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) > 0 THEN + ( + SELECT (((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date)))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = b.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) + ELSE + ( + SELECT COALESCE(tt.expireperiod, 0) - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = b.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod + ) + END AS DOUBLE PRECISION + ) AS MonthsUntilRenewal + FROM ehr_compliancedb.employeeperunit a, ehr_compliancedb.requirementspercategory b + WHERE (a.unit = b.unit OR a.category = b.category) + AND b.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE a.employeeid = t.employeeid AND b.requirementname = t.requirementname) + AND a.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE a.employeeid = p.employeeid AND p.enddate IS NULL) + AND b.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = b.requirementname AND q.dateDisabled IS NULL) + GROUP BY b.requirementname, a.employeeid + + UNION + + SELECT + a.requirementname, + a.employeeid, + NULL AS unit, + NULL AS category, + 'None' AS trackingflag, + (SELECT h.email FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS email, + (SELECT h.lastname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS lastname, + (SELECT h.firstname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS firstname, + (SELECT h.majorudds FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS host, + (SELECT h.supervisor FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS supervisor, + (SELECT h.type FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS trainee_type, + (SELECT string_agg(h.type::text, chr(10)) FROM ehr_compliancedb.Requirements h WHERE h.requirementname = a.requirementname) AS requirement_type, + (SELECT count(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) AS timesCompleted, + (SELECT string_agg(k.expireperiod::text, chr(10)) FROM ehr_compliancedb.Requirements k WHERE k.requirementname = a.requirementname) AS ExpiredPeriod, + ( + SELECT ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING (COALESCE(tt.expireperiod, 0)) > ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + AND (tt.reviewdate IS NOT NULL) + ) AS NewExpirePeriod, + (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) AS MostRecentDate, + ( + SELECT string_agg(DISTINCT yy.comment, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = a.requirementname AND yy.employeeid = a.employeeid + ) AS comment, + ( + SELECT string_agg(DISTINCT yy.snooze_date::text, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = a.requirementname AND yy.employeeid = a.employeeid + ) AS snooze_date, + CAST( + CASE + WHEN (SELECT max(st.date) FROM ehr_compliancedb.completiondates st WHERE st.requirementname = a.requirementname AND st.employeeid = a.employeeid) IS NULL THEN 0 + WHEN (SELECT COALESCE(tt.expireperiod, 0) FROM ehr_compliancedb.requirements tt WHERE tt.requirementname = a.requirementname GROUP BY tt.expireperiod) = 0 THEN NULL + WHEN ( + SELECT count(*) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) > 0 THEN + ( + SELECT (((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date)))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) + ELSE + ( + SELECT COALESCE(tt.expireperiod, 0) - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod + ) + END AS DOUBLE PRECISION + ) AS MonthsUntilRenewal + FROM ehr_compliancedb.completiondates a + WHERE a.requirementname NOT IN ( + SELECT DISTINCT h.requirementname + FROM ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h + WHERE (k.unit = h.unit OR k.category = h.category) AND a.employeeid = k.employeeid + ) + AND a.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE a.employeeid = t.employeeid AND a.requirementname = t.requirementname) + AND a.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE a.employeeid = p.employeeid AND p.enddate IS NULL) + AND a.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = a.requirementname AND q.dateDisabled IS NULL) + GROUP BY a.requirementname, a.employeeid + + UNION + + -- Additional requirements for employees that have not completed training, but is required + SELECT + j.requirementname, + j.employeeid, + NULL AS unit, + NULL AS category, + string_agg(j.trackingflag, chr(10)) AS trackingflag, + (SELECT h.email FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS email, + (SELECT h.lastname FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS lastname, + (SELECT h.firstname FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS firstname, + (SELECT h.majorudds FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS host, + (SELECT h.supervisor FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS supervisor, + (SELECT h.type FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS trainee_type, + (SELECT string_agg(h.type::text, chr(10)) FROM ehr_compliancedb.Requirements h WHERE h.requirementname = j.requirementname) AS requirement_type, + 0 AS timesCompleted, + (SELECT string_agg(k.expireperiod::text, chr(10)) FROM ehr_compliancedb.Requirements k WHERE k.requirementname = j.requirementname) AS ExpiredPeriod, + ( + SELECT ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = j.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = j.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING (COALESCE(tt.expireperiod, 0)) > ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + AND (tt.reviewdate IS NOT NULL) + ) AS NewExpirePeriod, + NULL AS MostRecentDate, + '' AS comment, + NULL AS snooze_date, + CAST( + CASE + WHEN (SELECT max(st.date) FROM ehr_compliancedb.completiondates st WHERE st.requirementname = j.requirementname AND st.employeeid = j.employeeid) IS NULL THEN 0 + WHEN (SELECT COALESCE(tt.expireperiod, 0) FROM ehr_compliancedb.requirements tt WHERE tt.requirementname = j.requirementname GROUP BY tt.expireperiod) = 0 THEN NULL + WHEN ( + SELECT count(*) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = j.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = j.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) > 0 THEN + ( + SELECT (((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date)))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = j.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = j.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) + ELSE + ( + SELECT COALESCE(tt.expireperiod, 0) - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = j.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = j.employeeid + GROUP BY tt.expireperiod + ) + END AS DOUBLE PRECISION + ) AS MonthsUntilRenewal + FROM onprc_ehr_compliancedb.RequirementsPerEmployee j + WHERE j.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE j.employeeid = p.employeeid AND p.enddate IS NULL) + AND j.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = j.requirementname AND q.dateDisabled IS NULL) + AND j.requirementname NOT IN ( + SELECT DISTINCT h.requirementname + FROM ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h + WHERE (k.unit = h.unit OR k.category = h.category) AND j.employeeid = k.employeeid + ) + AND j.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE j.employeeid = t.employeeid AND j.requirementname = t.requirementname) + AND j.requirementname NOT IN (SELECT DISTINCT k.requirementname FROM ehr_compliancedb.completiondates k WHERE k.employeeid = j.employeeid) + GROUP BY j.requirementname, j.employeeid + ORDER BY employeeid, requirementname, mostrecentcompleted_date DESC; + + RETURN 0; + +EXCEPTION + WHEN OTHERS THEN + RETURN 1; +END; +$$ LANGUAGE plpgsql; + +DROP FUNCTION IF EXISTS onprc_ehr_compliancedb.p_ComplianceProcedureOverDueSoon_Process; + +-- Author: R. Blasa +-- Created: 9-20-2024 + +/* +** +** Created by +** Blasa 9-20-2024 Created a storedprocedure to create a static set of data from +** the ComplianceRecentTest.sql query +** +** 1-22-2026 Fix the issues with more than one subquery results +** +** +*/ + +CREATE OR REPLACE FUNCTION onprc_ehr_compliancedb.p_ComplianceRecentOverDueSoon_Process() +RETURNS integer AS $$ +BEGIN + -- Reset Reporting table + DELETE FROM onprc_ehr_compliancedb.ComplianceRecentReport; + + INSERT INTO onprc_ehr_compliancedb.ComplianceRecentReport + ( + requirementname, + employeeid, + unit, + category, + trackingflag, + email, + lastname, + firstname, + host, + supervisor, + trainee_type, + requirement_name_type, + times_completed, + expired_period, + new_expired_Period, + mostrecentcompleted_date, + comment, + snooze_date, + months_until_renewal + ) + SELECT + b.requirementname, + a.employeeid, + string_agg(a.unit, chr(10)) AS unit, + string_agg(a.category, chr(10)) AS category, + string_agg(b.trackingflag, chr(10)) AS trackingflag, + (SELECT h.email FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS email, + (SELECT h.lastname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS lastname, + (SELECT h.firstname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS firstname, + (SELECT h.majorudds FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS host, + (SELECT h.supervisor FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS supervisor, + (SELECT h.type FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS trainee_type, + (SELECT string_agg(h.type::text, chr(10)) FROM ehr_compliancedb.Requirements h WHERE h.requirementname = b.requirementname) AS requirement_type, + (SELECT count(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = b.requirementname AND zz.employeeid = a.employeeid) AS times_Completed, + (SELECT string_agg(k.expireperiod::text, chr(10)) FROM ehr_compliancedb.Requirements k WHERE k.requirementname = b.requirementname) AS ExpiredPeriod, + ( + SELECT ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = b.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING (COALESCE(tt.expireperiod, 0)) > ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + AND (tt.reviewdate IS NOT NULL) + ) AS NewExpirePeriod, + (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = b.requirementname AND zz.employeeid = a.employeeid) AS mostrecentcompleted_date, + ( + SELECT string_agg(DISTINCT yy.comment, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = b.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = b.requirementname AND yy.employeeid = a.employeeid + ) AS comment, + ( + SELECT string_agg(DISTINCT yy.snooze_date::text, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = b.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = b.requirementname AND yy.employeeid = a.employeeid + ) AS snooze_date, + CAST( + CASE + WHEN (SELECT max(st.date) FROM ehr_compliancedb.completiondates st WHERE st.requirementname = b.requirementname AND st.employeeid = a.employeeid) IS NULL THEN 0 + WHEN (SELECT COALESCE(tt.expireperiod, 0) FROM ehr_compliancedb.requirements tt WHERE tt.requirementname = b.requirementname GROUP BY tt.expireperiod) = 0 THEN NULL + WHEN ( + SELECT count(*) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = b.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) > 0 THEN + ( + SELECT (((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date)))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = b.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) + ELSE + ( + SELECT COALESCE(tt.expireperiod, 0) - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = b.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod + ) + END AS DOUBLE PRECISION + ) AS MonthsUntilRenewal + FROM ehr_compliancedb.employeeperunit a, ehr_compliancedb.requirementspercategory b + WHERE (a.unit = b.unit OR a.category = b.category) + AND b.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE a.employeeid = t.employeeid AND b.requirementname = t.requirementname) + AND a.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE a.employeeid = p.employeeid AND p.enddate IS NULL) + AND b.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = b.requirementname AND q.dateDisabled IS NULL) + GROUP BY b.requirementname, a.employeeid + + UNION + + SELECT + a.requirementname, + a.employeeid, + NULL AS unit, + NULL AS category, + 'None' AS trackingflag, + (SELECT h.email FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS email, + (SELECT h.lastname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS lastname, + (SELECT h.firstname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS firstname, + (SELECT h.majorudds FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS host, + (SELECT h.supervisor FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS supervisor, + (SELECT h.type FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS trainee_type, + (SELECT string_agg(h.type::text, chr(10)) FROM ehr_compliancedb.Requirements h WHERE h.requirementname = a.requirementname) AS requirement_type, + (SELECT count(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) AS timesCompleted, + (SELECT string_agg(k.expireperiod::text, chr(10)) FROM ehr_compliancedb.Requirements k WHERE k.requirementname = a.requirementname) AS ExpiredPeriod, + ( + SELECT ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING (COALESCE(tt.expireperiod, 0)) > ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + AND (tt.reviewdate IS NOT NULL) + ) AS NewExpirePeriod, + (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) AS MostRecentDate, + ( + SELECT string_agg(DISTINCT yy.comment, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = a.requirementname AND yy.employeeid = a.employeeid + ) AS comment, + ( + SELECT string_agg(DISTINCT yy.snooze_date::text, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = a.requirementname AND yy.employeeid = a.employeeid + ) AS snooze_date, + CAST( + CASE + WHEN (SELECT max(st.date) FROM ehr_compliancedb.completiondates st WHERE st.requirementname = a.requirementname AND st.employeeid = a.employeeid) IS NULL THEN 0 + WHEN (SELECT COALESCE(tt.expireperiod, 0) FROM ehr_compliancedb.requirements tt WHERE tt.requirementname = a.requirementname GROUP BY tt.expireperiod) = 0 THEN NULL + WHEN ( + SELECT count(*) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) > 0 THEN + ( + SELECT (((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date)))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) + ELSE + ( + SELECT COALESCE(tt.expireperiod, 0) - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod + ) + END AS DOUBLE PRECISION + ) AS MonthsUntilRenewal + FROM ehr_compliancedb.completiondates a + WHERE a.requirementname NOT IN ( + SELECT DISTINCT h.requirementname + FROM ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h + WHERE (k.unit = h.unit OR k.category = h.category) AND a.employeeid = k.employeeid + ) + AND a.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE a.employeeid = t.employeeid AND a.requirementname = t.requirementname) + AND a.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE a.employeeid = p.employeeid AND p.enddate IS NULL) + AND a.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = a.requirementname AND q.dateDisabled IS NULL) + GROUP BY a.requirementname, a.employeeid + + UNION + + -- Training that was completed by as an employee training exemptions, and at least completed one, or more times + SELECT + a.requirementname, + a.employeeid, + NULL AS unit, + NULL AS category, + 'No' AS trackingflag, + (SELECT h.email FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS email, + (SELECT h.lastname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS lastname, + (SELECT h.firstname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS firstname, + (SELECT h.majorudds FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS host, + (SELECT h.supervisor FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS supervisor, + (SELECT h.type FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS trainee_type, + (SELECT string_agg(h.type::text, chr(10)) FROM ehr_compliancedb.Requirements h WHERE h.requirementname = a.requirementname) AS requirement_type, + (SELECT count(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) AS timesCompleted, + (SELECT string_agg(k.expireperiod::text, chr(10)) FROM ehr_compliancedb.Requirements k WHERE k.requirementname = a.requirementname) AS ExpiredPeriod, + ( + SELECT ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING (COALESCE(tt.expireperiod, 0)) > ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + AND (tt.reviewdate IS NOT NULL) + ) AS NewExpirePeriod, + (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) AS MostRecentDate, + ( + SELECT string_agg(DISTINCT yy.comment, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = a.requirementname AND yy.employeeid = a.employeeid + ) AS comment, + ( + SELECT string_agg(DISTINCT yy.snooze_date::text, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = a.requirementname AND yy.employeeid = a.employeeid + ) AS snooze_date, + CAST( + CASE + WHEN (SELECT max(st.date) FROM ehr_compliancedb.completiondates st WHERE st.requirementname = a.requirementname AND st.employeeid = a.employeeid) IS NULL THEN 0 + WHEN (SELECT COALESCE(tt.expireperiod, 0) FROM ehr_compliancedb.requirements tt WHERE tt.requirementname = a.requirementname GROUP BY tt.expireperiod) = 0 THEN NULL + WHEN ( + SELECT count(*) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) > 0 THEN + ( + SELECT (((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date)))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) + ELSE + ( + SELECT COALESCE(tt.expireperiod, 0) - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod + ) + END AS DECIMAL + ) AS MonthsUntilRenewal + FROM ehr_compliancedb.employeerequirementexemptions a + WHERE a.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE a.employeeid = p.employeeid AND p.enddate IS NULL) + AND a.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = a.requirementname AND q.dateDisabled IS NULL) + GROUP BY a.requirementname, a.employeeid + + UNION + + -- Additional requirements for employees that have not completed training, but is required + SELECT + j.requirementname, + j.employeeid, + NULL AS unit, + NULL AS category, + string_agg(j.trackingflag, chr(10)) AS trackingflag, + (SELECT h.email FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS email, + (SELECT h.lastname FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS lastname, + (SELECT h.firstname FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS firstname, + (SELECT h.majorudds FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS host, + (SELECT h.supervisor FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS supervisor, + (SELECT h.type FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS trainee_type, + (SELECT string_agg(h.type::text, chr(10)) FROM ehr_compliancedb.Requirements h WHERE h.requirementname = j.requirementname) AS requirement_type, + 0 AS timesCompleted, + (SELECT string_agg(k.expireperiod::text, chr(10)) FROM ehr_compliancedb.Requirements k WHERE k.requirementname = j.requirementname) AS ExpiredPeriod, + ( + SELECT ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = j.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = j.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING (COALESCE(tt.expireperiod, 0)) > ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + AND (tt.reviewdate IS NOT NULL) + ) AS NewExpirePeriod, + NULL AS MostRecentDate, + '' AS comment, + NULL AS snooze_date, + CAST( + CASE + WHEN (SELECT max(st.date) FROM ehr_compliancedb.completiondates st WHERE st.requirementname = j.requirementname AND st.employeeid = j.employeeid) IS NULL THEN 0 + WHEN (SELECT COALESCE(tt.expireperiod, 0) FROM ehr_compliancedb.requirements tt WHERE tt.requirementname = j.requirementname GROUP BY tt.expireperiod) = 0 THEN NULL + WHEN ( + SELECT count(*) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = j.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = j.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) > 0 THEN + ( + SELECT (((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date)))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = j.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = j.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) + ELSE + ( + SELECT COALESCE(tt.expireperiod, 0) - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = j.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = j.employeeid + GROUP BY tt.expireperiod + ) + END AS DOUBLE PRECISION + ) AS MonthsUntilRenewal + FROM onprc_ehr_compliancedb.RequirementsPerEmployee j + WHERE j.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE j.employeeid = p.employeeid AND p.enddate IS NULL) + AND j.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = j.requirementname AND q.dateDisabled IS NULL) + AND j.requirementname NOT IN ( + SELECT DISTINCT h.requirementname + FROM ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h + WHERE (k.unit = h.unit OR k.category = h.category) AND j.employeeid = k.employeeid + ) + AND j.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE j.employeeid = t.employeeid AND j.requirementname = t.requirementname) + AND j.requirementname NOT IN (SELECT DISTINCT k.requirementname FROM ehr_compliancedb.completiondates k WHERE k.employeeid = j.employeeid) + GROUP BY j.requirementname, j.employeeid + ORDER BY employeeid, requirementname, mostrecentcompleted_date DESC; + + RETURN 0; + +EXCEPTION + WHEN OTHERS THEN + RETURN 1; +END; +$$ LANGUAGE plpgsql; diff --git a/extscheduler/resources/schemas/dbscripts/postgresql/extscheduler-0.000-25.000.sql b/extscheduler/resources/schemas/dbscripts/postgresql/extscheduler-0.000-25.000.sql new file mode 100644 index 000000000..36e159efd --- /dev/null +++ b/extscheduler/resources/schemas/dbscripts/postgresql/extscheduler-0.000-25.000.sql @@ -0,0 +1,465 @@ +CREATE SCHEMA extscheduler; + +CREATE TABLE extscheduler.Resources +( + Id SERIAL NOT NULL, + Name VARCHAR(255) NOT NULL, + Color VARCHAR(20), + + Container ENTITYID NOT NULL, + CreatedBy USERID, + Created TIMESTAMP, + ModifiedBy USERID, + Modified TIMESTAMP, + + CONSTRAINT PK_resources PRIMARY KEY (Id), + CONSTRAINT UQ_resources_ContainerName UNIQUE (Container, Name) +); + +CREATE TABLE extscheduler.Events +( + Id SERIAL NOT NULL, + ResourceId INT NOT NULL, + Name VARCHAR(255) NOT NULL, + StartDate TIMESTAMP NOT NULL, + EndDate TIMESTAMP NOT NULL, + UserId USERID NOT NULL, + + Container ENTITYID NOT NULL, + CreatedBy USERID, + Created TIMESTAMP, + ModifiedBy USERID, + Modified TIMESTAMP, + + CONSTRAINT PK_events PRIMARY KEY (Id), + CONSTRAINT FK_events_ResourceId FOREIGN KEY (ResourceId) REFERENCES extscheduler.Resources(Id), + CONSTRAINT UQ_events_ContainerResourceName UNIQUE (Container, ResourceId, Name) +); + +/* 15.xxx SQL scripts */ + +ALTER TABLE extscheduler.Resources ADD Room VARCHAR(255); +ALTER TABLE extscheduler.Resources ADD Bldg VARCHAR(255); + +ALTER TABLE extscheduler.Events ADD Alias VARCHAR(25); + +CREATE TABLE extscheduler.users +( + Id SERIAL NOT NULL, + PrimeUserID USERID NOT NULL, + FirstName VARCHAR(255) NOT NULL, + LastName VARCHAR(255) NOT NULL, + Email VARCHAR(255) NOT NULL, + Phone VARCHAR(255), + Department VARCHAR(255), + Lab_FirstName VARCHAR(255), + Lab_LastName VARCHAR(255), + FiscalAuthority_Name VARCHAR(255), + FiscalAuthority_Phone VARCHAR(255), + SecurityLevel VARCHAR(255), + Container ENTITYID NOT NULL, + CreatedBy USERID, + Created TIMESTAMP, + ModifiedBy USERID, + Modified TIMESTAMP, + + CONSTRAINT PK_users PRIMARY KEY (Id), + CONSTRAINT FK_users_PrimeUserID FOREIGN KEY (PrimeUserID) REFERENCES core.Usersdata(UserId), + CONSTRAINT UQ_users_ContainerPrimeUserID UNIQUE (Container, PrimeUserID) +); + +DROP TABLE extscheduler.users; + +CREATE TABLE extscheduler.users +( + Id SERIAL NOT NULL, + PrimeUserID USERID NOT NULL, + FirstName VARCHAR(255) NOT NULL, + LastName VARCHAR(255) NOT NULL, + Email VARCHAR(255) NOT NULL, + Phone VARCHAR(255), + Department VARCHAR(255), + Lab_FirstName VARCHAR(255), + Lab_LastName VARCHAR(255), + FiscalAuthority_Name VARCHAR(255), + FiscalAuthority_Phone VARCHAR(255), + SecurityLevel VARCHAR(255), + Container ENTITYID NOT NULL, + CreatedBy USERID, + Created TIMESTAMP, + ModifiedBy USERID, + Modified TIMESTAMP, + + CONSTRAINT PK_users PRIMARY KEY (Id), + CONSTRAINT FK_users_PrimeUserID FOREIGN KEY (PrimeUserID) REFERENCES core.Usersdata(UserId), + CONSTRAINT UQ_users_ContainerPrimeUserID UNIQUE (Container, PrimeUserID) +); + +ALTER TABLE extscheduler.events DROP CONSTRAINT UQ_events_ContainerResourceName; +ALTER TABLE extscheduler.events ADD CONSTRAINT CHK_event_DateRangeValid CHECK (StartDate <= EndDate); + +CREATE OR REPLACE FUNCTION extscheduler.tr_overlappingdateranges() RETURNS TRIGGER AS $$ +BEGIN + IF EXISTS( + SELECT 1 FROM extscheduler.events R + WHERE (R.Container = NEW.Container AND R.ResourceId = NEW.ResourceId AND R.StartDate < NEW.EndDate AND NEW.StartDate < R.EndDate) + AND NOT (R.Container = NEW.Container AND R.ResourceId = NEW.ResourceId AND R.StartDate = NEW.StartDate AND NEW.EndDate = R.EndDate) + ) THEN + RAISE EXCEPTION 'Start/End date ranges may not overlap for the same resource.'; + END IF; + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER TR_OverlappingDateRanges + BEFORE INSERT OR UPDATE ON extscheduler.events + FOR EACH ROW + EXECUTE FUNCTION extscheduler.tr_overlappingdateranges(); + +ALTER TABLE extscheduler.events ALTER COLUMN Name DROP NOT NULL; + +DROP TABLE extscheduler.users; + +CREATE OR REPLACE FUNCTION extscheduler.tr_overlappingdateranges() RETURNS TRIGGER AS $$ +BEGIN + IF EXISTS( + SELECT 1 FROM extscheduler.events R + WHERE (R.Container = NEW.Container AND R.ResourceId = NEW.ResourceId AND R.StartDate < NEW.EndDate AND NEW.StartDate < R.EndDate) + AND NOT (R.Id = NEW.Id) + ) THEN + RAISE EXCEPTION 'Start/End date ranges may not overlap for the same resource.'; + END IF; + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +ALTER TABLE extscheduler.Events ADD Quantity INT; + +ALTER TABLE extscheduler.Events ADD Comments VARCHAR(255); + +CREATE OR REPLACE FUNCTION extscheduler.tr_overlappingdateranges() RETURNS TRIGGER AS $$ +BEGIN + IF EXISTS( + SELECT 1 FROM extscheduler.events R + LEFT JOIN ( + SELECT ObjectId, Value FROM prop.Properties + JOIN prop.PropertySets ON PropertySets."Set" = Properties."Set" + WHERE Name = 'ExtSchedulerAllowEventOverlap' + ) P ON R.Container = P.ObjectId + WHERE (P.Value IS NULL OR P.Value = 'false') AND ( + (R.Container = NEW.Container AND R.ResourceId = NEW.ResourceId AND R.StartDate < NEW.EndDate AND NEW.StartDate < R.EndDate) + AND NOT (R.Id = NEW.Id) + ) + ) THEN + RAISE EXCEPTION 'Start/End date ranges may not overlap for the same resource.'; + END IF; + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +/* 20.xxx SQL scripts */ + +/* +Created: 2020-05-07 +Created by jonesga +Purpose: Update of Comments field of scheduler per user request +*/ +ALTER TABLE extscheduler.Events ALTER COLUMN Comments TYPE VARCHAR(4000); + +/* +Created: 2020-05-07 +Created by jonesga +Purpose: Dataset to mimic DateRange from Labkey for SCheduler actionin SQL +*/ +SELECT core.fn_dropifexists('DateParts', 'extScheduler', 'TABLE', NULL); + +CREATE TABLE extScheduler.dateParts +( + date TIMESTAMP, + dateOnly DATE, + DayOfYear INT, + DayofMonth INT, + DayofWeek INT, + DayName VARCHAR(20), + WeekofMonth INT, + WeekofYear INT, + Month INT, + year INT +); + +INSERT INTO extScheduler.DateParts + (Date, + dateonly, + DayOfYear, + DayofMonth, + DayofWeek, + DayName, + WeekofMonth, + WeekofYear, + Month, + year) +SELECT + i.NDate, + CAST(i.NDate AS DATE) AS dateOnly, + CAST(EXTRACT(DOY FROM i.NDate) AS INTEGER) AS DayOfYear, + CAST(EXTRACT(DAY FROM i.NDate) AS INTEGER) AS DayOfMonth, + CAST(EXTRACT(DOW FROM i.NDate) AS INTEGER) + 1 AS DayOfWeek, + CAST(EXTRACT(DAY FROM i.NDate) AS VARCHAR(20)) AS DayName, + (CAST(EXTRACT(DAY FROM i.NDate) AS INTEGER) / 7) AS WeekofMonth, + CAST(EXTRACT(WEEK FROM i.NDate) AS INTEGER) AS WeekofYear, + CAST(EXTRACT(MONTH FROM i.NDate) AS INTEGER) AS Month, + CAST(EXTRACT(YEAR FROM i.NDate) AS INTEGER) AS Year +FROM (SELECT CAST('2020-05-01' AS TIMESTAMP) + (i.value * INTERVAL '1 day') AS NDate FROM ldk.integers i) i +WHERE i.NDate <= '2021-04-20'; + +-- ============================================= +-- Author: jonesga@ohsu.edu +-- Create date: 2020-05-13 +-- Description: PRocedure to Block out Scheduling for Covid19 testing for 3:30 to 7 PM on Monday and Friday +-- ============================================= +SELECT core.fn_dropifexists('extBlockOutEvening', 'extscheduler', 'PROCEDURE', NULL); + +CREATE OR REPLACE PROCEDURE extscheduler.extBlockOutEvening( + _Month INTEGER, + _ResourceID INTEGER +) +LANGUAGE plpgsql +AS $$ +BEGIN + INSERT INTO extscheduler.Events + ( + ResourceId, + Name, + StartDate, + EndDate, + UserId, + Container, + CreatedBy, + Created, + Quantity, + Comments + ) + SELECT + _ResourceID, + 'No Covid-19 Testing', + c.date + INTERVAL '1530 hours', + c.date + INTERVAL '19 hours', + 1003, + '5C3C9FF8-6BCF-1038-930A-7D62F3A605B4', + 1003, + NOW(), + 1, + 'Insert by ISE' + FROM extscheduler.dateParts c + WHERE c.dayofWeek IN (2, 6) AND c.Month = _Month; +END; +$$; + +-- ============================================= +-- Author: jonesga@ohsu.edu +-- Create date: 2020-05-13 +-- Description: PRocedure to Block out Scheduling for Covid19 testing for 7 to 8 on Monday and Friday +-- ============================================= +SELECT core.fn_dropifexists('extBlockOutMorning', 'extscheduler', 'PROCEDURE', NULL); + +CREATE OR REPLACE PROCEDURE extscheduler.extBlockOutMorning( + _Month INTEGER, + _ResourceID INTEGER +) +LANGUAGE plpgsql +AS $$ +BEGIN + INSERT INTO extscheduler.Events + ( + ResourceId, + Name, + StartDate, + EndDate, + UserId, + Container, + CreatedBy, + Created, + Quantity, + Comments + ) + SELECT + _ResourceID, + 'No Covid-19 Testing', + c.date + INTERVAL '7 hours', + c.date + INTERVAL '8 hours', + 1003, + '5C3C9FF8-6BCF-1038-930A-7D62F3A605B4', + 1003, + NOW(), + 1, + 'Insert by ISE' + FROM extscheduler.dateParts c + WHERE c.dayofWeek IN (2, 6) AND c.Month = _Month; +END; +$$; + +-- ============================================= +-- Author: jonesga@ohsu.edu +-- Create date: 2020-05-13 +-- Description: PRocedure to Block out Scheduling for Covid19 testing for all days except Monday and Friday +-- ============================================= +SELECT core.fn_dropifexists('extBlockOutDays', 'extscheduler', 'PROCEDURE', NULL); + +CREATE OR REPLACE PROCEDURE extscheduler.extBlockOutDays( + _Month INTEGER, + _ResourceID INTEGER +) +LANGUAGE plpgsql +AS $$ +BEGIN + INSERT INTO extscheduler.Events + ( + ResourceId, + Name, + StartDate, + EndDate, + UserId, + Container, + CreatedBy, + Created, + Quantity, + Comments + ) + SELECT + _ResourceID, + 'No Covid-19 Testing', + c.date + INTERVAL '7 hours', + c.date + INTERVAL '19 hours', + 1003, + '5C3C9FF8-6BCF-1038-930A-7D62F3A605B4', + 1003, + NOW(), + 1, + 'Insert by ISE' + FROM extscheduler.dateParts c + WHERE c.dayofWeek IN (1, 3, 4, 5, 7) AND c.Month = _Month; +END; +$$; + +SELECT core.fn_dropifexists('vw_Covid19Research', 'extScheduler', 'VIEW', NULL); + +CREATE VIEW extScheduler.vw_Covid19Research AS +SELECT extscheduler.Events.Id AS SChedulerID, extscheduler.Events.ResourceId, extscheduler.Resources.Name AS ResourceName, extscheduler.Events.Name, extscheduler.Events.StartDate, extscheduler.Events.UserId, + extscheduler.Events.CreatedBy, extscheduler.Events.Created, extscheduler.Events.Quantity, core.UsersData.IM AS EmployeeID +FROM extscheduler.Events LEFT OUTER JOIN + core.UsersData ON extscheduler.Events.UserId = core.UsersData.UserId LEFT OUTER JOIN + extscheduler.Resources ON extscheduler.Events.ResourceId = extscheduler.Resources.Id +WHERE (extscheduler.Events.ResourceId = 67); + +SELECT core.fn_dropifexists('vw_Covid19DCMSchedule', 'extScheduler', 'VIEW', NULL); + +CREATE VIEW extScheduler.vw_Covid19DCMSchedule AS +SELECT extscheduler.Events.Id AS SChedulerID, extscheduler.Events.ResourceId, extscheduler.Resources.Name AS ResourceName, extscheduler.Events.Name, extscheduler.Events.StartDate, extscheduler.Events.UserId, + extscheduler.Events.CreatedBy, extscheduler.Events.Created, extscheduler.Events.Quantity, core.UsersData.IM AS EmployeeID + FROM extscheduler.Events LEFT OUTER JOIN + core.UsersData ON extscheduler.Events.UserId = core.UsersData.UserId LEFT OUTER JOIN + extscheduler.Resources ON extscheduler.Events.ResourceId = extscheduler.Resources.Id + WHERE (extscheduler.Resources.Name LIKE 'DCM%'); + +SELECT core.fn_dropifexists('Covid19Testing', 'extScheduler', 'TABLE', NULL); + +CREATE TABLE extScheduler.Covid19Testing ( + container ENTITYID NOT NULL, + entityId ENTITYID NOT NULL, + lastIndexed TIMESTAMP NULL, + createdBy INT NULL, + modified TIMESTAMP NULL, + modifiedBy INT NULL, + created TIMESTAMP NULL, + "Key" SERIAL NOT NULL, + SchedulerID INT NULL, + ResourceID INT NULL, + UserName VARCHAR(4000) NULL, + UserID INT NULL, + EmployeeID VARCHAR(4000) NULL, + ScheduledDate TIMESTAMP NULL, + ScheduledTime TIMESTAMP NULL, + "Create" TIMESTAMP NULL, + SampleDate VARCHAR(4000) NULL, + CreatedB VARCHAR(4000) NULL, + ComplianceUpdated BOOLEAN NULL, + CONSTRAINT covid19testing_pk PRIMARY KEY ("Key") +); + +SELECT core.fn_dropifexists('Covid19Testing', 'extScheduler', 'TABLE', NULL); + +CREATE TABLE extScheduler.Covid19Testing ( + container ENTITYID NOT NULL, + entityId ENTITYID NOT NULL, + lastIndexed TIMESTAMP NULL, + createdBy INT NULL, + modified TIMESTAMP NULL, + modifiedBy INT NULL, + created TIMESTAMP NULL, + "Key" SERIAL NOT NULL, + SchedulerID INT NULL, + ResourceID INT NULL, + UserName VARCHAR(4000) NULL, + UserID INT NULL, + EmployeeID VARCHAR(4000) NULL, + ScheduledDate TIMESTAMP NULL, + ScheduledTime TIMESTAMP NULL, + "Create" TIMESTAMP NULL, + SampleDate VARCHAR(4000) NULL, + CreatedB VARCHAR(4000) NULL, + ComplianceUpdated BOOLEAN NULL, + CONSTRAINT covid19testingKey_pk PRIMARY KEY ("Key") +); + +SELECT core.fn_dropifexists('TempScheduler', 'extScheduler', 'TABLE', NULL); + +CREATE TABLE extscheduler.TempScheduler ( + Searchkey INT GENERATED BY DEFAULT AS IDENTITY (START WITH 100) NOT NULL, + usernames VARCHAR(500) NULL, + EventId TEXT NULL, + StartDate TIMESTAMP NULL, + created TIMESTAMP NULL +); + +SELECT core.fn_dropifexists('TempCoV19Interim', 'extScheduler', 'TABLE', NULL); + +CREATE TABLE extscheduler.TempCoV19Interim ( + EventId TEXT NULL, + UserName VARCHAR(1000) NULL, + container TEXT NULL, + notes VARCHAR(100) NULL +); + +SELECT core.fn_dropifexists('TempCoV19Interim', 'extScheduler', 'TABLE', NULL); + +CREATE TABLE extscheduler.TempCoV19Interim ( + EventId TEXT NULL, + UserName VARCHAR(1000) NULL, + container TEXT NULL +); + +SELECT core.fn_dropifexists('TempCoV19Final', 'extScheduler', 'TABLE', NULL); + +CREATE TABLE extscheduler.TempCoV19Final ( + container UNIQUEIDENTIFIER NOT NULL, + UserName VARCHAR(4000) NULL, + UserID INT NULL, + EventID INT NULL, + StartDate TIMESTAMP NULL, + EmployeeID VARCHAR(4000) NULL, + Created TIMESTAMP NULL +); + +/* 21.xxx SQL scripts */ + +ALTER TABLE extscheduler.Resources ADD Instance VARCHAR(50); + +/* 23.xxx SQL scripts */ + +SELECT core.fn_dropifexists('TempCoV19Final', 'extScheduler', 'TABLE', NULL); +SELECT core.fn_dropifexists('covid19testing', 'extScheduler', 'TABLE', NULL); +SELECT core.fn_dropifexists('tempscheduler', 'extScheduler', 'TABLE', NULL); +SELECT core.fn_dropifexists('TempCoV19Interim', 'extScheduler', 'TABLE', NULL); +SELECT core.fn_dropifexists('vw_Covid19Research', 'extScheduler', 'VIEW', NULL); +SELECT core.fn_dropifexists('vw_covid19dcmschedule', 'extScheduler', 'VIEW', NULL); +SELECT core.fn_dropifexists('vw_Covid19DCMDaily', 'extScheduler', 'VIEW', NULL); From bcacdb04d61239a0e1b8779c8312084fffd9e5fb Mon Sep 17 00:00:00 2001 From: Adam Rauch Date: Fri, 21 Aug 2026 17:06:32 -0700 Subject: [PATCH 08/12] Clean up extscheduler and onprc_ehr_compliancedb scripts --- .../onprc_ehr_compliancedb-0.000-25.000.sql | 263 +++++++++-------- .../onprc_ehr_compliancedb-25.000-25.001.sql | 15 +- .../postgresql/extscheduler-0.000-25.000.sql | 274 +----------------- 3 files changed, 146 insertions(+), 406 deletions(-) diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/postgresql/onprc_ehr_compliancedb-0.000-25.000.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/postgresql/onprc_ehr_compliancedb-0.000-25.000.sql index bcf38c5be..baef59ce2 100644 --- a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/postgresql/onprc_ehr_compliancedb-0.000-25.000.sql +++ b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/postgresql/onprc_ehr_compliancedb-0.000-25.000.sql @@ -38,12 +38,6 @@ CREATE TABLE onprc_ehr_compliancedb.SciShield_Reference_Data ); CREATE INDEX IX_ONPRC_EHR_COMPLIANCEDB_SCISHIELD_REFERENCE_DATA_CONTAINER ON onprc_ehr_compliancedb.SciShield_Reference_Data (Container); -/* 24.xxx SQL scripts */ - --- Author: R. Blasa --- Created: 2-10-2024 --- Description: Stored procedure program process SciShield Initial Data - CREATE TABLE onprc_ehr_compliancedb.SciShieldTemp ( searchID INT GENERATED BY DEFAULT AS IDENTITY (START WITH 100 INCREMENT BY 1) NOT NULL, employeeid VARCHAR(500) NULL, @@ -64,23 +58,66 @@ CREATE TABLE onprc_ehr_compliancedb.SciShieldMasterTemp ( rowid INT NULL ); --- Author: R. Blasa --- Created: 2-10-2024 - -/* -** -** Created by -** Blasa 1-25-2024 Import process from ScieShield To Prime Compliance Module -** -** Processed codes: Null ---Not Processed -** 1 ------ Successfully posted -** 2 --------- invalid Employeeid -** 3 --------- Undefined Requirement Name -** 4--------- Already exists Compliance module -** -** -** -*/ +CREATE TABLE onprc_ehr_compliancedb.ComplianceProcedureReport ( + rowid SERIAL NOT NULL, + employeeid VARCHAR(300) NULL, + requirementname VARCHAR(4000) NULL, + unit VARCHAR(500) NULL, + category VARCHAR(500) NULL, + trackingflag VARCHAR(100) NULL, + email VARCHAR(500) NULL, + lastname VARCHAR(500) NULL, + firstname VARCHAR(500) NULL, + host VARCHAR(500) NULL, + supervisor VARCHAR(500) NULL, + trainee_type VARCHAR(500) NULL, + times_completed SMALLINT NULL, + expired_period SMALLINT NULL, + new_expired_period SMALLINT NULL, + mostrecentcompleted_date TIMESTAMP NULL, + comment VARCHAR(4000) NULL, + snooze_date TIMESTAMP NULL, + months_until_renewal DOUBLE PRECISION NULL, + requirement_name_type VARCHAR(1000) NULL +); + +CREATE TABLE onprc_ehr_compliancedb.ComplianceRecentReport ( + rowid SERIAL NOT NULL, + employeeid VARCHAR(300) NULL, + requirementname VARCHAR(4000) NULL, + unit VARCHAR(500) NULL, + category VARCHAR(500) NULL, + trackingflag VARCHAR(100) NULL, + email VARCHAR(500) NULL, + lastname VARCHAR(500) NULL, + firstname VARCHAR(500) NULL, + host VARCHAR(500) NULL, + supervisor VARCHAR(500) NULL, + trainee_type VARCHAR(500) NULL, + times_completed SMALLINT NULL, + expired_period SMALLINT NULL, + new_expired_period SMALLINT NULL, + mostrecentcompleted_date TIMESTAMP NULL, + comment VARCHAR(4000) NULL, + snooze_date TIMESTAMP NULL, + months_until_renewal DOUBLE PRECISION NULL, + requirement_name_type VARCHAR(1000) NULL +); + +CREATE TABLE onprc_ehr_compliancedb.RequirementsPerEmployee ( + RowId SERIAL NOT NULL, + EmployeeId VARCHAR(255) NOT NULL, + RequirementName VARCHAR(255) NOT NULL, + CreatedBy USERID, + Created TIMESTAMP, + ModifiedBy USERID, + Modified TIMESTAMP, + trackingflag VARCHAR(100), + + CONSTRAINT PK_RequirementsPerEmployeename PRIMARY KEY (RowId) +); + +CREATE INDEX IF NOT EXISTS IX_completiondates_trainer ON ehr_compliancedb.completiondates(trainer); CREATE OR REPLACE FUNCTION onprc_ehr_compliancedb.p_SciShieldToPrimeProcess() RETURNS integer AS $$ @@ -194,23 +231,6 @@ EXCEPTION END; $$ LANGUAGE plpgsql; -CREATE INDEX IF NOT EXISTS IX_completiondates_trainer ON ehr_compliancedb.completiondates(trainer); - -SELECT core.fn_dropifexists('p_ComplianceAccesscontainerUpdate', 'onprc_ehr_compliancedb', 'PROCEDURE', NULL); - --- Author: R. Blasa --- Created: 12-10-2024 - -/* -** -** Created by -** Blasa 12-10-2024 Storedprocedure to update string name "ARRS" to "DCM" -** -** -** -** -*/ - CREATE OR REPLACE FUNCTION onprc_ehr_compliancedb.p_ComplianceTranslatestringUpdate() RETURNS integer AS $$ BEGIN @@ -274,74 +294,6 @@ EXCEPTION END; $$ LANGUAGE plpgsql; --- Author: R. Blasa --- Created: 9-20-2024 --- Description: Stored procedure program to create a static data set for Compliance Procedure Recent Test .sql - -CREATE TABLE onprc_ehr_compliancedb.ComplianceProcedureReport ( - rowid SERIAL NOT NULL, - employeeid VARCHAR(300) NULL, - requirementname VARCHAR(4000) NULL, - unit VARCHAR(500) NULL, - category VARCHAR(500) NULL, - trackingflag VARCHAR(100) NULL, - email VARCHAR(500) NULL, - lastname VARCHAR(500) NULL, - firstname VARCHAR(500) NULL, - host VARCHAR(500) NULL, - supervisor VARCHAR(500) NULL, - trainee_type VARCHAR(500) NULL, - times_completed SMALLINT NULL, - expired_period SMALLINT NULL, - new_expired_period SMALLINT NULL, - mostrecentcompleted_date TIMESTAMP NULL, - comment VARCHAR(4000) NULL, - snooze_date TIMESTAMP NULL, - months_until_renewal DOUBLE PRECISION NULL, - requirement_name_type VARCHAR(1000) NULL -); - -CREATE TABLE onprc_ehr_compliancedb.ComplianceRecentReport ( - rowid SERIAL NOT NULL, - employeeid VARCHAR(300) NULL, - requirementname VARCHAR(4000) NULL, - unit VARCHAR(500) NULL, - category VARCHAR(500) NULL, - trackingflag VARCHAR(100) NULL, - email VARCHAR(500) NULL, - lastname VARCHAR(500) NULL, - firstname VARCHAR(500) NULL, - host VARCHAR(500) NULL, - supervisor VARCHAR(500) NULL, - trainee_type VARCHAR(500) NULL, - times_completed SMALLINT NULL, - expired_period SMALLINT NULL, - new_expired_period SMALLINT NULL, - mostrecentcompleted_date TIMESTAMP NULL, - comment VARCHAR(4000) NULL, - snooze_date TIMESTAMP NULL, - months_until_renewal DOUBLE PRECISION NULL, - requirement_name_type VARCHAR(1000) NULL -); - -CREATE TABLE onprc_ehr_compliancedb.RequirementsPerEmployee ( - RowId SERIAL NOT NULL, - EmployeeId VARCHAR(255) NOT NULL, - RequirementName VARCHAR(255) NOT NULL, - CreatedBy USERID, - Created TIMESTAMP, - ModifiedBy USERID, - Modified TIMESTAMP, - trackingflag VARCHAR(100), - - CONSTRAINT PK_RequirementsPerEmployeename PRIMARY KEY (RowId) -); - -SELECT core.fn_dropifexists('p_ComplianceRecentOverDueSoon_Process', 'onprc_ehr_compliancedb', 'PROCEDURE', NULL); - --- Author: R. Blasa --- Created: 9-20-2024 - CREATE OR REPLACE FUNCTION onprc_ehr_compliancedb.p_ComplianceRecentOverDueSoon_Process() RETURNS integer AS $$ BEGIN @@ -665,11 +617,6 @@ EXCEPTION END; $$ LANGUAGE plpgsql; -SELECT core.fn_dropifexists('p_ComplianceProcedureOverDueSoon_Process', 'onprc_ehr_compliancedb', 'PROCEDURE', NULL); - --- Author: R. Blasa --- Created: 9-20-2024 - CREATE OR REPLACE FUNCTION onprc_ehr_compliancedb.p_ComplianceProcedureOverDueSoon_Process() RETURNS integer AS $$ BEGIN @@ -847,6 +794,77 @@ BEGIN UNION + SELECT + a.requirementname, + a.employeeid, + NULL AS unit, + NULL AS category, + 'No' AS trackingflag, + (SELECT h.email FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS email, + (SELECT h.lastname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS lastname, + (SELECT h.firstname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS firstname, + (SELECT h.majorudds FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS host, + (SELECT h.supervisor FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS supervisor, + (SELECT h.type FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS trainee_type, + (SELECT h.type FROM ehr_compliancedb.Requirements h WHERE h.requirementname = a.requirementname) AS requirement_type, + (SELECT count(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) AS timesCompleted, + (SELECT k.expireperiod FROM ehr_compliancedb.Requirements k WHERE k.requirementname = a.requirementname) AS ExpiredPeriod, + ( + SELECT ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING (COALESCE(tt.expireperiod, 0)) > ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + AND (tt.reviewdate IS NOT NULL) + ) AS NewExpirePeriod, + (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) AS MostRecentDate, + ( + SELECT string_agg(DISTINCT yy.comment, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = a.requirementname AND yy.employeeid = a.employeeid + ) AS comment, + ( + SELECT string_agg(DISTINCT yy.snooze_date::text, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = a.requirementname AND yy.employeeid = a.employeeid + ) AS snooze_date, + CAST( + CASE + WHEN (SELECT max(st.date) FROM ehr_compliancedb.completiondates st WHERE st.requirementname = a.requirementname AND st.employeeid = a.employeeid) IS NULL THEN 0 + WHEN (SELECT COALESCE(tt.expireperiod, 0) FROM ehr_compliancedb.requirements tt WHERE tt.requirementname = a.requirementname GROUP BY tt.expireperiod) = 0 THEN NULL + WHEN ( + SELECT count(*) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) > 0 THEN + ( + SELECT (((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date)))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) + ELSE + ( + SELECT COALESCE(tt.expireperiod, 0) - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod + ) + END AS DECIMAL + ) AS MonthsUntilRenewal + FROM ehr_compliancedb.employeerequirementexemptions a + WHERE a.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE a.employeeid = p.employeeid AND p.enddate IS NULL) + AND a.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = a.requirementname AND q.dateDisabled IS NULL) + GROUP BY a.requirementname, a.employeeid + + UNION + SELECT j.requirementname, j.employeeid, @@ -922,25 +940,6 @@ EXCEPTION END; $$ LANGUAGE plpgsql; -SELECT core.fn_dropifexists('p_ComplianceAccesscontainerUpdate', 'onprc_ehr_compliancedb', 'PROCEDURE', NULL); - --- Author: R. Blasa --- Created: 10-2-2024 - -/* -** -** Created by -** Blasa 9-5-2025 Stored procedure to update Compliance Access container values and update -** Completion date records -** . -** -** -** -*/ - --- TODO: Delete this? On PostgreSQL, all GUIDs are lowercase, so this probably won't ever match. But it also looks like --- a one-time fix-up that probably ran long ago on the production DB. - CREATE OR REPLACE FUNCTION onprc_ehr_compliancedb.p_ComplianceAccesscontainerUpdate() RETURNS integer AS $$ BEGIN diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/postgresql/onprc_ehr_compliancedb-25.000-25.001.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/postgresql/onprc_ehr_compliancedb-25.000-25.001.sql index 145b95069..a978fb9ee 100644 --- a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/postgresql/onprc_ehr_compliancedb-25.000-25.001.sql +++ b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/postgresql/onprc_ehr_compliancedb-25.000-25.001.sql @@ -4,11 +4,8 @@ ALTER TABLE onprc_ehr_compliancedb.ComplianceProcedureReport ALTER COLUMN new_ex ALTER TABLE onprc_ehr_compliancedb.ComplianceRecentReport ALTER COLUMN expired_period TYPE VARCHAR(50); ALTER TABLE onprc_ehr_compliancedb.ComplianceRecentReport ALTER COLUMN new_expired_period TYPE VARCHAR(50); -DROP FUNCTION IF EXISTS onprc_ehr_compliancedb.p_ComplianceProcedureOverDueSoon_Process; - -- Author: R. Blasa -- Created: 9-20-2024 - /* ** ** Created by @@ -17,8 +14,6 @@ DROP FUNCTION IF EXISTS onprc_ehr_compliancedb.p_ComplianceProcedureOverDueSoon_ ** ** 1-22-2026 Fix the issues with more than one subquery results ** -** -** */ CREATE OR REPLACE FUNCTION onprc_ehr_compliancedb.p_ComplianceProcedureOverDueSoon_Process() @@ -197,9 +192,9 @@ BEGIN AND a.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = a.requirementname AND q.dateDisabled IS NULL) GROUP BY a.requirementname, a.employeeid + -- Additional requirements for employees that have not completed training, but is required UNION - -- Additional requirements for employees that have not completed training, but is required SELECT j.requirementname, j.employeeid, @@ -275,11 +270,8 @@ EXCEPTION END; $$ LANGUAGE plpgsql; -DROP FUNCTION IF EXISTS onprc_ehr_compliancedb.p_ComplianceProcedureOverDueSoon_Process; - -- Author: R. Blasa -- Created: 9-20-2024 - /* ** ** Created by @@ -288,7 +280,6 @@ DROP FUNCTION IF EXISTS onprc_ehr_compliancedb.p_ComplianceProcedureOverDueSoon_ ** ** 1-22-2026 Fix the issues with more than one subquery results ** -** */ CREATE OR REPLACE FUNCTION onprc_ehr_compliancedb.p_ComplianceRecentOverDueSoon_Process() @@ -467,9 +458,9 @@ BEGIN AND a.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = a.requirementname AND q.dateDisabled IS NULL) GROUP BY a.requirementname, a.employeeid + -- Training that was completed by as an employee training exemptions, and at least completed one, or more times UNION - -- Training that was completed by as an employee training exemptions, and at least completed one, or more times SELECT a.requirementname, a.employeeid, @@ -539,9 +530,9 @@ BEGIN AND a.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = a.requirementname AND q.dateDisabled IS NULL) GROUP BY a.requirementname, a.employeeid + -- Additional requirements for employees that have not completed training, but is required UNION - -- Additional requirements for employees that have not completed training, but is required SELECT j.requirementname, j.employeeid, diff --git a/extscheduler/resources/schemas/dbscripts/postgresql/extscheduler-0.000-25.000.sql b/extscheduler/resources/schemas/dbscripts/postgresql/extscheduler-0.000-25.000.sql index 36e159efd..5d66a74e1 100644 --- a/extscheduler/resources/schemas/dbscripts/postgresql/extscheduler-0.000-25.000.sql +++ b/extscheduler/resources/schemas/dbscripts/postgresql/extscheduler-0.000-25.000.sql @@ -5,6 +5,9 @@ CREATE TABLE extscheduler.Resources Id SERIAL NOT NULL, Name VARCHAR(255) NOT NULL, Color VARCHAR(20), + Room VARCHAR(255), + Bldg VARCHAR(255), + Instance VARCHAR(50), Container ENTITYID NOT NULL, CreatedBy USERID, @@ -20,10 +23,13 @@ CREATE TABLE extscheduler.Events ( Id SERIAL NOT NULL, ResourceId INT NOT NULL, - Name VARCHAR(255) NOT NULL, + Name VARCHAR(255), StartDate TIMESTAMP NOT NULL, EndDate TIMESTAMP NOT NULL, UserId USERID NOT NULL, + Alias VARCHAR(25), + Quantity INT, + Comments VARCHAR(4000), Container ENTITYID NOT NULL, CreatedBy USERID, @@ -33,110 +39,9 @@ CREATE TABLE extscheduler.Events CONSTRAINT PK_events PRIMARY KEY (Id), CONSTRAINT FK_events_ResourceId FOREIGN KEY (ResourceId) REFERENCES extscheduler.Resources(Id), - CONSTRAINT UQ_events_ContainerResourceName UNIQUE (Container, ResourceId, Name) -); - -/* 15.xxx SQL scripts */ - -ALTER TABLE extscheduler.Resources ADD Room VARCHAR(255); -ALTER TABLE extscheduler.Resources ADD Bldg VARCHAR(255); - -ALTER TABLE extscheduler.Events ADD Alias VARCHAR(25); - -CREATE TABLE extscheduler.users -( - Id SERIAL NOT NULL, - PrimeUserID USERID NOT NULL, - FirstName VARCHAR(255) NOT NULL, - LastName VARCHAR(255) NOT NULL, - Email VARCHAR(255) NOT NULL, - Phone VARCHAR(255), - Department VARCHAR(255), - Lab_FirstName VARCHAR(255), - Lab_LastName VARCHAR(255), - FiscalAuthority_Name VARCHAR(255), - FiscalAuthority_Phone VARCHAR(255), - SecurityLevel VARCHAR(255), - Container ENTITYID NOT NULL, - CreatedBy USERID, - Created TIMESTAMP, - ModifiedBy USERID, - Modified TIMESTAMP, - - CONSTRAINT PK_users PRIMARY KEY (Id), - CONSTRAINT FK_users_PrimeUserID FOREIGN KEY (PrimeUserID) REFERENCES core.Usersdata(UserId), - CONSTRAINT UQ_users_ContainerPrimeUserID UNIQUE (Container, PrimeUserID) -); - -DROP TABLE extscheduler.users; - -CREATE TABLE extscheduler.users -( - Id SERIAL NOT NULL, - PrimeUserID USERID NOT NULL, - FirstName VARCHAR(255) NOT NULL, - LastName VARCHAR(255) NOT NULL, - Email VARCHAR(255) NOT NULL, - Phone VARCHAR(255), - Department VARCHAR(255), - Lab_FirstName VARCHAR(255), - Lab_LastName VARCHAR(255), - FiscalAuthority_Name VARCHAR(255), - FiscalAuthority_Phone VARCHAR(255), - SecurityLevel VARCHAR(255), - Container ENTITYID NOT NULL, - CreatedBy USERID, - Created TIMESTAMP, - ModifiedBy USERID, - Modified TIMESTAMP, - - CONSTRAINT PK_users PRIMARY KEY (Id), - CONSTRAINT FK_users_PrimeUserID FOREIGN KEY (PrimeUserID) REFERENCES core.Usersdata(UserId), - CONSTRAINT UQ_users_ContainerPrimeUserID UNIQUE (Container, PrimeUserID) + CONSTRAINT CHK_event_DateRangeValid CHECK (StartDate <= EndDate) ); -ALTER TABLE extscheduler.events DROP CONSTRAINT UQ_events_ContainerResourceName; -ALTER TABLE extscheduler.events ADD CONSTRAINT CHK_event_DateRangeValid CHECK (StartDate <= EndDate); - -CREATE OR REPLACE FUNCTION extscheduler.tr_overlappingdateranges() RETURNS TRIGGER AS $$ -BEGIN - IF EXISTS( - SELECT 1 FROM extscheduler.events R - WHERE (R.Container = NEW.Container AND R.ResourceId = NEW.ResourceId AND R.StartDate < NEW.EndDate AND NEW.StartDate < R.EndDate) - AND NOT (R.Container = NEW.Container AND R.ResourceId = NEW.ResourceId AND R.StartDate = NEW.StartDate AND NEW.EndDate = R.EndDate) - ) THEN - RAISE EXCEPTION 'Start/End date ranges may not overlap for the same resource.'; - END IF; - RETURN NEW; -END; -$$ LANGUAGE plpgsql; - -CREATE TRIGGER TR_OverlappingDateRanges - BEFORE INSERT OR UPDATE ON extscheduler.events - FOR EACH ROW - EXECUTE FUNCTION extscheduler.tr_overlappingdateranges(); - -ALTER TABLE extscheduler.events ALTER COLUMN Name DROP NOT NULL; - -DROP TABLE extscheduler.users; - -CREATE OR REPLACE FUNCTION extscheduler.tr_overlappingdateranges() RETURNS TRIGGER AS $$ -BEGIN - IF EXISTS( - SELECT 1 FROM extscheduler.events R - WHERE (R.Container = NEW.Container AND R.ResourceId = NEW.ResourceId AND R.StartDate < NEW.EndDate AND NEW.StartDate < R.EndDate) - AND NOT (R.Id = NEW.Id) - ) THEN - RAISE EXCEPTION 'Start/End date ranges may not overlap for the same resource.'; - END IF; - RETURN NEW; -END; -$$ LANGUAGE plpgsql; - -ALTER TABLE extscheduler.Events ADD Quantity INT; - -ALTER TABLE extscheduler.Events ADD Comments VARCHAR(255); - CREATE OR REPLACE FUNCTION extscheduler.tr_overlappingdateranges() RETURNS TRIGGER AS $$ BEGIN IF EXISTS( @@ -157,21 +62,10 @@ BEGIN END; $$ LANGUAGE plpgsql; -/* 20.xxx SQL scripts */ - -/* -Created: 2020-05-07 -Created by jonesga -Purpose: Update of Comments field of scheduler per user request -*/ -ALTER TABLE extscheduler.Events ALTER COLUMN Comments TYPE VARCHAR(4000); - -/* -Created: 2020-05-07 -Created by jonesga -Purpose: Dataset to mimic DateRange from Labkey for SCheduler actionin SQL -*/ -SELECT core.fn_dropifexists('DateParts', 'extScheduler', 'TABLE', NULL); +CREATE TRIGGER TR_OverlappingDateRanges + BEFORE INSERT OR UPDATE ON extscheduler.events + FOR EACH ROW + EXECUTE FUNCTION extscheduler.tr_overlappingdateranges(); CREATE TABLE extScheduler.dateParts ( @@ -212,13 +106,6 @@ SELECT FROM (SELECT CAST('2020-05-01' AS TIMESTAMP) + (i.value * INTERVAL '1 day') AS NDate FROM ldk.integers i) i WHERE i.NDate <= '2021-04-20'; --- ============================================= --- Author: jonesga@ohsu.edu --- Create date: 2020-05-13 --- Description: PRocedure to Block out Scheduling for Covid19 testing for 3:30 to 7 PM on Monday and Friday --- ============================================= -SELECT core.fn_dropifexists('extBlockOutEvening', 'extscheduler', 'PROCEDURE', NULL); - CREATE OR REPLACE PROCEDURE extscheduler.extBlockOutEvening( _Month INTEGER, _ResourceID INTEGER @@ -255,13 +142,6 @@ BEGIN END; $$; --- ============================================= --- Author: jonesga@ohsu.edu --- Create date: 2020-05-13 --- Description: PRocedure to Block out Scheduling for Covid19 testing for 7 to 8 on Monday and Friday --- ============================================= -SELECT core.fn_dropifexists('extBlockOutMorning', 'extscheduler', 'PROCEDURE', NULL); - CREATE OR REPLACE PROCEDURE extscheduler.extBlockOutMorning( _Month INTEGER, _ResourceID INTEGER @@ -298,13 +178,6 @@ BEGIN END; $$; --- ============================================= --- Author: jonesga@ohsu.edu --- Create date: 2020-05-13 --- Description: PRocedure to Block out Scheduling for Covid19 testing for all days except Monday and Friday --- ============================================= -SELECT core.fn_dropifexists('extBlockOutDays', 'extscheduler', 'PROCEDURE', NULL); - CREATE OR REPLACE PROCEDURE extscheduler.extBlockOutDays( _Month INTEGER, _ResourceID INTEGER @@ -340,126 +213,3 @@ BEGIN WHERE c.dayofWeek IN (1, 3, 4, 5, 7) AND c.Month = _Month; END; $$; - -SELECT core.fn_dropifexists('vw_Covid19Research', 'extScheduler', 'VIEW', NULL); - -CREATE VIEW extScheduler.vw_Covid19Research AS -SELECT extscheduler.Events.Id AS SChedulerID, extscheduler.Events.ResourceId, extscheduler.Resources.Name AS ResourceName, extscheduler.Events.Name, extscheduler.Events.StartDate, extscheduler.Events.UserId, - extscheduler.Events.CreatedBy, extscheduler.Events.Created, extscheduler.Events.Quantity, core.UsersData.IM AS EmployeeID -FROM extscheduler.Events LEFT OUTER JOIN - core.UsersData ON extscheduler.Events.UserId = core.UsersData.UserId LEFT OUTER JOIN - extscheduler.Resources ON extscheduler.Events.ResourceId = extscheduler.Resources.Id -WHERE (extscheduler.Events.ResourceId = 67); - -SELECT core.fn_dropifexists('vw_Covid19DCMSchedule', 'extScheduler', 'VIEW', NULL); - -CREATE VIEW extScheduler.vw_Covid19DCMSchedule AS -SELECT extscheduler.Events.Id AS SChedulerID, extscheduler.Events.ResourceId, extscheduler.Resources.Name AS ResourceName, extscheduler.Events.Name, extscheduler.Events.StartDate, extscheduler.Events.UserId, - extscheduler.Events.CreatedBy, extscheduler.Events.Created, extscheduler.Events.Quantity, core.UsersData.IM AS EmployeeID - FROM extscheduler.Events LEFT OUTER JOIN - core.UsersData ON extscheduler.Events.UserId = core.UsersData.UserId LEFT OUTER JOIN - extscheduler.Resources ON extscheduler.Events.ResourceId = extscheduler.Resources.Id - WHERE (extscheduler.Resources.Name LIKE 'DCM%'); - -SELECT core.fn_dropifexists('Covid19Testing', 'extScheduler', 'TABLE', NULL); - -CREATE TABLE extScheduler.Covid19Testing ( - container ENTITYID NOT NULL, - entityId ENTITYID NOT NULL, - lastIndexed TIMESTAMP NULL, - createdBy INT NULL, - modified TIMESTAMP NULL, - modifiedBy INT NULL, - created TIMESTAMP NULL, - "Key" SERIAL NOT NULL, - SchedulerID INT NULL, - ResourceID INT NULL, - UserName VARCHAR(4000) NULL, - UserID INT NULL, - EmployeeID VARCHAR(4000) NULL, - ScheduledDate TIMESTAMP NULL, - ScheduledTime TIMESTAMP NULL, - "Create" TIMESTAMP NULL, - SampleDate VARCHAR(4000) NULL, - CreatedB VARCHAR(4000) NULL, - ComplianceUpdated BOOLEAN NULL, - CONSTRAINT covid19testing_pk PRIMARY KEY ("Key") -); - -SELECT core.fn_dropifexists('Covid19Testing', 'extScheduler', 'TABLE', NULL); - -CREATE TABLE extScheduler.Covid19Testing ( - container ENTITYID NOT NULL, - entityId ENTITYID NOT NULL, - lastIndexed TIMESTAMP NULL, - createdBy INT NULL, - modified TIMESTAMP NULL, - modifiedBy INT NULL, - created TIMESTAMP NULL, - "Key" SERIAL NOT NULL, - SchedulerID INT NULL, - ResourceID INT NULL, - UserName VARCHAR(4000) NULL, - UserID INT NULL, - EmployeeID VARCHAR(4000) NULL, - ScheduledDate TIMESTAMP NULL, - ScheduledTime TIMESTAMP NULL, - "Create" TIMESTAMP NULL, - SampleDate VARCHAR(4000) NULL, - CreatedB VARCHAR(4000) NULL, - ComplianceUpdated BOOLEAN NULL, - CONSTRAINT covid19testingKey_pk PRIMARY KEY ("Key") -); - -SELECT core.fn_dropifexists('TempScheduler', 'extScheduler', 'TABLE', NULL); - -CREATE TABLE extscheduler.TempScheduler ( - Searchkey INT GENERATED BY DEFAULT AS IDENTITY (START WITH 100) NOT NULL, - usernames VARCHAR(500) NULL, - EventId TEXT NULL, - StartDate TIMESTAMP NULL, - created TIMESTAMP NULL -); - -SELECT core.fn_dropifexists('TempCoV19Interim', 'extScheduler', 'TABLE', NULL); - -CREATE TABLE extscheduler.TempCoV19Interim ( - EventId TEXT NULL, - UserName VARCHAR(1000) NULL, - container TEXT NULL, - notes VARCHAR(100) NULL -); - -SELECT core.fn_dropifexists('TempCoV19Interim', 'extScheduler', 'TABLE', NULL); - -CREATE TABLE extscheduler.TempCoV19Interim ( - EventId TEXT NULL, - UserName VARCHAR(1000) NULL, - container TEXT NULL -); - -SELECT core.fn_dropifexists('TempCoV19Final', 'extScheduler', 'TABLE', NULL); - -CREATE TABLE extscheduler.TempCoV19Final ( - container UNIQUEIDENTIFIER NOT NULL, - UserName VARCHAR(4000) NULL, - UserID INT NULL, - EventID INT NULL, - StartDate TIMESTAMP NULL, - EmployeeID VARCHAR(4000) NULL, - Created TIMESTAMP NULL -); - -/* 21.xxx SQL scripts */ - -ALTER TABLE extscheduler.Resources ADD Instance VARCHAR(50); - -/* 23.xxx SQL scripts */ - -SELECT core.fn_dropifexists('TempCoV19Final', 'extScheduler', 'TABLE', NULL); -SELECT core.fn_dropifexists('covid19testing', 'extScheduler', 'TABLE', NULL); -SELECT core.fn_dropifexists('tempscheduler', 'extScheduler', 'TABLE', NULL); -SELECT core.fn_dropifexists('TempCoV19Interim', 'extScheduler', 'TABLE', NULL); -SELECT core.fn_dropifexists('vw_Covid19Research', 'extScheduler', 'VIEW', NULL); -SELECT core.fn_dropifexists('vw_covid19dcmschedule', 'extScheduler', 'VIEW', NULL); -SELECT core.fn_dropifexists('vw_Covid19DCMDaily', 'extScheduler', 'VIEW', NULL); From 530bd09377d65c388505d75257e273f7aa512816 Mon Sep 17 00:00:00 2001 From: Adam Rauch Date: Sat, 22 Aug 2026 10:04:14 -0700 Subject: [PATCH 09/12] Comment on fishy interval --- .../schemas/dbscripts/postgresql/extscheduler-0.000-25.000.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extscheduler/resources/schemas/dbscripts/postgresql/extscheduler-0.000-25.000.sql b/extscheduler/resources/schemas/dbscripts/postgresql/extscheduler-0.000-25.000.sql index 5d66a74e1..ea7ee6b7c 100644 --- a/extscheduler/resources/schemas/dbscripts/postgresql/extscheduler-0.000-25.000.sql +++ b/extscheduler/resources/schemas/dbscripts/postgresql/extscheduler-0.000-25.000.sql @@ -129,7 +129,7 @@ BEGIN SELECT _ResourceID, 'No Covid-19 Testing', - c.date + INTERVAL '1530 hours', + c.date + INTERVAL '1530 hours', -- TODO: Claude flagged this as a likely bug (also in SQL Server). This is 63.75 days. c.date + INTERVAL '19 hours', 1003, '5C3C9FF8-6BCF-1038-930A-7D62F3A605B4', From bd059d8cdf51d69ee26f7b200bae8a1f2549b607 Mon Sep 17 00:00:00 2001 From: Marty Pradere Date: Mon, 24 Aug 2026 19:20:23 -0600 Subject: [PATCH 10/12] Fix case sensitivity and identifier quoting in ported PostgreSQL scripts The ExtScheduler overlap trigger carried the T-SQL spelling `PropertySets."Set"` into PostgreSQL, where the column is declared unquoted and therefore folds to lowercase `set`. Quoted identifiers are matched exactly, so the join referenced a column that does not exist. plpgsql does not plan a function body until first execution, so the install succeeded and every subsequent insert or update of an extscheduler.events row would have failed. `p_SciShieldToPrimeProcess` and `p_ComplianceTranslatestringUpdate` relied on SQL Server's case-insensitive default collation. The SciShield import lowercases the employee id before matching, which found nothing on PostgreSQL and silently marked every incoming record as an invalid employee id; the lookups now compare with `lower()` on both sides and the insert writes the spelling stored in ehr_compliancedb.employees so the completiondates foreign key resolves. The "arrs" to "DCM" rename now uses `ILIKE` and `regexp_replace(..., 'gi')` so it reaches values that are not already lowercase. Container EntityIds are a native `uniqueidentifier` on SQL Server but a `VARCHAR(36)` domain on PostgreSQL, and LabKey generates them in lowercase, so the hardcoded uppercase GUID literals matched nothing and wrote rows into a container that resolves to no folder. Lowercased in the PostgreSQL scripts only; the SQL Server scripts are correct as written. --- .../onprc_ehr_compliancedb-0.000-25.000.sql | 84 ++++++++++--------- .../postgresql/extscheduler-0.000-25.000.sql | 8 +- 2 files changed, 50 insertions(+), 42 deletions(-) diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/postgresql/onprc_ehr_compliancedb-0.000-25.000.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/postgresql/onprc_ehr_compliancedb-0.000-25.000.sql index baef59ce2..1c44277c3 100644 --- a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/postgresql/onprc_ehr_compliancedb-0.000-25.000.sql +++ b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/postgresql/onprc_ehr_compliancedb-0.000-25.000.sql @@ -125,6 +125,7 @@ DECLARE _requirementnameFinal VARCHAR(2000); _requirementname VARCHAR(2000); _employeeid VARCHAR(500); + _employeeidFinal VARCHAR(500); _Completiondate TIMESTAMP; _SciShieldID INT; rec RECORD; @@ -156,19 +157,20 @@ BEGIN _requirementnameFinal := ''; _requirementname := COALESCE(rec.requirementname, ''); _employeeid := TRIM(LOWER(COALESCE(rec.employeeid, ''))); + _employeeidFinal := NULL; _Completiondate := rec.completeddate; _SciShieldID := rec.rowid; -- Validate requirementname - IF EXISTS (SELECT 1 FROM onprc_ehr_compliancedb.SciShield_Reference_Data WHERE label = _requirementname AND columnname = 'requirementname') THEN + IF EXISTS (SELECT 1 FROM onprc_ehr_compliancedb.SciShield_Reference_Data WHERE lower(label) = lower(_requirementname) AND lower(columnname) = 'requirementname') THEN SELECT value INTO _requirementnameFinal FROM onprc_ehr_compliancedb.SciShield_Reference_Data - WHERE label = _requirementname AND columnname = 'requirementname' + WHERE lower(label) = lower(_requirementname) AND lower(columnname) = 'requirementname' LIMIT 1; - ELSIF EXISTS (SELECT 1 FROM ehr_compliancedb.requirements WHERE requirementname = _requirementname) THEN + ELSIF EXISTS (SELECT 1 FROM ehr_compliancedb.requirements WHERE lower(requirementname) = lower(_requirementname)) THEN SELECT requirementname INTO _requirementnameFinal FROM ehr_compliancedb.requirements - WHERE requirementname = _requirementname + WHERE lower(requirementname) = lower(_requirementname) LIMIT 1; ELSE UPDATE onprc_ehr_compliancedb.SciShield_Data ss @@ -179,7 +181,7 @@ BEGIN END IF; -- Validate if the record already exists - IF EXISTS (SELECT 1 FROM ehr_compliancedb.completiondates WHERE employeeid = _employeeid AND requirementname = _requirementnameFinal AND date = _Completiondate) THEN + IF EXISTS (SELECT 1 FROM ehr_compliancedb.completiondates WHERE lower(employeeid) = _employeeid AND lower(requirementname) = lower(_requirementnameFinal) AND date = _Completiondate) THEN UPDATE onprc_ehr_compliancedb.SciShield_Data ss SET processed = 4 WHERE ss.rowid = _SciShieldID; @@ -187,8 +189,14 @@ BEGIN CONTINUE; END IF; - -- Validate if the employeeid is defined - IF NOT EXISTS (SELECT 1 FROM ehr_compliancedb.employees WHERE employeeid = _employeeid AND enddate IS NULL) THEN + -- Validate if the employeeid is defined. Keep the stored spelling: the lowercased search key + -- would violate the completiondates -> employees foreign key on insert. + SELECT employeeid INTO _employeeidFinal + FROM ehr_compliancedb.employees + WHERE lower(employeeid) = _employeeid AND enddate IS NULL + LIMIT 1; + + IF _employeeidFinal IS NULL THEN UPDATE onprc_ehr_compliancedb.SciShield_Data ss SET processed = 2 WHERE ss.rowid = _SciShieldID; @@ -197,11 +205,11 @@ BEGIN END IF; -- If all previous version were validated proceed with the record insert - IF NOT EXISTS (SELECT 1 FROM ehr_compliancedb.completiondates WHERE employeeid = _employeeid AND requirementname = _requirementnameFinal AND date = _Completiondate) THEN + IF NOT EXISTS (SELECT 1 FROM ehr_compliancedb.completiondates WHERE lower(employeeid) = _employeeid AND lower(requirementname) = lower(_requirementnameFinal) AND date = _Completiondate) THEN INSERT INTO ehr_compliancedb.completiondates (employeeid, requirementname, date, trainer, container, created, createdby, modified, modifiedby) VALUES - (_employeeid, _requirementnameFinal, _Completiondate, 'ONLINE TRAINING', 'CD170458-C55F-102F-9907-5107380A54BE', now(), 2595, now(), 2595); + (_employeeidFinal, _requirementnameFinal, _Completiondate, 'ONLINE TRAINING', 'cd170458-c55f-102f-9907-5107380a54be', now(), 2595, now(), 2595); UPDATE onprc_ehr_compliancedb.SciShield_Data ss SET processed = 1 @@ -234,56 +242,56 @@ $$ LANGUAGE plpgsql; CREATE OR REPLACE FUNCTION onprc_ehr_compliancedb.p_ComplianceTranslatestringUpdate() RETURNS integer AS $$ BEGIN - IF EXISTS (SELECT 1 FROM ehr_compliancedb.EmployeePerUnit WHERE unit LIKE '%arrs%') THEN - UPDATE ehr_compliancedb.EmployeePerUnit SET unit = replace(unit, 'arrs', 'DCM'); + IF EXISTS (SELECT 1 FROM ehr_compliancedb.EmployeePerUnit WHERE unit ILIKE '%arrs%') THEN + UPDATE ehr_compliancedb.EmployeePerUnit SET unit = regexp_replace(unit, 'arrs', 'DCM', 'gi'); END IF; - IF EXISTS (SELECT 1 FROM ehr_compliancedb.EmployeePerUnit WHERE category LIKE '%arrs%') THEN - UPDATE ehr_compliancedb.EmployeePerUnit SET category = replace(category, 'arrs', 'DCM'); + IF EXISTS (SELECT 1 FROM ehr_compliancedb.EmployeePerUnit WHERE category ILIKE '%arrs%') THEN + UPDATE ehr_compliancedb.EmployeePerUnit SET category = regexp_replace(category, 'arrs', 'DCM', 'gi'); END IF; - IF EXISTS (SELECT 1 FROM ehr_compliancedb.Employees WHERE majorudds LIKE '%arrs%') THEN - UPDATE ehr_compliancedb.Employees SET majorudds = replace(majorudds, 'arrs', 'DCM'); + IF EXISTS (SELECT 1 FROM ehr_compliancedb.Employees WHERE majorudds ILIKE '%arrs%') THEN + UPDATE ehr_compliancedb.Employees SET majorudds = regexp_replace(majorudds, 'arrs', 'DCM', 'gi'); END IF; - IF EXISTS (SELECT 1 FROM ehr_compliancedb.Employees WHERE unit LIKE '%arrs%') THEN - UPDATE ehr_compliancedb.Employees SET unit = replace(unit, 'arrs', 'DCM'); + IF EXISTS (SELECT 1 FROM ehr_compliancedb.Employees WHERE unit ILIKE '%arrs%') THEN + UPDATE ehr_compliancedb.Employees SET unit = regexp_replace(unit, 'arrs', 'DCM', 'gi'); END IF; - IF EXISTS (SELECT 1 FROM ehr_compliancedb.Employees WHERE category LIKE '%arrs%') THEN - UPDATE ehr_compliancedb.Employees SET category = replace(category, 'arrs', 'DCM'); + IF EXISTS (SELECT 1 FROM ehr_compliancedb.Employees WHERE category ILIKE '%arrs%') THEN + UPDATE ehr_compliancedb.Employees SET category = regexp_replace(category, 'arrs', 'DCM', 'gi'); END IF; - IF EXISTS (SELECT 1 FROM ehr_compliancedb.requirements WHERE requirementname LIKE '%arrs%') THEN - UPDATE ehr_compliancedb.requirements SET requirementname = replace(requirementname, 'arrs', 'DCM'); + IF EXISTS (SELECT 1 FROM ehr_compliancedb.requirements WHERE requirementname ILIKE '%arrs%') THEN + UPDATE ehr_compliancedb.requirements SET requirementname = regexp_replace(requirementname, 'arrs', 'DCM', 'gi'); END IF; - IF EXISTS (SELECT 1 FROM ehr_compliancedb.EmployeeRequirementExemptions WHERE requirementname LIKE '%arrs%') THEN - UPDATE ehr_compliancedb.EmployeeRequirementExemptions SET requirementname = replace(requirementname, 'arrs', 'DCM'); + IF EXISTS (SELECT 1 FROM ehr_compliancedb.EmployeeRequirementExemptions WHERE requirementname ILIKE '%arrs%') THEN + UPDATE ehr_compliancedb.EmployeeRequirementExemptions SET requirementname = regexp_replace(requirementname, 'arrs', 'DCM', 'gi'); END IF; - IF EXISTS (SELECT 1 FROM ehr_compliancedb.unit_names WHERE unit LIKE '%arrs%') THEN - UPDATE ehr_compliancedb.unit_names SET unit = replace(unit, 'arrs', 'DCM'); + IF EXISTS (SELECT 1 FROM ehr_compliancedb.unit_names WHERE unit ILIKE '%arrs%') THEN + UPDATE ehr_compliancedb.unit_names SET unit = regexp_replace(unit, 'arrs', 'DCM', 'gi'); END IF; - IF EXISTS (SELECT 1 FROM ehr_compliancedb.RequirementsPerCategory WHERE RequirementName LIKE '%arrs%') THEN - UPDATE ehr_compliancedb.RequirementsPerCategory SET requirementname = replace(requirementname, 'arrs', 'DCM'); + IF EXISTS (SELECT 1 FROM ehr_compliancedb.RequirementsPerCategory WHERE RequirementName ILIKE '%arrs%') THEN + UPDATE ehr_compliancedb.RequirementsPerCategory SET requirementname = regexp_replace(requirementname, 'arrs', 'DCM', 'gi'); END IF; - IF EXISTS (SELECT 1 FROM ehr_compliancedb.RequirementsPerCategory WHERE category LIKE '%arrs%') THEN - UPDATE ehr_compliancedb.RequirementsPerCategory SET category = replace(category, 'arrs', 'DCM'); + IF EXISTS (SELECT 1 FROM ehr_compliancedb.RequirementsPerCategory WHERE category ILIKE '%arrs%') THEN + UPDATE ehr_compliancedb.RequirementsPerCategory SET category = regexp_replace(category, 'arrs', 'DCM', 'gi'); END IF; - IF EXISTS (SELECT 1 FROM ehr_compliancedb.RequirementsPerCategory WHERE unit LIKE '%arrs%') THEN - UPDATE ehr_compliancedb.RequirementsPerCategory SET unit = replace(unit, 'arrs', 'DCM'); + IF EXISTS (SELECT 1 FROM ehr_compliancedb.RequirementsPerCategory WHERE unit ILIKE '%arrs%') THEN + UPDATE ehr_compliancedb.RequirementsPerCategory SET unit = regexp_replace(unit, 'arrs', 'DCM', 'gi'); END IF; - IF EXISTS (SELECT 1 FROM ehr_compliancedb.completiondates WHERE requirementname LIKE '%arrs%') THEN - UPDATE ehr_compliancedb.completiondates SET requirementname = replace(requirementname, 'arrs', 'DCM'); + IF EXISTS (SELECT 1 FROM ehr_compliancedb.completiondates WHERE requirementname ILIKE '%arrs%') THEN + UPDATE ehr_compliancedb.completiondates SET requirementname = regexp_replace(requirementname, 'arrs', 'DCM', 'gi'); END IF; - IF EXISTS (SELECT 1 FROM ehr_compliancedb.EmployeeCategory WHERE categoryname LIKE '%arrs%') THEN - UPDATE ehr_compliancedb.EmployeeCategory SET categoryname = replace(categoryname, 'arrs', 'DCM'); + IF EXISTS (SELECT 1 FROM ehr_compliancedb.EmployeeCategory WHERE categoryname ILIKE '%arrs%') THEN + UPDATE ehr_compliancedb.EmployeeCategory SET categoryname = regexp_replace(categoryname, 'arrs', 'DCM', 'gi'); END IF; RETURN 0; @@ -943,10 +951,10 @@ $$ LANGUAGE plpgsql; CREATE OR REPLACE FUNCTION onprc_ehr_compliancedb.p_ComplianceAccesscontainerUpdate() RETURNS integer AS $$ BEGIN - IF EXISTS (SELECT 1 FROM ehr_compliancedb.completiondates WHERE container = 'F1C05E2D-618D-103D-ABC9-9814909BFFCD') THEN + IF EXISTS (SELECT 1 FROM ehr_compliancedb.completiondates WHERE container = 'f1c05e2d-618d-103d-abc9-9814909bffcd') THEN UPDATE ehr_compliancedb.completiondates - SET container = 'CD170458-C55F-102F-9907-5107380A54BE' - WHERE container = 'F1C05E2D-618D-103D-ABC9-9814909BFFCD'; + SET container = 'cd170458-c55f-102f-9907-5107380a54be' + WHERE container = 'f1c05e2d-618d-103d-abc9-9814909bffcd'; END IF; RETURN 0; diff --git a/extscheduler/resources/schemas/dbscripts/postgresql/extscheduler-0.000-25.000.sql b/extscheduler/resources/schemas/dbscripts/postgresql/extscheduler-0.000-25.000.sql index ea7ee6b7c..6a7a737bf 100644 --- a/extscheduler/resources/schemas/dbscripts/postgresql/extscheduler-0.000-25.000.sql +++ b/extscheduler/resources/schemas/dbscripts/postgresql/extscheduler-0.000-25.000.sql @@ -48,7 +48,7 @@ BEGIN SELECT 1 FROM extscheduler.events R LEFT JOIN ( SELECT ObjectId, Value FROM prop.Properties - JOIN prop.PropertySets ON PropertySets."Set" = Properties."Set" + JOIN prop.PropertySets ON PropertySets.Set = Properties.Set WHERE Name = 'ExtSchedulerAllowEventOverlap' ) P ON R.Container = P.ObjectId WHERE (P.Value IS NULL OR P.Value = 'false') AND ( @@ -132,7 +132,7 @@ BEGIN c.date + INTERVAL '1530 hours', -- TODO: Claude flagged this as a likely bug (also in SQL Server). This is 63.75 days. c.date + INTERVAL '19 hours', 1003, - '5C3C9FF8-6BCF-1038-930A-7D62F3A605B4', + '5c3c9ff8-6bcf-1038-930a-7d62f3a605b4', 1003, NOW(), 1, @@ -168,7 +168,7 @@ BEGIN c.date + INTERVAL '7 hours', c.date + INTERVAL '8 hours', 1003, - '5C3C9FF8-6BCF-1038-930A-7D62F3A605B4', + '5c3c9ff8-6bcf-1038-930a-7d62f3a605b4', 1003, NOW(), 1, @@ -204,7 +204,7 @@ BEGIN c.date + INTERVAL '7 hours', c.date + INTERVAL '19 hours', 1003, - '5C3C9FF8-6BCF-1038-930A-7D62F3A605B4', + '5c3c9ff8-6bcf-1038-930a-7d62f3a605b4', 1003, NOW(), 1, From 568648e0eb4c968df8420e9c647a61d2148ba1a4 Mon Sep 17 00:00:00 2001 From: Marty Pradere Date: Mon, 24 Aug 2026 19:26:26 -0600 Subject: [PATCH 11/12] Match unit and category case-insensitively in compliance report procedures The two report procedures join ehr_compliancedb.employeeperunit to ehr_compliancedb.requirementspercategory on `unit` or `category`. requirementspercategory constrains both columns with foreign keys to unit_names and employeecategory, but employeeperunit has no constraints at all, so its values are uncontrolled free text. SQL Server's case-insensitive collation absorbed any drift; on PostgreSQL a `DCM` against a `dcm` silently drops the employee from the compliance report rather than raising anything. Applied to all six joins in each of the bootstrap and 25.000-25.001 scripts. NULL behavior is unchanged: employeeperunit.unit and .category are nullable, and `lower(NULL) = lower(NULL)` is NULL just as `NULL = NULL` was. --- .../onprc_ehr_compliancedb-0.000-25.000.sql | 12 ++++++------ .../onprc_ehr_compliancedb-25.000-25.001.sql | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/postgresql/onprc_ehr_compliancedb-0.000-25.000.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/postgresql/onprc_ehr_compliancedb-0.000-25.000.sql index 1c44277c3..99b145599 100644 --- a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/postgresql/onprc_ehr_compliancedb-0.000-25.000.sql +++ b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/postgresql/onprc_ehr_compliancedb-0.000-25.000.sql @@ -394,7 +394,7 @@ BEGIN END AS DOUBLE PRECISION ) AS MonthsUntilRenewal FROM ehr_compliancedb.employeeperunit a, ehr_compliancedb.requirementspercategory b - WHERE (a.unit = b.unit OR a.category = b.category) + WHERE (lower(a.unit) = lower(b.unit) OR lower(a.category) = lower(b.category)) AND b.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE a.employeeid = t.employeeid AND b.requirementname = t.requirementname) AND a.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE a.employeeid = p.employeeid AND p.enddate IS NULL) AND b.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = b.requirementname AND q.dateDisabled IS NULL) @@ -470,7 +470,7 @@ BEGIN WHERE a.requirementname NOT IN ( SELECT DISTINCT h.requirementname FROM ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h - WHERE (k.unit = h.unit OR k.category = h.category) AND a.employeeid = k.employeeid + WHERE (lower(k.unit) = lower(h.unit) OR lower(k.category) = lower(h.category)) AND a.employeeid = k.employeeid ) AND a.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE a.employeeid = t.employeeid AND a.requirementname = t.requirementname) AND a.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE a.employeeid = p.employeeid AND p.enddate IS NULL) @@ -610,7 +610,7 @@ BEGIN AND j.requirementname NOT IN ( SELECT DISTINCT h.requirementname FROM ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h - WHERE (k.unit = h.unit OR k.category = h.category) AND j.employeeid = k.employeeid + WHERE (lower(k.unit) = lower(h.unit) OR lower(k.category) = lower(h.category)) AND j.employeeid = k.employeeid ) AND j.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE j.employeeid = t.employeeid AND j.requirementname = t.requirementname) AND j.requirementname NOT IN (SELECT DISTINCT k.requirementname FROM ehr_compliancedb.completiondates k WHERE k.employeeid = j.employeeid) @@ -717,7 +717,7 @@ BEGIN END AS DOUBLE PRECISION ) AS MonthsUntilRenewal FROM ehr_compliancedb.employeeperunit a, ehr_compliancedb.requirementspercategory b - WHERE (a.unit = b.unit OR a.category = b.category) + WHERE (lower(a.unit) = lower(b.unit) OR lower(a.category) = lower(b.category)) AND b.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE a.employeeid = t.employeeid AND b.requirementname = t.requirementname) AND a.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE a.employeeid = p.employeeid AND p.enddate IS NULL) AND b.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = b.requirementname AND q.dateDisabled IS NULL) @@ -793,7 +793,7 @@ BEGIN WHERE a.requirementname NOT IN ( SELECT DISTINCT h.requirementname FROM ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h - WHERE (k.unit = h.unit OR k.category = h.category) AND a.employeeid = k.employeeid + WHERE (lower(k.unit) = lower(h.unit) OR lower(k.category) = lower(h.category)) AND a.employeeid = k.employeeid ) AND a.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE a.employeeid = t.employeeid AND a.requirementname = t.requirementname) AND a.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE a.employeeid = p.employeeid AND p.enddate IS NULL) @@ -933,7 +933,7 @@ BEGIN AND j.requirementname NOT IN ( SELECT DISTINCT h.requirementname FROM ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h - WHERE (k.unit = h.unit OR k.category = h.category) AND j.employeeid = k.employeeid + WHERE (lower(k.unit) = lower(h.unit) OR lower(k.category) = lower(h.category)) AND j.employeeid = k.employeeid ) AND j.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE j.employeeid = t.employeeid AND j.requirementname = t.requirementname) AND j.requirementname NOT IN (SELECT DISTINCT k.requirementname FROM ehr_compliancedb.completiondates k WHERE k.employeeid = j.employeeid) diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/postgresql/onprc_ehr_compliancedb-25.000-25.001.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/postgresql/onprc_ehr_compliancedb-25.000-25.001.sql index a978fb9ee..d7a7b9295 100644 --- a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/postgresql/onprc_ehr_compliancedb-25.000-25.001.sql +++ b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/postgresql/onprc_ehr_compliancedb-25.000-25.001.sql @@ -109,7 +109,7 @@ BEGIN END AS DOUBLE PRECISION ) AS MonthsUntilRenewal FROM ehr_compliancedb.employeeperunit a, ehr_compliancedb.requirementspercategory b - WHERE (a.unit = b.unit OR a.category = b.category) + WHERE (lower(a.unit) = lower(b.unit) OR lower(a.category) = lower(b.category)) AND b.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE a.employeeid = t.employeeid AND b.requirementname = t.requirementname) AND a.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE a.employeeid = p.employeeid AND p.enddate IS NULL) AND b.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = b.requirementname AND q.dateDisabled IS NULL) @@ -185,7 +185,7 @@ BEGIN WHERE a.requirementname NOT IN ( SELECT DISTINCT h.requirementname FROM ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h - WHERE (k.unit = h.unit OR k.category = h.category) AND a.employeeid = k.employeeid + WHERE (lower(k.unit) = lower(h.unit) OR lower(k.category) = lower(h.category)) AND a.employeeid = k.employeeid ) AND a.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE a.employeeid = t.employeeid AND a.requirementname = t.requirementname) AND a.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE a.employeeid = p.employeeid AND p.enddate IS NULL) @@ -255,7 +255,7 @@ BEGIN AND j.requirementname NOT IN ( SELECT DISTINCT h.requirementname FROM ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h - WHERE (k.unit = h.unit OR k.category = h.category) AND j.employeeid = k.employeeid + WHERE (lower(k.unit) = lower(h.unit) OR lower(k.category) = lower(h.category)) AND j.employeeid = k.employeeid ) AND j.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE j.employeeid = t.employeeid AND j.requirementname = t.requirementname) AND j.requirementname NOT IN (SELECT DISTINCT k.requirementname FROM ehr_compliancedb.completiondates k WHERE k.employeeid = j.employeeid) @@ -375,7 +375,7 @@ BEGIN END AS DOUBLE PRECISION ) AS MonthsUntilRenewal FROM ehr_compliancedb.employeeperunit a, ehr_compliancedb.requirementspercategory b - WHERE (a.unit = b.unit OR a.category = b.category) + WHERE (lower(a.unit) = lower(b.unit) OR lower(a.category) = lower(b.category)) AND b.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE a.employeeid = t.employeeid AND b.requirementname = t.requirementname) AND a.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE a.employeeid = p.employeeid AND p.enddate IS NULL) AND b.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = b.requirementname AND q.dateDisabled IS NULL) @@ -451,7 +451,7 @@ BEGIN WHERE a.requirementname NOT IN ( SELECT DISTINCT h.requirementname FROM ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h - WHERE (k.unit = h.unit OR k.category = h.category) AND a.employeeid = k.employeeid + WHERE (lower(k.unit) = lower(h.unit) OR lower(k.category) = lower(h.category)) AND a.employeeid = k.employeeid ) AND a.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE a.employeeid = t.employeeid AND a.requirementname = t.requirementname) AND a.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE a.employeeid = p.employeeid AND p.enddate IS NULL) @@ -593,7 +593,7 @@ BEGIN AND j.requirementname NOT IN ( SELECT DISTINCT h.requirementname FROM ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h - WHERE (k.unit = h.unit OR k.category = h.category) AND j.employeeid = k.employeeid + WHERE (lower(k.unit) = lower(h.unit) OR lower(k.category) = lower(h.category)) AND j.employeeid = k.employeeid ) AND j.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE j.employeeid = t.employeeid AND j.requirementname = t.requirementname) AND j.requirementname NOT IN (SELECT DISTINCT k.requirementname FROM ehr_compliancedb.completiondates k WHERE k.employeeid = j.employeeid) From 95e340605e796412da9e4ecf181af86809e634a5 Mon Sep 17 00:00:00 2001 From: Marty Pradere Date: Wed, 26 Aug 2026 05:24:37 -0600 Subject: [PATCH 12/12] Normalize compliance lookups on write instead of lower() in procedures The ported PostgreSQL procedures wrapped every unit and category comparison in lower() to emulate the case-insensitive default collation the MS SQL originals relied on implicitly. All of those comparisons join employeeperunit against requirementspercategory, and requirementspercategory already canonicalizes unit and category on write through its trigger script, so the only source of drift was employeeperunit - the one table in ehr_compliancedb with no trigger script. Wrapping both sides also made the joins unindexable. Adds a trigger script for onprc_ehr_compliancedb.requirementsperemployee, matching the ten in ehr_compliancedb. It is user-editable and declares employeeid and requirementname as lookups, but normalized neither. Depends on employeeperunit.js and sopdates.js in the EHR_ComplianceDB module. Merge that change first, or reports will silently drop rows whose unit or category differs only by case. The lower() calls in p_SciShieldToPrimeProcess are unchanged; they resolve arbitrary external SciShield text against canonical values, which is where case-insensitive matching belongs. --- .../requirementsperemployee.js | 43 +++++++++++++++++++ .../onprc_ehr_compliancedb-0.000-25.000.sql | 12 +++--- .../onprc_ehr_compliancedb-25.000-25.001.sql | 12 +++--- 3 files changed, 55 insertions(+), 12 deletions(-) create mode 100644 ONPRC_EHR_ComplianceDB/resources/queries/onprc_ehr_compliancedb/requirementsperemployee.js diff --git a/ONPRC_EHR_ComplianceDB/resources/queries/onprc_ehr_compliancedb/requirementsperemployee.js b/ONPRC_EHR_ComplianceDB/resources/queries/onprc_ehr_compliancedb/requirementsperemployee.js new file mode 100644 index 000000000..df074b484 --- /dev/null +++ b/ONPRC_EHR_ComplianceDB/resources/queries/onprc_ehr_compliancedb/requirementsperemployee.js @@ -0,0 +1,43 @@ +/* +* Copyright (c) 2026 LabKey Corporation +* +* Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0 +*/ + +var console = require("console"); +var LABKEY = require("labkey"); + +var helper = org.labkey.ldk.query.LookupValidationHelper.create(LABKEY.Security.currentContainer.id, LABKEY.Security.currentUser.id, 'onprc_ehr_compliancedb', 'requirementsperemployee'); + +console.log("** evaluating: " + this['javax.script.filename']); + +function beforeInsert(row, errors){ + beforeUpsert(row, errors); +} + +function beforeUpdate(row, oldRow, errors){ + //NOTE: this is designed to merge the old row into the new one. + for (var prop in oldRow){ + if(!row.hasOwnProperty(prop) && LABKEY.ExtAdapter.isDefined(oldRow[prop])){ + row[prop] = oldRow[prop]; + } + } + + beforeUpsert(row, errors); +} + +function beforeUpsert(row, errors){ + var lookupFields = ['employeeid', 'requirementname']; + for (var i=0;i