diff --git a/IDR/resources/queries/bimber_data/idrAnchorDateSource.sql b/IDR/resources/queries/bimber_data/idrAnchorDateSource.sql index 7bdf019d..50205baf 100644 --- a/IDR/resources/queries/bimber_data/idrAnchorDateSource.sql +++ b/IDR/resources/queries/bimber_data/idrAnchorDateSource.sql @@ -7,6 +7,7 @@ PID0 as date, FROM bimber_data.subjects WHERE PID0 IS NOT NULL +AND Cohort NOT IN ('PC549', 'PC585', 'PC529') AND Cohort NOT LIKE 'W%' UNION ALL @@ -18,4 +19,5 @@ D0 as date, 'Hansen/IDR' as dataSource FROM bimber_data.subjects -WHERE D0 IS NOT NULL \ No newline at end of file +WHERE D0 IS NOT NULL + AND Cohort NOT IN ('PC549', 'PC585', 'PC529') AND Cohort NOT LIKE 'W%' \ No newline at end of file diff --git a/IDR/resources/queries/bimber_data/idrOutcomeSource.sql b/IDR/resources/queries/bimber_data/idrOutcomeSource.sql index d254000c..277eb04e 100644 --- a/IDR/resources/queries/bimber_data/idrOutcomeSource.sql +++ b/IDR/resources/queries/bimber_data/idrOutcomeSource.sql @@ -12,4 +12,5 @@ END as outcome, 'Hansen/IDR' as dataSource FROM bimber_data.subjects -WHERE contprog IS NOT NULL AND contprog != '' \ No newline at end of file +WHERE contprog IS NOT NULL AND contprog != '' +AND Cohort NOT IN ('PC549', 'PC585', 'PC529') AND Cohort NOT LIKE 'W%' \ No newline at end of file diff --git a/SivStudies/resources/etls/idr-data.xml b/SivStudies/resources/etls/idr-data.xml index f686476f..a7756e8c 100644 --- a/SivStudies/resources/etls/idr-data.xml +++ b/SivStudies/resources/etls/idr-data.xml @@ -125,7 +125,7 @@ - + diff --git a/SivStudies/resources/queries/study/demographics/Expanded ART Detail.qview.xml b/SivStudies/resources/queries/study/demographics/Expanded ART Detail.qview.xml new file mode 100644 index 00000000..d74baa9e --- /dev/null +++ b/SivStudies/resources/queries/study/demographics/Expanded ART Detail.qview.xml @@ -0,0 +1,25 @@ + \ No newline at end of file diff --git a/SivStudies/resources/queries/study/demographics/Expanded Vaccine Detail.qview.xml b/SivStudies/resources/queries/study/demographics/Expanded Vaccine Detail.qview.xml new file mode 100644 index 00000000..5734403d --- /dev/null +++ b/SivStudies/resources/queries/study/demographics/Expanded Vaccine Detail.qview.xml @@ -0,0 +1,21 @@ + \ No newline at end of file diff --git a/SivStudies/resources/queries/study/demographics/Expanded.qview.xml b/SivStudies/resources/queries/study/demographics/Expanded.qview.xml index 9e3d0a62..9ac5f0b1 100644 --- a/SivStudies/resources/queries/study/demographics/Expanded.qview.xml +++ b/SivStudies/resources/queries/study/demographics/Expanded.qview.xml @@ -4,8 +4,6 @@ - - diff --git a/SivStudies/resources/queries/study/demographics/SIV and ART Info.qview.xml b/SivStudies/resources/queries/study/demographics/SIV and ART Info.qview.xml index 43f68638..028b3a7b 100644 --- a/SivStudies/resources/queries/study/demographics/SIV and ART Info.qview.xml +++ b/SivStudies/resources/queries/study/demographics/SIV and ART Info.qview.xml @@ -4,7 +4,7 @@ - + diff --git a/SivStudies/resources/queries/study/demographicsChallengeAndArt.query.xml b/SivStudies/resources/queries/study/demographicsChallengeAndArt.query.xml index db95fd32..c0e5e43a 100644 --- a/SivStudies/resources/queries/study/demographicsChallengeAndArt.query.xml +++ b/SivStudies/resources/queries/study/demographicsChallengeAndArt.query.xml @@ -12,11 +12,13 @@ SIV Infection /query/executeQuery.view?schemaName=study&query.queryName=treatments&query.Id~eq=${Id}&query.category~eq=SIV Infection _blank + 150 - ART + ART Regimen /query/executeQuery.view?schemaName=study&query.queryName=treatments&query.Id~eq=${Id}&query.category~eq=ART _blank + 175 Infection Date diff --git a/SivStudies/resources/queries/study/demographicsChallengeAndArt.sql b/SivStudies/resources/queries/study/demographicsChallengeAndArt.sql index e9ed1f28..6805ca6d 100644 --- a/SivStudies/resources/queries/study/demographicsChallengeAndArt.sql +++ b/SivStudies/resources/queries/study/demographicsChallengeAndArt.sql @@ -5,13 +5,13 @@ FROM ( SELECT t.Id, group_concat(DISTINCT CASE - WHEN t.category = 'SIV Infection' THEN (cast(month(t.date) as varchar) || '/' || cast(dayofmonth(t.date) as varchar) || '/' || cast(year(t.date) as varchar) || ' (' || t.treatment || ')') + WHEN t.category = 'SIV Infection' THEN (t.treatment || (CASE WHEN t.route IS NULL then '' ELSE (', ' || t.route) END) || (CASE WHEN t.amount IS NULL then '' ELSE (', ' || CAST(t.amount as VARCHAR) || ' ' || t.amount_units) END)) ELSE NULL END, char(10)) as allInfections, min(floor(age(t.DataSets.Demographics.birth, CASE WHEN t.category = 'SIV Infection' THEN t.date ELSE NULL END))) AS ageAtInfection, group_concat(DISTINCT CASE - WHEN t.category = 'ART' THEN (cast(month(t.date) as varchar) || '/' || cast(dayofmonth(t.date) as varchar) || '/' || cast(year(t.date) as varchar) || ' (' || t.treatment || ')') + WHEN t.category = 'ART' THEN (t.treatment || ' (' || COALESCE(t.timePostSivChallenge.timePostInfection, 'Unk DPI') || ')') ELSE NULL END, char(10)) as allART, min(CASE diff --git a/SivStudies/resources/queries/study/demographicsInterventions.query.xml b/SivStudies/resources/queries/study/demographicsInterventions.query.xml index c41a1cc7..b717f3a3 100644 --- a/SivStudies/resources/queries/study/demographicsInterventions.query.xml +++ b/SivStudies/resources/queries/study/demographicsInterventions.query.xml @@ -22,6 +22,9 @@ First Intervention (WPI) + + First Intervention Relative to ART Release (Weeks) + allInterventions diff --git a/SivStudies/resources/queries/study/demographicsInterventions.sql b/SivStudies/resources/queries/study/demographicsInterventions.sql index 306ac17a..7d1c77da 100644 --- a/SivStudies/resources/queries/study/demographicsInterventions.sql +++ b/SivStudies/resources/queries/study/demographicsInterventions.sql @@ -1,20 +1,10 @@ SELECT t.Id, - group_concat(DISTINCT CASE - WHEN t.category = 'Intervention' THEN (t.treatment || ' (' || t.timePostSivChallenge.timePostInfection || ')') - ELSE NULL - END, char(10)) as allInterventions, - min(CASE - WHEN t.category = 'Intervention' THEN t.date - ELSE NULL - END) as firstInterventionDate, - min(CASE - WHEN t.category = 'Intervention' THEN t.timePostSivChallenge.daysPostInfection - ELSE NULL - END) as firstInterventionDPI, - min(CASE - WHEN t.category = 'Intervention' THEN t.timePostSivChallenge.weeksPostInfection - ELSE NULL - END) as firstInterventionWPI + group_concat(DISTINCT (t.treatment || ' (' || COALESCE(t.timePostSivChallenge.timePostInfection, 'Unk DPI') || ')'), char(10)) as allInterventions, + min(t.date) as firstInterventionDate, + min(t.timePostSivChallenge.daysPostInfection) as firstInterventionDPI, + min(t.timePostSivChallenge.weeksPostInfection) as firstInterventionWPI, + min(t.timePostSivChallenge.weeksPostInfection) - min(t.sivART.artReleaseWPI) as firstInterventionPostArtReleaseWeeks FROM study.treatments t +WHERE t.category = 'Intervention' GROUP BY t.Id \ No newline at end of file diff --git a/SivStudies/resources/queries/study/demographicsProjects.query.xml b/SivStudies/resources/queries/study/demographicsProjects.query.xml index 40389751..11e8665c 100644 --- a/SivStudies/resources/queries/study/demographicsProjects.query.xml +++ b/SivStudies/resources/queries/study/demographicsProjects.query.xml @@ -12,7 +12,16 @@ Study Categories - All Studies + Studies + /query/executeQuery.view?schemaName=study&query.queryName=assignment&query.Id~eq=${Id} + _blank + + + Studies and Analyses + + + Analysis Groups + 150 Subgroups/Treatments diff --git a/SivStudies/resources/queries/study/demographicsProjects.sql b/SivStudies/resources/queries/study/demographicsProjects.sql index d1a8689e..b54d1591 100644 --- a/SivStudies/resources/queries/study/demographicsProjects.sql +++ b/SivStudies/resources/queries/study/demographicsProjects.sql @@ -1,7 +1,9 @@ SELECT s.Id, count(s.Id) as totalProjects, - group_concat(DISTINCT s.study, char(10)) as allStudies, + group_concat(DISTINCT s.study, char(10)) as allStudiesAndAnalyses, + group_concat(DISTINCT CASE WHEN s.category = 'Analysis Cohorts' THEN NULL ELSE s.study END, char(10)) as allStudies, + group_concat(DISTINCT CASE WHEN s.category = 'Analysis Cohorts' THEN s.study ELSE NULL END, char(10)) as analysisGroups, group_concat(DISTINCT s.cohortId.studyId.description, char(10)) as studyDescription, group_concat(DISTINCT s.category, char(10)) as categories, group_concat(DISTINCT s.subgroup, char(10)) as subgroups diff --git a/SivStudies/resources/queries/study/infectionAnchorDateDiscordance.sql b/SivStudies/resources/queries/study/infectionAnchorDateDiscordance.sql index c19cd094..cb140f34 100644 --- a/SivStudies/resources/queries/study/infectionAnchorDateDiscordance.sql +++ b/SivStudies/resources/queries/study/infectionAnchorDateDiscordance.sql @@ -1,16 +1,15 @@ SELECT - t.Id, + coalesce(t.Id, t2.subjectId) as Id, 'SIV Infection' as category, t.date as treatmentTableDate, t2.date as subjectAnchorDatesTableDate FROM study.treatments t FULL JOIN studies.subjectAnchorDates t2 ON ( - t.category = 'SIV Infection' AND - t2.subjectId = t.Id AND - t2.eventLabel = 'SIV Infection' + t.category = t2.eventLabel AND + t2.subjectId = t.Id ) -WHERE t2.date != t.date OR +WHERE (t2.date != t.date OR t2.date IS NULL OR - t.date IS NULL \ No newline at end of file + t.date IS NULL) AND COALESCE(t.category, t2.eventLabel) = 'SIV Infection' \ No newline at end of file diff --git a/SivStudies/resources/queries/study/missingAnchorDates.query.xml b/SivStudies/resources/queries/study/missingAnchorDates.query.xml new file mode 100644 index 00000000..78b2805f --- /dev/null +++ b/SivStudies/resources/queries/study/missingAnchorDates.query.xml @@ -0,0 +1,9 @@ + + + + + Missing Anchor Dates +
+
+
+
\ No newline at end of file diff --git a/SivStudies/resources/queries/study/missingAnchorDates.sql b/SivStudies/resources/queries/study/missingAnchorDates.sql new file mode 100644 index 00000000..ba56cacf --- /dev/null +++ b/SivStudies/resources/queries/study/missingAnchorDates.sql @@ -0,0 +1,30 @@ +SELECT + dc.Id as SubjectId, + dc.infectionDate as date, + 'SIV Infection' as eventLabel + +FROM study.demographicsChallengeAndArt dc +LEFT JOIN studies.subjectAnchorDates ad ON (dc.Id = ad.SubjectId AND dc.infectionDate = ad.date AND ad.eventLabel = 'SIV Infection') +WHERE ad.rowid IS NULL AND dc.infectionDate IS NOT NULL + +UNION ALL + +SELECT + dc.Id as SubjectId, + dc.artInitiationDate as date, + 'ART Initiation' as eventLabel + +FROM study.demographicsChallengeAndArt dc + LEFT JOIN studies.subjectAnchorDates ad ON (dc.Id = ad.SubjectId AND dc.artInitiationDate = ad.date AND ad.eventLabel = 'ART Initiation') +WHERE ad.rowid IS NULL AND dc.artInitiationDate IS NOT NULL + +UNION ALL + +SELECT + dc.Id as SubjectId, + dc.artReleaseDate as date, + 'ART Release' as eventLabel + +FROM study.demographicsChallengeAndArt dc + LEFT JOIN studies.subjectAnchorDates ad ON (dc.Id = ad.SubjectId AND dc.artReleaseDate = ad.date AND ad.eventLabel = 'ART Release') +WHERE ad.rowid IS NULL AND dc.artReleaseDate IS NOT NULL \ No newline at end of file diff --git a/SivStudies/resources/queries/study/treatments/With SIV-ART Dates.qview.xml b/SivStudies/resources/queries/study/treatments/With SIV-ART Dates.qview.xml new file mode 100644 index 00000000..087c2d4f --- /dev/null +++ b/SivStudies/resources/queries/study/treatments/With SIV-ART Dates.qview.xml @@ -0,0 +1,23 @@ + \ No newline at end of file diff --git a/SivStudies/src/org/labkey/sivstudies/query/SivStudiesCustomizer.java b/SivStudies/src/org/labkey/sivstudies/query/SivStudiesCustomizer.java index 8237763c..0f089490 100644 --- a/SivStudies/src/org/labkey/sivstudies/query/SivStudiesCustomizer.java +++ b/SivStudies/src/org/labkey/sivstudies/query/SivStudiesCustomizer.java @@ -382,7 +382,7 @@ public TableInfo getLookupTableInfo() "JOIN studies.subjectAnchorDates ad ON (ad.subjectId = c." + idCol.getFieldKey().toSQLString() + ")\n" + "WHERE ad.eventLabel = 'SIV Infection'\n" + "GROUP BY c.date, c." + pkCol.getFieldKey().toString() + "\n" + - "HAVING count(*) = 1) t" + "HAVING count(DISTINCT c.date) = 1) t" ); qd.setIsTemporary(true); @@ -472,9 +472,10 @@ public TableInfo getLookupTableInfo() "GROUP_CONCAT(DISTINCT tr.treatment) AS artTreatment,\n" + "c." + pkCol.getFieldKey().toString() + "\n" + "FROM \"" + schemaName + "\".\"" + queryName + "\" c " + + // TODO: consider whether this should include all dates "JOIN study.treatments tr ON (tr.category = 'ART' AND CAST(tr.date AS DATE) <= CAST(c." + dateCol.getFieldKey().toString() + " AS DATE) AND tr.Id = c." + idCol.getFieldKey().toSQLString() + ")\n" + "GROUP BY c." + dateCol.getFieldKey().toString() + ", c." + pkCol.getFieldKey().toString() + "\n" + - "HAVING COUNT(*) = 1" + "HAVING COUNT(DISTINCT tr.date) = 1" ); qd.setIsTemporary(true); diff --git a/mcc/package-lock.json b/mcc/package-lock.json index 661d6ff8..7550478d 100644 --- a/mcc/package-lock.json +++ b/mcc/package-lock.json @@ -6307,9 +6307,9 @@ "dev": true }, "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.2.tgz", + "integrity": "sha512-6xKiQ+cph9KImrRh0VsjH2d8/GXA4FIMlgU4B757iI1ApvcyA9VlouP0yZJha01V+huImO+kKMU7ih+2+E14fw==", "dev": true, "engines": { "node": ">= 6.13.0"