diff --git a/.gitignore b/.gitignore index 64712ace..668cd9dc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,10 @@ .gradle build/ +# Log Files +nirc_ehr/resources/referenceStudy/etlLogs/ +nirc_ehr/resources/referenceStudy/*.log + # Ignore Gradle GUI config gradle-app.setting diff --git a/nirc_ehr/resources/data/reports.tsv b/nirc_ehr/resources/data/reports.tsv index 6452836c..1876633f 100644 --- a/nirc_ehr/resources/data/reports.tsv +++ b/nirc_ehr/resources/data/reports.tsv @@ -11,6 +11,8 @@ currentBlood Clinical js Current Blood true study currentBlood date false fal bloodDraws Clinical query Blood Draws TRUE study blood date FALSE FALSE qcstate/publicdata This report displays blood draw data for the selected animal obs Clinical query Observations TRUE study obs date FALSE FALSE qcstate/publicdata This report displays observations for the selected animal pairings Colony Management query Pairings TRUE study pairings date FALSE FALSE qcstate/publicdata This report displays pairings for the selected animal +breeder Colony Management query Breeder TRUE study breeder date FALSE FALSE qcstate/publicdata This report displays breeding data for the selected animal +clinremarks Clinical query Clinical Remarks true study Clinical Remarks date false false qcstate/publicdata This report contains the clinical remarks entered about each animal serology ClinPath query Serology TRUE study serology date FALSE FALSE qcstate/publicdata This report displays serology data for the selected animal vitals Clinical query Vital Signs TRUE study vitals date FALSE FALSE qcstate/publicdata This report displays vitals data for the selected animal physicalExam Clinical query Physical Exam TRUE study physicalExam date FALSE FALSE qcstate/publicdata This report displays physical exam data for the selected animal diff --git a/nirc_ehr/resources/etls/breeder.xml b/nirc_ehr/resources/etls/breeder.xml new file mode 100644 index 00000000..170d2e05 --- /dev/null +++ b/nirc_ehr/resources/etls/breeder.xml @@ -0,0 +1,31 @@ + + + Breeder + Breeder + + + Copy to breeder target + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/nirc_ehr/resources/etls/clinremarks.xml b/nirc_ehr/resources/etls/clinremarks.xml new file mode 100644 index 00000000..54f227b6 --- /dev/null +++ b/nirc_ehr/resources/etls/clinremarks.xml @@ -0,0 +1,31 @@ + + + Clinical Remarks + Comments/Clinical Remarks + + + Copy to clinremarks target + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/nirc_ehr/resources/queries/dbo/q_breeder.sql b/nirc_ehr/resources/queries/dbo/q_breeder.sql new file mode 100644 index 00000000..0566ff18 --- /dev/null +++ b/nirc_ehr/resources/queries/dbo/q_breeder.sql @@ -0,0 +1,21 @@ +SELECT anmEvt.ANIMAL_EVENT_ID AS objectid, + anmEvt.ANIMAL_ID AS Id, + CAST(anmEvt.EVENT_DATETIME AS TIMESTAMP) AS administrationDate, + (CASE + WHEN anmEvt.STAFF_ID.EMAIL_ADDRESS IS NULL THEN 'unknown' + ELSE substr(anmEvt.STAFF_ID.EMAIL_ADDRESS, 1, + instr(anmEvt.STAFF_ID.EMAIL_ADDRESS, '@') - 1) END) AS performedby, + anmEvt.EVENT_ID.NAME AS type, + anmEvt.TEXT_RESULT AS result, + anmEvt.ATTACHMENT_PATH AS attachmentFile, + anmCmt.TEXT AS remark, + CAST(COALESCE(adt.CHANGE_DATETIME, anmEvt.CREATED_DATETIME) AS TIMESTAMP) AS modified +FROM ANIMAL_EVENT anmEvt + LEFT JOIN ANIMAL_EVENT_COMMENT anmCmt ON anmEvt.ANIMAL_EVENT_ID = anmCmt.ANIMAL_EVENT_ID + LEFT JOIN EVENT_EVENT_GROUP evtEvtGrp ON evtEvtGrp.EVENT_ID = anmEvt.EVENT_ID + LEFT JOIN AUDIT_TRAIL adt + ON anmEvt.ANIMAL_EVENT_ID = substring(adt.PRIMARY_KEY_VALUES, length('ANIMAL_EVENT_ID = ')) + AND adt.PRIMARY_KEY_VALUES LIKE '%ANIMAL_EVENT_ID%' + +WHERE evtEvtGrp.EVENT_GROUP_ID = 56 +-- 56 Breeder \ No newline at end of file diff --git a/nirc_ehr/resources/queries/dbo/q_breeder_delete.sql b/nirc_ehr/resources/queries/dbo/q_breeder_delete.sql new file mode 100644 index 00000000..9007e5ce --- /dev/null +++ b/nirc_ehr/resources/queries/dbo/q_breeder_delete.sql @@ -0,0 +1,9 @@ +SELECT substring(adt.PRIMARY_KEY_VALUES, length('ANIMAL_EVENT_ID = ')) AS objectid, + CAST(adt.CHANGE_DATETIME AS TIMESTAMP) AS modified, + adt.REFERENCE +FROM AUDIT_TRAIL adt +WHERE adt.PRIMARY_KEY_VALUES LIKE '%ANIMAL_EVENT_ID%' AND + (adt.REFERENCE LIKE '%Multiple Sires%' OR + adt.REFERENCE LIKE '%Multiple Dams%' OR + adt.REFERENCE LIKE '%Mating Event%') AND + adt.COLUMN_NAME = 'DELETE' \ No newline at end of file diff --git a/nirc_ehr/resources/queries/dbo/q_clinremarks.sql b/nirc_ehr/resources/queries/dbo/q_clinremarks.sql new file mode 100644 index 00000000..21c3bad6 --- /dev/null +++ b/nirc_ehr/resources/queries/dbo/q_clinremarks.sql @@ -0,0 +1,20 @@ +SELECT anmEvt.ANIMAL_EVENT_ID AS objectid, + anmEvt.ANIMAL_ID AS Id, + CAST(anmEvt.EVENT_DATETIME AS TIMESTAMP) AS administrationDate, + (CASE + WHEN anmEvt.STAFF_ID.EMAIL_ADDRESS IS NULL THEN 'unknown' + ELSE substr(anmEvt.STAFF_ID.EMAIL_ADDRESS, 1, + instr(anmEvt.STAFF_ID.EMAIL_ADDRESS, '@') - 1) END) AS performedby, + anmEvt.EVENT_ID.EVENT_ID AS category, + anmEvt.DIAGNOSIS AS hx, + anmCmt.TEXT AS remark, + CAST(COALESCE(adt.CHANGE_DATETIME, anmEvt.CREATED_DATETIME) AS TIMESTAMP) AS modified +FROM ANIMAL_EVENT anmEvt + LEFT JOIN ANIMAL_EVENT_COMMENT anmCmt ON anmEvt.ANIMAL_EVENT_ID = anmCmt.ANIMAL_EVENT_ID + LEFT JOIN EVENT_EVENT_GROUP evtEvtGrp ON evtEvtGrp.EVENT_ID = anmEvt.EVENT_ID + LEFT JOIN AUDIT_TRAIL adt + ON anmEvt.ANIMAL_EVENT_ID = substring(adt.PRIMARY_KEY_VALUES, length('ANIMAL_EVENT_ID = ')) + AND adt.PRIMARY_KEY_VALUES LIKE '%ANIMAL_EVENT_ID%' + +WHERE evtEvtGrp.EVENT_GROUP_ID = 53 +-- 53 Comments \ No newline at end of file diff --git a/nirc_ehr/resources/queries/dbo/q_clinremarks_delete.sql b/nirc_ehr/resources/queries/dbo/q_clinremarks_delete.sql new file mode 100644 index 00000000..7e25d29f --- /dev/null +++ b/nirc_ehr/resources/queries/dbo/q_clinremarks_delete.sql @@ -0,0 +1,26 @@ +SELECT substring(adt.PRIMARY_KEY_VALUES, length('ANIMAL_EVENT_ID = ')) AS objectid, + CAST(adt.CHANGE_DATETIME AS TIMESTAMP) AS modified, + adt.REFERENCE +FROM AUDIT_TRAIL adt +WHERE adt.PRIMARY_KEY_VALUES LIKE '%ANIMAL_EVENT_ID%' AND + (adt.REFERENCE LIKE '%Gross Pathology%' OR + adt.REFERENCE LIKE '%Cardiopulmonary Disorder%' OR + adt.REFERENCE LIKE '%Dermatological Disorder%' OR + adt.REFERENCE LIKE '%Endocrine Disorder%' OR + adt.REFERENCE LIKE '%Environmental Exposure%' OR + adt.REFERENCE LIKE '%Gastrointestinal Disorder%' OR + adt.REFERENCE LIKE '%Hematological Disorder%' OR + adt.REFERENCE LIKE '%Iatrogenic%' OR + adt.REFERENCE LIKE '%Immune Disorder%' OR + adt.REFERENCE LIKE '%Infectious Disease%' OR + adt.REFERENCE LIKE '%Metabolic Disorder%' OR + adt.REFERENCE LIKE '%Musculoskeletal Disorder%' OR + adt.REFERENCE LIKE '%Neoplasia%' OR + adt.REFERENCE LIKE '%Neurological Disorder%' OR + adt.REFERENCE LIKE '%No Post Mortem exam%' OR + adt.REFERENCE LIKE '%Opthalmologic Disorder%' OR + adt.REFERENCE LIKE '%Reproductive Disorder%' OR + adt.REFERENCE LIKE '%Autolysis%' OR + adt.REFERENCE LIKE '%No gross abnormalities%' OR + adt.REFERENCE LIKE '%General Comment%') AND + adt.COLUMN_NAME = 'DELETE' \ No newline at end of file diff --git a/nirc_ehr/resources/queries/dbo/q_lookups.sql b/nirc_ehr/resources/queries/dbo/q_lookups.sql index cf34f512..216d178c 100644 --- a/nirc_ehr/resources/queries/dbo/q_lookups.sql +++ b/nirc_ehr/resources/queries/dbo/q_lookups.sql @@ -82,12 +82,12 @@ FROM PROTOCOL_CATEGORY UNION -SELECT 'PROTOCOL_STATE_' || STATE_ID AS objectid, +SELECT 'PROTOCOL_STATE_' || ID AS objectid, 'protocol_state' AS set_name, -STATE_ID AS "value", -STATE_NAME AS description, -STATE_NAME AS title, -STATE_ID AS sort_order, +ID AS "value", +DESCRIPTION AS description, +NAME AS title, +ID AS sort_order, NULL AS date_disabled, NULL AS category, FROM PROTOCOL_CATEGORY @@ -105,4 +105,21 @@ WHEN 'Y' THEN NULL WHEN 'N' THEN '1/1/1970' END AS date_disabled, NULL AS category, -FROM QUESTIONNAIRE \ No newline at end of file +FROM QUESTIONNAIRE + +UNION + +SELECT +'CLINREMARKS_CATEGORY' || EVENT_ID.EVENT_ID as objectid, +'clinremarks_category' AS set_name, +EVENT_ID.EVENT_ID AS "value", +EVENT_ID.DESCRIPTION AS description, +EVENT_ID.NAME AS title, +EVENT_ID.EVENT_ID AS sort_order, +CASE + WHEN EVENT_ID.ACTIVE_YN = 'Y' AND EVENT_GROUP_ID.ACTIVE_YN = 'Y' THEN NULL + ELSE '1/1/1970' + END AS date_disabled, +NULL AS category, +FROM EVENT_EVENT_GROUP +WHERE EVENT_GROUP_ID.EVENT_GROUP_ID = 53 diff --git a/nirc_ehr/resources/queries/study/breeder/.qview.xml b/nirc_ehr/resources/queries/study/breeder/.qview.xml new file mode 100644 index 00000000..2e2a0afc --- /dev/null +++ b/nirc_ehr/resources/queries/study/breeder/.qview.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/nirc_ehr/resources/queries/study/clinremarks.query.xml b/nirc_ehr/resources/queries/study/clinremarks.query.xml new file mode 100644 index 00000000..df2963ca --- /dev/null +++ b/nirc_ehr/resources/queries/study/clinremarks.query.xml @@ -0,0 +1,18 @@ + + + + + + + Category + + ehr_lookups + clinremarks_category + value + + + +
+
+
+
\ No newline at end of file diff --git a/nirc_ehr/resources/queries/study/clinremarks/.qview.xml b/nirc_ehr/resources/queries/study/clinremarks/.qview.xml new file mode 100644 index 00000000..e872acfe --- /dev/null +++ b/nirc_ehr/resources/queries/study/clinremarks/.qview.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/nirc_ehr/resources/queries/study/q_lookup_sets.sql b/nirc_ehr/resources/queries/study/q_lookup_sets.sql index 4b3e9c8c..a58b74a4 100644 --- a/nirc_ehr/resources/queries/study/q_lookup_sets.sql +++ b/nirc_ehr/resources/queries/study/q_lookup_sets.sql @@ -58,4 +58,12 @@ SELECT 'questionnaire' AS setname, 'Questionnaire' AS label, 'value' AS keyField, 'title'AS titleColumn, + CAST('2021-07-30' AS TIMESTAMP) AS updated_at + +UNION + +SELECT 'clinremarks_category' AS setname, + 'Clinical Remarks Category' AS label, + 'value' AS keyField, + 'title'AS titleColumn, CAST('2021-07-30' AS TIMESTAMP) AS updated_at \ No newline at end of file diff --git a/nirc_ehr/resources/referenceStudy/datasets/datasets_manifest.xml b/nirc_ehr/resources/referenceStudy/datasets/datasets_manifest.xml index 05814e38..59faa3d3 100644 --- a/nirc_ehr/resources/referenceStudy/datasets/datasets_manifest.xml +++ b/nirc_ehr/resources/referenceStudy/datasets/datasets_manifest.xml @@ -11,6 +11,8 @@ + + diff --git a/nirc_ehr/resources/referenceStudy/datasets/datasets_metadata.xml b/nirc_ehr/resources/referenceStudy/datasets/datasets_metadata.xml index 2bf8ca76..cc20a26d 100644 --- a/nirc_ehr/resources/referenceStudy/datasets/datasets_metadata.xml +++ b/nirc_ehr/resources/referenceStudy/datasets/datasets_metadata.xml @@ -172,6 +172,72 @@ + + Breeder + + + varchar + http://cpas.labkey.com/Study#ParticipantId + + ptid + + + + timestamp + http://cpas.labkey.com/Study#VisitDate + http://cpas.labkey.com/Study#VisitDate + + + varchar + urn:ehr.labkey.org/#ObjectId + true + + + varchar + + + varchar + + + varchar + + + Attachment File + varchar + + +
+ + Clinical Remarks + + + varchar + http://cpas.labkey.com/Study#ParticipantId + + ptid + + + + timestamp + http://cpas.labkey.com/Study#VisitDate + http://cpas.labkey.com/Study#VisitDate + + + varchar + urn:ehr.labkey.org/#ObjectId + true + + + varchar + + + varchar + + + varchar + + +
Demographics diff --git a/nirc_ehr/resources/schemas/dbscripts/postgresql/nirc_ehr-21.016-21.017.sql b/nirc_ehr/resources/schemas/dbscripts/postgresql/nirc_ehr-21.016-21.017.sql new file mode 100644 index 00000000..fceacc29 --- /dev/null +++ b/nirc_ehr/resources/schemas/dbscripts/postgresql/nirc_ehr-21.016-21.017.sql @@ -0,0 +1,4 @@ +SELECT core.executeJavaUpgradeCode('reloadStudy'); +SELECT core.executeJavaUpgradeCode('etl;{NIRC_EHR}/breeder'); +SELECT core.executeJavaUpgradeCode('etl;{NIRC_EHR}/ehr_lookups;truncate'); +SELECT core.executeJavaUpgradeCode('etl;{NIRC_EHR}/clinremarks'); \ No newline at end of file diff --git a/nirc_ehr/resources/views/ehrAdmin.html b/nirc_ehr/resources/views/ehrAdmin.html index b2e70475..fe34395e 100644 --- a/nirc_ehr/resources/views/ehrAdmin.html +++ b/nirc_ehr/resources/views/ehrAdmin.html @@ -13,7 +13,8 @@ {name: 'Manage EHR Study', url: '<%=contextPath%><%=containerPath%>/study-manageStudy.view?'}, {name: 'Populate Reports', url: '<%=contextPath%><%=containerPath%>/nirc_ehr-populateData.view?'}, {name: 'Set EHR Properties', url: '<%=contextPath%><%=containerPath%>/core-modulePropertyAdmin.view?moduleName=EHR'}, - {name: 'Add QC States', url: '<%=contextPath%><%=containerPath%>/ehr-ensureQcStates.view?'} + {name: 'Add QC States', url: '<%=contextPath%><%=containerPath%>/ehr-ensureQcStates.view?'}, + {name: 'Prime/Refresh EHR Data Cache', url: '<%=contextPath%>/ehr<%=containerPath%>/primeDataEntryCache.view?'} ] },{ header: 'Logs', diff --git a/nirc_ehr/src/org/labkey/nirc_ehr/NIRC_EHRModule.java b/nirc_ehr/src/org/labkey/nirc_ehr/NIRC_EHRModule.java index e1711b50..a23cc0b3 100644 --- a/nirc_ehr/src/org/labkey/nirc_ehr/NIRC_EHRModule.java +++ b/nirc_ehr/src/org/labkey/nirc_ehr/NIRC_EHRModule.java @@ -20,6 +20,7 @@ import org.jetbrains.annotations.Nullable; import org.labkey.api.ehr.EHRService; import org.labkey.api.ehr.SharedEHRUpgradeCode; +import org.labkey.api.ehr.history.DefaultClinicalRemarksDataSource; import org.labkey.api.ldk.ExtendedSimpleModule; import org.labkey.api.module.Module; import org.labkey.api.module.ModuleContext; @@ -45,7 +46,7 @@ public String getName() @Override public @Nullable Double getSchemaVersion() { - return 21.016; + return 21.017; } @Override @@ -76,6 +77,8 @@ protected void doStartupAfterSpringConfig(ModuleContext moduleContext) { EHRService ehrService = EHRService.get(); ehrService.registerModule(this); + + EHRService.get().registerHistoryDataSource(new DefaultClinicalRemarksDataSource(this)); } @Override