mirror of
https://github.com/samply/bridgehead.git
synced 2025-06-17 14:10:14 +02:00
WIP: Merged docker files and install script from bk-dep and c4 docker
This commit is contained in:
13
internal-configuration/bridgehead-common.xml
Normal file
13
internal-configuration/bridgehead-common.xml
Normal file
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<bridgehead xmlns="http://schema.samply.de/config/BridgeheadInfo">
|
||||
<!-- NOTE: This file is only used in magicpl -->
|
||||
<name>Brückenkopf</name>
|
||||
<longname>DKTK Brückenkopf Teststandort</longname>
|
||||
<dktkid>MAGICPL_SITE</dktkid>
|
||||
<monitor>NOT_USED</monitor>
|
||||
<interval>string</interval>
|
||||
<centralsearch>NOT_USED</centralsearch>
|
||||
<decentralsearch>NOT_USED</decentralsearch>
|
||||
<updateserver>string</updateserver>
|
||||
<queryLanguage>QUERY</queryLanguage>
|
||||
</bridgehead>
|
BIN
internal-configuration/centralSearchPublicKey.der
Normal file
BIN
internal-configuration/centralSearchPublicKey.der
Normal file
Binary file not shown.
444
internal-configuration/magicpl.xml
Normal file
444
internal-configuration/magicpl.xml
Normal file
@ -0,0 +1,444 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE pathconfig [
|
||||
<!ENTITY localPatientListUrl "MAGICPL_MAINZELLISTE_URL">
|
||||
<!ENTITY localPatientlistApiKey "MAGICPL_MAINZELLISTE_API_KEY">
|
||||
<!ENTITY magicplApiKey "MAGICPL_API_KEY">
|
||||
<!ENTITY magicplApiKeyConnector "MAGICPL_API_KEY_CONNECTOR">
|
||||
<!ENTITY centralPatientListUrl "MAGICPL_MAINZELLISTE_CENTRAL_URL">
|
||||
<!ENTITY centralPatientListApiKey "MAGICPL_MAINZELLISTE_CENTRAL_API_KEY">
|
||||
<!ENTITY centralKNEUrl "MAGICPL_CENTRAL_URL">
|
||||
<!ENTITY centralKNEApiKey "MAGICPL_CENTRAL_API_KEY">
|
||||
<!ENTITY site "MAGICPL_SITE">
|
||||
]>
|
||||
<pathconfig xmlns="http://www.example.org/Pfade" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.example.org/Pfade magicpl.xsd ">
|
||||
<paths>
|
||||
<multipath>
|
||||
<name>getId</name>
|
||||
<input>
|
||||
<iorecord ref="IDAT" name="IDAT"/>
|
||||
<iosingle ref="extIDs" name="extIDs"/>
|
||||
<iosingle ref="idTypes" name="idTypes"/>
|
||||
<iosingle ref="consented" name="consented"/>
|
||||
<iosingle ref="auditTrail" name="auditTrail"/>
|
||||
<iosingle ref="sureness" name="sureness"/>
|
||||
</input>
|
||||
<output>
|
||||
<iosingle ref="ids" name="ids"/>
|
||||
</output>
|
||||
<step>
|
||||
<name>getRequestedId</name>
|
||||
<parameters/>
|
||||
<input>
|
||||
<iorecord ref="IDAT" name="IDAT"/>
|
||||
<iosingle ref="idTypes" name="idTypes"/>
|
||||
<iosingle ref="consented" name="consented"/>
|
||||
<iosingle ref="auditTrail" name="auditTrail"/>
|
||||
<iosingle ref="sureness" name="sureness"/>
|
||||
</input>
|
||||
<output>
|
||||
<iosingle ref="ids" name="ids"/>
|
||||
</output>
|
||||
<switch>
|
||||
<evaluator name="de.mainzelliste.paths.evaluator.IsConsentedEvaluator">
|
||||
<parameters>
|
||||
<parameter name="key">consented</parameter>
|
||||
</parameters>
|
||||
</evaluator>
|
||||
<!-- eventuell muss hier andere unterscheidung genommen werden -->
|
||||
<case value="true">
|
||||
<multipath>
|
||||
<name>getDktkIdWithIdat</name>
|
||||
<parameters/>
|
||||
<input>
|
||||
<iorecord ref="IDAT"/>
|
||||
<iosingle ref="idTypes" name="idTypes"/>
|
||||
<iosingle ref="extIDs" name="extIDs"/>
|
||||
<iosingle ref="consented"/>
|
||||
<iosingle ref="auditTrail" name="auditTrail"/>
|
||||
<iosingle ref="sureness" name="sureness"/>
|
||||
</input>
|
||||
<output>
|
||||
<iosingle ref="ids" name="ids"/>
|
||||
</output>
|
||||
<step>
|
||||
<name>getIdToken</name>
|
||||
<parameters>
|
||||
<!-- Hier war lokale Pfade URL angegeben, es soll aber eigentlich zentraler KNE aufgerufen werden -->
|
||||
<parameter name="url">¢ralKNEUrl;/paths/getIdToken</parameter>
|
||||
<parameter name="method">POST</parameter>
|
||||
<parameter name="apiKey">¢ralKNEApiKey;</parameter>
|
||||
<parameter name="excludeIdTypes">BK_&site;_L-ID</parameter>
|
||||
<parameter name="excludeIDAT">locallyUniqueId</parameter>
|
||||
</parameters>
|
||||
<input>
|
||||
<iorecord ref="IDAT" name="IDAT"/>
|
||||
<iosingle ref="idTypes" name="idTypes"/>
|
||||
<iosingle ref="auditTrail" name="auditTrail"/>
|
||||
</input>
|
||||
<output>
|
||||
<iosingle ref="tokenId"/>
|
||||
</output>
|
||||
<implementation>de.mainzelliste.paths.processor.PathClient</implementation>
|
||||
</step>
|
||||
<step>
|
||||
<name>getDktkId</name>
|
||||
<parameters>
|
||||
<parameter name="mainzellisteURL">¢ralPatientListUrl;</parameter>
|
||||
<parameter name="mainzellisteApiKey">¢ralPatientListApiKey;</parameter>
|
||||
<parameter name="mainzellisteApiVersion">3.2</parameter>
|
||||
</parameters>
|
||||
<input>
|
||||
<iosingle ref="tokenId"/>
|
||||
<iosingle ref="sureness" name="sureness"/>
|
||||
</input>
|
||||
<output>
|
||||
<iosingle ref="ids" name="ids"/>
|
||||
</output>
|
||||
<implementation>de.mainzelliste.paths.processor.MainzellisteClient</implementation>
|
||||
</step>
|
||||
<step>
|
||||
<name>mapIdStringToExternalId</name>
|
||||
<parameters>
|
||||
<parameter name="map">ids->extIDs</parameter>
|
||||
</parameters>
|
||||
<input>
|
||||
<iosingle ref="ids" name="ids"/>
|
||||
</input>
|
||||
<output>
|
||||
<iosingle ref="extIDs" name="extIDs"/>
|
||||
</output>
|
||||
<implementation>de.mainzelliste.paths.processor.InputMapperProcessor</implementation>
|
||||
</step>
|
||||
<step>
|
||||
<name>getLocalTKTExternalId</name>
|
||||
<parameters>
|
||||
<parameter name="mainzellisteURL">&localPatientListUrl;</parameter>
|
||||
<parameter name="mainzellisteApiKey">&localPatientlistApiKey;</parameter>
|
||||
<parameter name="fieldType">plain</parameter>
|
||||
</parameters>
|
||||
<input>
|
||||
<iorecord ref="IDAT" name="IDAT"/>
|
||||
<iosingle ref="extIDs" name="extIDs"/>
|
||||
<iosingle ref="idTypes" name="idTypes"/>
|
||||
<iosingle ref="auditTrail" name="auditTrail"/>
|
||||
</input>
|
||||
<output>
|
||||
<iosingle ref="tokenId"/>
|
||||
</output>
|
||||
<!-- TODO: Implementation für Ticket Erzeugung ohne Kontrolnummer -->
|
||||
<!-- Wird hier eine neue Klasse benötigt oder kann diese hier entsprechend angepasst werden? -->
|
||||
<implementation>de.mainzelliste.paths.processor.MainzellisteKNTicketClient</implementation>
|
||||
</step>
|
||||
<step>
|
||||
<name>generateLocalIdExternalId</name>
|
||||
<parameters>
|
||||
<parameter name="mainzellisteURL">&localPatientListUrl;</parameter>
|
||||
<parameter name="mainzellisteApiKey">&localPatientlistApiKey;</parameter>
|
||||
<parameter name="mainzellisteApiVersion">3.2</parameter>
|
||||
<parameter name="idType">BK_&site;_L-ID</parameter>
|
||||
</parameters>
|
||||
<input>
|
||||
<iosingle ref="tokenId"/>
|
||||
<iosingle ref="extIDs" name="extIDs"/>
|
||||
<iosingle ref="sureness" name="sureness"/>
|
||||
</input>
|
||||
<output>
|
||||
<iosingle ref="ids" name="ids"/>
|
||||
</output>
|
||||
<implementation>de.mainzelliste.paths.processor.MainzellisteClient</implementation>
|
||||
</step>
|
||||
</multipath>
|
||||
</case>
|
||||
<case value="false">
|
||||
<multipath>
|
||||
<name>getLocalIdWithIDAT</name>
|
||||
<input>
|
||||
<iorecord ref="IDAT" name="IDAT"/>
|
||||
<iosingle ref="idTypes" name="idTypes"/>
|
||||
<iosingle ref="auditTrail" name="auditTrail"/>
|
||||
<iosingle ref="sureness" name="sureness"/>
|
||||
</input>
|
||||
<output>
|
||||
<iosingle ref="ids" name="ids"/>
|
||||
</output>
|
||||
<step>
|
||||
<name>getTKT</name>
|
||||
<parameters>
|
||||
<parameter name="mainzellisteURL">&localPatientListUrl;</parameter>
|
||||
<parameter name="mainzellisteApiKey">&localPatientlistApiKey;</parameter>
|
||||
<parameter name="fieldType">plain</parameter>
|
||||
</parameters>
|
||||
<input>
|
||||
<iorecord ref="IDAT" name="IDAT"/>
|
||||
<iosingle ref="idTypes" name="idTypes"/>
|
||||
<iosingle ref="auditTrail" name="auditTrail"/>
|
||||
</input>
|
||||
<output>
|
||||
<iosingle ref="tokenId"/>
|
||||
</output>
|
||||
<!-- Wird hier eine neue Klasse benötigt oder kann diese hier entsprechend angepasst werden? -->
|
||||
<implementation>de.mainzelliste.paths.processor.MainzellisteKNTicketClient</implementation>
|
||||
</step>
|
||||
<step>
|
||||
<name>generateLocalId</name>
|
||||
<parameters>
|
||||
<parameter name="mainzellisteURL">&localPatientListUrl;</parameter>
|
||||
<parameter name="mainzellisteApiKey">&localPatientlistApiKey;</parameter>
|
||||
<parameter name="mainzellisteApiVersion">3.2</parameter>
|
||||
<parameter name="idType">BK_&site;_L-ID</parameter>
|
||||
</parameters>
|
||||
<input>
|
||||
<iosingle ref="tokenId"/>
|
||||
<iosingle ref="sureness" name="sureness"/>
|
||||
</input>
|
||||
<output>
|
||||
<iosingle ref="ids" name="ids"/>
|
||||
</output>
|
||||
<implementation>de.mainzelliste.paths.processor.MainzellisteClient</implementation>
|
||||
</step>
|
||||
</multipath>
|
||||
</case>
|
||||
</switch>
|
||||
</step>
|
||||
</multipath>
|
||||
<multipath>
|
||||
<name>readPatients</name>
|
||||
<input>
|
||||
<iosingle ref="searchIds" name="searchIds"/>
|
||||
<iosingle ref="resultIds" name="resultIds"/>
|
||||
<iosingle ref="auditTrail" name="auditTrail"/>
|
||||
</input>
|
||||
<output>
|
||||
<iosingle ref="patients" name="patients"/>
|
||||
</output>
|
||||
<step>
|
||||
<name>DecideLocalOrCentralRequest</name>
|
||||
<input>
|
||||
<iosingle ref="searchIds" name="searchIds"/>
|
||||
<iosingle ref="resultIds" name="resultIds"/>
|
||||
<iosingle ref="auditTrail" name="auditTrail"/>
|
||||
</input>
|
||||
<output>
|
||||
<iosingle ref="patients" name="patients"/>
|
||||
</output>
|
||||
<switch>
|
||||
<evaluator name="de.mainzelliste.paths.evaluator.RegexEvaluator">
|
||||
<parameters>
|
||||
<parameter name="regex">MDS_\*_G-ID</parameter>
|
||||
<parameter name="fieldName">resultIds</parameter>
|
||||
</parameters>
|
||||
</evaluator>
|
||||
<case value="true">
|
||||
<multipath>
|
||||
<name>readPatientsCentrally</name>
|
||||
<input>
|
||||
<iosingle ref="searchIds" name="searchIds"/>
|
||||
<iosingle ref="resultIds" name="resultIds"/>
|
||||
<iosingle ref="auditTrail" name="auditTrail"/>
|
||||
</input>
|
||||
<output>
|
||||
<iosingle ref="patients" name="patients"/>
|
||||
</output>
|
||||
<step>
|
||||
<name>createReadTokenCentral</name>
|
||||
<parameters>
|
||||
<parameter name="mainzellisteURL">¢ralPatientListUrl;</parameter>
|
||||
<parameter name="mainzellisteApiKey">¢ralPatientListApiKey;</parameter>
|
||||
<parameter name="ignoredIdTypeCheck">true</parameter>
|
||||
</parameters>
|
||||
<input>
|
||||
<iosingle ref="searchIds" name="searchIds"/>
|
||||
<iosingle ref="resultIds" name="resultIds"/>
|
||||
<iosingle ref="auditTrail" name="auditTrail"/>
|
||||
</input>
|
||||
<output>
|
||||
<iosingle ref="tokenId"/>
|
||||
</output>
|
||||
<implementation>de.mainzelliste.paths.processor.MainzellisteReadTokenClient</implementation>
|
||||
</step>
|
||||
<step>
|
||||
<name>resolveReadTokenCentral</name>
|
||||
<parameters>
|
||||
<parameter name="mainzellisteURL">¢ralPatientListUrl;</parameter>
|
||||
<parameter name="mainzellisteApiKey">¢ralPatientListApiKey;</parameter>
|
||||
</parameters>
|
||||
<input>
|
||||
<iosingle ref="tokenId"/>
|
||||
</input>
|
||||
<output>
|
||||
<iosingle ref="patients"/>
|
||||
</output>
|
||||
<implementation>de.mainzelliste.paths.processor.MainzellisteReadClient</implementation>
|
||||
</step>
|
||||
</multipath>
|
||||
</case>
|
||||
<case value="false">
|
||||
<multipath>
|
||||
<name>readPatientsLocally</name>
|
||||
<input>
|
||||
<iosingle ref="searchIds" name="searchIds"/>
|
||||
<iosingle ref="resultIds" name="resultIds"/>
|
||||
<iosingle ref="auditTrail" name="auditTrail"/>
|
||||
</input>
|
||||
<output>
|
||||
<iosingle ref="patients" name="patients"/>
|
||||
</output>
|
||||
<step>
|
||||
<name>createReadToken</name>
|
||||
<parameters>
|
||||
<parameter name="mainzellisteURL">&localPatientListUrl;</parameter>
|
||||
<parameter name="mainzellisteApiKey">&localPatientlistApiKey;</parameter>
|
||||
<parameter name="ignoredIdTypeCheck">true</parameter>
|
||||
</parameters>
|
||||
<input>
|
||||
<iosingle ref="searchIds" name="searchIds"/>
|
||||
<iosingle ref="resultIds" name="resultIds"/>
|
||||
<iosingle ref="auditTrail" name="auditTrail"/>
|
||||
</input>
|
||||
<output>
|
||||
<iosingle ref="tokenId"/>
|
||||
</output>
|
||||
<implementation>de.mainzelliste.paths.processor.MainzellisteReadTokenClient</implementation>
|
||||
</step>
|
||||
<step>
|
||||
<name>resolveReadToken</name>
|
||||
<parameters>
|
||||
<parameter name="mainzellisteURL">&localPatientListUrl;</parameter>
|
||||
<parameter name="mainzellisteApiKey">&localPatientlistApiKey;</parameter>
|
||||
</parameters>
|
||||
<input>
|
||||
<iosingle ref="tokenId"/>
|
||||
</input>
|
||||
<output>
|
||||
<iosingle ref="patients"/>
|
||||
</output>
|
||||
<implementation>de.mainzelliste.paths.processor.MainzellisteReadClient</implementation>
|
||||
</step>
|
||||
</multipath>
|
||||
</case>
|
||||
</switch>
|
||||
</step>
|
||||
</multipath>
|
||||
</paths>
|
||||
|
||||
<iodefinitions>
|
||||
<iorecord name="IDAT">
|
||||
<iosingle name="Vorname"/>
|
||||
<iosingle name="Nachname"/>
|
||||
<iosingle name="Fruehere_Namen"/>
|
||||
<iosingle name="Geburtstag"/>
|
||||
<iosingle name="Geburtsmonat"/>
|
||||
<iosingle name="Geburtsjahr"/>
|
||||
<iosingle name="Staatsangehoerigkeit"/>
|
||||
<iosingle name="Geschlecht"/>
|
||||
<!-- external id which will be inputed into paths -->
|
||||
<iosingle name="locallyUniqueId"/>
|
||||
</iorecord>
|
||||
<iosingle name="idTypes" type="ArrayList"/>
|
||||
<iosingle name="ids"/>
|
||||
<!-- iosingle for external Ids which will be transferred between two steps -->
|
||||
<iosingle name="extIDs"/>
|
||||
<iosingle name="consented"/>
|
||||
<iosingle name="tokenId"/>
|
||||
<iosingle name="auditTrail"/>
|
||||
<iosingle name="searchIds"/>
|
||||
<iosingle name="resultIds"/>
|
||||
<iosingle name="patients"/>
|
||||
<iosingle name="sureness"/>
|
||||
</iodefinitions>
|
||||
<authentication>
|
||||
<client>
|
||||
<permissions>getId</permissions>
|
||||
<restrictions>
|
||||
<restriction path="getId">
|
||||
<inputRestriction input="idTypes">
|
||||
<permissibleValues>
|
||||
<value>DKTK000001950_&site;_L-ID</value>
|
||||
<value>DKTK000001950_&site;_G-ID</value>
|
||||
</permissibleValues>
|
||||
</inputRestriction>
|
||||
</restriction>
|
||||
</restrictions>
|
||||
<roles>DKTK000001950_USER</roles>
|
||||
</client>
|
||||
<client>
|
||||
<permissions>getId</permissions>
|
||||
<restrictions>
|
||||
<restriction path="getId">
|
||||
<inputRestriction input="idTypes">
|
||||
<permissibleValues>
|
||||
<value>DKTK000001951_&site;_L-ID</value>
|
||||
<value>DKTK000001951_&site;_G-ID</value>
|
||||
</permissibleValues>
|
||||
</inputRestriction>
|
||||
</restriction>
|
||||
</restrictions>
|
||||
<roles>DKTK000001951_USER</roles>
|
||||
</client>
|
||||
<client>
|
||||
<permissions>getId</permissions>
|
||||
<restrictions>
|
||||
<restriction path="getId">
|
||||
<inputRestriction input="idTypes">
|
||||
<permissibleValues>
|
||||
<value>DKTK000001985_&site;_L-ID</value>
|
||||
<value>DKTK000001985_&site;_G-ID</value>
|
||||
</permissibleValues>
|
||||
</inputRestriction>
|
||||
</restriction>
|
||||
</restrictions>
|
||||
<roles>DKTK000001985_USER</roles>
|
||||
</client>
|
||||
<client>
|
||||
<permissions>getId</permissions>
|
||||
<restrictions>
|
||||
<restriction path="getId">
|
||||
<inputRestriction input="idTypes">
|
||||
<permissibleValues>
|
||||
<value>DKTK000001986_&site;_L-ID</value>
|
||||
<value>DKTK000001986_&site;_G-ID</value>
|
||||
</permissibleValues>
|
||||
</inputRestriction>
|
||||
</restriction>
|
||||
</restrictions>
|
||||
<roles>DKTK000001986_USER</roles>
|
||||
</client>
|
||||
<client>
|
||||
<permissions>getId</permissions>
|
||||
<restrictions>
|
||||
<restriction path="getId">
|
||||
<inputRestriction input="idTypes">
|
||||
<permissibleValues>
|
||||
<value>DKTK999999999_&site;_L-ID</value>
|
||||
<value>DKTK999999999_&site;_G-ID</value>
|
||||
</permissibleValues>
|
||||
</inputRestriction>
|
||||
</restriction>
|
||||
</restrictions>
|
||||
<roles>DKTK999999999_USER</roles>
|
||||
</client>
|
||||
<client>
|
||||
<permissions>getId</permissions>
|
||||
<restrictions>
|
||||
<restriction path="getId">
|
||||
<inputRestriction input="idTypes">
|
||||
<permissibleValues>
|
||||
<value>DKTK000002089_&site;_L-ID</value>
|
||||
<value>DKTK000002089_&site;_G-ID</value>
|
||||
</permissibleValues>
|
||||
</inputRestriction>
|
||||
</restriction>
|
||||
</restrictions>
|
||||
<roles>DKTK000002089_USER</roles>
|
||||
</client>
|
||||
<client>
|
||||
<permissions>getId</permissions>
|
||||
<apiKey>&magicplApiKey;</apiKey>
|
||||
</client>
|
||||
<client>
|
||||
<permissions>readPatients</permissions>
|
||||
<apiKey>&magicplApiKeyConnector;</apiKey>
|
||||
</client>
|
||||
</authentication>
|
||||
</pathconfig>
|
227
internal-configuration/mainzelliste.conf
Normal file
227
internal-configuration/mainzelliste.conf
Normal file
@ -0,0 +1,227 @@
|
||||
# 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
|
37
internal-configuration/nginx.conf
Normal file
37
internal-configuration/nginx.conf
Normal file
@ -0,0 +1,37 @@
|
||||
# Konfiguration for the bridgehead
|
||||
server {
|
||||
|
||||
# this is the internal Docker DNS, cache only for 30s
|
||||
resolver 127.0.0.11 valid=30s;
|
||||
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Host $proxy_host;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
|
||||
### Defining the urls like this, will stop nginx from failing on startup if one service isn't started.
|
||||
set $internal_connector_url http://connector:8080;
|
||||
set $internal_idmanager_url http://idmanager:8080;
|
||||
set $internal_patientlist_url http://patientlist:8080;
|
||||
set $internal_ldm_url http://ldm:8080;
|
||||
|
||||
location / {
|
||||
proxy_pass $internal_connector_url;
|
||||
}
|
||||
|
||||
location /ID-Manager/ {
|
||||
proxy_pass $internal_idmanager_url;
|
||||
}
|
||||
|
||||
location /Patientlist/ {
|
||||
proxy_pass $internal_patientlist_url;
|
||||
}
|
||||
|
||||
location /LocalDatamanagement/ {
|
||||
proxy_pass $internal_ldm_url;
|
||||
}
|
||||
}
|
21
internal-configuration/proxy.xml
Normal file
21
internal-configuration/proxy.xml
Normal file
@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns="http://schema.samply.de/common"
|
||||
xsi:schemaLocation="http://schema.samply.de/common http://schema.samply.de/config/Common.Config.xsd ">
|
||||
<Proxy>
|
||||
<HTTP>
|
||||
<Url>HTTP_PROXY_URL</Url>
|
||||
<Username>HTTP_PROXY_USERNAME</Username>
|
||||
<Password>HTTP_PROXY_PASSWORD</Password>
|
||||
</HTTP>
|
||||
<HTTPS>
|
||||
<Url>HTTPS_PROXY_URL</Url>
|
||||
<Username>HTTPS_PROXY_USERNAME</Username>
|
||||
<Password>HTTPS_PROXY_PASSWORD</Password>
|
||||
</HTTPS>
|
||||
<NoProxyHosts>
|
||||
<Host>NO_PROXY_HOSTS</Host>
|
||||
</NoProxyHosts>
|
||||
<Realm/>
|
||||
</Proxy>
|
||||
</Configuration>
|
Reference in New Issue
Block a user