summaryrefslogtreecommitdiff
path: root/README.md
blob: 4eb5e553080796cb8a4747b62374333244648e02 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
# Onkostar-Plugin zur Verwendung mit der DNPM-Formularsammlung

## ATC-Codes

Dieses Plugin integriert das ATC-Codes-Plugin vollständig. Dieses kann daher nicht zusätzlich in Onkostar installiert werden.

## Consent

Das Plugin ist auf die Übernahme des DNPM-Consents ausgelegt. Hierzu muss die Einstellung `consentform` festgelegt werden.
Diese Einstellung muss manuell in der Datenbank angelegt werden und kann danach in Onkostar verändert werden.

```
INSERT INTO einstellung (name, wert, kategorie, beschreibung)
VALUES (
 'consentform',
 'MR.Consent',
 'DNPM',
 'Zu verwendendes Consent-Formular'
);
```

Aktuell werden folgende Consent-Formulare unterstützt:

* `MR.Consent`
* `Excel-Formular` (UKW - Beinhaltet Consent-Angaben)

```mermaid
classDiagram
class ConsentManagerService {
<<Interface>>
  + applyConsent(Procedure) void
  + canApply(Procedure) boolean
}
class ConsentManagerServiceFactory {
  + ConsentManagerServiceFactory(IOnkostarApi) 
  + currentUsableInstance() ConsentManagerService
}
class MrConsentManagerService {
  + MrConsentManagerService(IOnkostarApi) 
  + canApply(Procedure) boolean
  + applyConsent(Procedure) void
}
class UkwConsentManagerService {
  + UkwConsentManagerService(IOnkostarApi) 
  + canApply(Procedure) boolean
  + applyConsent(Procedure) void
}

ConsentManagerServiceFactory  ..>  MrConsentManagerService : «create»
ConsentManagerServiceFactory  ..>  UkwConsentManagerService : «create»
MrConsentManagerService  ..|>  ConsentManagerService 
UkwConsentManagerService  ..|>  ConsentManagerService 
```

Eine Übernahme von Consent-Daten aus unbekannten Formularen ist nur manuell möglich.

## Therapieplan

Soll das automatische Befüllen der Unterformulare *Einzelempfehlung* und *Rebiopsie* nicht durchgeführt werden, weil es mehrere MTBs je MTB-Episode gibt, so muss die Einstellung `mehrere_mtb_in_mtbepisode` vorhanden sein und auf den Wert `true` gesetzt sein.

```
INSERT INTO einstellung (name, wert, kategorie, optionen, beschreibung)
VALUES (
 'mehrere_mtb_in_mtbepisode',
 'true',
 'DNPM',
 '[{"key": "true", "value": "Ja"},{"key": "false", "value": "Nein"}]',
 'Angabe, ob mehrere MTBs je MTB-Episode verwendet werden.'
);
```

### Mapping MTB zu Therapieplan-Protokollauszug

Das Plugin ermöglicht die Übernahme von Inhalten aus einem MTB in den Protokollauszug des DNPM Therapieplans. Für die Formulare

* `OS.Tumorkonferenz`
* `OS.Tumorkonferenz.VarianteUKW`
* `MR.MTB_Anmeldung`

liegen bereits Implementierungen vor. Um eigene Implementierungen vorzunehmen, die sich an andere Formulare oder Formularvarianten richtet,
muss hierzu das Interface `ProcedureToProtocolMapper` implementiert werden. Dazu muss die Methode `apply(Procedure)` derart implementiert werden,
sodass aus einer Prozedur ein entsprechender Abschnitt als Text für den Protokollauszug gewandelt wird.

Als Rückgabewert wird hierbei ein Wert vom Typ `Optional<String>` erwartet, dabei z.B. `Optional.of("Text")`, wenn ein zu verwendender Text oder
z.B. `Optional.empty()` wenn kein zu verwendender Text zurückgegeben wird.

Anschließend ist das Mapping in `DefaultMtbService` in der Methode `procedureToProtocolMapper(Procedure)` einzutragen, beispielsweise durch

```
...
    case "Custom.Neuekonferenz":
        return new CustomNeuekonferenzToProtocolMapper();
...
```

