Skip to content

Commit 97ea7e2

Browse files
committed
#13539 - Updated person form with new RSV fields
- Added new fields for birth weight category, gestational age category, and multiple birth status to the person form. - Added `GestationalAgeCategory`, `BirthWeightCategory`, and `MultipleBirth` enums.
1 parent acfe63d commit 97ea7e2

File tree

13 files changed

+318
-19
lines changed

13 files changed

+318
-19
lines changed

sormas-api/src/main/java/de/symeda/sormas/api/i18n/Captions.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2272,6 +2272,8 @@ public interface Captions {
22722272
String Person_birthdateYYYY = "Person.birthdateYYYY";
22732273
String Person_birthName = "Person.birthName";
22742274
String Person_birthWeight = "Person.birthWeight";
2275+
String Person_birthWeightCategory = "Person.birthWeightCategory";
2276+
String Person_birthWeightValue = "Person.birthWeightValue";
22752277
String Person_burialConductor = "Person.burialConductor";
22762278
String Person_burialDate = "Person.burialDate";
22772279
String Person_burialPlaceDescription = "Person.burialPlaceDescription";
@@ -2295,6 +2297,7 @@ public interface Captions {
22952297
String Person_fathersName = "Person.fathersName";
22962298
String Person_generalPractitionerDetails = "Person.generalPractitionerDetails";
22972299
String Person_gestationAgeAtBirth = "Person.gestationAgeAtBirth";
2300+
String Person_gestationalAgeCategory = "Person.gestationalAgeCategory";
22982301
String Person_hasCovidApp = "Person.hasCovidApp";
22992302
String Person_hasGuardian = "Person.hasGuardian";
23002303
String Person_incapacitated = "Person.incapacitated";
@@ -2304,6 +2307,7 @@ public interface Captions {
23042307
String Person_matchingCase = "Person.matchingCase";
23052308
String Person_mothersMaidenName = "Person.mothersMaidenName";
23062309
String Person_mothersName = "Person.mothersName";
2310+
String Person_multipleBirth = "Person.multipleBirth";
23072311
String Person_namesOfGuardians = "Person.namesOfGuardians";
23082312
String Person_nationalHealthId = "Person.nationalHealthId";
23092313
String Person_nickname = "Person.nickname";

sormas-api/src/main/java/de/symeda/sormas/api/i18n/Strings.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -776,6 +776,7 @@ public interface Strings {
776776
String headingOutbreakIn = "headingOutbreakIn";
777777
String headingPaperFormDates = "headingPaperFormDates";
778778
String headingPathogenTestsDeleted = "headingPathogenTestsDeleted";
779+
String headingPerinatalDetails = "headingPerinatalDetails";
779780
String headingPersonData = "headingPersonData";
780781
String headingPersonInformation = "headingPersonInformation";
781782
String headingPersonOccupation = "headingPersonOccupation";
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/*
2+
* SORMAS® - Surveillance Outbreak Response Management & Analysis System
3+
* Copyright © 2016-2026 SORMAS Foundation gGmbH
4+
* This program is free software: you can redistribute it and/or modify
5+
* it under the terms of the GNU General Public License as published by
6+
* the Free Software Foundation, either version 3 of the License, or
7+
* (at your option) any later version.
8+
* This program is distributed in the hope that it will be useful,
9+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+
* GNU General Public License for more details.
12+
* You should have received a copy of the GNU General Public License
13+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
14+
*/
15+
16+
package de.symeda.sormas.api.person;
17+
18+
import de.symeda.sormas.api.i18n.I18nProperties;
19+
20+
/**
21+
* Birth weight categories for perinatal surveillance.
22+
* Used specifically for RSV disease surveillance to categorize birth weight status.
23+
*/
24+
public enum BirthWeightCategory {
25+
26+
/**
27+
* Normal birth weight
28+
*/
29+
NORMAL,
30+
31+
/**
32+
* Low birth weight (stunted growth)
33+
*/
34+
LOW_BIRTH_WEIGHT;
35+
36+
@Override
37+
public String toString() {
38+
return I18nProperties.getEnumCaption(this);
39+
}
40+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
* SORMAS® - Surveillance Outbreak Response Management & Analysis System
3+
* Copyright © 2016-2026 SORMAS Foundation gGmbH
4+
* This program is free software: you can redistribute it and/or modify
5+
* it under the terms of the GNU General Public License as published by
6+
* the Free Software Foundation, either version 3 of the License, or
7+
* (at your option) any later version.
8+
* This program is distributed in the hope that it will be useful,
9+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+
* GNU General Public License for more details.
12+
* You should have received a copy of the GNU General Public License
13+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
14+
*/
15+
16+
package de.symeda.sormas.api.person;
17+
18+
import de.symeda.sormas.api.i18n.I18nProperties;
19+
20+
/**
21+
* Gestational age categories for perinatal surveillance.
22+
* Used specifically for RSV disease surveillance to categorize pregnancy terms.
23+
*/
24+
public enum GestationalAgeCategory {
25+
26+
/**
27+
* At term (between 38 and 42 weeks of pregnancy)
28+
*/
29+
AT_TERM,
30+
31+
/**
32+
* Prematurely before 32 weeks of pregnancy
33+
*/
34+
PREMATURE_BEFORE_32,
35+
36+
/**
37+
* Prematurely between 32 and 38 weeks of pregnancy
38+
*/
39+
PREMATURE_32_TO_38;
40+
41+
@Override
42+
public String toString() {
43+
return I18nProperties.getEnumCaption(this);
44+
}
45+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
* SORMAS® - Surveillance Outbreak Response Management & Analysis System
3+
* Copyright © 2016-2026 SORMAS Foundation gGmbH
4+
* This program is free software: you can redistribute it and/or modify
5+
* it under the terms of the GNU General Public License as published by
6+
* the Free Software Foundation, either version 3 of the License, or
7+
* (at your option) any later version.
8+
* This program is distributed in the hope that it will be useful,
9+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+
* GNU General Public License for more details.
12+
* You should have received a copy of the GNU General Public License
13+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
14+
*/
15+
16+
package de.symeda.sormas.api.person;
17+
18+
import de.symeda.sormas.api.i18n.I18nProperties;
19+
20+
/**
21+
* Multiple birth classification for perinatal surveillance.
22+
* Used specifically for RSV disease surveillance to track multiple births.
23+
*/
24+
public enum MultipleBirth {
25+
26+
/**
27+
* Single birth (No - 1)
28+
*/
29+
SINGLE,
30+
31+
/**
32+
* Twin birth (Twins - 2)
33+
*/
34+
TWINS,
35+
36+
/**
37+
* Multiple birth (Triplet 3+ or more)
38+
*/
39+
MULTIPLE;
40+
41+
@Override
42+
public String toString() {
43+
return I18nProperties.getEnumCaption(this);
44+
}
45+
}

sormas-api/src/main/java/de/symeda/sormas/api/person/PersonDto.java

Lines changed: 58 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,10 @@ public class PersonDto extends PseudonymizableDto implements IsPerson {
112112
public static final String PLACE_OF_BIRTH_FACILITY_DETAILS = "placeOfBirthFacilityDetails";
113113
public static final String GESTATION_AGE_AT_BIRTH = "gestationAgeAtBirth";
114114
public static final String BIRTH_WEIGHT = "birthWeight";
115+
public static final String GESTATIONAL_AGE_CATEGORY = "gestationalAgeCategory";
116+
public static final String BIRTH_WEIGHT_CATEGORY = "birthWeightCategory";
117+
public static final String BIRTH_WEIGHT_VALUE = "birthWeightValue";
118+
public static final String MULTIPLE_BIRTH = "multipleBirth";
115119
public static final String PASSPORT_NUMBER = "passportNumber";
116120
public static final String NATIONAL_HEALTH_ID = "nationalHealthId";
117121
public static final String EMAIL_ADDRESS = "emailAddress";
@@ -247,6 +251,20 @@ public class PersonDto extends PseudonymizableDto implements IsPerson {
247251
@HideForCountries
248252
private Integer birthWeight;
249253

254+
// RSV-specific perinatal fields
255+
@Diseases({
256+
Disease.RESPIRATORY_SYNCYTIAL_VIRUS })
257+
private GestationalAgeCategory gestationalAgeCategory;
258+
@Diseases({
259+
Disease.RESPIRATORY_SYNCYTIAL_VIRUS })
260+
private BirthWeightCategory birthWeightCategory;
261+
@Diseases({
262+
Disease.RESPIRATORY_SYNCYTIAL_VIRUS })
263+
private Integer birthWeightValue;
264+
@Diseases({
265+
Disease.RESPIRATORY_SYNCYTIAL_VIRUS })
266+
private MultipleBirth multipleBirth;
267+
250268
@Outbreaks
251269
private PresentCondition presentCondition;
252270
private Date deathDate;
@@ -388,12 +406,18 @@ public class PersonDto extends PseudonymizableDto implements IsPerson {
388406
@HideForCountriesExcept(countries = {
389407
CountryHelper.COUNTRY_CODE_LUXEMBOURG })
390408
@SensitiveData
391-
@Diseases(value = {Disease.TUBERCULOSIS, Disease.INVASIVE_PNEUMOCOCCAL_INFECTION, Disease.INVASIVE_MENINGOCOCCAL_INFECTION})
409+
@Diseases(value = {
410+
Disease.TUBERCULOSIS,
411+
Disease.INVASIVE_PNEUMOCOCCAL_INFECTION,
412+
Disease.INVASIVE_MENINGOCOCCAL_INFECTION })
392413
private Date entryDate;
393414
@HideForCountriesExcept(countries = {
394415
CountryHelper.COUNTRY_CODE_LUXEMBOURG })
395416
@SensitiveData
396-
@Diseases(value = {Disease.TUBERCULOSIS, Disease.INVASIVE_PNEUMOCOCCAL_INFECTION, Disease.INVASIVE_MENINGOCOCCAL_INFECTION})
417+
@Diseases(value = {
418+
Disease.TUBERCULOSIS,
419+
Disease.INVASIVE_PNEUMOCOCCAL_INFECTION,
420+
Disease.INVASIVE_MENINGOCOCCAL_INFECTION })
397421
private LivingStatus livingStatus;
398422

399423
@SuppressWarnings("serial")
@@ -927,6 +951,38 @@ public void setBirthWeight(Integer birthWeight) {
927951
this.birthWeight = birthWeight;
928952
}
929953

954+
public GestationalAgeCategory getGestationalAgeCategory() {
955+
return gestationalAgeCategory;
956+
}
957+
958+
public void setGestationalAgeCategory(GestationalAgeCategory gestationalAgeCategory) {
959+
this.gestationalAgeCategory = gestationalAgeCategory;
960+
}
961+
962+
public BirthWeightCategory getBirthWeightCategory() {
963+
return birthWeightCategory;
964+
}
965+
966+
public void setBirthWeightCategory(BirthWeightCategory birthWeightCategory) {
967+
this.birthWeightCategory = birthWeightCategory;
968+
}
969+
970+
public Integer getBirthWeightValue() {
971+
return birthWeightValue;
972+
}
973+
974+
public void setBirthWeightValue(Integer birthWeightValue) {
975+
this.birthWeightValue = birthWeightValue;
976+
}
977+
978+
public MultipleBirth getMultipleBirth() {
979+
return multipleBirth;
980+
}
981+
982+
public void setMultipleBirth(MultipleBirth multipleBirth) {
983+
this.multipleBirth = multipleBirth;
984+
}
985+
930986
public String getPassportNumber() {
931987
return passportNumber;
932988
}

sormas-api/src/main/resources/captions.properties

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1969,6 +1969,10 @@ Person.livingStatus=Living Status
19691969
Person.hasGuardian=Person has a legal guardian (i.e. in case of minors or incapacitated persons)
19701970
Person.incapacitated=Incapacitated (i.e. person will have a legal guardian after 18)
19711971
Person.emancipated=Emancipated (i.e. person is under 18 and does not have a guardian by law)
1972+
Person.gestationalAgeCategory=Gestational age category
1973+
Person.birthWeightCategory=Birth weight category
1974+
Person.birthWeightValue=Birth weight value
1975+
Person.multipleBirth=Multiple birth
19721976
personContactDetailOwner=Owner
19731977
personContactDetailOwnerName=Owner name
19741978
personContactDetailThisPerson=This person

sormas-api/src/main/resources/enum.properties

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -853,6 +853,11 @@ GatheringType.FAIR=Fair
853853
GatheringType.SPORTING_EVENT=Sporting event
854854
GatheringType.OTHER=Other
855855

856+
# GestationalAgeCategory
857+
GestationalAgeCategory.AT_TERM=At term (between 38 and 42 weeks of pregnancy)
858+
GestationalAgeCategory.PREMATURE_BEFORE_32=Prematurely before 32 weeks of pregnancy
859+
GestationalAgeCategory.PREMATURE_32_TO_38=Prematurely between 32 and 38 weeks of pregnancy
860+
856861
HabitationType.MEDICAL=Stay in a Medical Institution
857862
HabitationType.OTHER=Other
858863

@@ -2287,6 +2292,12 @@ MedicallyAssociatedTransmissionMode.ORGAN_TRANSPLANTATION=Organ transplantation
22872292
MedicallyAssociatedTransmissionMode.DIALYSIS=Dialysis
22882293
MedicallyAssociatedTransmissionMode.INJECTION_FOR_MEDICAL_PURPOSES=Injection for medical purposes
22892294

2295+
2296+
# MultipleBirth
2297+
MultipleBirth.SINGLE=Single birth (Singleton - 1)
2298+
MultipleBirth.TWIN=Twin birth (Twins - 2)
2299+
MultipleBirth.MULTIPLE=Multiple birth (Triplet 3+ or more)
2300+
22902301
# ExternalShareDateType
22912302
ExternalShareDateType.LAST_EXTERNAL_SURVEILLANCE_TOOL_SHARE = Last share with reporting tool
22922303

@@ -2577,6 +2588,10 @@ BirthTerm.FULL_TERM=Full-term
25772588
BirthTerm.PRE_TERM=Pre-term
25782589
BirthTerm.POST_TERM=Post-term
25792590

2591+
# BirthWeightCategory
2592+
BirthWeightCategory.NORMAL=Normal birth weight
2593+
BirthWeightCategory.LOW_BIRTH_WEIGHT=Low birth weight (stunted growth)
2594+
25802595
# DeliveryProcedure
25812596
DeliveryProcedure.NORMAL=Normal
25822597
DeliveryProcedure.CAESAREAN=Caesarean

sormas-api/src/main/resources/strings.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -674,6 +674,7 @@ headingPaperFormDates = Reception dates of paper form
674674
headingPersonData = Person data
675675
headingPersonInformation = Person information
676676
headingPersonOccupation = Occupation & education
677+
headingPerinatalDetails = Perinatal details
677678
headingPickEventGroup = Pick event group
678679
headingPickEventParticipants = Pick or merge event participants
679680
headingPickEventParticipantsIncompleteSelection = Incomplete selection

sormas-backend/src/main/java/de/symeda/sormas/backend/person/Person.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,15 @@
4646
import de.symeda.sormas.api.infrastructure.facility.FacilityType;
4747
import de.symeda.sormas.api.person.ApproximateAgeType;
4848
import de.symeda.sormas.api.person.ArmedForcesRelationType;
49+
import de.symeda.sormas.api.person.BirthWeightCategory;
4950
import de.symeda.sormas.api.person.BurialConductor;
5051
import de.symeda.sormas.api.person.CauseOfDeath;
5152
import de.symeda.sormas.api.person.DeathPlaceType;
5253
import de.symeda.sormas.api.person.EducationType;
54+
import de.symeda.sormas.api.person.GestationalAgeCategory;
5355
import de.symeda.sormas.api.person.IsPerson;
5456
import de.symeda.sormas.api.person.LivingStatus;
57+
import de.symeda.sormas.api.person.MultipleBirth;
5558
import de.symeda.sormas.api.person.OccupationType;
5659
import de.symeda.sormas.api.person.OccupationTypeConverter;
5760
import de.symeda.sormas.api.person.PersonContactDetailType;
@@ -122,6 +125,10 @@ public class Person extends AbstractDomainObject implements IsPerson, HasExterna
122125
public static final String PLACE_OF_BIRTH_FACILITY_DETAILS = "placeOfBirthFacilityDetails";
123126
public static final String GESTATION_AGE_AT_BIRTH = "gestationAgeAtBirth";
124127
public static final String BIRTH_WEIGHT = "birthWeight";
128+
public static final String GESTATIONAL_AGE_CATEGORY = "gestationalAgeCategory";
129+
public static final String BIRTH_WEIGHT_CATEGORY = "birthWeightCategory";
130+
public static final String BIRTH_WEIGHT_VALUE = "birthWeightValue";
131+
public static final String MULTIPLE_BIRTH = "multipleBirth";
125132
public static final String PASSPORT_NUMBER = "passportNumber";
126133
public static final String NATIONAL_HEALTH_ID = "nationalHealthId";
127134
public static final String PLACE_OF_BIRTH_FACILITY_TYPE = "placeOfBirthFacilityType";
@@ -186,6 +193,10 @@ public class Person extends AbstractDomainObject implements IsPerson, HasExterna
186193
private String placeOfBirthFacilityDetails;
187194
private Integer gestationAgeAtBirth;
188195
private Integer birthWeight;
196+
private GestationalAgeCategory gestationalAgeCategory;
197+
private BirthWeightCategory birthWeightCategory;
198+
private Integer birthWeightValue;
199+
private MultipleBirth multipleBirth;
189200
private Date deathDate;
190201

191202
private EducationType educationType;
@@ -591,6 +602,41 @@ public void setBirthWeight(Integer birthWeight) {
591602
this.birthWeight = birthWeight;
592603
}
593604

605+
@Enumerated(EnumType.STRING)
606+
public GestationalAgeCategory getGestationalAgeCategory() {
607+
return gestationalAgeCategory;
608+
}
609+
610+
public void setGestationalAgeCategory(GestationalAgeCategory gestationalAgeCategory) {
611+
this.gestationalAgeCategory = gestationalAgeCategory;
612+
}
613+
614+
@Enumerated(EnumType.STRING)
615+
public BirthWeightCategory getBirthWeightCategory() {
616+
return birthWeightCategory;
617+
}
618+
619+
public void setBirthWeightCategory(BirthWeightCategory birthWeightCategory) {
620+
this.birthWeightCategory = birthWeightCategory;
621+
}
622+
623+
public Integer getBirthWeightValue() {
624+
return birthWeightValue;
625+
}
626+
627+
public void setBirthWeightValue(Integer birthWeightValue) {
628+
this.birthWeightValue = birthWeightValue;
629+
}
630+
631+
@Enumerated(EnumType.STRING)
632+
public MultipleBirth getMultipleBirth() {
633+
return multipleBirth;
634+
}
635+
636+
public void setMultipleBirth(MultipleBirth multipleBirth) {
637+
this.multipleBirth = multipleBirth;
638+
}
639+
594640
@Column
595641
public String getPassportNumber() {
596642
return passportNumber;

0 commit comments

Comments
 (0)