# For a comprehensive documentation of configuration parameters see the configuration manual # ("Konfigurationshandbuch"). # debug mode: If set to true, token handling is disabled (i.e. no tokens are necessary). debug = false # Name of this mainzelliste distribution instance. dist = Lokale Patientenliste der CCP-IT am Standort ML_SITE # Database setup db.driver = ML_DB_DRIVER db.url = jdbc:ML_DB_TYPE://ML_DB_HOST:ML_DB_PORT/ML_DB_NAME db.username = ML_DB_USER db.password = ML_DB_PASS # Logging # By default, logs are written to stdout gcp.audittrail = true # Field definitions field.Vorname.type = PlainTextField field.Nachname.type = PlainTextField field.Fruehere_Namen.type = PlainTextField field.Geburtstag.type = IntegerField field.Geburtsmonat.type = IntegerField field.Geburtsjahr.type = IntegerField field.Staatsangehoerigkeit.type = PlainTextField field.Geschlecht.type = PlainTextField field.locallyUniqueId.type = PlainTextField # Server-side validation validator.field.Vorname.required = true validator.field.Nachname.required = true validator.field.Geburtstag.required = true validator.field.Geburtsmonat.required = true validator.field.Geburtsjahr.required = true validator.field.Vorname.format = [A-Za-zäÄöÖüÜß\\.\\-' ]*[A-Za-zäÄöÖüÜß]+[A-Za-zäÄöÖüÜß\\.\\-' ]* validator.field.Nachname.format = [A-Za-zäÄöÖüÜß\\.\\-' ]*[A-Za-zäÄöÖüÜß]+[A-Za-zäÄöÖüÜß\\.\\-' ]* validator.field.Fruehere_Namen.format = [A-Za-zäÄöÖüÜß\\.\\-' ]*[A-Za-zäÄöÖüÜß]+[A-Za-zäÄöÖüÜß\\.\\-' ]* # Date validation: validator.date.0.fields = Geburtstag, Geburtsmonat, Geburtsjahr validator.date.0.format = ddMMyyyy # Exchange groups # An exchange group denotes a set of fields whose values are considered interchangeable. # The matcher (currently only EpilinkMatcher) compares the fields in each exchange group to # all of its permutations and uses the best matching combination for final decision. exchangeGroup.0 = Vorname, Nachname, Fruehere_Namen # Field transformations # # Transformations for a field {fieldname} are defined by # field.{fieldname}.transformers = {transformerlist}, where # transformerlist is a comma-separated list of names of subclasses of FieldTransformer. field.Vorname.transformers = StringNormalizer, FirstNameDecomposer field.Nachname.transformers = StringNormalizer, GermanLastNameDecomposer field.Fruehere_Namen.transformers = StringNormalizer, GermanLastNameDecomposer # field comparators field.Vorname.comparator = NGramComparator field.Nachname.comparator = NGramComparator field.Fruehere_Namen.comparator = NGramComparator field.Geburtstag.comparator = BinaryFieldComparator field.Geburtsmonat.comparator = BinaryFieldComparator field.Geburtsjahr.comparator = BinaryFieldComparator field.Staatsangehoerigkeit.comparator = BinaryFieldComparator field.Geschlecht.comparator = BinaryFieldComparator # Matcher definition # Property matcher defines the class name of the matcher to use, which must be a subclass # of Matcher. Currently only EpilinkMatcher and NullMatcher are supported. matcher = EpilinkMatcher # Config for Epilink Matcher # # matcher.epilink.{fieldname}.frequency: Defines the assumed mean frequency of values # for field {fieldname}. This corresponds to the u-probability in the Fellegi-Sunter-Model # and can be estimated by the reciprocal of the number of distinct values (i.e. the # frequency of "month" is 1 / 12). matcher.epilink.Vorname.frequency = 0.000235 matcher.epilink.Nachname.frequency = 0.0000271 matcher.epilink.Fruehere_Namen.frequency = 0.0000271 # 1 / 30 (approximate average number of days in a month) matcher.epilink.Geburtstag.frequency = 0.0333 # 1 / 12 matcher.epilink.Geburtsmonat.frequency = 0.0833 # example value: birth years for an age range of 35 years (40 - 75). matcher.epilink.Geburtsjahr.frequency = 0.0286 # Berechnungsgrundlage: 193 anerkannte + 13 umstrittene Staaten (Quelle: Wikipedia) -> ca. 1 / 200 matcher.epilink.Staatsangehoerigkeit.frequency = 0.005 matcher.epilink.Geschlecht.frequency = 0.5 # matcher.epilink.{fieldname}.error_rate defines the assumed error_rate for # field {fieldname} (1 - m-probability) # # The supplied number stem from the evaluation of a German cancer registry matcher.epilink.Vorname.errorRate = 0.01 matcher.epilink.Nachname.errorRate = 0.008 matcher.epilink.Fruehere_Namen.errorRate = 0.008 matcher.epilink.Geburtstag.errorRate = 0.005 matcher.epilink.Geburtsmonat.errorRate = 0.002 matcher.epilink.Geburtsjahr.errorRate = 0.004 matcher.epilink.Staatsangehoerigkeit.errorRate = 0.04 matcher.epilink.Geschlecht.errorRate = 0.04 # matcher.epilink.threshold.match: Defines the minimum weight (in the interval [0,1]) # for which a pair of records is considered a definite match. # # matcher.epilink.threshold_non_match: Defines the weight (in the interval [0,1]) # below which a pair of records is considered a definite non-match. Must be less than or equal # to matcher.epilink.threshold_match. # # Record pairs with a weight w with threshold_non_match <= w < threshold_match are # considered possible matches and lead to a tentative PID. matcher.epilink.threshold_match = 0.95 matcher.epilink.threshold_non_match = 0.65 # Blocking # The blocking strategy choice depends on the field types after the transformation. # If compound fields are passed to the blocker, whether created by a field transformation or as input fields, # the type of the subfields is the one that is relevant for the blocking. # If exchange groups are used, only one of the fieldnames should be given here. The blocker is applied to # the other fields as well. # Use Soundex for PlainText fields blocking.soundex.type = Soundex blocking.soundex.fields = Vorname, Nachname, Fruehere_Namen # Use FieldEquality e.g. for birthday based blocking # This can be combined with Soundex blocking. blocking.dob.type = FieldEquality blocking.dob.fields = Geburtstag, Geburtsmonat, Geburtsjahr # Servers (apiKey and permission definition) servers.0.apiKey = ML_API_KEY servers.0.permissions = createSession;showSessionIds;deleteAllPatients;createToken;tt_addPatient;tt_readPatients;tt_editPatient;readConfiguration # TODO: Reduce to bridgeheads ip servers.0.allowedRemoteAdresses = 0.0.0.0/0 # Allowed format of the callback callback.allowedFormat = https://.* callback.allowSelfsigned = false # IdGenerators idgenerators = BK_ML_SITE_L-ID, MDS_ML_SITE_L-ID, BK_ML_SITE_G-ID, locallyUniqueId, DKTK000001985_ML_SITE_L-ID, DKTK000001985_ML_SITE_G-ID, DKTK000001986_ML_SITE_L-ID, DKTK000001986_ML_SITE_G-ID, DKTK000001950_ML_SITE_L-ID, DKTK000001950_ML_SITE_G-ID, DKTK000001951_ML_SITE_L-ID, DKTK000001951_ML_SITE_G-ID, DKTK999999999_ML_SITE_L-ID, DKTK999999999_ML_SITE_G-ID, DKTK000002089_ML_SITE_L-ID, DKTK000002089_ML_SITE_G-ID idgenerators.eagerGeneration = false # Configuration of the local and global BK Pseudonymes idgenerator.BK_ML_SITE_L-ID = PIDGenerator idgenerator.BK_ML_SITE_L-ID.k1 = ML_BK_IDGENERATOR_RANDOM_1 idgenerator.BK_ML_SITE_L-ID.k2 = ML_BK_IDGENERATOR_RANDOM_2 idgenerator.BK_ML_SITE_L-ID.k3 = ML_BK_IDGENERATOR_RANDOM_3 idgenerator.BK_ML_SITE_G-ID = ExternalIDGenerator # The unique id from the local datawarehouse idgenerator.locallyUniqueId = ExternalIDGenerator # Configuration for the local mds-id idgenerator.MDS_ML_SITE_L-ID = PIDGenerator idgenerator.MDS_ML_SITE_L-ID.k1 = ML_MDS_IDGENERATOR_RANDOM_1 idgenerator.MDS_ML_SITE_L-ID.k2 = ML_MDS_IDGENERATOR_RANDOM_2 idgenerator.MDS_ML_SITE_L-ID.k3 = ML_MDS_IDGENERATOR_RANDOM_3 idgenerator.MDS_ML_SITE_L-ID.eager = * idgenerator.MDS_ML_SITE_L-ID.exportEncryption = mdsIdEncryption # Encryption for export of mds crypto.key.mdsIdPublicKey.type = RSA_PUBLIC crypto.key.mdsIdPublicKey.uri = file:///run/secrets/centralSearchPublicKey crypto.encryption.mdsIdEncryption.key = mdsIdPublicKey crypto.encryption.mdsIdEncryption.type = RSA_ENCRYPT # Configuration of the study specific id-generators # Configuration for project DKTK000001985 idgenerator.DKTK000001985_ML_SITE_L-ID = PIDGenerator idgenerator.DKTK000001985_ML_SITE_L-ID.k1 = ML_DKTK000001985_IDGENERATOR_RANDOM_1 idgenerator.DKTK000001985_ML_SITE_L-ID.k2 = ML_DKTK000001985_IDGENERATOR_RANDOM_1 idgenerator.DKTK000001985_ML_SITE_L-ID.k3 = ML_DKTK000001985_IDGENERATOR_RANDOM_1 idgenerator.DKTK000001985_ML_SITE_G-ID = ExternalIDGenerator # Configuration for project DKTK000001986 idgenerator.DKTK000001986_ML_SITE_L-ID = PIDGenerator idgenerator.DKTK000001986_ML_SITE_L-ID.k1 = ML_DKTK000001986_IDGENERATOR_RANDOM_1 idgenerator.DKTK000001986_ML_SITE_L-ID.k2 = ML_DKTK000001986_IDGENERATOR_RANDOM_1 idgenerator.DKTK000001986_ML_SITE_L-ID.k3 = ML_DKTK000001986_IDGENERATOR_RANDOM_1 idgenerator.DKTK000001986_ML_SITE_G-ID = ExternalIDGenerator # Configuration for project DKTK000001950 idgenerator.DKTK000001950_ML_SITE_L-ID = PIDGenerator idgenerator.DKTK000001950_ML_SITE_L-ID.k1 = ML_DKTK000001950_IDGENERATOR_RANDOM_1 idgenerator.DKTK000001950_ML_SITE_L-ID.k2 = ML_DKTK000001950_IDGENERATOR_RANDOM_1 idgenerator.DKTK000001950_ML_SITE_L-ID.k3 = ML_DKTK000001950_IDGENERATOR_RANDOM_1 idgenerator.DKTK000001950_ML_SITE_G-ID = ExternalIDGenerator # Configuration for project DKTK000001951 idgenerator.DKTK000001951_ML_SITE_L-ID = PIDGenerator idgenerator.DKTK000001951_ML_SITE_L-ID.k1 = ML_DKTK000001951_IDGENERATOR_RANDOM_1 idgenerator.DKTK000001951_ML_SITE_L-ID.k2 = ML_DKTK000001951_IDGENERATOR_RANDOM_1 idgenerator.DKTK000001951_ML_SITE_L-ID.k3 = ML_DKTK000001951_IDGENERATOR_RANDOM_1 idgenerator.DKTK000001951_ML_SITE_G-ID = ExternalIDGenerator # Configuration for project DKTK999999999 idgenerator.DKTK999999999_ML_SITE_L-ID = PIDGenerator idgenerator.DKTK999999999_ML_SITE_L-ID.k1 = ML_DKTK999999999_IDGENERATOR_RANDOM_1 idgenerator.DKTK999999999_ML_SITE_L-ID.k2 = ML_DKTK999999999_IDGENERATOR_RANDOM_1 idgenerator.DKTK999999999_ML_SITE_L-ID.k3 = ML_DKTK999999999_IDGENERATOR_RANDOM_1 idgenerator.DKTK999999999_ML_SITE_G-ID = ExternalIDGenerator # Configuration for project DKTK000002089 idgenerator.DKTK000002089_ML_SITE_L-ID = PIDGenerator idgenerator.DKTK000002089_ML_SITE_L-ID.k1 = ML_DKTK000002089_IDGENERATOR_RANDOM_1 idgenerator.DKTK000002089_ML_SITE_L-ID.k2 = ML_DKTK000002089_IDGENERATOR_RANDOM_1 idgenerator.DKTK000002089_ML_SITE_L-ID.k3 = ML_DKTK000002089_IDGENERATOR_RANDOM_1 idgenerator.DKTK000002089_ML_SITE_G-ID = ExternalIDGenerator