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 @@
+
+
+
+
+
+
+
\ 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"