Skip to content

Commit fee03b8

Browse files
committed
#13772 - Add Epipulse export functionality for IPI disease
1 parent 377b00c commit fee03b8

File tree

4 files changed

+27
-19
lines changed

4 files changed

+27
-19
lines changed

sormas-api/src/main/java/de/symeda/sormas/api/epipulse/EpipulseDiseaseExportEntryDto.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1211,7 +1211,9 @@ public String getPenicillinResistanceForCsv() {
12111211
public List<String> getClinicalPresentationForCsv(int maxCount) {
12121212
List<String> presentations = new ArrayList<>();
12131213
if (clinicalPresentation != null && !clinicalPresentation.isEmpty()) {
1214-
presentations.addAll(clinicalPresentation);
1214+
for (int i = 0; i < Math.min(maxCount, clinicalPresentation.size()); i++) {
1215+
presentations.add(clinicalPresentation.get(i));
1216+
}
12151217
}
12161218
// Pad with empty strings to match maxCount
12171219
while (presentations.size() < maxCount) {

sormas-backend/src/main/java/de/symeda/sormas/backend/epipulse/EpipulseCommonDtoMapper.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,10 @@ public static int mapCommonFields(
7676

7777
// Index 2: Subject Code
7878
String subjectCodeFromDb = (String) row[++index];
79-
if (!StringUtils.isBlank(subjectCodeFromDb)) {
80-
dto.setSubjectCode(EpipulseSubjectCode.valueOf(subjectCodeFromDb));
79+
if (StringUtils.isBlank(subjectCodeFromDb)) {
80+
throw new IllegalStateException("Subject code is missing for Epipulse export row");
8181
}
82+
dto.setSubjectCode(EpipulseSubjectCode.valueOf(subjectCodeFromDb));
8283

8384
// Index 3: National Record ID (case UUID)
8485
dto.setNationalRecordId((String) row[++index]);

sormas-backend/src/main/java/de/symeda/sormas/backend/epipulse/EpipulseConfigurationLookupService.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,13 @@ public class EpipulseConfigurationLookupService {
6161
public EpipulseConfigurationContext lookupConfiguration(EpipulseExportDto exportDto, String serverCountryLocale, String serverCountryName)
6262
throws IllegalArgumentException, IllegalStateException {
6363

64+
if (exportDto == null || exportDto.getSubjectCode() == null) {
65+
throw new IllegalArgumentException("Subject code is required for Epipulse export");
66+
}
67+
if (StringUtils.isBlank(serverCountryLocale)) {
68+
throw new IllegalArgumentException("Server country code/locale is required for Epipulse export");
69+
}
70+
6471
String reportingCountry = lookupReportingCountry(serverCountryLocale);
6572
String serverCountryNutsCode = lookupServerCountryNutsCode(serverCountryName);
6673
String subjectCode = lookupSubjectCode(exportDto.getSubjectCode());
@@ -121,7 +128,7 @@ private String lookupServerCountryNutsCode(String countryName) {
121128

122129
@SuppressWarnings("unchecked")
123130
String serverCountryNutsCode = (String) em.createNativeQuery(serverCountryQuery)
124-
.setParameter("countryName", countryName.toLowerCase())
131+
.setParameter("countryName", countryName.toLowerCase(java.util.Locale.ROOT))
125132
.getResultStream()
126133
.filter(java.util.Objects::nonNull)
127134
.findFirst()

sormas-backend/src/main/java/de/symeda/sormas/backend/epipulse/strategy/IpiExportStrategy.java

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -271,16 +271,16 @@ private String buildPneuVaccinationDetailsCte() {
271271
//@formatter:off
272272
return "pneu_vaccination_details AS (" +
273273
" SELECT c.id as case_id," +
274-
" MAX(CASE WHEN pcv_row_num = 1 THEN v.vaccinationdate END) as date_pcv1," +
275-
" MAX(CASE WHEN pcv_row_num = 1 THEN CAST(v.vaccinename AS text) END) as brand_pcv1," +
276-
" MAX(CASE WHEN pcv_row_num = 2 THEN v.vaccinationdate END) as date_pcv2," +
277-
" MAX(CASE WHEN pcv_row_num = 2 THEN CAST(v.vaccinename AS text) END) as brand_pcv2," +
278-
" MAX(CASE WHEN pcv_row_num = 3 THEN v.vaccinationdate END) as date_pcv3," +
279-
" MAX(CASE WHEN pcv_row_num = 3 THEN CAST(v.vaccinename AS text) END) as brand_pcv3," +
280-
" MAX(CASE WHEN pcv_row_num = 4 THEN v.vaccinationdate END) as date_pcv4," +
281-
" MAX(CASE WHEN pcv_row_num = 4 THEN CAST(v.vaccinename AS text) END) as brand_pcv4," +
274+
" MAX(CASE WHEN is_pcv AND pcv_row_num = 1 THEN v.vaccinationdate END) as date_pcv1," +
275+
" MAX(CASE WHEN is_pcv AND pcv_row_num = 1 THEN CAST(v.vaccinename AS text) END) as brand_pcv1," +
276+
" MAX(CASE WHEN is_pcv AND pcv_row_num = 2 THEN v.vaccinationdate END) as date_pcv2," +
277+
" MAX(CASE WHEN is_pcv AND pcv_row_num = 2 THEN CAST(v.vaccinename AS text) END) as brand_pcv2," +
278+
" MAX(CASE WHEN is_pcv AND pcv_row_num = 3 THEN v.vaccinationdate END) as date_pcv3," +
279+
" MAX(CASE WHEN is_pcv AND pcv_row_num = 3 THEN CAST(v.vaccinename AS text) END) as brand_pcv3," +
280+
" MAX(CASE WHEN is_pcv AND pcv_row_num = 4 THEN v.vaccinationdate END) as date_pcv4," +
281+
" MAX(CASE WHEN is_pcv AND pcv_row_num = 4 THEN CAST(v.vaccinename AS text) END) as brand_pcv4," +
282282
" SUM(CASE WHEN is_pcv THEN 1 ELSE 0 END) as pcv_doses," +
283-
" MAX(CASE WHEN ppv_row_num = 1 THEN v.vaccinationdate END) as date_ppv," +
283+
" MAX(CASE WHEN is_ppv AND ppv_row_num = 1 THEN v.vaccinationdate END) as date_ppv," +
284284
" SUM(CASE WHEN is_ppv THEN 1 ELSE 0 END) as ppv_doses " +
285285
" FROM filtered_cases c " +
286286
" LEFT JOIN vaccination v ON v.immunization_id IN (SELECT i.id FROM immunization i WHERE i.person_id = c.person_id AND i.disease = 'INVASIVE_PNEUMOCOCCAL_INFECTION') " +
@@ -293,12 +293,10 @@ private String buildPneuVaccinationDetailsCte() {
293293
" WHEN CAST(v.vaccinename AS text) LIKE '%PPV%' OR CAST(v.vaccinename AS text) LIKE '%POLYSACCHARIDE%' THEN true " +
294294
" ELSE false " +
295295
" END as is_ppv," +
296-
" ROW_NUMBER() OVER (PARTITION BY c.id, " +
297-
" CASE WHEN CAST(v.vaccinename AS text) LIKE '%PCV%' THEN 1 ELSE 0 END " +
298-
" ORDER BY v.vaccinationdate) as pcv_row_num," +
299-
" ROW_NUMBER() OVER (PARTITION BY c.id, " +
300-
" CASE WHEN CAST(v.vaccinename AS text) LIKE '%PPV%' THEN 1 ELSE 0 END " +
301-
" ORDER BY v.vaccinationdate) as ppv_row_num " +
296+
" SUM(CASE WHEN CAST(v.vaccinename AS text) LIKE '%PCV%' OR CAST(v.vaccinename AS text) LIKE '%CONJUGATE%' THEN 1 ELSE 0 END) " +
297+
" OVER (PARTITION BY c.id ORDER BY v.vaccinationdate) as pcv_row_num," +
298+
" SUM(CASE WHEN CAST(v.vaccinename AS text) LIKE '%PPV%' OR CAST(v.vaccinename AS text) LIKE '%POLYSACCHARIDE%' THEN 1 ELSE 0 END) " +
299+
" OVER (PARTITION BY c.id ORDER BY v.vaccinationdate) as ppv_row_num " +
302300
" ) vax_info ON true " +
303301
" GROUP BY c.id) ";
304302
//@formatter:on

0 commit comments

Comments
 (0)