in clns-acuity-admin/acuity-etl/src/main/java/com/acuity/visualisations/batch/processor/AeSplitter.java [58:209]
public static List<TimestampedEntity> splitAdverseEventToEntities(AdverseEvent adverseEvent) {
List<TimestampedEntity> out = new ArrayList<>();
// Create Investigational Drugs
Drug[] ipDrugs = null;
int ipDrugsCount = 0;
if (adverseEvent.getIpDrugs() != null) {
ipDrugs = new Drug[adverseEvent.getIpDrugs().length];
for (int i = 0; i < adverseEvent.getIpDrugs().length; i++) {
Object drugName = adverseEvent.getIpDrugs()[i];
if (!isEmpty(drugName)) {
Drug ipDrug = new Drug(drugName.toString());
ipDrugs[i] = ipDrug;
out.add(ipDrug);
ipDrugsCount++;
}
}
}
//Create Additional Drugs
Drug[] adDrugs = null;
int adDrugsCount = 0;
if (adverseEvent.getAdDrugs() != null) {
adDrugs = new Drug[adverseEvent.getAdDrugs().length];
for (int i = 0; i < adverseEvent.getAdDrugs().length; i++) {
Object drugName = adverseEvent.getAdDrugs()[i];
if (!isEmpty(drugName)) {
Drug adDrug = new Drug(drugName.toString());
adDrugs[i] = adDrug;
out.add(adDrug);
adDrugsCount++;
}
}
}
//Create Adverse Event
AE ae = new AE();
ae.setAeText(adverseEvent.getAeText());
ae.setComment(adverseEvent.getComment());
ae.setSerious(adverseEvent.getSerious());
ae.setNumber(adverseEvent.getNumber());
ae.setOutcome(adverseEvent.getOutcome());
ae.setDoseLimitingToxicity(adverseEvent.getDoseLimitingToxicity());
ae.setTimePoint(adverseEvent.getTimePoint());
ae.setImmuneMediated(adverseEvent.getImmuneMediated());
ae.setInfusionReaction(adverseEvent.getInfusionReaction());
ae.setRequiredTreatment(adverseEvent.getRequiredTreatment());
ae.setCausedSubjectWithdrawal(adverseEvent.getCausedSubjectWithdrawal());
ae.setSubject(adverseEvent.getSubject());
ae.setPart(adverseEvent.getPart());
ae.setPT(adverseEvent.getPT());
ae.setHLT(adverseEvent.getHLT());
ae.setSOC(adverseEvent.getSOC());
ae.setSuspectedEndpoint(adverseEvent.getSuspectedEndpoint());
ae.setSuspectedEndpointCategory(adverseEvent.getSuspectedEndpointCategory());
ae.setAeOfSpecialInterest(adverseEvent.getAeOfSpecialInterest());
ae.setStartDate(adverseEvent.getStartDate());
out.add(ae);
//Create Causalities
if (ipDrugsCount > 0) {
pushAeCausality(out, ae, ipDrugs, adverseEvent.getCausalityForIpDrugs(),
"Causalities for Investigational Drugs");
}
if (adDrugsCount > 0) {
pushAeCausality(out, ae, adDrugs, adverseEvent.getCausalityForAdDrugs(),
"Causalities for Additional Drugs");
}
//Create Severities
AeSeverity severity = new AeSeverity();
severity.setAe(ae);
severity.setStartDate(adverseEvent.getStartDate());
severity.setEndDate(adverseEvent.getEndDate());
severity.setSeverity(adverseEvent.getMaxSeverity());
out.add(severity);
if (ipDrugsCount > 0) {
pushAeActionsTaken(out, severity, ipDrugs, adverseEvent.getInitialActionTakenForIpDrugs(),
"Initial Actions Taken for Investigational Drugs");
}
if (adDrugsCount > 0) {
pushAeActionsTaken(out, severity, adDrugs, adverseEvent.getInitialActionTakenForAdDrugs(),
"Initial Actions Taken for Additional Drugs");
}
Object[] gradeChanges = adverseEvent.getCtcGradeChanges();
Object[] changeDates = adverseEvent.getCtcGradeChangeDates();
if (gradeChanges != null && changeDates != null && gradeChanges.length == changeDates.length) {
boolean hasNonEmptyPairsToIterate = false;
for (Object gradeChange : gradeChanges) {
if (!isEmpty(gradeChange)) {
hasNonEmptyPairsToIterate = true;
severity.setSeverity(adverseEvent.getStartingCtcGrade());
break;
}
}
if (!hasNonEmptyPairsToIterate) {
return out;
}
int changesCount = 0;
AeSeverity[] severities = new AeSeverity[gradeChanges.length];
for (int i = 0; i < gradeChanges.length; i++) {
if (changeDates[i] != null && !isEmpty(gradeChanges[i])) {
LocalDateTime nextStartDate = AcuityFieldTransformer.transform((LocalDateTime) changeDates[i],
AcuityFieldTransformation.INITIATING_EVENT_00_00_01);
LocalDateTime prevEndDate = ((LocalDateTime) changeDates[i]).minusSeconds(1);
severity.setEndDate(prevEndDate);
AeSeverity severity1 = new AeSeverity();
severity1.setAe(ae);
severity1.setStartDate(nextStartDate);
severity1.setEndDate(adverseEvent.getEndDate());
severity1.setSeverity((String) gradeChanges[i]);
out.add(severity1);
severities[i] = severity1;
severity = severity1;
changesCount++;
}
}
LOGGER.debug("Grade changes: {}/{}", changesCount, gradeChanges.length);
if (ipDrugsCount > 0) {
pushAeActionsTaken(out, severities, ipDrugs, adverseEvent.getChangedActionTakenForIpDrugs(), gradeChanges,
"Changed Actions Taken for Investigational Drugs");
}
if (adDrugsCount > 0) {
pushAeActionsTaken(out, severities, adDrugs, adverseEvent.getChangedActionTakenForAdDrugs(), gradeChanges,
"Changed Actions Taken for Additional Drugs");
}
} else {
LOGGER.warn("Grade changes and dates not aligned");
}
return out;
}