bzkf / obds-to-fhir

This project contains a Kafka Stream processor that creates FHIR resources from oBDS-XML data and writes them to a FHIR Topic.
GNU General Public License v3.0
3 stars 1 forks source link

Check if Pat-ID is reasonable value #86

Closed pcvolkmer closed 2 months ago

pcvolkmer commented 2 months ago

Here: https://github.com/bzkf/obds-to-fhir/blob/32cd649ca82e5c9ac45ffbed821f0ebc58d64e71/src/main/java/org/miracum/streams/ume/obdstofhir/mapper/ObdsConditionMapper.java#L78-L84

jasminziegler commented 2 months ago

z.B. Mindestlänge prüfen prüfen, dass nicht nur "null" String drinsteht wie z.B. in Würzburg

standortübergreifender Abgleich - wie sehen PatIDs aus? Beispiele aller Standorte einholen

via Envvar - überprüfen ob die PatID am jew. Standort regelkonform ist? - nicht zu einschränkend

Vorsicht - wenn wir über BZKF hinaus denken, mehrere Standorte, nicht zu restriktiv

Follow-Up Issue: wie gehen wir damit um, wenn PatID nicht valide ist? Exitstrategie --> keine Conditions usw erstellen; innerhalb der Condition wird ohnehin subject.reference gesetzt --> Abbruch;

pcvolkmer commented 2 months ago

Zu prüfen wäre:

Weitere Prüfungen könnten eine Log-Message verursachen - ohne Abbruch des Mappings.

Bei Mappen von List<MeldungExport> ist die Frage noch offen, wann abgebrochen werden soll:

MarcelErpi commented 2 months ago

Als Ergänzung: Standortspezifische Id Layouts können über Regex-Ausdruck gematched und validiert werden. Hierfür muss dann dieser aber via einer Umgebungsvariable konfigurierbar sein. Ähnlich zu: https://github.com/bzkf/obds-to-fhir/blob/32cd649ca82e5c9ac45ffbed821f0ebc58d64e71/src/main/java/org/miracum/streams/ume/obdstofhir/mapper/ObdsToFhirMapper.java#L64-L75

chgl commented 2 months ago

Ich fänds auch perfekt wenn man das wirklich per konfigurierbarer regex machen kann - dann hat man die meiste Flexibilität. Default wäre dann ein match auf \w* (o.ä.).

pcvolkmer commented 2 months ago

Static method und Spring @Value("{}") - ohne static - ist so eine Sache. Da müsste sowas gemacht werden wie:

@Component
class Mapper {
  private static Pattern pattern = Pattern.compile("\w*");

  @Value("${settings.patidpattern:\\w*}")
  public void setStringPattern(String value) {
    try {
      Mapper .pattern = Pattern.compile(value)
    } catch (Exception e) {
      log.error("Alles kaputt .... ", e);
      throw e;
    }
  }

  protected static String convertId(String id) {
    // ... static Mapper .pattern nutzen ...
  }
}

Dabei würde auch direkt beim Initialisieren des Spring-Beans der Klasse die Anwendung mit einer Exception aussteigen, wenn das konfigurierte Pattern nicht nutzbar ist.

Alternativ, bei Verwendung der FhirProperties im Konstruktor, könnte auch das gemacht werden

@Component
class Mapper {
  private static Pattern pattern = Pattern.compile("\w*");

  // Obsolet bei nur einem Konstruktor: @Autowired
  public Mapper(FhirProperties fhirProperties)  {
    super(fhirProperties);
  }

  @PostConstruct
  public void init() {
    try {
      Mapper.pattern = Pattern.compile(this.fhirProperties.patIdPattern);
    } catch (Exception e) {
      log.error("Alles kaputt .... ", e);
      throw e;
    }
  }
}
pcvolkmer commented 2 months ago

Im zugehörigen PR habe ich schon mal einen ersten Entwurf inklusive Test implementiert.

pcvolkmer commented 2 months ago

Follow-Up Issue: wie gehen wir damit um, wenn PatID nicht valide ist? Exitstrategie --> keine Conditions usw erstellen; innerhalb der Condition wird ohnehin subject.reference gesetzt --> Abbruch;

Könnte als Exception realisiert werden, wie schon beim Umwandeln der oBDS-Datumsangaben in FHIR-Angaben. Dazu könnte eine eigene PatientIdInvalidException geworfen werden, die dann ähnlich der DateTimeException in convertObdsDateToDateTimeType(String) zu einen Abbruch führt.

Denkbar ist auch, dies konfigurierbar zu machen: Abbruch oder nur (wie aktuell) logging. (Standardverhalten?)