Skip to content

Commit 587b338

Browse files
committed
[26714] migrate hilotec sys anamnesis and personal anamnesis
1 parent 044320f commit 587b338

File tree

2 files changed

+72
-13
lines changed

2 files changed

+72
-13
lines changed

bundles/com.hilotec.elexis.kgview/META-INF/MANIFEST.MF

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,5 @@ Bundle-Vendor: hilotec.com
1313
Bundle-Activator: com.hilotec.elexis.kgview.Activator
1414
Import-Package: ch.elexis.core.findings,
1515
ch.elexis.core.findings.migration,
16+
ch.elexis.core.findings.util.model,
1617
javax.inject

bundles/com.hilotec.elexis.kgview/src/com/hilotec/elexis/kgview/DiagnosisMigrator.java

Lines changed: 71 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,29 @@
11
package com.hilotec.elexis.kgview;
22

33
import java.time.LocalDate;
4+
import java.time.format.DateTimeFormatter;
45
import java.util.Collections;
56
import java.util.Comparator;
67
import java.util.List;
78
import java.util.StringJoiner;
9+
import java.util.stream.Collectors;
810

911
import javax.inject.Inject;
1012

1113
import org.eclipse.core.runtime.IProgressMonitor;
1214

1315
import com.hilotec.elexis.kgview.diagnoseliste.DiagnoselisteItem;
1416

