diff --git a/snd/module.properties b/snd/module.properties index 35cf9cb92..0ba351e96 100644 --- a/snd/module.properties +++ b/snd/module.properties @@ -3,5 +3,4 @@ Label: Structured Narrative Datasets Description: Dynamically defined hierarchical datasets. License: Apache 2.0 LicenseURL: http://www.apache.org/licenses/LICENSE-2.0 -SupportedDatabases: mssql, pgsql ManageVersion: true diff --git a/snd/resources/schemas/dbscripts/postgresql/snd-0.000-25.000.sql b/snd/resources/schemas/dbscripts/postgresql/snd-0.000-25.000.sql index 6784bc6bf..57763ee16 100644 --- a/snd/resources/schemas/dbscripts/postgresql/snd-0.000-25.000.sql +++ b/snd/resources/schemas/dbscripts/postgresql/snd-0.000-25.000.sql @@ -321,11 +321,8 @@ CREATE INDEX IDX_SND_EVENTSCACHE_CONTAINER ON snd.EventsCache(Container); -- non-recursive CTE that is materialized once, then join to it in both the anchor and -- recursive members. This produces a stable per-parent TreePath segment and avoids the -- collisions and 3-char truncation that result from formatting raw SortOrder values. --- This differs from the SQL Server twin (sqlserver/snd-0.000-25.000.sql), which uses an --- unpartitioned ROW_NUMBER OVER (ORDER BY SortOrder); the partitioned form is preferred --- and the MSSQL function should eventually be aligned. NULLS FIRST is used so a NULL --- SortOrder sorts first within a parent, matching MSSQL's default NULL-ordering and the --- prior PG behavior (COALESCE(SortOrder, 0)). +-- NULLS FIRST is used so a NULL SortOrder sorts first within a parent, matching the prior +-- PG behavior (COALESCE(SortOrder, 0)). -- ========================================================================================== CREATE FUNCTION snd.fGetSuperPkg(_pkgId INT) RETURNS TABLE ( @@ -427,10 +424,8 @@ $$; -- sub packages for each ProjectItem -- ========================================================================================== -- See note on fGetSuperPkg above re: pre-computed ordinals. The anchor uses an ordinal --- ordered by (ProjectItemId, SuperPkgId), which matches the MSSQL anchor's ROW_NUMBER. --- The recursive sub-tree uses per-parent ordinals over (SortOrder NULLS FIRST, --- SuperPkgId) -- partitioned by ParentSuperPkgId, unlike MSSQL's unpartitioned form; --- NULLS FIRST matches MSSQL's default NULL-ordering. +-- ordered by (ProjectItemId, SuperPkgId); the recursive sub-tree uses per-parent ordinals +-- over (SortOrder NULLS FIRST, SuperPkgId), partitioned by ParentSuperPkgId. -- ========================================================================================== CREATE FUNCTION snd.fGetProjectItems(_projectId INT, _revisionNum INT) RETURNS TABLE ( diff --git a/snd/resources/schemas/dbscripts/sqlserver/snd-0.000-25.000.sql b/snd/resources/schemas/dbscripts/sqlserver/snd-0.000-25.000.sql deleted file mode 100644 index e4904a2b7..000000000 --- a/snd/resources/schemas/dbscripts/sqlserver/snd-0.000-25.000.sql +++ /dev/null @@ -1,587 +0,0 @@ -/* - * Copyright (c) 2017-2026 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 snd; -GO - -/*==============================================================*/ -/* Table: Pkgs */ -/*==============================================================*/ -CREATE TABLE snd.Pkgs ( - PkgId INTEGER NOT NULL, - Description NVARCHAR(4000) NOT NULL, - Narrative NVARCHAR(MAX) NULL, - Active BIT, - Repeatable BIT, - QcState INTEGER, - ObjectId UNIQUEIDENTIFIER NOT NULL DEFAULT newid(), - Container ENTITYID NOT NULL, - CreatedBy USERID, - Created DATETIME, - ModifiedBy USERID, - Modified DATETIME, - Lsid LSIDType, - - CONSTRAINT PK_SND_PKGS PRIMARY KEY (PkgId), - CONSTRAINT FK_SND_PKGS_CONTAINER FOREIGN KEY (Container) REFERENCES core.Containers (EntityId), - CONSTRAINT FK_SND_PKGS_QCSTATE FOREIGN KEY (QcState) REFERENCES core.DataStates (RowId) -); -GO - -CREATE INDEX IDX_SND_PKGS_CONTAINER ON snd.Pkgs(Container); -CREATE INDEX IDX_SND_PKGS_QCSTATE ON snd.Pkgs(QcState); -CREATE INDEX IDX_SND_PKGS_LSID ON snd.Pkgs(Lsid); -GO - -/*==============================================================*/ -/* Table: SuperPkgs */ -/*==============================================================*/ -CREATE TABLE snd.SuperPkgs ( - SuperPkgId INTEGER NOT NULL, - ParentSuperPkgId INTEGER, - PkgId INTEGER NOT NULL, - SuperPkgPath VARCHAR(900) NOT NULL, - SortOrder INTEGER, - Required BIT NOT NULL DEFAULT 0, - Container ENTITYID NOT NULL, - CreatedBy USERID, - Created DATETIME, - ModifiedBy USERID, - Modified DATETIME, - Lsid LSIDType, - - CONSTRAINT PK_SND_SUPERPKGS PRIMARY KEY (SuperPkgId), - CONSTRAINT FK_SND_SUPERPKGS_CONTAINER FOREIGN KEY (Container) REFERENCES core.Containers (EntityId), - CONSTRAINT FK_SND_SUPERPKGS_PKGID FOREIGN KEY (PkgId) REFERENCES snd.Pkgs (PkgId) -); -GO - -CREATE INDEX IDX_SND_SUPERPKGS_CONTAINER ON snd.SuperPkgs(Container); -CREATE INDEX IDX_SND_SUPERPKGS_PKGID ON snd.SuperPkgs(PkgId); -CREATE INDEX IDX_SND_SUPERPKGS_LSID ON snd.SuperPkgs(Lsid); -GO - -/*==============================================================*/ -/* Table: PkgCategories */ -/*==============================================================*/ -CREATE TABLE snd.PkgCategories ( - CategoryId INTEGER NOT NULL, - Description NVARCHAR(4000) NOT NULL, - Comment NVARCHAR(4000), - Active BIT NOT NULL, - SortOrder INTEGER, - ObjectId UNIQUEIDENTIFIER NOT NULL DEFAULT NEWID(), - Container ENTITYID NOT NULL, - CreatedBy USERID, - Created DATETIME, - ModifiedBy USERID, - Modified DATETIME, - Lsid LSIDType, - - CONSTRAINT PK_SND_PKGCATEGORIES PRIMARY KEY (CategoryId), - CONSTRAINT FK_SND_PKGCATEGORIES_CONTAINER FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) -); -GO - -CREATE INDEX IDX_SND_PKGCATEGORIES_CONTAINER ON snd.PkgCategories(Container); -CREATE INDEX IDX_SND_PKGCATEGORIES_LSID ON snd.PkgCategories(Lsid); -GO - -/*==============================================================*/ -/* Table: PkgCategoryJunction */ -/*==============================================================*/ -CREATE TABLE snd.PkgCategoryJunction ( - PkgId INTEGER NOT NULL, - CategoryId INTEGER NOT NULL, - ObjectId UNIQUEIDENTIFIER NOT NULL DEFAULT NEWID(), - Container ENTITYID NOT NULL, - CreatedBy USERID, - Created DATETIME, - ModifiedBy USERID, - Modified DATETIME, - Lsid LSIDType, - - CONSTRAINT PK_SND_PKGCATEGORYJUNCTION PRIMARY KEY (PkgId, CategoryId), - CONSTRAINT FK_SND_PKGCATEGORYJUNCTION_CONTAINER FOREIGN KEY (Container) REFERENCES core.Containers (EntityId), - CONSTRAINT FK_SND_PKGCATEGORYJUNCTION_PKGID FOREIGN KEY (PkgId) REFERENCES snd.Pkgs (PkgId), - CONSTRAINT FK_SND_PKGCATEGORYJUNCTION_CATEGORYID FOREIGN KEY (CategoryId) REFERENCES snd.PkgCategories (CategoryId) -); -GO - -CREATE INDEX IDX_SND_PKGCATEGORYJUNCTION_CONTAINER ON snd.PkgCategoryJunction(Container); -CREATE INDEX IDX_SND_PKGCATEGORYJUNCTION_PKGID ON snd.PkgCategoryJunction(PkgId); -CREATE INDEX IDX_SND_PKGCATEGORYJUNCTION_CATEGORYID ON snd.PkgCategoryJunction(CategoryId); -CREATE INDEX IDX_SND_PKGCATEGORYJUNCTION_LSID ON snd.PkgCategoryJunction(Lsid); -GO - -/*==============================================================*/ -/* Table: Projects */ -/*==============================================================*/ -CREATE TABLE snd.Projects ( - ProjectId INTEGER NOT NULL, - RevisionNum INTEGER NOT NULL, - ReferenceId INTEGER NOT NULL, - StartDate date NOT NULL, - EndDate date, - Description NVARCHAR(4000) NOT NULL, - Active BIT NOT NULL, - ObjectId UNIQUEIDENTIFIER NOT NULL DEFAULT newid(), - Container ENTITYID NOT NULL, - CreatedBy USERID, - Created DATETIME, - ModifiedBy USERID, - Modified DATETIME, - Lsid LSIDType, - - CONSTRAINT PK_SND_PROJECTS PRIMARY KEY NONCLUSTERED (ObjectId), - CONSTRAINT FK_SND_PROJECTS_CONTAINER FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) -); -GO - -CREATE INDEX IDX_SND_PROJECTS_CONTAINER ON snd.Projects(Container); -CREATE UNIQUE CLUSTERED INDEX IDX_SND_PROJECTS_PROJECTID_REVNUM ON snd.Projects(ProjectId, RevisionNum); -GO - -/*==============================================================*/ -/* Table: ProjectItems */ -/*==============================================================*/ -CREATE TABLE snd.ProjectItems ( - ProjectItemId INTEGER IDENTITY, - ParentObjectId UNIQUEIDENTIFIER, - SuperPkgId INTEGER NOT NULL, - Active BIT NOT NULL DEFAULT 1, - ObjectId UNIQUEIDENTIFIER NOT NULL DEFAULT NEWID(), - Container ENTITYID NOT NULL, - CreatedBy USERID, - Created DATETIME, - ModifiedBy USERID, - Modified DATETIME, - Lsid LSIDType, - - CONSTRAINT PK_SND_PROJECTITEMS PRIMARY KEY (ProjectItemId), - CONSTRAINT FK_SND_PROJECTITEMS_CONTAINER FOREIGN KEY (Container) REFERENCES core.Containers (EntityId), - CONSTRAINT FK_SND_PROJECTITEMS_SUPERPKGID FOREIGN KEY (SuperPkgId) REFERENCES snd.SuperPkgs (SuperPkgId), - CONSTRAINT FK_SND_PROJECTITEMS_PARENTOBJECTID FOREIGN KEY (ParentObjectId) REFERENCES snd.Projects (ObjectId) -); -GO - -CREATE INDEX IDX_SND_PROJECTITEMS_CONTAINER ON snd.ProjectItems(Container); -CREATE INDEX IDX_SND_PROJECTITEMS_SUPERPKGID ON snd.ProjectItems(SuperPkgId); -CREATE INDEX IDX_SND_PROJECTITEMS_PARENTOBJECTID ON snd.ProjectItems(ParentObjectId); -CREATE INDEX IDX_SND_PROJECTITEMS_LSID ON snd.ProjectItems(Lsid); -GO - -/*==============================================================*/ -/* Table: Events */ -/*==============================================================*/ -CREATE TABLE snd.Events ( - EventId INTEGER NOT NULL, - SubjectId NVARCHAR(32) NOT NULL, - ParentObjectId UNIQUEIDENTIFIER, - Date DATETIME NOT NULL, - QcState int, - ObjectId UNIQUEIDENTIFIER NOT NULL DEFAULT newid(), - Container ENTITYID NOT NULL, - CreatedBy USERID, - Created DATETIME, - ModifiedBy USERID, - Modified DATETIME, - Lsid LSIDType, - - CONSTRAINT PK_SND_EVENTS PRIMARY KEY NONCLUSTERED (EventId), - CONSTRAINT FK_SND_EVENTS_CONTAINER FOREIGN KEY (Container) REFERENCES core.Containers (EntityId), - CONSTRAINT FK_SND_EVENTS_QCSTATE FOREIGN KEY (QcState) REFERENCES core.DataStates (RowId), - CONSTRAINT FK_SND_EVENTS_PARENTOBJECTID FOREIGN KEY (ParentObjectId) REFERENCES snd.Projects (ObjectId) -); -GO - -CREATE INDEX IDX_SND_EVENTS_CONTAINER ON snd.Events(Container); -CREATE INDEX IDX_SND_EVENTS_QCSTATE ON snd.Events(QcState); -CREATE INDEX IDX_SND_EVENTS_PARENTOBJECTID ON snd.Events(ParentObjectId); -CREATE INDEX IDX_SND_EVENTS_LSID ON snd.Events(Lsid); -CREATE CLUSTERED INDEX IDX_SND_EVENTS_SUBJECTID_DATE ON snd.Events - ( - SubjectId ASC, - Date DESC - ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON); -GO - -/*==============================================================*/ -/* Table: EventNotes */ -/*==============================================================*/ -CREATE TABLE snd.EventNotes ( - EventNoteId INT IDENTITY(1, 1) NOT NULL, - EventId INTEGER, - Note NVARCHAR(MAX) NOT NULL, - Container ENTITYID NOT NULL, - CreatedBy USERID, - Created DATETIME, - ModifiedBy USERID, - Modified DATETIME, - Lsid LSIDType, - - CONSTRAINT PK_SND_EVENTNOTES PRIMARY KEY (EventNoteId), - CONSTRAINT FK_SND_EVENTNOTES_CONTAINER FOREIGN KEY (Container) REFERENCES core.Containers (EntityId), - CONSTRAINT FK_SND_EVENTNOTES_EVENTID FOREIGN KEY (EventId) REFERENCES snd.Events (EventId) -); -GO - -CREATE INDEX IDX_SND_EVENTNOTES_CONTAINER ON snd.EventNotes(Container); -CREATE INDEX IDX_SND_EVENTNOTES_EVENTNOTEID ON snd.EventNotes(EventNoteId); -GO - -/*==============================================================*/ -/* Table: LookupSets */ -/*==============================================================*/ -CREATE TABLE snd.LookupSets ( - LookupSetId INTEGER IDENTITY(1,1) NOT NULL, - SetName NVARCHAR(128) NOT NULL, - Label NVARCHAR(128), - Description NVARCHAR(900), - ObjectId UNIQUEIDENTIFIER NOT NULL DEFAULT NEWID(), - Container ENTITYID NOT NULL, - CreatedBy USERID, - Created DATETIME, - ModifiedBy USERID, - Modified DATETIME, - Lsid LSIDType, - - CONSTRAINT PK_SND_LOOKUPSETS PRIMARY KEY (LookupSetId), - CONSTRAINT FK_SND_LOOKUPSETS_CONTAINER FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) -); -GO - -CREATE INDEX IDX_SND_LOOKUPSETS_CONTAINER ON snd.LookupSets(Container); -CREATE UNIQUE INDEX idx_snd_lookupSets_objectid ON snd.LookupSets(ObjectId); -CREATE UNIQUE INDEX IDX_LookupSets_SetName ON snd.LookupSets(SetName); -GO - -/*==============================================================*/ -/* Table: Lookups */ -/*==============================================================*/ -CREATE TABLE snd.Lookups ( - LookupId INT IDENTITY(1,1) NOT NULL, - LookupSetId INTEGER NOT NULL, - Value NVARCHAR(446) NOT NULL, - Displayable BIT NOT NULL, - SortOrder INTEGER, - ObjectId UNIQUEIDENTIFIER NOT NULL DEFAULT NEWID(), - Container ENTITYID NOT NULL, - CreatedBy USERID, - Created DATETIME, - ModifiedBy USERID, - Modified DATETIME, - Lsid LSIDType, - - CONSTRAINT PK_SND_LOOKUPS PRIMARY KEY (LookupId), - CONSTRAINT FK_SND_LOOKUPS_CONTAINER FOREIGN KEY (Container) REFERENCES core.Containers (EntityId), - CONSTRAINT FK_SND_LOOKUPS_LOOKUPSETID FOREIGN KEY (LookupSetId) REFERENCES snd.LookupSets (LookupSetId) -); -GO - -CREATE INDEX IDX_SND_LOOKUPS_CONTAINER ON snd.Lookups(Container); -CREATE INDEX IDX_SND_LOOKUPS_LOOKUPSETID ON snd.Lookups(LookupSetId); -CREATE UNIQUE INDEX IDX_SND_LOOKUPS_LOOKUPSETID_VALUE ON snd.Lookups(LookupSetId, Value); -CREATE UNIQUE INDEX idx_snd_lookups_objectid ON snd.Lookups(ObjectId); -GO - -/*==============================================================*/ -/* Table: EventData */ -/*==============================================================*/ -CREATE TABLE snd.EventData ( - EventDataId INTEGER NOT NULL, - EventId INTEGER NOT NULL, - SuperPkgId INTEGER NOT NULL, - ObjectURI LsidType NOT NULL, - ParentEventDataId INT, - SortOrder INTEGER NULL, - Container ENTITYID NOT NULL, - Lsid LSIDType, - - CONSTRAINT PK_SND_EVENTDATA PRIMARY KEY (EventDataId), - CONSTRAINT FK_SND_EVENTDATA_CONTAINER FOREIGN KEY (Container) REFERENCES core.Containers (EntityId), - CONSTRAINT FK_SND_EVENTDATA_EVENTID FOREIGN KEY (EventId) REFERENCES snd.Events (EventId), - CONSTRAINT FK_SND_EVENTDATA_SUPERPKGID FOREIGN KEY (SuperPkgId) REFERENCES snd.SuperPkgs (SuperPkgId) -); -GO - -CREATE INDEX IDX_SND_EVENTDATA_SUPERPKGID ON snd.EventData(SuperPkgId); -CREATE INDEX IDX_SND_EVENTDATA_EVENTID ON snd.EventData(EventId); -GO - -/*==============================================================*/ -/* Table: EventsCache */ -/*==============================================================*/ -CREATE TABLE snd.EventsCache ( - EventId INTEGER NOT NULL, - HtmlNarrative NVARCHAR(MAX), - Container ENTITYID, - - CONSTRAINT PK_SND_EVENTS_CACHE PRIMARY KEY (EventId), - CONSTRAINT FK_EVENTSCACHE_EVENTID FOREIGN KEY (EventId) REFERENCES snd.Events (EventId), - CONSTRAINT FK_SND_EVENTSCACHE_CONTAINER FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) -); -GO - -CREATE INDEX IDX_SND_EVENTSCACHE_CONTAINER ON snd.EventsCache(Container); -GO - -CREATE FUNCTION snd.fGetSuperPkg ( @TopLevelPkgId INT ) -RETURNS TABLE -AS - --- ========================================================================================== --- Author: Terry Hawkins --- Creation date: 9/22/2017 --- Description: Table valued function to return hierarchical view of a superPkg --- ========================================================================================== -RETURN - ( - WITH CTE1 ( TopLevelPkgId, SuperPkgId, ParentSuperPkgId, PkgId, TreePath, SuperPkgPath, SortOrder, Required, DESCRIPTION, Narrative, Active, Repeatable, Level ) - AS ( - - -- anchor member definition - SELECT @TopLevelPkgId AS TopLevelPkgId , - sp.SuperPkgId AS SuperPkgId , - sp.ParentSuperPkgId AS ParentSuperPkgId , - sp.PkgId AS PkgId , - RIGHT(SPACE(3) - + CONVERT(VARCHAR(MAX), ROW_NUMBER() OVER ( ORDER BY sp.SortOrder )), - 3) AS TreePath , - sp.SuperPkgPath AS SuperPkgPath , - sp.SortOrder AS SortOrder , - sp.Required AS Required , - p.Description AS Description , - p.Narrative AS Narrative , - p.Active AS Active , - p.Repeatable AS Repeatable , - 1 AS Level - FROM snd.SuperPkgs sp - INNER JOIN snd.Pkgs p ON sp.PkgId = p.PkgId - WHERE sp.PkgId = @TopLevelPkgId - AND sp.ParentSuperPkgId IS NULL - UNION ALL - SELECT @TopLevelPkgId AS TopLevelPkgId , - sp.SuperPkgId AS SuperPkgId , - c.SuperPkgId AS ParentSuperPkgId , - sp.PkgId AS PkgId , - c.TreePath + '/' + RIGHT(SPACE(3) - + CONVERT(VARCHAR(MAX), RIGHT(ROW_NUMBER() OVER ( ORDER BY sp.SortOrder ), - 10)), 3) AS TreePath , - sp.SuperPkgPath AS SuperPkgPath , - sp.SortOrder AS SortOrder , - sp.Required AS Required , - p.Description AS Description , - p.Narrative AS Narrative , - p.Active AS Active , - p.Repeatable AS Repeatable , - c.Level + 1 AS Level - FROM snd.SuperPkgs AS sp - INNER JOIN CTE1 AS c ON - -- add subpackages - sp.ParentSuperPkgId = c.SuperPkgId - -- add children of subpackages - OR sp.ParentSuperPkgId IN (SELECT sp2.SuperPkgId FROM snd.SuperPkgs AS sp2 WHERE c.PkgId = sp2.PkgId AND sp2.ParentSuperPkgId IS NULL ) - - INNER JOIN snd.Pkgs AS p ON sp.PkgId = p.PkgId - ) - SELECT @TopLevelPkgId AS TopLevelPkgId , - c.SuperPkgId AS SuperPkgId , - c.ParentSuperPkgId AS ParentSuperPkgId , - c.PkgId AS PkgId , - c.TreePath AS TreePath , - c.SuperPkgPath AS SuperPkgPath , - c.SortOrder AS SortOrder , - c.Required AS Required , - c.DESCRIPTION AS Description , - c.Narrative AS Narrative , - c.Active AS Active , - c.Repeatable AS Repeatable , - c.Level AS Level - FROM CTE1 c - -); -GO - -CREATE FUNCTION [snd].[fGetProjectItems] - ( - @projectId INT , - @revisionNum INT - ) -RETURNS TABLE -AS - --- ========================================================================================== --- Author: Terry Hawkins --- Creation date: 12/14/2017 --- Description: Returns the list of ProjectItems for a Project/Revision along with --- sub packages for each ProjectItem --- ========================================================================================== -RETURN - ( -WITH CTE1 ( ProjectId, RevisionNum, ProjectItemId, ParentObjectId, ParentSuperPkgId, SuperPkgId, PkgId, ProjectActive, Active, TreePath, Level, Description ) - AS ( SELECT @projectId AS ProjectId , - @revisionNum AS RevisionNum , - pi.ProjectItemId , - pi.ParentObjectId AS ParentObjectId , - sp.ParentSuperPkgId AS ParentSuperPkgId , - sp.SuperPkgId AS SuperPkgId , - sp.PkgId AS PkgId , - p.Active as ProjectActive, - pi.Active, - RIGHT(SPACE(3) - + CONVERT(VARCHAR(MAX), ROW_NUMBER() OVER ( ORDER BY pi.ProjectItemId, sp.SuperPkgId )), - 3) AS TreePath , - 1 AS Level , - pkg.Description - FROM snd.ProjectItems AS pi - INNER JOIN snd.Projects AS p ON pi.ParentObjectId = p.ObjectId - INNER JOIN snd.SuperPkgs AS sp ON pi.SuperPkgId = sp.SuperPkgId - INNER JOIN snd.Pkgs pkg ON sp.PkgId = pkg.PkgId - WHERE p.ProjectId = @projectId - AND p.RevisionNum = @revisionNum - UNION ALL - SELECT c.ProjectId AS ProjectId , - c.RevisionNum AS RevisionNum , - c.ProjectItemId , - c.ParentObjectId AS ParentObjectId , - sp.ParentSuperPkgId AS ParentSuperPkgId , - sp.SuperPkgId AS SuperPkgId , - sp.PkgId AS PkgId , - c.ProjectActive , - c.Active , - c.TreePath + '/' + RIGHT(SPACE(3) - + CONVERT(VARCHAR(MAX), RIGHT(ROW_NUMBER() OVER ( ORDER BY sp.SortOrder ), - 10)), 3) AS TreePath , - c.Level + 1 AS Level , - pkg.Description - FROM snd.SuperPkgs AS sp - INNER JOIN snd.Pkgs AS pkg ON sp.PkgId = pkg.PkgId - INNER JOIN CTE1 AS c ON sp.ParentSuperPkgId = c.SuperPkgId - -- get the sub-pkg hierarchy from the top-level super pkg definition - OR sp.ParentSuperPkgId IN ( - SELECT sp2.SuperPkgId - FROM snd.SuperPkgs AS sp2 - WHERE c.PkgId = sp2.PkgId - AND sp2.ParentSuperPkgId IS NULL) - ) - SELECT @projectId AS ProjectId , - @revisionNum AS RevisionNum , - c.ProjectItemId , - c.SuperPkgId AS SuperPkgId , - c.PkgId AS PkgId , - c.TreePath AS TreePath , - c.Level AS Level , - c.ProjectActive , - c.Active , - c.Description - FROM CTE1 c - -); -GO - -CREATE FUNCTION snd.fGetAllSuperPkgs -() -RETURNS @expandedSuperPackages TABLE -( - TopLevelPkgId INTEGER NOT NULL, - SuperPkgId INTEGER NOT NULL, - ParentSuperPkgId INTEGER NULL, - PkgId INTEGER NOT NULL, - TreePath VARCHAR(MAX) NOT NULL, - SuperPkgPath INTEGER NOT NULL, - SortOrder INTEGER NULL, - Required INTEGER NULL, - DESCRIPTION VARCHAR(MAX) NOT NULL, - Narrative VARCHAR(MAX) NOT NULL, - Active INTEGER NOT NULL, - Repeatable INTEGER NOT NULL, - Level INTEGER NOT NULL -) -AS -BEGIN - DECLARE @loopCursor CURSOR; - DECLARE @topLevelPkgId INTEGER; - - SET @loopCursor = CURSOR LOCAL FOR -SELECT PkgId AS topLevelPackageId -FROM snd.SuperPkgs AS tl -WHERE ParentSuperPkgId IS NULL - FOR READ ONLY; - -OPEN @loopCursor; -FETCH @loopCursor - INTO @topLevelPkgId; - -WHILE (@@FETCH_STATUS = 0) -BEGIN -INSERT INTO @expandedSuperPackages -( - TopLevelPkgId, - SuperPkgId, - ParentSuperPkgId, - PkgId, - TreePath, - SuperPkgPath, - SortOrder, - Required, - DESCRIPTION, - Narrative, - Active, - Repeatable, - Level -) - (SELECT TopLevelPkgId, - SuperPkgId, - ParentSuperPkgId, - PkgId, - TreePath, - SuperPkgPath, - SortOrder, - Required, - Description, - Narrative, - Active, - Repeatable, - Level - FROM snd.fGetSuperPkg(@topLevelPkgId) ); - -FETCH NEXT FROM @loopCursor - INTO @topLevelPkgId; - -END; -- WHILE LOOP - -CLOSE @loopCursor; -DEALLOCATE @loopCursor; - - RETURN; -END; -GO - -CREATE TRIGGER snd.ti_after_Events ON snd.Events FOR INSERT AS -BEGIN - SET NOCOUNT ON; - DECLARE - @Container ENTITYID - - SELECT @Container = INSERTED.[Container] FROM INSERTED - UPDATE snd.Events - SET QcState = (SELECT TOP(1) q.rowId FROM core.DataStates AS q WHERE q.Label = 'Completed' AND q.Container = @Container ORDER BY q.rowId) - FROM INSERTED AS i - INNER JOIN snd.Events AS e ON i.EventId = e.EventId - WHERE i.QcState IS NULL -END -GO diff --git a/snprc_ehr/module.properties b/snprc_ehr/module.properties index c6a614d81..c689f8471 100644 --- a/snprc_ehr/module.properties +++ b/snprc_ehr/module.properties @@ -1,5 +1,4 @@ ModuleClass: org.labkey.snprc_ehr.SNPRC_EHRModule -SupportedDatabases: mssql, pgsql ManageVersion: true License: Apache 2.0 LicenseURL: http://www.apache.org/licenses/LICENSE-2.0 diff --git a/snprc_ehr/resources/queries/ehr_lookups/AgeClassRanges.sql b/snprc_ehr/resources/queries/ehr_lookups/AgeClassRanges.sql index 6b486169e..03006d4c0 100644 --- a/snprc_ehr/resources/queries/ehr_lookups/AgeClassRanges.sql +++ b/snprc_ehr/resources/queries/ehr_lookups/AgeClassRanges.sql @@ -18,7 +18,6 @@ SELECT age.species, age.ageclass, - -- please excuse the ugly formatting - A sql server convert function would be helpful here! case when (age."max" is NULL and age.label = 'Senior') then (CAST(age."min" as VARCHAR(5) ) || case when (age."min"- FLOOR(age."min") > 0) then '' else '.0 - ' end) ELSE diff --git a/snprc_ehr/resources/queries/study/GenDemoCustomizer.sql b/snprc_ehr/resources/queries/study/GenDemoCustomizer.sql index dbeb4086f..f1714d93b 100644 --- a/snprc_ehr/resources/queries/study/GenDemoCustomizer.sql +++ b/snprc_ehr/resources/queries/study/GenDemoCustomizer.sql @@ -22,7 +22,6 @@ Select d.Id, d.species.arc_species_code as ARC_species, */ -- Cast boolean → integer first so the IFNULL result type is INTEGER, not BOOLEAN. - -- Both args matching as BOOLEAN triggers SQL Server's BIT→BOOLEAN CASE-wrap (error 4145); -- mixing BOOLEAN with integer 0 fails on Postgres ("COALESCE types boolean and integer cannot be matched"). IFNULL(CAST(g.HasGeneExpressionData AS INTEGER), 0) as HasGeneExpressionData, IFNULL(CAST(s.HasSNPData AS INTEGER), 0) as HasSNPData, diff --git a/snprc_ehr/resources/queries/study/demographicsCurrentColony.sql b/snprc_ehr/resources/queries/study/demographicsCurrentColony.sql index 13a7b2c3a..5a1ccfc5c 100644 --- a/snprc_ehr/resources/queries/study/demographicsCurrentColony.sql +++ b/snprc_ehr/resources/queries/study/demographicsCurrentColony.sql @@ -20,6 +20,6 @@ SELECT FROM study.animal_group_members as agm INNER JOIN snprc_ehr.animal_groups as ag ON ag.code = agm.groupId - -- SQL Server's default collation matched this case-insensitively; Postgres LIKE does not. + -- Postgres LIKE is case-sensitive. INNER JOIN snprc_ehr.animal_group_categories as agc on ag.category_code = agc.category_code and lower(agc.description) like '%colonies%' WHERE agm.isActive = true and agm.qcstate.PublicData = true and id.demographics.calculated_status = 'Alive' diff --git a/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-0.000-25.000.sql b/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-0.000-25.000.sql deleted file mode 100644 index a52333bc8..000000000 --- a/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-0.000-25.000.sql +++ /dev/null @@ -1,1306 +0,0 @@ -/* - * Copyright (c) 2020-2026 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 snprc_ehr; -GO - -CREATE TABLE snprc_ehr.package ( - id int not null, - name NVARCHAR(100), - description NVARCHAR(MAX), - Container entityId NOT NULL, - Created DATETIME, - CreatedBy USERID, - Modified DATETIME, - ModifiedBy USERID, - diCreated DATETIME, - diModified DATETIME, - diCreatedBy USERID, - diModifiedBy USERID, - objectid uniqueidentifier not null default newid(), - pkgType NVARCHAR(1) not null default 'U', - - CONSTRAINT PK_packages PRIMARY KEY (id), - CONSTRAINT FK_packages_Container FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) -); - -CREATE UNIQUE INDEX idx_package_objectid ON snprc_ehr.package (objectid); - -CREATE TABLE snprc_ehr.package_category ( - id int not null, - description NVARCHAR(MAX), - Container entityId NOT NULL, - Created DATETIME, - CreatedBy USERID, - Modified DATETIME, - ModifiedBy USERID, - diCreated DATETIME, - diModified DATETIME, - diCreatedBy USERID, - diModifiedBy USERID, - objectid uniqueidentifier not null default newid(), - - CONSTRAINT PK_package_categories PRIMARY KEY (id), - CONSTRAINT FK_package_categories_Container FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) -); -GO - -CREATE UNIQUE INDEX idx_package_category_objectid ON snprc_ehr.package_category (objectid); - -CREATE TABLE snprc_ehr.package_category_junction ( - rowId int not null, - packageId int not null, - categoryId int not null, - Created DATETIME, - CreatedBy USERID, - Modified DATETIME, - ModifiedBy USERID, - diCreated DATETIME, - diModified DATETIME, - diCreatedBy USERID, - diModifiedBy USERID, - objectid uniqueidentifier not null default newid(), - - CONSTRAINT PK_package_category_junction PRIMARY KEY (rowId), - CONSTRAINT FK_package_category_junction_packageId FOREIGN KEY (packageId) REFERENCES snprc_ehr.package(id), - CONSTRAINT FK_package_category_junction_categoryId FOREIGN KEY (categoryId) REFERENCES snprc_ehr.package_category(id) -); -GO - -CREATE UNIQUE INDEX IDX_package_category_junction ON snprc_ehr.package_category_junction(categoryId, packageId); -CREATE UNIQUE INDEX idx_package_category_junction_objectid ON snprc_ehr.package_category_junction (objectid); - -CREATE TABLE snprc_ehr.species -( - common NVARCHAR(255) NOT NULL, - scientific_name NVARCHAR(255), - id_prefix NVARCHAR(255), - mhc_prefix NVARCHAR(255), - blood_per_kg FLOAT, - max_draw_pct FLOAT, - blood_draw_interval FLOAT, - dateDisabled DATETIME NULL, - cites_code NVARCHAR(200), - species_code NVARCHAR(3) NOT NULL, - arc_species_code NVARCHAR(3) NOT NULL, - tid INT, - diCreated DATETIME, - diModified DATETIME, - diCreatedBy USERID, - diModifiedBy USERID, - primate VARCHAR(1), - objectid uniqueidentifier not null default newid(), - Created DATETIME, - Modified DATETIME, - CreatedBy USERID, - ModifiedBy USERID, - - CONSTRAINT pk_species PRIMARY KEY (species_code) -); - -CREATE UNIQUE INDEX idx_species_objectid ON snprc_ehr.species (objectid); - -CREATE TABLE snprc_ehr.clinical_observation_datasets -( - rowId Int NOT NULL, - dataset_name NVARCHAR(255) NOT NULL, - category_name NVARCHAR(255) NOT NULL, - sort_order Int NULL, - Container entityId NOT NULL, - objectid uniqueidentifier not null default newid(), - - CONSTRAINT pk_clinical_observation_datasets PRIMARY KEY (rowId), - CONSTRAINT FK_clinical_observation_datasets_Container FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) -); -GO - -CREATE TABLE snprc_ehr.validAccounts( - account varchar(16) NOT NULL, - accountStatus varchar(1) NOT NULL, - date DATETIME NOT NULL, - endDate DATETIME NULL, - description VARCHAR(100) NULL, - accountGroup VARCHAR(20) NOT NULL, - Container entityId NOT NULL, - Created DATETIME, - CreatedBy USERID, - Modified DATETIME, - ModifiedBy USERID, - diCreated DATETIME, - diModified DATETIME, - diCreatedBy USERID, - diModifiedBy USERID, - objectid uniqueidentifier not null default newid(), - - CONSTRAINT [PK_VALID_ACCOUNTS] PRIMARY KEY CLUSTERED (account ASC ) -); -GO - -CREATE UNIQUE INDEX idx_validAccounts_objectid ON snprc_ehr.validAccounts (objectid); - -CREATE TABLE snprc_ehr.labwork_services ( - RowId [INT] IDENTITY(1,1) NOT NULL, - ServiceName varchar(100) NOT NULL, - ServiceId INT NOT NULL, - Dataset varchar(100), - ChargeType varchar(100), - CollectionMethod varchar(500), - AlertOnComplete bit, - Tissue varchar(100), - OutsideLab bit, - DateDisabled datetime, - Method varchar(100), - Active INT, - Bench varchar(20), - ObjectId uniqueidentifier NOT NULL DEFAULT NEWID(), - [Created] [DATETIME] NULL, - [CreatedBy] [dbo].[USERID] NULL, - [Modified] [DATETIME] NULL, - [ModifiedBy] [dbo].[USERID] NULL, - [DiCreated] [DATETIME] NULL, - [DiModified] [DATETIME] NULL, - [DiCreatedBy] [dbo].[USERID] NULL, - [DiModifiedBy] [dbo].[USERID] NULL, - Container entityId NOT NULL, - - CONSTRAINT PK_snprc_labwork_services PRIMARY KEY (ServiceId), - CONSTRAINT FK_snprc_labwork_services_container FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) -); - -GO - -CREATE UNIQUE INDEX idx_labwork_services_serviceId ON [snprc_ehr].[labwork_services](ServiceId); -GO - -CREATE TABLE snprc_ehr.validInstitutions ( - institution_id integer NOT NULL , - institution_name varchar(200) NOT NULL, - short_name varchar(20) NOT NULL, - city varchar(50) NOT NULL, - state varchar(20) NOT NULL, - affiliate varchar(50) NULL, - web_site varchar(200) NULL, - Created DATETIME, - CreatedBy USERID, - Modified DATETIME, - ModifiedBy USERID, - Container entityId NOT NULL, - diCreated DATETIME, - diModified DATETIME, - diCreatedBy USERID, - diModifiedBy USERID, - objectid uniqueidentifier not null default newid(), - - CONSTRAINT PK_snprc_valid_institutions PRIMARY KEY (institution_id), - CONSTRAINT FK_snprc_valid_institutions FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) -); -GO - -CREATE UNIQUE INDEX idx_validInstitutions_objectid ON snprc_ehr.validInstitutions (objectid); - -CREATE TABLE snprc_ehr.validVets ( - vetId integer NOT NULL, - displayName varchar(128) NOT NULL , - emailAddress varchar(128) NULL, - status varchar(10) NOT NULL, - Created DATETIME, - CreatedBy USERID, - Modified DATETIME, - ModifiedBy USERID, - Container entityId NOT NULL, - diCreated DATETIME, - diModified DATETIME, - diCreatedBy USERID, - diModifiedBy USERID, - objectid uniqueidentifier not null default newid(), - - CONSTRAINT PK_snprc_validVets PRIMARY KEY (vetId), - CONSTRAINT FK_snprc_validVets FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) -); -GO - -CREATE UNIQUE INDEX idx_validVets_objectid ON snprc_ehr.validVets (objectid); - -CREATE TABLE snprc_ehr.valid_bd_status ( - value integer NOT NULL, - description varchar(128) NOT NULL , - Created DATETIME, - CreatedBy USERID, - Modified DATETIME, - ModifiedBy USERID, - Container entityId NOT NULL, - objectid uniqueidentifier not null default newid(), - - CONSTRAINT PK_snprc_valid_bd_status PRIMARY KEY (value), - CONSTRAINT FK_snprc_valid_bd_status FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) -); -GO -CREATE UNIQUE INDEX idx_valid_bd_status_objectid ON snprc_ehr.valid_bd_status (objectid); - -CREATE TABLE snprc_ehr.animal_group_categories( - category_code int NOT NULL, - description varchar(128) NULL, - comment varchar(128) NULL, - displayable char(1) NOT NULL, - species char(2) NULL, - sex char(1) NULL, - enforce_exclusivity char(1) NOT NULL, - allow_future_date char(1) NOT NULL, - sort_order int NULL, - Created DATETIME, - CreatedBy USERID, - Modified DATETIME, - ModifiedBy USERID, - diCreated DATETIME, - diModified DATETIME, - diCreatedBy USERID, - diModifiedBy USERID, - Container entityId NOT NULL, - objectid uniqueidentifier not null default newid(), - - CONSTRAINT PK_animal_group_categories PRIMARY KEY (category_code), - CONSTRAINT FK_animal_group_categories FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) -); -GO - -CREATE UNIQUE INDEX idx_animal_group_categories_objectid ON snprc_ehr.animal_group_categories (objectid); - -CREATE TABLE snprc_ehr.animal_groups( - code INT NOT NULL, - category_code INT NOT NULL, - name VARCHAR(128) NOT NULL, -- Renamed from description - date DATE NOT NULL, - enddate DATE NULL, - comment VARCHAR(MAX) NULL, - sort_order INT NULL, - Created DATETIME, - CreatedBy USERID, - Modified DATETIME, - ModifiedBy USERID, - diCreated DATETIME, - diModified DATETIME, - diCreatedBy USERID, - diModifiedBy USERID, - Container entityId NOT NULL, - objectid uniqueidentifier not null default newid(), - - CONSTRAINT PK_snprc_animal_groups PRIMARY KEY (code, category_code), - CONSTRAINT FK_snprc_animal_groups FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) -); -GO - -CREATE UNIQUE INDEX idx_animal_groups_objectid ON snprc_ehr.animal_groups (objectid); -CREATE UNIQUE INDEX idx_animal_groups_code ON snprc_ehr.animal_groups (code); - -CREATE TABLE snprc_ehr.labwork_types ( - RowId [INT] IDENTITY(1,1) NOT NULL, - ServiceType varchar(100) NOT NULL, - ObjectId uniqueidentifier NOT NULL DEFAULT NEWID(), - [Created] [DATETIME] NULL, - [CreatedBy] [dbo].[USERID] NULL, - [Modified] [DATETIME] NULL, - [ModifiedBy] [dbo].[USERID] NULL, - [DiCreated] [DATETIME] NULL, - [DiModified] [DATETIME] NULL, - [DiCreatedBy] [dbo].[USERID] NULL, - [DiModifiedBy] [dbo].[USERID] NULL, - Container entityId NOT NULL, - - CONSTRAINT PK_snprc_labwork_types PRIMARY KEY (ServiceType), - CONSTRAINT FK_snprc_labwork_types_container FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) -); -GO - -ALTER TABLE [snprc_ehr].[labwork_services] WITH CHECK ADD CONSTRAINT [FK_snprc_labwork_panels_dataset] FOREIGN KEY([Dataset]) REFERENCES [snprc_ehr].[labwork_types] ([ServiceType]); -GO -ALTER TABLE [snprc_ehr].[labwork_services] CHECK CONSTRAINT [FK_snprc_labwork_panels_dataset]; -GO - -CREATE TABLE [snprc_ehr].[labwork_panels]( - RowId [INT] IDENTITY(1,1) NOT NULL, - [ServiceId] INT NOT NULL, - [TestId] [VARCHAR](100) NOT NULL, - [TestName] [VARCHAR](100) NULL, - [Units] [VARCHAR](100) NULL, - [SortOrder] INT NULL, - [Aliases] [VARCHAR](1000) NULL, - [AlertOnAbnormal] [BIT] NULL, - [AlertOnAny] [BIT] NULL, - [IncludeInPanel] [BIT] NULL, - [Created] [DATETIME] NULL, - [CreatedBy] [dbo].[USERID] NULL, - [Modified] [DATETIME] NULL, - [ModifiedBy] [dbo].[USERID] NULL, - [Container] [dbo].[ENTITYID] NOT NULL, - [DiCreated] [DATETIME] NULL, - [DiModified] [DATETIME] NULL, - [DiCreatedBy] [dbo].[USERID] NULL, - [DiModifiedBy] [dbo].[USERID] NULL, - [ObjectId] [UNIQUEIDENTIFIER] NOT NULL DEFAULT NEWID(), - CONSTRAINT [PK_snprc_labwork_panels] PRIMARY KEY CLUSTERED - ( - [RowId] 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 - -ALTER TABLE [snprc_ehr].[labwork_panels] WITH CHECK ADD CONSTRAINT [FK_snprc_labwork_panels_container] FOREIGN KEY([Container]) REFERENCES [core].[Containers] ([EntityId]); -GO - -ALTER TABLE [snprc_ehr].[labwork_panels] CHECK CONSTRAINT [FK_snprc_labwork_panels_container]; -GO - -ALTER TABLE [snprc_ehr].[labwork_panels] WITH CHECK ADD CONSTRAINT [FK_snprc_labwork_panels_services] FOREIGN KEY([ServiceId]) REFERENCES [snprc_ehr].[labwork_services] ([ServiceId]); -GO - -ALTER TABLE [snprc_ehr].[labwork_panels] CHECK CONSTRAINT [FK_snprc_labwork_panels_services]; -GO - -CREATE TABLE [snprc_ehr].[MhcData]( - [Id] [nvarchar](32) NOT NULL, - [Haplotype] [nvarchar](128) NOT NULL, - [RowId] [bigint] IDENTITY(1,1) NOT NULL, - [OcId] [NVARCHAR](128) NULL, - [MhcValue] [nvarchar](128) NULL, - [DataFileSource] [nvarchar](4000) NULL, - [ObjectId] uniqueidentifier NOT NULL DEFAULT NEWID(), - [Created] [DATETIME] NULL, - [CreatedBy] [dbo].[USERID] NULL, - [Modified] [DATETIME] NULL, - [ModifiedBy] [dbo].[USERID] NULL, - [DiCreated] [DATETIME] NULL, - [DiModified] [DATETIME] NULL, - [DiCreatedBy] [dbo].[USERID] NULL, - [DiModifiedBy] [dbo].[USERID] NULL, - Container entityId NOT NULL - - CONSTRAINT PK_snprc_MhcData PRIMARY KEY ([RowId]) - CONSTRAINT FK_snprc_MhcData_container FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) -); - -go - -ALTER TABLE [snprc_ehr].[MhcData] ADD CONSTRAINT [AK_ID_Haplotype] UNIQUE NONCLUSTERED - ( - [Id] ASC, - [Haplotype] ASC - ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON); -GO - -CREATE TABLE [snprc_ehr].[ValidChargeBySpecies]( - [Project] INTEGER NOT NULL, - [Species] NVARCHAR(2) NOT NULL, - [Purpose] NVARCHAR (2) NOT NULL, - [ObjectId] uniqueidentifier NOT NULL DEFAULT NEWID(), - [Created] [DATETIME] NULL, - [CreatedBy] [dbo].[USERID] NULL, - [Modified] [DATETIME] NULL, - [ModifiedBy] [dbo].[USERID] NULL, - [DiCreated] [DATETIME] NULL, - [DiModified] [DATETIME] NULL, - [DiCreatedBy] [dbo].[USERID] NULL, - [DiModifiedBy] [dbo].[USERID] NULL, - Container entityId NOT NULL, - startDate DATETIME NOT NULL DEFAULT GETDATE(), - stopDate DATETIME, - - CONSTRAINT PK_snprc_ValidChargeBySpecies PRIMARY KEY CLUSTERED (Project, Species), - CONSTRAINT FK_snprc_ValidChargeBySpecies_container FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) -); -GO - -CREATE TABLE [snprc_ehr].[FeeSchedule]( - [RowId] [bigint] IDENTITY(1,1) NOT NULL, - [StartingYear] INTEGER NOT NULL, - [VersionLabel] NVARCHAR(128) NOT NULL, - [ActivityId] INTEGER NOT NULL, - [Species] NVARCHAR(128) NOT NULL, - [Description] NVARCHAR (256) NOT NULL, - [BudgetYear] NVARCHAR (256) NOT NULL, - [Cost] NUMERIC (9,2) NOT NULL, - [FileName] NVARCHAR (256) NOT NULL, - [ObjectId] UNIQUEIDENTIFIER NOT NULL DEFAULT NEWID(), - [Created] [DATETIME] NULL, - [CreatedBy] [dbo].[USERID] NULL, - [Modified] [DATETIME] NULL, - [ModifiedBy] [dbo].[USERID] NULL, - Container entityId NOT NULL - - CONSTRAINT PK_snprc_fee_schedule PRIMARY KEY ([RowId]), - CONSTRAINT FK_snprc_fee_Schedule_container FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) -); - -CREATE UNIQUE INDEX idx_snprc_fee_schedule_objectid ON snprc_ehr.feeSchedule (objectid); -CREATE UNIQUE INDEX idx_snprc_fee_schedule_activityId_budgetYear ON snprc_ehr.FeeSchedule (StartingYear, VersionLabel, ActivityId, BudgetYear); -GO - -CREATE TABLE [snprc_ehr].[FeeScheduleSpeciesLookup] ( - [FsSpecies] [VARCHAR](128) NOT NULL, - [SpeciesCode] [VARCHAR](2) NOT NULL, - [ObjectId] UNIQUEIDENTIFIER NOT NULL DEFAULT NEWID(), - [Created] [DATETIME] NULL, - [CreatedBy] [dbo].[USERID] NULL, - [Modified] [DATETIME] NULL, - [ModifiedBy] [dbo].[USERID] NULL, - [Container] [dbo].[ENTITYID] NOT NULL - - CONSTRAINT [PK_FeeScheduleSpeciesLookup] PRIMARY KEY CLUSTERED ([FsSpecies], [SpeciesCode]), - CONSTRAINT [FK_FeeScheduleSpeciesLookup_container] FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) -); -GO - -CREATE TABLE [snprc_ehr].[LocationTemperature]( - [Room] [varchar](100) NOT NULL, - [Date] [DATETIME] NOT NULL, - [LowTemperature] [NUMERIC](6, 2) NULL, - [HighTemperature] [NUMERIC](6, 2) NULL, - [Notify] [VARCHAR](18) NULL, - [Created] [datetime] NULL, - [CreatedBy] [dbo].[USERID] NULL, - [Modified] [datetime] NULL, - [ModifiedBy] [dbo].[USERID] NULL, - [diCreated] [datetime] NULL, - [diModified] [datetime] NULL, - [diCreatedBy] [dbo].[USERID] NULL, - [diModifiedBy] [dbo].[USERID] NULL, - [Container] [dbo].[ENTITYID] NOT NULL, - [objectid] [uniqueidentifier] NOT NULL DEFAULT NEWID(), - - CONSTRAINT [PK_LocationTemperature] PRIMARY KEY CLUSTERED ([Room] ASC,[Date] ASC), - CONSTRAINT FK_snprc_LocationTemperature_container FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) -); -GO - -CREATE UNIQUE INDEX idx_snprc_LocationTemperature_objectid ON snprc_ehr.LocationTemperature (ObjectId); -CREATE INDEX idx_snprc_LocationTemperature_Date ON snprc_ehr.LocationTemperature (Date, Room); -GO - -CREATE TABLE snprc_ehr.ValidDiet( - [Diet] [nvarchar](20) NOT NULL, - [ArcSpeciesCode] [nvarchar](2) NULL, - [StartDate] [datetime] NOT NULL, - [StopDate] [datetime] NULL, - [SnomedCode] [nvarchar](7) NULL, - [DietCode] [INTEGER] NOT NULL, -- Renamed from DietId - [Created] DATETIME, - [CreatedBy] USERID, - [Modified] DATETIME, - [ModifiedBy] USERID, - [diCreated] [datetime] NULL, - [diModified] [datetime] NULL, - [diCreatedBy] [dbo].[USERID] NULL, - [diModifiedBy] [dbo].[USERID] NULL, - [Container] [dbo].[ENTITYID] NOT NULL, - [objectid] [uniqueidentifier] NOT NULL DEFAULT NEWID(), - - CONSTRAINT [PK_ValidDiet] PRIMARY KEY CLUSTERED (Diet) -- Changed primary key -); - -CREATE UNIQUE INDEX idx_ValidDiet_SnomedCode_StartStopDate ON snprc_ehr.ValidDiet(SnomedCode, StartDate, StopDate); -go - -CREATE TABLE snprc_ehr.ValidDXGroup -( - DXGroup VARCHAR(30) NOT NULL, - Created DATETIME, - CreatedBy USERID, - Modified DATETIME, - ModifiedBy USERID, - diCreated datetime NULL, - diModified datetime NULL, - diCreatedBy dbo.USERID NULL, - diModifiedBy dbo.USERID NULL, - Container dbo.ENTITYID NOT NULL, - objectid uniqueidentifier NOT NULL DEFAULT NEWID(), - - CONSTRAINT PK_ValidDXGroup PRIMARY KEY CLUSTERED (DXGroup ASC) -); - ---srr 07.17.19 - -CREATE TABLE snprc_ehr.ValidDXList -( - DXGroup VARCHAR(30) NOT NULL, - DX VARCHAR(30) NOT NULL, - Created DATETIME, - CreatedBy USERID, - Modified DATETIME, - ModifiedBy USERID, - diCreated datetime NULL, - diModified datetime NULL, - diCreatedBy dbo.USERID NULL, - diModifiedBy dbo.USERID NULL, - Container dbo.ENTITYID NOT NULL, - objectid uniqueidentifier NOT NULL DEFAULT NEWID(), - - CONSTRAINT PK_ValidDXList PRIMARY KEY CLUSTERED (DXGroup ASC, DX ASC) -); - ---srr 07.17.19 - -CREATE TABLE snprc_ehr.ValidVaccines -( - Vaccine VARCHAR(128) NOT NULL, - Created DATETIME, - CreatedBy USERID, - Modified DATETIME, - ModifiedBy USERID, - diCreated datetime NULL, - diModified datetime NULL, - diCreatedBy dbo.USERID NULL, - diModifiedBy dbo.USERID NULL, - Container dbo.ENTITYID NOT NULL, - objectid uniqueidentifier NOT NULL DEFAULT NEWID(), - - CONSTRAINT PK_ValidVaccine PRIMARY KEY CLUSTERED (Vaccine ASC) -); - -CREATE TABLE snprc_ehr.NewAnimalData -( - Id nvarchar(32) NOT NULL, - BirthDate datetime NULL, - BirthCode int NULL, - AcquisitionType int NULL, - AcqDate datetime NULL, - SourceInstitutionLocation nvarchar(10) NULL, - Gender nvarchar(10) NULL, - Sire nvarchar(32) NULL, - Dam nvarchar(32) NULL, - Species nvarchar(3) NULL, - Colony int NULL, - AnimalAccount nvarchar(16) NULL, - OwnerInstitution int NULL, - ResponsibleInstitution int NULL, - Room int NULL, - Cage int NULL, - Diet nvarchar(20) NULL, - Pedigree int NULL, - IACUC nvarchar(200) NULL, - Created datetime NULL, - CreatedBy dbo.USERID NULL, - Modified datetime NULL, - ModifiedBy dbo.USERID NULL, - Container dbo.ENTITYID NOT NULL, - objectid uniqueidentifier NOT NULL DEFAULT NEWID(), - - CONSTRAINT PK_snprc_NEWANIMALDATA PRIMARY KEY (Id) -); - -CREATE TABLE snprc_ehr.BehaviorNotificationComment -( - NotificationNumber INT NOT NULL, - NotificationDateTm DATETIME NOT NULL, - BehaviorId INT NOT NULL, - NotificationStatus INT NOT NULL, - CaseNumber INT NULL, - NotificationComments VARCHAR(255) NULL, - SuspiciousBehavior CHAR(1) NOT NULL, - Sib CHAR(1) NOT NULL, - HousingType INT NULL, - Behavior VARCHAR(30) NOT NULL, - AbnormalFlag CHAR(1) NOT NULL, - BehaviorDescription VARCHAR(200) NOT NULL, - BehaviorCategory VARCHAR(40) NULL, - BehaviorComments VARCHAR(200) NULL, - Container ENTITYID NOT NULL, - Created DATETIME NULL, - CreatedBy USERID NULL, - ModifiedBy USERID NULL, - Modified DATETIME NULL, - DiCreatedBy USERID NULL, - DiCreated DATETIME NULL, - DiModifiedBy USERID NULL, - DiModified DATETIME NULL, - tid INT IDENTITY, - objectid UNIQUEIDENTIFIER NULL DEFAULT NEWID(), - - CONSTRAINT PK_BehaviorNotiComment_oid PRIMARY KEY (tid) -); - -CREATE TABLE snprc_ehr.validDefaultIACUC -( - WorkingIacuc varchar(7) NOT NULL, - ArcNumSeq int NOT NULL, - ArcNumGenus varchar(2) NOT NULL, - Mandatory varchar(1) NULL, - DefaultIacuc varchar(1) NULL, - Container ENTITYID NOT NULL, - Created DATETIME NULL, - CreatedBy USERID NULL, - ModifiedBy USERID NULL, - Modified DATETIME NULL, - DiCreatedBy USERID NULL, - DiCreated DATETIME NULL, - DiModifiedBy USERID NULL, - DiModified DATETIME NULL, - ObjectId UNIQUEIDENTIFIER NOT NULL DEFAULT NEWID(), - - CONSTRAINT PK_ValidDefaultIACUC PRIMARY KEY (WorkingIacuc) -); - -CREATE TABLE snprc_ehr.Counters -( - RowId INT IDENTITY(1,1) NOT NULL, - Name NVARCHAR(255) NOT NULL, - Value INT NOT NULL, - Container dbo.ENTITYID NOT NULL, - ObjectId UNIQUEIDENTIFIER NOT NULL DEFAULT NEWID(), - CONSTRAINT PK_snprc_Counters PRIMARY KEY (RowId), - CONSTRAINT FK_Counters_Container FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) -); -GO - -CREATE UNIQUE INDEX idx_snprc_container_NameValue ON snprc_ehr.Counters (Container, Name, Value); -GO - -CREATE TABLE snprc_ehr.IacucAssignmentStats -( - ThreeYearPeriod INT NOT NULL, - WorkingIacuc NVARCHAR(50) NOT NULL, - ArcNumSeq INT NOT NULL, - arcNumGenus VARCHAR(50) NOT NULL, - FirstAmendment INT NOT NULL, - LastAmendment INT NOT NULL, - StartDate DATETIME NOT NULL, - EndDate DATETIME NULL, - NumAnimalsAllowed INT NOT NULL, - NumAnimalsAssigned INT NOT NULL, - diCreated DATETIME, - diModified DATETIME, - diCreatedBy USERID, - diModifiedBy USERID, - Container entityId NOT NULL, - - CONSTRAINT PK_IacucAssignmentStats PRIMARY KEY CLUSTERED ( WorkingIacuc ASC, ThreeYearPeriod ASC ), - CONSTRAINT FK_IacucAssignmentsStats_container FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) -); - -CREATE TABLE snprc_ehr.ExternalReports -( - Id INT IDENTITY(1,1), - SortOrder INT NULL, - Label NVARCHAR(64) NOT NULL, - Report NVARCHAR(400) NOT NULL, - Description NVARCHAR(4000) NOT NULL, - Parameters NVARCHAR(4000) NULL, - rsParameters NVARCHAR(4000) NULL, - Created DATETIME DEFAULT GETDATE(), - Modified DATETIME DEFAULT GETDATE(), - CreatedBy USERID, - ModifiedBy USERID, - - CONSTRAINT PK_ExternalReports PRIMARY KEY CLUSTERED ( Id ASC) -); - -CREATE TABLE [snprc_ehr].[HL7_IMPORT_LOG]( - [TID] [NUMERIC](18, 0) IDENTITY(1,1) NOT NULL, - [MESSAGE_ID] [VARCHAR](50) NOT NULL, - [OBSERVATION_DATE_TM] [DATETIME] NULL, - [MESSAGE_CONTROL_ID] [VARCHAR](50) NULL, - [IMPORT_STATUS] [INT] NOT NULL, - [RESULT_STATUS] [VARCHAR](10) NULL, - [PATIENT_ID] [VARCHAR](20) NULL, - [SPECIES] [VARCHAR](50) NULL, - [HL7_MESSAGE_TEXT] [VARCHAR](MAX) NULL, - [IMPORT_TEXT] [VARCHAR](MAX) NULL, - [Container] [dbo].[ENTITYID] NOT NULL, - [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL DEFAULT NEWID(), - [USER_NAME] [VARCHAR](128) NOT NULL DEFAULT USER_NAME(), - [ENTRY_DATE_TM] [DATETIME] NOT NULL DEFAULT GETDATE(), - [TIMESTAMP] [TIMESTAMP] NULL, - CONSTRAINT [PK_HL7_IMPORT_LOG] PRIMARY KEY CLUSTERED -( -[TID] ASC -) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON), - CONSTRAINT [CKC_HL7_IMPORT_LOG_OBSERVATION_DATE] CHECK (([OBSERVATION_DATE_TM] IS NULL OR [OBSERVATION_DATE_TM]<=GETDATE())) - ); -GO - -ALTER TABLE [snprc_ehr].[HL7_IMPORT_LOG] WITH CHECK ADD CONSTRAINT [FK_HL7_IMPORT_LOG_container] FOREIGN KEY([Container]) REFERENCES [core].[Containers] ([EntityId]); -GO - -CREATE TABLE [snprc_ehr].[HL7_OBX]( - [MESSAGE_ID] [VARCHAR](50) NOT NULL, - [IDX] [INT] NOT NULL, - [OBR_OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, - [SET_ID] [VARCHAR](20) NOT NULL, - [OBR_SET_ID] [VARCHAR](20) NOT NULL, - [VALUE_TYPE] [VARCHAR](10) NULL, - [TEST_ID] [VARCHAR](20) NULL, - [TEST_NAME] [VARCHAR](50) NULL, - [serviceTestId] [UNIQUEIDENTIFIER] NULL, - [QUALITATIVE_RESULT] [VARCHAR](MAX) NULL, - [RESULT] [VARCHAR](MAX) NULL, - [UNITS] [VARCHAR](20) NULL, - [REFERENCE_RANGE] [VARCHAR](60) NULL, - [ABNORMAL_FLAGS] [VARCHAR](10) NULL, - [RESULT_STATUS] [VARCHAR](10) NULL, - [Container] [dbo].[ENTITYID] NOT NULL, - [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL DEFAULT NEWID(), - [USER_NAME] [VARCHAR](128) NOT NULL DEFAULT USER_NAME(), - [ENTRY_DATE_TM] [DATETIME] NOT NULL DEFAULT GETDATE(), - [TIMESTAMP] [TIMESTAMP] NULL, - CONSTRAINT [PK_HL7_OBX] PRIMARY KEY CLUSTERED -( - [OBJECT_ID] -) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) -); -GO - -CREATE NONCLUSTERED INDEX [IDX_HL7_OBX_OBR_OBJ_ID] ON [snprc_ehr].[HL7_OBX] -( - [OBR_OBJECT_ID] ASC -) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; -GO - -ALTER TABLE [snprc_ehr].[HL7_OBX] WITH CHECK ADD CONSTRAINT [FK_HL7_OBX_container] FOREIGN KEY([Container]) REFERENCES [core].[Containers] ([EntityId]); -GO - -CREATE TABLE [snprc_ehr].[HL7_NTE]( - [MESSAGE_ID] [VARCHAR](50) NOT NULL, - [IDX] [INT] NOT NULL, - [OBR_OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL, - [SET_ID] [VARCHAR](20) NOT NULL, - [OBR_SET_ID] [VARCHAR](20) NOT NULL, - [COMMENT] [VARCHAR](MAX) NULL, - [Container] [dbo].[ENTITYID] NOT NULL, - [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL DEFAULT NEWID(), - [USER_NAME] [VARCHAR](128) NOT NULL DEFAULT USER_NAME(), - [ENTRY_DATE_TM] [DATETIME] NOT NULL DEFAULT GETDATE(), - [TIMESTAMP] [TIMESTAMP] NULL, - CONSTRAINT [PK_HL7_NTE] PRIMARY KEY CLUSTERED -( - [OBJECT_ID] ASC - -) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) -); -GO - -ALTER TABLE [snprc_ehr].[HL7_NTE] WITH CHECK ADD CONSTRAINT [FK_HL7_NTE_container] FOREIGN KEY([Container]) REFERENCES [core].[Containers] ([EntityId]); -GO - -CREATE NONCLUSTERED INDEX [IDX_HL7_NTE_OBR_OBJ_ID] ON [snprc_ehr].[HL7_NTE] -( - [OBR_OBJECT_ID] ASC -) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; -GO - -CREATE TABLE [snprc_ehr].[HL7_OBR]( - [MESSAGE_ID] [VARCHAR](50) NOT NULL, - [MESSAGE_CONTROL_ID] [VARCHAR](50) NOT NULL, - [IDX] [INT] NOT NULL, - [ANIMAL_ID] [VARCHAR](6) NOT NULL, - [VERIFIED_DATE_TM] [DATETIME] NULL, - [REQUESTED_DATE_TM] [DATETIME] NULL, - [OBSERVATION_DATE_TM] [DATETIME] NULL, - [SPECIMEN_RECEIVED_DATE_TM] [DATETIME] NULL, - [PV1_VISIT_NUM] [VARCHAR](50) NULL, - [SET_ID] [VARCHAR](20) NOT NULL, - [SPECIMEN_NUM] [VARCHAR](50) NULL, - [PROCEDURE_ID] [VARCHAR](20) NULL, - [PROCEDURE_NAME] [VARCHAR](200) NULL, -- Increased size from VARCHAR(50) - [PRIORITY] [VARCHAR](10) NULL, - [RESULT_STATUS] [VARCHAR](10) NULL, - [TECHNICIAN_FIRST_NAME] [VARCHAR](50) NULL, - [TECHNICIAN_LAST_NAME] [VARCHAR](50) NULL, - [CHARGE_ID] [INT] NULL, - [Container] [dbo].[ENTITYID] NOT NULL, - [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL DEFAULT NEWID(), - [USER_NAME] [VARCHAR](128) NOT NULL DEFAULT USER_NAME(), - [ENTRY_DATE_TM] [DATETIME] NOT NULL DEFAULT GETDATE(), - [TIMESTAMP] [TIMESTAMP] NULL, - CONSTRAINT [PK_HL7_OBR] PRIMARY KEY CLUSTERED -( - [OBJECT_ID] -) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON), - CONSTRAINT [CKC_ENTRY_DATE_TM_HL7_OBR_OBR] CHECK (([ENTRY_DATE_TM]<=GETDATE())) -); -GO - -CREATE NONCLUSTERED INDEX [IDX_HL7_OBR_ID_DATE] ON [snprc_ehr].[HL7_OBR] -( - [ANIMAL_ID] ASC, - [OBSERVATION_DATE_TM] ASC -) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; -GO - -ALTER TABLE [snprc_ehr].[HL7_OBR] WITH CHECK ADD CONSTRAINT [FK_HL7_OBR_container] FOREIGN KEY([Container]) REFERENCES [core].[Containers] ([EntityId]); -GO - -ALTER TABLE [snprc_ehr].[HL7_OBX] WITH CHECK ADD CONSTRAINT [FK_OBX_REF_OBR] FOREIGN KEY([OBR_OBJECT_ID]) REFERENCES [snprc_ehr].[HL7_OBR] ([OBJECT_ID]); -GO - -ALTER TABLE [snprc_ehr].[HL7_OBX] CHECK CONSTRAINT [FK_OBX_REF_OBR]; -GO - -ALTER TABLE [snprc_ehr].[HL7_NTE] WITH CHECK ADD CONSTRAINT [FK_NTE_REF_OBR] FOREIGN KEY([OBR_OBJECT_ID]) REFERENCES [snprc_ehr].[HL7_OBR] ([OBJECT_ID]); -GO - -ALTER TABLE [snprc_ehr].[HL7_NTE] CHECK CONSTRAINT [FK_NTE_REF_OBR]; -GO - -CREATE TABLE [snprc_ehr].[HL7_PID]( - [MESSAGE_ID] [VARCHAR](50) NOT NULL, - [IDX] [INT] NOT NULL, - [SET_ID] [VARCHAR](20) NULL, -- F1_C1 - [PATIENT_ID_EXTERNAL] [VARCHAR](20) NULL, -- F2_C1 - [PATIENT_ID_INTERNAL] [VARCHAR](20) NULL, -- F3_C1 - [BIRTHDATE] [DATETIME] NULL, --F7_C1 - [SEX] [VARCHAR] (20) NULL, -- F8_C1 - [BREED] [VARCHAR] (50) NULL, -- arc_species_code - F10_C1 (Race) - [SPECIES] [VARCHAR] (50) NULL, -- common name - F22_C1 (Ethnic Group) - [ACCOUNT_NUMBER] [VARCHAR] (50) NULL, --F18_C1 - [DEATH_DATE] [VARCHAR] (50) NULL, -- F29_C1 - [Container] [dbo].[ENTITYID] NOT NULL, - [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL DEFAULT NEWID(), - [USER_NAME] [VARCHAR](128) NOT NULL DEFAULT USER_NAME(), - [ENTRY_DATE_TM] [DATETIME] NOT NULL DEFAULT GETDATE(), - [TIMESTAMP] [TIMESTAMP] NULL, - CONSTRAINT [PK_HL7_PID] PRIMARY KEY CLUSTERED -( - [MESSAGE_ID] ASC, - [IDX] -) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) - ); -GO - -CREATE NONCLUSTERED INDEX [IDX_HL7_PID_ID] ON [snprc_ehr].[HL7_PID] -( - [PATIENT_ID_EXTERNAL] ASC -) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; -GO - -ALTER TABLE [snprc_ehr].[HL7_PID] WITH CHECK ADD CONSTRAINT [FK_HL7_PID_container] FOREIGN KEY([Container]) REFERENCES [core].[Containers] ([EntityId]); -GO - -CREATE TABLE [snprc_ehr].[HL7_PV1]( - [MESSAGE_ID] [VARCHAR](50) NOT NULL, - [IDX] [INT] NOT NULL, - [SET_ID] [VARCHAR](20) NULL, -- F1_C1 - [ADMISSION_TYPE] [VARCHAR] (20) NULL, --F4_C1 - [ATTENDING_DOCTOR_LAST] [VARCHAR] (50) NULL, -- F7_C2 - [ATTENDING_DOCTOR_FIRST] [VARCHAR] (50) NULL, -- F7_C3 - [VISIT_NUMBER] [VARCHAR] (20) NULL, -- F19_C1 - [CHARGE_NUMBER] [VARCHAR] (20) NULL, -- F22_C1 (Courtesy Code) - [ADMIT_DATE] [DATETIME] NULL, --F44_C1 - [Container] [dbo].[ENTITYID] NOT NULL, - [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL DEFAULT NEWID(), - [USER_NAME] [VARCHAR](128) NOT NULL DEFAULT USER_NAME(), - [ENTRY_DATE_TM] [DATETIME] NOT NULL DEFAULT GETDATE(), - [TIMESTAMP] [TIMESTAMP] NULL, - CONSTRAINT [PK_HL7_PV1] PRIMARY KEY CLUSTERED -( - [MESSAGE_ID] ASC, - [IDX] -) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) - ); -GO - -ALTER TABLE [snprc_ehr].[HL7_PV1] WITH CHECK ADD CONSTRAINT [FK_HL7_PV1_container] FOREIGN KEY([Container]) REFERENCES [core].[Containers] ([EntityId]); -GO - -CREATE TABLE [snprc_ehr].[HL7_ORC]( - [MESSAGE_ID] [VARCHAR](50) NOT NULL, - [IDX] [INT] NOT NULL, - [ORDER_CONTROL_CODE] [VARCHAR](20) NULL, -- F1_C1 - [FILLER_ORDER_NUMBER] [VARCHAR] (22) NULL, --F3_C1 - [ENTERED_BY_LAST] [VARCHAR] (50) NULL, -- F10_C2 - [ENTERED_BY_FIRST] [VARCHAR] (50) NULL, -- F10_C3 - [VERIFIED_BY_LAST] [VARCHAR] (50) NULL, -- F11_C2 - [VERIFIED_BY_FIRST] [VARCHAR] (50) NULL, -- F11_C3 - [ORDER_PROVIDER_LAST] [VARCHAR] (50) NULL, -- F12_C2 - [ORDER_PROVIDER_FIRST] [VARCHAR] (50) NULL, -- F12_C3 - [CALLBACK_EMAIL] [VARCHAR](50) NULL, -- F14_C3 - [ORDER_DATE] [DATETIME] NULL, -- F15_C1 - [Container] [dbo].[ENTITYID] NOT NULL, - [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL DEFAULT NEWID(), - [USER_NAME] [VARCHAR](128) NOT NULL DEFAULT USER_NAME(), - [ENTRY_DATE_TM] [DATETIME] NOT NULL DEFAULT GETDATE(), - [TIMESTAMP] [TIMESTAMP] NULL, - CONSTRAINT [PK_HL7_ORC] PRIMARY KEY CLUSTERED -( - [MESSAGE_ID] ASC, - [IDX] -) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) - ); -GO - -ALTER TABLE [snprc_ehr].[HL7_ORC] WITH CHECK ADD CONSTRAINT [FK_HL7_ORC_container] FOREIGN KEY([Container]) REFERENCES [core].[Containers] ([EntityId]); -GO - -CREATE TABLE [snprc_ehr].[HL7_MSH]( - [MESSAGE_ID] [VARCHAR](50) NOT NULL, - [IDX] [INT] NOT NULL, - [SENDING_APPLICATION] [VARCHAR](50) NULL, - [SENDING_FACILITY] [VARCHAR](50) NULL, - [RECEIVING_APPLICATION] [VARCHAR](50) NULL, - [RECEIVING_FACILITY] [VARCHAR](50) NULL, - [MESSAGE_TYPE] [VARCHAR](50) NULL, -- MSH_F9_C1 - [TRIGGER_EVENT_ID][VARCHAR](50) NULL, -- MSH_F9_C2 - [MESSAGE_CONTROL_ID] [VARCHAR](50) NULL, - [MESSAGE_DATE_TM] [DATETIME] NULL, - [Container] [dbo].[ENTITYID] NOT NULL, - [OBJECT_ID] [UNIQUEIDENTIFIER] NOT NULL DEFAULT NEWID(), - [USER_NAME] [VARCHAR](128) NOT NULL DEFAULT USER_NAME(), - [ENTRY_DATE_TM] [DATETIME] NOT NULL DEFAULT GETDATE(), - [TIMESTAMP] [TIMESTAMP] NULL, - CONSTRAINT [PK_HL7_MSH] PRIMARY KEY CLUSTERED -( - [MESSAGE_ID] ASC -) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) - ); -GO - -ALTER TABLE [snprc_ehr].[HL7_MSH] WITH CHECK ADD CONSTRAINT [FK_HL7_MSH_container] FOREIGN KEY([Container]) REFERENCES [core].[Containers] ([EntityId]); -GO - -ALTER TABLE [snprc_ehr].[HL7_OBR] WITH CHECK ADD CONSTRAINT [FK_OBR_REF_MSH] FOREIGN KEY([MESSAGE_ID]) REFERENCES [snprc_ehr].[HL7_MSH] ([MESSAGE_ID]); -GO - -ALTER TABLE [snprc_ehr].[HL7_OBR] CHECK CONSTRAINT [FK_OBR_REF_MSH]; -GO - -ALTER TABLE [snprc_ehr].[HL7_PID] WITH CHECK ADD CONSTRAINT [FK_PID_REF_MSH] FOREIGN KEY([MESSAGE_ID]) REFERENCES [snprc_ehr].[HL7_MSH] ([MESSAGE_ID]); -GO - -ALTER TABLE [snprc_ehr].[HL7_PID] CHECK CONSTRAINT [FK_PID_REF_MSH]; -GO - -ALTER TABLE [snprc_ehr].[HL7_PV1] WITH CHECK ADD CONSTRAINT [FK_PV1_REF_MSH] FOREIGN KEY([MESSAGE_ID]) REFERENCES [snprc_ehr].[HL7_MSH] ([MESSAGE_ID]); -GO - -ALTER TABLE [snprc_ehr].[HL7_PV1] CHECK CONSTRAINT [FK_PV1_REF_MSH]; -GO - -ALTER TABLE [snprc_ehr].[HL7_ORC] WITH CHECK ADD CONSTRAINT [FK_ORC_REF_MSH] FOREIGN KEY([MESSAGE_ID]) REFERENCES [snprc_ehr].[HL7_MSH] ([MESSAGE_ID]); -GO - -ALTER TABLE [snprc_ehr].[HL7_ORC] CHECK CONSTRAINT [FK_ORC_REF_MSH]; -GO - -CREATE TABLE snprc_ehr.HL7_PathologyCasesStaging ( - ID NVARCHAR(32) NOT NULL, - Date DATETIME NOT NULL, - RowId BIGINT IDENTITY(1,1) NOT NULL, - AccessionNumber NVARCHAR(10) NULL, - AccessionCode NVARCHAR(4000) NULL, - Tissue NVARCHAR(4000) NULL, - PerformedBy NVARCHAR(64) NULL, - Description NVARCHAR(4000) NULL, - Remark NVARCHAR(4000) NULL, - ApathRecordStatus NVARCHAR(1) NULL, - DeathType NVARCHAR(1) NULL, - Created DATETIME NULL, - CreatedBy dbo.USERID NULL, - Modified datetime NULL, - ModifiedBy dbo.USERID NULL, - Container dbo.ENTITYID NOT NULL, - ObjectId uniqueidentifier NULL, - timestamp ROWVERSION, - - CONSTRAINT PK_HL7_PathologyCasesStaging PRIMARY KEY CLUSTERED - ( - ID ASC, - Date ASC - ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) -); -GO - -CREATE TABLE snprc_ehr.HL7_PathologyDiagnosesStaging ( - ID NVARCHAR(32) NOT NULL, - Date DATETIME NOT NULL, - AccessionNumber NVARCHAR(40) NULL, - RowId BIGINT IDENTITY(1,1) NOT NULL, - Morphology NVARCHAR(4000) NULL, - Organ NVARCHAR(4000) NULL, - EtiologyCode NVARCHAR(4000) NULL, - SpecificEtiology NVARCHAR(4000) NULL, - PerformedBy NVARCHAR(64) NULL, - Description NVARCHAR(4000) NULL, - Remark NVARCHAR(4000) NULL, - Created datetime NULL, - CreatedBy dbo.USERID NULL, - Modified datetime NULL, - ModifiedBy dbo.USERID NULL, - Container dbo.ENTITYID NOT NULL, - ObjectId uniqueidentifier NULL, - timestamp ROWVERSION, - - CONSTRAINT PK_HL7_PathologyDiagnosesStaging PRIMARY KEY CLUSTERED - ( - RowID ASC - ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) -); -GO - -CREATE TABLE snprc_ehr.HL7_DeletePathologyCasesStaging ( - AccessionNumber NVARCHAR(10) NOT NULL, - ObjectId UNIQUEIDENTIFIER NOT NULL, - timestamp ROWVERSION - - CONSTRAINT PK_HL7_DeletePathologyCasesStaging PRIMARY KEY CLUSTERED - ( - AccessionNumber ASC, - ObjectId ASC - ) - WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) -); -GO - -CREATE TABLE snprc_ehr.HL7_DeletePathologyDiagnosesStaging ( - AccessionNumber NVARCHAR(10) NOT NULL, - ObjectId uniqueidentifier NOT NULL, - timestamp ROWVERSION - - CONSTRAINT PK_HL7_DeletePathologyDiagnosesStaging PRIMARY KEY CLUSTERED - ( - AccessionNumber ASC, - ObjectId ASC - ) - WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) -); -GO - -CREATE TABLE snprc_ehr.HL7_Demographics ( - ID NVARCHAR(32) NOT NULL, - RowId BIGINT IDENTITY(1,1) NOT NULL, - Gender NVARCHAR(32) NULL, - Species NVARCHAR(32) NOT NULL, - Breed NVARCHAR(40) NOT NULL, - BirthDate DATETIME NULL, - DeathDate DATETIME NULL, - isDeceased NVARCHAR(32) NULL, - Dam NVARCHAR(32) NULL, - Sire NVARCHAR(32) Null, - ObjectId uniqueidentifier NULL, - Modified datetime NULL, - ModifiedBy NVARCHAR(32) NULL, - Container dbo.ENTITYID NOT NULL, - - CONSTRAINT PK_HL7_Demographics PRIMARY KEY CLUSTERED - ( - RowId ASC - ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) -); -GO - -CREATE TABLE snprc_ehr.SndSuperPackageStaging -( - TopLevelPkgId INTEGER NOT NULL, - SuperPkgId INTEGER NOT NULL, - ParentSuperPkgId INTEGER NULL, - PkgId INTEGER NOT NULL, - TreePath VARCHAR(MAX) NOT NULL, - SuperPkgPath VARCHAR(MAX) NOT NULL, - SortOrder INTEGER NULL, - Required INTEGER NULL, - Description VARCHAR(MAX) NOT NULL, - Narrative VARCHAR(MAX) NOT NULL, - Active INTEGER NOT NULL, - Repeatable INTEGER NOT NULL, - Level INTEGER NOT NULL, - Created DATETIME NOT NULL, - CreatedBy USERID NOT NULL, - Modified DATETIME NOT NULL, - ModifiedBy USERID NOT NULL, - diModified DATETIME NOT NULL, - ObjectId UNIQUEIDENTIFIER NOT NULL DEFAULT NEWID() - - CONSTRAINT PK_SndSuperPackageStaging PRIMARY KEY CLUSTERED ( TopLevelPkgId, SuperPkgId) -); -GO - -CREATE TABLE snprc_ehr.SndPackageStaging -( - PkgId INTEGER NOT NULL, - Description NVARCHAR(4000) NOT NULL, - Active BIT NOT NULL, - Repeatable BIT NOT NULL, - Narrative NVARCHAR(4000) NOT NULL, - UsdaCode NVARCHAR(4000) NOT NULL, - CreatedBy USERID NOT NULL, - Created DATETIME NOT NULL, - ModifiedBy USERID NOT NULL, - Modified DATETIME NOT NULL, - diModified DATETIME NOT NULL, - ObjectId UNIQUEIDENTIFIER NOT NULL DEFAULT NEWID() - - CONSTRAINT PK_SndPackageStaging PRIMARY KEY CLUSTERED (PkgId) -); -GO - -CREATE TABLE snprc_ehr.SndPackageAttributeStaging -( - PkgId INTEGER NOT NULL, - AttributeId INTEGER NOT NULL, - AttributeName VARCHAR(128) NOT NULL, - LookupSchema VARCHAR(128) NULL, - LookupQuery VARCHAR(128) NULL, - RangeURI VARCHAR(MAX) NULL, - Label VARCHAR(128) NOT NULL, - ValidatorExpression VARCHAR(128) NULL, - SortOrder INT NULL, - Required BIT NULL, - DefaultValue VARCHAR(MAX) NULL, - AlternateText VARCHAR(MAX) NULL, - Created DATETIME NOT NULL, - CreatedBy USERID NOT NULL, - Modified DATETIME NOT NULL, - ModifiedBy USERID NOT NULL, - ObjectId UNIQUEIDENTIFIER NOT NULL DEFAULT NEWID() - - CONSTRAINT pk_SndPackagesAttributeStaging PRIMARY KEY CLUSTERED (AttributeId) -); -GO - -CREATE TABLE snprc_ehr.therapy_formulary( - RowId INT NOT NULL, - drug VARCHAR(400) NOT NULL, - dose NUMERIC(8, 4) NOT NULL, - route INT NOT NULL, -- FK snprc_ehr.therapy_routes.RowId - frequency INT NOT NULL, -- FK snprc_ehr.therapy_frequency.RowId` - duration INT NOT NULL, - units INT NOT NULL, -- FK snprc_ehr.therapy_units.RowId - isActive INT NULL, - dateDisabled DATETIME NULL, - Container dbo.ENTITYID NOT NULL, - Created DATETIME NULL, - CreatedBy dbo.USERID NULL, - Modified DATETIME NULL, - ModifiedBy dbo.USERID NULL, - ObjectId UNIQUEIDENTIFIER NOT NULL DEFAULT NEWID() - - CONSTRAINT PK_therapy_formulary PRIMARY KEY CLUSTERED (RowId) -); - -ALTER TABLE snprc_ehr.therapy_formulary WITH CHECK ADD CONSTRAINT FK_therapy_formulary_container FOREIGN KEY(Container) REFERENCES core.Containers (EntityId); -GO - -CREATE TABLE snprc_ehr.therapy_frequency( - RowId INT NOT NULL, - frequency VARCHAR(30) NOT NULL, - description VARCHAR(100) NULL, - isActive INT NULL, - Container dbo.ENTITYID NOT NULL, - Created DATETIME NULL, - CreatedBy dbo.USERID NULL, - Modified DATETIME NULL, - ModifiedBy dbo.USERID NULL, - ObjectId UNIQUEIDENTIFIER NOT NULL DEFAULT NEWID() - - CONSTRAINT PK_therapy_frequency PRIMARY KEY CLUSTERED (RowId) -); - -ALTER TABLE snprc_ehr.therapy_frequency WITH CHECK ADD CONSTRAINT FK_therapy_frequency FOREIGN KEY(Container) REFERENCES core.Containers (EntityId); -GO - -CREATE TABLE snprc_ehr.therapy_routes( - RowId INT NOT NULL, - route VARCHAR(30) NOT NULL, - description VARCHAR(100) NULL, - isActive INT NULL, - Container dbo.ENTITYID NOT NULL, - Created DATETIME NULL, - CreatedBy dbo.USERID NULL, - Modified DATETIME NULL, - ModifiedBy dbo.USERID NULL, - ObjectId UNIQUEIDENTIFIER NULL DEFAULT NEWID() - - CONSTRAINT PK_therapy_routes PRIMARY KEY CLUSTERED (RowId) -); - -ALTER TABLE snprc_ehr.therapy_routes WITH CHECK ADD CONSTRAINT FK_therapy_routes FOREIGN KEY(Container) REFERENCES core.Containers (EntityId); -GO - -CREATE TABLE snprc_ehr.therapy_units( - RowId INT NOT NULL, - units VARCHAR(30) NOT NULL, - description VARCHAR(100), - isActive INT NULL, - Container dbo.ENTITYID NOT NULL, - Created DATETIME NULL, - CreatedBy dbo.USERID NULL, - Modified DATETIME NULL, - ModifiedBy dbo.USERID NULL, - ObjectId UNIQUEIDENTIFIER NULL DEFAULT NEWID() - - CONSTRAINT PK_therapy_units PRIMARY KEY CLUSTERED (RowId) -); - -ALTER TABLE snprc_ehr.therapy_units WITH CHECK ADD CONSTRAINT FK_therapy_units FOREIGN KEY(Container) REFERENCES core.Containers (EntityId); -GO - -CREATE TABLE snprc_ehr.therapy_resolutions -( - RowId INT NOT NULL, - resolution VARCHAR(30) NOT NULL, - isActive INT NULL, - Container dbo.ENTITYID NOT NULL, - Created DATETIME NULL, - CreatedBy dbo.USERID NULL, - Modified DATETIME NULL, - ModifiedBy dbo.USERID NULL, - ObjectId UNIQUEIDENTIFIER NULL DEFAULT NEWID(), - - CONSTRAINT PK_therapy_resolutions PRIMARY KEY CLUSTERED (RowId) -); - -ALTER TABLE snprc_ehr.therapy_resolutions WITH CHECK ADD CONSTRAINT FK_therapy_resolutions FOREIGN KEY(Container) REFERENCES core.Containers (EntityId); -GO - -CREATE FUNCTION [snprc_ehr].[f_isNumeric] -( - @value VARCHAR(MAX) -) -RETURNS INT -AS -BEGIN - -- Declare the return variable here - DECLARE @return INT - - IF (@value IS NULL) - BEGIN - SET @return = 0 - GOTO finis - END - - select @value = LTRIM(RTRIM(REPLACE(@value, ' ', ''))) - - IF (ISNUMERIC(@value) = 1) - BEGIN - if ( LEN(@value) = 1 AND CHARINDEX ('+', @value, 1) > 0) - OR ( LEN(@value) = 1 AND CHARINDEX('-', @value, 1) > 0) - OR (CHARINDEX(',', @value, 1) > 0) - OR (CHARINDEX('-' , @value, 2) > 1) - - BEGIN - SET @return = 0 - GOTO finis - END - - SET @return = 1 - GOTO finis - - END - SET @return = 0 - - finis: - RETURN @return - -END - -GO diff --git a/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-25.000-25.001.sql b/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-25.000-25.001.sql deleted file mode 100644 index 6e71bfa15..000000000 --- a/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-25.000-25.001.sql +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (c) 2025-2026 LabKey Corporation - * - * Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0 - */ -EXEC core.fn_dropifexists @objname = 'SndSuperPackageStaging', @objschema = 'snprc_ehr', @objtype = 'TABLE'; - -CREATE TABLE snprc_ehr.SndSuperPackageStaging -( - TopLevelPkgId INTEGER NOT NULL, - SuperPkgId INTEGER NOT NULL, - ParentSuperPkgId INTEGER NULL, - PkgId INTEGER NOT NULL, - TreePath VARCHAR(800) NOT NULL, - SuperPkgPath VARCHAR(MAX) NOT NULL, - SortOrder INTEGER NULL, - Required INTEGER NULL, - Description VARCHAR(MAX) NOT NULL, - Narrative VARCHAR(MAX) NOT NULL, - Active INTEGER NOT NULL, - Repeatable INTEGER NOT NULL, - Level INTEGER NOT NULL, - Created DATETIME NOT NULL, - CreatedBy USERID NOT NULL, - Modified DATETIME NOT NULL, - ModifiedBy USERID NOT NULL, - diModified DATETIME NOT NULL, - ObjectId UNIQUEIDENTIFIER NOT NULL - - CONSTRAINT PK_SndSuperPackageStaging PRIMARY KEY CLUSTERED ( TopLevelPkgId, SuperPkgId, TreePath) -); -GO \ No newline at end of file diff --git a/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-26.000-26.001.sql b/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-26.000-26.001.sql deleted file mode 100644 index 06c94094e..000000000 --- a/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-26.000-26.001.sql +++ /dev/null @@ -1,7 +0,0 @@ -/* - * Copyright (c) 2026 LabKey Corporation - * - * Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0 - */ -EXEC core.executeJavaUpgradeCode 'fixSpecimenStorageColumnNames'; - diff --git a/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-create.sql b/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-create.sql deleted file mode 100644 index 04e1e8075..000000000 --- a/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-create.sql +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c) 2022-2026 LabKey Corporation - * - * Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0 - */ -CREATE VIEW [snprc_ehr].[HL7_GroupNTE] AS -SELECT - a.OBR_OBJECT_ID, - a.OBR_SET_ID, - a.Container, - STRING_AGG( a.comment, CHAR(10)) WITHIN GROUP (ORDER BY a.SET_ID ASC) AS comment -FROM - ( - SELECT COALESCE(CAST(n.comment AS VARCHAR(MAX)), '') AS comment, - n.OBR_OBJECT_ID AS OBR_OBJECT_ID, - n.OBR_SET_ID AS OBR_SET_ID, - n.set_id, - n.Container - FROM snprc_ehr.HL7_NTE n - ) as a -GROUP BY a.OBR_OBJECT_ID, a.OBR_SET_ID, a.Container - -GO \ No newline at end of file diff --git a/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-drop.sql b/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-drop.sql deleted file mode 100644 index cdafdca70..000000000 --- a/snprc_ehr/resources/schemas/dbscripts/sqlserver/snprc_ehr-drop.sql +++ /dev/null @@ -1,7 +0,0 @@ -/* - * Copyright (c) 2022-2026 LabKey Corporation - * - * Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0 - */ - -EXEC core.fn_dropifexists @objname = 'HL7_GroupNTE',@objschema = 'snprc_ehr', @objtype = 'VIEW'; \ No newline at end of file diff --git a/snprc_ehr/resources/views/ehrAdmin.html b/snprc_ehr/resources/views/ehrAdmin.html index 719944e0b..850461a23 100644 --- a/snprc_ehr/resources/views/ehrAdmin.html +++ b/snprc_ehr/resources/views/ehrAdmin.html @@ -22,7 +22,6 @@ {name: 'Update Study QCStates', url: '<%=contextPath%><%=containerPath%>/ehr-ensureQCStates.view'}, {name: 'Verify Dataset Resources', url: '<%=contextPath%><%=containerPath%>/ehr-verifyDatasetResources.view'}, {name: 'Verify Dataset Columns', url: '<%=contextPath%><%=containerPath%>/ehr-validateDataSetCols.view'}, - {name: 'Verify EHR Schema Indexes Are Compressed', url: '<%=contextPath%><%=containerPath%>/ehr-ensureEHRSchemaIndexes.view'}, {name: 'Cache Demographics On All Living Animals', url: '<%=contextPath%><%=containerPath%>/ehr-cacheLivingAnimals.view'}, {name: 'Cache Demographics On All Animals', url: '<%=contextPath%><%=containerPath%>/ehr-cacheLivingAnimals.view?includeAll=true'}, {name: 'Prime/Refresh Data Entry Cache', url: '<%=contextPath%><%=containerPath%>/ehr-primeDataEntryCache.view'} diff --git a/snprc_ehr/src/org/labkey/snprc_ehr/SNPRC_EHRModule.java b/snprc_ehr/src/org/labkey/snprc_ehr/SNPRC_EHRModule.java index 04652082e..d23e0eb49 100644 --- a/snprc_ehr/src/org/labkey/snprc_ehr/SNPRC_EHRModule.java +++ b/snprc_ehr/src/org/labkey/snprc_ehr/SNPRC_EHRModule.java @@ -21,7 +21,6 @@ import org.labkey.api.data.Container; import org.labkey.api.data.DbSchema; import org.labkey.api.data.ObjectFactory; -import org.labkey.api.data.UpgradeCode; import org.labkey.api.ehr.EHRService; import org.labkey.api.ehr.dataentry.DefaultDataEntryFormFactory; import org.labkey.api.ehr.history.DefaultArrivalDataSource; @@ -120,13 +119,6 @@ public String getName() return 26.002; } - @Nullable - @Override - public UpgradeCode getUpgradeCode() - { - return new SNPRC_EHRUpgradeCode(); - } - @Override protected void init() { diff --git a/snprc_ehr/src/org/labkey/snprc_ehr/SNPRC_EHRUpgradeCode.java b/snprc_ehr/src/org/labkey/snprc_ehr/SNPRC_EHRUpgradeCode.java deleted file mode 100644 index dccefd73c..000000000 --- a/snprc_ehr/src/org/labkey/snprc_ehr/SNPRC_EHRUpgradeCode.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (c) 2026 LabKey Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.labkey.snprc_ehr; - -import org.apache.logging.log4j.Logger; -import org.labkey.api.data.ColumnInfo; -import org.labkey.api.data.DbSchema; -import org.labkey.api.data.DbSchemaType; -import org.labkey.api.data.DbScope; -import org.labkey.api.data.DbScope.Transaction; -import org.labkey.api.data.SQLFragment; -import org.labkey.api.data.SchemaTableInfo; -import org.labkey.api.data.SqlSelector; -import org.labkey.api.data.Table; -import org.labkey.api.data.TableInfo; -import org.labkey.api.data.UpgradeCode; -import org.labkey.api.exp.OntologyManager; -import org.labkey.api.module.ModuleContext; -import org.labkey.api.specimen.model.SpecimenTablesProvider; -import org.labkey.api.util.PageFlowUtil; -import org.labkey.api.util.logging.LogHelper; - -import java.util.List; - -public class SNPRC_EHRUpgradeCode implements UpgradeCode -{ - private static final Logger LOG = LogHelper.getLogger(SNPRC_EHRUpgradeCode.class, "SNPRC_EHR upgrade status"); - - /** - * Called from snprc_ehr-26.000-26.001.sql - * - * For every PropertyDescriptor in the specimen storage schema, verify that its StorageColumnName - * exactly matches (case-sensitively) the physical metadata identifier of a column on the provisioned - * table. If not, rewrite it to the physical identifier of the column resolved either by the existing - * (case-insensitive) StorageColumnName lookup or, failing that, by the descriptor's Name. This makes - * the value still match after migration to a case-sensitive database. - */ - @SuppressWarnings("unused") - public static void fixSpecimenStorageColumnNames(ModuleContext context) - { - if (context.isNewInstall()) - return; - - TableInfo tinfoDomainDescriptor = OntologyManager.getTinfoDomainDescriptor(); - TableInfo tinfoPropertyDomain = OntologyManager.getTinfoPropertyDomain(); - TableInfo tinfoPropertyDescriptor = OntologyManager.getTinfoPropertyDescriptor(); - - DbScope scope = tinfoPropertyDescriptor.getSchema().getScope(); - DbSchema specimenSchema = DbSchema.get(SpecimenTablesProvider.SCHEMA_NAME, DbSchemaType.Provisioned); - - SQLFragment sql = new SQLFragment("SELECT px.PropertyId, dd.StorageSchemaName, dd.StorageTableName, px.StorageColumnName, px.Name FROM ") - .append(tinfoDomainDescriptor, "dd") - .append(" INNER JOIN ") - .append(tinfoPropertyDomain, "pd") - .append(" ON dd.DomainId = pd.DomainId INNER JOIN ") - .append(tinfoPropertyDescriptor, "px") - .append(" ON pd.PropertyId = px.PropertyId ") - .append("WHERE dd.StorageSchemaName = ?").add(SpecimenTablesProvider.SCHEMA_NAME) - .append(" AND dd.StorageTableName IS NOT NULL AND px.StorageColumnName IS NOT NULL"); - - List properties = new SqlSelector(scope, sql).getArrayList(PropertyRow.class); - LOG.info("Checking {} PropertyDescriptors in specimen storage schema '{}'", properties.size(), SpecimenTablesProvider.SCHEMA_NAME); - - int updated = 0; - int skipped = 0; - int alreadyCorrect = 0; - try (Transaction tx = scope.ensureTransaction()) - { - for (PropertyRow row : properties) - { - SchemaTableInfo provisioned = specimenSchema.getTable(row.storageTableName()); - if (provisioned == null) - { - LOG.warn("Provisioned table '{}.{}' does not exist; skipping property '{}'", - row.storageSchemaName(), row.storageTableName(), row.name()); - skipped++; - continue; - } - - // getColumn() is case-insensitive, so a case-mismatched StorageColumnName still resolves - // on SQL Server but will break after migration to a case-sensitive DB. Compare to the - // physical metadata identifier to decide whether a rewrite is needed. - ColumnInfo byStorage = provisioned.getColumn(row.storageColumnName()); - if (byStorage != null && row.storageColumnName().equals(byStorage.getMetaDataIdentifier().getId())) - { - LOG.debug("Property '{}' in '{}.{}': StorageColumnName '{}' already matches physical column case; nothing to update", - row.name(), row.storageSchemaName(), row.storageTableName(), row.storageColumnName()); - alreadyCorrect++; - continue; - } - - ColumnInfo target = byStorage != null ? byStorage : provisioned.getColumn(row.name()); - if (target == null) - { - LOG.warn("Property '{}' in '{}.{}': neither StorageColumnName '{}' nor Name '{}' exists in provisioned table; skipping", - row.name(), row.storageSchemaName(), row.storageTableName(), row.storageColumnName(), row.name()); - skipped++; - continue; - } - - String newStorageColumnName = target.getMetaDataIdentifier().getId(); - LOG.info("Updating StorageColumnName from '{}' to '{}' for property '{}' in table '{}.{}'", - row.storageColumnName(), newStorageColumnName, row.name(), row.storageSchemaName(), row.storageTableName()); - Table.update(null, tinfoPropertyDescriptor, PageFlowUtil.map("StorageColumnName", newStorageColumnName), row.propertyId()); - updated++; - } - tx.commit(); - } - - // Drop any cached PropertyDescriptors that may have been populated earlier in startup with the - // pre-update StorageColumnName. - OntologyManager.clearCaches(); - - LOG.info("Specimen StorageColumnName fix complete: {} updated, {} skipped, {} already correct", - updated, skipped, alreadyCorrect); - } - - public record PropertyRow(int propertyId, String storageSchemaName, String storageTableName, String storageColumnName, String name) {} -} diff --git a/snprc_ehr/src/org/labkey/snprc_ehr/history/DefaultTreatmentOrdersDataSource.java b/snprc_ehr/src/org/labkey/snprc_ehr/history/DefaultTreatmentOrdersDataSource.java index 5dd33b69a..7c9f20e17 100644 --- a/snprc_ehr/src/org/labkey/snprc_ehr/history/DefaultTreatmentOrdersDataSource.java +++ b/snprc_ehr/src/org/labkey/snprc_ehr/history/DefaultTreatmentOrdersDataSource.java @@ -30,7 +30,7 @@ public class DefaultTreatmentOrdersDataSource extends AbstractDataSource { - // SQL Server commonly includes fractional seconds, while Postgres may omit them when zero. + // Postgres may omit fractional seconds when they are zero. private static final DateTimeFormatter DATE_TIME_PARSER = new DateTimeFormatterBuilder() .appendPattern("yyyy-MM-dd HH:mm:ss") .optionalStart() diff --git a/snprc_ehr/src/org/labkey/snprc_ehr/history/LabworkDataSource.java b/snprc_ehr/src/org/labkey/snprc_ehr/history/LabworkDataSource.java index 146084083..5c190c98f 100644 --- a/snprc_ehr/src/org/labkey/snprc_ehr/history/LabworkDataSource.java +++ b/snprc_ehr/src/org/labkey/snprc_ehr/history/LabworkDataSource.java @@ -55,7 +55,7 @@ */ public class LabworkDataSource extends AbstractDataSource { - // SQL Server commonly includes fractional seconds, while Postgres may omit them when zero. + // Postgres may omit fractional seconds when they are zero. private static final DateTimeFormatter DATE_TIME_PARSER = new DateTimeFormatterBuilder() .appendPattern("yyyy-MM-dd HH:mm:ss") .optionalStart() diff --git a/snprc_ehr/src/org/labkey/snprc_ehr/services/AnimalsGroupAssignor.java b/snprc_ehr/src/org/labkey/snprc_ehr/services/AnimalsGroupAssignor.java index f6d63601e..d38e2c032 100644 --- a/snprc_ehr/src/org/labkey/snprc_ehr/services/AnimalsGroupAssignor.java +++ b/snprc_ehr/src/org/labkey/snprc_ehr/services/AnimalsGroupAssignor.java @@ -188,7 +188,7 @@ public void assign(List groupMembers) throws ValidationException sql.append("FROM "); sql.append(animalGroupMembers, "agm"); sql.append("\n"); - sql.append("inner join ehr_lookups.calendar as c on c.targetDate between agm.date and COALESCE(agm.enddate, getDate())\n"); + sql.append("inner join ehr_lookups.calendar as c on c.targetDate between agm.date and COALESCE(agm.enddate, CURRENT_TIMESTAMP)\n"); sql.append("where agm.participantid = ? and agm.groupId = ?\n"); sql.append(" and c.targetDate between ? and ?\n"); sql.append("group by agm.participantid"); @@ -217,7 +217,7 @@ public void assign(List groupMembers) throws ValidationException sql.append(animalGroupMembers, "agm"); sql.append("\n"); sql.append("inner join ehr_lookups.calendar as c\n "); //; - sql.append ("on c.targetDate between agm.date and COALESCE(agm.enddate, DATEADD(YEAR, 10, getDate()))\n"); + sql.append ("on c.targetDate between agm.date and COALESCE(agm.enddate, CURRENT_TIMESTAMP + INTERVAL '10 years')\n"); sql.append("where agm.participantid = ? \n"); sql.append(" and agm.groupId in " + getCategoryGroupsString() + "\n"); sql.append(" and c.targetDate between ? and ?\n"); diff --git a/snprc_genetics/module.properties b/snprc_genetics/module.properties index ed88888ab..03c583057 100644 --- a/snprc_genetics/module.properties +++ b/snprc_genetics/module.properties @@ -1,5 +1,4 @@ ModuleClass: org.labkey.snprc_genetics.SNPRC_GeneticsModule -SupportedDatabases: mssql, pgsql License: Apache 2.0 LicenseURL: http://www.apache.org/licenses/LICENSE-2.0 ManageVersion: true diff --git a/snprc_r24/module.properties b/snprc_r24/module.properties index c49a30532..72a54eb3b 100644 --- a/snprc_r24/module.properties +++ b/snprc_r24/module.properties @@ -1,6 +1,5 @@ ModuleClass: org.labkey.snprc_r24.snprc_r24Module Label: Marmoset R24 module -SupportedDatabases: mssql, pgsql License: Apache 2.0 LicenseURL: http://www.apache.org/licenses/LICENSE-2.0 ManageVersion: true \ No newline at end of file diff --git a/snprc_r24/resources/schemas/dbscripts/sqlserver/snprc_r24-0.000-25.000.sql b/snprc_r24/resources/schemas/dbscripts/sqlserver/snprc_r24-0.000-25.000.sql deleted file mode 100644 index 7cc549e97..000000000 --- a/snprc_r24/resources/schemas/dbscripts/sqlserver/snprc_r24-0.000-25.000.sql +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Copyright (c) 2019-2026 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 snprc_r24; -GO - -CREATE TABLE [snprc_R24].[Biomarkers]( - [RowId] [bigint] IDENTITY(1,1) NOT NULL, - [SampleId] [NVARCHAR](32) NOT NULL, - [Lab] [nvarchar](128) NULL, - [Analyte] [nvarchar](128) NOT NULL, - [ObjectId] nvarchar(128) DEFAULT (NEWID()) NULL, - [Value] numeric(6,2), - [Created] [DATETIME] NULL, - [CreatedBy] [dbo].[USERID] NULL, - [Modified] [DATETIME] NULL, - [ModifiedBy] [dbo].[USERID] NULL, - [DiCreated] [DATETIME] NULL, - [DiModified] [DATETIME] NULL, - [DiCreatedBy] [dbo].[USERID] NULL, - [DiModifiedBy] [dbo].[USERID] NULL, - Container entityId NOT NULL, - - CONSTRAINT PK_snprc_r24_Biomarkers PRIMARY KEY ([SampleId], [Analyte]), - CONSTRAINT FK_snprc_r24_Biomarkers_container FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) -); - -go - -CREATE TABLE [snprc_r24].[SampleInventory]( - [RowId] [bigint] IDENTITY(1,1) NOT NULL, - [AnimalId] [NVARCHAR](32) NOT NULL, - [Date] [DATETIME] NOT NULL, - [SampleId] [NVARCHAR](32) NOT NULL, - [Aim] [NVARCHAR](128) NULL, - [SampleType] [NVARCHAR](128) NOT NULL, - [ObjectId] nvarchar(128) DEFAULT (NEWID()) NULL, - [Created] [DATETIME] NULL, - [CreatedBy] [dbo].[USERID] NULL, - [Modified] [DATETIME] NULL, - [ModifiedBy] [dbo].[USERID] NULL, - [DiCreated] [DATETIME] NULL, - [DiModified] [DATETIME] NULL, - [DiCreatedBy] [dbo].[USERID] NULL, - [DiModifiedBy] [dbo].[USERID] NULL, - Container entityId NOT NULL, - SampleWeight NUMERIC(7,2) NULL, - SampleAmount NUMERIC(7,2) NULL, - - CONSTRAINT [pk_snprc_r24_sampleinventory] PRIMARY KEY ([SampleId] ASC), - CONSTRAINT [fk_snprc_r24_sampleinventory_container] FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) -); - -GO - -CREATE TABLE [snprc_r24].[lookupSets]( - [RowId] [bigint] IDENTITY(1,1) NOT NULL, - [SetName] [NVARCHAR](32) NOT NULL, - [Label] [NVARCHAR](32) NOT NULL, - [ObjectId] nvarchar(128) DEFAULT (NEWID()) NULL, - [Created] [DATETIME] NULL, - [CreatedBy] [dbo].[USERID] NULL, - [Modified] [DATETIME] NULL, - [ModifiedBy] [dbo].[USERID] NULL, - [DiCreated] [DATETIME] NULL, - [DiModified] [DATETIME] NULL, - [DiCreatedBy] [dbo].[USERID] NULL, - [DiModifiedBy] [dbo].[USERID] NULL, - Container entityId NOT NULL, - - CONSTRAINT [pk_snprc_r24_lookupsets] PRIMARY KEY ([RowId] ASC), - CONSTRAINT [fk_snprc_r24_lookupsets_container] FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) -); -GO - -CREATE UNIQUE NONCLUSTERED INDEX [idx_snprc_r24_lookupSets_setname] ON [snprc_r24].[lookupSets] ( [SetName] ASC ); -GO - -CREATE TABLE [snprc_r24].[lookups]( - [RowId] [bigint] IDENTITY(1,1) NOT NULL, - [SetName] [NVARCHAR](32) NOT NULL, - [Value] [NVARCHAR](128) NOT NULL, - [SortOrder] [INTEGER] NULL, - [DateDisabled] [datetime] NULL, - [ObjectId] nvarchar(128) DEFAULT (NEWID()) NULL, - [Created] [DATETIME] NULL, - [CreatedBy] [dbo].[USERID] NULL, - [Modified] [DATETIME] NULL, - [ModifiedBy] [dbo].[USERID] NULL, - [DiCreated] [DATETIME] NULL, - [DiModified] [DATETIME] NULL, - [DiCreatedBy] [dbo].[USERID] NULL, - [DiModifiedBy] [dbo].[USERID] NULL, - Container entityId NOT NULL, - - CONSTRAINT [pk_snprc_r24_lookups] PRIMARY KEY ([RowId] ASC), - CONSTRAINT [fk_snprc_r24_lookups_SetName] FOREIGN KEY (SetName) REFERENCES snprc_r24.LookupSets (SetName), - CONSTRAINT [fk_snprc_r24_lookups_container] FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) -); -GO - -CREATE UNIQUE NONCLUSTERED INDEX [idx_snprc_r24_lookups_setname] ON [snprc_r24].[lookups] ( [SetName] ASC, [VALUE] ASC); -GO - -CREATE TABLE [snprc_r24].[RowsToDelete]( - [ObjectId] [dbo].[EntityId] NOT NULL, - [Modified] [DATETIME] NOT NULL, - - CONSTRAINT [pk_snprc_r24_RowsToDelete] PRIMARY KEY ([ObjectId] ASC) -); - -GO - -CREATE TABLE [snprc_r24].[WeightStaging] ( - [AnimalId] [NVARCHAR](32) NOT NULL, - [Date] [DATETIME] NOT NULL, - [Weight] [FLOAT] NOT NULL, - [ObjectId] [dbo].EntityId NOT NULL, - [Created] [DATETIME] NULL, - [CreatedBy] [dbo].[USERID] NULL, - [Modified] [DATETIME] NULL, - [ModifiedBy] [dbo].[USERID] NULL, - - CONSTRAINT [pk_snprc_r24_weight_staging] PRIMARY KEY ([ObjectId] ASC) -); - -GO diff --git a/snprc_scheduler/module.properties b/snprc_scheduler/module.properties index 1b95bfa9d..b55cf6b0c 100644 --- a/snprc_scheduler/module.properties +++ b/snprc_scheduler/module.properties @@ -1,7 +1,6 @@ ModuleClass: org.labkey.snprc_scheduler.SNPRC_schedulerModule Label: SNPRC EHR Procedure scheduling module Description: The SNPRC scheduler provides timeline and procedure scheduling for snprc_ehr module. -SupportedDatabases: mssql, pgsql License: Apache 2.0 LicenseURL: http://www.apache.org/licenses/LICENSE-2.0 ManageVersion: true diff --git a/snprc_scheduler/resources/schemas/dbscripts/postgresql/snprc_scheduler-0.000-25.000.sql b/snprc_scheduler/resources/schemas/dbscripts/postgresql/snprc_scheduler-0.000-25.000.sql index 84a902d0d..18497aafc 100644 --- a/snprc_scheduler/resources/schemas/dbscripts/postgresql/snprc_scheduler-0.000-25.000.sql +++ b/snprc_scheduler/resources/schemas/dbscripts/postgresql/snprc_scheduler-0.000-25.000.sql @@ -132,7 +132,7 @@ CREATE TABLE snprc_scheduler.StudyDayNotes ( CONSTRAINT PK_StudyDayNotes PRIMARY KEY (ObjectId) ); --- Using NULLS NOT DISTINCT (PostgreSQL 15+) to match SQL Server behavior for unique constraints with NULLs +-- NULLS NOT DISTINCT (PostgreSQL 15+) so two rows with a NULL StudyDay still collide. CREATE UNIQUE INDEX idx_u_FK_to_TimelineItem ON snprc_scheduler.StudyDayNotes ( TimelineObjectId ASC, StudyDay ASC diff --git a/snprc_scheduler/resources/schemas/dbscripts/sqlserver/snprc_scheduler-0.000-25.000.sql b/snprc_scheduler/resources/schemas/dbscripts/sqlserver/snprc_scheduler-0.000-25.000.sql deleted file mode 100644 index b5ab3c5e0..000000000 --- a/snprc_scheduler/resources/schemas/dbscripts/sqlserver/snprc_scheduler-0.000-25.000.sql +++ /dev/null @@ -1,756 +0,0 @@ --- Create schema, tables, indexes, and constraints used for Snprc_scheduler module here --- All SQL VIEW definitions should be created in snprc_scheduler-create.sql and dropped in snprc_scheduler-drop.sql -CREATE SCHEMA snprc_scheduler; -GO - -/************************************************************************ -Create schema -Timeline, -TimelineItem, -Schedule, -TimelineAnimalJunction, -TimelinePojectItem - - -Do not have date bound reference from Timeline to TimelineAnimalJunction -Do not have date bound reference TimelineAnimalJunction to studyDataset_..._assignments - - -srr 10.30.18 - -Added qc and revisionNum columns -srr 11.01.2018 - -refactor keys, qcstate only in timeline. -pulled container from all tables - -Changed FK to snd.Projects back to composite. -Dropped ProjectObjectId from Timeline table. -srr 11.07.2018 - -************************************************************************/ - - - -/*==============================================================*/ -/* Table: Timeline */ -/*==============================================================*/ -create table SNPRC_Scheduler.Timeline ( - TimelineId int not null, - RevisionNum int not null, - ProjectObjectId entityId not null, - StartDate date null, - EndDate date null, - Description nvarchar(255) null, - LeadTech nvarchar(50) null, - Notes nvarchar(Max) null, - SchedulerNotes nvarchar(500) null, - QcState int null, - Created datetime null, - CreatedBy int null, - Modified datetime null, - ModifiedBy int null, - ObjectId entityId not null -) -go -execute sp_addextendedproperty 'MS_Description', - 'Data Dict', - 'Schema', 'SNPRC_Scheduler', 'table', 'timeline' -go - -execute sp_addextendedproperty 'MS_Description', - 'Added during 9/17/18 meeting. Size TBD', - 'Schema', 'SNPRC_Scheduler', 'table', 'timeline', 'column', 'Notes' -go - -execute sp_addextendedproperty 'MS_Description', - 'Will handle isActive function', - 'Schema', 'SNPRC_Scheduler', 'table', 'timeline', 'column', 'qcstate' -go - - -alter table SNPRC_Scheduler.Timeline - add constraint PK_Timeline primary key nonclustered (TimelineId, RevisionNum) -go - -alter table SNPRC_Scheduler.Timeline - add constraint AK_TimelineObjectId unique (ObjectId) -go - - - -/*==============================================================*/ -/* Index: IDX_TimelineFK1 */ -/*==============================================================*/ -create clustered index IDX_TimelineFK1 on SNPRC_Scheduler.Timeline ( - ProjectObjectId ASC -); -go - -alter table SNPRC_Scheduler.Timeline - add constraint FK_Timeline_SNDProject foreign key (ProjectObjectId) -references snd.projects (Objectid); -go - - - - - --- %% 111111111111 %%%%% end timeline - - -/*==============================================================*/ -/* Table: TimelineItem 2 */ -/*==============================================================*/ -create table SNPRC_Scheduler.TimelineItem ( - TimelineItemId int identity, - ProjectitemId int not null, - TimelineObjectId entityId not null, - StudyDay int null, - ScheduleDay int null, - Created datetime null, - CreatedBy int null, - Modified datetime null, - ModifiedBy int null, - ObjectId entityId not null -) - -go -alter table SNPRC_Scheduler.TimelineItem - add constraint PK_TimelineItem primary key nonclustered (TimelineItemId); - -go - -alter table SNPRC_Scheduler.TimelineItem - add constraint AK_TimelineItemObjectId unique (ObjectId); -go - - -/*==============================================================*/ -/* Index: IDXC_TimelineItemFK2 */ -/*==============================================================*/ -create clustered index IDXC_TimelineItemFK2 on SNPRC_Scheduler.TimelineItem ( - ProjectItemId ASC -); - -/*==============================================================*/ -/* Index: IDX_TimelineItemFK1 */ -/*==============================================================*/ -create index IDX_TimelineItemFK1 on SNPRC_Scheduler.TimelineItem ( - TimelineObjectId ASC -); -go - -alter table SNPRC_Scheduler.Timelineitem - add constraint FK_TimelineItem_Timeline foreign key (TimelineObjectId) -references SNPRC_Scheduler.Timeline (ObjectId); -go -alter table SNPRC_Scheduler.Timelineitem - add constraint FK_TimelineItem_SNDProjectItem foreign key (ProjectItemId) -references snd.ProjectItems (ProjectItemId); -go --- %% 22222222222 %% end timelineItem - -/*==============================================================*/ -/* Table: Schedule 3 */ -/*==============================================================*/ -create table SNPRC_Scheduler.Schedule ( - ScheduleId int identity, - TimelineItemId int not null, - TargetDate datetime not null, - Created datetime null, - CreatedBy int null, - Modified datetime null, - ModifiedBy int null, - ObjectId EntityId not null -); - -go - -alter table SNPRC_Scheduler.Schedule - add constraint PK_Schedule primary key (ScheduleId); -go - - -/*==============================================================*/ -/* Index: IDX_ScheduleFK1 */ -/*==============================================================*/ -create index IDX_ScheduleFK1 on SNPRC_Scheduler.Schedule ( - TimelineItemId ASC -) - - -alter table SNPRC_Scheduler.Schedule - add constraint FK_ScheduleFK1 foreign key (TimelineItemId) -references SNPRC_Scheduler.TimelineItem (TimelineItemId) -go - - --- %%% 333333 %%% end Schedule - -/*==============================================================*/ -/* Table: TimelineProjectItem 4 */ -/*==============================================================*/ -create table SNPRC_Scheduler.TimelineProjectItem ( - ProjectItemId int not null, - TimelineObjectId entityId not null, - TimelineId int not null, - TimelineRevisionNum int not null, - TimelineFootNotes nvarchar(100) null, - SortOrder int not null -) -go - -alter table SNPRC_Scheduler.TimelineProjectItem - add constraint PK_TimelineProjectItem primary key (TimelineObjectId, ProjectItemId) -go - -/*==============================================================*/ -/* Index: IDX_TimelineProjectItemFK1 */ -/*==============================================================*/ -create index IDX_TimelineProjectItemFK1 on SNPRC_Scheduler.TimelineProjectItem ( - TimelineObjectid ASC -) -go - -/*==============================================================*/ -/* Index: IDX_TimelineItemFK2 */ -/*==============================================================*/ -create index IDX_TimelineProjectItemFK2 on SNPRC_Scheduler.TimelineProjectItem ( - ProjectItemId ASC -) -go - -alter table SNPRC_Scheduler.TimelineProjectItem - add constraint FK_TimelineProjectItem_SndProject foreign key (ProjectItemId) -references snd.ProjectItems (ProjectitemId) -go - -alter table SNPRC_Scheduler.TimelineProjectItem - add constraint FK_TimelineProjectItem foreign key (TimelineObjectId) -references SNPRC_Scheduler.Timeline (ObjectId) -go - - - --- %%%%%%% 4444444 %%%%%%%%%%%% end TimelineProjectItem - -/*==============================================================*/ -/* Table: timelineanimaljunction 5 */ -/*==============================================================*/ -create table SNPRC_Scheduler.TimelineAnimalJunction ( - RowId int identity, - AnimalId nvarchar(50) not null, - TimelineObjectId entityId null, - StartDate date null, - StopDate date null, - Created datetime null, - CreatedBy int null, - Modified datetime null, - ModifiedBy int null, - ObjectId entityId not null -) - -go - -alter table SNPRC_Scheduler.TimelineAnimalJunction - add constraint PK_TimelineAnimalJunction primary key nonclustered (RowId) -go - - -/*==============================================================*/ -/* Index: IDXC_TimelineAnimalJunctionFK1 */ -/*==============================================================*/ -create clustered index IDXC_TimelineAnimalJunctionFK1 on SNPRC_Scheduler.TimelineAnimalJunction ( - TimelineObjectId ASC -) -go - -/*==============================================================*/ -/* Index: IDX_TimelineAnimalJunctionFK2 */ -/*==============================================================*/ -create index IDX_TimelineAnimalJunctionFK2 on SNPRC_Scheduler.TimelineAnimalJunction ( - AnimalID ASC -) -go - - -alter table SNPRC_Scheduler.TimelineAnimalJunction - add constraint FK_TimelineJunction_Timeline foreign key (TimelineObjectId) -references SNPRC_Scheduler.Timeline (ObjectId) -go - -/****************************************************** - - rename snprc_scheduler.TimelineAnimalJunction.StopDate to EndDate - -srr 11.12.2018 -******************************************************/ -SET QUOTED_IDENTIFIER ON -SET ARITHABORT ON -SET NUMERIC_ROUNDABORT OFF -SET CONCAT_NULL_YIELDS_NULL ON -SET ANSI_NULLS ON -SET ANSI_PADDING ON -SET ANSI_WARNINGS ON - -GO -EXECUTE sp_rename N'snprc_scheduler.TimelineAnimalJunction.StopDate', N'Tmp_EndDate', 'COLUMN' -GO -EXECUTE sp_rename N'snprc_scheduler.TimelineAnimalJunction.Tmp_EndDate', N'EndDate', 'COLUMN' -GO -ALTER TABLE snprc_scheduler.TimelineAnimalJunction - DROP COLUMN StartDate -GO --- END rename StopDate to EndDate - - - -/*####################################################################### -Change column: - ScheduleDay int -to - ScheduleDate date - - - - - -srr. 11.12.18 -####################################################################### */ - - - -ALTER TABLE [snprc_scheduler].[TimelineItem] DROP CONSTRAINT [FK_TimelineItem_Timeline]; -GO - -ALTER TABLE [snprc_scheduler].[TimelineItem] DROP CONSTRAINT [FK_TimelineItem_SNDProjectItem]; -GO - -ALTER TABLE [snprc_scheduler].[Schedule] DROP CONSTRAINT [FK_ScheduleFK1]; -GO - - -/****** Object: Table [snprc_scheduler].[TimelineItem] Script Date: 11/12/2018 11:42:24 AM ******/ -DROP TABLE [snprc_scheduler].[TimelineItem]; -GO - -/****** Object: Table [snprc_scheduler].[TimelineItem] Script Date: 11/12/2018 11:42:24 AM ******/ -SET ANSI_NULLS ON -GO - -SET QUOTED_IDENTIFIER ON -GO - - - -/**/ -/*==============================================================*/ -/* Table: TimelineItem 2 */ -/*==============================================================*/ -create table SNPRC_Scheduler.TimelineItem ( - TimelineItemId int identity, - ProjectitemId int not null, - TimelineObjectId entityId not null, - StudyDay int null, - ScheduleDate datetime null, - Created datetime null, - CreatedBy int null, - Modified datetime null, - ModifiedBy int null, - ObjectId entityId not null -) - - go -alter table SNPRC_Scheduler.TimelineItem - add constraint PK_TimelineItem primary key nonclustered (TimelineItemId) - -go - -alter table SNPRC_Scheduler.TimelineItem - add constraint AK_TimelineItemObjectId unique (ObjectId) -go - - -/*==============================================================*/ -/* Index: IDXC_TimelineItemFK2 */ -/*==============================================================*/ -create clustered index IDXC_TimelineItemFK2 on SNPRC_Scheduler.TimelineItem ( -ProjectItemId ASC -) - -/*==============================================================*/ -/* Index: IDX_TimelineItemFK1 */ -/*==============================================================*/ -create index IDX_TimelineItemFK1 on SNPRC_Scheduler.TimelineItem ( - TimelineObjectId ASC -) - go - -alter table SNPRC_Scheduler.Timelineitem - add constraint FK_TimelineItem_Timeline foreign key (TimelineObjectId) -references SNPRC_Scheduler.Timeline (ObjectId) -go -alter table SNPRC_Scheduler.Timelineitem - add constraint FK_TimelineItem_SNDProjectItem foreign key (ProjectItemId) -references snd.ProjectItems (ProjectItemId) -go - -alter table SNPRC_Scheduler.Schedule - add constraint FK_ScheduleFK1 foreign key (TimelineItemId) -references SNPRC_Scheduler.TimelineItem (TimelineItemId) -go - -/*********************************************** -Adding Created,Modified and ObjectId - -Populate ObjectId for current data, -set to NOT NULL - - -srr 11.28.2018 -srr 12.05.2018 Removed SETs -***********************************************/ ---BEGIN TRANSACTION -/* -SET QUOTED_IDENTIFIER ON -SET ARITHABORT ON -SET NUMERIC_ROUNDABORT OFF -SET CONCAT_NULL_YIELDS_NULL ON -SET ANSI_NULLS ON -SET ANSI_PADDING ON -SET ANSI_WARNINGS ON -*/ ---COMMIT -BEGIN TRANSACTION -GO -ALTER TABLE snprc_scheduler.TimelineProjectItem ADD - Created datetime NULL, -CreatedBy int NULL, -Modified datetime NULL, -ModifiedBy int NULL, -ObjectId dbo.ENTITYID NULL -GO -UPDATE snprc_scheduler.TimelineProjectItem -SET ObjectID = NEWID() -WHERE ObjectID IS null - GO -ALTER TABLE snprc_scheduler.TimelineProjectItem - DROP COLUMN TimelineId, TimelineRevisionNum -GO -ALTER TABLE snprc_scheduler.TimelineProjectItem - ALTER COLUMN ObjectId dbo.ENTITYID NOT NULL - - -ALTER TABLE snprc_scheduler.TimelineProjectItem SET (LOCK_ESCALATION = TABLE) -GO -if @@trancount = 1 -COMMIT ---select 'All is well' - -/*********************************************** -Table snprc_Scheduler.Schedule was refactored out -Dropping the table and FK - - -srr 11.30.2018 -***********************************************/ -ALTER TABLE [snprc_scheduler].[Schedule] DROP CONSTRAINT [FK_ScheduleFK1] -GO - -/****** Object: Table [snprc_scheduler].[Schedule] Script Date: 11/29/2018 11:16:22 AM ******/ -DROP TABLE [snprc_scheduler].[Schedule] -GO - -/******************************************* -TimelineObjectId should be NOT NULL -srr 12.04.2018 -*******************************************/ -DROP INDEX [IDXC_TimelineAnimalJunctionFK1] ON [snprc_scheduler].[TimelineAnimalJunction] WITH ( ONLINE = OFF ) -GO --- set TimelineObjectId to NOT NULL -ALTER TABLE snprc_scheduler.TimelineAnimalJunction - ALTER COLUMN TimelineObjectId ENTITYID NOT NULL - - -CREATE CLUSTERED INDEX [IDXC_TimelineAnimalJunctionFK1] ON [snprc_scheduler].[TimelineAnimalJunction] -( -[TimelineObjectId] ASC -) -GO - -/******************************************* -Add RC to Timeline table -srr 01.08.2019 -*******************************************/ -ALTER TABLE snprc_scheduler.Timeline ADD - RC nvarchar(50) NULL -GO - -/******************************************* -Add AnimalAccount to Timeline table -Will hold a concated list of animal acccount -for this project. -NOTE: Reference only, not validated -srr 05.22.2019 -*******************************************/ -ALTER TABLE snprc_scheduler.Timeline - ADD AnimalAccount NVARCHAR(255) NULL; -GO -/****************************************** -Add alternate key to TimlelineItem -for reference to the new StudyDayNotes table -srr 05.22.2019 -*******************************************/ - --- Reference is not to unique row --- will handle integrity via a different mechanism --- srr 05.28.2019 - -/* -ALTER TABLE snprc_scheduler.TimelineItem - ADD CONSTRAINT AK_AK_STUDYDAYNOTES_TIMELINE - UNIQUE ( - TimelineObjectId, - StudyDay - ); -GO -*/ --- drop table if it exists -EXEC core.fn_dropifexists 'StudyDayNotes','snprc_scheduler', 'TABLE'; - - -/******************************************** -Create table to hold day specific study notes. - -C:\MySoftware\labkey\trunk\externalModules\snprcEHRModules -snprcEHRModules -srr 05.22.2019 -*********************************************/ -/*==============================================================*/ -/* Table: StudyDayNotes */ -/*==============================================================*/ -CREATE TABLE snprc_scheduler.StudyDayNotes -( - ObjectId ENTITYID NOT NULL, - TimelineObjectId UNIQUEIDENTIFIER NULL, - StudyDay INT NULL, - StudyDayNote NVARCHAR(MAX) NULL, - QcState INT NULL, - Created DATETIME NULL, - CreatedBy INT NULL, - Modified DATETIME NULL, - ModifiedBy INT NULL -); -GO - -ALTER TABLE snprc_scheduler.StudyDayNotes - ADD CONSTRAINT PK_STUDYDAYNOTES - PRIMARY KEY (ObjectId); -GO - --- Reference is not to unique row --- will handle integrity via a different mechanism --- srr 05.24.2019 -/* -ALTER TABLE snprc_scheduler.StudyDayNotes - ADD CONSTRAINT FK_STUDYDAY_FK_TIMELI_TIMELINE - FOREIGN KEY ( - TimelineObjectId, - StudyDay - ) - REFERENCES snprc_scheduler.TimelineItem ( - TimelineObjectId, - StudyDay - ); -*/ - -/*************************************** -Integrity triggers - - - srr 05.28.2019 - **************************************/ - -/***************************** snprc_scheduler.tia_StudyDayNotes *****************************************/ - -/****** Object: Trigger [snprc_scheduler].[tia_StudyDayNotes] Script Date: 5/28/2019 10:50:47 AM ******/ - - -/* For referential integrity only. - Sole purpose is to prevent a note entry for (timeline-study day) that does not exists. - For INSERT and UPDATE - */ -CREATE TRIGGER snprc_scheduler.tiu_StudyDayNotes - ON snprc_scheduler.StudyDayNotes - FOR INSERT, UPDATE - AS -BEGIN -DECLARE @numrows INT, - @numnull INT, - @errno INT, - @errmsg VARCHAR(255); - -SELECT @numrows = @@rowcount; -IF @numrows = 0 - RETURN; -IF UPDATE(TimelineObjectId) - OR UPDATE(StudyDay) -BEGIN -IF -( - SELECT COUNT(*) - FROM snprc_scheduler.TimelineItem t - INNER JOIN INSERTED i - ON i.StudyDay = t.StudyDay - AND i.TimelineObjectId = t.TimelineObjectId -) < 1 -BEGIN -SELECT @errno = 50001, - @errmsg - = ' StudyDayNotes Trigger - TimelineObjectId - StudyDay pair do not exist SNPRC_Scheduler.Timelineitem. Cannot insert to SNPRC_Scheduler.StudyDayNotes'; -GOTO ERROR; -END; -END; - --- Return if all is well -RETURN; - - /* Error handling */ -error: - RAISERROR('%d: %s', 16, 0, @errno, @errmsg); --- LK will handle ROLLBACK TRANSACTION -END; -GO - -ALTER TABLE snprc_scheduler.StudyDayNotes ENABLE TRIGGER tiu_StudyDayNotes; -GO - -/***************************** snprc_scheduler.td_TimelineItem *****************************************/ - -CREATE TRIGGER [SNPRC_Scheduler].[td_TimelineItem] - ON [SNPRC_Scheduler].[TimelineItem] - FOR DELETE - AS -BEGIN -/***************************************************** - StudyDayNotes was an late addition to model. -This trigger’s sole purpose is to enforce referential integrity - between TimelineItem and StudyDayNotes tables -Each study day note requires one or more rows in the TimelineItem table. -This trigger used two table variables: -@Table_Notes holds rows that re required to have a matching row in the parent table. -@resultant uses EXCEPT operator to generate what the result of the delete will look like. -srr 06.07.19 - ****************************************************/ -DECLARE @numrows INT, - @numnull INT, - @errno INT, - @errmsg VARCHAR(255); - --- No rows, nothing to do -SELECT @numrows = @@rowcount; -IF @numrows = 0 -RETURN; --- No note rows for deleted items therefore nothing to do, exit -IF (SELECT COUNT(*) - FROM Deleted d - INNER JOIN SNPRC_Scheduler.StudyDayNotes n - ON n.StudyDay = d.StudyDay AND n.TimelineObjectId = d.TimelineObjectId) = 0 -RETURN; - - - -DECLARE @beforeCnt INT, - @afterCnt INT --- table var to hold join columns -DECLARE @tbl_Notes TABLE( - StudyDay INT, - TimelineObjecId UNIQUEIDENTIFIER - ) --- table var to hold resultant table -DECLARE @resultant TABLE( - StudyDay INT, - TimelineObjecId UNIQUEIDENTIFIER, - ProjectitemId int - ) - - -- these must exist in the post delete TimelineItem table -INSERT INTO @tbl_Notes(StudyDay, TimelineObjecId) -SELECT DISTINCT StudyDay, TimelineObjectId -FROM Deleted - -- EXCEPT used to generate the resultant table - INSERT INTO @resultant - ( - StudyDay, - TimelineObjecId, - ProjectitemId - ) -SELECT r.StudyDay, r.TimelineObjectId, r.ProjectitemId -FROM (-- new resultant table - SELECT b.TimelineItemId, b.ProjectitemId, b.TimelineObjectId, b.StudyDay - FROM SNPRC_Scheduler.TimelineItem b - INNER JOIN @tbl_Notes n - ON n.StudyDay = b.StudyDay AND n.TimelineObjecId = b.TimelineObjectId - EXCEPT - SELECT d.TimelineItemId, d.ProjectitemId, d.TimelineObjectId, d.StudyDay - FROM Deleted d - INNER JOIN @tbl_Notes n - ON n.StudyDay = d.StudyDay AND n.TimelineObjecId = d.TimelineObjectId - ) r - - - IF( SELECT COUNT(*) - --SELECT n.StudyDay, n.TimelineObjecId, r.StudyDay, r.TimelineObjecId - FROM @tbl_Notes n - LEFT OUTER JOIN @resultant r - ON r.StudyDay = n.StudyDay AND r.TimelineObjecId = n.TimelineObjecId - WHERE r.StudyDay IS NULL OR r.TimelineObjecId IS null) > 0 -BEGIN -SELECT @errno = 50001, - @errmsg - = ' Timeline Item Trigger - TimelineItem has a StudyDayNote and only item on Study day. Note must be deleted first. Data not modified.'; -GOTO ERROR; - -END; - - --- Return if all is well -RETURN; - - /* Error handling */ -error: - RAISERROR('%d: %s', 16, 0, @errno, @errmsg); --- LK will handle ROLLBACK TRANSACTION -END; -GO -ALTER TABLE snprc_scheduler.TimelineItem ENABLE TRIGGER td_TimelineItem; - -/******************************************/ --- setting ProjectItemID to NOT NULL - - -ALTER TABLE snprc_scheduler.TimelineItem - ALTER COLUMN ProjectitemId INT NULL; - ---srr 05.29.19 -/*****************************************/ - -/****************************** -Added unique index to FK columns - to ensure no duplicate rows. - -srr 06.10.2019 -******************************/ - -/****** Object: Index [idx_u_FK_TimelineItem] Script Date: 6/10/2019 4:00:27 PM ******/ -CREATE UNIQUE NONCLUSTERED INDEX idx_u_FK_to_TimelineItem ON snprc_scheduler.StudyDayNotes -( - TimelineObjectId ASC, - StudyDay ASC -) -GO - -ALTER TABLE snprc_scheduler.StudyDayNotes - DROP COLUMN QcState -GO \ No newline at end of file