Skip to content

Commit 076b7c8

Browse files
authored
Merge pull request #13584 from SORMAS-Foundation/feature-13543-rsv_update_pathogen_test
#13543 - Update Pathogen test and samples for RSV
2 parents 0b0af99 + 220380d commit 076b7c8

12 files changed

Lines changed: 335 additions & 175 deletions

File tree

sormas-api/src/main/java/de/symeda/sormas/api/externalmessage/labmessage/TestReportDto.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import de.symeda.sormas.api.sample.PCRTestSpecification;
1616
import de.symeda.sormas.api.sample.PathogenTestResultType;
1717
import de.symeda.sormas.api.sample.PathogenTestType;
18+
import de.symeda.sormas.api.sample.RsvSubtype;
1819
import de.symeda.sormas.api.utils.DataHelper;
1920
import de.symeda.sormas.api.utils.DependingOnFeatureType;
2021
import de.symeda.sormas.api.utils.FieldConstraints;
@@ -133,6 +134,8 @@ public class TestReportDto extends EntityDto {
133134
private CountryReferenceDto prescriberCountry;
134135
@HideForCountriesExcept(countries = CountryHelper.COUNTRY_CODE_LUXEMBOURG)
135136
private GenoTypeResult genoTypeResult;
137+
@HideForCountriesExcept(countries = CountryHelper.COUNTRY_CODE_LUXEMBOURG)
138+
private RsvSubtype rsvSubtype;
136139

137140
public SampleReportReferenceDto getSampleReport() {
138141
return sampleReport;
@@ -419,4 +422,12 @@ public GenoTypeResult getGenoTypeResult() {
419422
public void setGenoTypeResult(GenoTypeResult genoTypeResult) {
420423
this.genoTypeResult = genoTypeResult;
421424
}
425+
426+
public RsvSubtype getRsvSubtype() {
427+
return rsvSubtype;
428+
}
429+
430+
public void setRsvSubtype(RsvSubtype rsvSubtype) {
431+
this.rsvSubtype = rsvSubtype;
432+
}
422433
}

sormas-api/src/main/java/de/symeda/sormas/api/externalmessage/processing/ExternalMessageMapper.java

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,17 @@
1515

1616
package de.symeda.sormas.api.externalmessage.processing;
1717

18+
import java.util.ArrayList;
19+
import java.util.Date;
20+
import java.util.List;
21+
import java.util.function.Consumer;
22+
import java.util.function.Function;
23+
import java.util.stream.Collectors;
24+
import java.util.stream.Stream;
25+
26+
import org.apache.commons.lang3.StringUtils;
27+
import org.apache.commons.lang3.tuple.ImmutableTriple;
28+
1829
import de.symeda.sormas.api.CountryHelper;
1930
import de.symeda.sormas.api.customizableenum.CustomEnumNotFoundException;
2031
import de.symeda.sormas.api.disease.DiseaseVariant;
@@ -34,16 +45,6 @@
3445
import de.symeda.sormas.api.sample.SampleDto;
3546
import de.symeda.sormas.api.utils.DataHelper;
3647
import de.symeda.sormas.api.utils.DateHelper;
37-
import org.apache.commons.lang3.StringUtils;
38-
import org.apache.commons.lang3.tuple.ImmutableTriple;
39-
40-
import java.util.ArrayList;
41-
import java.util.Date;
42-
import java.util.List;
43-
import java.util.function.Consumer;
44-
import java.util.function.Function;
45-
import java.util.stream.Collectors;
46-
import java.util.stream.Stream;
4748

4849
public final class ExternalMessageMapper {
4950

@@ -334,12 +335,17 @@ public List<String[]> mapToPathogenTest(TestReportDto sourceTestReport, Pathogen
334335
pathogenTest::setPrescriberCountry,
335336
pathogenTest.getPrescriberCountry(),
336337
sourceTestReport.getPrescriberCountry(),
337-
PathogenTestDto.PRESCRIBER_COUNTRY),
338-
Mapping.of(
339-
pathogenTest::setGenoTypeResult,
340-
pathogenTest.getGenoTypeResult(),
341-
sourceTestReport.getGenoTypeResult(),
342-
PathogenTestDto.GENOTYPE_RESULT))));
338+
PathogenTestDto.PRESCRIBER_COUNTRY),
339+
Mapping.of(
340+
pathogenTest::setGenoTypeResult,
341+
pathogenTest.getGenoTypeResult(),
342+
sourceTestReport.getGenoTypeResult(),
343+
PathogenTestDto.GENOTYPE_RESULT),
344+
Mapping.of(
345+
pathogenTest::setRsvSubtype,
346+
pathogenTest.getRsvSubtype(),
347+
sourceTestReport.getRsvSubtype(),
348+
PathogenTestDto.RSV_SUBTYPE))));
343349
}
344350

