diff --git a/src/main/java/dev/dnpm/etl/processor/pseudonym/GpasPseudonymGenerator.java b/src/main/java/dev/dnpm/etl/processor/pseudonym/GpasPseudonymGenerator.java index 7b631d8..07f16c5 100644 --- a/src/main/java/dev/dnpm/etl/processor/pseudonym/GpasPseudonymGenerator.java +++ b/src/main/java/dev/dnpm/etl/processor/pseudonym/GpasPseudonymGenerator.java @@ -127,7 +127,21 @@ public class GpasPseudonymGenerator implements Generator { .orElseGet(ParametersParameterComponent::new).getValue(); // pseudonym - return identifier.getSystem() + "|" + identifier.getValue(); + return sanitizeValue(identifier.getValue()); + } + + /** + * Allow only filename friendly values + * + * @param psnValue GAPS pseudonym value + * @return cleaned up value + */ + public static String sanitizeValue(String psnValue) { + // pattern to match forbidden characters + String forbiddenCharsRegex = "[\\\\/:*?\"<>|;]"; + + // Replace all forbidden characters with underscores + return psnValue.replaceAll(forbiddenCharsRegex, "_"); } diff --git a/src/test/kotlin/dev/dnpm/etl/processor/pseudonym/PseudonymizeServiceTest.kt b/src/test/kotlin/dev/dnpm/etl/processor/pseudonym/PseudonymizeServiceTest.kt index a30a328..4646ff6 100644 --- a/src/test/kotlin/dev/dnpm/etl/processor/pseudonym/PseudonymizeServiceTest.kt +++ b/src/test/kotlin/dev/dnpm/etl/processor/pseudonym/PseudonymizeServiceTest.kt @@ -70,6 +70,13 @@ class PseudonymizeServiceTest { assertThat(mtbFile.patient.id).isEqualTo("123") } + @Test + fun sanitizeFileName(@Mock generator: GpasPseudonymGenerator) { + val result= GpasPseudonymGenerator.sanitizeValue("l://a\\bs;1*2?3>") + + assertThat(result).isEqualTo("l___a_bs_1_2_3_") + } + @Test fun shouldUsePseudonymPrefixForBuiltin(@Mock generator: AnonymizingGenerator) { doAnswer {