From c5a81d9b9be1ecbf02a2e7302a6f30d610175daa Mon Sep 17 00:00:00 2001 From: Ishrath Ahamed Date: Wed, 23 Apr 2025 15:21:57 +0530 Subject: [PATCH] feat: add multiple new configuration files for various services and components --- .../CSI-CENTRAL-AUTHENTICATION-SERVICE.yaml | 499 +++++++++++++ Config-Server/configrepo/CSI-IE-GENERAL.yml | 48 ++ .../configrepo/CSI-JAVA-BASE-UTILITY.yaml | 7 + .../configrepo/CSI-JAVA-BASE-UTILITY.yml | 3 + .../CSI-JAVA-BB-SERVICE-java-dev.yml | 6 + .../configrepo/CSI-JAVA-BB-SERVICE.yaml | 28 + .../configrepo/CSI-JAVA-BB-SERVICE.yml | 0 .../configrepo/CSI-JAVA-DS-DENTAL-CORE.yml | 17 + .../CSI-JAVA-EHR-COMMON-REPORT-GENERATOR.yml | 6 + .../CSI-JAVA-EHR-COMMON-SCHEDULER.yml | 56 ++ .../configrepo/CSI-JAVA-EHR-COMMON.yml | 82 +++ .../configrepo/CSI-JAVA-EHR-CONFIG.yml | 79 ++ .../configrepo/CSI-JAVA-EHR-IC-BUNDLE.yml | 14 + .../configrepo/CSI-JAVA-EHR-IC-DASHBOARD.yml | 44 ++ .../CSI-JAVA-EHR-INITIALASSESSMENT.yml | 3 + .../CSI-JAVA-EHR-IP-DOCTOR-PRESCRIPTION.yml | 0 Config-Server/configrepo/CSI-JAVA-EHR-IP.yml | 45 ++ Config-Server/configrepo/CSI-JAVA-EHR-LDR.yml | 84 +++ .../configrepo/CSI-JAVA-EHR-LISTENER.yml | 23 + Config-Server/configrepo/CSI-JAVA-EHR-OPD.yml | 52 ++ .../configrepo/CSI-JAVA-EHR-OR-ANESTHESIA.yml | 51 ++ .../configrepo/CSI-JAVA-EHR-OR-BOOK.yml | 48 ++ .../configrepo/CSI-JAVA-EHR-OR-BOOKING.yml | 48 ++ .../configrepo/CSI-JAVA-EHR-PATIENT-POMR.yaml | 14 + .../configrepo/CSI-JAVA-EHR-PATIENT-POMR.yml | 10 + .../CSI-JAVA-EHR-SPECIALIZED-CLINIC.yml | 50 ++ .../configrepo/CSI-JAVA-EHR-TEMPLATE.yml | 18 + .../CSI-JAVA-FAC-PATIENT-SNAPSHOT.yml | 7 + .../configrepo/CSI-NET-BLOODBNK-MGT.yml | 26 + Config-Server/configrepo/CSI-NET-BLOODBNK.yml | 42 ++ .../CSI-NET-BLOODBNK_old17-12-21.yml | 83 +++ Config-Server/configrepo/CSI-NET-DATAPERM.yml | 23 + .../configrepo/CSI-NET-EHR-DBOARDPC.yml | 25 + .../configrepo/CSI-NET-EHR-IP-DISCHARG.yml | 21 + .../configrepo/CSI-NET-EHR-OPD-MASTER.yml | 80 ++ .../configrepo/CSI-NET-EHR-OPD-PATIENT.yml | 22 + .../configrepo/CSI-NET-EMPI-CRS-INTE.yml | 47 ++ .../CSI-NET-EMPI-CRS-INTE.yml_bk20211112 | 41 ++ .../configrepo/CSI-NET-EMPI-HIJRIDTE.yml | 21 + Config-Server/configrepo/CSI-NET-EMPIREAD.yml | 69 ++ .../CSI-NET-EMPIREAD.yml_bk20211112 | 61 ++ .../CSI-NET-EMPIREAD_17122021.yml_old | 68 ++ .../configrepo/CSI-NET-EMPIREAD_old.yml | 68 ++ Config-Server/configrepo/CSI-NET-EMPIWRIT.yml | 82 +++ .../CSI-NET-EMPIWRIT.yml_bk20211112 | 78 ++ .../CSI-NET-EMPIWRIT_17122021.yml_old | 80 ++ .../configrepo/CSI-NET-EMPIWRIT_old.yml | 80 ++ Config-Server/configrepo/CSI-NET-ERFUNCTI.yml | 86 +++ .../configrepo/CSI-NET-HEALTH-CHECK.yml | 24 + Config-Server/configrepo/CSI-NET-HEMDIALY.yml | 146 ++++ Config-Server/configrepo/CSI-NET-HHC.yml | 33 + Config-Server/configrepo/CSI-NET-HIMSERVI.yml | 30 + .../configrepo/CSI-NET-LAB-SCHEDULED.yml | 32 + .../configrepo/CSI-NET-LAB-VIDAPTOR.yml | 26 + .../configrepo/CSI-NET-LABSRVCS-changed.yml | 196 +++++ Config-Server/configrepo/CSI-NET-LABSRVCS.yml | 246 +++++++ Config-Server/configrepo/CSI-NET-MEDISPAN.yml | 44 ++ .../configrepo/CSI-NET-NOTY-EMAIL.yml | 45 ++ .../configrepo/CSI-NET-NOTY-MSGTEMPL.yml | 25 + .../configrepo/CSI-NET-NOTY-QUERY.yml | 59 ++ .../configrepo/CSI-NET-NOTY-QUEUE.yml | 31 + Config-Server/configrepo/CSI-NET-NOTY-SMS.yml | 46 ++ Config-Server/configrepo/CSI-NET-NOTY-WSS.yml | 38 + Config-Server/configrepo/CSI-NET-NOTY.yml | 59 ++ Config-Server/configrepo/CSI-NET-PATIENTS.yml | 48 ++ Config-Server/configrepo/CSI-NET-PHRMI.yml | 26 + .../configrepo/CSI-PHR-BASE-java-hmg-uat.yml | 29 + .../configrepo/CSI-PMS-RMS-MASTERDATA.yaml | 14 + Config-Server/configrepo/api-gateway.yaml | 693 ++++++++++++++++++ .../configrepo/application-java-hmg-uat.yml | 149 ++++ .../configrepo/application-net-hmg-uat.yml | 390 ++++++++++ Config-Server/configrepo/application.yml | 44 ++ Config-Server/configrepo/configfile.zip | Bin 0 -> 117258 bytes Config-Server/configrepo/configzip.zip | Bin 0 -> 58486 bytes Config-Server/configrepo/csi-bm-invoice.yaml | 3 + .../configrepo/csi-phr-base-java-hmg-uat.yml | 29 + Config-Server/configrepo/csi-phr-base.yml | 29 + .../csi-pms-rms-resource-registry.yml | 14 + Config-Server/configrepo/test | 0 79 files changed, 4993 insertions(+) create mode 100755 Config-Server/configrepo/CSI-CENTRAL-AUTHENTICATION-SERVICE.yaml create mode 100644 Config-Server/configrepo/CSI-IE-GENERAL.yml create mode 100644 Config-Server/configrepo/CSI-JAVA-BASE-UTILITY.yaml create mode 100755 Config-Server/configrepo/CSI-JAVA-BASE-UTILITY.yml create mode 100755 Config-Server/configrepo/CSI-JAVA-BB-SERVICE-java-dev.yml create mode 100755 Config-Server/configrepo/CSI-JAVA-BB-SERVICE.yaml create mode 100755 Config-Server/configrepo/CSI-JAVA-BB-SERVICE.yml create mode 100755 Config-Server/configrepo/CSI-JAVA-DS-DENTAL-CORE.yml create mode 100755 Config-Server/configrepo/CSI-JAVA-EHR-COMMON-REPORT-GENERATOR.yml create mode 100755 Config-Server/configrepo/CSI-JAVA-EHR-COMMON-SCHEDULER.yml create mode 100755 Config-Server/configrepo/CSI-JAVA-EHR-COMMON.yml create mode 100755 Config-Server/configrepo/CSI-JAVA-EHR-CONFIG.yml create mode 100755 Config-Server/configrepo/CSI-JAVA-EHR-IC-BUNDLE.yml create mode 100755 Config-Server/configrepo/CSI-JAVA-EHR-IC-DASHBOARD.yml create mode 100755 Config-Server/configrepo/CSI-JAVA-EHR-INITIALASSESSMENT.yml create mode 100755 Config-Server/configrepo/CSI-JAVA-EHR-IP-DOCTOR-PRESCRIPTION.yml create mode 100755 Config-Server/configrepo/CSI-JAVA-EHR-IP.yml create mode 100755 Config-Server/configrepo/CSI-JAVA-EHR-LDR.yml create mode 100755 Config-Server/configrepo/CSI-JAVA-EHR-LISTENER.yml create mode 100755 Config-Server/configrepo/CSI-JAVA-EHR-OPD.yml create mode 100755 Config-Server/configrepo/CSI-JAVA-EHR-OR-ANESTHESIA.yml create mode 100755 Config-Server/configrepo/CSI-JAVA-EHR-OR-BOOK.yml create mode 100755 Config-Server/configrepo/CSI-JAVA-EHR-OR-BOOKING.yml create mode 100755 Config-Server/configrepo/CSI-JAVA-EHR-PATIENT-POMR.yaml create mode 100755 Config-Server/configrepo/CSI-JAVA-EHR-PATIENT-POMR.yml create mode 100755 Config-Server/configrepo/CSI-JAVA-EHR-SPECIALIZED-CLINIC.yml create mode 100755 Config-Server/configrepo/CSI-JAVA-EHR-TEMPLATE.yml create mode 100755 Config-Server/configrepo/CSI-JAVA-FAC-PATIENT-SNAPSHOT.yml create mode 100755 Config-Server/configrepo/CSI-NET-BLOODBNK-MGT.yml create mode 100755 Config-Server/configrepo/CSI-NET-BLOODBNK.yml create mode 100755 Config-Server/configrepo/CSI-NET-BLOODBNK_old17-12-21.yml create mode 100755 Config-Server/configrepo/CSI-NET-DATAPERM.yml create mode 100755 Config-Server/configrepo/CSI-NET-EHR-DBOARDPC.yml create mode 100755 Config-Server/configrepo/CSI-NET-EHR-IP-DISCHARG.yml create mode 100755 Config-Server/configrepo/CSI-NET-EHR-OPD-MASTER.yml create mode 100755 Config-Server/configrepo/CSI-NET-EHR-OPD-PATIENT.yml create mode 100755 Config-Server/configrepo/CSI-NET-EMPI-CRS-INTE.yml create mode 100755 Config-Server/configrepo/CSI-NET-EMPI-CRS-INTE.yml_bk20211112 create mode 100755 Config-Server/configrepo/CSI-NET-EMPI-HIJRIDTE.yml create mode 100755 Config-Server/configrepo/CSI-NET-EMPIREAD.yml create mode 100755 Config-Server/configrepo/CSI-NET-EMPIREAD.yml_bk20211112 create mode 100755 Config-Server/configrepo/CSI-NET-EMPIREAD_17122021.yml_old create mode 100755 Config-Server/configrepo/CSI-NET-EMPIREAD_old.yml create mode 100755 Config-Server/configrepo/CSI-NET-EMPIWRIT.yml create mode 100755 Config-Server/configrepo/CSI-NET-EMPIWRIT.yml_bk20211112 create mode 100755 Config-Server/configrepo/CSI-NET-EMPIWRIT_17122021.yml_old create mode 100755 Config-Server/configrepo/CSI-NET-EMPIWRIT_old.yml create mode 100755 Config-Server/configrepo/CSI-NET-ERFUNCTI.yml create mode 100755 Config-Server/configrepo/CSI-NET-HEALTH-CHECK.yml create mode 100755 Config-Server/configrepo/CSI-NET-HEMDIALY.yml create mode 100644 Config-Server/configrepo/CSI-NET-HHC.yml create mode 100755 Config-Server/configrepo/CSI-NET-HIMSERVI.yml create mode 100755 Config-Server/configrepo/CSI-NET-LAB-SCHEDULED.yml create mode 100755 Config-Server/configrepo/CSI-NET-LAB-VIDAPTOR.yml create mode 100755 Config-Server/configrepo/CSI-NET-LABSRVCS-changed.yml create mode 100755 Config-Server/configrepo/CSI-NET-LABSRVCS.yml create mode 100755 Config-Server/configrepo/CSI-NET-MEDISPAN.yml create mode 100755 Config-Server/configrepo/CSI-NET-NOTY-EMAIL.yml create mode 100755 Config-Server/configrepo/CSI-NET-NOTY-MSGTEMPL.yml create mode 100755 Config-Server/configrepo/CSI-NET-NOTY-QUERY.yml create mode 100755 Config-Server/configrepo/CSI-NET-NOTY-QUEUE.yml create mode 100755 Config-Server/configrepo/CSI-NET-NOTY-SMS.yml create mode 100755 Config-Server/configrepo/CSI-NET-NOTY-WSS.yml create mode 100755 Config-Server/configrepo/CSI-NET-NOTY.yml create mode 100755 Config-Server/configrepo/CSI-NET-PATIENTS.yml create mode 100755 Config-Server/configrepo/CSI-NET-PHRMI.yml create mode 100755 Config-Server/configrepo/CSI-PHR-BASE-java-hmg-uat.yml create mode 100755 Config-Server/configrepo/CSI-PMS-RMS-MASTERDATA.yaml create mode 100644 Config-Server/configrepo/api-gateway.yaml create mode 100755 Config-Server/configrepo/application-java-hmg-uat.yml create mode 100755 Config-Server/configrepo/application-net-hmg-uat.yml create mode 100755 Config-Server/configrepo/application.yml create mode 100644 Config-Server/configrepo/configfile.zip create mode 100755 Config-Server/configrepo/configzip.zip create mode 100755 Config-Server/configrepo/csi-bm-invoice.yaml create mode 100755 Config-Server/configrepo/csi-phr-base-java-hmg-uat.yml create mode 100755 Config-Server/configrepo/csi-phr-base.yml create mode 100755 Config-Server/configrepo/csi-pms-rms-resource-registry.yml create mode 100755 Config-Server/configrepo/test diff --git a/Config-Server/configrepo/CSI-CENTRAL-AUTHENTICATION-SERVICE.yaml b/Config-Server/configrepo/CSI-CENTRAL-AUTHENTICATION-SERVICE.yaml new file mode 100755 index 0000000..25a7060 --- /dev/null +++ b/Config-Server/configrepo/CSI-CENTRAL-AUTHENTICATION-SERVICE.yaml @@ -0,0 +1,499 @@ +spring: + application: + name: CSI-CENTRAL-AUTHENTICATION-SERVICE + datasource: + tomcat: + min-evictable-idle-time-millis: 200000 + max-active: 40 + max-idle: 2 + min-idle: 1 + max-age: 200000 + http: + multipart: + max-file-size: 200MB + max-request-size: 200MB +eureka: + client: + serviceUrl: + defaultZone: 'http://localhost:8761/eureka/' + fetch-registry: false + register-with-eureka: false +hystrix: + shareSecurityContex: true + command: + default: + circuitBreaker: + enabled: true + execution: + isolation: + thread: + timeoutInMilliseconds: 300000 + fallback: + enabled: true + threadpool: + default: + coreSize: 10 + maximumSize: 100 + allowMaximumSizeToDivergeFromCoreSize: true +ribbon: + ConnectTimeout: 60000 + MaxAutoRetries: 1 + MaxAutoRetriesNextServer: 1 + ReadTimeout: 240000 +opentracing: + jaeger: + http-sender: + url: 'http://jaeger-collector:14268/api/traces' + enable-b3-propagation: true +csi: + env: + prefix: net-hmg-uat + access-token-verification: + enabled: true +debug: false +zuul: + #host: + # connect-timeout-millis: 60000 + # socket-timeout-millis: 480000 + ignore-security-headers: false + ignored-headers: >- + X-Content-Type-Options,Strict-Transport-Security,X-Frame-Options,X-XSS-Protection + routes: + ui: + path: /** + sensitiveHeaders: null + url: '${ui.hostname}' + report: + path: /reporting-service/** + sensitiveHeaders: null + url: 'http://reporting-service' + iam: + path: /iam/** + sensitiveHeaders: null + url: 'http://csi-iam-service' + document: + path: /document-management/** + sensitiveHeaders: null + url: 'http://document-management-services' + document-engine: + path: /document-engine/** + sensitiveHeaders: null + url: 'http://document-storage-engine-service' + medispan: + path: /csi-net-medispan/** + sensitiveHeaders: null + url: 'http://csi-net-medispan' + appointment-channel: + path: /cas-appointment-channel/** + sensitiveHeaders: null + url: 'http://cas-appointment-channel' + crs-channel: + path: /crs-channel/** + sensitiveHeaders: null + url: 'http://crs-channel' + sick-leave-create: + path: /sick-leave-create/** + sensitiveHeaders: null + url: 'http://sick-leave-create' + doctor-verify: + path: /sick-leave-doctor-verify/** + sensitiveHeaders: null + url: 'http://sick-leave-doctor-verify' + reporting-publisher: + path: /reporting-publisher/** + sensitiveHeaders: null + url: 'http://csi-reporting-publisher' + config-repo: + path: /config-server/** + url: 'http://config-server' + econsent: + path: /cs-net-econsent/** + sensitiveHeaders: null + url: 'http://cs-net-econsent' + econsentui: + path: /cs-net-econsentui/** + sensitiveHeaders: null + url: 'http://cs-net-econsentui' + middleware: + path: /document-management-middleware/** + sensitiveHeaders: null + url: 'http://csi-document-management-service' #'http://document-management-middleware' + csi-ie-hpd: + path: /csi-ie-hpd/** + sensitiveHeaders: null + url: 'http://csi-ie-hpd' + cs-net-physiotherapy: + path: /cs-net-physiotherapy/** + sensitiveHeaders: null + url: 'http://cs-net-physiotherapy' + cs-net-physiotherapy-ui: + path: /cs-net-physiotherapyui/** + sensitiveHeaders: null + url: 'http://cs-net-physiotherapyui' + cs-net-social-worker-ui: + path: /cs-net-social-worker-ui/** + url: 'http://cs-net-social-worker-ui' + sensitiveHeaders: null + cs-net-social-worker: + path: /cs-net-social-worker/** + url: 'http://cs-net-social-worker' + sensitiveHeaders: null + csi-reporting: + path: /csi-reporting-service/** + url: 'http://csi-reporting-service/' + sensitiveHeaders: null + csi-ie-pdq: + path: /csi-ie-pdq/** + sensitiveHeaders: null + url: 'http://csi-ie-pdq' + csi-ie-employee: + path: /csi-ie-employee/** + sensitiveHeaders: null + url: 'http://csi-ie-employee' + csi-ie-xdsb: + path: /csi-ie-xdsb/** + sensitiveHeaders: null + url: 'http://csi-ie-xdsb' + csi-streaming-etl-service: + path: /csi-streaming-etl-service/** + sensitiveHeaders: null + url: 'http://csi-streaming-etl-service' + csi-rf-file-uploader-service: + path: /rf/** + sensitiveHeaders: null + url: 'http://csi-rf-file-uploader-service' + medical-report-channel: + path: /medical-report-channel/** + sensitiveHeaders: null + url: 'http://medical-report-channel' + service-base-ui-registry: + path: /service-base-ui-registry/** + url: 'http://service-base-ui-registry' + csi-ie-lakum: + path: /csi-ie-lakum/** + sensitiveHeaders: null + url: 'http://csi-ie-lakum' + csi-ie-interbranch: + path: /csi-ie-interbranch/** + sensitiveHeaders: null + url: 'http://csi-ie-interbranch' + csi-ie-prescription: + path: /csi-ie-prescription/** + sensitiveHeaders: null + url: 'http://csi-ie-prescription' + crs-channel-user: + path: /crs-channel-user/** + sensitiveHeaders: null + url: 'http://crs-channel-user' + cs-net-econsent: + path: /cs-net-econsent/** + sensitiveHeaders: null + url: 'http://cs-net-econsent' + csi-bm-approval: + path: /csi-bm-approval/** + sensitiveHeaders: null + url: 'http://csi-bm-approval' + csi-bm-prm: + path: /csi-bm-prm/** + sensitiveHeaders: null + url: 'http://csi-bm-prm' + csi-bm-billing: + path: /csi-bm-billing/** + sensitiveHeaders: null + url: 'http://csi-bm-billing' + csi-bm-inte-bridge: + path: /csi-bm-inte-bridge/** + sensitiveHeaders: null + url: 'http://csi-bm-inte-bridge' + csi-bm-invoice: + path: /csi-bm-invoice/** + sensitiveHeaders: null + url: 'http://csi-bm-invoice' + csi-ie-api: + path: /csi-ie-api/** + sensitiveHeaders: null + url: 'http://csi-ie-api' + csi-ie-cyclus: + path: /csi-ie-cyclus/** + sensitiveHeaders: null + url: 'http://csi-ie-cyclus' + csi-ie-doctor-api: + path: /csi-ie-doctor-api/** + sensitiveHeaders: null + url: 'http://csi-ie-doctor-api' + csi-ie-dq: + path: /csi-ie-dq/** + sensitiveHeaders: null + url: 'http://csi-ie-dq' + csi-ie-general: + path: /csi-ie-general/** + sensitiveHeaders: null + url: 'http://csi-ie-general' + csi-ie-generalii: + path: /csi-ie-generalii/** + sensitiveHeaders: null + url: 'http://csi-ie-generalii' + csi-ie-insurance: + path: /csi-ie-insurance/** + sensitiveHeaders: null + url: 'http://csi-ie-insurance' + csi-ie-lakum-batch: + path: /csi-ie-lakum-batch/** + sensitiveHeaders: null + url: 'http://csi-ie-lakum-batch' + csi-ie-misc: + path: /csi-ie-misc/** + sensitiveHeaders: null + url: 'http://csi-ie-misc' + csi-ie-mobile: + path: /csi-ie-mobile/** + sensitiveHeaders: null + url: 'http://csi-ie-mobile' + csi-ie-pacsurl: + path: /csi-ie-pacsurl/** + sensitiveHeaders: null + url: 'http://csi-ie-pacsurl' + csi-ie-zatca: + path: /csi-ie-zatca/** + sensitiveHeaders: null + url: 'http://csi-ie-zatca' + csi-java-base-utility: + path: /csi-java-base-utility/** + sensitiveHeaders: null + url: 'http://csi-java-base-utility' + csi-java-ds-dental-core: + path: /csi-java-ds-dental-core/** + sensitiveHeaders: null + url: 'http://csi-java-ds-dental-core' + csi-java-ehr-common: + path: /csi-java-ehr-common/** + sensitiveHeaders: null + url: 'http://csi-java-ehr-common' + csi-java-ehr-common-scheduler: + path: /csi-java-ehr-common-scheduler/** + sensitiveHeaders: null + url: 'http://csi-java-ehr-common-scheduler' + csi-java-ehr-config: + path: /csi-java-ehr-config/** + sensitiveHeaders: null + url: 'http://csi-java-ehr-config' + csi-java-ehr-ic-bundle: + path: /csi-java-ehr-ic-bundle/** + sensitiveHeaders: null + url: 'http://csi-java-ehr-ic-bundle' + csi-java-ehr-ic-dashboard: + path: /csi-java-ehr-ic-dashboard/** + sensitiveHeaders: null + url: 'http://csi-java-ehr-ic-dashboard' + csi-java-ehr-initialassessment: + path: /csi-java-ehr-initialassessment/** + sensitiveHeaders: null + url: 'http://csi-java-ehr-initialassessment' + csi-java-ehr-ip: + path: /csi-java-ehr-ip/** + sensitiveHeaders: null + url: 'http://csi-java-ehr-ip' + csi-java-ehr-ip-doctor-prescription: + path: /csi-java-ehr-ip-doctor-prescription/** + sensitiveHeaders: null + url: 'http://csi-java-ehr-ip-doctor-prescription' + csi-java-ehr-ldr: + path: /csi-java-ehr-ldr/** + sensitiveHeaders: null + url: 'http://csi-java-ehr-ldr' + csi-java-ehr-listener: + path: /csi-java-ehr-listener/** + sensitiveHeaders: null + url: 'http://csi-java-ehr-listener' + csi-java-ehr-opd: + path: /csi-java-ehr-opd/** + sensitiveHeaders: null + url: 'http://csi-java-ehr-opd' + csi-java-ehr-or-anesthesia: + path: /csi-java-ehr-or-anesthesia/** + sensitiveHeaders: null + url: 'http://csi-java-ehr-or-anesthesia' + csi-java-ehr-or-book: + path: /csi-java-ehr-or-book/** + sensitiveHeaders: null + url: 'http://csi-java-ehr-or-book' + csi-java-ehr-or-booking: + path: /csi-java-ehr-or-booking/** + sensitiveHeaders: null + url: 'http://csi-java-ehr-or-booking' + csi-java-ehr-patient-pomr: + path: /csi-java-ehr-patient-pomr/** + sensitiveHeaders: null + url: 'http://csi-java-ehr-patient-pomr' + csi-java-ehr-specializedclinic: + path: /csi-java-ehr-specializedclinic/** + sensitiveHeaders: null + url: 'http://csi-java-ehr-specializedclinic' + csi-java-ehr-specialized-clinic: + path: /csi-java-ehr-specialized-clinic/** + sensitiveHeaders: null + url: 'http://csi-java-ehr-specializedclinic' + csi-java-ehr-template: + path: /csi-java-ehr-template/** + sensitiveHeaders: null + url: 'http://csi-java-ehr-template' + csi-java-workflow-automation: + path: /csi-java-workflow-automation/** + sensitiveHeaders: null + url: 'http://csi-java-workflow-automation' + csi-net-base-wss: + path: /csi-net-base-wss/** + sensitiveHeaders: null + url: 'http://csi-net-base-wss' + csi-net-bloodbnk: + path: /csi-net-bloodbnk/** + sensitiveHeaders: null + url: 'http://csi-net-bloodbnk' + csi-net-bloodbnk-mgt: + path: /csi-net-bloodbnk-mgt/** + sensitiveHeaders: null + url: 'http://csi-net-bloodbnk-mgt' + csi-net-ehr-dboardpc: + path: /csi-net-ehr-dboardpc/** + sensitiveHeaders: null + url: 'http://csi-net-ehr-dboardpc' + csi-net-ehr-ip-discharg: + path: /csi-net-ehr-ip-discharg/** + sensitiveHeaders: null + url: 'http://csi-net-ehr-ip-discharg' + csi-net-ehr-opd-master: + path: /csi-net-ehr-opd-master/** + sensitiveHeaders: null + url: 'http://csi-net-ehr-opd-master' + csi-net-ehr-opd-patient: + path: /csi-net-ehr-opd-patient/** + sensitiveHeaders: null + url: 'http://csi-net-ehr-opd-patient' + csi-net-empi-crs-inte: + path: /csi-net-empi-crs-inte/** + sensitiveHeaders: null + url: 'http://csi-net-empi-crs-inte' + csi-net-empi-hijridte: + path: /csi-net-empi-hijridte/** + sensitiveHeaders: null + url: 'http://csi-net-empi-hijridte' + csi-net-empiread: + path: /csi-net-empiread/** + sensitiveHeaders: null + url: 'http://csi-net-empiread' + csi-net-empiwrit: + path: /csi-net-empiwrit/** + sensitiveHeaders: null + url: 'http://csi-net-empiwrit' + csi-net-erfuncti: + path: /csi-net-erfuncti/** + sensitiveHeaders: null + url: 'http://csi-net-erfuncti' + csi-net-hemdialy: + path: /csi-net-hemdialy/** + sensitiveHeaders: null + url: 'http://csi-net-hemdialy' + csi-net-himservi: + path: /csi-net-himservi/** + sensitiveHeaders: null + url: 'http://csi-net-himservi' + csi-net-lab-scheduled: + path: /csi-net-lab-scheduled/** + sensitiveHeaders: null + url: 'http://csi-net-lab-scheduled' + csi-net-lab-vidaptor: + path: /csi-net-lab-vidaptor/** + sensitiveHeaders: null + url: 'http://csi-net-lab-vidaptor' + csi-net-labsrvcs: + path: /csi-net-labsrvcs/** + sensitiveHeaders: null + url: 'http://csi-net-labsrvcs' + csi-net-medispan: + path: /csi-net-medispan/** + sensitiveHeaders: null + url: 'http://csi-net-medispan' + csi-net-noty: + path: /csi-net-noty/** + sensitiveHeaders: null + url: 'http://csi-net-noty' + csi-net-noty-email: + path: /csi-net-noty-email/** + sensitiveHeaders: null + url: 'http://csi-net-noty-email' + csi-net-noty-msgtempl: + path: /csi-net-noty-msgtempl/** + sensitiveHeaders: null + url: 'http://csi-net-noty-msgtempl' + csi-net-noty-query: + path: /csi-net-noty-query/** + sensitiveHeaders: null + url: 'http://csi-net-noty-query' + csi-net-noty-sms: + path: /csi-net-noty-sms/** + sensitiveHeaders: null + url: 'http://csi-net-noty-sms' + csi-personalization-service: + path: /csi-personalization-service/** + sensitiveHeaders: null + url: 'http://csi-personalization-service' + csi-phr-base: + path: /csi-phr-base/** + sensitiveHeaders: null + url: 'http://csi-phr-base' + csi-phr-cron: + path: /csi-phr-cron/** + sensitiveHeaders: null + url: 'http://csi-phr-cron' + csi-pms-adt-request: + path: /csi-pms-adt-request/** + sensitiveHeaders: null + url: 'http://csi-pms-adt-request' + csi-pms-rms-masterdata: + path: /csi-pms-rms-masterdata/** + sensitiveHeaders: null + url: 'http://csi-pms-rms-masterdata' + csi-pms-rms-reservation: + path: /csi-pms-rms-reservation/** + sensitiveHeaders: null + url: 'http://csi-pms-rms-reservation' + csi-pms-rms-resource-registry: + path: /csi-pms-rms-resource-registry/** + sensitiveHeaders: null + url: 'http://csi-pms-rms-resource-registry' + csi-reporting-service: + path: /csi-reporting-service/** + sensitiveHeaders: null + url: 'http://csi-reporting-service' + csi-rf-jdbc-sink-service: + path: /csi-rf-jdbc-sink-service/** + sensitiveHeaders: null + url: 'http://csi-rf-jdbc-sink-service' + csi-rms-morgue: + path: /csi-rms-morgue/** + sensitiveHeaders: null + url: 'http://csi-rms-morgue' + document-management-middleware: + path: /document-management-middleware/** + sensitiveHeaders: null + url: 'http://csi-document-management-service' #'http://document-management-middleware' + service-base-masterdata: + path: /service-base-masterdata/** + sensitiveHeaders: null + url: 'http://service-base-masterdata' + service-base-role-permission: + path: /service-base-role-permission/** + sensitiveHeaders: null + url: 'http://service-base-role-permission' + sick-leave-doctor-verify: + path: /sick-leave-doctor-verify/** + sensitiveHeaders: null + url: 'http://sick-leave-doctor-verify' + wasfaty-service-channel: + path: /wasfaty-service-channel/** + sensitiveHeaders: null + url: 'http://wasfaty-service-channel' + csi-otp-service: + path: /csi-otp-service/** + sensitiveHeaders: null + url: 'http://csi-otp-service' diff --git a/Config-Server/configrepo/CSI-IE-GENERAL.yml b/Config-Server/configrepo/CSI-IE-GENERAL.yml new file mode 100644 index 0000000..61f4f53 --- /dev/null +++ b/Config-Server/configrepo/CSI-IE-GENERAL.yml @@ -0,0 +1,48 @@ +kafka: + enable: + metrics-listener: false + endorsement-listener: false + diet-listener: false + lab-result-listener: false + claim-receiver: true + emp-receiver: true + payer-policy-receiver: true + payer-group-receiver: true + appointment: false + admission-notify: true + asn: false + mdi-appointment: true + mdi-bb-order: false + mdi-bb-result: false + mdi-employee-update: true + mdi-discharge: true + billing-invoice: true + mdi-endoscopy-status-update: false + mdi-image-profile: true + mdi-masterdata-sync: true + mdi-staff-registry: true + mdi-medi-dispense: false + ie-billing-payer-group: true + ie-billing-payer-policy: true + mdi-invoice-status: true + rcm-employee-register: true + mdi-admission-update: true + mdi-empi-field-update-event: true + mdi-empi-merged-event: true + mdi-empi-edited-event: true + ris-admission: true + ris-admission-update: true + ris-appointment: true + cardiology-order: true + ris-discharge: true + rad-other-orders-results: true + rad-order: true + ris-staff-registry: true + ris-transfer: true + ris-empi-created-event: true + ris-empi-field-update-event: true + ris-empi-merged-event: true + ris-empi-edited-event: true + ris-empi-unknown-bluk-created-event: true + ris-empi-unknown-created-event: true + diff --git a/Config-Server/configrepo/CSI-JAVA-BASE-UTILITY.yaml b/Config-Server/configrepo/CSI-JAVA-BASE-UTILITY.yaml new file mode 100644 index 0000000..01044a6 --- /dev/null +++ b/Config-Server/configrepo/CSI-JAVA-BASE-UTILITY.yaml @@ -0,0 +1,7 @@ +management: + health: + redis: + enabled: false + endpoint: + health: + show-details: always diff --git a/Config-Server/configrepo/CSI-JAVA-BASE-UTILITY.yml b/Config-Server/configrepo/CSI-JAVA-BASE-UTILITY.yml new file mode 100755 index 0000000..af7d16c --- /dev/null +++ b/Config-Server/configrepo/CSI-JAVA-BASE-UTILITY.yml @@ -0,0 +1,3 @@ +feign: + hystrix: + enabled: true diff --git a/Config-Server/configrepo/CSI-JAVA-BB-SERVICE-java-dev.yml b/Config-Server/configrepo/CSI-JAVA-BB-SERVICE-java-dev.yml new file mode 100755 index 0000000..dbb8ac5 --- /dev/null +++ b/Config-Server/configrepo/CSI-JAVA-BB-SERVICE-java-dev.yml @@ -0,0 +1,6 @@ +spring: + rabbitmq: + host: 172.15.100.144 + port: 5672 + username: admin + password: admin \ No newline at end of file diff --git a/Config-Server/configrepo/CSI-JAVA-BB-SERVICE.yaml b/Config-Server/configrepo/CSI-JAVA-BB-SERVICE.yaml new file mode 100755 index 0000000..b1bc4c7 --- /dev/null +++ b/Config-Server/configrepo/CSI-JAVA-BB-SERVICE.yaml @@ -0,0 +1,28 @@ +spring: + datasource: + tomcat: + min-evictable-idle-time-millis: 200000 + max-active: 30 + max-idle: 2 + min-idle: 1 + max-age: 200000 + hikari: + minimum-idle: 2 + maximum-pool-size: 20 + connection-timeout: 15000 + idle-timeout: 10000 + max-lifetime: 40000 + data-source-properties: + oracle: + net: + CONNECT_TIMEOUT: 120000 + READ_TIMEOUT: 120000 + jdbc: + ReadTimeout: 120000 + jpa: + properties: + javax: + persistence: + query: + timeout: 120000 + diff --git a/Config-Server/configrepo/CSI-JAVA-BB-SERVICE.yml b/Config-Server/configrepo/CSI-JAVA-BB-SERVICE.yml new file mode 100755 index 0000000..e69de29 diff --git a/Config-Server/configrepo/CSI-JAVA-DS-DENTAL-CORE.yml b/Config-Server/configrepo/CSI-JAVA-DS-DENTAL-CORE.yml new file mode 100755 index 0000000..911ee7c --- /dev/null +++ b/Config-Server/configrepo/CSI-JAVA-DS-DENTAL-CORE.yml @@ -0,0 +1,17 @@ +server: + context-path: /dental + port: 0 + +spring: + datasource: + url: jdbc:postgresql://172.15.100.88:5432/CSI-JAVA-DS-DENTAL-CORE + username: postgres + password: csi@2017 + jackson: + default-property-inclusion: NON_NULL + date-format: yyyy-MM-dd + jpa: + database: POSTGRESQL + hibernate: + ddl-auto: none + dialect: org.hibernate.dialect.PostgreSQLDialect \ No newline at end of file diff --git a/Config-Server/configrepo/CSI-JAVA-EHR-COMMON-REPORT-GENERATOR.yml b/Config-Server/configrepo/CSI-JAVA-EHR-COMMON-REPORT-GENERATOR.yml new file mode 100755 index 0000000..8975af7 --- /dev/null +++ b/Config-Server/configrepo/CSI-JAVA-EHR-COMMON-REPORT-GENERATOR.yml @@ -0,0 +1,6 @@ +spring: + application: + name: CSI-JAVA-EHR-COMMON-REPORT-GENERATOR +feign: + hystrix: + enabled: true diff --git a/Config-Server/configrepo/CSI-JAVA-EHR-COMMON-SCHEDULER.yml b/Config-Server/configrepo/CSI-JAVA-EHR-COMMON-SCHEDULER.yml new file mode 100755 index 0000000..6562092 --- /dev/null +++ b/Config-Server/configrepo/CSI-JAVA-EHR-COMMON-SCHEDULER.yml @@ -0,0 +1,56 @@ +--- +app: + url: + path: /api/Task/InActiveDefineDisaster + service-name: CSI-NET-ERFUNCTI +etl-prop: + etl-run-period: "0 0 0 * * *" + etl-runing-time-zone: UTC +feign: + hystrix: + enabled: true +spring: + application: + name: CSI-JAVA-EHR-COMMON-SCHEDULER + second-datasource: + auto-commit: false + autocommit: false + hikari: + auto-commit: false + connection: + auto-commit: false + connection-timeout: 10000 + maximum-pool-size: 10 + minimum-idle: 2 + datasource: + auto-commit: false + autocommit: false + hikari: + auto-commit: false + connection: + auto-commit: false + connection-timeout: 10000 + maximum-pool-size: 50 + minimum-idle: 2 +master: + datasource: + liquibase: + enabled: false + change-log: classpath:db/changelog/ip/db.changelog.xml + configuration: + auto-commit: false + connection-timeout: 10000 + maximum-pool-size: 5 + minimum-idle: 2 + pool-name: Master-DB +slave: + datasource: + liquibase: + enabled: false + change-log: classpath:db/changelog/common/db.changelog.xml + configuration: + auto-commit: false + connection-timeout: 10000 + maximum-pool-size: 5 + minimum-idle: 2 + pool-name: Slave-DB diff --git a/Config-Server/configrepo/CSI-JAVA-EHR-COMMON.yml b/Config-Server/configrepo/CSI-JAVA-EHR-COMMON.yml new file mode 100755 index 0000000..5989865 --- /dev/null +++ b/Config-Server/configrepo/CSI-JAVA-EHR-COMMON.yml @@ -0,0 +1,82 @@ +spring: + application: + name: CSI-JAVA-EHR-COMMON + datasource: + tomcat: + min-evictable-idle-time-millis: 200000 + max-active: 50 + max-idle: 2 + min-idle: 1 + max-age: 200000 + hikari: + minimum-idle: 2 + maximum-pool-size: 50 + connection-timeout: 15000 + idle-timeout: 10000 + max-lifetime: 40000 +hibernate: + dialect: org.hibernate.dialect.PostgreSQLDialect +postgresql: + driver: org.postgresql.Driver +db: + configuration: postgresql + group-id: + medical-rejected: medical-rejected + medical-issued: medical-issued + medical-approved: medical-approved + topic: + medical-leave-rejected: medical-leave-rejected + medical-leave-issued: medical-leave-issued + medical-leave-approved: medical-leave-approved +app: + url.pomrRead: CSI-JAVA-EHR-PATIENT-POMR + url.medication: CSI-JAVA-EHR-IP-DOCTOR-PRESCRIPTION + url.pomr: CSI-JAVA-EHR-PATIENT-POMR + url.procedure: CSI-JAVA-EHR-OPD-PATIENT-ORDER + url.patientProblem: CSI-JAVA-EHR-PATIENT-POMR + url.problem: CSI-NET-EHR-OPD-MASTER + url.reservation: CSI-PMS-RMS-RESERVATION + url.patientVisitDetail: CSI-JAVA-EHR-OPD-PATIENT-ORDER + url.lab: CSI-NET-LABREQST + url.doctor: CSI-PMS-RMS-RESOURCE-REGISTRY + url.clinic: CSI-PMS-RMS-MASTERDATA + url.patient: CSI-NET-EMPI + url.problemMaster: CSI-NET-EHRPROBM + url.empi: CSI-NET-EMPIREAD + category.consultattion.id: 1 + category.consultattion.value: CONSULTATION + category.laboratory.id: 2 + category.laboratory.value: LABORATORY + category.radiology.id: 3 + category.radiology.value: RADIOLOGY + category.dental.id: 4 + category.dental.value: OTHER SERVICES + category.procedure.id: 5 + category.procedure.value: PROCEDURES + category.inpatientservice.id: 6 + category.inpatientservice.value: SURGERY PROCEDURES + category.vaccination.id: 10 + category.vaccination.value: VACCINATION + amqp: + exchange: csi-ehr-icd-exchange + routingkey: patient-problem +debug: true +csi: + persistence: + audit: true + kafka: + bootstrapAddress: 10.201.216.25:9092,10.201.216.26:9093,10.201.216.27:9094 + topic: csi_audit + dateformat: + format: yyyy-MM-dd HH:mm:ss + jpa: + event: + isReport: true +etl-prop: + pomr-auto-sing-days: 7 + episode-auto-sing-days: 90 + etl-run-period: '0 0 0 * * *' + etl-runing-minutes: 1410 + problem-resolved-period-days: 7 + etl-runing-time-zone: 'UTC' + recurring-etl-run-period: '0 */30 * * * *' diff --git a/Config-Server/configrepo/CSI-JAVA-EHR-CONFIG.yml b/Config-Server/configrepo/CSI-JAVA-EHR-CONFIG.yml new file mode 100755 index 0000000..fce8ff3 --- /dev/null +++ b/Config-Server/configrepo/CSI-JAVA-EHR-CONFIG.yml @@ -0,0 +1,79 @@ +spring: + application: + name: CSI-JAVA-EHR-CONFIG + liquibase: + enabled: false + jpa: + open-in-view: false + properties: + hibernate: + enable_lazy_load_no_trans: true + connection: + provider_disables_autocommit: true + second-datasource: + auto-commit: false + autocommit: false + hikari: + auto-commit: false + connection: + auto-commit: false + connection-timeout: 10000 + maximum-pool-size: 10 + minimum-idle: 2 + datasource: + auto-commit: false + autocommit: false + hikari: + auto-commit: false + connection: + auto-commit: false + connection-timeout: 10000 + maximum-pool-size: 50 + minimum-idle: 2 +hibernate: + dialect: org.hibernate.dialect.PostgreSQLDialect +postgresql: + driver: org.postgresql.Driver +db: + configuration: postgresql +csi: + persistence: + autogen-id: true + autogen: + sequence: hibernate_sequence + dateformat: + format: yyyy/MM/dd HH:mm:ss +kafka: + bootstrap-servers: 10.201.216.25:9092,10.201.216.26:9093,10.201.216.27:9094 + group-id: + medical-rejected: medical-rejected + medical-issued: medical-issued + medical-approved: medical-approved + topic: + medical-leave-rejected: medical-leave-rejected + medical-leave-issued: medical-leave-issued + medical-leave-approved: medical-leave-approved +table: + column-definition: TEXT +master: + datasource: + liquibase: + enabled: false + change-log: classpath:db/changelog/db.changelog-master.xml + configuration: + auto-commit: false + connection-timeout: 10000 + maximum-pool-size: 5 + minimum-idle: 2 + pool-name: Master-DB +slave: + datasource: + liquibase: + enabled: false + change-log: classpath:db/changelog/db.changelog-master.xml + configuration: + auto-commit: false + connection-timeout: 10000 + maximum-pool-size: 5 + minimum-idle: 2 + pool-name: Slave-DB diff --git a/Config-Server/configrepo/CSI-JAVA-EHR-IC-BUNDLE.yml b/Config-Server/configrepo/CSI-JAVA-EHR-IC-BUNDLE.yml new file mode 100755 index 0000000..f960162 --- /dev/null +++ b/Config-Server/configrepo/CSI-JAVA-EHR-IC-BUNDLE.yml @@ -0,0 +1,14 @@ +spring: + application: + name: CSI-JAVA-EHR-IC-BUNDLE +db: + jpa: + hibernate: + ddl-auto: none +server: + context-path: /ic +websocket: + endpoint: /ic-bundle + prefix: /ic +csi: + timezone: Asia/Colombo diff --git a/Config-Server/configrepo/CSI-JAVA-EHR-IC-DASHBOARD.yml b/Config-Server/configrepo/CSI-JAVA-EHR-IC-DASHBOARD.yml new file mode 100755 index 0000000..ffca37f --- /dev/null +++ b/Config-Server/configrepo/CSI-JAVA-EHR-IC-DASHBOARD.yml @@ -0,0 +1,44 @@ +--- +app: + rabbit: + exchanger: ic-notification + labTestExchanger: csi.net.labsrvcs + queue: + microbiology: ic-notification.infected + labTest: ehr-ic-dashboard-lab-test-queue + routingkey: ic-notification.infected + labTestRoutingKey: csi.net.labsrvcs.status +csi: + admissionTypeForTransfer: "Transfer from Another Facility" + isolatedRoomType: 150 + jpa: + event: + isReport: true + tablePrefix: ehr_service +db: + jpa: + hibernate: + ddl-auto: none +kafka: + topic: + admission: adt-admission-generated-response.t + serviceName: "${spring.application.name}-JQA" + unit-transfer-completed-notification: adt-transfer-completed-notification.t + ehr-patient-problem-create-and-update: ehr_patient_problem_create_and_update + ehr-common-infection-create-and-update: ehr_common_infection_create_and_update + adt-discharge: adt-discharge.t +server: + context-path: /ic/dashboard +spring: + application: + name: CSI-JAVA-EHR-IC-DASHBOARD +websocket: + endpoint: /ic-socket + prefix: /ic + +scheduler: + infected-admitted-patient: + #cron-exp: 0 0 22 * * * + #cron-exp: 0 30 10 * * * + cron-exp: 0 0 0 * * * + timezone: UTC diff --git a/Config-Server/configrepo/CSI-JAVA-EHR-INITIALASSESSMENT.yml b/Config-Server/configrepo/CSI-JAVA-EHR-INITIALASSESSMENT.yml new file mode 100755 index 0000000..2646ba5 --- /dev/null +++ b/Config-Server/configrepo/CSI-JAVA-EHR-INITIALASSESSMENT.yml @@ -0,0 +1,3 @@ +spring: + application: + name: CSI-JAVA-EHR-INITIALASSESSMENT diff --git a/Config-Server/configrepo/CSI-JAVA-EHR-IP-DOCTOR-PRESCRIPTION.yml b/Config-Server/configrepo/CSI-JAVA-EHR-IP-DOCTOR-PRESCRIPTION.yml new file mode 100755 index 0000000..e69de29 diff --git a/Config-Server/configrepo/CSI-JAVA-EHR-IP.yml b/Config-Server/configrepo/CSI-JAVA-EHR-IP.yml new file mode 100755 index 0000000..5d4058d --- /dev/null +++ b/Config-Server/configrepo/CSI-JAVA-EHR-IP.yml @@ -0,0 +1,45 @@ +spring: + application: + name: CSI-JAVA-EHR-IP + datasource: + tomcat: + min-evictable-idle-time-millis: 200000 + max-active: 50 + max-idle: 2 + min-idle: 1 + max-age: 200000 + hikari: + minimum-idle: 2 + maximum-pool-size: 50 + connection-timeout: 15000 + idle-timeout: 10000 + max-lifetime: 40000 +app: + url.prescription: CSI-JAVA-EHR-IP-DOCTOR-PRESCRIPTION + url.read.adt: CSI-JAVA-EHR-COMMON-ADT-INTEGRATION + url.read.careplan: CSI-JAVA-EHR-IP-CAREPLAN-READ + url.read.initial-assessment: CSI-JAVA-EHR-INITIALASSESSMENT + url.notification: CSI-NET-NOTY + url.read: CSI-JAVA-EHR-IP-DOCTOR-ADMISSION-READ +initial-assessment: + time: 4 +etl-prop: + etl-run-period: '*/30 * * * * *' + etl-runing-minutes: 25 +hibernate: + dialect: org.hibernate.dialect.PostgreSQLDialect +postgresql: + driver: org.postgresql.Driver +db: + configuration: postgresql +csi: + persistence: + autogen-id: true + autogen: + sequence: hibernate_sequence + jpa: + event: + isReport: true + dateformat: + format: yyyy/MM/dd HH:mm:ss +debug: false diff --git a/Config-Server/configrepo/CSI-JAVA-EHR-LDR.yml b/Config-Server/configrepo/CSI-JAVA-EHR-LDR.yml new file mode 100755 index 0000000..df69df1 --- /dev/null +++ b/Config-Server/configrepo/CSI-JAVA-EHR-LDR.yml @@ -0,0 +1,84 @@ +spring: + application: + name: CSI-JAVA-EHR-LDR + rabbitmq: + listener: + default-requeue-rejected: false + retry: + enabled: true + initial-interval: 2000 + max-attempts: 3 + multiplier: 1.5 + max-interval: 10000 + jpa: + database: POSTGRESQL + hibernate: + ddl-auto: none + show-sql: true + dialect: org.hibernate.dialect.PostgreSQLDialect +websocket: + endpoint: /baby-socket + prefix: /baby + topic: + admission-request: /admission-request +app: + topic: + exchange: vidaplus.empi.exchange + patientRouteKey: csi.vidaplus.empi.events.patientcreatedevent + patientqueue: empi.patientCreateLDRPROD + wait: 5 +hibernate: + dialect: org.hibernate.dialect.PostgreSQLDialect +postgresql: + driver: org.postgresql.Driver +db: + configuration: postgresql +orm: + configuration: spring + jackson: + date-format: yyyy-MM-dd HH:mm:ss + http: + multipart: + max-file-size: 100MB + max-request-size: 100MB +csi: + persistence: + autogen-id: true + autogen: + sequence: hibernate_sequence + jpa: + event: + isReport: true + hibernate: + ddl-auto: none + dateformat: + format: yyyy/MM/dd HH:mm:ss +debug: false +hystrix: + shareSecurityContex: true + command: + default: + circuitBreaker: + enabled: true + execution: + isolation: + thread: + timeoutInMilliseconds: 1440000 +logging: + level: + org: + hibernate: + SQL: DEBUG + type: + descriptor: + sql: + BasicBinder: TRACE + com: + csi: + vidaplus: + ehr: + ldr: + feign: + empi: + HijriDateFeignClient: DEBUG + PatientFeignClient: DEBUG diff --git a/Config-Server/configrepo/CSI-JAVA-EHR-LISTENER.yml b/Config-Server/configrepo/CSI-JAVA-EHR-LISTENER.yml new file mode 100755 index 0000000..053cd12 --- /dev/null +++ b/Config-Server/configrepo/CSI-JAVA-EHR-LISTENER.yml @@ -0,0 +1,23 @@ +spring: + application: + name: CSI-JAVA-EHR-LISTENER + jackson: + serialization-inclusion: non_null + +websocket: + endpoint-admission: /admission-socket + endpoint-appointment: /appointment-socket + +kafka: + topic: + #appointment + appointment: appointment.t + #admission + admission: adt-admission-generated-response.t + admissionrequest: adt-admission-request.t + discharge-request: adt-discharge-request.t + discharge-start-notification: adt-discharge-start-notification.t + discharge-summary-clear-notification: adt-discharge-summary-clear-notification.t + unit-transfer-request: adt-transfer-request.t + unit-transfer-completed-notification: adt-transfer-completed-notification.t + diff --git a/Config-Server/configrepo/CSI-JAVA-EHR-OPD.yml b/Config-Server/configrepo/CSI-JAVA-EHR-OPD.yml new file mode 100755 index 0000000..41ee54a --- /dev/null +++ b/Config-Server/configrepo/CSI-JAVA-EHR-OPD.yml @@ -0,0 +1,52 @@ +spring: + application: + name: CSI-JAVA-EHR-OPD + rabbitmq: + listener: + default-requeue-rejected: false + retry: + enabled: true + initial-interval: 2000 + max-attempts: 3 + multiplier: 1.5 + max-interval: 10000 + datasource: + driverClassName: org.postgresql.Driver + tomcat: + min-evictable-idle-time-millis: 200000 + max-active: 50 + max-idle: 2 + min-idle: 1 + max-age: 200000 + hikari: + minimum-idle: 2 + maximum-pool-size: 40 + connection-timeout: 30000 + idle-timeout: 10000 + max-lifetime: 40000 +hibernate: + dialect: org.hibernate.dialect.PostgreSQLDialect +postgresql: + driver: org.postgresql.Driver +db: + configuration: postgresql +csi: + persistence: + autogen-id: true + autogen: + sequence: hibernate_sequence + dateformat: + format: yyyy/MM/dd HH:mm:ss + jpa: + event: + isReport: true +app: + url.medication: CSI-JAVA-EHR-IP-DOCTOR-PRESCRIPTION + url.pomr: CSI-JAVA-EHR-PATIENT-POMR + url.procedure: CSI-JAVA-EHR-OPD-PATIENT-ORDER + url.patientProblem: CSI-JAVA-EHR-PATIENT-POMR +kafka: + topic: + appointment: appointment + admission: adt-admission-generated-response.t + discharge: adt-discharge-summary-clear-notification.t diff --git a/Config-Server/configrepo/CSI-JAVA-EHR-OR-ANESTHESIA.yml b/Config-Server/configrepo/CSI-JAVA-EHR-OR-ANESTHESIA.yml new file mode 100755 index 0000000..8c66578 --- /dev/null +++ b/Config-Server/configrepo/CSI-JAVA-EHR-OR-ANESTHESIA.yml @@ -0,0 +1,51 @@ +spring: + application: + name: CSI-JAVA-EHR-OR-ANESTHESIA +# main: +# allow-bean-definition-overriding: true +# resources: +# cache: +# period: "3600s" + datasource: +# url: jdbc:postgresql://172.15.100.141:5432/CSI-EHR-OR-ANESTHESIA?autoReconnect=true +# username: ehr_common +# password: db@common + tomcat: + remove-abandoned: true +# jpa: +# database: POSTGRESQL +# hibernate: + #ddl-auto: none +# dialect: org.hibernate.dialect.PostgreSQLDialect +# database-platform: org.hibernate.dialect.PostgreSQLDialect +#hibernate: +# dialect: org.hibernate.dialect.PostgreSQLDialect +#postgresql: +# driver: org.postgresql.Driver +# jpa: +# properties: +# hibernate: +# format_sql: true +# temp: +# use_jdbc_metadata_defaults: false +# liquibase: +# change-log: classpath:db/changelog/db.changelog-master.xml +logging: + level: + root: ERROR + org: + springframework: + web: DEBUG + hibernate: ERROR +csi: + jpa: + event: + isReport: false +app: + anesthesia: + clinic-code: ANES001 + procedure: + surgery-caegory: 7 + appointment-type: + walking: WALKIN + regular: REGULAR diff --git a/Config-Server/configrepo/CSI-JAVA-EHR-OR-BOOK.yml b/Config-Server/configrepo/CSI-JAVA-EHR-OR-BOOK.yml new file mode 100755 index 0000000..5f7443d --- /dev/null +++ b/Config-Server/configrepo/CSI-JAVA-EHR-OR-BOOK.yml @@ -0,0 +1,48 @@ +spring: + application: + name: CSI-JAVA-EHR-OR-BOOK +# main: +# allow-bean-definition-overriding: true +# resources: +# cache: +# period: "3600s" + jpa: + open-in-view: false +# datasource: +# url: jdbc:postgresql://172.15.100.141:5432/CSI-EHR-RW-OR-BOOK?autoReconnect=true +# username: ehr_common +# password: db@common +# properties: +# hibernate: +# format_sql: true +# temp: +# use_jdbc_metadata_defaults: false +# liquibase: +# change-log: classpath:db/changelog/db.changelog-master.xml +csi: + jpa: + event: + isReport: true + tablePrefix: ehr_service + rabbitmq: + host: 172.200.0.204 + port: 5672 + userName: reporting + password: reporting + queueName: csi-reporting + exchangeName: csi.reporting +websocket: + endpoint: /common-socket +logging: + level: + com: + csi: + ehr: + or: + book: + feign: + ProcedureFeignClient : DEBUG + AnesthesiaFeignClient : DEBUG + OperationFeignClient : DEBUG + PomrFeignClient : DEBUG + Procedure2 : DEBUG diff --git a/Config-Server/configrepo/CSI-JAVA-EHR-OR-BOOKING.yml b/Config-Server/configrepo/CSI-JAVA-EHR-OR-BOOKING.yml new file mode 100755 index 0000000..937bf34 --- /dev/null +++ b/Config-Server/configrepo/CSI-JAVA-EHR-OR-BOOKING.yml @@ -0,0 +1,48 @@ +spring: + application: + name: CSI-JAVA-EHR-OR-BOOKING +# main: +# allow-bean-definition-overriding: true +# resources: +# cache: +# period: "3600s" +# datasource: +# url: jdbc:postgresql://172.15.100.141:5432/CSI-EHR-OR-BOOKING?autoReconnect=true +# username: ehr_common +# password: db@common +# jpa: +# database: POSTGRESQL +# hibernate: +# ddl-auto: none +# dialect: org.hibernate.dialect.PostgreSQLDialect +# database-platform: org.hibernate.dialect.PostgreSQLDialect +#hibernate: +# dialect: org.hibernate.dialect.PostgreSQLDialect +#postgresql: +# driver: org.postgresql.Driver +# jpa: +# properties: +# hibernate: +# format_sql: true +# temp: +# use_jdbc_metadata_defaults: false +# liquibase: +# change-log: classpath:db/changelog/db.changelog-master.xml +server: + context-path: /OR +debug: true +app: + anesthesia: + inpatient: 1 + appointment-duration: 1 + my-surgery: + history-days: 90 + procedure: + surgery-caegory: 7 + casetime: + cron: 50 01 * * * * + historydays: 2 +csi: + jpa: + event: + isReport: true diff --git a/Config-Server/configrepo/CSI-JAVA-EHR-PATIENT-POMR.yaml b/Config-Server/configrepo/CSI-JAVA-EHR-PATIENT-POMR.yaml new file mode 100755 index 0000000..e47b582 --- /dev/null +++ b/Config-Server/configrepo/CSI-JAVA-EHR-PATIENT-POMR.yaml @@ -0,0 +1,14 @@ +spring: + datasource: + tomcat: + min-evictable-idle-time-millis: 200000 + max-active: 50 + max-idle: 2 + min-idle: 1 + max-age: 200000 + hikari: + minimum-idle: 2 + maximum-pool-size: 50 + connection-timeout: 15000 + idle-timeout: 10000 + max-lifetime: 40000 diff --git a/Config-Server/configrepo/CSI-JAVA-EHR-PATIENT-POMR.yml b/Config-Server/configrepo/CSI-JAVA-EHR-PATIENT-POMR.yml new file mode 100755 index 0000000..e0040e8 --- /dev/null +++ b/Config-Server/configrepo/CSI-JAVA-EHR-PATIENT-POMR.yml @@ -0,0 +1,10 @@ +spring: + application: + name: CSI-JAVA-EHR-PATIENT-POMR +feign: + hystrix: + enabled: true +csi: + jpa: + event: + isReport: true diff --git a/Config-Server/configrepo/CSI-JAVA-EHR-SPECIALIZED-CLINIC.yml b/Config-Server/configrepo/CSI-JAVA-EHR-SPECIALIZED-CLINIC.yml new file mode 100755 index 0000000..d2b0ff8 --- /dev/null +++ b/Config-Server/configrepo/CSI-JAVA-EHR-SPECIALIZED-CLINIC.yml @@ -0,0 +1,50 @@ +spring: + application: + name: CSI-JAVA-EHR-SPECIALIZED-CLINIC + jackson: + default-property-inclusion: NON_NULL + date-format: yyyy-MM-dd HH:mm:ss + main: + allow-bean-definition-overriding: true + resources: + cache: + period: "3600s" + datasource: +# url: jdbc:postgresql://172.15.100.141:5432/CSI-EHR-OR-ANESTHESIA?autoReconnect=true +# username: ehr_common +# password: db@common + tomcat: + remove-abandoned: true + jpa: + properties: + hibernate: + format_sql: true + temp: + use_jdbc_metadata_defaults: false +# database: POSTGRESQL +# hibernate: + #ddl-auto: none +# dialect: org.hibernate.dialect.PostgreSQLDialect +# database-platform: org.hibernate.dialect.PostgreSQLDialect +#hibernate: +# dialect: org.hibernate.dialect.PostgreSQLDialect +#postgresql: +# driver: org.postgresql.Driver +#logging: +# level: +# root: ERROR +# org: +# springframework: +# web: DEBUG +# hibernate: ERROR +csi: + base: + util: + url: csi-java-base-utility + #url: https://vida.dev.cloudsolution.lk/csi-java-base-utility + moduleKey: ehr + patient-merge: + url: CSI-NET-EMPIREAD + jpa: + event: + isReport: false diff --git a/Config-Server/configrepo/CSI-JAVA-EHR-TEMPLATE.yml b/Config-Server/configrepo/CSI-JAVA-EHR-TEMPLATE.yml new file mode 100755 index 0000000..faa4ec1 --- /dev/null +++ b/Config-Server/configrepo/CSI-JAVA-EHR-TEMPLATE.yml @@ -0,0 +1,18 @@ +spring: + application: + name: CSI-JAVA-EHR-TEMPLATE +hibernate: + dialect: org.hibernate.dialect.PostgreSQLDialect +postgresql: + driver: org.postgresql.Driver +db: + configuration: postgresql +csi: + persistence: + autogen-id: true + autogen: + sequence: hibernate_sequence + dateformat: + format: yyyy/MM/dd HH:mm:ss +table: + column-definition: TEXT \ No newline at end of file diff --git a/Config-Server/configrepo/CSI-JAVA-FAC-PATIENT-SNAPSHOT.yml b/Config-Server/configrepo/CSI-JAVA-FAC-PATIENT-SNAPSHOT.yml new file mode 100755 index 0000000..081974e --- /dev/null +++ b/Config-Server/configrepo/CSI-JAVA-FAC-PATIENT-SNAPSHOT.yml @@ -0,0 +1,7 @@ +server: + port: 0 + +spring: + jackson: + default-property-inclusion: NON_NULL + date-format: yyyy-MM-dd \ No newline at end of file diff --git a/Config-Server/configrepo/CSI-NET-BLOODBNK-MGT.yml b/Config-Server/configrepo/CSI-NET-BLOODBNK-MGT.yml new file mode 100755 index 0000000..dcb1e23 --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-BLOODBNK-MGT.yml @@ -0,0 +1,26 @@ +--- +AppSettings: + SiteTitle: CSI-NET-BLOODBNK-MGT-{env} + SiteUrl: "" + +PostgreSQL: + ReadCon: "Host={database:host};Port={database:port};Database={database:bloodBank:dbName};User Id={database:bloodBank:userId};Password={database:bloodBank:password};" + WriteCon: "Host={database:host};Port={database:port};Database={database:bloodBank:dbName};User Id={database:bloodBank:userId};Password={database:bloodBank:password};" +#Oracle: +# ReadCon: "Data Source=(DESCRIPTION=(CONNECT_TIMEOUT={database:connectTimeout})(RETRY_COUNT={database:retryCount})(RETRY_DELAY={database:retryDelay})(TRANSPORT_CONNECT_TIMEOUT={database:transportConnecttimeout})(ADDRESS=(PROTOCOL=TCP)(HOST={database:host})(PORT={database:port}))(CONNECT_DATA=(SERVICE_NAME={database:serviceName})));User Id={database:bloodBank:userId};Password={database:bloodBank:password};Max Pool Size={database:maxPoolsize};Connection Timeout={database:connectionTimeout}" +# WriteCon: "Data Source=(DESCRIPTION=(CONNECT_TIMEOUT={database:connectTimeout})(RETRY_COUNT={database:retryCount})(RETRY_DELAY={database:retryDelay})(TRANSPORT_CONNECT_TIMEOUT={database:transportConnecttimeout})(ADDRESS=(PROTOCOL=TCP)(HOST={database:host})(PORT={database:port}))(CONNECT_DATA=(SERVICE_NAME={database:serviceName})));User Id={database:bloodBank:userId};Password={database:bloodBank:password};Max Pool Size={database:maxPoolsize};Connection Timeout={database:connectionTimeout}" + +contextSkipOn: +kafka: + service_name: CSI-NET-BLOODBNK-MGT-{env} + +Report: + Mongo: + Collection: BLOODBANK +BloodBankMiddlewareEnabledGroups: + - "105" +ElasticApm: + ServiceName: CSI-NET-BLOODBNK-MGT +serviceurls: + NewVitalUrl: "http://csi-java-ehr-common/vital-signs//displayV2/patient/" +IsKafkaEnabledInEmpi: true diff --git a/Config-Server/configrepo/CSI-NET-BLOODBNK.yml b/Config-Server/configrepo/CSI-NET-BLOODBNK.yml new file mode 100755 index 0000000..7374b10 --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-BLOODBNK.yml @@ -0,0 +1,42 @@ +--- +AppSettings: + SiteTitle: CSI-NET-BLOODBNK-{env} + SiteUrl: "" + +PostgreSQL: + ReadCon: "Host={database:host};Port={database:port};Database={database:bloodBank:dbName};User Id={database:bloodBank:userId};Password={database:bloodBank:password};" + WriteCon: "Host={database:host};Port={database:port};Database={database:bloodBank:dbName};User Id={database:bloodBank:userId};Password={database:bloodBank:password};" +Oracle: + ReadCon: "Data Source=(description=(CONNECT_TIMEOUT={database:connectTimeout})(RETRY_COUNT={database:retryCount})(RETRY_DELAY={database:retryDelay})(TRANSPORT_CONNECT_TIMEOUT={database:transportConnecttimeout})(address=(host={database:primaryHost})(protocol=tcp)(port={database:port}))(address=(host={database:secondaryHost})(protocol=tcp)(port={database:port}))(failover=yes)(connect_data=(service_name={database:serviceName})(failover_mode=(type=select)(method=basic))));User Id={database:bloodBank:userId};Password={database:bloodBank:password};Max Pool Size={database:maxPoolsize};Connection Timeout={database:connectionTimeout}" + WriteCon: "Data Source=(description=(CONNECT_TIMEOUT={database:connectTimeout})(RETRY_COUNT={database:retryCount})(RETRY_DELAY={database:retryDelay})(TRANSPORT_CONNECT_TIMEOUT={database:transportConnecttimeout})(address=(host={database:primaryHost})(protocol=tcp)(port={database:port}))(address=(host={database:secondaryHost})(protocol=tcp)(port={database:port}))(failover=yes)(connect_data=(service_name={database:serviceName})(failover_mode=(type=select)(method=basic))));User Id={database:bloodBank:userId};Password={database:bloodBank:password};Max Pool Size={database:maxPoolsize};Connection Timeout={database:connectionTimeout}" + +#Oracle: + # ReadCon: "Data Source=(description=(address=(host={database:primaryHost})(protocol=tcp)(port={database:port}))(address=(host={database:secondaryHost})(protocol=tcp)(port={database:port}))(failover=yes)(connect_data=(service_name={database:serviceName})(failover_mode=(type=select)(method=basic))));User Id={database:bloodBank:userId};Password={database:bloodBank:password}" + #WriteCon: "Data Source=(description=(address=(host={database:primaryHost})(protocol=tcp)(port={database:port}))(address=(host={database:secondaryHost})(protocol=tcp)(port={database:port}))(failover=yes)(connect_data=(service_name={database:serviceName})(failover_mode=(type=select)(method=basic))));User Id={database:bloodBank:userId};Password={database:bloodBank:password}" +BloodBankMiddlewareEnabledGroups: + - "105" +contextSkipOn: +kafka: + service_name: CSI-NET-BLOODBNK-{env} +Report: + Mongo: + Collection: BLOODBANK +KafkaTopics: + NewDonorCreate: "{env}-csi-net-bloodbnk.new-donor-create" + NewDonationCreate: "{env}-csi-net-bloodbnk.new-donation-create" + EmpiRegisterPatientTopic: "csi.vidaplus.empi.events.patientcreatedevent" + EmpiEditPatientTopic: "csi.vidaplus.empi.events.patienteditedevent" + EmpiPatientUpdateSpecificFieldsTopic: "csi.vidaplus.empi.events.updatespecificfieldsevent" + NewMachineBloodSampleRequestSend: "csi-net-bloodbnk.machine-integration.blood-sample-request" + NewMachineBloodSampleRequestResponse: "csi-net-bloodbnk.machine-integration.blood-sample-response" + EmpiPatientMergeTopic: "csi.vidaplus.empi.events.patientmergedevent" +IsKafkaEnabledInEmpi: true +ElasticApm: + ServiceName: CSI-NET-BLOODBNK + +serviceurls: + transfutionJavaService: "http://csi-net-bloodbnk-mgt/api/1.0/bloodRequest/" + employeeMasterService: "http://csi-pms-rms-resource-registry/" + globalConfig: "http://csi-java-base-utility/base/util/config/key?lang=en&internationalization=false" + bbCrossMatchResultsByPatientId: "http://csi-net-labsrvcs/api/v1.1/LabValueBasedResults/bbCrossMatchResultsByPatientId?lang=en&internationalization=false" + diff --git a/Config-Server/configrepo/CSI-NET-BLOODBNK_old17-12-21.yml b/Config-Server/configrepo/CSI-NET-BLOODBNK_old17-12-21.yml new file mode 100755 index 0000000..2fc1fb5 --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-BLOODBNK_old17-12-21.yml @@ -0,0 +1,83 @@ +--- +AppSettings: + SiteTitle: CSI-NET-BLOODBNK-{env} + SiteUrl: "" + +PostgreSQL: + ReadCon: "Host={database:host};Port={database:port};Database={database:bloodBank:dbName};User Id={database:bloodBank:userId};Password={database:bloodBank:password};" + WriteCon: "Host={database:host};Port={database:port};Database={database:bloodBank:dbName};User Id={database:bloodBank:userId};Password={database:bloodBank:password};" +Oracle: + ReadCon: "Data Source=(description=(address=(host={database:primaryHost})(protocol=tcp)(port={database:port}))(address=(host={database:secondaryHost})(protocol=tcp)(port={database:port}))(failover=yes)(connect_data=(service_name={database:serviceName})(failover_mode=(type=select)(method=basic))));User Id={database:bloodBank:userId};Password={database:bloodBank:password}" + WriteCon: "Data Source=(description=(address=(host={database:primaryHost})(protocol=tcp)(port={database:port}))(address=(host={database:secondaryHost})(protocol=tcp)(port={database:port}))(failover=yes)(connect_data=(service_name={database:serviceName})(failover_mode=(type=select)(method=basic))));User Id={database:bloodBank:userId};Password={database:bloodBank:password}" + +contextSkipOn: +kafka: + service_name: CSI-NET-BLOODBNK-{env} +rabbitmq: + exchnage: + exchangeName: vidaplus.empi.exchange + type: topic + durable: true + exclusive: false + autoDelete: false + queue: + name: bb-donor-patient + routekey: csi.vidaplus.empi.events.patientcreatedevent + durable: true + exclusive: false + autoDelete: false + autoAck: false + queue2: + name: bb-donor-patient-n + routekey: csi.vidaplus.empi.events.patientcreatedevent + durable: true + exclusive: false + autoDelete: false + autoAck: false + patient-edit-queue: + name: bb-donor-patient-edit + routekey: csi.vidaplus.empi.events.patienteditedevent + durable: true + exclusive: false + autoDelete: false + autoAck: false + update-specific-field-queue: + name: bb-donor-patient-update-specific-field + routekey: csi.vidaplus.empi.events.updatespecificfieldsevent + durable: true + exclusive: false + autoDelete: false + autoAck: false +rabbitmqDebug: + exchnage: + exchangeName: vidaplus.empi.exchange + type: topic + durable: true + exclusive: false + autoDelete: false + queue: + name: bb-donor-patient + routekey: bb-donor-patient + durable: true + exclusive: false + autoDelete: false + autoAck: false + queue2: + name: bb-donor-patient-n + routekey: bb-donor-patient-n + durable: true + exclusive: false + autoDelete: false + autoAck: false +Report: + Mongo: + Collection: BLOODBANK +KafkaTopics: + NewDonorCreate: "{env}-csi-net-bloodbnk.new-donor-create" + NewDonationCreate: "{env}-csi-net-bloodbnk.new-donation-create" + EmpiRegisterPatientTopic: "csi.vidaplus.empi.events.patientcreatedevent" + EmpiEditPatientTopic: "csi.vidaplus.empi.events.patienteditedevent" + EmpiPatientUpdateSpecificFieldsTopic: "csi.vidaplus.empi.events.updatespecificfieldsevent" +IsKafkaEnabledInEmpi: false +ElasticApm: + ServiceName: CSI-NET-BLOODBNK diff --git a/Config-Server/configrepo/CSI-NET-DATAPERM.yml b/Config-Server/configrepo/CSI-NET-DATAPERM.yml new file mode 100755 index 0000000..f61f5be --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-DATAPERM.yml @@ -0,0 +1,23 @@ +--- +AppSettings: + CacheDbResults: true + SiteTitle: CSI-NET-DATAPERM-{env} +kafka: + serviceName: CSI-NET-DATAPERM-{env} +Logging: + IncludeScopes: false + LogLevel: + Default: Debug + Microsoft: Information + System: Information +swaggerschema: + api-title: "Data Permission Api" + api-title-desc: "Data Permission Api" +DefaultDbConnection: "Server={empi:database:host};Database=csi-data-permission;User Name={empi:database:username};Password={empi:database:password};" +EmpiMongoDbConnectionOptions: + ConnectionString: "mongodb://172.15.100.147:27017/csi-data-permission" + DbName: "csi-data-permission" +ServiceUrls: + UserPermission: http://service-base-security-token/token/logged-in-user +ElasticApm: + ServiceName: CSI-NET-DATAPERM diff --git a/Config-Server/configrepo/CSI-NET-EHR-DBOARDPC.yml b/Config-Server/configrepo/CSI-NET-EHR-DBOARDPC.yml new file mode 100755 index 0000000..3b34d5e --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-EHR-DBOARDPC.yml @@ -0,0 +1,25 @@ +AppSettings: + SiteTitle: CSI-NET-EHR-DBOARDPC-{env} +kafka: + service_name: CSI-NET-EHR-DBOARDPC-{env} +ConnectionStrings: + ReadCon: "" + WriteCon: "" +Utilities: + Images: + AdmissionImg: /csi-net-ehr-dboardpc/images/admission-requests.png + InPatientImg: /csi-net-ehr-dboardpc/images/in-patients.png + InPatientTransferImg: /csi-net-ehr-dboardpc/images/patient-transfer.png + OPDImg: /csi-net-ehr-dboardpc/images/opd-patientrs.png + ORAnesthesiaImg: /csi-net-ehr-dboardpc/images/or-anesthesia.png + ORPlanSurgeriesImg: /csi-net-ehr-dboardpc/images/or-plsurg.png + ORSurgeriesImg: /csi-net-ehr-dboardpc/images/or-surg.png + ORUnplanSurgeriesImg: /csi-net-ehr-dboardpc/images/or-unplansurg.png + ORWaitSurgeriesImg: /csi-net-ehr-dboardpc/images/or-waitsurg.png + ReferralImg: /csi-net-ehr-dboardpc/images/refferal.png + DrTskListImg: /csi-net-ehr-dboardpc/images/dr-task-list.png + OncoTCImg: /csi-net-ehr-dboardpc/images/onco-tc.png + OncoCBImg: /csi-net-ehr-dboardpc/images/onco-cb.png + OncoCRImg: /csi-net-ehr-dboardpc/images/onco-cr.png +ElasticApm: + ServiceName: CSI-NET-EHR-DBOARDPC diff --git a/Config-Server/configrepo/CSI-NET-EHR-IP-DISCHARG.yml b/Config-Server/configrepo/CSI-NET-EHR-IP-DISCHARG.yml new file mode 100755 index 0000000..204d3fd --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-EHR-IP-DISCHARG.yml @@ -0,0 +1,21 @@ +AppSettings: + SiteTitle: CSI-NET-EHR-IP-DISCHARG-{env} +PostgreSQL: + ReadCon: "Host={database:host};Port={database:port};Database={database:ehrDischarge:dbName};User Id={database:ehrDischarge:userId};Password={database:ehrDischarge:password};" + WriteCon: "Host={database:host};Port={database:port};Database={database:ehrDischarge:dbName};User Id={database:ehrDischarge:userId};Password={database:ehrDischarge:password};" +Oracle: + ReadCon: "Data Source=(description=(address=(host={database:primaryHost})(protocol=tcp)(port={database:port}))(address=(host={database:secondaryHost})(protocol=tcp)(port={database:port}))(failover=yes)(connect_data=(service_name={database:serviceName})(failover_mode=(type=select)(method=basic))));User Id={database:ehrDischarge:userId};Password={database:ehrDischarge:password};Max Pool Size={database:maxPoolsize};Connection Timeout={database:connectionTimeout}" + WriteCon: "Data Source=(description=(address=(host={database:primaryHost})(protocol=tcp)(port={database:port}))(address=(host={database:secondaryHost})(protocol=tcp)(port={database:port}))(failover=yes)(connect_data=(service_name={database:serviceName})(failover_mode=(type=select)(method=basic))));User Id={database:ehrDischarge:userId};Password={database:ehrDischarge:password};Max Pool Size={database:maxPoolsize};Connection Timeout={database:connectionTimeout}" + +#Oracle: + # ReadCon: "Data Source=(description=(address=(host={database:primaryHost})(protocol=tcp)(port={database:port}))(address=(host={database:secondaryHost})(protocol=tcp)(port={database:port}))(failover=yes)(connect_data=(service_name={database:serviceName})(failover_mode=(type=select)(method=basic))));User Id={database:ehrDischarge:userId};Password={database:ehrDischarge:password}" + #WriteCon: "Data Source=(description=(address=(host={database:primaryHost})(protocol=tcp)(port={database:port}))(address=(host={database:secondaryHost})(protocol=tcp)(port={database:port}))(failover=yes)(connect_data=(service_name={database:serviceName})(failover_mode=(type=select)(method=basic))));User Id={database:ehrDischarge:userId};Password={database:ehrDischarge:password}" +kafka: + service_name: CSI-NET-EHR-IP-DISCHARG-{env} + kafka_him_charting_component: + topic: "{env}-him-charting-component" +Report: + Mongo: + Collection: "IPDISCHARG" +ElasticApm: + ServiceName: CSI-NET-EHR-IP-DISCHARG diff --git a/Config-Server/configrepo/CSI-NET-EHR-OPD-MASTER.yml b/Config-Server/configrepo/CSI-NET-EHR-OPD-MASTER.yml new file mode 100755 index 0000000..051bb69 --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-EHR-OPD-MASTER.yml @@ -0,0 +1,80 @@ +AppSettings: + SiteTitle: CSI-NET-EHR-OPD-MASTER-{env} + +PostgreSQL: + ReadCon: "Host={database:host};Port={database:port};Database={database:opdMaster:dbName};User Id={database:opdMaster:userId};Password={database:opdMaster:password};" + WriteCon: "Host={database:host};Port={database:port};Database={database:opdMaster:dbName};User Id={database:opdMaster:userId};Password={database:opdMaster:password};" +Oracle: + ReadCon: "Data Source=(description=(CONNECT_TIMEOUT={database:connectTimeout})(RETRY_COUNT={database:retryCount})(RETRY_DELAY={database:retryDelay})(TRANSPORT_CONNECT_TIMEOUT={database:transportConnecttimeout})(address=(host={database:primaryHost})(protocol=tcp)(port={database:port}))(address=(host={database:secondaryHost})(protocol=tcp)(port={database:port}))(failover=yes)(connect_data=(service_name={database:serviceName})(failover_mode=(type=select)(method=basic))));User Id={database:opdMaster:userId};Password={database:opdMaster:password};Max Pool Size={database:maxPoolsize};Connection Timeout={database:connectionTimeout}" + WriteCon: "Data Source=(description=(CONNECT_TIMEOUT={database:connectTimeout})(RETRY_COUNT={database:retryCount})(RETRY_DELAY={database:retryDelay})(TRANSPORT_CONNECT_TIMEOUT={database:transportConnecttimeout})(address=(host={database:primaryHost})(protocol=tcp)(port={database:port}))(address=(host={database:secondaryHost})(protocol=tcp)(port={database:port}))(failover=yes)(connect_data=(service_name={database:serviceName})(failover_mode=(type=select)(method=basic))));User Id={database:opdMaster:userId};Password={database:opdMaster:password};Max Pool Size={database:maxPoolsize};Connection Timeout={database:connectionTimeout}" + +#Oracle: + #ReadCon: "Data Source=(description=(address=(host={database:primaryHost})(protocol=tcp)(port={database:port}))(address=(host={database:secondaryHost})(protocol=tcp)(port={database:port}))(failover=yes)(connect_data=(service_name={database:serviceName})(failover_mode=(type=select)(method=basic))));User Id={database:opdMaster:userId};Password={database:opdMaster:password}" + #WriteCon: "Data Source=(description=(address=(host={database:primaryHost})(protocol=tcp)(port={database:port}))(address=(host={database:secondaryHost})(protocol=tcp)(port={database:port}))(failover=yes)(connect_data=(service_name={database:serviceName})(failover_mode=(type=select)(method=basic))));User Id={database:opdMaster:userId};Password={database:opdMaster:password}" + +kafka: + service_name: CSI-NET-EHR-OPD-MASTER-{env} +ProcedurePropertyMap: + ProcedureID: id + ProcedureCode: procedureId + ProcedureName: name + ProcedureNameN: + Alias: alias + AliasN: + CategoryID: categoryId + GroupID: groupId + SubGroupID: subGroupId + ProcedureExtendedProperties: procedureExtendedProperties + PriceExtendedProperty: procedurePricing + Price: + IDValue: 248 # This is ADT Master data ID for Price + MasterID: priceGroupId + MasterValue: price + PublishedPrice: + IDValue: 249 # This is ADT Master data ID for PublishedPrice + MasterID: priceGroupId + MasterValue: price + GrossPrice: + IDValue: 244 # This is ADT Master data ID for GrossPrice + MasterID: priceGroupId + MasterValue: price + SpecialPrice: + IDValue: 250 # This is ADT Master data ID for SpecialPrice + MasterID: priceGroupId + MasterValue: price + IsRemarkMandatory: isRemarksRequired + IsPackage: isPackageProcedure + ParentProcedureCode: + ProcedureDTO: + HospitalExtendedProperty: availableHospitals + Hospital: + HospitalGroupID: hospitalGroupId + HospitalID: id + HospitalName: name + Alias: alias + IsActive: isActive + ClinicExtendedProperty: clinic + Clinic: + ClinicID: id + ClinicDescription: clinicDescription + IsActive: isActive + RowVersion: rowVersion + IsSchedulable: isSchedulable + GeneralExtendedProperty: + IsSurgeryProcedure: isSurgeryProcedure + IsPermissionRequired: isPermissionRequired + MasterData: + Name: name + Code: code + PackageDetails: procedurePackageDetails + Package: + IsSpecialDiscount: isSpecialDiscount + PackageProcedureId: packageProcedureId + PackageProcedureCode: + IsActive: isActive + ConfigurationStatus: configurationStatus +Report: + Mongo: + Collection: "OPDMASTER" +ElasticApm: + ServiceName: CSI-NET-EHR-OPD-MASTER diff --git a/Config-Server/configrepo/CSI-NET-EHR-OPD-PATIENT.yml b/Config-Server/configrepo/CSI-NET-EHR-OPD-PATIENT.yml new file mode 100755 index 0000000..8854362 --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-EHR-OPD-PATIENT.yml @@ -0,0 +1,22 @@ +AppSettings: + SiteTitle: CSI-NET-EHR-OPD-PATIENT-{env} + +PostgreSQL: + ReadCon: "Host={database:host};Port={database:port};Database={database:opdPatient:dbName};User Id={database:opdPatient:userId};Password={database:opdPatient:password};" + WriteCon: "Host={database:host};Port={database:port};Database={database:opdPatient:dbName};User Id={database:opdPatient:userId};Password={database:opdPatient:password};" +Oracle: + ReadCon: "Data Source=(description=(CONNECT_TIMEOUT={database:connectTimeout})(RETRY_COUNT={database:retryCount})(RETRY_DELAY={database:retryDelay})(TRANSPORT_CONNECT_TIMEOUT={database:transportConnecttimeout})(address=(host={database:primaryHost})(protocol=tcp)(port={database:port}))(address=(host={database:secondaryHost})(protocol=tcp)(port={database:port}))(failover=yes)(connect_data=(service_name={database:serviceName})(failover_mode=(type=select)(method=basic))));User Id={database:opdPatient:userId};Password={database:opdPatient:password};Max Pool Size={database:maxPoolsize};Connection Timeout={database:connectionTimeout}" + WriteCon: "Data Source=(description=(CONNECT_TIMEOUT={database:connectTimeout})(RETRY_COUNT={database:retryCount})(RETRY_DELAY={database:retryDelay})(TRANSPORT_CONNECT_TIMEOUT={database:transportConnecttimeout})(address=(host={database:primaryHost})(protocol=tcp)(port={database:port}))(address=(host={database:secondaryHost})(protocol=tcp)(port={database:port}))(failover=yes)(connect_data=(service_name={database:serviceName})(failover_mode=(type=select)(method=basic))));User Id={database:opdPatient:userId};Password={database:opdPatient:password};Max Pool Size={database:maxPoolsize};Connection Timeout={database:connectionTimeout}" +#Oracle: + # ReadCon: "Data Source=(description=(address=(host={database:primaryHost})(protocol=tcp)(port={database:port}))(address=(host={database:secondaryHost})(protocol=tcp)(port={database:port}))(failover=yes)(connect_data=(service_name={database:serviceName})(failover_mode=(type=select)(method=basic))));User Id={database:opdPatient:userId};Password={database:opdPatient:password}" + #WriteCon: "Data Source=(description=(address=(host={database:primaryHost})(protocol=tcp)(port={database:port}))(address=(host={database:secondaryHost})(protocol=tcp)(port={database:port}))(failover=yes)(connect_data=(service_name={database:serviceName})(failover_mode=(type=select)(method=basic))));User Id={database:opdPatient:userId};Password={database:opdPatient:password}" + +kafka: + service_name: CSI-NET-EHR-OPD-PATIENT-{env} + kafka_him_charting_component: + topic: "{env}-him-charting-component" +Report: + Mongo: + Collection: "OPDPATIENT" +ElasticApm: + ServiceName: CSI-NET-EHR-OPD-PATIENT diff --git a/Config-Server/configrepo/CSI-NET-EMPI-CRS-INTE.yml b/Config-Server/configrepo/CSI-NET-EMPI-CRS-INTE.yml new file mode 100755 index 0000000..0b14f91 --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-EMPI-CRS-INTE.yml @@ -0,0 +1,47 @@ +--- +AppSettings: + CacheDbResults: true + SiteTitle: CSI-NET-EMPI-CRS-INTE-{env} +kafka: + service_name: CSI-NET-EMPI-CRS-INTE-{env} +Logging: + IncludeScopes: false + LogLevel: + Default: Debug + Microsoft: Information + System: Information +swaggerschema: + api-title: "EMpi Api" + api-title-desc: "EMpi Api Desc" +EventStoreConfigOptions: + EventStoreConnectionString: "mongodb://{empi:database:nodes}/csi-empi-events-store" + MessageStoreConnectionString: "mongodb://{empi:database:nodes}/csi-empi-events-store" + RmqConnectionUrl: "amqp://{empi:rabbitmq:server:username}:{empi:rabbitmq:server:password}@{empi:rabbitmq:server:host}:{empi:rabbitmq:server:port}" + RmqExchangeName: "vidaplus.empi.exchange" +MongoLogs: "mongodb://{Mongo:appLogs}/app-logs" +Hangfire: + Storage: "mongodb://{empi:database:nodes}/csi-net-empi-crs-inte" +UrlOptions: + #CSRIntegrationServiceEndPoint: "http://172.15.100.130:8093/api/Client" + CSRIntegrationServiceEndPoint: "http://crs-channel/api/Client" + CSRIntegrationServiceFrontEndEndPoint: "http://crs-channel-user/api/Client" +EmpiMongoDbConnectionOptions: + ConnectionString: "mongodb://{empi:database:nodes}/csi-net-empiread" + DbName: "csi-net-empiread" +ElasticApm: + ServiceName: CSI-NET-EMPI-CRS-INTE +KafkaEnabled: true +crsConstants: + normalCrsReCheckSequence: 3 + maximunCrsReCheckSequence: 6 + crsReCheckMonthsRange: 2 +CrsPatientSearchConstants: + GetPatientBulkNew: + limit: 50 + repeatCount: 3 + GetPatientsWithMergeInProgressFlag: + limit: 50 + repeatCount: 3 + UpdateFullName: + limit: 50 + repeatCount: 3 diff --git a/Config-Server/configrepo/CSI-NET-EMPI-CRS-INTE.yml_bk20211112 b/Config-Server/configrepo/CSI-NET-EMPI-CRS-INTE.yml_bk20211112 new file mode 100755 index 0000000..e66c5f5 --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-EMPI-CRS-INTE.yml_bk20211112 @@ -0,0 +1,41 @@ +--- +AppSettings: + CacheDbResults: true + SiteTitle: CSI-NET-EMPI-CRS-INTE-{env} +kafka: + service_name: CSI-NET-EMPI-CRS-INTE-{env} +Logging: + IncludeScopes: false + LogLevel: + Default: Debug + Microsoft: Information + System: Information +swaggerschema: + api-title: "EMpi Api" + api-title-desc: "EMpi Api Desc" +EventStoreConfigOptions: + EventStoreConnectionString: "mongodb://{empi:database:nodes}/csi-empi-events-store" + MessageStoreConnectionString: "mongodb://{empi:database:nodes}/csi-empi-events-store" + RmqConnectionUrl: "amqp://{empi:rabbitmq:server:username}:{empi:rabbitmq:server:password}@{empi:rabbitmq:server:host}:{empi:rabbitmq:server:port}" + RmqExchangeName: "vidaplus.empi.exchange" +MongoLogs: "mongodb://{Mongo:appLogs}/app-logs" +Hangfire: + Storage: "mongodb://{empi:database:nodes}/csi-net-empi-crs-inte" +UrlOptions: + #CSRIntegrationServiceEndPoint: "http://172.15.100.130:8093/api/Client" + CSRIntegrationServiceEndPoint: "http://crs-channel/api/Client" +EmpiMongoDbConnectionOptions: + ConnectionString: "mongodb://{empi:database:nodes}/csi-net-empiread" + DbName: "csi-net-empiread" +ElasticApm: + ServiceName: CSI-NET-EMPI-CRS-INTE +CrsPatientSearchConstants: + GetPatientBulkNew: + limit: 50 + repeatCount: 3 + GetPatientsWithMergeInProgressFlag: + limit: 50 + repeatCount: 3 + UpdateFullName: + limit: 50 + repeatCount: 3 diff --git a/Config-Server/configrepo/CSI-NET-EMPI-HIJRIDTE.yml b/Config-Server/configrepo/CSI-NET-EMPI-HIJRIDTE.yml new file mode 100755 index 0000000..5479d5a --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-EMPI-HIJRIDTE.yml @@ -0,0 +1,21 @@ +--- +AppSettings: + CacheDbResults: true + SiteTitle: CSI-NET-EMPI-HIJRIDTE-{env} +kafka: + service_name: CSI-NET-EMPI-HIJRIDTE-{env} +Logging: + IncludeScopes: false + LogLevel: + Default: Debug + Microsoft: Information + System: Information +DefaultConnection: "Server={empi:database:host};Database=HijriCalendar;User Name={empi:database:username};Password={empi:database:password}" +EmpiMongoDbConnectionOptions: + ConnectionString: "mongodb://172.15.100.24:27017/csi-net-empi-hijridte" + DbName: "csi-net-empi-hijridte" +#eureka: +# instance: +# hostname: csi-net-empi-hijridte +ElasticApm: + ServiceName: CSI-NET-EMPI-HIJRIDTE diff --git a/Config-Server/configrepo/CSI-NET-EMPIREAD.yml b/Config-Server/configrepo/CSI-NET-EMPIREAD.yml new file mode 100755 index 0000000..704c609 --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-EMPIREAD.yml @@ -0,0 +1,69 @@ +--- +AppSettings: + CacheDbResults: true + SiteTitle: CSI-NET-EMPIREAD-{env} +kafka: + service_name: CSI-NET-EMPIREAD-{env} +Logging: + IncludeScopes: false + LogLevel: + Default: Debug + Microsoft: Information + System: Information +swaggerschema: + api-title: "EMpi Read Api" + api-title-desc: "EMpi Read Api Desc" +dbConnection: "Server={empi:database:host};Database=csi-empi-read;User Name={empi:database:username};Password={empi:database:password};Timeout=15;Connection Idle Lifetime=30;Minimum Pool Size=1;" +EventStoreConfigOptions: + EventStoreConnectionString: "mongodb://{empi:database:nodes}/csi-empi-events-store" + MessageStoreConnectionString: "mongodb://{empi:database:nodes}/csi-empi-events-store" + RmqConnectionUrl: "amqp://{empi:rabbitmq:server:username}:{empi:rabbitmq:server:password}@{empi:rabbitmq:server:host}:{empi:rabbitmq:server:port}" + RmqExchangeName: "vidaplus.empi.exchange" +BrighterConfigOptions: + EventStoreConnectionString: "Server={empi:database:host};Database=empi-event-store;User Name={empi:database:username};Password={empi:database:password};Timeout=15;Connection Idle Lifetime=30;Minimum Pool Size=1;" + MessageStoreConnectionString: "Server={empi:database:host};Database=empi-event-store;User Name={empi:database:username};Password={empi:database:password};Timeout=15;Connection Idle Lifetime=30;Minimum Pool Size=1;" + RmqConnectionUrl: "amqp://{empi:rabbitmq:server:username}:{empi:rabbitmq:server:password}@{empi:rabbitmq:server:host}:{empi:rabbitmq:server:port}" + RmqExchangeName: "vidaplus.empi.exchange" +ConnectionStrings: + ReadCon: Server="{empi:database:host};Database=csi-empi-read;User Name={empi:database:username};Password={empi:database:password};Timeout=15;Connection Idle Lifetime=30;Minimum Pool Size=1;" + WriteCon: Server="{empi:database:host};Database=csi-empi-read;User Name={empi:database:username};Password={empi:database:password};Timeout=15;Connection Idle Lifetime=30;Minimum Pool Size=1;" + EventStoreCon: Server="{empi:database:host};Database=empi-event-store;User Name={empi:database:username};Password={empi:database:password};Timeout=15;Connection Idle Lifetime=30;Minimum Pool Size=1;" +ConsentScreenOptions: + AgeFormat: yy Year mm Months dd Days + AgeNFormat: yy سنة mm شهر dd أيام + DOBArabicFormat: dd/MM/yyyy +UrlOptions: + HijriDateEndpoint: "http://csi-net-empi-hijridte/api/HijriDate/preformatted" + HijriAgeEndpoint: "http://csi-net-empi-hijridte/api/HijriCalculations/preformatted" + GenderEndPoint: "http://csi-pms-rms-masterdata/amd-masterdata/common/getByCode/General/Gender" + NationalityEndPoint: "http://csi-pms-rms-masterdata/amd-masterdata/common/getByCode/EMPI/nationalities" + #UserServiceEndPoint: "https://umm.dev.cloudsolutions.lk/auth/realms/apphiss2vi/csi-user-detail/" + UserServiceEndPoint: "https://csi-iam-service/auth/realms/master/csi-user-detail/" + CSRIntegrationServiceEndPoint: "http://crs-channel/api/Client" + CSRIntegrationServiceFrontEndEndPoint: "http://crs-channel-user/api/Client" + BillingDefaultPayerEndPoint: "http://csi-bm-billing/billing/payer-group/get-default" + BillingSearchPayerContract: "http://csi-bm-billing/billing/payer-contract/search" + BillingSearchPayerPolicy: "http://csi-bm-billing/billing/payer-contract-policies/search" + BloodGroupEndPoint: "http://csi-pms-rms-masterdata/amd-masterdata/common/getByCode/EMPI/bloodgroups" + IHEIntegrationUrl: "http://csi-ie-general/api" + EmpiWriteServiceEndPoitnt: "https://csi-net-empiwrit/api/patients/specific-fields/" + GloblPermissionEndPoint: "http://csi-java-base-utility/base/util/config/key?lang=en&internationalization=false" +UseResilientHttp: true +DataPermissionOptions: + #DataPermissionServiceEndPoint: "http://csi-vidaplus-empi-csi-data-permission/" + DataPermissionServiceEndPoint: "http://csi-net-dataperm/" +UserDetailsOptions: + UserServiceEndPoint: "http://service-base-user/" +EmpiMongoDbConnectionOptions: + ConnectionString: "mongodb://{empi:database:nodes}/csi-net-empiread" + DbName: "csi-net-empiread" +MongoLogs: "mongodb://{Mongo:appLogs}/app-logs" +SetupDataOptions: + SetupDataEndPoint: "http://csi-pms-rms-masterdata" + +BillingSetupDataOptions: + BillingSetupDataEndPoint: "http://csi-bm-billing" +IsEnabledMerge: true +KafkaEnabled: true +ElasticApm: + ServiceName: CSI-NET-EMPIREAD diff --git a/Config-Server/configrepo/CSI-NET-EMPIREAD.yml_bk20211112 b/Config-Server/configrepo/CSI-NET-EMPIREAD.yml_bk20211112 new file mode 100755 index 0000000..ddba9a5 --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-EMPIREAD.yml_bk20211112 @@ -0,0 +1,61 @@ +--- +AppSettings: + CacheDbResults: true + SiteTitle: CSI-NET-EMPIREAD-{env} +kafka: + service_name: CSI-NET-EMPIREAD-{env} +Logging: + IncludeScopes: false + LogLevel: + Default: Debug + Microsoft: Information + System: Information +swaggerschema: + api-title: "EMpi Read Api" + api-title-desc: "EMpi Read Api Desc" +dbConnection: "Server={empi:database:host};Database=csi-empi-read;User Name={empi:database:username};Password={empi:database:password};Timeout=15;Connection Idle Lifetime=30;Minimum Pool Size=1;" +EventStoreConfigOptions: + EventStoreConnectionString: "mongodb://{empi:database:nodes}/csi-empi-events-store" + MessageStoreConnectionString: "mongodb://{empi:database:nodes}/csi-empi-events-store" + RmqConnectionUrl: "amqp://{empi:rabbitmq:server:username}:{empi:rabbitmq:server:password}@{empi:rabbitmq:server:host}:{empi:rabbitmq:server:port}" + RmqExchangeName: "vidaplus.empi.exchange" +BrighterConfigOptions: + EventStoreConnectionString: "Server={empi:database:host};Database=empi-event-store;User Name={empi:database:username};Password={empi:database:password};Timeout=15;Connection Idle Lifetime=30;Minimum Pool Size=1;" + MessageStoreConnectionString: "Server={empi:database:host};Database=empi-event-store;User Name={empi:database:username};Password={empi:database:password};Timeout=15;Connection Idle Lifetime=30;Minimum Pool Size=1;" + RmqConnectionUrl: "amqp://{empi:rabbitmq:server:username}:{empi:rabbitmq:server:password}@{empi:rabbitmq:server:host}:{empi:rabbitmq:server:port}" + RmqExchangeName: "vidaplus.empi.exchange" +ConnectionStrings: + ReadCon: Server="{empi:database:host};Database=csi-empi-read;User Name={empi:database:username};Password={empi:database:password};Timeout=15;Connection Idle Lifetime=30;Minimum Pool Size=1;" + WriteCon: Server="{empi:database:host};Database=csi-empi-read;User Name={empi:database:username};Password={empi:database:password};Timeout=15;Connection Idle Lifetime=30;Minimum Pool Size=1;" + EventStoreCon: Server="{empi:database:host};Database=empi-event-store;User Name={empi:database:username};Password={empi:database:password};Timeout=15;Connection Idle Lifetime=30;Minimum Pool Size=1;" +ConsentScreenOptions: + AgeFormat: yy Year mm Months dd Days + AgeNFormat: yy سنة mm شهر dd أيام + DOBArabicFormat: dd/MM/yyyy +UrlOptions: + HijriDateEndpoint: "http://csi-net-empi-hijridte/api/HijriDate/preformatted" + HijriAgeEndpoint: "http://csi-net-empi-hijridte/api/HijriCalculations/preformatted" + GenderEndPoint: "http://csi-pms-rms-masterdata/amd-masterdata/common/getByCode/General/Gender" + NationalityEndPoint: "http://csi-pms-rms-masterdata/amd-masterdata/common/getByCode/EMPI/nationalities" + #UserServiceEndPoint: "https://umm.dev.cloudsolutions.lk/auth/realms/apphiss2vi/csi-user-detail/" + UserServiceEndPoint: "https://csi-iam-service/auth/realms/master/csi-user-detail/" + CSRIntegrationServiceEndPoint: "http://crs-channel/api/Client" + BillingDefaultPayerEndPoint: "http://csi-bm-billing/billing/payer-group/get-default" + BillingSearchPayerContract: "http://csi-bm-billing/billing/payer-contract/search" + BillingSearchPayerPolicy: "http://csi-bm-billing/billing/payer-contract-policies/search" + BloodGroupEndPoint: "http://csi-pms-rms-masterdata/amd-masterdata/common/getByCode/EMPI/bloodgroups" + IHEIntegrationUrl: "http://csi-ie-general/api" + CSRIntegrationServiceFrontEndEndPoint: "http://crs-channel-user/api/Client" + +UseResilientHttp: true +DataPermissionOptions: + #DataPermissionServiceEndPoint: "http://csi-vidaplus-empi-csi-data-permission/" + DataPermissionServiceEndPoint: "http://csi-net-dataperm/" +UserDetailsOptions: + UserServiceEndPoint: "http://service-base-user/" +EmpiMongoDbConnectionOptions: + ConnectionString: "mongodb://{empi:database:nodes}/csi-net-empiread" + DbName: "csi-net-empiread" +MongoLogs: "mongodb://{Mongo:appLogs}/app-logs" +ElasticApm: + ServiceName: CSI-NET-EMPIREAD diff --git a/Config-Server/configrepo/CSI-NET-EMPIREAD_17122021.yml_old b/Config-Server/configrepo/CSI-NET-EMPIREAD_17122021.yml_old new file mode 100755 index 0000000..5a56d12 --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-EMPIREAD_17122021.yml_old @@ -0,0 +1,68 @@ +--- +AppSettings: + CacheDbResults: true + SiteTitle: CSI-NET-EMPIREAD-{env} +kafka: + service_name: CSI-NET-EMPIREAD-{env} +Logging: + IncludeScopes: false + LogLevel: + Default: Debug + Microsoft: Information + System: Information +swaggerschema: + api-title: "EMpi Read Api" + api-title-desc: "EMpi Read Api Desc" +dbConnection: "Server={empi:database:host};Database=csi-empi-read;User Name={empi:database:username};Password={empi:database:password};Timeout=15;Connection Idle Lifetime=30;Minimum Pool Size=1;" +EventStoreConfigOptions: + EventStoreConnectionString: "mongodb://{empi:database:nodes}/csi-empi-events-store" + MessageStoreConnectionString: "mongodb://{empi:database:nodes}/csi-empi-events-store" + RmqConnectionUrl: "amqp://{empi:rabbitmq:server:username}:{empi:rabbitmq:server:password}@{empi:rabbitmq:server:host}:{empi:rabbitmq:server:port}" + RmqExchangeName: "vidaplus.empi.exchange" +BrighterConfigOptions: + EventStoreConnectionString: "Server={empi:database:host};Database=empi-event-store;User Name={empi:database:username};Password={empi:database:password};Timeout=15;Connection Idle Lifetime=30;Minimum Pool Size=1;" + MessageStoreConnectionString: "Server={empi:database:host};Database=empi-event-store;User Name={empi:database:username};Password={empi:database:password};Timeout=15;Connection Idle Lifetime=30;Minimum Pool Size=1;" + RmqConnectionUrl: "amqp://{empi:rabbitmq:server:username}:{empi:rabbitmq:server:password}@{empi:rabbitmq:server:host}:{empi:rabbitmq:server:port}" + RmqExchangeName: "vidaplus.empi.exchange" +ConnectionStrings: + ReadCon: Server="{empi:database:host};Database=csi-empi-read;User Name={empi:database:username};Password={empi:database:password};Timeout=15;Connection Idle Lifetime=30;Minimum Pool Size=1;" + WriteCon: Server="{empi:database:host};Database=csi-empi-read;User Name={empi:database:username};Password={empi:database:password};Timeout=15;Connection Idle Lifetime=30;Minimum Pool Size=1;" + EventStoreCon: Server="{empi:database:host};Database=empi-event-store;User Name={empi:database:username};Password={empi:database:password};Timeout=15;Connection Idle Lifetime=30;Minimum Pool Size=1;" +ConsentScreenOptions: + AgeFormat: yy Year mm Months dd Days + AgeNFormat: yy سنة mm شهر dd أيام + DOBArabicFormat: dd/MM/yyyy +UrlOptions: + HijriDateEndpoint: "http://csi-net-empi-hijridte/api/HijriDate/preformatted" + HijriAgeEndpoint: "http://csi-net-empi-hijridte/api/HijriCalculations/preformatted" + GenderEndPoint: "http://csi-pms-rms-masterdata/amd-masterdata/common/getByCode/General/Gender" + NationalityEndPoint: "http://csi-pms-rms-masterdata/amd-masterdata/common/getByCode/EMPI/nationalities" + #UserServiceEndPoint: "https://umm.dev.cloudsolutions.lk/auth/realms/apphiss2vi/csi-user-detail/" + UserServiceEndPoint: "https://csi-iam-service/auth/realms/master/csi-user-detail/" + CSRIntegrationServiceEndPoint: "http://crs-channel/api/Client" + CSRIntegrationServiceFrontEndEndPoint: "http://crs-channel-user/api/Client" + BillingDefaultPayerEndPoint: "http://csi-bm-billing/billing/payer-group/get-default" + BillingSearchPayerContract: "http://csi-bm-billing/billing/payer-contract/search" + BillingSearchPayerPolicy: "http://csi-bm-billing/billing/payer-contract-policies/search" + BloodGroupEndPoint: "http://csi-pms-rms-masterdata/amd-masterdata/common/getByCode/EMPI/bloodgroups" + IHEIntegrationUrl: "http://csi-ie-general/api" + +UseResilientHttp: true +DataPermissionOptions: + #DataPermissionServiceEndPoint: "http://csi-vidaplus-empi-csi-data-permission/" + DataPermissionServiceEndPoint: "http://csi-net-dataperm/" +UserDetailsOptions: + UserServiceEndPoint: "http://service-base-user/" +EmpiMongoDbConnectionOptions: + ConnectionString: "mongodb://{empi:database:nodes}/csi-net-empiread" + DbName: "csi-net-empiread" +MongoLogs: "mongodb://{Mongo:appLogs}/app-logs" +SetupDataOptions: + SetupDataEndPoint: "http://csi-pms-rms-masterdata" + +BillingSetupDataOptions: + BillingSetupDataEndPoint: "http://csi-bm-billing" + +KafkaEnabled: false +ElasticApm: + ServiceName: CSI-NET-EMPIREAD diff --git a/Config-Server/configrepo/CSI-NET-EMPIREAD_old.yml b/Config-Server/configrepo/CSI-NET-EMPIREAD_old.yml new file mode 100755 index 0000000..5a56d12 --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-EMPIREAD_old.yml @@ -0,0 +1,68 @@ +--- +AppSettings: + CacheDbResults: true + SiteTitle: CSI-NET-EMPIREAD-{env} +kafka: + service_name: CSI-NET-EMPIREAD-{env} +Logging: + IncludeScopes: false + LogLevel: + Default: Debug + Microsoft: Information + System: Information +swaggerschema: + api-title: "EMpi Read Api" + api-title-desc: "EMpi Read Api Desc" +dbConnection: "Server={empi:database:host};Database=csi-empi-read;User Name={empi:database:username};Password={empi:database:password};Timeout=15;Connection Idle Lifetime=30;Minimum Pool Size=1;" +EventStoreConfigOptions: + EventStoreConnectionString: "mongodb://{empi:database:nodes}/csi-empi-events-store" + MessageStoreConnectionString: "mongodb://{empi:database:nodes}/csi-empi-events-store" + RmqConnectionUrl: "amqp://{empi:rabbitmq:server:username}:{empi:rabbitmq:server:password}@{empi:rabbitmq:server:host}:{empi:rabbitmq:server:port}" + RmqExchangeName: "vidaplus.empi.exchange" +BrighterConfigOptions: + EventStoreConnectionString: "Server={empi:database:host};Database=empi-event-store;User Name={empi:database:username};Password={empi:database:password};Timeout=15;Connection Idle Lifetime=30;Minimum Pool Size=1;" + MessageStoreConnectionString: "Server={empi:database:host};Database=empi-event-store;User Name={empi:database:username};Password={empi:database:password};Timeout=15;Connection Idle Lifetime=30;Minimum Pool Size=1;" + RmqConnectionUrl: "amqp://{empi:rabbitmq:server:username}:{empi:rabbitmq:server:password}@{empi:rabbitmq:server:host}:{empi:rabbitmq:server:port}" + RmqExchangeName: "vidaplus.empi.exchange" +ConnectionStrings: + ReadCon: Server="{empi:database:host};Database=csi-empi-read;User Name={empi:database:username};Password={empi:database:password};Timeout=15;Connection Idle Lifetime=30;Minimum Pool Size=1;" + WriteCon: Server="{empi:database:host};Database=csi-empi-read;User Name={empi:database:username};Password={empi:database:password};Timeout=15;Connection Idle Lifetime=30;Minimum Pool Size=1;" + EventStoreCon: Server="{empi:database:host};Database=empi-event-store;User Name={empi:database:username};Password={empi:database:password};Timeout=15;Connection Idle Lifetime=30;Minimum Pool Size=1;" +ConsentScreenOptions: + AgeFormat: yy Year mm Months dd Days + AgeNFormat: yy سنة mm شهر dd أيام + DOBArabicFormat: dd/MM/yyyy +UrlOptions: + HijriDateEndpoint: "http://csi-net-empi-hijridte/api/HijriDate/preformatted" + HijriAgeEndpoint: "http://csi-net-empi-hijridte/api/HijriCalculations/preformatted" + GenderEndPoint: "http://csi-pms-rms-masterdata/amd-masterdata/common/getByCode/General/Gender" + NationalityEndPoint: "http://csi-pms-rms-masterdata/amd-masterdata/common/getByCode/EMPI/nationalities" + #UserServiceEndPoint: "https://umm.dev.cloudsolutions.lk/auth/realms/apphiss2vi/csi-user-detail/" + UserServiceEndPoint: "https://csi-iam-service/auth/realms/master/csi-user-detail/" + CSRIntegrationServiceEndPoint: "http://crs-channel/api/Client" + CSRIntegrationServiceFrontEndEndPoint: "http://crs-channel-user/api/Client" + BillingDefaultPayerEndPoint: "http://csi-bm-billing/billing/payer-group/get-default" + BillingSearchPayerContract: "http://csi-bm-billing/billing/payer-contract/search" + BillingSearchPayerPolicy: "http://csi-bm-billing/billing/payer-contract-policies/search" + BloodGroupEndPoint: "http://csi-pms-rms-masterdata/amd-masterdata/common/getByCode/EMPI/bloodgroups" + IHEIntegrationUrl: "http://csi-ie-general/api" + +UseResilientHttp: true +DataPermissionOptions: + #DataPermissionServiceEndPoint: "http://csi-vidaplus-empi-csi-data-permission/" + DataPermissionServiceEndPoint: "http://csi-net-dataperm/" +UserDetailsOptions: + UserServiceEndPoint: "http://service-base-user/" +EmpiMongoDbConnectionOptions: + ConnectionString: "mongodb://{empi:database:nodes}/csi-net-empiread" + DbName: "csi-net-empiread" +MongoLogs: "mongodb://{Mongo:appLogs}/app-logs" +SetupDataOptions: + SetupDataEndPoint: "http://csi-pms-rms-masterdata" + +BillingSetupDataOptions: + BillingSetupDataEndPoint: "http://csi-bm-billing" + +KafkaEnabled: false +ElasticApm: + ServiceName: CSI-NET-EMPIREAD diff --git a/Config-Server/configrepo/CSI-NET-EMPIWRIT.yml b/Config-Server/configrepo/CSI-NET-EMPIWRIT.yml new file mode 100755 index 0000000..46d3442 --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-EMPIWRIT.yml @@ -0,0 +1,82 @@ +--- +AppSettings: + CacheDbResults: true + SiteTitle: CSI-NET-EMPIWRIT-{env} +kafka: + service_name: CSI-NET-EMPIWRIT-{env} +Logging: + IncludeScopes: false + LogLevel: + Default: Debug + Microsoft: Information + System: Information +swaggerschema: + api-title: "EMpi Api" + api-title-desc: "EMpi Api Desc" +UserRolePermissionOptions: + fileType: + Edit: "" + View: "" + approvalToProcceedWithoutId: + Edit: "DOCTOR,ADMIN,NURSE" + View: "" + +DataPermissionOptions: + DataPermissionServiceEndPoint: "http://csi-net-dataperm/" + +UserDetailsOptions: + UserServiceEndPoint: "http://csi-iam-service/auth/realms/master/csi-user-detail/" + +UrlOptions: + FormTemplateUrl: "http://csi-net-empiread/api/RegistrationFormTemplate" + PatientSearchServiceUrl: "http://csi-net-empiread/api/patient" + BillingGetAccountIdUrl: "http://csi-bm-invoice/billing/account/create" + UserServiceEndPoint: "http://csi-iam-service/auth/realms/master/csi-user-detail/" + BillingDefaultPayerEndPoint: "http://csi-bm-billing/billing/payer-group/get-default" + BillingSearchPayerContract: "http://csi-bm-billing/billing/payer-contract/search" + BillingSearchPayerPolicy: "http://csi-bm-billing/billing/payer-contract-policies/search" + BaseUtilityServiceUrl: "http://csi-java-base-utility" + EHRPatientPOMRUrl: "http://csi-java-ehr-patient-pomr" + RMSReservationServiceUrl: "http://csi-pms-rms-reservation" + ADTRequestUrl: "http://csi-pms-adt-request" + EHRPatientIpUrl: "http://csi-java-ehr-ip/ehr/ip/doctor/read/carePlan/getMrpIdsAndNursingGroupId" + PHRRequestUrl: "http://csi-phr-base/api/v1.0/masterData/txnUsersList" + LABRequestUrl: "http://csi-net-labsrvcs/api/UserManagement/AllUsersForLabRoles" + RMSResourceRegistryUrl: "http://csi-pms-rms-resource-registry/amd-doctor/search" + IEGenaralUrl: "http://csi-ie-general/api/patient" + +writeDbConnection: Server={empi:database:host};Database=empi-event-store;User Name={empi:database:username};Password={empi:database:password} + +BrighterConfigOptions: + EventStoreConnectionString: "Server={empi:database:host};Database=empi-event-store;User Name={empi:database:username};Password={empi:database:password}" + MessageStoreConnectionString: "Server={empi:database:host};Database=empi-event-store;User Name={empi:database:username};Password={empi:database:password}" + RmqConnectionUrl: "amqp://{empi:rabbitmq:server:username}:{empi:rabbitmq:server:password}@{empi:rabbitmq:server:host}:{empi:rabbitmq:server:port}" + RmqExchangeName: "vidaplus.empi.exchange" + +EventStoreConfigOptions: + EventStoreConnectionString: "mongodb://{empi:database:nodes}/csi-empi-events-store" + MessageStoreConnectionString: "mongodb://{empi:database:nodes}/csi-empi-events-store" + RmqConnectionUrl: "amqp://{empi:rabbitmq:server:username}:{empi:rabbitmq:server:password}@{empi:rabbitmq:server:host}:{empi:rabbitmq:server:port}" + RmqExchangeName: "vidaplus.empi.exchange" + +NotificationsConfigOptions: + EventStoreConnectionString: "" + MessageStoreConnectionString: "" + RmqConnectionUrl: "amqp://{empi:rabbitmq:server:username}:{empi:rabbitmq:server:password}@{empi:rabbitmq:server:host}:{empi:rabbitmq:server:port}" + RmqExchangeName: "notifications.exchange" + +ServiceUrls: + UserPermission: http://service-base-security-token/token/logged-in-user + +MongoLogs: "mongodb://{Mongo:appLogs}/app-logs" +SetupDataOptions: + SetupDataEndPoint: "http://csi-pms-rms-masterdata" + +BillingSetupDataOptions: + BillingSetupDataEndPoint: "http://csi-bm-billing" +KafkaEnabled: true +MaximumPatientAgeLimitYears: 150 +ElasticApm: + ServiceName: CSI-NET-EMPIWRIT + +SetSelfForUnknownPatientInsurance: true diff --git a/Config-Server/configrepo/CSI-NET-EMPIWRIT.yml_bk20211112 b/Config-Server/configrepo/CSI-NET-EMPIWRIT.yml_bk20211112 new file mode 100755 index 0000000..01d435c --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-EMPIWRIT.yml_bk20211112 @@ -0,0 +1,78 @@ +--- +AppSettings: + CacheDbResults: true + SiteTitle: CSI-NET-EMPIWRIT-{env} +kafka: + service_name: CSI-NET-EMPIWRIT-{env} +Logging: + IncludeScopes: false + LogLevel: + Default: Debug + Microsoft: Information + System: Information +swaggerschema: + api-title: "EMpi Api" + api-title-desc: "EMpi Api Desc" +UserRolePermissionOptions: + fileType: + Edit: "" + View: "" + approvalToProcceedWithoutId: + Edit: "DOCTOR,ADMIN,NURSE" + View: "" + +DataPermissionOptions: + DataPermissionServiceEndPoint: "http://csi-net-dataperm/" + +UserDetailsOptions: + UserServiceEndPoint: "http://csi-iam-service/auth/realms/master/csi-user-detail/" + +UrlOptions: + FormTemplateUrl: "http://csi-net-empiread/api/RegistrationFormTemplate" + PatientSearchServiceUrl: "http://csi-net-empiread/api/patient" + BillingGetAccountIdUrl: "http://csi-bm-invoice/billing/account/create" + UserServiceEndPoint: "http://csi-iam-service/auth/realms/master/csi-user-detail/" + BillingDefaultPayerEndPoint: "http://csi-bm-billing/billing/payer-group/get-default" + BillingSearchPayerContract: "http://csi-bm-billing/billing/payer-contract/search" + BillingSearchPayerPolicy: "http://csi-bm-billing/billing/payer-contract-policies/search" + BaseUtilityServiceUrl: "http://csi-java-base-utility" + EHRPatientPOMRUrl: "http://csi-java-ehr-patient-pomr" + RMSReservationServiceUrl: "http://csi-pms-rms-reservation" + ADTRequestUrl: "http://csi-pms-adt-request" + EHRPatientIpUrl: "http://csi-java-ehr-ip/ehr/ip/doctor/read/carePlan/getMrpIdsAndNursingGroupId" + PHRRequestUrl: "http://csi-phr-base/api/v1.0/masterData/txnUsersList" + LABRequestUrl: "http://csi-net-labsrvcs/api/UserManagement/AllUsersForLabRoles" + RMSResourceRegistryUrl: "http://csi-pms-rms-resource-registry/amd-doctor/search" + IEGenaralUrl: "http://csi-ie-general/api/patient" + +writeDbConnection: Server={empi:database:host};Database=empi-event-store;User Name={empi:database:username};Password={empi:database:password} + +BrighterConfigOptions: + EventStoreConnectionString: "Server={empi:database:host};Database=empi-event-store;User Name={empi:database:username};Password={empi:database:password}" + MessageStoreConnectionString: "Server={empi:database:host};Database=empi-event-store;User Name={empi:database:username};Password={empi:database:password}" + RmqConnectionUrl: "amqp://{empi:rabbitmq:server:username}:{empi:rabbitmq:server:password}@{empi:rabbitmq:server:host}:{empi:rabbitmq:server:port}" + RmqExchangeName: "vidaplus.empi.exchange" + +EventStoreConfigOptions: + EventStoreConnectionString: "mongodb://{empi:database:nodes}/csi-empi-events-store" + MessageStoreConnectionString: "mongodb://{empi:database:nodes}/csi-empi-events-store" + RmqConnectionUrl: "amqp://{empi:rabbitmq:server:username}:{empi:rabbitmq:server:password}@{empi:rabbitmq:server:host}:{empi:rabbitmq:server:port}" + RmqExchangeName: "vidaplus.empi.exchange" + +NotificationsConfigOptions: + EventStoreConnectionString: "" + MessageStoreConnectionString: "" + RmqConnectionUrl: "amqp://{empi:rabbitmq:server:username}:{empi:rabbitmq:server:password}@{empi:rabbitmq:server:host}:{empi:rabbitmq:server:port}" + RmqExchangeName: "notifications.exchange" + +ServiceUrls: + UserPermission: http://service-base-security-token/token/logged-in-user + +MongoLogs: "mongodb://{Mongo:appLogs}/app-logs" +SetupDataOptions: + SetupDataEndPoint: "http://csi-pms-rms-masterdata" + +BillingSetupDataOptions: + BillingSetupDataEndPoint: "http://csi-bm-billing" +ElasticApm: + ServiceName: CSI-NET-EMPIWRIT diff --git a/Config-Server/configrepo/CSI-NET-EMPIWRIT_17122021.yml_old b/Config-Server/configrepo/CSI-NET-EMPIWRIT_17122021.yml_old new file mode 100755 index 0000000..419f226 --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-EMPIWRIT_17122021.yml_old @@ -0,0 +1,80 @@ +--- +AppSettings: + CacheDbResults: true + SiteTitle: CSI-NET-EMPIWRIT-{env} +kafka: + service_name: CSI-NET-EMPIWRIT-{env} +Logging: + IncludeScopes: false + LogLevel: + Default: Debug + Microsoft: Information + System: Information +swaggerschema: + api-title: "EMpi Api" + api-title-desc: "EMpi Api Desc" +UserRolePermissionOptions: + fileType: + Edit: "" + View: "" + approvalToProcceedWithoutId: + Edit: "DOCTOR,ADMIN,NURSE" + View: "" + +DataPermissionOptions: + DataPermissionServiceEndPoint: "http://csi-net-dataperm/" + +UserDetailsOptions: + UserServiceEndPoint: "http://csi-iam-service/auth/realms/master/csi-user-detail/" + +UrlOptions: + FormTemplateUrl: "http://csi-net-empiread/api/RegistrationFormTemplate" + PatientSearchServiceUrl: "http://csi-net-empiread/api/patient" + BillingGetAccountIdUrl: "http://csi-bm-invoice/billing/account/create" + UserServiceEndPoint: "http://csi-iam-service/auth/realms/master/csi-user-detail/" + BillingDefaultPayerEndPoint: "http://csi-bm-billing/billing/payer-group/get-default" + BillingSearchPayerContract: "http://csi-bm-billing/billing/payer-contract/search" + BillingSearchPayerPolicy: "http://csi-bm-billing/billing/payer-contract-policies/search" + BaseUtilityServiceUrl: "http://csi-java-base-utility" + EHRPatientPOMRUrl: "http://csi-java-ehr-patient-pomr" + RMSReservationServiceUrl: "http://csi-pms-rms-reservation" + ADTRequestUrl: "http://csi-pms-adt-request" + EHRPatientIpUrl: "http://csi-java-ehr-ip/ehr/ip/doctor/read/carePlan/getMrpIdsAndNursingGroupId" + PHRRequestUrl: "http://csi-phr-base/api/v1.0/masterData/txnUsersList" + LABRequestUrl: "http://csi-net-labsrvcs/api/UserManagement/AllUsersForLabRoles" + RMSResourceRegistryUrl: "http://csi-pms-rms-resource-registry/amd-doctor/search" + IEGenaralUrl: "http://csi-ie-general/api/patient" + +writeDbConnection: Server={empi:database:host};Database=empi-event-store;User Name={empi:database:username};Password={empi:database:password} + +BrighterConfigOptions: + EventStoreConnectionString: "Server={empi:database:host};Database=empi-event-store;User Name={empi:database:username};Password={empi:database:password}" + MessageStoreConnectionString: "Server={empi:database:host};Database=empi-event-store;User Name={empi:database:username};Password={empi:database:password}" + RmqConnectionUrl: "amqp://{empi:rabbitmq:server:username}:{empi:rabbitmq:server:password}@{empi:rabbitmq:server:host}:{empi:rabbitmq:server:port}" + RmqExchangeName: "vidaplus.empi.exchange" + +EventStoreConfigOptions: + EventStoreConnectionString: "mongodb://{empi:database:nodes}/csi-empi-events-store" + MessageStoreConnectionString: "mongodb://{empi:database:nodes}/csi-empi-events-store" + RmqConnectionUrl: "amqp://{empi:rabbitmq:server:username}:{empi:rabbitmq:server:password}@{empi:rabbitmq:server:host}:{empi:rabbitmq:server:port}" + RmqExchangeName: "vidaplus.empi.exchange" + +NotificationsConfigOptions: + EventStoreConnectionString: "" + MessageStoreConnectionString: "" + RmqConnectionUrl: "amqp://{empi:rabbitmq:server:username}:{empi:rabbitmq:server:password}@{empi:rabbitmq:server:host}:{empi:rabbitmq:server:port}" + RmqExchangeName: "notifications.exchange" + +ServiceUrls: + UserPermission: http://service-base-security-token/token/logged-in-user + +MongoLogs: "mongodb://{Mongo:appLogs}/app-logs" +SetupDataOptions: + SetupDataEndPoint: "http://csi-pms-rms-masterdata" + +BillingSetupDataOptions: + BillingSetupDataEndPoint: "http://csi-bm-billing" +KafkaEnabled: false +MaximumPatientAgeLimitYears: 150 +ElasticApm: + ServiceName: CSI-NET-EMPIWRIT diff --git a/Config-Server/configrepo/CSI-NET-EMPIWRIT_old.yml b/Config-Server/configrepo/CSI-NET-EMPIWRIT_old.yml new file mode 100755 index 0000000..419f226 --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-EMPIWRIT_old.yml @@ -0,0 +1,80 @@ +--- +AppSettings: + CacheDbResults: true + SiteTitle: CSI-NET-EMPIWRIT-{env} +kafka: + service_name: CSI-NET-EMPIWRIT-{env} +Logging: + IncludeScopes: false + LogLevel: + Default: Debug + Microsoft: Information + System: Information +swaggerschema: + api-title: "EMpi Api" + api-title-desc: "EMpi Api Desc" +UserRolePermissionOptions: + fileType: + Edit: "" + View: "" + approvalToProcceedWithoutId: + Edit: "DOCTOR,ADMIN,NURSE" + View: "" + +DataPermissionOptions: + DataPermissionServiceEndPoint: "http://csi-net-dataperm/" + +UserDetailsOptions: + UserServiceEndPoint: "http://csi-iam-service/auth/realms/master/csi-user-detail/" + +UrlOptions: + FormTemplateUrl: "http://csi-net-empiread/api/RegistrationFormTemplate" + PatientSearchServiceUrl: "http://csi-net-empiread/api/patient" + BillingGetAccountIdUrl: "http://csi-bm-invoice/billing/account/create" + UserServiceEndPoint: "http://csi-iam-service/auth/realms/master/csi-user-detail/" + BillingDefaultPayerEndPoint: "http://csi-bm-billing/billing/payer-group/get-default" + BillingSearchPayerContract: "http://csi-bm-billing/billing/payer-contract/search" + BillingSearchPayerPolicy: "http://csi-bm-billing/billing/payer-contract-policies/search" + BaseUtilityServiceUrl: "http://csi-java-base-utility" + EHRPatientPOMRUrl: "http://csi-java-ehr-patient-pomr" + RMSReservationServiceUrl: "http://csi-pms-rms-reservation" + ADTRequestUrl: "http://csi-pms-adt-request" + EHRPatientIpUrl: "http://csi-java-ehr-ip/ehr/ip/doctor/read/carePlan/getMrpIdsAndNursingGroupId" + PHRRequestUrl: "http://csi-phr-base/api/v1.0/masterData/txnUsersList" + LABRequestUrl: "http://csi-net-labsrvcs/api/UserManagement/AllUsersForLabRoles" + RMSResourceRegistryUrl: "http://csi-pms-rms-resource-registry/amd-doctor/search" + IEGenaralUrl: "http://csi-ie-general/api/patient" + +writeDbConnection: Server={empi:database:host};Database=empi-event-store;User Name={empi:database:username};Password={empi:database:password} + +BrighterConfigOptions: + EventStoreConnectionString: "Server={empi:database:host};Database=empi-event-store;User Name={empi:database:username};Password={empi:database:password}" + MessageStoreConnectionString: "Server={empi:database:host};Database=empi-event-store;User Name={empi:database:username};Password={empi:database:password}" + RmqConnectionUrl: "amqp://{empi:rabbitmq:server:username}:{empi:rabbitmq:server:password}@{empi:rabbitmq:server:host}:{empi:rabbitmq:server:port}" + RmqExchangeName: "vidaplus.empi.exchange" + +EventStoreConfigOptions: + EventStoreConnectionString: "mongodb://{empi:database:nodes}/csi-empi-events-store" + MessageStoreConnectionString: "mongodb://{empi:database:nodes}/csi-empi-events-store" + RmqConnectionUrl: "amqp://{empi:rabbitmq:server:username}:{empi:rabbitmq:server:password}@{empi:rabbitmq:server:host}:{empi:rabbitmq:server:port}" + RmqExchangeName: "vidaplus.empi.exchange" + +NotificationsConfigOptions: + EventStoreConnectionString: "" + MessageStoreConnectionString: "" + RmqConnectionUrl: "amqp://{empi:rabbitmq:server:username}:{empi:rabbitmq:server:password}@{empi:rabbitmq:server:host}:{empi:rabbitmq:server:port}" + RmqExchangeName: "notifications.exchange" + +ServiceUrls: + UserPermission: http://service-base-security-token/token/logged-in-user + +MongoLogs: "mongodb://{Mongo:appLogs}/app-logs" +SetupDataOptions: + SetupDataEndPoint: "http://csi-pms-rms-masterdata" + +BillingSetupDataOptions: + BillingSetupDataEndPoint: "http://csi-bm-billing" +KafkaEnabled: false +MaximumPatientAgeLimitYears: 150 +ElasticApm: + ServiceName: CSI-NET-EMPIWRIT diff --git a/Config-Server/configrepo/CSI-NET-ERFUNCTI.yml b/Config-Server/configrepo/CSI-NET-ERFUNCTI.yml new file mode 100755 index 0000000..18b9e57 --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-ERFUNCTI.yml @@ -0,0 +1,86 @@ +AppSettings: + SiteTitle: CSI-NET-ERFUNCTI-{env} + +PostgreSQL: + ReadCon: "Host={database:host};Port={database:port};Database={database:erFuncti:dbName};User Id={database:erFuncti:userId};Password={database:erFuncti:password};" + WriteCon: "Host={database:host};Port={database:port};Database={database:erFuncti:dbName};User Id={database:erFuncti:userId};Password={database:erFuncti:password};" +#Oracle: +# ReadCon: "Data Source=(description=(CONNECT_TIMEOUT={database:connectTimeout})(RETRY_COUNT={database:retryCount})(RETRY_DELAY={database:retryDelay})(TRANSPORT_CONNECT_TIMEOUT={database:transportConnecttimeout})(address=(host={database:primaryHost})(protocol=tcp)(port={database:port}))(address=(host={database:secondaryHost})(protocol=tcp)(port={database:port}))(failover=yes)(connect_data=(service_name={database:serviceName})(failover_mode=(type=select)(method=basic))));User Id={database:erFuncti:userId};Password={database:erFuncti:password};Password={database:erFuncti:password};Max Pool Size={database:maxPoolsize};Connection Timeout={database:connectionTimeout}" +# WriteCon: "Data Source=(description=(CONNECT_TIMEOUT={database:connectTimeout})(RETRY_COUNT={database:retryCount})(RETRY_DELAY={database:retryDelay})(TRANSPORT_CONNECT_TIMEOUT={database:transportConnecttimeout})(address=(host={database:primaryHost})(protocol=tcp)(port={database:port}))(address=(host={database:secondaryHost})(protocol=tcp)(port={database:port}))(failover=yes)(connect_data=(service_name={database:serviceName})(failover_mode=(type=select)(method=basic))));User Id={database:erFuncti:userId};Password={database:erFuncti:password};Password={database:erFuncti:password};Max Pool Size={database:maxPoolsize};Connection Timeout={database:connectionTimeout}" + +#Oracle: + # ReadCon: "Data Source=(description=(address=(host={database:primaryHost})(protocol=tcp)(port={database:port}))(address=(host={database:secondaryHost})(protocol=tcp)(port={database:port}))(failover=yes)(connect_data=(service_name={database:serviceName})(failover_mode=(type=select)(method=basic))));User Id={database:erFuncti:userId};Password={database:erFuncti:password}" + #WriteCon: "Data Source=(description=(address=(host={database:primaryHost})(protocol=tcp)(port={database:port}))(address=(host={database:secondaryHost})(protocol=tcp)(port={database:port}))(failover=yes)(connect_data=(service_name={database:serviceName})(failover_mode=(type=select)(method=basic))));User Id={database:erFuncti:userId};Password={database:erFuncti:password}" + +IsKafkaQueueEnv: false +kafka: + service_name: CSI-NET-ERFUNCTI-{env} + kafka_group_id: er-kafka-group-{env} + adt_discharge_topic: adt-discharge.t + empi_register-patient_topic: csi.vidaplus.empi.events.unknownpatientcreatedevent + admission_request_update_topic: adt-update-admission-request-notification + empi_register-patient_bulk_topic: csi.vidaplus.empi.events.bulkunknownpatientscreatedevent + kafka_topics: "er-register-patient,er-register-patient-bulk,discharge-exchange,nurse-task-queue" + kafka_him_charting_component: + topic: "{env}-him-charting-component" + nurse_task_topic: nurse-task-queue + empi_patient_update_topic: csi.vidaplus.empi.events.patienteditedevent + adt-admission-response-topic: adt-admission-generated-response.t + bm-er-consultation-invoice-topic : bm-er-consultation-invoice + mrg-work-list: mrg-work-list + er-doctor-details-topic: kafka_er_doctor_details + adt-discharge-topic: adt-discharge-request.t + er-patient-assignment-details-topic : patient-assignment-details-topic + er_patient_journey : kafka-er-patient-journey +rabbitmq: + exchnage: + exchangeName: vidaplus.empi.exchange + type: topic + durable: true + exclusive: false + autoDelete: false + queue: + name: er-register-patient + routekey: csi.vidaplus.empi.events.unknownpatientcreatedevent + durable: true + exclusive: false + autoDelete: false + queueBulk: + name: er-register-patient-bulk + routekey: csi.vidaplus.empi.events.bulkunknownpatientscreatedevent + durable: true + exclusive: false + autoDelete: false + createPatient: + name: er-create-patient + routekey: csi.vidaplus.empi.events.patientcreatedevent + durable: true + exclusive: false + autoDelete: false + editPatient: + name: er-edit-patient + routekey: csi.vidaplus.empi.events.patienteditedevent + durable: true + exclusive: false + autoDelete: false + dischargeExchange: + exchangeName: discharge-exchange + type: direct + durable: true + exclusive: false + autoDelete: false + nurseTaskQueue: + name: nurse-task-queue + routekey: discharge-init + durable: true + exclusive: false + autoDelete: false +Report: + Mongo: + Collection: "ERFUNCTI" +RabbitMQ: + Mongo: + Collection: "ERFUNCTI" + +ElasticApm: + ServiceName: CSI-NET-ERFUNCTI diff --git a/Config-Server/configrepo/CSI-NET-HEALTH-CHECK.yml b/Config-Server/configrepo/CSI-NET-HEALTH-CHECK.yml new file mode 100755 index 0000000..ec8945d --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-HEALTH-CHECK.yml @@ -0,0 +1,24 @@ +GlobalConfigs: + RabbitMqConfig: "HostName={HealthChecker:Global:Rabbit:Ip}; UserName={HealthChecker:Global:Rabbit:UserName}; Password={HealthChecker:Global:Rabbit:Password};" +HealthCheckConfigs: + ConnectionStrings: + DataBaseReadViewName: "READ DB CONTEXT" + DataBaseWriteViewName: "WRITE DB CONTEXT" + DefaultConnectionString: "Server=CSI-ASHAN;Database=WideWorldImporters;User ID=sa;Password=pass#word1;Trusted_Connection=False;" + DefaultConnectionStringViewName: "DATABASE CONNECTIVITY" + DbContextViewName: "DB CONTEXT STORE" + HealthAction: /health + HealthCheckDbName: healthchecksdb + HealthClientEndPoint: /health-ui + MemoryConfigs: + MemoryThreshldBytes: 3072 + MemoryViewName: MEMORY + RabbitMqViewName: "RABBIT MQ" + ServerDrive: + DrivePartition: "C:\\," + HealthPartitionCapacity: 50000 + ViewValue: DRIVE + StyleUri: ../HEALTH.CHECK.UTIL/HealthCheckStyles/HealthCheck.css + +ElasticApm: + ServiceName: CSI-NET-HEALTH-CHECK diff --git a/Config-Server/configrepo/CSI-NET-HEMDIALY.yml b/Config-Server/configrepo/CSI-NET-HEMDIALY.yml new file mode 100755 index 0000000..1b09a2f --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-HEMDIALY.yml @@ -0,0 +1,146 @@ +AppSettings: + CacheDbResults: true + SiteTitle: CSI-HEM-WR-{env} +kafka: + service_name: CSI-HEM-WR-{env} + enableautocommit: true + autocommitintervalms: 5000 + autooffsetreset: "latest" + admissiongroupid: "3995405ehdf#df" + apointmentgroupid: "17309927#dgfh" + topic: + admission: "adt-admission-generated-response.t" + apointment: "appointment" + RenalPatientStatus: "renal-patient-status" + RenalRunsheetStatus: "renal-runsheet-status" + reservation: + topic: "rms-reservation-notification" + reservationgroupid: "rmsreservationnotification#group" + ehr_custom_order: + topic: "ehr-custom-order-queue" + ehr_delete_patient_order: + topic: "ehr-delete-patient-order" + empi_patient_update: + topic: "csi.vidaplus.empi.events.patienteditedevent" + empi_patient_merge: + topic: "csi.vidaplus.empi.events.patientmergedevent" + empi_patient_add: + topic: "csi.vidaplus.empi.events.patientcreatedevent" + + kafka_group: renal_kafka_group + +PostgreSQL: + ReadCon: "Host={database:host};Port={database:port};Database={database:renal:dbName};User Id={database:renal:userId};Password={database:renal:password};" + WriteCon: "Host={database:host};Port={database:port};Database={database:renal:dbName};User Id={database:renal:userId};Password={database:renal:password};" +#Oracle: + #ReadCon: "Data Source=(description=(address=(host={database:primaryHost})(protocol=tcp)(port={database:port}))(address=(host={database:secondaryHost})(protocol=tcp)(port={database:port}))(failover=yes)(connect_data=(service_name={database:serviceName})(failover_mode=(type=select)(method=basic))));User Id={database:renal:userId};Password={database:renal:password}" + #WriteCon: "Data Source=(description=(address=(host={database:primaryHost})(protocol=tcp)(port={database:port}))(address=(host={database:secondaryHost})(protocol=tcp)(port={database:port}))(failover=yes)(connect_data=(service_name={database:serviceName})(failover_mode=(type=select)(method=basic))));User Id={database:renal:userId};Password={database:renal:password}" + +Logging: + IncludeScopes: false + LogLevel: + Default: Debug + Microsoft: Information + System: Information + +Utilities: + Images: + ImgAllMachines: /csi-net-hemdialy/images/all-machines.png + ImgConfirmPatient: /csi-net-hemdialy/images/confirm-patient.png + ImgNurse: /csi-net-hemdialy/images/nurse.png + ImgOnboardPatient: /csi-net-hemdialy/images/onboard-patient.png + +TestVal: testvalue +contextSkipOn: "REN_Appointment" +serviceurls: + UserManagement: "http://172.16.16.109/service-base-security-token/" +rabbitmq: + ehrexchnage: + exchangeName: ehr-custom-order-exchange + type: fanout + durable: true + exclusive: false + autoDelete: false + ehrqueue: + name: ehr-custom-order-queue + routekey: ehr-custom-order-queue + durable: true + exclusive: false + autoDelete: false + referralexchange: + exchangename: referral-exchange + type: topic + durable: false + exclusive: false + autoDelete: false + hemodialysisqueue: + name: hemodialysis-queue + routekey: hemodialysis-queue + durable: true + exclusive: false + autoDelete: false + empiexchnage: + exchangeName: vidaplus.empi.exchange + type: topic + durable: true + exclusive: false + autoDelete: false + empiqueue: + name: hemodialysis-patient-update + routekey: csi.vidaplus.empi.events.patienteditedevent + durable: true + exclusive: false + autoDelete: false + empipatientmergequeue: + name: renal-patient-merge + routekey: csi.vidaplus.empi.events.patientmergedevent + durable: true + exclusive: false + autoDelete: false + empipatientaddqueue: + name: renal-patient-add + routekey: csi.vidaplus.empi.events.patientcreatedevent + durable: true + exclusive: false + autoDelete: false +rabbitmqqa: + referralexchange: + exchangename: referral-exchange + type: topic + durable: false + exclusive: false + autoDelete: false + hemodialysisqueue: + name: hemodialysis-queue + routekey: hemodialysis-queue + durable: true + exclusive: false + autoDelete: false + hemodialysisqueueDev: + name: hemodialysis-queue-dev + routekey: hemodialysis-queue + durable: true + exclusive: false + autoDelete: false + +UnitId: + HEMO01: 550 +systemuser: + username: "rojjer@abcd.com" + password: "ABcde@1234" + passwordR: "123" + usernameR: Omar +Report: + Mongo: + Collection: "RENAL" +RabbitMQ: + Mongo: + Collection: "RENAL" +MongoLogs: "mongodb://{empi:database:nodes}/app-logs" + +# Elastic Apm Ends ============================================== + +ElasticApm: + ServiceName: "CSI-NET-HEMDIALY" + +# Service Specific URL Start ============================================== diff --git a/Config-Server/configrepo/CSI-NET-HHC.yml b/Config-Server/configrepo/CSI-NET-HHC.yml new file mode 100644 index 0000000..b97d13f --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-HHC.yml @@ -0,0 +1,33 @@ +--- +AppSettings: + CacheDbResults: true + SiteTitle: "CSI-NET-HHC-{env}" +ConnectionStrings: + ReadCon: "Data Source=(DESCRIPTION=(CONNECT_TIMEOUT={database:connectTimeout})(RETRY_COUNT={database:retryCount})(RETRY_DELAY={database:retryDelay})(TRANSPORT_CONNECT_TIMEOUT={database:transportConnecttimeout})(ADDRESS=(PROTOCOL=TCP)(HOST={database:host})(PORT={database:port}))(CONNECT_DATA=(SERVICE_NAME={database:serviceName})));User Id={database:hhc:userId};Password={database:hhc:password};Max Pool Size={database:maxPoolsize};Connection Timeout={database:connectionTimeout}" + WriteCon: "Data Source=(DESCRIPTION=(CONNECT_TIMEOUT={database:connectTimeout})(RETRY_COUNT={database:retryCount})(RETRY_DELAY={database:retryDelay})(TRANSPORT_CONNECT_TIMEOUT={database:transportConnecttimeout})(ADDRESS=(PROTOCOL=TCP)(HOST={database:host})(PORT={database:port}))(CONNECT_DATA=(SERVICE_NAME={database:serviceName})));User Id={database:hhc:userId};Password={database:hhc:password};Max Pool Size={database:maxPoolsize};Connection Timeout={database:connectionTimeout}" +ElasticApm: + ServiceName: CSI-NET-HHC +Logging: + IncludeScopes: false + LogLevel: + Default: Debug + Microsoft: Information + System: Information +UrlOptions: + AdtRequestEndPoint: "http://csi-pms-adt-request" + BillingEndPoint: "http://csi-bm-billing" + EhrCommonEndPoint: "http://csi-java-ehr-common" + EhrOpdEndPoint: "https://csi-java-ehr-opd" + EhrOpdNetEndPoint: "http://csi-net-ehr-opd-patient" + EhrOpdRiskAssessmentEndPoint: "http://csi-java-ehr-opd-riskassessment" + EhrPomrEndPoint: "http://csi-java-ehr-patient-pomr" + EmpiReadEndPoint: "http://csi-net-empiread" + EmpiWriteEndPoint: "http://csi-net-empiwrit" + RmsSchduleEndPoint: "http://csi-pms-rms-schedule" + SetupDataEndPoint: "http://csi-pms-rms-masterdata" +UseResilientHttp: true +ReadCon: "Pooling=false;Data Source=10.201.206.40:1521/PERFPDB1;User Id=CSI_HCC;Password= mt5WYvzY48rQ;" +WriteCon: "Pooling=false;Data Source=10.201.206.40:1521/PERFPDB1;User Id=CSI_HCC;Password= mt5WYvzY48rQ;" +kafka: + referral-status-topic: hhc-referral-status + service_name: "CSI-NET-HHC-{env}" diff --git a/Config-Server/configrepo/CSI-NET-HIMSERVI.yml b/Config-Server/configrepo/CSI-NET-HIMSERVI.yml new file mode 100755 index 0000000..c935dc5 --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-HIMSERVI.yml @@ -0,0 +1,30 @@ +AppSettings: + SiteTitle: CSI-NET-HIMSERVI-{env} + +PostgreSQL: + ReadCon: "Host={database:host};Port={database:port};Database={database:himServi:dbName};User Id={database:himServi:userId};Password={database:himServi:password};" + WriteCon: "Host={database:host};Port={database:port};Database={database:himServi:dbName};User Id={database:himServi:userId};Password={database:himServi:password};" +Oracle: + ReadCon: "Data Source=(description=(address=(host={database:primaryHost})(protocol=tcp)(port={database:port}))(address=(host={database:secondaryHost})(protocol=tcp)(port={database:port}))(failover=yes)(connect_data=(service_name={database:serviceName})(failover_mode=(type=select)(method=basic))));User Id={database:himServi:userId};Password={database:himServi:password}" + WriteCon: "Data Source=(description=(address=(host={database:primaryHost})(protocol=tcp)(port={database:port}))(address=(host={database:secondaryHost})(protocol=tcp)(port={database:port}))(failover=yes)(connect_data=(service_name={database:serviceName})(failover_mode=(type=select)(method=basic))));User Id={database:himServi:userId};Password={database:himServi:password}" + +kafka: + service_name: CSI-NET-HIMSERVI-{env} + kafka_group_id: "{env}-him-kafka-group" + kafka_him_charting_component: + topic: "{env}-him-charting-component" + empi_patient_update_topic: csi.vidaplus.empi.events.patienteditedevent + critical_lab_result_topic: csi.net.labsrvcs.status + +Report: + Mongo: + Collection: "HIMSERVI" + +RabbitMQ: + Mongo: + Collection: "HIMSERVI" + +ElasticApm: + ServiceName: CSI-NET-HIMSERVI + +IsAccessRequestCheckerEnable: false diff --git a/Config-Server/configrepo/CSI-NET-LAB-SCHEDULED.yml b/Config-Server/configrepo/CSI-NET-LAB-SCHEDULED.yml new file mode 100755 index 0000000..449461f --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-LAB-SCHEDULED.yml @@ -0,0 +1,32 @@ +--- +AppSettings: + CacheDbResults: true + SiteTitle: "CSI-NET-LAB-SCHEDULED-{env}" +PostgreSQL: + ReadCon: "Host={database:host};Port={database:port};Database={database:lab:dbName};User Id={database:lab:userId};Password={database:lab:password};" + WriteCon: "Host={database:host};Port={database:port};Database={database:lab:dbName};User Id={database:lab:userId};Password={database:lab:password};" +#Oracle: +# ReadCon: "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST={database:host})(PORT={database:port}))(CONNECT_DATA=(SERVICE_NAME={database:serviceName})));User Id={database:lab:userId};Password={database:lab:password};Max Pool Size=50;Connection Timeout=30" +# WriteCon: "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST={database:host})(PORT={database:port}))(CONNECT_DATA=(SERVICE_NAME={database:serviceName})));User Id={database:lab:userId};Password={database:lab:password};Max Pool Size=50;Connection Timeout=30" +Logging: + IncludeScopes: false + LogLevel: + Default: Debug + Microsoft: Information + System: Information +kafka: + service_name: "CSI-NET-LAB-SCHEDULED-{env}" +Mongo: + Collection: "VIDAPTOR-INT" + ConnectionString: {mongoConString} +ElasticApm: + ServiceName: "CSI-NET-LAB-SCHEDULED" +Serilog: + MinimumLevel: + Default: Error + Override: + Microsoft: Error + System: Error +#eureka: +# instance: +# hostname: CSI-NET-LAB-SCHEDULED diff --git a/Config-Server/configrepo/CSI-NET-LAB-VIDAPTOR.yml b/Config-Server/configrepo/CSI-NET-LAB-VIDAPTOR.yml new file mode 100755 index 0000000..813d284 --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-LAB-VIDAPTOR.yml @@ -0,0 +1,26 @@ +--- +AppSettings: + CacheDbResults: true + SiteTitle: "CSI-NET-LAB-VIDAPTOR-{env}" +PostgreSQL: + ReadCon: "Host={database:host};Port={database:port};Database={database:lab:dbName};User Id={database:lab:userId};Password={database:lab:password};" + WriteCon: "Host={database:host};Port={database:port};Database={database:lab:dbName};User Id={database:lab:userId};Password={database:lab:password};" +Oracle: +# ReadCon: "Data Source=(DESCRIPTION=(CONNECT_TIMEOUT={database:connectTimeout})(RETRY_COUNT={database:retryCount})(RETRY_DELAY={database:retryDelay})(TRANSPORT_CONNECT_TIMEOUT={database:transportConnecttimeout})(ADDRESS=(PROTOCOL=TCP)(HOST={database:primaryHost})(PORT={database:port}))(CONNECT_DATA=(SERVICE_NAME={database:serviceName})));User Id={database:lab:userId};Password={database:lab:password};Max Pool Size={database:maxPoolsize};Connection Timeout={database:connectionTimeout}" +# WriteCon: "Data Source=(DESCRIPTION=(CONNECT_TIMEOUT={database:connectTimeout})(RETRY_COUNT={database:retryCount})(RETRY_DELAY={database:retryDelay})(TRANSPORT_CONNECT_TIMEOUT={database:transportConnecttimeout})(ADDRESS=(PROTOCOL=TCP)(HOST={database:primaryHost})(PORT={database:port}))(CONNECT_DATA=(SERVICE_NAME={database:serviceName})));User Id={database:lab:userId};Password={database:lab:password};Max Pool Size={database:maxPoolsize};Connection Timeout={database:connectionTimeout}" + ReadCon: "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST={database:secondaryHost})(PORT={database:port}))(CONNECT_DATA=(SERVICE_NAME={database:serviceName})));User Id={database:lab:userId};Password={database:lab:password}" + WriteCon: "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST={database:primaryHost})(PORT={database:port}))(CONNECT_DATA=(SERVICE_NAME={database:serviceName})));User Id={database:lab:userId};Password={database:lab:password}" +Logging: + IncludeScopes: false + LogLevel: + Default: Debug + Microsoft: Information + System: Information +kafka: + service_name: "CSI-NET-LAB-VIDAPTOR-{env}" +Mongo: + Collection: "VIDAPTOR-INT" + ConnectionString: {mongoConString} +#eureka: +# instance: +# hostname: csi-net-lab-vidaptor diff --git a/Config-Server/configrepo/CSI-NET-LABSRVCS-changed.yml b/Config-Server/configrepo/CSI-NET-LABSRVCS-changed.yml new file mode 100755 index 0000000..1cce8a6 --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-LABSRVCS-changed.yml @@ -0,0 +1,196 @@ +--- +AppSettings: + CacheDbResults: true + SiteTitle: "CSI-NET-LABSRVCS-{env}" +PostgreSQL: + ReadCon: "Host={database:host};Port={database:port};Database={database:lab:dbName};User Id={database:lab:userId};Password={database:lab:password};" + WriteCon: "Host={database:host};Port={database:port};Database={database:lab:dbName};User Id={database:lab:userId};Password={database:lab:password};" +Oracle: + ReadCon: "Data Source=(DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=OFF)(FAILOVER=ON)(ADDRESS=(PROTOCOL=TCP)(HOST= OracleDBUATScan)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST= OracleDBUATScan)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=KAUATPDB)));User Id={database:lab:userId};Password={database:lab:password}" + WriteCon: "Data Source=(DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=OFF)(FAILOVER=ON)(ADDRESS=(PROTOCOL=TCP)(HOST=OracleDBUATScan)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=OracleDBUATScan)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=KAUATPDB)));User Id={database:lab:userId};Password={database:lab:password}" +Logging: + IncludeScopes: false + LogLevel: + Default: Debug + Microsoft: Information + System: Information +TestVal: testvalue +kafka: + service_name: "CSI-NET-LABSRVCS-{env}" +billing-notification-rabbitmq: + exchange: + exchangeName: billing-notification-exchange + type: topic + durable: true + exclusive: false + autoDelete: false + queue: + name: billing-notification-queue + routekey: billing-notification-queueKey + autoDelete: false + durable: true + exclusive: false +lab-request-rabbitmq: + exchange: + exchangeName: lab-request-exchange + type: fanout + durable: false + exclusive: false + autoDelete: false + queue: + name: LabRequestEvent + routekey: LabRequestEvent + autoDelete: false + durable: true + exclusive: false + autoack: false +lab-rabbitmq: + exchangeName: net-template + durable: true + queue: + name: masterdata-sync + routeKey: masterdata-sync + durable: true + ic-notification: + exchangeName: ic-notification + durable: true + Type: direct + queue: + durable: true + routekey: ic-notification.infected + serio-ic-notification: + exchangeName: ic-notification + durable: true + Type: direct + queue: + durable: true + routekey: lab-test-infected +lab-request-rabbitmq-billing: + exchange: + exchangeName: invoice-status-lab-exchange + type: direct + durable: true + queue: + name: lab-invoice-status-queue + routekey: lab-invoice-status-queueKey + durable: true +rabbitmq: + client: + exchange: lab-td-exchange + type: topic + durable: true + exclusive: false + autoDelete: false + queue: + name: TestDirectoryProcedure + routekey: TestDirectoryProcedure + lab-order-exchange: + exchangename: feature-ehr-exchange + queue: + name: feature-ehr-queue + routekey: feature-ehr-queue + exchange-notification: + autoDelete: false + durable: false + exchangeName: lab.qa.notifications.exchange + exclusive: false + queue: + routekey: lab.qa.notifications + sample-collection-exchnage: + exchangeName: lab-exchange + queue: + name: lab-orders-queue + routekey: lab-orders-queue + queue2: + name: sample-rejecting-notify-queue + routekey: sample-rejecting-notify-queue +redis: + client: + instanceName: "lab:" +contextSkipOn: "" +ADT: + DataKey: masterdataObject + TypeKey: masterdataType +ADTType: + Hospital: Hospitals + HospitalGroup: HospitalGroup +HospitalAttribute: + HospitalGroupKey: hospitalGroup + HospitalID: id + HospitalGroupIdKey: id + TranslationLanguageArrayKey: translationLanguages + LabHospitalTranslationAttribute: + TranslationValueObjKey: translationValues + LanguageObjKey: language + ColumnName: columnName + ColumnValue: value + TranslationId: id + HospitalName: hospitalName + Language: language + LanguageCode: languageCode + LabHospitalGroupAttribute: + HospitalGroupId: id +LabHospitalGroupAttribute: + HospitalGroupId: id + TranslationLanguageArrayKey: translationLanguages + LabHospitalGroupTransalationAttribute: + TranslationId: id + ColumnName: columnName + ColumnValue: value + HospitalGroupName: hospitalGroupName + TranslationValueObjKey: translationValues + LanguageObjKey: language + LanguageCode: language + Language: language +ProceduresAttribute: + ProcedureCode: procedureId + ProcedureName: name + LanguageCode: languageCode +MongoLogs: "mongodb://{Mongo:appLogs}/app-logs" +Report: + Mongo: + Collection: "LAB" +RabbitMQ: + Mongo: + Collection: "LAB" +RmqLabNotificationsExchange: + exchangename: csi.net.labsrvcs.notifications + durable: true + routeKeys: + LabOrderCancelation: csi.net.labsrvcs.notifications + VerifyTextBasedResults: csi.net.labsrvcs.notifications + VerifyHistopathologyResults: csi.net.labsrvcs.notifications + SampleRejected: csi.net.labsrvcs.notifications + SampleCollected: csi.net.labsrvcs.notifications + SampleRecieved: csi.net.labsrvcs.notifications + IHEPublish: csi.net.labsrvcs.ihe +RmqICNotificationsExchange: + exchangename: csi.net.labsrvcs.ic.notifications + routeKeys: + InfectedNotifyToIC: csi.net.labsrvcs.lab.sample.infected + InfectedMicroNotifyToIC: csi.net.labsrvcs.sample.micro.infected +RmqSampleCollectionExchange: + exchangename: csi.net.labsrvcs + routeKeys: + SampleRejected: csi.net.labsrvcs.sample.reject.notifications + SampleRecieved: csi.net.labsrvcs.sample.recieved + LabOrderStatus: csi.net.labsrvcs.status + IHEPublish: csi.net.labsrvcs.ihe + TestStatusPublish: csi.net.labsrvcs.TestStatus +SetupMasterDataExchange: + exchangeName: net-template + durable: true + queue: + name: masterdata-sync + routeKey: masterdata-sync + durable: true +RmqBillingCollectionExchange: + exchangeName: csi.net.labsrvcs.billing + durable: true + routeKeys: + PerformedStatus: csi.net.labsrvcs.billing +LabUserRoles: + -"Lab Technician" + -"Lab_Doctor" + -"LAB_Manager" + -"Lab Receptionist" diff --git a/Config-Server/configrepo/CSI-NET-LABSRVCS.yml b/Config-Server/configrepo/CSI-NET-LABSRVCS.yml new file mode 100755 index 0000000..dacdf2e --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-LABSRVCS.yml @@ -0,0 +1,246 @@ +--- +AppSettings: + CacheDbResults: true + SiteTitle: "CSI-NET-LABSRVCS-{env}" +PostgreSQL: + ReadCon: "Host={database:host};Port={database:port};Database={database:lab:dbName};User Id={database:lab:userId};Password={database:lab:password};" + WriteCon: "Host={database:host};Port={database:port};Database={database:lab:dbName};User Id={database:lab:userId};Password={database:lab:password};" +#Oracle: + # ReadCon: "Data Source=(DESCRIPTION=(CONNECT_TIMEOUT={database:connectTimeout})(RETRY_COUNT={database:retryCount})(RETRY_DELAY={database:retryDelay})(TRANSPORT_CONNECT_TIMEOUT={database:transportConnecttimeout})(ADDRESS=(PROTOCOL=TCP)(HOST={database:primaryHost})(PORT={database:port}))(CONNECT_DATA=(SERVICE_NAME={database:serviceName})));User Id={database:lab:userId};Password={database:lab:password};Max Pool Size={database:maxPoolsize};Connection Timeout={database:connectionTimeout}" + # WriteCon: "Data Source=(DESCRIPTION=(CONNECT_TIMEOUT={database:connectTimeout})(RETRY_COUNT={database:retryCount})(RETRY_DELAY={database:retryDelay})(TRANSPORT_CONNECT_TIMEOUT={database:transportConnecttimeout})(ADDRESS=(PROTOCOL=TCP)(HOST={database:primaryHost})(PORT={database:port}))(CONNECT_DATA=(SERVICE_NAME={database:serviceName})));User Id={database:lab:userId};Password={database:lab:password};Max Pool Size={database:maxPoolsize};Connection Timeout={database:connectionTimeout}" +#Oracle: + # ReadCon: "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST={database:primaryHost})(PORT={database:port}))(CONNECT_DATA=(SERVICE_NAME={database:serviceName})));User Id={database:lab:userId};Password={database:lab:password}" + #WriteCon: "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST={database:primaryHost})(PORT={database:port}))(CONNECT_DATA=(SERVICE_NAME={database:serviceName})));User Id={database:lab:userId};Password={database:lab:password}" + +#Oracle: +# ReadCon: "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST={database:primaryHost})(PORT={database:port}))(CONNECT_DATA=(SERVICE_NAME={database:serviceName})));User Id={database:lab:userId};Password={database:lab:password};Max Pool Size=50;Connection Timeout=30" +# WriteCon: "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST={database:primaryHost})(PORT={database:port}))(CONNECT_DATA=(SERVICE_NAME={database:serviceName})));User Id={database:lab:userId};Password={database:lab:password};Max Pool Size=50;Connection Timeout=30" + +# HIGH AVAILABILITY +#Oracle: +# ReadCon: "Data Source=(description=(address=(host={database:primaryHost})(protocol=tcp)(port={database:port}))(address=(host={database:secondaryHost})(protocol=tcp)(port={database:port}))(failover=yes)(connect_data=(service_name={database:serviceName})(failover_mode=(type=select)(method=basic))));User Id={database:lab:userId};Password={database:lab:password}" +# WriteCon: "Data Source=(description=(address=(host={database:primaryHost})(protocol=tcp)(port={database:port}))(address=(host={database:secondaryHost})(protocol=tcp)(port={database:port}))(failover=yes)(connect_data=(service_name={database:serviceName})(failover_mode=(type=select)(method=basic))));User Id={database:lab:userId};Password={database:lab:password}" +Logging: + IncludeScopes: false + LogLevel: + Default: Debug + Microsoft: Information + System: Information +TestVal: testvalue +kafka: + service_name: "CSI-NET-LABSRVCS-{env}" +billing-notification-rabbitmq: + exchange: + exchangeName: billing-notification-exchange + type: topic + durable: true + exclusive: false + autoDelete: false + queue: + name: billing-notification-queue + routekey: billing-notification-queueKey + autoDelete: false + durable: true + exclusive: false +lab-request-rabbitmq: + exchange: + exchangeName: lab-request-exchange + type: fanout + durable: false + exclusive: false + autoDelete: false + queue: + name: LabRequestEvent + routekey: LabRequestEvent + autoDelete: false + durable: true + exclusive: false + autoack: false +lab-rabbitmq: + exchangeName: net-template + durable: true + queue: + name: masterdata-sync + routeKey: masterdata-sync + durable: true + ic-notification: + exchangeName: ic-notification + durable: true + Type: direct + queue: + durable: true + routekey: ic-notification.infected + serio-ic-notification: + exchangeName: ic-notification + durable: true + Type: direct + queue: + durable: true + routekey: lab-test-infected +lab-request-rabbitmq-billing: + exchange: + exchangeName: invoice-status-lab-exchange + type: direct + durable: true + queue: + name: lab-invoice-status-queue + routekey: lab-invoice-status-queueKey + durable: true +rabbitmq: + client: + exchange: lab-td-exchange + type: topic + durable: true + exclusive: false + autoDelete: false + queue: + name: TestDirectoryProcedure + routekey: TestDirectoryProcedure + lab-order-exchange: + exchangename: feature-ehr-exchange + queue: + name: feature-ehr-queue + routekey: feature-ehr-queue + exchange-notification: + autoDelete: false + durable: false + exchangeName: lab.qa.notifications.exchange + exclusive: false + queue: + routekey: lab.qa.notifications + sample-collection-exchnage: + exchangeName: lab-exchange + queue: + name: lab-orders-queue + routekey: lab-orders-queue + queue2: + name: sample-rejecting-notify-queue + routekey: sample-rejecting-notify-queue +redis: + client: + instanceName: "lab:" +contextSkipOn: "" +ADT: + DataKey: masterdataObject + TypeKey: masterdataType +ADTType: + Hospital: Hospitals + HospitalGroup: HospitalGroup +HospitalAttribute: + HospitalGroupKey: hospitalGroup + HospitalID: id + HospitalGroupIdKey: id + TranslationLanguageArrayKey: translationLanguages + LabHospitalTranslationAttribute: + TranslationValueObjKey: translationValues + LanguageObjKey: language + ColumnName: columnName + ColumnValue: value + TranslationId: id + HospitalName: hospitalName + Language: language + LanguageCode: languageCode + LabHospitalGroupAttribute: + HospitalGroupId: id +LabHospitalGroupAttribute: + HospitalGroupId: id + TranslationLanguageArrayKey: translationLanguages + LabHospitalGroupTransalationAttribute: + TranslationId: id + ColumnName: columnName + ColumnValue: value + HospitalGroupName: hospitalGroupName + TranslationValueObjKey: translationValues + LanguageObjKey: language + LanguageCode: language + Language: language +ProceduresAttribute: + ProcedureCode: procedureId + ProcedureName: name + LanguageCode: languageCode +MongoLogs: "mongodb://{Mongo:appLogs}/app-logs" +Report: + Mongo: + Collection: "LAB" +RabbitMQ: + Mongo: + Collection: "LAB" +RmqLabNotificationsExchange: + exchangename: csi.net.labsrvcs.notifications + durable: true + routeKeys: + LabOrderCancelation: csi.net.labsrvcs.notifications + VerifyTextBasedResults: csi.net.labsrvcs.notifications + VerifyHistopathologyResults: csi.net.labsrvcs.notifications + SampleRejected: csi.net.labsrvcs.notifications + SampleCollected: csi.net.labsrvcs.notifications + SampleRecieved: csi.net.labsrvcs.notifications + IHEPublish: csi.net.labsrvcs.ihe +RmqICNotificationsExchange: + exchangename: csi.net.labsrvcs.ic.notifications + routeKeys: + InfectedNotifyToIC: csi.net.labsrvcs.lab.sample.infected + InfectedMicroNotifyToIC: csi.net.labsrvcs.sample.micro.infected +RmqSampleCollectionExchange: + exchangename: csi.net.labsrvcs + routeKeys: + SampleRejected: csi.net.labsrvcs.sample.reject.notifications + SampleRecieved: csi.net.labsrvcs.sample.recieved + LabOrderStatus: csi.net.labsrvcs.status + IHEPublish: csi.net.labsrvcs.ihe + TestStatusPublish: csi.net.labsrvcs.TestStatus +SetupMasterDataExchange: + exchangeName: net-template + durable: true + queue: + name: masterdata-sync + routeKey: masterdata-sync + durable: true +RmqBillingCollectionExchange: + exchangeName: csi.net.labsrvcs.billing + durable: true + routeKeys: + PerformedStatus: csi.net.labsrvcs.billing +LabUserRoles: + -"Lab Technician" + -"Lab_Doctor" + -"LAB_Manager" + -"Lab Receptionist" +KafkaTopics: + PerformedStatus: "{env}-csi.net.labsrvcs.billing" + SampleCollected: "{env}-csi.net.labsrvcs.samplecollected" + TestStatusPublish: "{env}-csi.net.labsrvcs.TestStatus" + SampleRecieved: "{env}-csi.net.labsrvcs.sample.recieved" + LabOrderCancelation: "{env}-csi.net.labsrvcs.labordercancellation" +UrlOptions: + FormTemplateUrl: "http://csi-net-empiread/api/RegistrationFormTemplate" + PatientSearchServiceUrl: "http://csi-net-empiread/api/patient" + BillingGetAccountIdUrl: "http://csi-bm-invoice/billing/account/create" + UserServiceEndPoint: "http://csi-iam-service/auth/realms/master/csi-user-detail/" + BillingDefaultPayerEndPoint: "http://csi-bm-billing/billing/payer-group/get-default" + BillingSearchPayerContract: "http://csi-bm-billing/billing/payer-contract/search" + BillingSearchPayerPolicy: "http://csi-bm-billing/billing/payer-contract-policies/search" + BaseUtilityServiceUrl: "http://csi-java-base-utility" + EHRPatientPOMRUrl: "http://csi-java-ehr-patient-pomr" + RMSReservationServiceUrl: "http://csi-pms-rms-reservation" + ADTRequestUrl: "http://csi-pms-adt-request" + EHRPatientIpUrl: "http://csi-java-ehr-ip/ehr/ip/doctor/read/carePlan/getMrpIdsAndNursingGroupId" + PHRRequestUrl: "http://csi-phr-base/api/v1.0/masterData/txnUsersList" + LABRequestUrl: "http://csi-net-labsrvcs/api/UserManagement/AllUsersForLabRoles" + RMSResourceRegistryUrl: "http://csi-pms-rms-resource-registry/amd-doctor/search" + IEGenaralUrl: "http://csi-ie-general/api/patient" + ErPatientAssigneeUri : "http://csi-net-erfuncti/api/ERDashboard/GetPatientAssignees" + PomrForPomrId: "http://csi-java-ehr-patient-pomr/ehr/opd/pomr/byPomrId?" + ClinicDetails": "http://csi-pms-rms-masterdata/amd-masterdata/clinic/getById/" + ClinicalAcknowledgeURL : "http://csi-java-ehr-ip/v1.0/ehr/ip/clinical-result-acknowledgement/getData" + RMSProcedureDetailsURL: "http://csi-pms-rms-masterdata/amd-masterdata/procedures/light-weight-search?isExternal=true&includeAllConfigCodes=true&lang=en&internationalization=false" + +ElasticApm: + ServiceName: CSI-NET-LABSRVCS + +Serilog: + MinimumLevel: + Default: Debug + Override: + Microsoft: Debug + System: Error diff --git a/Config-Server/configrepo/CSI-NET-MEDISPAN.yml b/Config-Server/configrepo/CSI-NET-MEDISPAN.yml new file mode 100755 index 0000000..b18194f --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-MEDISPAN.yml @@ -0,0 +1,44 @@ +--- +AppSettings: + CacheDbResults: true + SiteTitle: CSI-NET-MEDISPAN-{env} + +PostgreSQL: + ReadCon: "Host={database:host};Port={database:port};Database={database:medispan:dbName};User Id={database:medispan:userId};Password={database:medispan:password};" + +SQLServer: + ReadCon: "Data Source={database:medispan:host};Initial Catalog={database:medispan:dbName};User ID={database:medispan:userId};Password={database:medispan:password};" +Oracle: + ReadCon: "Data Source=(description=(address=(host={database:primaryHost})(protocol=tcp)(port={database:port}))(address=(host={database:secondaryHost})(protocol=tcp)(port={database:port}))(failover=yes)(connect_data=(service_name={database:serviceName})(failover_mode=(type=select)(method=basic))));User Id={database:medispan:userId};Password={database:medispan:password}" +kafka: + service_name: CSI-NET-MEDISPAN-{env} +Logging: + IncludeScopes: false + LogLevel: + Default: Debug + Microsoft: Information + System: Information +swaggerschema: + api-title: "Medi span integration api" + api-title-desc: "Medi span integration api Desc" +Integrations-DbConnectionString: Server=172.15.100.88;Database=medispan-integrations;User Name=postgres;Password=cloud@123 +UrlOptions: + AllergiesUrl: "http://csi-net-ehr-opd-patient/api/EHRPatientsAllergy/PatientsAllergyByPatientID" + PatinetInfoUrl: "http://csi-net-empiread/api/patient/pre-formatted" + ConditionsUrl: "http://csi-java-ehr-patient-pomr/ehr/opd/patientProblem/byPatientId" + VitalSignsUrl: "http://csi-java-ehr-common/vital-signs/displayV2/patient" + DrugsUrl: "http://csi-phr-base/api/v1.0/formulary/getCodeDetail" + LabResultsUrl: "http://csi-net-labsrvcs/api/LabResults/GetResultsByPatient" + ProcedureUrl: "http://csi-phr-base/api/v1.0/masterData/getProcedureConfig" + LdrService: "http://csi-java-ehr-ldr/ehr/labor-and-delivery/lactation/last/lactation-id" + SnowmedAlergyUrl: "http://csi-net-ehr-opd-master/api/EHRMaster/GetAllergy" + PregnancyUrl: "https://csi-java-ehr-opd/ehr/opd/pregnancy/byPatientIdAndPOMRId" +UseResilientHttp: true +preloadCache: true +useICD10AM6: true +MongoLogs: "mongodb://{Mongo:appLogs}/app-logs" +Hangfire: + Storage: "mongodb://{Mongo:appLogs}/csi-net-medispan" + +ElasticApm: + ServiceName: CSI-NET-MEDISPAN diff --git a/Config-Server/configrepo/CSI-NET-NOTY-EMAIL.yml b/Config-Server/configrepo/CSI-NET-NOTY-EMAIL.yml new file mode 100755 index 0000000..7b084ad --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-NOTY-EMAIL.yml @@ -0,0 +1,45 @@ +--- +AppSettings: + CacheDbResults: true + SiteTitle: CSI-NET-NOTY-EMAIL-{env} +kafka: + serviceName: CSI-NET-NOTY-EMAIL-{env} +Logging: + IncludeScopes: false + LogLevel: + Default: Debug + Microsoft: Information + System: Information +swaggerschema: + api-title: "EMAIL Api" + api-title-desc: "EMAIL Api Desc" +ServiceUrls: + UserPermission: http://service-base-security-token/token/logged-in-user +EventStoreConfigOptions: + EventStoreConnectionString: "mongodb://{empi:database:nodes}/csi-noty-events-store" + MessageStoreConnectionString: "mongodb://{empi:database:nodes}/csi-noty-email" + RmqConnectionUrl: "amqp://{noty:rabbitmq:server:username}:{noty:rabbitmq:server:password}@{noty:rabbitmq:server:host}:{noty:rabbitmq:server:port}" + RmqExchangeName: "notifications.exchange" +BrighterConfigOptions: + EventStoreConnectionString: "Server={noty:database:host};Database=notifications-event-store;User Name={noty:database:username};Password={noty:database:password}" + MessageStoreConnectionString: "Server={noty:database:host};Database=notifications-event-store;User Name={noty:database:username};Password={noty:database:password}" + RmqConnectionUrl: "amqp://{noty:rabbitmq:server:username}:{noty:rabbitmq:server:password}@{noty:rabbitmq:server:host}:{noty:rabbitmq:server:port}" + RmqExchangeName: "notifications.exchange" +NotificationConfigOptions: + RmqConnectionUrl: "amqp://{noty:rabbitmq:server:username}:{noty:rabbitmq:server:password}@{noty:rabbitmq:server:host}:{noty:rabbitmq:server:port}" + RmqExchangeName: notifications.exchange +SendGridEmailOptios: + ApiKey: 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 +EmailOptions: + DefaultFromAddress: "HMG-VIDA-Notifications@drsulaimanalhabib.com" + DefaultFromEmailDescription: "Notification" + EnableSsl: false + UserName: "vida4.notifications" + Password: 'V!78945392$@' + SmtpHost: "RAYCAS01.HMG.LOCAL" + SmtpPort: '25' + UseDefaultCredentials: false +MongoLogs: "mongodb://{Mongo:appLogs}/app-logs" + +ElasticApm: + ServiceName: CSI-NET-NOTY-EMAIL diff --git a/Config-Server/configrepo/CSI-NET-NOTY-MSGTEMPL.yml b/Config-Server/configrepo/CSI-NET-NOTY-MSGTEMPL.yml new file mode 100755 index 0000000..3e11cde --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-NOTY-MSGTEMPL.yml @@ -0,0 +1,25 @@ +--- +AppSettings: + CacheDbResults: true + SiteTitle: CSI-NET-NOTY-MSGTEMPL-{env} +kafka: + serviceName: CSI-NET-NOTY-MSGTEMPL-{env} +Logging: + IncludeScopes: false + LogLevel: + Default: Debug + Microsoft: Information + System: Information +swaggerschema: + api-title: "Notifications Api" + api-title-desc: "Notifications Api Desc" +DefaultDbConnection: "mongodb://{empi:database:nodes}/csi-net-noty-msgtempl" +ServiceUrls: + UserPermission: http://service-base-security-token/token/logged-in-user +EventStoreConfigOptions: + EventStoreConnectionString: "mongodb://{noty:database:nodes}/csi-net-noty-events-store" + MessageStoreConnectionString: "mongodb://{noty:database:nodes}/csi-net-noty-events-store" +MongoLogs: "mongodb://{Mongo:appLogs}/app-logs" + +ElasticApm: + ServiceName: CSI-NET-NOTY-MSGTEMPL diff --git a/Config-Server/configrepo/CSI-NET-NOTY-QUERY.yml b/Config-Server/configrepo/CSI-NET-NOTY-QUERY.yml new file mode 100755 index 0000000..2e8963f --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-NOTY-QUERY.yml @@ -0,0 +1,59 @@ +--- +AppSettings: + CacheDbResults: true + SiteTitle: CSI-NET-NOTY-QUERY-{env} +kafka: + serviceName: CSI-NET-NOTY-QUERY-{env} +Logging: + IncludeScopes: false + LogLevel: + Default: Debug + Microsoft: Information + System: Information +swaggerschema: + api-title: "Notifications Api" + api-title-desc: "Notifications Api Desc" +EventStoreConfigOptions: + EventStoreConnectionString: "mongodb://{empi:database:nodes}/csi-noty-events-store/?readPreference=secondaryPreferred" + MessageStoreConnectionString: "mongodb://{empi:database:nodes}/csi-noty-events-store/?readPreference=secondaryPreferred" + RmqConnectionUrl: "amqp://{empi:rabbitmq:server:username}:{empi:rabbitmq:server:password}@{empi:rabbitmq:server:host}:{empi:rabbitmq:server:port}" + RmqExchangeName: "notifications.exchange" +BrighterConfigOptions: + EventStoreConnectionString: "Server={noty:database:host};Database=notifications-event-store;User Name={noty:database:username};Password={noty:database:password}" + MessageStoreConnectionString: "Server={noty:database:host};Database=notifications-event-store;User Name={noty:database:username};Password={noty:database:password}" + RmqConnectionUrl: "amqp://{noty:rabbitmq:server:username}:{noty:rabbitmq:server:password}@{noty:rabbitmq:server:host}:{noty:rabbitmq:server:port}" + RmqExchangeName: "notifications.exchange" +NotificationConfigOptions: + RmqConnectionUrl: "amqp://{noty:rabbitmq:server:username}:{noty:rabbitmq:server:password}@{noty:rabbitmq:server:host}:{noty:rabbitmq:server:port}" + RmqExchangeName: "notifications.exchange" +NotificationDeliveryRuleOptions: + critical: + - sms + - email + - in-app-realtime + high: + - sms + - email + - in-app-realtime + low: + - sms + - email + - in-app-realtime + normal: + - in-app-realtime +ServiceUrls: + UserPermission: http://service-base-security-token/token/logged-in-user +NotificationDependencyOptions: + user-details-service: "http://service-base-user/user/logged-in" + message-template-service: "http://csi-net-noty-msgtempl/api/Notifications" + user-details-for-role-service: "http://service-base-user/user/get/users/rolecode" +DefaultDbConnection: "Server={noty:database:host};Database=notifications-store;User Name={noty:database:username};Password={noty:database:password}" +QueryDbConnection: "mongodb://{empi:database:nodes}/csi-net-noty-query/?readPreference=secondaryPreferred" +NewNotificationDependencyOptions: + user-details-service: "http://csi-iam-service/auth/realms/master/csi-user-detail/user-by-id" + message-template-service: "http://csi-net-noty-msgtempl/api/Notifications" + user-details-for-role-service: "https://csi-iam-service/auth/realms/apphiss2vi/csi-user-detail/users-by-role" +MongoLogs: "mongodb://{Mongo:appLogs}/app-logs/?readPreference=secondaryPreferred" + +ElasticApm: + ServiceName: CSI-NET-NOTY-QUERY diff --git a/Config-Server/configrepo/CSI-NET-NOTY-QUEUE.yml b/Config-Server/configrepo/CSI-NET-NOTY-QUEUE.yml new file mode 100755 index 0000000..d032876 --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-NOTY-QUEUE.yml @@ -0,0 +1,31 @@ +--- +AppSettings: + CacheDbResults: true + SiteTitle: CSI-NET-NOTY-QUEUE-{env} +kafka: + serviceName: CSI-NET-NOTY-QUEUE-{env} +Logging: + IncludeScopes: false + LogLevel: + Default: Debug + Microsoft: Information + System: Information +swaggerschema: + api-title: Notifications WSS Api + api-title-desc: Web Sockets Service (In App Notifications) +ServiceUrls: + UserPermission: "http://service-base-security-token/service-base-security-token/token/logged-in-user" +EventStoreConfigOptions: + EventStoreConnectionString: "mongodb://{empi:database:nodes}/csi-noty-events-store" + MessageStoreConnectionString: "mongodb://{empi:database:nodes}/csi-noty-queue" + RmqConnectionUrl: "amqp://{noty:rabbitmq:server:username}:{noty:rabbitmq:server:password}@{noty:rabbitmq:server:host}:{noty:rabbitmq:server:port}" + RmqExchangeName: "notifications.exchange" +BrighterConfigOptions: + EventStoreConnectionString: "Server={noty:database:host};Database=notifications-event-store;User Name={noty:database:username};Password={noty:database:password}" + MessageStoreConnectionString: "Server={noty:database:host};Database=notifications-event-store;User Name={noty:database:username};Password={noty:database:password}" + RmqConnectionUrl: "amqp://{noty:rabbitmq:server:username}:{noty:rabbitmq:server:password}@{noty:rabbitmq:server:host}:{noty:rabbitmq:server:port}" + RmqExchangeName: "notifications.exchange" +MongoLogs: "mongodb://{Mongo:appLogs}/app-logs" + +ElasticApm: + ServiceName: CSI-NET-NOTY-QUEUE diff --git a/Config-Server/configrepo/CSI-NET-NOTY-SMS.yml b/Config-Server/configrepo/CSI-NET-NOTY-SMS.yml new file mode 100755 index 0000000..f66ebed --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-NOTY-SMS.yml @@ -0,0 +1,46 @@ +--- +AppSettings: + CacheDbResults: true + SiteTitle: CSI-NET-NOTY-SMS-{env} +kafka: + serviceName: CSI-NET-NOTY-SMS-{env} +Logging: + IncludeScopes: false + LogLevel: + Default: Debug + Microsoft: Information + System: Information +swaggerschema: + api-title: "SMS Api" + api-title-desc: "SMS Api Desc" +EventStoreConfigOptions: + EventStoreConnectionString: "mongodb://{empi:database:nodes}/csi-noty-events-store" + MessageStoreConnectionString: "mongodb://{empi:database:nodes}/csi-noty-sms" + RmqConnectionUrl: "amqp://{noty:rabbitmq:server:username}:{noty:rabbitmq:server:password}@{noty:rabbitmq:server:host}:{noty:rabbitmq:server:port}" + RmqExchangeName: "notifications.exchange" +BrighterConfigOptions: + EventStoreConnectionString: "Server={noty:database:host};Database=notifications-event-store;User Name={noty:database:username};Password={noty:database:password}" + MessageStoreConnectionString: "Server={noty:database:host};Database=notifications-event-store;User Name={noty:database:username};Password={noty:database:password}" + RmqConnectionUrl: "amqp://{noty:rabbitmq:server:username}:{noty:rabbitmq:server:password}@{noty:rabbitmq:server:host}:{noty:rabbitmq:server:port}" + RmqExchangeName: "notifications.exchange" +ServiceUrls: + UserPermission: http://service-base-security-token/token/logged-in-user +SmsGateWayProvider: yamamah +TwilioOptions: + AccountId: AC29aae4c5e4a95eee5cec5c875ef09fb7 + AuthToken: bd45e51e42ba85c6e69d60803db916cc + PhoneNumber: "+18443081192" +SmsGateWayOptions: + AppSid: K1pmBl_9JboGOtcXcVgdxJ1exOoAZ + StatusEndPoint: http://basic.unifonic.com/rest/SMS/Messages/GetMessagesDetails + Sender: DR.ALHABIB + EndPoint: http://basic.unifonic.com/wrapper/sendSMS.php +YamamahaOptions: + UserName: "username" + Password: "password" + TagName: "Vida Plus" + SendUrl: "https://api1.yamamah.com/SendSMS" +MongoLogs: "mongodb://{Mongo:appLogs}/app-logs" + +ElasticApm: + ServiceName: CSI-NET-NOTY-SMS diff --git a/Config-Server/configrepo/CSI-NET-NOTY-WSS.yml b/Config-Server/configrepo/CSI-NET-NOTY-WSS.yml new file mode 100755 index 0000000..b879b40 --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-NOTY-WSS.yml @@ -0,0 +1,38 @@ +--- +AppSettings: + CacheDbResults: true + SiteTitle: CSI-NET-NOTY-WSS-{env} +Logging: + IncludeScopes: false + LogLevel: + Default: Debug + Microsoft: Information + System: Information +swaggerschema: + api-title: Notifications WSS Api + api-title-desc: Web Sockets Service (In App Notifications) +ServiceUrls: + UserPermission: "http://service-base-security-token/service-base-security-token/token/logged-in-user" +EventStoreConfigOptions: + EventStoreConnectionString: "mongodb://{noty:database:nodes}/csi-net-noty-events-store" + MessageStoreConnectionString: "mongodb://{noty:database:nodes}/csi-net-noty-events-store" + RmqConnectionUrl: "amqp://{noty:rabbitmq:server:username}:{noty:rabbitmq:server:password}@{noty:rabbitmq:server:host}:{noty:rabbitmq:server:port}" + RmqExchangeName: "notifications.exchange" +BrighterConfigOptions: + EventStoreConnectionString: "Server={noty:database:host};Database=notifications-event-store;User Name={noty:database:username};Password={noty:database:password}" + MessageStoreConnectionString: "Server={noty:database:host};Database=notifications-event-store;User Name={noty:database:username};Password={noty:database:password}" + RmqConnectionUrl: "amqp://{noty:rabbitmq:server:username}:{noty:rabbitmq:server:password}@{noty:rabbitmq:server:host}:{noty:rabbitmq:server:port}" + RmqExchangeName: "notifications.exchange" +WssChannelStore: + Connection: "mongodb://172.200.0.218:27017/csi-net-noty-ws-connection-store" + DbName: "csi-net-noty-ws-connection-store" +eureka: + instance: + preferIpAddress: true + hostname: csi-net-noty-wss + secure-port-enabled: true + secure-virtual-host-name: csi-net-noty-wss +MongoLogs: "mongodb://{Mongo:appLogs}/app-logs" + +ElasticApm: + ServiceName: CSI-NET-NOTY-WSS diff --git a/Config-Server/configrepo/CSI-NET-NOTY.yml b/Config-Server/configrepo/CSI-NET-NOTY.yml new file mode 100755 index 0000000..3fe1a78 --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-NOTY.yml @@ -0,0 +1,59 @@ +--- +AppSettings: + CacheDbResults: true + SiteTitle: CSI-NET-NOTY-{env} +kafka: + serviceName: CSI-NET-NOTY-{env} +Logging: + IncludeScopes: false + LogLevel: + Default: Debug + Microsoft: Information + System: Information +swaggerschema: + api-title: "Notifications Api" + api-title-desc: "Notifications Api Desc" +EventStoreConfigOptions: + EventStoreConnectionString: "mongodb://{noty:database:nodes}/csi-net-noty-events-store" + MessageStoreConnectionString: "mongodb://{noty:database:nodes}/csi-net-noty-events-store" + RmqConnectionUrl: "amqp://{noty:rabbitmq:server:username}:{noty:rabbitmq:server:password}@{noty:rabbitmq:server:host}:{noty:rabbitmq:server:port}" + RmqExchangeName: "notifications.exchange" +BrighterConfigOptions: + EventStoreConnectionString: "Server={noty:database:host};Database=notifications-event-store;User Name={noty:database:username};Password={noty:database:password}" + MessageStoreConnectionString: "Server={noty:database:host};Database=notifications-event-store;User Name={noty:database:username};Password={noty:database:password}" + RmqConnectionUrl: "amqp://{noty:rabbitmq:server:username}:{noty:rabbitmq:server:password}@{noty:rabbitmq:server:host}:{noty:rabbitmq:server:port}" + RmqExchangeName: "notifications.exchange" +NotificationConfigOptions: + RmqConnectionUrl: "amqp://{noty:rabbitmq:server:username}:{noty:rabbitmq:server:password}@{noty:rabbitmq:server:host}:{noty:rabbitmq:server:port}" + RmqExchangeName: "notifications.exchange" +NotificationDeliveryRuleOptions: + critical: + - sms + - email + - in-app-realtime + high: + - sms + - email + - in-app-realtime + low: + - sms + - email + - in-app-realtime + normal: + - in-app-realtime +ServiceUrls: + UserPermission: http://service-base-security-token/token/logged-in-user +NotificationDependencyOptions: + user-details-service: "http://service-base-user/user/logged-in" + message-template-service: "http://csi-net-noty-msgtempl/api/Notifications" + user-details-for-role-service: "http://service-base-user/user/get/users/rolecode" +NewNotificationDependencyOptions: + user-details-service: "http://csi-iam-service/auth/realms/master/csi-user-detail/user-by-id" + message-template-service: "http://csi-net-noty-msgtempl/api/Notifications" + user-details-for-role-service: "http://csi-iam-service/auth/realms/apphiss2vi/csi-user-detail/users-by-role" +MongoLogs: "mongodb://{Mongo:appLogs}/app-logs" +NotificationHttpClientOptions: + GetConfigByEventNameEndPoint: "http://csi-net-noty-query/api/NotifiableConfigMappings/event" + +ElasticApm: + ServiceName: CSI-NET-NOTY diff --git a/Config-Server/configrepo/CSI-NET-PATIENTS.yml b/Config-Server/configrepo/CSI-NET-PATIENTS.yml new file mode 100755 index 0000000..acbf881 --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-PATIENTS.yml @@ -0,0 +1,48 @@ +--- +AppSettings: + SiteTitle: CSI-NET-PATIENTS-{env} + +PostgreSQL: + ReadCon: "Host={database:host};Port={database:port};Database={database:labPatient:dbName};User Id={database:labPatient:userId};Password={database:labPatient:password};" + WriteCon: "Host={database:host};Port={database:port};Database={database:labPatient:dbName};User Id={database:labPatient:userId};Password={database:labPatient:password};" +Oracle: + ReadCon: "Data Source=(description=(address=(host={database:primaryHost})(protocol=tcp)(port={database:port}))(address=(host={database:secondaryHost})(protocol=tcp)(port={database:port}))(failover=yes)(connect_data=(service_name={database:serviceName})(failover_mode=(type=select)(method=basic))));User Id={database:labPatient:userId};Password={database:labPatient:password}" + WriteCon: "Data Source=(description=(address=(host={database:primaryHost})(protocol=tcp)(port={database:port}))(address=(host={database:secondaryHost})(protocol=tcp)(port={database:port}))(failover=yes)(connect_data=(service_name={database:serviceName})(failover_mode=(type=select)(method=basic))));User Id={database:labPatient:userId};Password={database:labPatient:password}" + +contextSkipOn: HIS_PatientMaster +kafka: + service_name: CSI-NET-PATIENTS-{env} +rabbitmq: + client: + autoDelete: false + durable: true + exchangename: vidaplus.empi.exchange + exclusive: false + unknownPatientQueue: + name: csi.vidaplus.lab.uat.unknown.patient.add + routekey: csi.vidaplus.empi.events.unknownpatientcreatedevent + bulkPatientQueue: + name: csi.vidaplus.lab.uat.bulk.patient.add + routekey: csi.vidaplus.empi.events.bulkunknownpatientscreatedevent + queueAdd: + name: csi.vidaplus.lab.uat.patient.add + routekey: csi.vidaplus.empi.events.patientcreatedevent + queueEdit: + name: csi.vidaplus.lab.uat.patient.edit + routekey: csi.vidaplus.empi.events.patienteditedevent + empiDataPermissionSavedQueue: + name: csi.vidaplus.lab.uat.empi.data.permission.saved + routekey: csi.vidaplus.empi.events.empidatapermissionsavedevent + quickRegisterQueue: + name: csi.vidaplus.lab.uat.patient.quickregister + routekey: csi.vidaplus.empi.events.quickregisteredinhospitalevent + type: topic + virtualHost: / +Report: + Mongo: + Collection: "PATIENTS" +RabbitMQ: + Mongo: + Collection: "LAB" +ElasticApm: + ServiceName: CSI-NET-PATIENTS diff --git a/Config-Server/configrepo/CSI-NET-PHRMI.yml b/Config-Server/configrepo/CSI-NET-PHRMI.yml new file mode 100755 index 0000000..6a53c0c --- /dev/null +++ b/Config-Server/configrepo/CSI-NET-PHRMI.yml @@ -0,0 +1,26 @@ +--- +AppSettings: + CacheDbResults: true + SiteTitle: CSI-NET-PHRMI-{env} +kafka: + service_name: CSI-NET-PHRMI-{env} + +PostgreSQL: + ReadCon: "Host={database:host};Port={database:port};Database={database:pharmacy:dbName};User Id={database:pharmacy:userId};Password={database:pharmacy:password};" + WriteCon: "Host={database:host};Port={database:port};Database={database:pharmacy:dbName};User Id={database:pharmacy:userId};Password={database:pharmacy:password};" + +Oracle: + ReadCon: "Data Source=(description=(address=(host={database:primaryHost})(protocol=tcp)(port={database:port}))(address=(host={database:secondaryHost})(protocol=tcp)(port={database:port}))(failover=yes)(connect_data=(service_name={database:serviceName})(failover_mode=(type=select)(method=basic))));User Id={database:pharmacy:userId};Password={database:pharmacy:password}" + WriteCon: "Data Source=(description=(address=(host={database:primaryHost})(protocol=tcp)(port={database:port}))(address=(host={database:secondaryHost})(protocol=tcp)(port={database:port}))(failover=yes)(connect_data=(service_name={database:serviceName})(failover_mode=(type=select)(method=basic))));User Id={database:pharmacy:userId};Password={database:pharmacy:password}" + +Logging: + IncludeScopes: false + LogLevel: + Default: Debug + Microsoft: Information + System: Information +Report: + Mongo: + Collection: "PHARMACY" +ElasticApm: + ServiceName: CSI-NET-PHRMI diff --git a/Config-Server/configrepo/CSI-PHR-BASE-java-hmg-uat.yml b/Config-Server/configrepo/CSI-PHR-BASE-java-hmg-uat.yml new file mode 100755 index 0000000..4e05fb8 --- /dev/null +++ b/Config-Server/configrepo/CSI-PHR-BASE-java-hmg-uat.yml @@ -0,0 +1,29 @@ +pring: + datasource: + tomcat: + min-evictable-idle-time-millis: 200000 + max-active: 50 + max-idle: 2 + min-idle: 1 + max-age: 200000 + hikari: + minimum-idle: 2 + maximum-pool-size: 50 + connection-timeout: 15000 + idle-timeout: 10000 + max-lifetime: 40000 + +#logging: +# level: +# com: +# csi: +# phr: +# feign: +# billing: +# BillingInvoiceApi: DEBUG + +debug: true +logging: + level: + com: DEBUG + diff --git a/Config-Server/configrepo/CSI-PMS-RMS-MASTERDATA.yaml b/Config-Server/configrepo/CSI-PMS-RMS-MASTERDATA.yaml new file mode 100755 index 0000000..3da4d28 --- /dev/null +++ b/Config-Server/configrepo/CSI-PMS-RMS-MASTERDATA.yaml @@ -0,0 +1,14 @@ +spring: + datasource: + tomcat: + min-evictable-idle-time-millis: 200000 + max-active: 60 + max-idle: 2 + min-idle: 1 + max-age: 200000 + hikari: + minimum-idle: 2 + maximum-pool-size: 60 + connection-timeout: 15000 + idle-timeout: 10000 + max-lifetime: 40000 diff --git a/Config-Server/configrepo/api-gateway.yaml b/Config-Server/configrepo/api-gateway.yaml new file mode 100644 index 0000000..5af78d8 --- /dev/null +++ b/Config-Server/configrepo/api-gateway.yaml @@ -0,0 +1,693 @@ +eureka: + client: + enabled: false + serviceUrl: + defaultZone: 'http://localhost:8761/eureka/' + fetch-registry: false + register-with-eureka: false +debug: false +logging: + level: + org: + springframework: + web: + server: DEBUG + client: ERROR +reactor: + netty: + ioWorkerCount: 20 + io-worker-count: 30 +server: + tomcat: + max-threads: 100 + threads: + min: 10 + max: 100 +spring: + datasource: + tomcat: + min-evictable-idle-time-millis: 200000 + max-active: 30 + max-idle: 2 + min-idle: 1 + max-age: 200000 + http: + multipart: + max-file-size: 200MB + max-request-size: 200MB + cloud: + gateway: + httpclient: + connect-timeout: 1000 + response-timeout: 50s + pool: + max-connections: 100 + routes: + - id: report + uri: 'http://reporting-service' + predicates: + - Path=/reporting-service/** + filters: + - StripPrefix=1 + - id: iam + uri: 'http://csi-iam-service' + predicates: + - Path=/iam/** + filters: + - StripPrefix=1 + - id: document + uri: 'http://document-management-services' + predicates: + - Path=/document-management/** + filters: + - StripPrefix=1 + - id: document-engine + uri: 'http://document-storage-engine-service' + predicates: + - Path=/document-engine/** + filters: + - StripPrefix=1 + - id: medispan + uri: 'http://csi-net-medispan' + predicates: + - Path=/csi-net-medispan/** + filters: + - StripPrefix=1 + - id: appointment-channel + uri: 'http://cas-appointment-channel' + predicates: + - Path=/cas-appointment-channel/** + filters: + - StripPrefix=1 + - id: crs-channel + uri: 'http://crs-channel' + predicates: + - Path=/crs-channel/** + filters: + - StripPrefix=1 + - id: sick-leave-create + uri: 'http://sick-leave-create' + predicates: + - Path=/sick-leave-create/** + filters: + - StripPrefix=1 + - id: doctor-verify + uri: 'http://sick-leave-doctor-verify' + predicates: + - Path=/sick-leave-doctor-verify/** + filters: + - StripPrefix=1 + - id: reporting-publisher + uri: 'http://csi-reporting-publisher' + predicates: + - Path=/reporting-publisher/** + filters: + - StripPrefix=1 + - id: config-repo + uri: 'http://config-server' + predicates: + - Path=/config-server/** + filters: + - StripPrefix=1 + - id: econsent + uri: 'http://cs-net-econsent' + predicates: + - Path=/cs-net-econsent/** + filters: + - StripPrefix=1 + - id: econsentui + uri: 'http://cs-net-econsentui' + predicates: + - Path=/cs-net-econsentui/** + filters: + - StripPrefix=1 + - id: middleware + uri: 'http://csi-document-management-service' #'http://document-management-service' + predicates: + - Path=/document-management-middleware/** + filters: + - StripPrefix=1 + - id: csi-ie-hpd + uri: 'http://csi-ie-hpd' + predicates: + - Path=/csi-ie-hpd/** + filters: + - StripPrefix=1 + - id: cs-net-physiotherapy + uri: 'http://cs-net-physiotherapy' + predicates: + - Path=/cs-net-physiotherapy/** + filters: + - StripPrefix=1 + - id: cs-net-physiotherapy-ui + uri: 'http://cs-net-physiotherapyui' + predicates: + - Path=/cs-net-physiotherapyui/** + filters: + - StripPrefix=1 + - id: cs-net-social-worker-ui + uri: 'http://cs-net-social-worker-ui' + predicates: + - Path=/cs-net-social-worker-ui/** + filters: + - StripPrefix=1 + - id: cs-net-social-worker + uri: 'http://cs-net-social-worker' + predicates: + - Path=/cs-net-social-worker/** + filters: + - StripPrefix=1 + - id: csi-reporting + uri: 'http://csi-reporting-service/' + predicates: + - Path=/csi-reporting-service/** + filters: + - StripPrefix=1 + - id: csi-ie-pdq + uri: 'http://csi-ie-pdq' + predicates: + - Path=/csi-ie-pdq/** + filters: + - StripPrefix=1 + - id: csi-ie-employee + uri: 'http://csi-ie-employee' + predicates: + - Path=/csi-ie-employee/** + filters: + - StripPrefix=1 + - id: csi-ie-xdsb + uri: 'http://csi-ie-xdsb' + predicates: + - Path=/csi-ie-xdsb/** + filters: + - StripPrefix=1 + - id: csi-streaming-etl-service + uri: 'http://csi-streaming-etl-service' + predicates: + - Path=/csi-streaming-etl-service/** + filters: + - StripPrefix=1 + - id: csi-rf-file-uploader-service + uri: 'http://csi-rf-file-uploader-service' + predicates: + - Path=/rf/** + filters: + - StripPrefix=1 + - id: medical-report-channel + uri: 'http://medical-report-channel' + predicates: + - Path=/medical-report-channel/** + filters: + - StripPrefix=1 + - id: service-base-ui-registry + uri: 'http://service-base-ui-registry' + predicates: + - Path=/service-base-ui-registry/** + filters: + - StripPrefix=1 + - id: csi-ie-lakum + uri: 'http://csi-ie-lakum' + predicates: + - Path=/csi-ie-lakum/** + filters: + - StripPrefix=1 + - id: csi-ie-interbranch + uri: 'http://csi-ie-interbranch' + predicates: + - Path=/csi-ie-interbranch/** + filters: + - StripPrefix=1 + - id: csi-ie-prescription + uri: 'http://csi-ie-prescription' + predicates: + - Path=/csi-ie-prescription/** + filters: + - StripPrefix=1 + - id: crs-channel-user + uri: 'http://crs-channel-user' + predicates: + - Path=/crs-channel-user/** + filters: + - StripPrefix=1 + - id: cs-net-econsent + uri: 'http://cs-net-econsent' + predicates: + - Path=/cs-net-econsent/** + filters: + - StripPrefix=1 + - id: csi-bm-approval + uri: 'http://csi-bm-approval' + predicates: + - Path=/csi-bm-approval/** + filters: + - StripPrefix=1 + - id: csi-bm-prm + uri: 'http://csi-bm-prm' + predicates: + - Path=/csi-bm-prm/** + filters: + - StripPrefix=1 + - id: csi-bm-billing + uri: 'http://csi-bm-billing' + predicates: + - Path=/csi-bm-billing/** + filters: + - StripPrefix=1 + - id: csi-bm-inte-bridge + uri: 'http://csi-bm-inte-bridge' + predicates: + - Path=/csi-bm-inte-bridge/** + filters: + - StripPrefix=1 + - id: csi-bm-invoice + uri: 'http://csi-bm-invoice' + predicates: + - Path=/csi-bm-invoice/** + filters: + - StripPrefix=1 + - id: csi-ie-api + uri: 'http://csi-ie-api' + predicates: + - Path=/csi-ie-api/** + filters: + - StripPrefix=1 + - id: csi-ie-cyclus + uri: 'http://csi-ie-cyclus' + predicates: + - Path=/csi-ie-cyclus/** + filters: + - StripPrefix=1 + - id: csi-ie-doctor-api + uri: 'http://csi-ie-doctor-api' + predicates: + - Path=/csi-ie-doctor-api/** + filters: + - StripPrefix=1 + - id: csi-ie-dq + uri: 'http://csi-ie-dq' + predicates: + - Path=/csi-ie-dq/** + filters: + - StripPrefix=1 + - id: csi-ie-general + uri: 'http://csi-ie-general' + predicates: + - Path=/csi-ie-general/** + filters: + - StripPrefix=1 + - id: csi-ie-generalii + uri: 'http://csi-ie-generalii' + predicates: + - Path=/csi-ie-generalii/** + filters: + - StripPrefix=1 + - id: csi-ie-insurance + uri: 'http://csi-ie-insurance' + predicates: + - Path=/csi-ie-insurance/** + filters: + - StripPrefix=1 + - id: csi-ie-lakum-batch + uri: 'http://csi-ie-lakum-batch' + predicates: + - Path=/csi-ie-lakum-batch/** + filters: + - StripPrefix=1 + - id: csi-ie-misc + uri: 'http://csi-ie-misc' + predicates: + - Path=/csi-ie-misc/** + filters: + - StripPrefix=1 + - id: csi-ie-mobile + uri: 'http://csi-ie-mobile' + predicates: + - Path=/csi-ie-mobile/** + filters: + - StripPrefix=1 + - id: csi-ie-pacsurl + uri: 'http://csi-ie-pacsurl' + predicates: + - Path=/csi-ie-pacsurl/** + filters: + - StripPrefix=1 + - id: csi-ie-zatca + uri: 'http://csi-ie-zatca' + predicates: + - Path=/csi-ie-zatca/** + filters: + - StripPrefix=1 + - id: csi-java-base-utility + uri: 'http://csi-java-base-utility' + predicates: + - Path=/csi-java-base-utility/** + filters: + - StripPrefix=1 + - id: csi-java-ds-dental-core + uri: 'http://csi-java-ds-dental-core' + predicates: + - Path=/csi-java-ds-dental-core/** + filters: + - StripPrefix=1 + - id: csi-java-ehr-common + uri: 'http://csi-java-ehr-common' + predicates: + - Path=/csi-java-ehr-common/** + filters: + - StripPrefix=1 + - id: csi-java-ehr-common-scheduler + uri: 'http://csi-java-ehr-common-scheduler' + predicates: + - Path=/csi-java-ehr-common-scheduler/** + filters: + - StripPrefix=1 + - id: csi-java-ehr-config + uri: 'http://csi-java-ehr-config' + predicates: + - Path=/csi-java-ehr-config/** + filters: + - StripPrefix=1 + - id: csi-java-ehr-ic-bundle + uri: 'http://csi-java-ehr-ic-bundle' + predicates: + - Path=/csi-java-ehr-ic-bundle/** + filters: + - StripPrefix=1 + - id: csi-java-ehr-ic-dashboard + uri: 'http://csi-java-ehr-ic-dashboard' + predicates: + - Path=/csi-java-ehr-ic-dashboard/** + filters: + - StripPrefix=1 + - id: csi-java-ehr-initialassessment + uri: 'http://csi-java-ehr-initialassessment' + predicates: + - Path=/csi-java-ehr-initialassessment/** + filters: + - StripPrefix=1 + - id: csi-java-ehr-ip + uri: 'http://csi-java-ehr-ip' + predicates: + - Path=/csi-java-ehr-ip/** + filters: + - StripPrefix=1 + - id: csi-java-ehr-ip-doctor-prescription + uri: 'http://csi-java-ehr-ip-doctor-prescription' + predicates: + - Path=/csi-java-ehr-ip-doctor-prescription/** + filters: + - StripPrefix=1 + - id: csi-java-ehr-ldr + uri: 'http://csi-java-ehr-ldr' + predicates: + - Path=/csi-java-ehr-ldr/** + filters: + - StripPrefix=1 + - id: csi-java-ehr-listener + uri: 'http://csi-java-ehr-listener' + predicates: + - Path=/csi-java-ehr-listener/** + filters: + - StripPrefix=1 + - id: csi-java-ehr-opd + uri: 'http://csi-java-ehr-opd' + predicates: + - Path=/csi-java-ehr-opd/** + filters: + - StripPrefix=1 + - id: csi-java-ehr-or-anesthesia + uri: 'http://csi-java-ehr-or-anesthesia' + predicates: + - Path=/csi-java-ehr-or-anesthesia/** + filters: + - StripPrefix=1 + - id: csi-java-ehr-or-book + uri: 'http://csi-java-ehr-or-book' + predicates: + - Path=/csi-java-ehr-or-book/** + filters: + - StripPrefix=1 + - id: csi-java-ehr-or-booking + uri: 'http://csi-java-ehr-or-booking' + predicates: + - Path=/csi-java-ehr-or-booking/** + filters: + - StripPrefix=1 + - id: csi-java-ehr-patient-pomr + uri: 'http://csi-java-ehr-patient-pomr' + predicates: + - Path=/csi-java-ehr-patient-pomr/** + filters: + - StripPrefix=1 + - id: csi-java-ehr-specializedclinic + uri: 'http://csi-java-ehr-specializedclinic' + predicates: + - Path=/csi-java-ehr-specializedclinic/** + filters: + - StripPrefix=1 + - id: csi-java-ehr-specialized-clinic + uri: 'http://csi-java-ehr-specializedclinic' + predicates: + - Path=/csi-java-ehr-specialized-clinic/** + filters: + - StripPrefix=1 + - id: csi-java-ehr-template + uri: 'http://csi-java-ehr-template' + predicates: + - Path=/csi-java-ehr-template/** + filters: + - StripPrefix=1 + - id: csi-java-workflow-automation + uri: 'http://csi-java-workflow-automation' + predicates: + - Path=/csi-java-workflow-automation/** + filters: + - StripPrefix=1 + - id: csi-net-base-wss + uri: 'http://csi-net-base-wss' + predicates: + - Path=/csi-net-base-wss/** + filters: + - StripPrefix=1 + - id: csi-net-bloodbnk + uri: 'http://csi-net-bloodbnk' + predicates: + - Path=/csi-net-bloodbnk/** + filters: + - StripPrefix=1 + - id: csi-net-bloodbnk-mgt + uri: 'http://csi-net-bloodbnk-mgt' + predicates: + - Path=/csi-net-bloodbnk-mgt/** + filters: + - StripPrefix=1 + - id: csi-net-ehr-dboardpc + uri: 'http://csi-net-ehr-dboardpc' + predicates: + - Path=/csi-net-ehr-dboardpc/** + filters: + - StripPrefix=1 + - id: csi-net-ehr-ip-discharg + uri: 'http://csi-net-ehr-ip-discharg' + predicates: + - Path=/csi-net-ehr-ip-discharg/** + filters: + - StripPrefix=1 + - id: csi-net-ehr-opd-master + uri: 'http://csi-net-ehr-opd-master' + predicates: + - Path=/csi-net-ehr-opd-master/** + filters: + - StripPrefix=1 + - id: csi-net-ehr-opd-patient + uri: 'http://csi-net-ehr-opd-patient' + predicates: + - Path=/csi-net-ehr-opd-patient/** + filters: + - StripPrefix=1 + - id: csi-net-empi-crs-inte + uri: 'http://csi-net-empi-crs-inte' + predicates: + - Path=/csi-net-empi-crs-inte/** + filters: + - StripPrefix=1 + - id: csi-net-empi-hijridte + uri: 'http://csi-net-empi-hijridte' + predicates: + - Path=/csi-net-empi-hijridte/** + filters: + - StripPrefix=1 + - id: csi-net-empiread + uri: 'http://csi-net-empiread' + predicates: + - Path=/csi-net-empiread/** + filters: + - StripPrefix=1 + - id: csi-net-empiwrit + uri: 'http://csi-net-empiwrit' + predicates: + - Path=/csi-net-empiwrit/** + filters: + - StripPrefix=1 + - id: csi-net-erfuncti + uri: 'http://csi-net-erfuncti' + predicates: + - Path=/csi-net-erfuncti/** + filters: + - StripPrefix=1 + - id: csi-net-hemdialy + uri: 'http://csi-net-hemdialy' + predicates: + - Path=/csi-net-hemdialy/** + filters: + - StripPrefix=1 + - id: csi-net-himservi + uri: 'http://csi-net-himservi' + predicates: + - Path=/csi-net-himservi/** + filters: + - StripPrefix=1 + - id: csi-net-lab-scheduled + uri: 'http://csi-net-lab-scheduled' + predicates: + - Path=/csi-net-lab-scheduled/** + filters: + - StripPrefix=1 + - id: csi-net-lab-vidaptor + uri: 'http://csi-net-lab-vidaptor' + predicates: + - Path=/csi-net-lab-vidaptor/** + filters: + - StripPrefix=1 + - id: csi-net-labsrvcs + uri: 'http://csi-net-labsrvcs' + predicates: + - Path=/csi-net-labsrvcs/** + filters: + - StripPrefix=1 + - id: csi-net-medispan + uri: 'http://csi-net-medispan' + predicates: + - Path=/csi-net-medispan/** + filters: + - StripPrefix=1 + - id: csi-net-noty + uri: 'http://csi-net-noty' + predicates: + - Path=/csi-net-noty/** + filters: + - StripPrefix=1 + - id: csi-net-noty-email + uri: 'http://csi-net-noty-email' + predicates: + - Path=/csi-net-noty-email/** + filters: + - StripPrefix=1 + - id: csi-net-noty-msgtempl + uri: 'http://csi-net-noty-msgtempl' + predicates: + - Path=/csi-net-noty-msgtempl/** + filters: + - StripPrefix=1 + - id: csi-net-noty-query + uri: 'http://csi-net-noty-query' + predicates: + - Path=/csi-net-noty-query/** + filters: + - StripPrefix=1 + - id: csi-net-noty-sms + uri: 'http://csi-net-noty-sms' + predicates: + - Path=/csi-net-noty-sms/** + filters: + - StripPrefix=1 + - id: csi-personalization-service + uri: 'http://csi-personalization-service' + predicates: + - Path=/csi-personalization-service/** + filters: + - StripPrefix=1 + - id: csi-phr-base + uri: 'http://csi-phr-base' + predicates: + - Path=/csi-phr-base/** + filters: + - StripPrefix=1 + - id: csi-phr-cron + uri: 'http://csi-phr-cron' + predicates: + - Path=/csi-phr-cron/** + filters: + - StripPrefix=1 + - id: csi-pms-adt-request + uri: 'http://csi-pms-adt-request' + predicates: + - Path=/csi-pms-adt-request/** + filters: + - StripPrefix=1 + - id: csi-pms-rms-masterdata + uri: 'http://csi-pms-rms-masterdata' + predicates: + - Path=/csi-pms-rms-masterdata/** + filters: + - StripPrefix=1 + - id: csi-pms-rms-reservation + uri: 'http://csi-pms-rms-reservation' + predicates: + - Path=/csi-pms-rms-reservation/** + filters: + - StripPrefix=1 + - id: csi-pms-rms-resource-registry + uri: 'http://csi-pms-rms-resource-registry' + predicates: + - Path=/csi-pms-rms-resource-registry/** + filters: + - StripPrefix=1 + - id: csi-reporting-service + uri: 'http://csi-reporting-service' + predicates: + - Path=/csi-reporting-service/** + filters: + - StripPrefix=1 + - id: csi-rf-jdbc-sink-service + uri: 'http://csi-rf-jdbc-sink-service' + predicates: + - Path=/csi-rf-jdbc-sink-service/** + filters: + - StripPrefix=1 + - id: csi-rms-morgue + uri: 'http://csi-rms-morgue' + predicates: + - Path=/csi-rms-morgue/** + filters: + - StripPrefix=1 + - id: document-management-middleware + uri: 'http://csi-document-management-service' #'http://document-management-middleware' + predicates: + - Path=/document-management-middleware/** + filters: + - StripPrefix=1 + - id: service-base-masterdata + uri: 'http://service-base-masterdata' + predicates: + - Path=/service-base-masterdata/** + filters: + - StripPrefix=1 + - id: service-base-role-permission + uri: 'http://service-base-role-permission' + predicates: + - Path=/service-base-role-permission/** + filters: + - StripPrefix=1 + - id: sick-leave-doctor-verify + uri: 'http://sick-leave-doctor-verify' + predicates: + - Path=/sick-leave-doctor-verify/** + filters: + - StripPrefix=1 + - id: wasfaty-service-channel + uri: 'http://wasfaty-service-channel' + predicates: + - Path=/wasfaty-service-channel/** + filters: + - StripPrefix=1 diff --git a/Config-Server/configrepo/application-java-hmg-uat.yml b/Config-Server/configrepo/application-java-hmg-uat.yml new file mode 100755 index 0000000..ba569a4 --- /dev/null +++ b/Config-Server/configrepo/application-java-hmg-uat.yml @@ -0,0 +1,149 @@ +eureka: + client: + enabled: false + serviceUrl: + defaultZone: http://localhost:8761/eureka/ + fetch-registry: false + register-with-eureka: false +#feign: +# hystrix: +# enabled: true +hystrix: + shareSecurityContex: true + command: + default: + circuitBreaker: + enabled: true + execution: + isolation: + strategy: SEMAPHORE + thread: + timeoutInMilliseconds: 144000 + fallback: + enabled: true + threadpool: + default: + coreSize: 30 + maximumSize: 35 + allowMaximumSizeToDivergeFromCoreSize: true +ribbon: + ConnectTimeout: 770000 + MaxAutoRetries: 1 + MaxAutoRetriesNextServer: 1 + ReadTimeout: 770000 +management: + endpoint: + health: + show-details: always + health: + redis: + enabled: false +opentracing: + jaeger: + http-sender: + url: http://jaeger-collector:14268/api/traces + enable-b3-propagation: true +kafka: + numPartitions: 3 + replicationFactor: 3 + topic: + general-notifications: noty.c.notificationrequestfromextenalcommand + notification: noty.c.notificationrequestfromextenalcommand + notification_topic: noty.c.notificationrequestfromextenalcommand +spring: + liquibase: + enabled: false + cache: + type: redis + redis: + host: redis + timeout: 20000 + port: 3060 +# sentinel: +# master: mymaster +# nodes: 10.9.203.26:6379 +# cluster: +# max-redirects: 8 +# nodes: 10.4.41.60:7010,10.4.41.60:7011,10.4.41.60:7012,10.4.41.61:7013,10.4.41.61:7014,10.4.41.61:7015,10.4.41.62:7016,10.4.41.62:7018 + http: + multipart: + max-file-size: 200MB + max-request-size: 200MB + data: + elasticsearch: + cluster-name: elasticsearch + cluster-nodes: 10.201.216.63:9200 + redis: + sentinel: + master: mymaster + nodes: 10.201.216.30:26379,10.201.216.31:26379,10.201.216.32:26379 + kafka: + bootstrap-servers: 10.201.216.25:9092,10.201.216.26:9093,10.201.216.27:9094 + numPartitions: 3 + replicationFactor: 3 + consumer: + bootstrap-servers: 10.201.216.25:9092,10.201.216.26:9093,10.201.216.27:9094 + rabbitmq: + host: 10.4.41.7 + port: 5672 + username: admin + password: admin + #liquibase: + # enabled: false +#liquibase: +# enabled: false +server: + shutdown: graceful + shutdown.timeout: 30s +csi: + env: + prefix: net-hmg-uat + mongo: + host: 10.201.216.35 + port: 27017 + jpa: + event: + rabbitmq: + host: 10.4.41.7 + port: 5672 + userName: admin + password: admin + queueName: csi-reporting + exchangeName: csi.reporting + access-token-verification: + enabled: true + base: + util: + url: csi-java-base-utility +debug: false +phr: + auth-key: + client-secret: "3001029e-27e2-4165-98c7-f0ac6496d0eb" + kafka: + bootstrap-servers: 10.201.216.25:9092,10.201.216.26:9093,10.201.216.27:9094 + auto-offset-reset: latest + group-id: + discharge: phr-discharge + topic: + discharge-start-notification: adt-discharge-start-notification.t + discharge-clear-notification: adt-discharge-clear-notification.t + discharge-summary-clear-notification: adt-discharge-summary-clear-notification.t +app: + procedure: + code: + iv : "01002008251" + urinary : "01002008302" + ventilator: "01002008352" + ssi : "01002008356" + mdro : "01002008301" + mrsa : "01002008351" + cl: "01002060852" +elasticsearch: + cluster-nodes: 10.201.216.63:9200 + index-name: patient-snapshot-uat + +logging: + level: + com: + csi: + phr: DEBUG diff --git a/Config-Server/configrepo/application-net-hmg-uat.yml b/Config-Server/configrepo/application-net-hmg-uat.yml new file mode 100755 index 0000000..f91bb08 --- /dev/null +++ b/Config-Server/configrepo/application-net-hmg-uat.yml @@ -0,0 +1,390 @@ +--- +# Global Parameters Start ================================================= +env: net-hmg-uat +apiGateway: "https://vida.hmg.edu.sa" +gateway: "http://csi-central-authentication-service/" +contextSkipOn: "HIS_PatientMaster,LAB_LabRequestEventStore,LAB_Procedure_Billing_Code,LAB_Procedure_Billing_Code_Translation, csi_er_PatientJourney, csi_er_UnknownPatientRegistration, csi_er_PatientAdmission, csi_ehr_ip_DischargeDetails,AllergyType,HistoryType,csi_ehr_opd_ProblemMaster,Allergy,AllergyReaction,AllergyReactionMapping,PhysicalExaminationSystem,ProblemMasters,ProblemMasterEventStore,PESClinicMapping,csi_ehr_opd_ProcedureICDMappings,csi_ehr_opd_ProcedurePackageMapping,csi_ehr_opd_SoapExpressTemplate,History,csi_ehr_ip_DischargeRequest,csi_ehr_opd_Procedures" +patientMergeCheck: true + +# Mongo +Mongo: + mongoIpAndPort: &mongoIpAndPort "10.201.216.35:27017" + mongoConString: &mongoConString "mongodb://10.201.216.35:27017" + appLogs: *mongoIpAndPort + +# Kafka +kafka: + servers: "10.201.216.25:9092,10.201.216.26:9093,10.201.216.27:9094" + service_name: default-net + period: 100 + batchSizeLimit: 100 + +# Redis +redis: + client: + # host: "10.201.216.30:3060,10.201.216.31:3060,10.201.216.32:3060" + host: "10.201.216.30:6379,10.201.216.31:6379,10.201.216.32:6379" +# "10.4.41.60:7010,10.4.41.60:7011,10.4.41.60:7012,10.4.41.61:7013,10.4.41.61:7014,10.4.41.61:7015,10.4.41.62:7016,10.4.41.62:7018" + +# RabbitMQ +rabbitmq_server_id: &rabbitmq_server_id "10.4.41.7" +rabbitmq_server_port: &rabbitmq_server_port 5672 +rabbitmq_server_user: &rabbitmq_server_user "admin" +rabbitmq_server_pwd: &rabbitmq_server_pwd "admin" +rabbitmq_server_vhost: &rabbitmq_server_vhost "~" + +# Database +Provider: "PostgreSQL" +CommandTimoutInMins: 1.0 +database: + host: "10.201.215.11" + # primaryHost: "10.201.215.11" + # secondaryHost: "10.201.215.11" + port: 5432 + serviceName: "HMG_UAT" + transportConnectTimeout: 5 + connectTimeout: 5 + retryDelay: 10 + retryCount: 2 + failOver: "ON" + loadBalance: "off" + lab: + dbName: "HMG_UAT" + userId: "lb_labservice" + password: "hmguat@csi" + labPatient: + dbName: "HMG_UAT" + userId: "lb_patient" + password: "hmguat@csi" + pharmacy: + dbName: "HMG_UAT" + userId: "ph_pharmacy" + password: "hmguat@csi" + bloodBank: + dbName: "HMG_UAT" + userId: "bb_bloodbank" + password: "hmguat@csi" + renal: + dbName: "HMG_UAT" + userId: "re_hemdialy" + password: "hmguat@csi" + erFuncti: + dbName: "HMG_UAT" + userId: "er_erfun" + password: "hmguat@csi" + opdPatient: + dbName: "HMG_UAT" + userId: "eh_npatient" + password: "hmguat@csi" + opdMaster: + dbName: "HMG_UAT" + userId: "eh_nmaster" + password: "hmguat@csi" + ehrDischarge: + dbName: "HMG_UAT" + userId: "eh_ndischarge" + password: "hmguat@csi" + medispan: + provider: "PostgreSQL" + dbName: "HMG_UAT" + userId: "ph_medispan" + password: "hmguat@csi" + himServi: + dbName: "HMG_UAT" + userId: "hm_himservice" + password: "hmguat@csi" + hhc: + dbName: "HMG_UAT" + userId: "csi_hhc" + password: "hmguat@csi" +# Global Parameters End ================================================= + +# Eureka Configuration Starts =========================================== +eureka: + client: + healthcheck: + enabled: true + serviceUrl: "http://eureka:8761/eureka/" + shouldFetchRegistry: false + shouldRegisterWithEureka: false + instance: + healthCheckUrl: "" + preferIpAddress: true +# Eureka Configuration Ends =========================================== + +# Reporting Configuration Starts ====================================== +reportingFrm: "http://csi-reporting-publisher" +Report: + SkipSendToReporting: true + Mongo: + ConnectionString: *mongoConString + DbName: "csi-net-reporting" +RabbitMQ: + Mongo: + ConnectionString: *mongoConString + DbName: "csi-net-rabbitmq" +# Reporting Configuration Ends ====================================== + +# EMPI Configuration Starts ========================================= +empi: + database: + nodes: *mongoIpAndPort + host: "" + rabbitmq: + server: + host: *rabbitmq_server_id + password: *rabbitmq_server_pwd + port: *rabbitmq_server_port + username: *rabbitmq_server_user + virtualhost: *rabbitmq_server_vhost +# EMPI Configuration Ends ========================================= + +# NOTIFICATION Configuration Starts ========================================= + +noty: + database: + nodes: *mongoIpAndPort + host: "" + rabbitmq: + server: + host: *rabbitmq_server_id + password: *rabbitmq_server_pwd + port: *rabbitmq_server_port + username: *rabbitmq_server_user + virtualhost: ~ + +# NOTIFICATION Configuration Ends ========================================= + +# BLOOD-BANK Configuration Starts ========================================= +bloodbank: + econcentUrl: "https://hmgvidau.hmg.com.sa" +# BLOOD-BANK Configuration Ends ========================================= + +# LAB Configuration Starts ========================================= +patientServiceUri: "http://csi-net-patients/api/patient/" +lab-rabbitmq: + server: + password: *rabbitmq_server_pwd + port: *rabbitmq_server_port + serverId: *rabbitmq_server_id + username: *rabbitmq_server_user + +rabbitmq: + server: + password: *rabbitmq_server_pwd + port: *rabbitmq_server_port + serverId: *rabbitmq_server_id + username: *rabbitmq_server_user +rabbitmqDebug: + server: + password: *rabbitmq_server_pwd + port: *rabbitmq_server_port + serverId: *rabbitmq_server_id + username: *rabbitmq_server_user +# LAB Configuration Ends ========================================= + +# EHR Configuration Starts ========================================= + +ehr-rabbitmq: + server: + password: *rabbitmq_server_pwd + port: *rabbitmq_server_port + serverId: *rabbitmq_server_id + username: *rabbitmq_server_user + +# EHR Configuration Ends ========================================= + +# RENAL Configuration Starts ========================================= + +renal: + adtMachineOwnStrId: "0" + adtMachineCode: "7" + +# RENAL Configuration Ends ========================================= + +# ELK Stack Configuration Start ============================================== + +Elk: + KafkaTopic: "log-sinks-kafka-hmg-uat" +# ELK Stack Configuration Ends ============================================== + +# Elastic Apm start ============================================== + +# Elastic Apm Ends ============================================== + +ElasticApm: + ServerUrls: "http://10.201.216.60:8200/" + Recording: true + +# Service Specific URL Start ============================================== + +ServiceURIS: + ADTMasterDataURI: "http://csi-pms-rms-masterdata/amd-masterdata/" + AdmissionURI: "http://csi-java-ehr-ip/ehr/ip/doctor/read/admission" + AdtIntegrationQueURI: "http://csi-java-ehr-listener/" + BulkCURI: "http://csi-pms-rms-masterdata/amd-masterdata/getAllByIds" + BulkNSURI: "http://csi-net-ehr-ip-discharg/api/NDsummary/IsExistNDsummaryDTOByPomrList" + BulkNURI: "http://csi-net-empiread/api/patient/bulk" + ClinicURI: "http://csi-java-ehr-patient-pomr/ehr/opd/pomr/byPomrIds" + PomrUriByPomrIdAndPatient: "http://csi-java-ehr-patient-pomr/ehr/opd/pomr/byPomrIdAndPatientId?" + DeathNotificationURI: "http://csi-pms-adt-request/death/save" + DischargeDetailsURI: "http://csi-net-ehr-ip-discharg/api/DischargeDetails" + DischargeQueURI: "http://csi-java-ehr-listener/summary-clear" + EMPIURI: "http://csi-net-empiread/api/patient/" + IDTURI: "http://csi-java-ehr-ip/interDepartmentTransfer/" + IPDURI: "http://csi-java-ehr-ip/ehr/ip/doctor/read/admission/getAdmissions" + InitialAssesURI: "http://csi-java-ehr-ip-initial-assessment-read/ehr/initialAssessment/read/getInitialAssessmentByFieldIds" + MasterURI: "http://csi-net-ehr-opd-master/api/EHRMaster/" + MedicationsURI: "http://csi-java-ehr-ip-doctor-prescription/api/prescription/" + MrpURI: "http://csi-java-ehr-ip/ehr/ip/doctor/read/carePlan/mrp/validate-all-discharge-goals?" + NGroupURI: "http://csi-pms-rms-masterdata/amd-masterdata/getById?" + NsumURI: "http://csi-net-ehr-ip-discharg/api/NDsummary/IsNDSummaryExist/" + OPDURI: "http://csi-pms-rms-reservation/reservation/widgetCount" + EHROPDURI: "http://csi-java-ehr-opd/ehr/opd/appointment/widget" + OPDURIN: "http://csi-pms-rms-reservation/reservation/summary/status" + ORURI: "http://csi-java-ehr-or-booking/OR/dashboard/widgets/" + PNameURI: "http://csi-net-empiread/api/patient/pre-formatted/" + PatientProblemsURI: "http://csi-java-ehr-patient-pomr/ehr/opd/patientProblem/" + ProblemMasterURI: "http://csi-net-ehr-opd-master/api/ProblemMaster/" + ProceduresURI: "http://csi-java-ehr-common/ehr/opd/patientOrder/" + RadiologyURI: "http://172.15.100.153:9021/rmw/reports/" + RecurringAppointment: "http://csi-pms-rms-reservation/reservation/recurringAppointment/create" + RecurringAppointmentN: "http://csi-pms-rms-reservation/reservation/recurringAppointment/createcsi-pms-rms-reservation/reservation/recurringappointment/create" + ReferralURI: "http://csi-java-ehr-ip/ehr/opd/referral/" + VitalSignsURI: "http://csi-java-ehr-common/vital-signs/displayV2/patient/" + labReportsURI: "http://csi-net-labsrvcs/api/LabResults/" + IcDashboardUrl: "http://csi-java-ehr-ic-dashboard/" + PatientAllergyUrl: "http://csi-net-ehr-opd-patient/api/" + DocumentManagementUrl: "http://qa.csi.local/document-management/v1/" + ADTEmployeeURI: "http://csi-pms-rms-resource-registry/amd-doctor/" + NGPendingURI: "http://csi-java-bb-service/api/transfusion/request/list/initiated/" + OutOrdReasonURI: "http://csi-pms-rms-masterdata/amd-masterdata/common/get/Procedure/OutOfOrderingReasons/en" + MasterDataSetUpURI: "http://csi-pms-rms-masterdata/amd-masterdata/common/" + ERfunctiUri: "http://csi-net-erfuncti" + EhrService: "http://csi-net-ehr-opd-master" + ReanlWidget: "http://csi-net-hemdialy/api/dashboard/widget-data/" + GlobalConfigService: "http://csi-java-base-utility/base/util/config/key" + GlobalConfigsService: "http://csi-java-base-utility/base/util/config/keys" + OR_dashboard_uri: "http://csi-java-ehr-or-booking/OR/dashboard/" + OrService: "http://csi-java-ehr-or-book/ehr/or/orbook/histopathologyrequest/patientOrderId/" + EhrTemplate: "http://csi-java-ehr-template/" + ProcedureURI: "http://csi-net-ehr-opd-master/api/EHRProcedure/ProcedureByCode/" + patientOrderIdService: "http://csi-java-ehr-common/ehr/opd/patientOrder/generate-patient-order-id" + +serviceurls: + ADTAdmission: "http://csi-pms-adt-request/" + ADTAdmissionUrl: "http://csi-pms-adt-request/admission-request/" + ADTEmployeeUrl: "http://csi-pms-rms-resource-registry/amd-doctor/" + AdmissionData: "http://csi-java-ehr-ip" + AdmissionUrl: "http://csi-java-ehr-ip/ehr/ip/doctor/read/admission/" + BBDonation: "http://csi-net-bloodbnk/api/Donation/" + BloodBank: "http://csi-net-bloodbnk/api/1.0" + EMPIUrl: "http://csi-net-empiread/api/patient/" + EMPIWriteUrl: "http://csi-net-empiwrit/api/" + ERConfigUrl: "https://csi-java-ehr-er-config-read/ehr/config/read/" + FallRiskScoreUrl: "http://csi-java-ehr-opd-riskassessment/nurse/risk-assessment/" + HospitalDetails: "http://csi-pms-rms-masterdata/amd-masterdata/getHospitalById/" + IPAdmissionUrl: "http://csi-java-ehr-ip/ehr/ip/doctor/" + ReferralsBaseUrl: "http://csi-java-ehr-ip/ehr/opd/" + MARUrl: "" + MachineDetails: "http://csi-pms-rms-resource-registry/" + NotificationService: "http://csi-net-noty/api/Notifications" + NursingGroup: "http://csi-pms-rms-masterdata/amd-masterdata/" + OrderUrl: "http://csi-java-ehr-common/ehr/opd/patientOrder/" + POMRData: "http://csi-java-ehr-patient-pomr" + PatientChronicUrl: "http://csi-java-ehr-patient-pomr/ehr/opd/patientProblem/" + PatientData: "http://csi-net-empiread/api/patient/pre-formatted/" + PatientPOMRUrl: "http://csi-java-ehr-patient-pomr/" + ProgressNoteUrl: "http://csi-java-ehr-opd/ehr/opd/soap/progressNote/" + RadiologyReportsUrl: "http://csi-java-ehr-common/ehr/opd/radiologyRequest/" + RenalService: "http://csi-net-hemdialy/api/RunSheets" + ReservationUrl: "http://csi-pms-rms-reservation/schedule/reservation/" + SoapUrl: "http://csi-java-ehr-opd/ehr/opd/soap/" + TaskListUrl: "http://csi-java-ehr-common/task-list/" + UserManagement: "http://service-base-security-token/" + UserToken: "http://csi-central-authentication-service/service-base-security-token/" + VitalsUrl: "http://csi-java-ehr-common/vital-signs/displayV2/" + amdService: "http://172.15.100.142:10011/amd-doctor/" + empiwritpatientservice: "http://csi-net-empiwrit/api/patients" + ftplocation: "http://csi-net-ftparchv/api/FTPArchive/ArchivetoFTP" + histopathology: "http://csi-net-histopat/api/Histopathology/" + invService: "http://csi-net-phrmi/api/" + labOrder: "http://csi-net-labsrvcs/api/LabOrder/" + labresult: "http://csi-net-labsrvcs/api/LabResults/" + labusermanagement: "http://csi-net-usermgmt/" + medAdmService: "http://csi-java-phr-item-master-rw/api/" + notification: TestURL + parameterService: "http://csi-java-phr-item-master-rw/api/itemMaster/parameter/paramSummary/" + patientservice: "http://csi-net-patients/api/Patient/" + userpermission: "http://service-base-security-token/token/logged-in-user" + PomrUri: "http://csi-java-ehr-patient-pomr/ehr/opd/pomr/byPatientId?" + IpUrl: "http://csi-java-ehr-ip/ehr/ip/" + servicebaseuser: "http://service-base-user/user/get/" + PatientAllergyUrl: "http://csi-net-ehr-opd-patient/api/" + BloodTransfusionRequestUrl: "http://csi-net-bloodbnk-mgt/api/1.0/bloodRequest/all" + #BloodTransfusionRequestUrl: "http://csi-java-blood-transfusion/blood-transfusion/bloodRequest/all" + PharmacyService: "http://csi-phr-base/api/" + inventorySaveUrl: "http://csi-net-bloodbnk-mgt/api/1.0/inventory/unit/save" + #inventorySaveUrl: "http://csi-java-bb-service/api/inventory/unit/save" + inventoryDeleteUrl: "http://csi-net-bloodbnk-mgt/api/1.0/inventory/unit/delete/" + #inventoryDeleteUrl: "http://csi-java-bb-service/api/inventory/unit/delete/" + EmpiWriteService: "http://csi-net-empiwrit/api/" + MasterDataSetUpURI: "http://csi-pms-rms-masterdata/amd-masterdata/common/" + ADTReservation: "http://csi-pms-rms-reservation/" + UserService: "http://csi-iam-service/auth/realms/master/csi-user-detail/user-by-id/" + GlobalConfigService: "http://csi-java-base-utility/base/util/config/key" + UserService2: "http://csi-iam-service/auth/realms/hmgvidau/csi-user-detail/" + SpecializedClinicService: "http://csi-java-ehr-specialized-clinic/" + bloodbankJavaService: "http://csi-net-bloodbnk-mgt/api/1.0" + #bloodbankJavaService: "http://csi-java-bb-service/api" + OrService: "http://csi-java-ehr-or-book/ehr/or/orbook/histopathologyrequest/patientOrderId/" + DMSFileUrl: "http://document-management-middleware/v1/download/getFile?fileHash=" + DMSImagesDelete: "http://document-management-middleware/v1/document/delete-multiple" + ErPatientAssigneeUri : "http://csi-net-erfuncti/api/ERDashboard/GetPatientAssignees" + ImagePropertyUrl: "http://document-management-middleware/v1/property/all-properties" + PomrForPomrId: "http://csi-java-ehr-patient-pomr/ehr/opd/pomr/byPomrId?" + ClinicDetails": "http://csi-pms-rms-masterdata/amd-masterdata/clinic/getById/" + empiReadService: "http://csi-net-empiread/api" + EHRCommon: "http://csi-java-ehr-common" + NewVitalUrl: "http://csi-java-ehr-common/vital-signs//displayV2/patient/" + GlobalConfigsService: "http://csi-java-base-utility/base/util/config/keys" + EBPConfigUrl: "http://csi-bm-billing/billing/payer-group/ebp-config/patient/" + +UrlOptions: + FormTemplateUrl: "http://csi-net-empiread/api/RegistrationFormTemplate" + PatientSearchServiceUrl: "http://csi-net-empiread/api/patient" + BillingGetAccountIdUrl: "http://csi-bm-invoice/billing/account/create" + UserServiceEndPoint: "http://csi-iam-service/auth/realms/master/csi-user-detail/" + BillingDefaultPayerEndPoint: "http://csi-bm-billing/billing/payer-group/get-default" + BillingSearchPayerContract: "http://csi-bm-billing/billing/payer-contract/search" + BillingSearchPayerPolicy: "http://csi-bm-billing/billing/payer-contract-policies/search" + BaseUtilityServiceUrl: "http://csi-java-base-utility" + EHRPatientPOMRUrl: "http://csi-java-ehr-patient-pomr" + RMSReservationServiceUrl: "http://csi-pms-rms-reservation" + ADTRequestUrl: "http://csi-pms-adt-request" + EHRPatientIpUrl: "http://csi-java-ehr-ip/ehr/ip/doctor/read/carePlan/getMrpIdsAndNursingGroupId" + PHRRequestUrl: "http://csi-phr-base/api/v1.0/masterData/txnUsersList" + LABRequestUrl: "http://csi-net-labsrvcs/api/UserManagement/AllUsersForLabRoles" + RMSResourceRegistryUrl: "http://csi-pms-rms-resource-registry/amd-doctor/search" + IEGenaralUrl: "http://csi-ie-general/api/patient" + + # Service Specific URLs End ============================================== +BloodBankUserRoles: + - "Blood Bank Doctor" + - "BB Technician" +LabMiddlewareEnabledGroups: + - "105" +LabBarcodeGenLogicName: "HMGBarcodeLogic" #"MOHBarcodeLogic" # MOHBarcodeLogic or DQBarcodeLogic +IsKafkaEnabledForEMPI: "true" +Serilog: + Using: + - "Serilog.Sinks.Kafka" + WriteTo: + - Name: "Kafka" + Args: + batchSizeLimit: 50 + period: 5 + brokers: "10.201.216.25:9092,10.201.216.26:9093,10.201.216.27:9094" + topic: "log-sinks-kafka-hmg-uat" + Properties: + Application: "Kafka" diff --git a/Config-Server/configrepo/application.yml b/Config-Server/configrepo/application.yml new file mode 100755 index 0000000..863601e --- /dev/null +++ b/Config-Server/configrepo/application.yml @@ -0,0 +1,44 @@ +--- +AppSettings: + CacheDbResults: true + SiteTitle: "Application.yml" + AppName: "test App" +kafka: + brokers: "10.201.216.25:9092,10.201.216.26:9093,10.201.216.27:9094" + topic: csi_demo_final + batchSizeLimit: 50 + period: 1 +reportingFrm: "http://172.15.100.60:9020" +eureka: + server: + enableSelfPreservation: false + instance: + leaseRenewalIntervalInSeconds: 1 + leaseExpirationDurationInSeconds: 2 +spring: + datasource: + tomcat: + min-evictable-idle-time-millis: 200000 + max-active: 30 + max-idle: 2 + min-idle: 1 + max-age: 200000 + hikari: + minimum-idle: 2 + maximum-pool-size: 40 + connection-timeout: 30000 + idle-timeout: 10000 + max-lifetime: 40000 + data-source-properties: + oracle: + net: + CONNECT_TIMEOUT: 30000 + READ_TIMEOUT: 30000 + jdbc: + ReadTimeout: 30000 + jpa: + properties: + javax: + persistence: + query: + timeout: 30000 diff --git a/Config-Server/configrepo/configfile.zip b/Config-Server/configrepo/configfile.zip new file mode 100644 index 0000000000000000000000000000000000000000..fd3f6c8b1e19d93bfe7f73f920976f5b0efc2965 GIT binary patch literal 117258 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 z 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

q8{m0bro)!!ROl&rGL-Xzz`%)IusxkhGWWbe!} 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

6tz7n7rtjB}{wF3Sbi9h>$L8jJ6{8 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%0DeSW9mEcJN=D$s8O%fru{hH{ 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

i$kekP*~PTeW9Lvl%y9DTz2j4>}b;L2@uQ`--U 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 ih(C|90Ho_