17+
import ch.elexis.core.findings.ICoding;
1518
import ch.elexis.core.findings.ICondition;
1619
import ch.elexis.core.findings.ICondition.ConditionCategory;
1720
import ch.elexis.core.findings.ICondition.ConditionStatus;
1821
import ch.elexis.core.findings.IFindingsService;
22+
import ch.elexis.core.findings.IObservation;
23+
import ch.elexis.core.findings.IObservation.ObservationCategory;
24+
import ch.elexis.core.findings.IObservation.ObservationCode;
1925
import ch.elexis.core.findings.migration.IMigratorService;
26+
import ch.elexis.core.findings.util.model.TransientCoding;
2027
import ch.elexis.core.services.holder.ConfigServiceHolder;
2128
import ch.elexis.core.ui.e4.util.CoreUiUtil;
2229
import ch.elexis.data.Patient;
@@ -35,35 +42,86 @@ public DiagnosisMigrator() {
3542
public void migrate(IProgressMonitor monitor) {
3643

3744
List<Patient> allPatients = new Query<Patient>(Patient.class).execute();
38-
monitor.beginTask("Hilotec Diagnosen Migration", allPatients.size());
45+
monitor.beginTask("Hilotec Diagnosen/Anamnese Migration", allPatients.size());
3946
ConfigServiceHolder.get().set(IMigratorService.DIAGNOSE_SETTINGS_USE_STRUCTURED, true);
47+
ConfigServiceHolder.get().set(IMigratorService.PERSANAM_SETTINGS_USE_STRUCTURED, true);
4048
for (Patient patient : allPatients) {
41-
DiagnoselisteItem rootDiagnosis = DiagnoselisteItem.getRoot(patient, DiagnoselisteItem.TYP_DIAGNOSELISTE);
42-
LocalDate dateRecorded = new TimeTool(rootDiagnosis.getDatum()).toLocalDate();
43-
for (DiagnoselisteItem di : getSortedChildren(rootDiagnosis)) {
49+
DiagnoselisteItem rootSysAnamnesis = DiagnoselisteItem.getRoot(patient, DiagnoselisteItem.TYP_SYSANAMNESE);
50+
LocalDate dateRecorded = new TimeTool(rootSysAnamnesis.getDatum()).toLocalDate();
51+
for (DiagnoselisteItem di : getSortedChildren(rootSysAnamnesis)) {
52+
LocalDate itemDate = new TimeTool(di.getDatum()).toLocalDate();
4453
ICondition condition = findingsService.create(ICondition.class);
4554
condition.setPatientId(patient.getId());
4655
condition.setCategory(ConditionCategory.PROBLEMLISTITEM);
47-
condition.setStart(di.getText());
56+
condition.setStart(
57+
di.getText() + " (" + itemDate.format(DateTimeFormatter.ofPattern("dd.MM.yyyy")) + ")");
4858
condition.setStatus(ConditionStatus.ACTIVE);
4959
dateRecorded = dateRecorded.minusDays(1);
5060
condition.setDateRecorded(dateRecorded);
5161
StringJoiner textJoiner = new StringJoiner("\n");
52-
addSubConditions(textJoiner, getSortedChildren(di), 0);
62+
addSubItems(textJoiner, getSortedChildren(di), 0, true);
5363
condition.setText(textJoiner.toString());
5464
findingsService.saveFinding(condition);
5565
}
66+
67+
DiagnoselisteItem rootPersAnamnesis = DiagnoselisteItem.getRoot(patient,
68+
DiagnoselisteItem.TYP_PERSANAMNESE);
69+
for (DiagnoselisteItem di : getSortedChildren(rootPersAnamnesis)) {
70+
LocalDate itemDate = new TimeTool(di.getDatum()).toLocalDate();
71+
IObservation observation = getOrCreatePersonalAnamnesis(patient.getId());
72+
StringJoiner textJoiner = new StringJoiner("\n");
73+
// append to existing text
74+
observation.getText().ifPresent(text -> textJoiner.add(text));
75+
textJoiner.add(di.getText() + " (" + itemDate.format(DateTimeFormatter.ofPattern("dd.MM.yyyy")) + ")");
76+
addSubItems(textJoiner, getSortedChildren(di), 2, true);
77+
observation.setText(textJoiner.toString());
78+
findingsService.saveFinding(observation);
79+
}
5680
monitor.worked(1);
5781
}
5882
monitor.done();
5983
}
6084

61-
private void addSubConditions(StringJoiner textJoiner, List<DiagnoselisteItem> sortedChildren, int depth) {
85+
private IObservation getOrCreatePersonalAnamnesis(String patientId) {
86+
List<IObservation> observations = findingsService.getPatientsFindings(patientId, IObservation.class);
87+
observations = observations.parallelStream().filter(iFinding -> isPersAnamnese(iFinding))
88+
.collect(Collectors.toList());
89+
if (observations.isEmpty()) {
90+
IObservation observation = findingsService.create(IObservation.class);
91+
observation.setPatientId(patientId);
92+
observation.setCategory(ObservationCategory.SOCIALHISTORY);
93+
observation.setCoding(Collections.singletonList(new TransientCoding(ObservationCode.ANAM_PERSONAL)));
94+
findingsService.saveFinding(observation);
95+
return observation;
96+
} else {
97+
return observations.get(0);
98+
}
99+
}
100+
101+
private boolean isPersAnamnese(IObservation iFinding) {
102+
if (iFinding instanceof IObservation && iFinding.getCategory() == ObservationCategory.SOCIALHISTORY) {
103+
for (ICoding code : iFinding.getCoding()) {
104+
if (ObservationCode.ANAM_PERSONAL.isSame(code)) {
105+
return true;
106+
}
107+
}
108+
}
109+
return false;
110+
}
111+
112+
private void addSubItems(StringJoiner textJoiner, List<DiagnoselisteItem> sortedChildren, int depth,
113+
boolean addDate) {
62114
String postfix = " ".repeat(depth);
63115
for (DiagnoselisteItem sub : sortedChildren) {
64-
textJoiner.add(postfix + sub.getText());
116+
LocalDate dateRecorded = new TimeTool(sub.getDatum()).toLocalDate();
117+
if (addDate) {
118+
textJoiner.add(postfix + sub.getText() + " ("
119+
+ dateRecorded.format(DateTimeFormatter.ofPattern("dd.MM.yyyy")) + ")");
120+
} else {
121+
textJoiner.add(postfix + sub.getText());
122+
}
65123
if (getSortedChildren(sub).size() > 0) {
66-
addSubConditions(textJoiner, getSortedChildren(sub), depth + 2);
124+
addSubItems(textJoiner, getSortedChildren(sub), depth + 2, addDate);
67125
}
68126
}
69127
}
@@ -75,9 +133,9 @@ private List<DiagnoselisteItem> getSortedChildren(DiagnoselisteItem item) {
75133
}
76134

77135
private class DiagnoselisteItemComparator implements Comparator<DiagnoselisteItem> {
78-
@Override
79-
public int compare(DiagnoselisteItem o1, DiagnoselisteItem o2) {
80-
return Integer.compare(o1.getPosition(), o2.getPosition());
81-
}
136+
@Override
137+
public int compare(DiagnoselisteItem o1, DiagnoselisteItem o2) {
138+
return Integer.compare(o1.getPosition(), o2.getPosition());
82139
}
140+
}
83141
}

0 commit comments

Comments
 (0)