345351
changedFields.addAll(

sormas-api/src/main/java/de/symeda/sormas/api/sample/PathogenTestDto.java

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ public class PathogenTestDto extends PseudonymizableDto {
113113
public static final String SERO_GROUP_SPECIFICATION_TEXT = "seroGroupSpecificationText";
114114
public static final String GENOTYPE_RESULT = "genoTypeResult";
115115
public static final String GENOTYPE_RESULT_TEXT = "genoTypeResultText";
116+
public static final String RSV_SUBTYPE = "rsvSubtype";
116117

117118
private SampleReferenceDto sample;
118119
private EnvironmentSampleReferenceDto environmentSample;
@@ -220,11 +221,13 @@ public class PathogenTestDto extends PseudonymizableDto {
220221
private DrugSusceptibilityDto drugSusceptibility;
221222
@SensitiveData
222223
@HideForCountriesExcept(countries = CountryHelper.COUNTRY_CODE_LUXEMBOURG)
223-
@Diseases(value = {Disease.INVASIVE_PNEUMOCOCCAL_INFECTION})
224+
@Diseases(value = {
225+
Disease.INVASIVE_PNEUMOCOCCAL_INFECTION })
224226
private String seroTypingMethodText;
225227
@SensitiveData
226228
@HideForCountriesExcept(countries = CountryHelper.COUNTRY_CODE_LUXEMBOURG)
227-
@Diseases(value = {Disease.INVASIVE_PNEUMOCOCCAL_INFECTION})
229+
@Diseases(value = {
230+
Disease.INVASIVE_PNEUMOCOCCAL_INFECTION })
228231
private SerotypingMethod seroTypingMethod;
229232

230233
@SensitiveData
@@ -239,12 +242,17 @@ public class PathogenTestDto extends PseudonymizableDto {
239242

240243
@SensitiveData
241244
@HideForCountriesExcept(countries = CountryHelper.COUNTRY_CODE_LUXEMBOURG)
242-
@Diseases(value = {Disease.INVASIVE_MENINGOCOCCAL_INFECTION})
245+
@Diseases(value = {
246+
Disease.INVASIVE_MENINGOCOCCAL_INFECTION })
243247
private SeroGroupSpecification seroGroupSpecification;
244248
@SensitiveData
245249
@HideForCountriesExcept(countries = CountryHelper.COUNTRY_CODE_LUXEMBOURG)
246-
@Diseases(value = {Disease.INVASIVE_MENINGOCOCCAL_INFECTION})
250+
@Diseases(value = {
251+
Disease.INVASIVE_MENINGOCOCCAL_INFECTION })
247252
private String seroGroupSpecificationText;
253+
@Diseases(value = {
254+
Disease.RESPIRATORY_SYNCYTIAL_VIRUS })
255+
private RsvSubtype rsvSubtype;
248256

249257
public static PathogenTestDto build(SampleDto sample, UserDto currentUser) {
250258

@@ -769,6 +777,14 @@ public void setSeroGroupSpecificationText(String seroGroupSpecificationText) {
769777
this.seroGroupSpecificationText = seroGroupSpecificationText;
770778
}
771779

780+
public RsvSubtype getRsvSubtype() {
781+
return rsvSubtype;
782+
}
783+
784+
public void setRsvSubtype(RsvSubtype rsvSubtype) {
785+
this.rsvSubtype = rsvSubtype;
786+
}
787+
772788
@Override
773789
public PathogenTestDto clone() throws CloneNotSupportedException {
774790
return (PathogenTestDto) super.clone();

sormas-api/src/main/java/de/symeda/sormas/api/sample/PathogenTestType.java

Lines changed: 49 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,144 +28,182 @@ public enum PathogenTestType {
2828
Disease.RESPIRATORY_SYNCYTIAL_VIRUS,
2929
Disease.MEASLES }, hide = true)
3030
ANTIBODY_DETECTION,
31+
3132
ANTIGEN_DETECTION,
33+
34+
@Diseases(value = {
35+
Disease.RESPIRATORY_SYNCYTIAL_VIRUS })
36+
RAPID_ANTIGEN_DETECTION,
37+
3238
RAPID_TEST,
39+
3340
@Diseases(value = {
34-
Disease.RESPIRATORY_SYNCYTIAL_VIRUS }, hide = true)
41+
Disease.RESPIRATORY_SYNCYTIAL_VIRUS })
3542
CULTURE,
43+
3644
@Diseases(value = {
3745
Disease.RESPIRATORY_SYNCYTIAL_VIRUS,
3846
Disease.INVASIVE_MENINGOCOCCAL_INFECTION,
3947
Disease.INVASIVE_PNEUMOCOCCAL_INFECTION,
40-
Disease.MEASLES}, hide = true)
48+
Disease.MEASLES }, hide = true)
4149
HISTOPATHOLOGY,
50+
4251
@Diseases(value = {
4352
Disease.RESPIRATORY_SYNCYTIAL_VIRUS,
4453
Disease.INVASIVE_MENINGOCOCCAL_INFECTION,
4554
Disease.INVASIVE_PNEUMOCOCCAL_INFECTION,
46-
Disease.MEASLES}, hide = true)
55+
Disease.MEASLES }, hide = true)
4756
ISOLATION,
57+
4858
@Diseases(value = {
4959
Disease.RESPIRATORY_SYNCYTIAL_VIRUS,
5060
Disease.INVASIVE_MENINGOCOCCAL_INFECTION,
5161
Disease.INVASIVE_PNEUMOCOCCAL_INFECTION }, hide = true)
5262
IGM_SERUM_ANTIBODY,
63+
5364
@Diseases(value = {
5465
Disease.RESPIRATORY_SYNCYTIAL_VIRUS,
5566
Disease.INVASIVE_MENINGOCOCCAL_INFECTION,
5667
Disease.INVASIVE_PNEUMOCOCCAL_INFECTION }, hide = true)
5768
IGG_SERUM_ANTIBODY,
69+
5870
@Diseases(value = {
5971
Disease.RESPIRATORY_SYNCYTIAL_VIRUS,
6072
Disease.INVASIVE_MENINGOCOCCAL_INFECTION,
6173
Disease.INVASIVE_PNEUMOCOCCAL_INFECTION,
6274
Disease.MEASLES }, hide = true)
6375
IGA_SERUM_ANTIBODY,
76+
6477
@Diseases(value = {
6578
Disease.CORONAVIRUS,
6679
Disease.RESPIRATORY_SYNCYTIAL_VIRUS,
6780
Disease.INVASIVE_MENINGOCOCCAL_INFECTION,
6881
Disease.INVASIVE_PNEUMOCOCCAL_INFECTION,
6982
Disease.MEASLES }, hide = true)
7083
INCUBATION_TIME,
84+
7185
@Diseases(value = {
7286
Disease.CORONAVIRUS,
7387
Disease.RESPIRATORY_SYNCYTIAL_VIRUS,
7488
Disease.INVASIVE_MENINGOCOCCAL_INFECTION,
75-
Disease.INVASIVE_PNEUMOCOCCAL_INFECTION }, hide = true)
89+
Disease.INVASIVE_PNEUMOCOCCAL_INFECTION })
7690
INDIRECT_FLUORESCENT_ANTIBODY,
91+
7792
@Diseases(value = {
7893
Disease.CORONAVIRUS,
7994
Disease.RESPIRATORY_SYNCYTIAL_VIRUS,
8095
Disease.INVASIVE_MENINGOCOCCAL_INFECTION,
81-
Disease.INVASIVE_PNEUMOCOCCAL_INFECTION }, hide = true)
96+
Disease.INVASIVE_PNEUMOCOCCAL_INFECTION })
8297
DIRECT_FLUORESCENT_ANTIBODY,
98+
8399
@Diseases(value = {
84100
Disease.CORONAVIRUS,
85101
Disease.RESPIRATORY_SYNCYTIAL_VIRUS,
86102
Disease.MEASLES }, hide = true)
87103
MICROSCOPY,
104+
88105
@Diseases(value = {
89-
Disease.RESPIRATORY_SYNCYTIAL_VIRUS,
90106
Disease.INVASIVE_MENINGOCOCCAL_INFECTION,
91107
Disease.INVASIVE_PNEUMOCOCCAL_INFECTION,
92108
Disease.MEASLES }, hide = true)
93109
NEUTRALIZING_ANTIBODIES,
110+
111+
@Diseases(value = {
112+
Disease.RESPIRATORY_SYNCYTIAL_VIRUS })
113+
ENZYME_LINKED_IMMUNOSORBENT_ASSAY,
114+
94115
PCR_RT_PCR,
116+
95117
@Diseases(value = {
96118
Disease.CORONAVIRUS,
97119
Disease.RESPIRATORY_SYNCYTIAL_VIRUS,
98120
Disease.MEASLES }, hide = true)
99121
GRAM_STAIN,
122+
100123
@Diseases(value = {
101124
Disease.CORONAVIRUS,
102125
Disease.RESPIRATORY_SYNCYTIAL_VIRUS,
103126
Disease.INVASIVE_MENINGOCOCCAL_INFECTION,
104127
Disease.INVASIVE_PNEUMOCOCCAL_INFECTION,
105128
Disease.MEASLES }, hide = true)
106129
LATEX_AGGLUTINATION,
130+
107131
@Diseases(value = {
108132
Disease.RESPIRATORY_SYNCYTIAL_VIRUS,
109133
Disease.INVASIVE_MENINGOCOCCAL_INFECTION,
110134
Disease.INVASIVE_PNEUMOCOCCAL_INFECTION,
111135
Disease.MEASLES }, hide = true)
112136
CQ_VALUE_DETECTION,
137+
113138
@Diseases(value = {
114-
Disease.RESPIRATORY_SYNCYTIAL_VIRUS }, hide = true)
139+
Disease.RESPIRATORY_SYNCYTIAL_VIRUS })
115140
SEQUENCING,
141+
116142
@Diseases(value = {
117143
Disease.RESPIRATORY_SYNCYTIAL_VIRUS,
118144
Disease.INVASIVE_MENINGOCOCCAL_INFECTION,
119145
Disease.INVASIVE_PNEUMOCOCCAL_INFECTION,
120146
Disease.MEASLES }, hide = true)
121147
DNA_MICROARRAY,
148+
122149
@Diseases(value = {
123150
Disease.RESPIRATORY_SYNCYTIAL_VIRUS,
124151
Disease.INVASIVE_MENINGOCOCCAL_INFECTION,
125152
Disease.INVASIVE_PNEUMOCOCCAL_INFECTION,
126153
Disease.MEASLES }, hide = true)
127154
TMA,
155+
128156
@Diseases(value = {
129157
Disease.TUBERCULOSIS })
130158
IGRA,
159+
131160
@Diseases(value = {
132161
Disease.TUBERCULOSIS })
133162
TST,
163+
134164
@Diseases(value = {
135165
Disease.TUBERCULOSIS })
136166
BEIJINGGENOTYPING,
167+
137168
@Diseases(value = {
138169
Disease.TUBERCULOSIS })
139170
SPOLIGOTYPING,
171+
140172
@Diseases(value = {
141173
Disease.TUBERCULOSIS })
142174
MIRU_PATTERN_CODE,
175+
143176
@Diseases(value = {
144177
Disease.TUBERCULOSIS,
145178
Disease.INVASIVE_MENINGOCOCCAL_INFECTION,
146179
Disease.INVASIVE_PNEUMOCOCCAL_INFECTION })
147180
ANTIBIOTIC_SUSCEPTIBILITY,
181+
148182
@Diseases(value = {
149183
Disease.INVASIVE_MENINGOCOCCAL_INFECTION,
150184
Disease.INVASIVE_PNEUMOCOCCAL_INFECTION })
151185
MULTILOCUS_SEQUENCE_TYPING,
186+
152187
@Diseases(value = {
153188
Disease.INVASIVE_MENINGOCOCCAL_INFECTION,
154189
Disease.INVASIVE_PNEUMOCOCCAL_INFECTION })
155190
SLIDE_AGGLUTINATION,
191+
156192
@Diseases(value = {
193+
Disease.RESPIRATORY_SYNCYTIAL_VIRUS,
157194
Disease.INVASIVE_MENINGOCOCCAL_INFECTION,
158195
Disease.INVASIVE_PNEUMOCOCCAL_INFECTION })
159196
WHOLE_GENOME_SEQUENCING,
197+
160198
@Diseases(value = {
161199
Disease.INVASIVE_MENINGOCOCCAL_INFECTION,
162200
Disease.INVASIVE_PNEUMOCOCCAL_INFECTION })
163201
SEROGROUPING,
164-
@Diseases(
165-
value = {
166-
Disease.MEASLES}
167-
)
202+
203+
@Diseases(value = {
204+
Disease.MEASLES })
168205
GENOTYPING,
206+
169207
OTHER;
170208

171209
@Override
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*******************************************************************************
2+
* SORMAS® - Surveillance Outbreak Response Management & Analysis System
3+
* Copyright © 2016-2025 Helmholtz-Zentrum für Infektionsforschung GmbH (HZI)
4+
*
5+
* This program is free software: you can redistribute it and/or modify
6+
* it under the terms of the GNU General Public License as published by
7+
* the Free Software Foundation, either version 3 of the License, or
8+
* (at your option) any later version.
9+
*
10+
* This program is distributed in the hope that it will be useful,
11+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
* GNU General Public License for more details.
14+
*
15+
* You should have received a copy of the GNU General Public License
16+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
17+
*******************************************************************************/
18+
package de.symeda.sormas.api.sample;
19+
20+
import de.symeda.sormas.api.i18n.I18nProperties;
21+
22+
public enum RsvSubtype {
23+
24+
RSV_A,
25+
RSV_B,
26+
RSV_A_AND_B,
27+
INDETERMINATE;
28+
29+
@Override
30+
public String toString() {
31+
return I18nProperties.getEnumCaption(this);
32+
}
33+
}

0 commit comments

Comments
 (0)