```mermaid
classDiagram

class MtbService {
<<Interface>>
  + getProtocol(List~Procedure~) String
  + procedureToProtocolMapper(Procedure) ProcedureToProtocolMapper
}
class DefaultMtbService {
  + DefaultMtbService(IOnkostarApi) 
  + getProtocol(List~Procedure~) String
  + procedureToProtocolMapper(Procedure) ProcedureToProtocolMapper
}
class MrMtbAnmeldungToProtocolMapper {
  + MrMtbAnmeldungToProtocolMapper(IOnkostarApi) 
  + apply(Procedure) Optional~String~
}
class OsTumorkonferenzToProtocolMapper {
  + OsTumorkonferenzToProtocolMapper() 
  + apply(Procedure) Optional~String~
}
class OsTumorkonferenzVarianteUkwToProtocolMapper {
  + OsTumorkonferenzVarianteUkwToProtocolMapper() 
  + apply(Procedure) Optional~String~
}
class ProcedureToProtocolMapper {
<<Interface>>

}

DefaultMtbService  ..|>  MtbService 
DefaultMtbService  ..>  MrMtbAnmeldungToProtocolMapper : «create»
DefaultMtbService  ..>  OsTumorkonferenzToProtocolMapper : «create»
DefaultMtbService  ..>  OsTumorkonferenzVarianteUkwToProtocolMapper : «create»
MrMtbAnmeldungToProtocolMapper  ..|>  ProcedureToProtocolMapper 
OsTumorkonferenzToProtocolMapper  ..|>  ProcedureToProtocolMapper 
OsTumorkonferenzVarianteUkwToProtocolMapper  ..|>  ProcedureToProtocolMapper 
```

Idealerweise werden entsprechende UnitTests hinzugefügt.

### Mapping Systemtherapie-Formular zu Prozedurwerten

Das Formular `DNPM KlinikAnamnese` verwendet eine Backend-Service-Funktion zum Ermitteln vorliegender Therapielinien. Für die Formulare

* `OS.Systemische Therapie`
* `OS.Systemische Therapie.VarianteUKW`

wird analog zum Mapping MTB auf Therapieplan-Protokollauszug eine formularspezifische Entscheidung getroffen, welcher Mapper zur
Laufzeit verwendet werden soll. Der Mapper muss hierbei das Interface `ProzedurToProzedurwerteMapper` implementieren.

In der Klasse `DefaultSystemtherapieService` wird zur Laufzeit der erforderliche Mapper für das verwendete Formular ausgewählt.

An dieser Stelle kann auch eine eigene Implementierung - eine neue Klasse, die das Interface `ProzedurToProzedurwerteMapper` implementiert - 
integriert werden, indem das zu verwendende Formular (Formularname) und die zu verwendende Mapping-Klasse für den Formularnamen angegeben wird.

Hierbei kann in der Einstellung `systemtherapieform` festgelegt werden, dass ein anderes Formular als "OS.Systemische Therapie" verwendet werden soll.
Diese Einstellung muss manuell in der Datenbank angelegt werden und kann danach in Onkostar verändert werden.

```
INSERT INTO einstellung (name, wert, kategorie, beschreibung)
VALUES (
 'systemtherapieform',
 'OS.Systemische Therapie',
 'DNPM',
 'Zu verwendendes Formular für die systemische Therapie'
);
```

## Bauen des Plugins

Für das Bauen des Plugins ist zwingend JDK in Version 11 erforderlich.
Spätere Versionen des JDK beinhalten einige Methoden nicht mehr, die von Onkostar und dort benutzten Libraries verwendet
werden.

Voraussetzung ist das Kopieren der Datei `onkostar-api-2.11.1.1.jar` (oder neuer) in das Projektverzeichnis `libs`.

Weiterhin verwendet dieses Plugin das [ATC-Codes-Plugin](https://github.com/CCC-MF/onkostar-plugin-atccodes).
Die zugehörige JAR-Datei muss ebenfalls in das Projektverzeichnis `libs` kopiert werden. Aktuell wird Version 0.5.0 verwendet.

**_Hinweis_**: Bei Verwendung einer neueren Version der Onkostar-API oder des ATC-Codes-Plugins
muss die Datei `pom.xml` entsprechend angepasst werden.

Danach Ausführen des Befehls:

```shell
./mvnw package
```