228 lines
10 KiB
Plaintext
228 lines
10 KiB
Plaintext
# 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_2
|
|
idgenerator.DKTK000001985_ML_SITE_L-ID.k3 = ML_DKTK000001985_IDGENERATOR_RANDOM_3
|
|
|
|
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_2
|
|
idgenerator.DKTK000001986_ML_SITE_L-ID.k3 = ML_DKTK000001986_IDGENERATOR_RANDOM_3
|
|
|
|
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_2
|
|
idgenerator.DKTK000001950_ML_SITE_L-ID.k3 = ML_DKTK000001950_IDGENERATOR_RANDOM_3
|
|
|
|
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_2
|
|
idgenerator.DKTK000001951_ML_SITE_L-ID.k3 = ML_DKTK000001951_IDGENERATOR_RANDOM_3
|
|
|
|
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_2
|
|
idgenerator.DKTK999999999_ML_SITE_L-ID.k3 = ML_DKTK999999999_IDGENERATOR_RANDOM_3
|
|
|
|
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_2
|
|
idgenerator.DKTK000002089_ML_SITE_L-ID.k3 = ML_DKTK000002089_IDGENERATOR_RANDOM_3
|
|
|
|
idgenerator.DKTK000002089_ML_SITE_G-ID = ExternalIDGenerator
|